diff --git a/.github/workflows/ci-fast.yml b/.github/workflows/ci-fast.yml index 0cd515dd8..20858772e 100644 --- a/.github/workflows/ci-fast.yml +++ b/.github/workflows/ci-fast.yml @@ -155,13 +155,16 @@ jobs: - name: TypeScript unit tests # The per-package vitest suites (commands receiver twins, bindings - # loader/error mapping, core schemas) — `test:ts` above is - # typecheck-only, so without this step they never ran in CI. Must run - # after the dev-addon build: the bindings kv/queue/storage/vault - # suites load the native addon. + # loader/error mapping, core schemas) and generated SDK wire contracts. + # `test:ts` above is typecheck-only, so without this step + # they never ran in CI. Must run after the dev-addon build: the bindings + # kv/queue/storage/vault suites load the native addon. env: NODE_OPTIONS: "--max-old-space-size=8192" - run: pnpm --filter @alienplatform/core --filter @alienplatform/bindings --filter @alienplatform/commands test + run: | + pnpm --filter @alienplatform/core --filter @alienplatform/bindings --filter @alienplatform/commands test + pnpm test:manager-sdk-wire + pnpm test:platform-sdk-wire - name: Rust fast tests (non-cloud) env: @@ -180,6 +183,16 @@ jobs: --exclude alien-test-server \ --filter-expr 'not binary_id(alien-build::build_integration_tests) and not binary_id(alien-build::image_shape_tests) and not binary_id(alien-build::rust_integration_tests) and not binary_id(alien-build::typescript_integration_tests) and not binary_id(alien-worker-runtime::lambda) and not binary_id(alien-test::distribution) and not binary_id(alien-test::pull) and not binary_id(alien-test::push) and not binary_id(alien-manager::registry_proxy_cloud_test)' + - name: Manager OpenAPI security contract + run: cargo test -p alien-manager --features openapi --lib api::tests::openapi_declares_http_bearer_security_without_dropping_schemas + + - name: Remote bindings tests (non-cloud) + run: | + depot cargo test -p alien-bindings --features platform-sdk --lib remote:: + depot cargo test -p alien-aws-clients --lib + depot cargo test -p alien-gcp-clients --lib + depot cargo test -p alien-azure-clients --lib user_delegation_sas + - name: Build all CLIs if: steps.changes.outcome != 'success' || steps.changes.outputs.examples == 'true' || github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/main' run: depot cargo build -p alien-cli -p alien-deploy-cli -p alien-operator diff --git a/.github/workflows/ci-fork.yml b/.github/workflows/ci-fork.yml index 679e8e922..fd41e089e 100644 --- a/.github/workflows/ci-fork.yml +++ b/.github/workflows/ci-fork.yml @@ -89,6 +89,13 @@ jobs: NODE_OPTIONS: "--max-old-space-size=8192" run: pnpm test:ts + - name: Generated SDK wire contracts + env: + NODE_OPTIONS: "--max-old-space-size=8192" + run: | + pnpm test:manager-sdk-wire + pnpm test:platform-sdk-wire + - name: Rust tests (non-cloud) run: | cargo nextest run --workspace \ @@ -101,3 +108,10 @@ jobs: --exclude endpoint-agent \ --exclude alien-test-server \ --filter-expr 'not binary_id(alien-build::build_integration_tests) and not binary_id(alien-build::image_shape_tests) and not binary_id(alien-build::rust_integration_tests) and not binary_id(alien-build::typescript_integration_tests) and not binary_id(alien-worker-runtime::lambda) and not binary_id(alien-test::distribution) and not binary_id(alien-test::pull) and not binary_id(alien-test::push) and not binary_id(alien-manager::registry_proxy_cloud_test)' + + - name: Remote bindings tests (non-cloud) + run: | + cargo test -p alien-bindings --features platform-sdk --lib remote:: + cargo test -p alien-aws-clients --lib + cargo test -p alien-gcp-clients --lib + cargo test -p alien-azure-clients --lib user_delegation_sas diff --git a/.github/workflows/e2e-cloud.yml b/.github/workflows/e2e-cloud.yml index 939e5716c..5561c11d8 100644 --- a/.github/workflows/e2e-cloud.yml +++ b/.github/workflows/e2e-cloud.yml @@ -129,11 +129,11 @@ on: pull_request: types: [opened, reopened, synchronize, labeled] -# Every run currently shares ALIEN_E2E_SLOT 03. Serialize the complete workflow -# so a newer run cannot reuse resources while an older run is still testing or +# Every run shares ALIEN_E2E_SLOT 10. Serialize the complete workflow so a +# newer run cannot reuse resources while an older run is still testing or # cleaning them up. concurrency: - group: e2e-tests-slot-03 + group: e2e-tests-slot-10 cancel-in-progress: false permissions: @@ -142,7 +142,7 @@ permissions: packages: write env: - ALIEN_E2E_SLOT: "03" + ALIEN_E2E_SLOT: "10" # Fall back to local compilation when the shared sccache backend returns a # transient error (e.g. webdav 403) instead of failing the whole build. SCCACHE_IGNORE_SERVER_IO_ERROR: "1" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1fb32e198..7f9b90dda 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -95,7 +95,7 @@ jobs: env: VERSION: ${{ steps.bump.outputs.version }} - - name: Set npm package versions + - name: Set JavaScript package versions run: | VERSION="${{ steps.bump.outputs.version }}" # The bindings addon ships as a wrapper + per-platform prebuild packages @@ -114,6 +114,60 @@ jobs: fs.writeFileSync(path, content.replace(/\"version\": \"[^\"]*\"/, '\"version\": \"${VERSION}\"')); " done + # Both generated SDKs publish a JSR manifest alongside package.json. + # Keep the two registries on the release version. + node -e " + const fs = require('fs'); + for (const path of [ + 'client-sdks/platform/typescript/jsr.json', + 'client-sdks/manager/typescript/jsr.json', + ]) { + const content = fs.readFileSync(path, 'utf8'); + fs.writeFileSync(path, content.replace(/\"version\": \"[^\"]*\"/, '\"version\": \"${VERSION}\"')); + } + " + # Speakeasy emits npm locks for both SDKs and the Manager examples. + # Stamp embedded package metadata alongside the publish manifests. + node -e " + const fs = require('fs'); + for (const sdk of ['platform', 'manager']) { + const lockPath = 'client-sdks/' + sdk + '/typescript/package-lock.json'; + const lock = JSON.parse(fs.readFileSync(lockPath, 'utf8')); + lock.version = '${VERSION}'; + lock.packages[''].version = '${VERSION}'; + fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\\n'); + } + + const examplesLockPath = 'client-sdks/manager/typescript/examples/package-lock.json'; + const examplesLock = JSON.parse(fs.readFileSync(examplesLockPath, 'utf8')); + examplesLock.packages['..'].version = '${VERSION}'; + fs.writeFileSync(examplesLockPath, JSON.stringify(examplesLock, null, 2) + '\\n'); + " + # Both checked-in generation workflows use the version from gen.yaml. + # Advance them with the release so later regeneration cannot reset manifests. + node -e " + const fs = require('fs'); + for (const sdk of ['platform', 'manager']) { + const root = 'client-sdks/' + sdk + '/typescript/.speakeasy/'; + const configPath = root + 'gen.yaml'; + const config = fs.readFileSync(configPath, 'utf8'); + const updatedConfig = config.replace( + /(typescript:\\n version: )[^\\n]+/, + (_, prefix) => prefix + '${VERSION}', + ); + if (updatedConfig === config) throw new Error(sdk + ' SDK version not found in gen.yaml'); + fs.writeFileSync(configPath, updatedConfig); + + const lockPath = root + 'gen.lock'; + const lock = fs.readFileSync(lockPath, 'utf8'); + const updatedLock = lock.replace( + /( releaseVersion: )[^\\n]+/, + (_, prefix) => prefix + '${VERSION}', + ); + if (updatedLock === lock) throw new Error(sdk + ' SDK releaseVersion not found in gen.lock'); + fs.writeFileSync(lockPath, updatedLock); + } + " # Dry-run build jobs start from the untagged commit, so carry the exact # versioned manifests that a real release would commit into those fresh @@ -132,7 +186,16 @@ jobs: packages/sdk/package.json packages/testing/package.json client-sdks/platform/typescript/package.json + client-sdks/platform/typescript/jsr.json + client-sdks/platform/typescript/package-lock.json + client-sdks/platform/typescript/.speakeasy/gen.yaml + client-sdks/platform/typescript/.speakeasy/gen.lock client-sdks/manager/typescript/package.json + client-sdks/manager/typescript/jsr.json + client-sdks/manager/typescript/package-lock.json + client-sdks/manager/typescript/examples/package-lock.json + client-sdks/manager/typescript/.speakeasy/gen.yaml + client-sdks/manager/typescript/.speakeasy/gen.lock packages/bindings/package.json crates/alien-bindings-node/package.json packages/bindings/npm/darwin-arm64/package.json @@ -148,7 +211,13 @@ jobs: git config user.email "github-actions[bot]@users.noreply.github.com" git add Cargo.toml packages/core/package.json packages/commands/package.json \ packages/sdk/package.json packages/testing/package.json \ - client-sdks/platform/typescript/package.json client-sdks/manager/typescript/package.json \ + client-sdks/platform/typescript/package.json client-sdks/platform/typescript/jsr.json \ + client-sdks/platform/typescript/package-lock.json client-sdks/platform/typescript/.speakeasy/gen.yaml \ + client-sdks/platform/typescript/.speakeasy/gen.lock \ + client-sdks/manager/typescript/package.json client-sdks/manager/typescript/jsr.json \ + client-sdks/manager/typescript/package-lock.json client-sdks/manager/typescript/examples/package-lock.json \ + client-sdks/manager/typescript/.speakeasy/gen.yaml \ + client-sdks/manager/typescript/.speakeasy/gen.lock \ packages/bindings/package.json crates/alien-bindings-node/package.json \ packages/bindings/npm/darwin-arm64/package.json packages/bindings/npm/darwin-x64/package.json \ packages/bindings/npm/linux-x64-gnu/package.json packages/bindings/npm/linux-arm64-gnu/package.json diff --git a/Cargo.lock b/Cargo.lock index 823832b2a..18649328b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "alien-aws-clients" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-client-core", @@ -127,7 +127,7 @@ dependencies = [ [[package]] name = "alien-azure-clients" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-client-core", "alien-core", @@ -147,6 +147,7 @@ dependencies = [ "pem", "prettyplease", "progenitor", + "quick-xml 0.37.5", "quote", "rand 0.9.4", "rcgen", @@ -171,7 +172,7 @@ dependencies = [ [[package]] name = "alien-bindings" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", @@ -181,6 +182,7 @@ dependencies = [ "alien-error", "alien-gcp-clients", "alien-k8s-clients", + "alien-manager-api", "alien-platform-api", "async-trait", "axum 0.8.9", @@ -215,7 +217,7 @@ dependencies = [ [[package]] name = "alien-bindings-node" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-bindings", "alien-error", @@ -232,7 +234,7 @@ dependencies = [ [[package]] name = "alien-build" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-build", "alien-core", @@ -266,7 +268,7 @@ dependencies = [ [[package]] name = "alien-cli" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-bindings", "alien-build", @@ -337,7 +339,7 @@ dependencies = [ [[package]] name = "alien-cli-common" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "alien-deployment", @@ -351,7 +353,7 @@ dependencies = [ [[package]] name = "alien-client-config" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", @@ -369,7 +371,7 @@ dependencies = [ [[package]] name = "alien-client-core" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error", "anyhow", @@ -388,7 +390,7 @@ dependencies = [ [[package]] name = "alien-cloudformation" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "alien-error", @@ -403,7 +405,7 @@ dependencies = [ [[package]] name = "alien-commands" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", @@ -441,7 +443,7 @@ dependencies = [ [[package]] name = "alien-commands-client" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "base64 0.22.1", @@ -456,7 +458,7 @@ dependencies = [ [[package]] name = "alien-core" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error", "alien-macros", @@ -488,7 +490,7 @@ dependencies = [ [[package]] name = "alien-deploy-cli" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-cli-common", "alien-core", @@ -531,7 +533,7 @@ dependencies = [ [[package]] name = "alien-deployment" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", @@ -562,7 +564,7 @@ dependencies = [ [[package]] name = "alien-error" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error-derive", "anyhow", @@ -575,7 +577,7 @@ dependencies = [ [[package]] name = "alien-error-derive" -version = "2.0.2" +version = "2.1.6" dependencies = [ "proc-macro2", "quote", @@ -585,7 +587,7 @@ dependencies = [ [[package]] name = "alien-gcp-clients" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-client-core", "alien-core", @@ -618,7 +620,7 @@ dependencies = [ [[package]] name = "alien-helm" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "alien-error", @@ -632,7 +634,7 @@ dependencies = [ [[package]] name = "alien-infra" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", @@ -692,7 +694,7 @@ dependencies = [ [[package]] name = "alien-k8s-clients" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-client-core", "alien-core", @@ -721,7 +723,7 @@ dependencies = [ [[package]] name = "alien-local" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-bindings", "alien-build", @@ -764,7 +766,7 @@ dependencies = [ [[package]] name = "alien-macros" -version = "2.0.2" +version = "2.1.6" dependencies = [ "proc-macro2", "quote", @@ -773,9 +775,10 @@ dependencies = [ [[package]] name = "alien-manager" -version = "2.0.2" +version = "2.1.6" dependencies = [ "aegis", + "alien-aws-clients", "alien-azure-clients", "alien-bindings", "alien-client-config", @@ -786,6 +789,7 @@ dependencies = [ "alien-gcp-clients", "alien-infra", "alien-local", + "alien-permissions", "alien-preflights", "async-trait", "axum 0.8.9", @@ -804,6 +808,7 @@ dependencies = [ "hmac 0.12.1", "http 1.4.2", "http-body-util", + "httpmock", "nanoid", "ngrok", "oci-client", @@ -834,7 +839,7 @@ dependencies = [ [[package]] name = "alien-manager-api" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error", "chrono", @@ -853,7 +858,7 @@ dependencies = [ [[package]] name = "alien-observer" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", @@ -873,7 +878,7 @@ dependencies = [ [[package]] name = "alien-operator" -version = "2.0.2" +version = "2.1.6" dependencies = [ "aegis", "alien-client-config", @@ -917,7 +922,7 @@ dependencies = [ [[package]] name = "alien-permissions" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "alien-error", @@ -936,7 +941,7 @@ dependencies = [ [[package]] name = "alien-platform-api" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error", "chrono", @@ -955,7 +960,7 @@ dependencies = [ [[package]] name = "alien-preflights" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "alien-error", @@ -972,7 +977,7 @@ dependencies = [ [[package]] name = "alien-sdk" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-bindings", "alien-core", @@ -994,7 +999,7 @@ dependencies = [ [[package]] name = "alien-terraform" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-core", "alien-error", @@ -1009,10 +1014,11 @@ dependencies = [ [[package]] name = "alien-test" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-aws-clients", "alien-azure-clients", + "alien-bindings", "alien-build", "alien-client-config", "alien-cloudformation", @@ -1029,13 +1035,16 @@ dependencies = [ "alien-terraform", "anyhow", "async-trait", + "axum 0.8.9", "base64 0.22.1", "chrono", "dockdash", "dotenvy", + "futures", "hex", "libc", "ngrok", + "object_store", "rand 0.9.4", "reqwest 0.12.28", "rustls 0.23.41", @@ -1056,7 +1065,7 @@ dependencies = [ [[package]] name = "alien-test-app" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error", "alien-sdk", @@ -1102,7 +1111,7 @@ dependencies = [ [[package]] name = "alien-worker-protocol" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-error", "async-stream", @@ -1121,7 +1130,7 @@ dependencies = [ [[package]] name = "alien-worker-runtime" -version = "2.0.2" +version = "2.1.6" dependencies = [ "alien-bindings", "alien-commands", diff --git a/client-sdks/manager/openapi-3.0.json b/client-sdks/manager/openapi-3.0.json index 0cae73455..ccd85ed5c 100644 --- a/client-sdks/manager/openapi-3.0.json +++ b/client-sdks/manager/openapi-3.0.json @@ -4,7 +4,7 @@ "title": "Alien Manager API", "description": "Control plane for Alien applications. Manages deployments, releases, commands, and telemetry.", "license": { - "name": "" + "name": "FSL-1.1-Apache-2.0" }, "version": "1.0.0" }, @@ -29,6 +29,81 @@ } } }, + "/v1/bindings/resolve": { + "post": { + "tags": [ + "bindings" + ], + "operationId": "resolve_binding", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Remote binding resolved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingResponse" + } + } + } + }, + "400": { + "description": "The deployment, release, or binding is not eligible for remote access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "401": { + "description": "Authentication is required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "403": { + "description": "The caller cannot resolve bindings for this deployment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "404": { + "description": "The deployment, release, or binding was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, "/v1/commands": { "post": { "tags": [ @@ -462,6 +537,41 @@ } } }, + "/v1/credentials/mint": { + "post": { + "tags": [ + "credentials" + ], + "operationId": "mint_credentials", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MintCredentialsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Credentials minted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MintCredentialsResponse" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, "/v1/deployment-groups": { "get": { "tags": [ @@ -616,6 +726,15 @@ "type": "string" } }, + { + "name": "name", + "in": "query", + "description": "Filter by exact deployment name. Requires deploymentGroupId unless the token is scoped to a deployment group.", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "include", "in": "query", @@ -1052,41 +1171,6 @@ ] } }, - "/v1/resolve-credentials": { - "post": { - "tags": [ - "credentials" - ], - "operationId": "resolve_credentials", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Credentials resolved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsResponse" - } - } - } - } - }, - "security": [ - { - "bearer": [] - } - ] - } - }, "/v1/stack/import": { "post": { "tags": [ @@ -1312,9 +1396,14 @@ "AcquireRequest": { "type": "object", "required": [ - "session" + "session", + "deploymentModel" ], "properties": { + "acquireMode": { + "type": "string", + "nullable": true + }, "deploymentIds": { "type": "array", "items": { @@ -1322,6 +1411,9 @@ }, "nullable": true }, + "deploymentModel": { + "$ref": "#/components/schemas/DeploymentModel" + }, "limit": { "type": "integer", "format": "int32", @@ -1337,6 +1429,10 @@ "session": { "type": "string" }, + "setupMethod": { + "type": "string", + "nullable": true + }, "statuses": { "type": "array", "items": { @@ -1375,11 +1471,34 @@ "deploymentId" ], "properties": { + "capabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OperatorCapabilityReport" + } + }, "currentState": { "description": "Current deployment state as reported by the agent.\nWhen present, the manager updates the deployment record to reflect\nthe agent's progress (status, stack_state, etc.)." }, "deploymentId": { "type": "string" + }, + "observedInventoryBatches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ObservedInventoryBatch" + } + }, + "operatorVersion": { + "type": "string", + "nullable": true + }, + "resourceHeartbeats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResourceHeartbeat" + }, + "description": "Managed resource status samples emitted by pull-mode deployment steps." } } }, @@ -1388,7 +1507,7 @@ "properties": { "commandsUrl": { "type": "string", - "description": "Public URL for the commands API. Cloud-deployed workers use this\nto poll for pending commands instead of the agent's local sync URL.", + "description": "Public URL for the commands API. Operators and app-owned receivers use\nit to lease pending commands instead of the agent's local sync URL.", "nullable": true }, "currentState": { @@ -1571,6 +1690,69 @@ } } }, + "AuroraPostgresHeartbeatData": { + "type": "object", + "required": [ + "status", + "clusterIdentifier", + "neverPauses" + ], + "properties": { + "clusterIdentifier": { + "type": "string" + }, + "endpoint": { + "type": "string", + "nullable": true + }, + "engineVersion": { + "type": "string", + "nullable": true + }, + "neverPauses": { + "type": "boolean", + "description": "True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)." + }, + "serverlessCapacity": { + "type": "number", + "format": "double", + "description": "Latest sampled `ServerlessDatabaseCapacity` (ACU).", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/PostgresHeartbeatStatus" + } + } + }, + "AwsClientConfig": { + "type": "object", + "description": "AWS client configuration", + "required": [ + "accountId", + "region", + "credentials" + ], + "properties": { + "accountId": { + "type": "string", + "description": "The AWS Account ID." + }, + "credentials": { + "$ref": "#/components/schemas/AwsCredentials", + "description": "AWS authentication credentials." + }, + "region": { + "type": "string", + "description": "The AWS region." + }, + "serviceOverrides": { + "$ref": "#/components/schemas/AwsServiceOverrides", + "description": "Service endpoint overrides for testing", + "nullable": true + } + }, + "additionalProperties": false + }, "AwsCodeBuildHeartbeatData": { "type": "object", "required": [ @@ -1717,47 +1899,176 @@ } } }, - "AwsCustomCertificateConfig": { - "type": "object", - "required": [ - "certificateArn" - ], - "properties": { - "certificateArn": { - "type": "string" - } - } - }, - "AwsDaemonHeartbeatData": { - "type": "object", - "required": [ - "status", - "horizonClusterId", - "daemonName", - "horizonStatus", - "capacityGroup", - "desiredMachines", - "assignedMachines", - "healthyInstances", - "unavailableInstances", - "commandSupported", - "latestUpdateTimestamp", - "daemonInstances", - "events" - ], - "properties": { - "assignedMachines": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "capacityGroup": { - "type": "string" - }, - "commandSupported": { - "type": "boolean" + "AwsCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Static direct access keys.", + "required": [ + "access_key_id", + "secret_access_key", + "type" + ], + "properties": { + "access_key_id": { + "type": "string", + "description": "AWS Access Key ID" + }, + "secret_access_key": { + "type": "string", + "description": "AWS Secret Access Key" + }, + "session_token": { + "type": "string", + "description": "Optional AWS Session Token", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "accessKeys" + ] + } + } }, - "daemonInstances": { + { + "type": "object", + "description": "Temporary AWS session credentials with an expiration time.", + "required": [ + "access_key_id", + "secret_access_key", + "session_token", + "expires_at", + "type" + ], + "properties": { + "access_key_id": { + "type": "string", + "description": "AWS Access Key ID" + }, + "expires_at": { + "type": "string", + "description": "Credential expiration as an RFC3339 timestamp" + }, + "secret_access_key": { + "type": "string", + "description": "AWS Secret Access Key" + }, + "session_token": { + "type": "string", + "description": "AWS Session Token" + }, + "type": { + "type": "string", + "enum": [ + "sessionCredentials" + ] + } + } + }, + { + "type": "object", + "description": "AWS Instance Metadata Service credentials.", + "required": [ + "type" + ], + "properties": { + "endpoint": { + "type": "string", + "description": "Optional IMDS endpoint override", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "imds" + ] + } + } + }, + { + "type": "object", + "description": "AWS profile credentials loaded via the AWS CLI.", + "required": [ + "name", + "type" + ], + "properties": { + "name": { + "type": "string", + "description": "AWS profile name" + }, + "type": { + "type": "string", + "enum": [ + "profile" + ] + } + } + }, + { + "type": "object", + "description": "Web Identity Token for OIDC authentication", + "required": [ + "config", + "type" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/AwsWebIdentityConfig", + "description": "Web identity configuration" + }, + "type": { + "type": "string", + "enum": [ + "webIdentity" + ] + } + } + } + ], + "description": "Supported AWS authentication methods" + }, + "AwsCustomCertificateConfig": { + "type": "object", + "required": [ + "certificateArn" + ], + "properties": { + "certificateArn": { + "type": "string" + } + } + }, + "AwsDaemonHeartbeatData": { + "type": "object", + "required": [ + "status", + "horizonClusterId", + "horizonStatus", + "capacityGroup", + "desiredMachines", + "assignedMachines", + "healthyInstances", + "unavailableInstances", + "commandSupported", + "latestUpdateTimestamp", + "daemonInstances", + "events" + ], + "properties": { + "assignedMachines": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "capacityGroup": { + "type": "string" + }, + "commandSupported": { + "type": "boolean" + }, + "daemonInstances": { "type": "array", "items": { "$ref": "#/components/schemas/ManagedRuntimeUnitStatus" @@ -1799,6 +2110,10 @@ "latestUpdateTimestamp": { "type": "string" }, + "observedImage": { + "type": "string", + "nullable": true + }, "status": { "$ref": "#/components/schemas/WorkloadHeartbeatStatus" }, @@ -2404,6 +2719,23 @@ } } }, + "AwsServiceOverrides": { + "type": "object", + "description": "Service endpoint overrides for testing AWS services", + "required": [ + "endpoints" + ], + "properties": { + "endpoints": { + "type": "object", + "description": "Override endpoints for specific AWS services\nKey is the service name (e.g., \"lambda\", \"s3\"), value is the base URL", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, "AwsSqsQueueHeartbeatData": { "type": "object", "required": [ @@ -2591,6 +2923,36 @@ } } }, + "AwsWebIdentityConfig": { + "type": "object", + "description": "Configuration for AWS Web Identity Token authentication", + "required": [ + "roleArn", + "webIdentityTokenFile" + ], + "properties": { + "durationSeconds": { + "type": "integer", + "format": "int32", + "description": "Optional duration for the assumed role credentials (in seconds)", + "nullable": true + }, + "roleArn": { + "type": "string", + "description": "The ARN of the role to assume" + }, + "sessionName": { + "type": "string", + "description": "Optional session name for the assumed role session", + "nullable": true + }, + "webIdentityTokenFile": { + "type": "string", + "description": "The path to the web identity token file" + } + }, + "additionalProperties": false + }, "AzureBlobStorageHeartbeatData": { "type": "object", "required": [ @@ -2720,6 +3082,40 @@ } } }, + "AzureClientConfig": { + "type": "object", + "description": "Azure client configuration", + "required": [ + "subscriptionId", + "tenantId", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/AzureCredentials", + "description": "Azure authentication credentials." + }, + "region": { + "type": "string", + "description": "Azure region for resources.", + "nullable": true + }, + "serviceOverrides": { + "$ref": "#/components/schemas/AzureServiceOverrides", + "description": "Service endpoint overrides for testing", + "nullable": true + }, + "subscriptionId": { + "type": "string", + "description": "The Azure Subscription ID where resources will be deployed." + }, + "tenantId": { + "type": "string", + "description": "The customer's Azure Tenant ID." + } + }, + "additionalProperties": false + }, "AzureComputeClusterHeartbeatData": { "type": "object", "required": [ @@ -3113,74 +3509,259 @@ } } }, - "AzureCustomCertificateConfig": { - "type": "object", - "required": [ - "keyVaultCertificateId" - ], - "properties": { - "keyVaultCertificateId": { - "type": "string" - }, - "keyVaultResourceId": { - "type": "string", - "nullable": true - } - } - }, - "AzureDaemonHeartbeatData": { - "type": "object", - "required": [ - "status", - "horizonClusterId", - "daemonName", - "horizonStatus", - "capacityGroup", - "desiredMachines", - "assignedMachines", - "healthyInstances", - "unavailableInstances", - "commandSupported", - "latestUpdateTimestamp", - "daemonInstances", - "events" - ], - "properties": { - "assignedMachines": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "capacityGroup": { - "type": "string" - }, - "commandSupported": { - "type": "boolean" - }, - "daemonInstances": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ManagedRuntimeUnitStatus" + "AzureCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Service principal with client secret", + "required": [ + "client_id", + "client_secret", + "type" + ], + "properties": { + "client_id": { + "type": "string", + "description": "The client ID (application ID)" + }, + "client_secret": { + "type": "string", + "description": "The client secret" + }, + "type": { + "type": "string", + "enum": [ + "servicePrincipal" + ] + } } }, - "daemonName": { - "type": "string" - }, - "desiredMachines": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "events": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ManagedRuntimeEventSnapshot" + { + "type": "object", + "description": "Direct access token", + "required": [ + "token", + "type" + ], + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use for authentication" + }, + "type": { + "type": "string", + "enum": [ + "accessToken" + ] + } } }, - "healthyInstances": { - "type": "integer", - "format": "int32", - "minimum": 0 + { + "type": "object", + "description": "Short-lived bearer tokens keyed by their exact Azure OAuth scope.\n\nThis is the only Azure credential form returned by the credential mint\nendpoint. It contains no refreshable source credential and must not be\nused for a scope that is absent from the map.", + "required": [ + "tokens", + "type" + ], + "properties": { + "tokens": { + "type": "object", + "description": "Exact scope-to-token map. Minted configs include only the Azure\nmanagement, storage, Key Vault, and Service Bus scopes used by\nAlien bindings.", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "scopedAccessTokens" + ] + } + } + }, + { + "type": "object", + "description": "A short-lived Azure Storage shared access signature.\n\nQuery parameter values are kept decoded. Azure clients must encode them\nwhen attaching them to a request URL.", + "required": [ + "query_parameters", + "type" + ], + "properties": { + "query_parameters": { + "type": "object", + "description": "Exact SAS query parameters, including the signature and expiry.", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "sasToken" + ] + } + } + }, + { + "type": "object", + "description": "Azure VM IMDS managed identity.", + "required": [ + "client_id", + "type" + ], + "properties": { + "client_id": { + "type": "string", + "description": "The client ID of the user-assigned managed identity" + }, + "identity_endpoint": { + "type": "string", + "description": "Optional IMDS endpoint override", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "vmManagedIdentity" + ] + } + } + }, + { + "type": "object", + "description": "Azure AD Workload Identity (federated identity)", + "required": [ + "client_id", + "tenant_id", + "federated_token_file", + "authority_host", + "type" + ], + "properties": { + "authority_host": { + "type": "string", + "description": "The authority host URL" + }, + "client_id": { + "type": "string", + "description": "The client ID of the managed identity or application" + }, + "federated_token_file": { + "type": "string", + "description": "Path to the federated token file" + }, + "tenant_id": { + "type": "string", + "description": "The tenant ID for authentication" + }, + "type": { + "type": "string", + "enum": [ + "workloadIdentity" + ] + } + } + }, + { + "type": "object", + "description": "Azure Managed Identity (Container Apps / App Service)\nUses IDENTITY_ENDPOINT + IDENTITY_HEADER injected by the platform", + "required": [ + "client_id", + "identity_endpoint", + "identity_header", + "type" + ], + "properties": { + "client_id": { + "type": "string", + "description": "The client ID of the user-assigned managed identity" + }, + "identity_endpoint": { + "type": "string", + "description": "The identity endpoint URL (from IDENTITY_ENDPOINT env var)" + }, + "identity_header": { + "type": "string", + "description": "The identity header secret (from IDENTITY_HEADER env var)" + }, + "type": { + "type": "string", + "enum": [ + "managedIdentity" + ] + } + } + } + ], + "description": "Represents Azure authentication credentials" + }, + "AzureCustomCertificateConfig": { + "type": "object", + "required": [ + "keyVaultCertificateId" + ], + "properties": { + "keyVaultCertificateId": { + "type": "string" + }, + "keyVaultResourceId": { + "type": "string", + "nullable": true + } + } + }, + "AzureDaemonHeartbeatData": { + "type": "object", + "required": [ + "status", + "horizonClusterId", + "horizonStatus", + "capacityGroup", + "desiredMachines", + "assignedMachines", + "healthyInstances", + "unavailableInstances", + "commandSupported", + "latestUpdateTimestamp", + "daemonInstances", + "events" + ], + "properties": { + "assignedMachines": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "capacityGroup": { + "type": "string" + }, + "commandSupported": { + "type": "boolean" + }, + "daemonInstances": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManagedRuntimeUnitStatus" + } + }, + "daemonName": { + "type": "string" + }, + "desiredMachines": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManagedRuntimeEventSnapshot" + } + }, + "healthyInstances": { + "type": "integer", + "format": "int32", + "minimum": 0 }, "horizonClusterId": { "type": "string" @@ -3199,6 +3780,10 @@ "latestUpdateTimestamp": { "type": "string" }, + "observedImage": { + "type": "string", + "nullable": true + }, "status": { "$ref": "#/components/schemas/WorkloadHeartbeatStatus" }, @@ -3209,6 +3794,29 @@ } } }, + "AzureFlexibleServerPostgresHeartbeatData": { + "type": "object", + "required": [ + "status", + "serverName" + ], + "properties": { + "serverName": { + "type": "string" + }, + "state": { + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/PostgresHeartbeatStatus" + }, + "version": { + "type": "string", + "nullable": true + } + } + }, "AzureKeyVaultHeartbeatData": { "type": "object", "required": [ @@ -3788,6 +4396,23 @@ } } }, + "AzureServiceOverrides": { + "type": "object", + "description": "Service endpoint overrides for testing Azure services", + "required": [ + "endpoints" + ], + "properties": { + "endpoints": { + "type": "object", + "description": "Override endpoints for specific Azure services\nKey is the service name (e.g., \"management\", \"storage\", \"containerApps\"), value is the base URL", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, "AzureStorageAccountEndpoints": { "type": "object", "properties": { @@ -4013,6 +4638,10 @@ "type": "string", "nullable": true }, + "privateEndpointSubnetName": { + "type": "string", + "nullable": true + }, "privateSubnetName": { "type": "string", "nullable": true @@ -4251,52 +4880,182 @@ } } }, - "CommandPayloadResponse": { - "type": "object", - "description": "Payload response containing params and response data from KV", - "required": [ - "commandId" - ], - "properties": { - "commandId": { - "type": "string" - }, - "params": { - "$ref": "#/components/schemas/BodySpec", - "nullable": true - }, - "response": { - "$ref": "#/components/schemas/CommandResponse", - "nullable": true - } - } - }, - "CommandResponse": { + "ClientConfig": { "oneOf": [ { - "type": "object", - "description": "Command executed successfully", - "required": [ - "response", - "status" - ], - "properties": { - "response": { - "$ref": "#/components/schemas/BodySpec", - "description": "Response data (JSON, can be large)" + "allOf": [ + { + "$ref": "#/components/schemas/AwsClientConfig" }, - "status": { - "type": "string", - "enum": [ - "success" - ] + { + "type": "object", + "required": [ + "platform" + ], + "properties": { + "platform": { + "type": "string", + "enum": [ + "aws" + ] + } + } } - } + ] }, { - "type": "object", - "description": "Command failed with an error", - "required": [ + "allOf": [ + { + "$ref": "#/components/schemas/GcpClientConfig" + }, + { + "type": "object", + "required": [ + "platform" + ], + "properties": { + "platform": { + "type": "string", + "enum": [ + "gcp" + ] + } + } + } + ] + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/AzureClientConfig" + }, + { + "type": "object", + "required": [ + "platform" + ], + "properties": { + "platform": { + "type": "string", + "enum": [ + "azure" + ] + } + } + } + ] + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/KubernetesClientConfig" + }, + { + "type": "object", + "required": [ + "platform" + ], + "properties": { + "platform": { + "type": "string", + "enum": [ + "kubernetes" + ] + } + } + } + ] + }, + { + "type": "object", + "required": [ + "kubernetes", + "cloud", + "platform" + ], + "properties": { + "cloud": { + "type": "object" + }, + "kubernetes": { + "$ref": "#/components/schemas/KubernetesClientConfig" + }, + "platform": { + "type": "string", + "enum": [ + "kubernetesCloud" + ] + } + } + }, + { + "type": "object", + "required": [ + "state_directory", + "platform" + ], + "properties": { + "platform": { + "type": "string", + "enum": [ + "local" + ] + }, + "state_directory": { + "type": "string", + "description": "State directory for local resources and deployment state" + } + } + } + ], + "description": "Configuration for different cloud platform clients" + }, + "CommandPayloadResponse": { + "type": "object", + "description": "Payload response containing params and response data from KV", + "required": [ + "commandId" + ], + "properties": { + "commandId": { + "type": "string" + }, + "params": { + "$ref": "#/components/schemas/BodySpec", + "nullable": true + }, + "response": { + "$ref": "#/components/schemas/CommandResponse", + "nullable": true + } + } + }, + "CommandResponse": { + "oneOf": [ + { + "type": "object", + "description": "Command executed successfully", + "required": [ + "response", + "status" + ], + "properties": { + "response": { + "$ref": "#/components/schemas/BodySpec", + "description": "Response data (JSON, can be large)" + }, + "status": { + "type": "string", + "enum": [ + "success" + ] + } + } + }, + { + "type": "object", + "description": "Command failed with an error", + "required": [ "code", "message", "status" @@ -4344,7 +5103,8 @@ "required": [ "commandId", "state", - "attempt" + "attempt", + "target" ], "properties": { "attempt": { @@ -4365,9 +5125,40 @@ "state": { "$ref": "#/components/schemas/CommandState", "description": "Current command state" + }, + "target": { + "$ref": "#/components/schemas/CommandTarget", + "description": "The specific resource this command is addressed to" + } + } + }, + "CommandTarget": { + "type": "object", + "description": "Identifies the specific resource a command is addressed to.", + "required": [ + "resourceId", + "resourceType" + ], + "properties": { + "resourceId": { + "type": "string", + "description": "The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)." + }, + "resourceType": { + "$ref": "#/components/schemas/CommandTargetType", + "description": "The kind of resource `resource_id` refers to." } } }, + "CommandTargetType": { + "type": "string", + "description": "The kind of command-capable resource a command targets.", + "enum": [ + "worker", + "container", + "daemon" + ] + }, "CommandsInfo": { "type": "object", "required": [ @@ -4442,6 +5233,10 @@ "format": "int32", "minimum": 0 }, + "drainProgress": { + "$ref": "#/components/schemas/ComputeDrainProgress", + "nullable": true + }, "groupId": { "type": "string" }, @@ -4559,6 +5354,27 @@ } ] }, + { + "allOf": [ + { + "$ref": "#/components/schemas/MachinesComputeClusterHeartbeatData" + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "machines" + ] + } + } + } + ] + }, { "allOf": [ { @@ -4616,83 +5432,253 @@ } } }, - "ContainerHeartbeatData": { - "oneOf": [ - { - "allOf": [ - { - "$ref": "#/components/schemas/HorizonContainerHeartbeatData" - }, - { - "type": "object", - "required": [ - "backend" - ], - "properties": { - "backend": { - "type": "string", - "enum": [ - "horizonPlatform" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/KubernetesContainerHeartbeatData" - }, - { - "type": "object", - "required": [ - "backend" - ], - "properties": { - "backend": { - "type": "string", - "enum": [ - "kubernetes" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/LocalContainerHeartbeatData" - }, - { - "type": "object", - "required": [ - "backend" - ], - "properties": { - "backend": { - "type": "string", - "enum": [ - "local" - ] - } - } - } - ] - } - ] - }, - "CreateCommandRequest": { + "ComputeDrainBlocker": { "type": "object", - "description": "Request to create a new command", "required": [ - "deploymentId", - "command", - "params" + "workloadName", + "replicaId", + "schedulingMode", + "state", + "reason" ], "properties": { - "command": { + "reason": { + "type": "string" + }, + "replicaId": { + "type": "string" + }, + "schedulingMode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "workloadName": { + "type": "string" + } + } + }, + "ComputeDrainProgress": { + "type": "object", + "required": [ + "machineId", + "status", + "replicaCount", + "force", + "stalled" + ], + "properties": { + "blockers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ComputeDrainBlocker" + } + }, + "drainDeadlineAt": { + "type": "string", + "nullable": true + }, + "drainRequestedAt": { + "type": "string", + "nullable": true + }, + "drainedAt": { + "type": "string", + "nullable": true + }, + "force": { + "type": "boolean" + }, + "machineId": { + "type": "string" + }, + "replicaCount": { + "type": "integer", + "format": "int64" + }, + "stalled": { + "type": "boolean" + }, + "status": { + "$ref": "#/components/schemas/ComputeDrainProgressStatus" + } + } + }, + "ComputeDrainProgressStatus": { + "type": "string", + "enum": [ + "draining", + "drained", + "terminating" + ] + }, + "ComputePoolSelection": { + "oneOf": [ + { + "type": "object", + "description": "Fixed number of machines.", + "required": [ + "machines", + "mode" + ], + "properties": { + "failure_domains": { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout.", + "nullable": true + }, + "machine": { + "type": "string", + "description": "Provider machine type selected for this deployment.", + "nullable": true + }, + "machines": { + "type": "integer", + "format": "int32", + "description": "Number of machines to run.", + "minimum": 0 + }, + "mode": { + "type": "string", + "enum": [ + "fixed" + ] + } + } + }, + { + "type": "object", + "description": "Autoscaling machine pool.", + "required": [ + "min", + "max", + "mode" + ], + "properties": { + "failure_domains": { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout.", + "nullable": true + }, + "machine": { + "type": "string", + "description": "Provider machine type selected for this deployment.", + "nullable": true + }, + "max": { + "type": "integer", + "format": "int32", + "description": "Maximum machine count.", + "minimum": 0 + }, + "min": { + "type": "integer", + "format": "int32", + "description": "Minimum machine count.", + "minimum": 0 + }, + "mode": { + "type": "string", + "enum": [ + "autoscale" + ] + } + } + } + ], + "description": "User-selected deployment settings for one compute pool." + }, + "ComputeSettings": { + "type": "object", + "description": "Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts.", + "properties": { + "pools": { + "type": "object", + "description": "Selected compute choices keyed by pool ID.", + "additionalProperties": { + "$ref": "#/components/schemas/ComputePoolSelection" + } + } + } + }, + "ContainerHeartbeatData": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/HorizonContainerHeartbeatData" + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "horizonPlatform" + ] + } + } + } + ] + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/KubernetesContainerHeartbeatData" + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "kubernetes" + ] + } + } + } + ] + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/LocalContainerHeartbeatData" + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "local" + ] + } + } + } + ] + } + ] + }, + "CreateCommandRequest": { + "type": "object", + "description": "Request to create a new command", + "required": [ + "deploymentId", + "command", + "params" + ], + "properties": { + "command": { "type": "string", "description": "Command name (e.g., \"generate-report\", \"sync-data\")" }, @@ -4714,6 +5700,11 @@ "params": { "$ref": "#/components/schemas/BodySpec", "description": "Command parameters (JSON, can be large)" + }, + "targetResourceId": { + "type": "string", + "description": "Optional explicit target resource ID within the deployment's stack.\nWhen omitted, the target is resolved server-side (single-target shorthand):\nexactly one command-capable resource must exist, or resolution fails.", + "nullable": true } } }, @@ -4804,12 +5795,16 @@ "CreateDeploymentResponse": { "type": "object", "required": [ - "deployment" + "deployment", + "deploymentModel" ], "properties": { "deployment": { "$ref": "#/components/schemas/DeploymentResponse" }, + "deploymentModel": { + "$ref": "#/components/schemas/DeploymentModel" + }, "token": { "type": "string", "nullable": true @@ -4829,7 +5824,7 @@ }, "projectId": { "type": "string", - "description": "Project this release belongs to. Required. The standalone server\nuses the canonical value `\"default\"`." + "description": "Project this release belongs to. Required. The standalone server\nuses the canonical value `\"default\"`.\n\nThe OSS CLI sends this field as `project` on `alien release`\n(see `alien-cli` release flow); the underlying alien-managerx\nrelease endpoint accepts both forms. Accept both here too so\n`alien release` against an OSS standalone manager doesn't fail\nat the schema layer with a confusing\n`unknown field \"project\", expected \"projectId\"`." }, "stack": { "$ref": "#/components/schemas/StackByPlatform" @@ -4961,6 +5956,27 @@ } ] }, + { + "allOf": [ + { + "$ref": "#/components/schemas/MachinesDaemonHeartbeatData" + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "machines" + ] + } + } + } + ] + }, { "allOf": [ { @@ -5046,7 +6062,9 @@ "name", "maxDeployments", "deploymentCount", - "createdAt" + "createdAt", + "projectId", + "workspaceId" ], "properties": { "createdAt": { @@ -5065,6 +6083,14 @@ }, "name": { "type": "string" + }, + "projectId": { + "type": "string", + "description": "Required by the platform-SDK DeploymentGroup schema. Standalone\nOSS mode is single-tenant, so we synthesize a project id\nmatching the workspace id." + }, + "workspaceId": { + "type": "string", + "description": "Required by the platform-SDK DeploymentGroup schema." } } }, @@ -5111,6 +6137,9 @@ "platform", "status", "deploymentGroupId", + "deploymentProtocolVersion", + "projectId", + "workspaceId", "retryRequested", "createdAt" ], @@ -5129,6 +6158,12 @@ "deploymentGroupId": { "type": "string" }, + "deploymentProtocolVersion": { + "type": "integer", + "format": "int32", + "description": "Required by the platform-SDK Deployment schema. Hard-coded to\nalien-core's `CURRENT_DEPLOYMENT_PROTOCOL_VERSION` so the CLI\naccepts the response.", + "minimum": 0 + }, "desiredReleaseId": { "type": "string", "nullable": true @@ -5148,6 +6183,10 @@ "platform": { "$ref": "#/components/schemas/Platform" }, + "projectId": { + "type": "string", + "description": "Required by the platform-SDK Deployment schema. Standalone is\nsingle-tenant; reuse the same synthetic project id used in the\ndeployment-groups route." + }, "retryRequested": { "type": "boolean" }, @@ -5160,6 +6199,10 @@ "updatedAt": { "type": "string", "nullable": true + }, + "workspaceId": { + "type": "string", + "description": "Required by the platform-SDK Deployment schema." } } }, @@ -5174,6 +6217,11 @@ "$ref": "#/components/schemas/CustomDomainConfig" }, "nullable": true + }, + "publicEndpointTarget": { + "$ref": "#/components/schemas/PublicEndpointTargetSettings", + "description": "Public endpoint DNS target selection for machines deployments.\n\nWhen omitted, machines deployments publish healthy machine public\naddresses directly. Use `LoadBalancer` when an external load balancer\nfronts the machines and Alien should publish a CNAME to that target.", + "nullable": true } } }, @@ -5183,6 +6231,7 @@ "required": [ "protocol", "deploymentId", + "target", "commandId", "attempt", "command", @@ -5225,6 +6274,15 @@ "responseHandling": { "$ref": "#/components/schemas/ResponseHandling", "description": "Response handling configuration" + }, + "target": { + "$ref": "#/components/schemas/CommandTarget", + "description": "The specific resource this command is addressed to" + }, + "traceContext": { + "$ref": "#/components/schemas/TraceContext", + "description": "Optional W3C trace context for the command invocation.", + "nullable": true } } }, @@ -5287,19 +6345,49 @@ } } }, - "GcpArtifactRegistryHeartbeatData": { + "ExposeProtocol": { + "type": "string", + "description": "Protocol for public workload endpoints.", + "enum": [ + "http", + "tcp" + ] + }, + "FailureDomainSelection": { "type": "object", + "description": "Failure-domain policy selected for a compute pool.", "required": [ - "status", - "projectId", - "location", - "repositoryId", - "labelCount", - "cleanupPolicyCount", - "kmsKeyNamePresent", - "iamPolicyEtagPresent", - "iamBindingCount", - "iamRoles" + "spread" + ], + "properties": { + "selectedFailureDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation." + }, + "spread": { + "type": "integer", + "format": "int32", + "description": "Number of distinct failure domains across which new stateful replicas may be spread.", + "minimum": 0 + } + } + }, + "GcpArtifactRegistryHeartbeatData": { + "type": "object", + "required": [ + "status", + "projectId", + "location", + "repositoryId", + "labelCount", + "cleanupPolicyCount", + "kmsKeyNamePresent", + "iamPolicyEtagPresent", + "iamBindingCount", + "iamRoles" ], "properties": { "cleanupPolicyCount": { @@ -5387,6 +6475,40 @@ } } }, + "GcpClientConfig": { + "type": "object", + "description": "GCP client configuration", + "required": [ + "projectId", + "region", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/GcpCredentials", + "description": "GCP authentication credentials." + }, + "projectId": { + "type": "string", + "description": "The GCP Project ID." + }, + "projectNumber": { + "type": "string", + "description": "The GCP project number (numeric). Resolved at runtime via Resource Manager API.\nUsed in IAM condition expressions where resource.name uses project number.", + "nullable": true + }, + "region": { + "type": "string", + "description": "The GCP region for resources." + }, + "serviceOverrides": { + "$ref": "#/components/schemas/GcpServiceOverrides", + "description": "Service endpoint overrides for testing", + "nullable": true + } + }, + "additionalProperties": false + }, "GcpCloudBuildHeartbeatData": { "type": "object", "required": [ @@ -5496,6 +6618,29 @@ } } }, + "GcpCloudSqlPostgresHeartbeatData": { + "type": "object", + "required": [ + "status", + "instanceName" + ], + "properties": { + "databaseVersion": { + "type": "string", + "nullable": true + }, + "instanceName": { + "type": "string" + }, + "state": { + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/PostgresHeartbeatStatus" + } + } + }, "GcpCloudStorageHeartbeatData": { "type": "object", "required": [ @@ -5630,6 +6775,184 @@ } } }, + "GcpCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Use an already-minted OAuth2 access token.", + "required": [ + "token", + "type" + ], + "properties": { + "token": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "accessToken" + ] + } + } + }, + { + "type": "object", + "description": "Use a refreshable service account impersonation source.", + "required": [ + "source", + "config", + "type" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/GcpImpersonationConfig", + "description": "Service account impersonation request." + }, + "source": { + "type": "object", + "description": "Source configuration used to call IAMCredentials." + }, + "type": { + "type": "string", + "enum": [ + "impersonatedServiceAccount" + ] + } + } + }, + { + "type": "object", + "description": "Use a full Service Account JSON key (as string). A short-lived JWT will\nbe created and exchanged for a bearer token automatically.", + "required": [ + "json", + "type" + ], + "properties": { + "json": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "serviceAccountKey" + ] + } + } + }, + { + "type": "object", + "description": "Use GCP metadata server for authentication (for instances running on GCP)", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "serviceMetadata" + ] + } + } + }, + { + "type": "object", + "description": "Use projected service account token (for Kubernetes workload identity)", + "required": [ + "token_file", + "service_account_email", + "type" + ], + "properties": { + "service_account_email": { + "type": "string", + "description": "Service account email" + }, + "token_file": { + "type": "string", + "description": "Path to the projected service account token" + }, + "type": { + "type": "string", + "enum": [ + "projectedServiceAccount" + ] + } + } + }, + { + "type": "object", + "description": "Use an external account credential configuration.", + "required": [ + "audience", + "subject_token_type", + "token_url", + "credential_source_file", + "type" + ], + "properties": { + "audience": { + "type": "string", + "description": "Workload identity audience." + }, + "credential_source_file": { + "type": "string", + "description": "Path to the subject token file." + }, + "service_account_impersonation_url": { + "type": "string", + "description": "Optional service account impersonation URL.", + "nullable": true + }, + "subject_token_type": { + "type": "string", + "description": "Subject token type for STS token exchange." + }, + "token_url": { + "type": "string", + "description": "STS token exchange URL." + }, + "type": { + "type": "string", + "enum": [ + "externalAccount" + ] + } + } + }, + { + "type": "object", + "description": "Use gcloud Application Default Credentials (authorized_user).\nExchanges refresh_token for an access_token via Google's OAuth2 endpoint.", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "type" + ], + "properties": { + "client_id": { + "type": "string", + "description": "OAuth2 client ID" + }, + "client_secret": { + "type": "string", + "description": "OAuth2 client secret" + }, + "refresh_token": { + "type": "string", + "description": "OAuth2 refresh token" + }, + "type": { + "type": "string", + "enum": [ + "authorizedUser" + ] + } + } + } + ], + "description": "Authentication options for talking to GCP APIs." + }, "GcpCustomCertificateConfig": { "type": "object", "required": [ @@ -5646,7 +6969,6 @@ "required": [ "status", "horizonClusterId", - "daemonName", "horizonStatus", "capacityGroup", "desiredMachines", @@ -5712,6 +7034,10 @@ "latestUpdateTimestamp": { "type": "string" }, + "observedImage": { + "type": "string", + "nullable": true + }, "status": { "$ref": "#/components/schemas/WorkloadHeartbeatStatus" }, @@ -5801,6 +7127,51 @@ } } }, + "GcpImpersonationConfig": { + "type": "object", + "description": "Configuration for GCP service account impersonation", + "required": [ + "serviceAccountEmail", + "scopes" + ], + "properties": { + "delegates": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional sequence of service accounts in a delegation chain", + "nullable": true + }, + "lifetime": { + "type": "string", + "description": "Optional desired lifetime duration of the access token (max 3600s)", + "nullable": true + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The OAuth 2.0 scopes that define the access token's permissions" + }, + "serviceAccountEmail": { + "type": "string", + "description": "The email of the service account to impersonate" + }, + "targetProjectId": { + "type": "string", + "description": "Optional target project ID override. When provided, the impersonated config\nuses this project ID instead of inheriting the caller's project.", + "nullable": true + }, + "targetRegion": { + "type": "string", + "description": "Optional target region override. When provided, the impersonated config\nuses this region instead of inheriting the caller's region.", + "nullable": true + } + }, + "additionalProperties": false + }, "GcpManagementConfig": { "type": "object", "description": "GCP management configuration extracted from stack settings", @@ -6100,6 +7471,23 @@ } } }, + "GcpServiceOverrides": { + "type": "object", + "description": "Service endpoint overrides for testing GCP services", + "required": [ + "endpoints" + ], + "properties": { + "endpoints": { + "type": "object", + "description": "Override endpoints for specific GCP services\nKey is the service name (e.g., \"cloudrun\", \"storage\"), value is the base URL", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, "GcpServiceUsageActivationHeartbeatData": { "type": "object", "required": [ @@ -6331,10 +7719,18 @@ "type": "string", "nullable": true }, + "latestUpdateTimestamp": { + "type": "string", + "nullable": true + }, "memory": { "$ref": "#/components/schemas/MetricSample", "nullable": true }, + "observedImage": { + "type": "string", + "nullable": true + }, "replicaUnits": { "type": "array", "items": { @@ -6392,24 +7788,56 @@ } } }, + "InitialDesiredRelease": { + "type": "string", + "enum": [ + "active", + "none" + ] + }, "InitializeRequest": { "type": "object", + "required": [ + "initialDesiredRelease" + ], "properties": { "basePlatform": { "$ref": "#/components/schemas/Platform", "description": "Optional base cloud platform for Kubernetes setup targets such as\nEKS/GKE/AKS. The runtime platform remains Kubernetes.", "nullable": true }, + "initialDesiredRelease": { + "$ref": "#/components/schemas/InitialDesiredRelease", + "description": "Desired-release selection for a newly registered deployment. This is\ncreation intent, not a permanent deployment mode: a later update can\nassign a desired release to a deployment initialized with `none`." + }, + "inputValues": { + "type": "object", + "description": "Deployer-provided stack inputs. Embedded platform managers resolve\nthese before creating the deployment; standalone managers accept the\nfield so generated setup clients have one stable initialize contract.", + "additionalProperties": {} + }, "name": { "type": "string", "nullable": true }, + "permission": { + "type": "string", + "nullable": true + }, "platform": { "$ref": "#/components/schemas/Platform", "nullable": true }, - "stackSettings": { - "$ref": "#/components/schemas/StackSettings", + "scope": { + "type": "string", + "nullable": true + }, + "setupMethod": { + "type": "string", + "description": "Setup method that is registering this deployment, such as `manual` for\nrendered Operator manifests or `helm` for generated Helm installs.", + "nullable": true + }, + "stackSettings": { + "$ref": "#/components/schemas/StackSettings", "nullable": true } } @@ -6417,12 +7845,16 @@ "InitializeResponse": { "type": "object", "required": [ - "deploymentId" + "deploymentId", + "deploymentModel" ], "properties": { "deploymentId": { "type": "string" }, + "deploymentModel": { + "$ref": "#/components/schemas/DeploymentModel" + }, "token": { "type": "string", "nullable": true @@ -6600,6 +8032,155 @@ ], "description": "Certificate publication or reference mode for Kubernetes public endpoints." }, + "KubernetesClientConfig": { + "oneOf": [ + { + "type": "object", + "description": "Use in-cluster configuration (service account tokens, etc.)", + "required": [ + "mode" + ], + "properties": { + "additional_headers": { + "type": "object", + "description": "Additional headers to include in requests", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "mode": { + "type": "string", + "enum": [ + "inCluster" + ] + }, + "namespace": { + "type": "string", + "description": "The namespace to operate in", + "nullable": true + } + } + }, + { + "type": "object", + "description": "Use kubeconfig file for configuration", + "required": [ + "mode" + ], + "properties": { + "additional_headers": { + "type": "object", + "description": "Additional headers to include in requests", + "additionalProperties": { + "type": "string" + }, + "nullable": true + }, + "cluster": { + "type": "string", + "description": "Cluster name to use (optional, defaults to context's cluster)", + "nullable": true + }, + "context": { + "type": "string", + "description": "Context name to use (optional, defaults to current-context)", + "nullable": true + }, + "kubeconfig_path": { + "type": "string", + "description": "Path to kubeconfig file (optional, defaults to standard locations)", + "nullable": true + }, + "mode": { + "type": "string", + "enum": [ + "kubeconfig" + ] + }, + "namespace": { + "type": "string", + "description": "The namespace to operate in", + "nullable": true + }, + "user": { + "type": "string", + "description": "User name to use (optional, defaults to context's user)", + "nullable": true + } + } + }, + { + "type": "object", + "description": "Manual configuration with explicit values", + "required": [ + "server_url", + "additional_headers", + "mode" + ], + "properties": { + "additional_headers": { + "type": "object", + "description": "Additional headers to include in requests", + "additionalProperties": { + "type": "string" + } + }, + "certificate_authority_data": { + "type": "string", + "description": "The cluster certificate authority data (base64 encoded)", + "nullable": true + }, + "client_certificate_data": { + "type": "string", + "description": "Client certificate data (base64 encoded) for mutual TLS", + "nullable": true + }, + "client_key_data": { + "type": "string", + "description": "Client key data (base64 encoded) for mutual TLS", + "nullable": true + }, + "insecure_skip_tls_verify": { + "type": "boolean", + "description": "Skip TLS verification (insecure)", + "nullable": true + }, + "mode": { + "type": "string", + "enum": [ + "manual" + ] + }, + "namespace": { + "type": "string", + "description": "The namespace to operate in", + "nullable": true + }, + "password": { + "type": "string", + "description": "Password for basic authentication", + "nullable": true + }, + "server_url": { + "type": "string", + "description": "The Kubernetes cluster server URL" + }, + "token": { + "type": "string", + "description": "Bearer token for authentication", + "nullable": true + }, + "username": { + "type": "string", + "description": "Username for basic authentication", + "nullable": true + } + } + } + ], + "description": "Configuration mode for Kubernetes access" + }, "KubernetesCloudReference": { "type": "object", "description": "Optional provider-specific identity for a cloud-backed Kubernetes cluster.", @@ -7820,7 +9401,8 @@ "type": "object", "description": "Request for acquiring leases", "required": [ - "deploymentId" + "deploymentId", + "target" ], "properties": { "deploymentId": { @@ -7837,6 +9419,10 @@ "type": "integer", "description": "Maximum number of leases to acquire", "minimum": 0 + }, + "target": { + "$ref": "#/components/schemas/CommandTarget", + "description": "The specific resource requesting leases. Required: leases are scoped to a\nsingle target, so callers must identify which resource they're polling for." } } }, @@ -7907,6 +9493,24 @@ } } }, + "LoadBalancerEndpoint": { + "type": "object", + "description": "Load balancer endpoint information for DNS management.\nThis is optional metadata used by the DNS controller to create domain mappings.", + "required": [ + "dnsName" + ], + "properties": { + "dnsName": { + "type": "string", + "description": "The DNS name of the load balancer endpoint (e.g., ALB DNS, API Gateway domain)." + }, + "hostedZoneId": { + "type": "string", + "description": "AWS Route53 hosted zone ID (for ALIAS records). Only set on AWS.", + "nullable": true + } + } + }, "LocalArtifactRegistryHeartbeatData": { "type": "object", "required": [ @@ -8065,7 +9669,6 @@ "type": "object", "required": [ "status", - "daemonName", "runtimeId", "commandSupported", "imagePathPresent", @@ -8155,6 +9758,35 @@ "delete" ] }, + "LocalPostgresHeartbeatData": { + "type": "object", + "required": [ + "status", + "name", + "version", + "processRunning" + ], + "properties": { + "name": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int32", + "minimum": 0, + "nullable": true + }, + "processRunning": { + "type": "boolean" + }, + "status": { + "$ref": "#/components/schemas/PostgresHeartbeatStatus" + }, + "version": { + "type": "string" + } + } + }, "LocalQueueHeartbeatData": { "type": "object", "required": [ @@ -8425,102 +10057,307 @@ } } }, - "ManagedRuntimeEventInvolvedObject": { + "MachinesComputeClusterHeartbeatData": { "type": "object", + "required": [ + "status", + "nodes", + "name", + "capacityGroups", + "machines" + ], "properties": { - "details": { - "$ref": "#/components/schemas/Value", - "nullable": true - }, - "id": { + "backendClusterId": { "type": "string", "nullable": true }, - "kind": { - "type": "string", + "capacityGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ComputeCapacityGroupStatus" + } + }, + "cpu": { + "$ref": "#/components/schemas/MetricSample", "nullable": true }, - "machineId": { - "type": "string", + "machines": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MachinesComputeMachineStatus" + } + }, + "memory": { + "$ref": "#/components/schemas/MetricSample", "nullable": true }, "name": { - "type": "string", - "nullable": true + "type": "string" }, - "replicaId": { - "type": "string", - "nullable": true + "nodes": { + "$ref": "#/components/schemas/ObservedCounts" + }, + "status": { + "$ref": "#/components/schemas/ComputeClusterHeartbeatStatus" } } }, - "ManagedRuntimeEventSnapshot": { + "MachinesComputeMachineStatus": { "type": "object", "required": [ - "reason", - "message" + "machineId", + "status", + "capacityGroup", + "zone", + "lastHeartbeat", + "replicaCount", + "drainForce" ], "properties": { - "count": { - "type": "integer", - "format": "int32", - "nullable": true + "capacityGroup": { + "type": "string" }, - "details": { - "$ref": "#/components/schemas/Value", + "cpuCores": { + "type": "number", + "format": "double", "nullable": true }, - "eventId": { - "type": "string", - "nullable": true + "drainBlockers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ComputeDrainBlocker" + } }, - "eventTime": { + "drainDeadlineAt": { "type": "string", - "format": "date-time", "nullable": true }, - "firstTimestamp": { + "drainForce": { + "type": "boolean" + }, + "drainRequestedAt": { "type": "string", - "format": "date-time", "nullable": true }, - "involvedObject": { - "$ref": "#/components/schemas/ManagedRuntimeEventInvolvedObject", + "drainedAt": { + "type": "string", "nullable": true }, - "lastTimestamp": { + "horizondVersion": { "type": "string", - "format": "date-time", "nullable": true }, - "message": { + "lastHeartbeat": { "type": "string" }, - "raw": { - "$ref": "#/components/schemas/Value", - "nullable": true - }, - "reason": { + "machineId": { "type": "string" }, - "source": { - "$ref": "#/components/schemas/ManagedRuntimeEventSource", + "memoryBytes": { + "type": "integer", + "format": "int64", "nullable": true }, - "type": { - "type": "string", - "nullable": true - } - } - }, - "ManagedRuntimeEventSource": { - "type": "object", - "properties": { - "component": { + "overlayIp": { "type": "string", "nullable": true }, - "host": { + "publicIp": { + "type": "string", + "nullable": true + }, + "replicaCount": { + "type": "integer", + "format": "int64" + }, + "status": { + "type": "string" + }, + "zone": { + "type": "string" + } + } + }, + "MachinesDaemonHeartbeatData": { + "type": "object", + "required": [ + "status", + "horizonClusterId", + "horizonStatus", + "capacityGroup", + "desiredMachines", + "assignedMachines", + "healthyInstances", + "unavailableInstances", + "commandSupported", + "latestUpdateTimestamp", + "daemonInstances", + "events" + ], + "properties": { + "assignedMachines": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "capacityGroup": { + "type": "string" + }, + "commandSupported": { + "type": "boolean" + }, + "daemonInstances": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManagedRuntimeUnitStatus" + } + }, + "daemonName": { + "type": "string" + }, + "desiredMachines": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManagedRuntimeEventSnapshot" + } + }, + "healthyInstances": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "horizonClusterId": { + "type": "string" + }, + "horizonStatus": { + "type": "string" + }, + "horizonStatusMessage": { + "type": "string", + "nullable": true + }, + "horizonStatusReason": { + "type": "string", + "nullable": true + }, + "latestUpdateTimestamp": { + "type": "string" + }, + "observedImage": { + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/WorkloadHeartbeatStatus" + }, + "unavailableInstances": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + } + }, + "ManagedRuntimeEventInvolvedObject": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/Value", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "kind": { + "type": "string", + "nullable": true + }, + "machineId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "replicaId": { + "type": "string", + "nullable": true + } + } + }, + "ManagedRuntimeEventSnapshot": { + "type": "object", + "required": [ + "reason", + "message" + ], + "properties": { + "count": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "details": { + "$ref": "#/components/schemas/Value", + "nullable": true + }, + "eventId": { + "type": "string", + "nullable": true + }, + "eventTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "firstTimestamp": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "involvedObject": { + "$ref": "#/components/schemas/ManagedRuntimeEventInvolvedObject", + "nullable": true + }, + "lastTimestamp": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "message": { + "type": "string" + }, + "raw": { + "$ref": "#/components/schemas/Value", + "nullable": true + }, + "reason": { + "type": "string" + }, + "source": { + "$ref": "#/components/schemas/ManagedRuntimeEventSource", + "nullable": true + }, + "type": { + "type": "string", + "nullable": true + } + } + }, + "ManagedRuntimeEventSource": { + "type": "object", + "properties": { + "component": { + "type": "string", + "nullable": true + }, + "host": { "type": "string", "nullable": true } @@ -8723,6 +10560,59 @@ "requests-per-second" ] }, + "MintCredentialsRequest": { + "type": "object", + "description": "Request body for `POST /v1/credentials/mint`.\n\n`deny_unknown_fields` so clients cannot smuggle in resolver internals\n(platform, stack state, etc.) — the server derives everything from the\nauthenticated deployment.", + "required": [ + "deploymentId", + "resourceId", + "bindingName" + ], + "properties": { + "bindingName": { + "type": "string", + "description": "Service-account binding to impersonate on the target platform." + }, + "deploymentId": { + "type": "string", + "description": "Deployment to mint credentials for. The caller's bearer token must be\nthis deployment's token (or a workspace-admin token)." + }, + "durationSeconds": { + "type": "integer", + "format": "int32", + "description": "Requested lifetime in seconds. Clamped to\n`[MIN_DURATION_SECONDS, MAX_DURATION_SECONDS]`; defaults to\n`DEFAULT_DURATION_SECONDS` when omitted.", + "nullable": true + }, + "resourceId": { + "type": "string", + "description": "Current-release compute resource requesting the credentials. The\nresource must depend on `bindingName` as a service-account resource." + } + }, + "additionalProperties": false + }, + "MintCredentialsResponse": { + "type": "object", + "description": "Response body for `POST /v1/credentials/mint`.", + "required": [ + "clientConfig", + "expiresAt", + "principal" + ], + "properties": { + "clientConfig": { + "$ref": "#/components/schemas/ClientConfig", + "description": "Minted platform client configuration (carries the short-lived creds)." + }, + "expiresAt": { + "type": "string", + "description": "Credential expiry as an RFC3339 timestamp (now + clamped duration).\n\nThis is server-computed (`now + clamped duration`), not read back from\nthe provider — for lazily-resolved configs (e.g. GCP, where the\nresolver doesn't always round-trip an authoritative expiry) it is\nnominal rather than provider truth. Treat it as a refresh hint: fetch\nnew credentials at or before this time, don't rely on it to prove the\nunderlying credential is still valid at that exact instant." + }, + "principal": { + "type": "string", + "description": "Human-readable identity the credentials act as (role ARN, SA email,\nmanaged-identity client id, or `platform:account` for the local path)." + } + } + }, "NetworkHeartbeatData": { "oneOf": [ { @@ -8955,6 +10845,11 @@ "description": "Name of the dedicated classic Application Gateway subnet within the VNet.", "nullable": true }, + "private_endpoint_subnet_name": { + "type": "string", + "description": "Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused.", + "nullable": true + }, "private_subnet_name": { "type": "string", "description": "Name of the private subnet within the VNet" @@ -9010,47 +10905,353 @@ "unhealthy" ] }, - "Platform": { - "type": "string", - "description": "Represents the target cloud platform.", - "enum": [ - "aws", - "gcp", - "azure", - "kubernetes", - "local", - "test" - ] - }, - "PresignedOperation": { - "type": "string", - "description": "The type of operation a presigned request performs", - "enum": [ - "put", - "get", - "delete" - ] - }, - "PresignedRequest": { + "ObservedInventoryBatch": { "type": "object", - "description": "A presigned request that can be serialized, stored, and executed later.\nHides implementation details for different storage backends.", "required": [ + "sourceKind", + "inventoryScope", + "controllerPlatform", "backend", - "expiration", - "operation", - "path" + "observedAt", + "complete", + "resources" ], "properties": { "backend": { - "$ref": "#/components/schemas/PresignedRequestBackend", - "description": "The storage backend this request targets" + "$ref": "#/components/schemas/HeartbeatBackend", + "description": "Backend whose observer produced this snapshot." }, - "expiration": { - "type": "string", - "format": "date-time", - "description": "When this presigned request expires" + "complete": { + "type": "boolean", + "description": "Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`." }, - "operation": { + "controllerPlatform": { + "$ref": "#/components/schemas/Platform", + "description": "Platform whose observer produced this snapshot." + }, + "inventoryScope": { + "type": "string", + "description": "Stable scope for the provider list operation that produced this batch." + }, + "observedAt": { + "type": "string", + "format": "date-time", + "description": "Time the inventory scope was observed." + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ObservedResourceSample" + } + }, + "sourceKind": { + "type": "string", + "description": "Writer/source for this inventory pass, such as `operator` or\n`manager-observer`." + } + } + }, + "ObservedResourceSample": { + "type": "object", + "required": [ + "rawIdentity", + "providerKind", + "displayName", + "health", + "lifecycle", + "partial", + "providerStale" + ], + "properties": { + "alienResourceId": { + "type": "string", + "nullable": true + }, + "attributes": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Value" + } + }, + "collectionIssues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HeartbeatCollectionIssue" + } + }, + "counts": { + "$ref": "#/components/schemas/ObservedCounts", + "nullable": true + }, + "deploymentId": { + "type": "string", + "nullable": true + }, + "displayName": { + "type": "string" + }, + "health": { + "$ref": "#/components/schemas/ObservedHealth" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lifecycle": { + "$ref": "#/components/schemas/ProviderLifecycleState" + }, + "message": { + "type": "string", + "nullable": true + }, + "namespace": { + "type": "string", + "nullable": true + }, + "partial": { + "type": "boolean" + }, + "providerKind": { + "type": "string", + "description": "Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type." + }, + "providerStale": { + "type": "boolean" + }, + "raw": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RawHeartbeatSnippet" + } + }, + "rawIdentity": { + "type": "string", + "description": "Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc." + }, + "region": { + "type": "string", + "nullable": true + }, + "resourceTypeHint": { + "$ref": "#/components/schemas/ResourceType", + "nullable": true + }, + "scope": { + "type": "string", + "nullable": true + }, + "version": { + "type": "string", + "description": "Release/version identity observed from the provider resource, when available.", + "nullable": true + } + } + }, + "OperatorCapabilityReport": { + "type": "object", + "description": "Report-only Operator capability status.", + "required": [ + "key", + "state" + ], + "properties": { + "detail": { + "type": "string", + "description": "Optional human-readable detail from the Operator.", + "nullable": true + }, + "key": { + "type": "string", + "description": "Stable capability key, such as `k8s-workloads` or `logs`." + }, + "state": { + "$ref": "#/components/schemas/OperatorCapabilityState", + "description": "Whether the capability is currently usable." + } + } + }, + "OperatorCapabilityState": { + "type": "string", + "description": "State of an Operator capability as observed inside the environment.", + "enum": [ + "granted", + "denied", + "unavailable" + ] + }, + "Platform": { + "type": "string", + "description": "Represents the target cloud platform.", + "enum": [ + "aws", + "gcp", + "azure", + "kubernetes", + "machines", + "local", + "test" + ] + }, + "PostgresHeartbeatData": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/AuroraPostgresHeartbeatData", + "description": "AWS Aurora Serverless v2 backend." + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "aurora" + ] + } + } + } + ], + "description": "AWS Aurora Serverless v2 backend." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/GcpCloudSqlPostgresHeartbeatData", + "description": "GCP Cloud SQL backend." + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "cloudSql" + ] + } + } + } + ], + "description": "GCP Cloud SQL backend." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/AzureFlexibleServerPostgresHeartbeatData", + "description": "Azure Flexible Server backend." + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "flexibleServer" + ] + } + } + } + ], + "description": "Azure Flexible Server backend." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/LocalPostgresHeartbeatData", + "description": "Local embedded Postgres backend." + }, + { + "type": "object", + "required": [ + "backend" + ], + "properties": { + "backend": { + "type": "string", + "enum": [ + "local" + ] + } + } + } + ], + "description": "Local embedded Postgres backend." + } + ] + }, + "PostgresHeartbeatStatus": { + "type": "object", + "required": [ + "health", + "lifecycle", + "stale", + "partial", + "collectionIssues" + ], + "properties": { + "collectionIssues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HeartbeatCollectionIssue" + } + }, + "health": { + "$ref": "#/components/schemas/ObservedHealth" + }, + "lifecycle": { + "$ref": "#/components/schemas/ProviderLifecycleState" + }, + "message": { + "type": "string", + "nullable": true + }, + "partial": { + "type": "boolean" + }, + "stale": { + "type": "boolean" + } + } + }, + "PresignedOperation": { + "type": "string", + "description": "The type of operation a presigned request performs", + "enum": [ + "put", + "get", + "delete" + ] + }, + "PresignedRequest": { + "type": "object", + "description": "A presigned request that can be serialized, stored, and executed later.\nHides implementation details for different storage backends.", + "required": [ + "backend", + "expiration", + "operation", + "path" + ], + "properties": { + "backend": { + "$ref": "#/components/schemas/PresignedRequestBackend", + "description": "The storage backend this request targets" + }, + "expiration": { + "type": "string", + "format": "date-time", + "description": "When this presigned request expires" + }, + "operation": { "$ref": "#/components/schemas/PresignedOperation", "description": "The operation this request performs" }, @@ -9143,26 +11344,107 @@ "location": { "type": "string", "nullable": true - }, - "providerId": { - "type": "string" + }, + "providerId": { + "type": "string" + } + } + }, + "ProviderLifecycleState": { + "type": "string", + "enum": [ + "unknown", + "creating", + "updating", + "running", + "scaling", + "stopping", + "stopped", + "deleting", + "deleted", + "failed" + ] + }, + "PublicEndpointOutput": { + "type": "object", + "description": "Runtime-resolved public endpoint metadata.", + "required": [ + "url", + "host", + "protocol", + "port" + ], + "properties": { + "host": { + "type": "string", + "description": "Hostname for this endpoint." + }, + "loadBalancerEndpoint": { + "$ref": "#/components/schemas/LoadBalancerEndpoint", + "description": "Load balancer endpoint information for DNS management.", + "nullable": true + }, + "port": { + "type": "integer", + "format": "int32", + "description": "Public connection port.", + "maximum": 65535, + "minimum": 1 + }, + "protocol": { + "$ref": "#/components/schemas/ExposeProtocol", + "description": "Public connection protocol." + }, + "url": { + "type": "string", + "description": "Base URL for this endpoint." + }, + "wildcardHost": { + "type": "string", + "description": "Wildcard hostname routed to this endpoint, when configured.", + "nullable": true } } }, - "ProviderLifecycleState": { - "type": "string", - "enum": [ - "unknown", - "creating", - "updating", - "running", - "scaling", - "stopping", - "stopped", - "deleting", - "deleted", - "failed" - ] + "PublicEndpointTargetSettings": { + "oneOf": [ + { + "type": "object", + "description": "Publish DNS records directly to healthy machine public IP addresses.", + "required": [ + "mode" + ], + "properties": { + "mode": { + "type": "string", + "enum": [ + "machineAddresses" + ] + } + } + }, + { + "type": "object", + "description": "Publish a CNAME record to an external load balancer.", + "required": [ + "cnameTarget", + "mode" + ], + "properties": { + "cnameTarget": { + "type": "string", + "description": "DNS name or URL for the external load balancer." + }, + "mode": { + "type": "string", + "enum": [ + "loadBalancer" + ] + } + } + } + ], + "description": "DNS target mode for public endpoints." }, "QueueHeartbeatData": { "oneOf": [ @@ -9299,124 +11581,448 @@ "body": { "type": "string" }, - "collectedAt": { + "collectedAt": { + "type": "string", + "format": "date-time" + }, + "format": { + "$ref": "#/components/schemas/RawHeartbeatSnippetFormat" + }, + "source": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + } + }, + "RawHeartbeatSnippetFormat": { + "type": "string", + "enum": [ + "json", + "yaml", + "text" + ] + }, + "ReconcileRequest": { + "type": "object", + "required": [ + "deploymentId", + "session", + "state" + ], + "properties": { + "capabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OperatorCapabilityReport" + } + }, + "deploymentId": { + "type": "string" + }, + "observedInventoryBatches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ObservedInventoryBatch" + } + }, + "operatorVersion": { + "type": "string", + "nullable": true + }, + "resourceHeartbeats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResourceHeartbeat" + } + }, + "session": { + "type": "string" + }, + "state": {}, + "suggestedDelayMs": { + "type": "integer", + "format": "int64", + "minimum": 0, + "nullable": true + }, + "updateHeartbeat": { + "type": "boolean" + } + } + }, + "ReconcileResponse": { + "type": "object", + "required": [ + "success", + "current" + ], + "properties": { + "current": {}, + "nativeImageHost": { + "type": "string", + "description": "Native image registry host for Lambda/Cloud Run.\nReturned so push clients can set it on their local DeploymentConfig.", + "nullable": true + }, + "success": { + "type": "boolean" + } + } + }, + "ReleaseRequest": { + "type": "object", + "required": [ + "deploymentId", + "session" + ], + "properties": { + "deploymentId": { + "type": "string" + }, + "session": { + "type": "string" + } + } + }, + "ReleaseResponse": { + "type": "object", + "required": [ + "id", + "workspaceId", + "projectId", + "stack", + "createdAt" + ], + "properties": { + "createdAt": { + "type": "string" + }, + "gitMetadata": { + "$ref": "#/components/schemas/GitMetadataResponse", + "nullable": true + }, + "id": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "setupFingerprints": { + "type": "object", + "description": "Setup-step fingerprints — used by `alien release` to short-circuit\nre-pushing artifacts that haven't changed across releases. The\nplatform-API client requires this field to be present (even if\nempty). The OSS standalone manager doesn't track per-setup-step\nfingerprints, so we return an empty map.", + "additionalProperties": {} + }, + "stack": { + "$ref": "#/components/schemas/StackByPlatform" + }, + "workspaceId": { + "type": "string" + } + } + }, + "RemoteAwsClientConfig": { + "type": "object", + "description": "Response-safe AWS client configuration. The public contract deliberately\nhas no static, profile, metadata, or web-identity credential variants.", + "required": [ + "accountId", + "region", + "credentials" + ], + "properties": { + "accountId": { + "type": "string", + "description": "AWS account containing the bucket." + }, + "credentials": { + "$ref": "#/components/schemas/RemoteAwsCredentials", + "description": "Expiring AWS session credentials." + }, + "region": { + "type": "string", + "description": "AWS region containing the bucket." + } + }, + "additionalProperties": false + }, + "RemoteAwsCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Temporary AWS session credentials with an authoritative expiry.", + "required": [ + "accessKeyId", + "secretAccessKey", + "sessionToken", + "expiresAt", + "type" + ], + "properties": { + "accessKeyId": { + "type": "string", + "description": "AWS access key id." + }, + "expiresAt": { + "type": "string", + "description": "Provider-reported credential expiry." + }, + "secretAccessKey": { + "type": "string", + "description": "AWS secret access key." + }, + "sessionToken": { + "type": "string", + "description": "AWS session token." + }, + "type": { + "type": "string", + "enum": [ + "sessionCredentials" + ] + } + } + } + ], + "description": "The only AWS credential form remote binding resolution can return." + }, + "RemoteAzureClientConfig": { + "type": "object", + "description": "Response-safe Azure client configuration. It contains one container-bound\nuser-delegation SAS and no OAuth or refreshable identity source.", + "required": [ + "subscriptionId", + "tenantId", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteAzureCredentials", + "description": "A short-lived SAS bound to the requested Blob container." + }, + "region": { + "type": "string", + "description": "Azure region configured for the deployment.", + "nullable": true + }, + "subscriptionId": { + "type": "string", + "description": "Azure subscription containing the storage account." + }, + "tenantId": { + "type": "string", + "description": "Azure tenant owning the identity." + } + }, + "additionalProperties": false + }, + "RemoteAzureContainerSas": { + "type": "object", + "description": "Explicit fields of an Azure user-delegation SAS. Keeping the fields typed\nlets clients independently validate container scope, permissions, protocol,\nand expiry before constructing query parameters.", + "required": [ + "accountName", + "containerName", + "permissions", + "startsAt", + "expiresAt", + "signedObjectId", + "signedTenantId", + "signedKeyStart", + "signedKeyExpiry", + "signedKeyService", + "signedKeyVersion", + "protocol", + "serviceVersion", + "signedResource", + "signature" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account named by the signed canonical resource." + }, + "containerName": { + "type": "string", + "description": "Blob container named by the signed canonical resource." + }, + "expiresAt": { + "type": "string", + "description": "SAS validity end (`se`)." + }, + "permissions": { + "type": "string", + "description": "Canonically ordered SAS permissions (`sp`)." + }, + "protocol": { + "type": "string", + "description": "Required transport protocol (`spr`)." + }, + "serviceVersion": { + "type": "string", + "description": "Storage authorization version (`sv`)." + }, + "signature": { + "type": "string", + "description": "HMAC-SHA256 signature (`sig`)." + }, + "signedKeyExpiry": { "type": "string", - "format": "date-time" + "description": "Delegation-key validity end (`ske`)." }, - "format": { - "$ref": "#/components/schemas/RawHeartbeatSnippetFormat" + "signedKeyService": { + "type": "string", + "description": "Delegation-key service (`sks`)." }, - "source": { - "type": "string" + "signedKeyStart": { + "type": "string", + "description": "Delegation-key validity start (`skt`)." }, - "truncated": { - "type": "boolean" + "signedKeyVersion": { + "type": "string", + "description": "Delegation-key version (`skv`)." + }, + "signedObjectId": { + "type": "string", + "description": "Object ID that requested the delegation key (`skoid`)." + }, + "signedResource": { + "type": "string", + "description": "Signed resource kind (`sr`)." + }, + "signedTenantId": { + "type": "string", + "description": "Tenant ID that issued the delegation key (`sktid`)." + }, + "startsAt": { + "type": "string", + "description": "SAS validity start (`st`)." } - } + }, + "additionalProperties": false }, - "RawHeartbeatSnippetFormat": { - "type": "string", - "enum": [ - "json", - "yaml", - "text" - ] + "RemoteAzureCredentials": { + "oneOf": [ + { + "type": "object", + "description": "User-delegation SAS signed for exactly one container.", + "required": [ + "sas", + "type" + ], + "properties": { + "sas": { + "$ref": "#/components/schemas/RemoteAzureContainerSas", + "description": "Explicit signed fields required to reconstruct the SAS query." + }, + "type": { + "type": "string", + "enum": [ + "containerSas" + ] + } + } + } + ], + "description": "The only Azure credential form remote binding resolution can return." }, - "ReconcileRequest": { + "RemoteBlobStorageBinding": { "type": "object", + "description": "Concrete Azure Blob Storage topology returned to remote clients.", "required": [ - "deploymentId", - "session", - "state" + "accountName", + "containerName" ], "properties": { - "deploymentId": { - "type": "string" - }, - "heartbeats": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResourceHeartbeat" - } - }, - "session": { - "type": "string" - }, - "state": {}, - "suggestedDelayMs": { - "type": "integer", - "format": "int64", - "minimum": 0, - "nullable": true + "accountName": { + "type": "string", + "description": "Storage account containing the authorized container." }, - "updateHeartbeat": { - "type": "boolean" + "containerName": { + "type": "string", + "description": "Blob container authorized by the credential lease." } - } + }, + "additionalProperties": false }, - "ReconcileResponse": { + "RemoteGcpClientConfig": { "type": "object", + "description": "Response-safe GCP client configuration. Refreshable source credentials and\nservice endpoint overrides cannot be represented by this type.", "required": [ - "success", - "current" + "projectId", + "region", + "credentials" ], "properties": { - "current": {}, - "nativeImageHost": { + "credentials": { + "$ref": "#/components/schemas/RemoteGcpCredentials", + "description": "Already-minted OAuth access token." + }, + "projectId": { "type": "string", - "description": "Native image registry host for Lambda/Cloud Run.\nReturned so push clients can set it on their local DeploymentConfig.", + "description": "GCP project containing the bucket." + }, + "projectNumber": { + "type": "string", + "description": "Numeric GCP project id, when known.", "nullable": true }, - "success": { - "type": "boolean" + "region": { + "type": "string", + "description": "GCP region configured for the deployment." } - } + }, + "additionalProperties": false }, - "ReleaseRequest": { + "RemoteGcpCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Short-lived OAuth access token. Its expiry is the response `expiresAt`.", + "required": [ + "token", + "type" + ], + "properties": { + "token": { + "type": "string", + "description": "OAuth bearer token." + }, + "type": { + "type": "string", + "enum": [ + "accessToken" + ] + } + } + } + ], + "description": "The only GCP credential form remote binding resolution can return." + }, + "RemoteGcsStorageBinding": { "type": "object", + "description": "Concrete Google Cloud Storage topology returned to remote clients.", "required": [ - "deploymentId", - "session" + "bucketName" ], "properties": { - "deploymentId": { - "type": "string" - }, - "session": { - "type": "string" + "bucketName": { + "type": "string", + "description": "GCS bucket name authorized by the credential lease." } - } + }, + "additionalProperties": false }, - "ReleaseResponse": { + "RemoteS3StorageBinding": { "type": "object", + "description": "Concrete S3 topology returned to remote clients.", "required": [ - "id", - "workspaceId", - "projectId", - "stack", - "createdAt" + "bucketName" ], "properties": { - "createdAt": { - "type": "string" - }, - "gitMetadata": { - "$ref": "#/components/schemas/GitMetadataResponse", - "nullable": true - }, - "id": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "stack": { - "$ref": "#/components/schemas/StackByPlatform" - }, - "workspaceId": { - "type": "string" + "bucketName": { + "type": "string", + "description": "S3 bucket name authorized by the credential lease." } - } + }, + "additionalProperties": false }, "RemoteStackManagementHeartbeatData": { "oneOf": [ @@ -9519,25 +12125,110 @@ } } }, - "ResolveCredentialsRequest": { + "ResolveBindingRequest": { "type": "object", + "description": "Request body for `POST /v1/bindings/resolve`.", "required": [ - "deploymentId" + "deploymentId", + "resourceId" ], "properties": { "deploymentId": { - "type": "string" + "type": "string", + "description": "Deployment containing the remote-enabled resource." + }, + "resourceId": { + "type": "string", + "description": "Logical Storage resource id in the deployment's stack state." } - } + }, + "additionalProperties": false }, - "ResolveCredentialsResponse": { - "type": "object", - "required": [ - "clientConfig" + "ResolveBindingResponse": { + "oneOf": [ + { + "type": "object", + "description": "AWS S3 and an AWS session.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteS3StorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAwsClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "s3" + ] + } + } + }, + { + "type": "object", + "description": "Azure Blob Storage and an exact container-scoped SAS.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteBlobStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAzureClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "blob" + ] + } + } + }, + { + "type": "object", + "description": "Google Cloud Storage and a bucket-downscoped access token.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteGcsStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteGcpClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "gcs" + ] + } + } + } ], - "properties": { - "clientConfig": {} - } + "description": "One approved remote Storage binding paired with credentials for the same\nprovider. The discriminant makes cross-provider combinations impossible." }, "ResourceEntry": { "type": "object", @@ -9545,6 +12236,12 @@ "resourceType" ], "properties": { + "publicEndpoints": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/PublicEndpointOutput" + } + }, "publicUrl": { "type": "string", "nullable": true @@ -9590,7 +12287,8 @@ } }, "resourceId": { - "type": "string" + "type": "string", + "description": "Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack." }, "resourceType": { "$ref": "#/components/schemas/ResourceType" @@ -9743,6 +12441,24 @@ } } }, + { + "type": "object", + "required": [ + "data", + "resourceType" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/PostgresHeartbeatData" + }, + "resourceType": { + "type": "string", + "enum": [ + "postgres" + ] + } + } + }, { "type": "object", "required": [ @@ -9953,7 +12669,7 @@ }, "ResourceRef": { "type": "object", - "description": "New ResourceRef that works with any resource type.\nThis can eventually replace the enum-based ResourceRef for full extensibility.", + "description": "Reference to a resource by its stable id and resource type.", "required": [ "type", "id" @@ -10248,6 +12964,7 @@ "gcp": {}, "kubernetes": {}, "local": {}, + "machines": {}, "test": {} } }, @@ -10281,6 +12998,11 @@ "type": "string", "description": "User-chosen deployment name. Must be unique within the deployment\ngroup; the manager returns 409 on collision rather than silently\nresolving to an existing deployment. Each setup adapter picks\nthe natural source: CloudFormation defaults to the CFN stack name,\nHelm to `{namespace}/{release}`, Terraform requires an explicit\n`name` attribute on the `alien_deployment` resource." }, + "inputValues": { + "type": "object", + "description": "Deployer-provided stack input values collected by generated setup\nsurfaces. Platform-backed managers resolve these into runtime\nenvironment variables before deployment creation; standalone managers\naccept the field for setup package compatibility.", + "additionalProperties": {} + }, "managementConfig": { "$ref": "#/components/schemas/ManagementConfig", "description": "Platform-derived management configuration, when this setup creates a\ncross-account/cross-tenant management identity.", @@ -10446,6 +13168,11 @@ "type": "object", "description": "User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount).", "properties": { + "compute": { + "$ref": "#/components/schemas/ComputeSettings", + "description": "Deployment-time compute selections for Alien-managed compute pools.\n\nThis is where provider machine names such as EC2 instance types, GCE\nmachine types, or Azure VM SKUs belong. Application source should\ndeclare portable requirements instead.", + "nullable": true + }, "deploymentModel": { "$ref": "#/components/schemas/DeploymentModel", "description": "Deployment model: push (Manager) or pull (Agent).\nDefault: Push.\n- Push: Manager drives updates. For cloud platforms, requires cross-account\n credentials established during initial setup. For push-mode local\n deployments (currently `alien dev`), the manager has direct access —\n no bootstrap needed.\n- Pull: Agent in the target environment drives updates via polling.\n Required for Kubernetes and remote local deployments." @@ -10683,6 +13410,24 @@ "approval-required" ] }, + "TraceContext": { + "type": "object", + "description": "W3C Trace Context propagated with a command lease.\n\nThe values are kept in their standard wire form so receivers can attach\nthem to handler telemetry without inventing separate trace/span fields.", + "required": [ + "traceparent" + ], + "properties": { + "traceparent": { + "type": "string", + "description": "W3C `traceparent` header value." + }, + "tracestate": { + "type": "string", + "description": "Optional W3C `tracestate` header value.", + "nullable": true + } + } + }, "UpdatesMode": { "type": "string", "description": "How updates are delivered to the deployment.", @@ -10874,6 +13619,7 @@ "kind", "id", "workspaceId", + "workspaceName", "role", "scope" ], @@ -10892,6 +13638,10 @@ }, "workspaceId": { "type": "string" + }, + "workspaceName": { + "type": "string", + "description": "Required by the platform-SDK `ServiceAccountSubject` parser when\nthe CLI looks up a deployment-group token by workspace name." } } }, @@ -11079,6 +13829,12 @@ } } } + }, + "securitySchemes": { + "bearer": { + "type": "http", + "scheme": "bearer" + } } }, "tags": [ @@ -11114,6 +13870,10 @@ "name": "credentials", "description": "Credential resolution for deployments" }, + { + "name": "bindings", + "description": "Remote resource binding resolution" + }, { "name": "telemetry", "description": "OTLP telemetry ingestion" diff --git a/client-sdks/manager/openapi.json b/client-sdks/manager/openapi.json index 9f45a1cef..01d26cf66 100644 --- a/client-sdks/manager/openapi.json +++ b/client-sdks/manager/openapi.json @@ -29,6 +29,81 @@ } } }, + "/v1/bindings/resolve": { + "post": { + "tags": [ + "bindings" + ], + "operationId": "resolve_binding", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Remote binding resolved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingResponse" + } + } + } + }, + "400": { + "description": "The deployment, release, or binding is not eligible for remote access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "401": { + "description": "Authentication is required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "403": { + "description": "The caller cannot resolve bindings for this deployment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "404": { + "description": "The deployment, release, or binding was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, "/v1/commands": { "post": { "tags": [ @@ -1096,41 +1171,6 @@ ] } }, - "/v1/resolve-credentials": { - "post": { - "tags": [ - "credentials" - ], - "operationId": "resolve_credentials", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Credentials resolved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsResponse" - } - } - } - } - }, - "security": [ - { - "bearer": [] - } - ] - } - }, "/v1/stack/import": { "post": { "tags": [ @@ -3971,6 +4011,32 @@ } } }, + { + "type": "object", + "description": "A short-lived Azure Storage shared access signature.\n\nQuery parameter values are kept decoded. Azure clients must encode them\nwhen attaching them to a request URL.", + "required": [ + "query_parameters", + "type" + ], + "properties": { + "query_parameters": { + "type": "object", + "description": "Exact SAS query parameters, including the signature and expiry.", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "sasToken" + ] + } + } + }, { "type": "object", "description": "Azure VM IMDS managed identity.", @@ -6226,6 +6292,17 @@ "mode" ], "properties": { + "failure_domains": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout." + } + ] + }, "machine": { "type": [ "string", @@ -6256,6 +6333,17 @@ "mode" ], "properties": { + "failure_domains": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout." + } + ] + }, "machine": { "type": [ "string", @@ -7153,6 +7241,28 @@ "tcp" ] }, + "FailureDomainSelection": { + "type": "object", + "description": "Failure-domain policy selected for a compute pool.", + "required": [ + "spread" + ], + "properties": { + "selectedFailureDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation." + }, + "spread": { + "type": "integer", + "format": "int32", + "description": "Number of distinct failure domains across which new stateful replicas may be spread.", + "minimum": 0 + } + } + }, "GcpArtifactRegistryHeartbeatData": { "type": "object", "required": [ @@ -13519,6 +13629,313 @@ } } }, + "RemoteAwsClientConfig": { + "type": "object", + "description": "Response-safe AWS client configuration. The public contract deliberately\nhas no static, profile, metadata, or web-identity credential variants.", + "required": [ + "accountId", + "region", + "credentials" + ], + "properties": { + "accountId": { + "type": "string", + "description": "AWS account containing the bucket." + }, + "credentials": { + "$ref": "#/components/schemas/RemoteAwsCredentials", + "description": "Expiring AWS session credentials." + }, + "region": { + "type": "string", + "description": "AWS region containing the bucket." + } + }, + "additionalProperties": false + }, + "RemoteAwsCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Temporary AWS session credentials with an authoritative expiry.", + "required": [ + "accessKeyId", + "secretAccessKey", + "sessionToken", + "expiresAt", + "type" + ], + "properties": { + "accessKeyId": { + "type": "string", + "description": "AWS access key id." + }, + "expiresAt": { + "type": "string", + "description": "Provider-reported credential expiry." + }, + "secretAccessKey": { + "type": "string", + "description": "AWS secret access key." + }, + "sessionToken": { + "type": "string", + "description": "AWS session token." + }, + "type": { + "type": "string", + "enum": [ + "sessionCredentials" + ] + } + } + } + ], + "description": "The only AWS credential form remote binding resolution can return." + }, + "RemoteAzureClientConfig": { + "type": "object", + "description": "Response-safe Azure client configuration. It contains one container-bound\nuser-delegation SAS and no OAuth or refreshable identity source.", + "required": [ + "subscriptionId", + "tenantId", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteAzureCredentials", + "description": "A short-lived SAS bound to the requested Blob container." + }, + "region": { + "type": [ + "string", + "null" + ], + "description": "Azure region configured for the deployment." + }, + "subscriptionId": { + "type": "string", + "description": "Azure subscription containing the storage account." + }, + "tenantId": { + "type": "string", + "description": "Azure tenant owning the identity." + } + }, + "additionalProperties": false + }, + "RemoteAzureContainerSas": { + "type": "object", + "description": "Explicit fields of an Azure user-delegation SAS. Keeping the fields typed\nlets clients independently validate container scope, permissions, protocol,\nand expiry before constructing query parameters.", + "required": [ + "accountName", + "containerName", + "permissions", + "startsAt", + "expiresAt", + "signedObjectId", + "signedTenantId", + "signedKeyStart", + "signedKeyExpiry", + "signedKeyService", + "signedKeyVersion", + "protocol", + "serviceVersion", + "signedResource", + "signature" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account named by the signed canonical resource." + }, + "containerName": { + "type": "string", + "description": "Blob container named by the signed canonical resource." + }, + "expiresAt": { + "type": "string", + "description": "SAS validity end (`se`)." + }, + "permissions": { + "type": "string", + "description": "Canonically ordered SAS permissions (`sp`)." + }, + "protocol": { + "type": "string", + "description": "Required transport protocol (`spr`)." + }, + "serviceVersion": { + "type": "string", + "description": "Storage authorization version (`sv`)." + }, + "signature": { + "type": "string", + "description": "HMAC-SHA256 signature (`sig`)." + }, + "signedKeyExpiry": { + "type": "string", + "description": "Delegation-key validity end (`ske`)." + }, + "signedKeyService": { + "type": "string", + "description": "Delegation-key service (`sks`)." + }, + "signedKeyStart": { + "type": "string", + "description": "Delegation-key validity start (`skt`)." + }, + "signedKeyVersion": { + "type": "string", + "description": "Delegation-key version (`skv`)." + }, + "signedObjectId": { + "type": "string", + "description": "Object ID that requested the delegation key (`skoid`)." + }, + "signedResource": { + "type": "string", + "description": "Signed resource kind (`sr`)." + }, + "signedTenantId": { + "type": "string", + "description": "Tenant ID that issued the delegation key (`sktid`)." + }, + "startsAt": { + "type": "string", + "description": "SAS validity start (`st`)." + } + }, + "additionalProperties": false + }, + "RemoteAzureCredentials": { + "oneOf": [ + { + "type": "object", + "description": "User-delegation SAS signed for exactly one container.", + "required": [ + "sas", + "type" + ], + "properties": { + "sas": { + "$ref": "#/components/schemas/RemoteAzureContainerSas", + "description": "Explicit signed fields required to reconstruct the SAS query." + }, + "type": { + "type": "string", + "enum": [ + "containerSas" + ] + } + } + } + ], + "description": "The only Azure credential form remote binding resolution can return." + }, + "RemoteBlobStorageBinding": { + "type": "object", + "description": "Concrete Azure Blob Storage topology returned to remote clients.", + "required": [ + "accountName", + "containerName" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account containing the authorized container." + }, + "containerName": { + "type": "string", + "description": "Blob container authorized by the credential lease." + } + }, + "additionalProperties": false + }, + "RemoteGcpClientConfig": { + "type": "object", + "description": "Response-safe GCP client configuration. Refreshable source credentials and\nservice endpoint overrides cannot be represented by this type.", + "required": [ + "projectId", + "region", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteGcpCredentials", + "description": "Already-minted OAuth access token." + }, + "projectId": { + "type": "string", + "description": "GCP project containing the bucket." + }, + "projectNumber": { + "type": [ + "string", + "null" + ], + "description": "Numeric GCP project id, when known." + }, + "region": { + "type": "string", + "description": "GCP region configured for the deployment." + } + }, + "additionalProperties": false + }, + "RemoteGcpCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Short-lived OAuth access token. Its expiry is the response `expiresAt`.", + "required": [ + "token", + "type" + ], + "properties": { + "token": { + "type": "string", + "description": "OAuth bearer token." + }, + "type": { + "type": "string", + "enum": [ + "accessToken" + ] + } + } + } + ], + "description": "The only GCP credential form remote binding resolution can return." + }, + "RemoteGcsStorageBinding": { + "type": "object", + "description": "Concrete Google Cloud Storage topology returned to remote clients.", + "required": [ + "bucketName" + ], + "properties": { + "bucketName": { + "type": "string", + "description": "GCS bucket name authorized by the credential lease." + } + }, + "additionalProperties": false + }, + "RemoteS3StorageBinding": { + "type": "object", + "description": "Concrete S3 topology returned to remote clients.", + "required": [ + "bucketName" + ], + "properties": { + "bucketName": { + "type": "string", + "description": "S3 bucket name authorized by the credential lease." + } + }, + "additionalProperties": false + }, "RemoteStackManagementHeartbeatData": { "oneOf": [ { @@ -13622,27 +14039,110 @@ } } }, - "ResolveCredentialsRequest": { + "ResolveBindingRequest": { "type": "object", + "description": "Request body for `POST /v1/bindings/resolve`.", "required": [ - "deploymentId" + "deploymentId", + "resourceId" ], "properties": { "deploymentId": { - "type": "string" + "type": "string", + "description": "Deployment containing the remote-enabled resource." + }, + "resourceId": { + "type": "string", + "description": "Logical Storage resource id in the deployment's stack state." } - } + }, + "additionalProperties": false }, - "ResolveCredentialsResponse": { - "type": "object", - "required": [ - "clientConfig" - ], - "properties": { - "clientConfig": { - "$ref": "#/components/schemas/ClientConfig" + "ResolveBindingResponse": { + "oneOf": [ + { + "type": "object", + "description": "AWS S3 and an AWS session.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteS3StorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAwsClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "s3" + ] + } + } + }, + { + "type": "object", + "description": "Azure Blob Storage and an exact container-scoped SAS.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteBlobStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAzureClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "blob" + ] + } + } + }, + { + "type": "object", + "description": "Google Cloud Storage and a bucket-downscoped access token.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteGcsStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteGcpClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "gcs" + ] + } + } } - } + ], + "description": "One approved remote Storage binding paired with credentials for the same\nprovider. The discriminant makes cross-provider combinations impossible." }, "ResourceEntry": { "type": "object", @@ -15382,6 +15882,12 @@ } } } + }, + "securitySchemes": { + "bearer": { + "type": "http", + "scheme": "bearer" + } } }, "tags": [ @@ -15417,6 +15923,10 @@ "name": "credentials", "description": "Credential resolution for deployments" }, + { + "name": "bindings", + "description": "Remote resource binding resolution" + }, { "name": "telemetry", "description": "OTLP telemetry ingestion" diff --git a/client-sdks/manager/rust/openapi-3.0.json b/client-sdks/manager/rust/openapi-3.0.json index da80030c0..ccd85ed5c 100644 --- a/client-sdks/manager/rust/openapi-3.0.json +++ b/client-sdks/manager/rust/openapi-3.0.json @@ -29,6 +29,81 @@ } } }, + "/v1/bindings/resolve": { + "post": { + "tags": [ + "bindings" + ], + "operationId": "resolve_binding", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Remote binding resolved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingResponse" + } + } + } + }, + "400": { + "description": "The deployment, release, or binding is not eligible for remote access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "401": { + "description": "Authentication is required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "403": { + "description": "The caller cannot resolve bindings for this deployment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "404": { + "description": "The deployment, release, or binding was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, "/v1/commands": { "post": { "tags": [ @@ -1096,41 +1171,6 @@ ] } }, - "/v1/resolve-credentials": { - "post": { - "tags": [ - "credentials" - ], - "operationId": "resolve_credentials", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Credentials resolved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsResponse" - } - } - } - } - }, - "security": [ - { - "bearer": [] - } - ] - } - }, "/v1/stack/import": { "post": { "tags": [ @@ -3539,6 +3579,29 @@ } } }, + { + "type": "object", + "description": "A short-lived Azure Storage shared access signature.\n\nQuery parameter values are kept decoded. Azure clients must encode them\nwhen attaching them to a request URL.", + "required": [ + "query_parameters", + "type" + ], + "properties": { + "query_parameters": { + "type": "object", + "description": "Exact SAS query parameters, including the signature and expiry.", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "sasToken" + ] + } + } + }, { "type": "object", "description": "Azure VM IMDS managed identity.", @@ -5460,6 +5523,11 @@ "mode" ], "properties": { + "failure_domains": { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout.", + "nullable": true + }, "machine": { "type": "string", "description": "Provider machine type selected for this deployment.", @@ -5488,6 +5556,11 @@ "mode" ], "properties": { + "failure_domains": { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout.", + "nullable": true + }, "machine": { "type": "string", "description": "Provider machine type selected for this deployment.", @@ -6280,6 +6353,28 @@ "tcp" ] }, + "FailureDomainSelection": { + "type": "object", + "description": "Failure-domain policy selected for a compute pool.", + "required": [ + "spread" + ], + "properties": { + "selectedFailureDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation." + }, + "spread": { + "type": "integer", + "format": "int32", + "description": "Number of distinct failure domains across which new stateful replicas may be spread.", + "minimum": 0 + } + } + }, "GcpArtifactRegistryHeartbeatData": { "type": "object", "required": [ @@ -11626,6 +11721,309 @@ } } }, + "RemoteAwsClientConfig": { + "type": "object", + "description": "Response-safe AWS client configuration. The public contract deliberately\nhas no static, profile, metadata, or web-identity credential variants.", + "required": [ + "accountId", + "region", + "credentials" + ], + "properties": { + "accountId": { + "type": "string", + "description": "AWS account containing the bucket." + }, + "credentials": { + "$ref": "#/components/schemas/RemoteAwsCredentials", + "description": "Expiring AWS session credentials." + }, + "region": { + "type": "string", + "description": "AWS region containing the bucket." + } + }, + "additionalProperties": false + }, + "RemoteAwsCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Temporary AWS session credentials with an authoritative expiry.", + "required": [ + "accessKeyId", + "secretAccessKey", + "sessionToken", + "expiresAt", + "type" + ], + "properties": { + "accessKeyId": { + "type": "string", + "description": "AWS access key id." + }, + "expiresAt": { + "type": "string", + "description": "Provider-reported credential expiry." + }, + "secretAccessKey": { + "type": "string", + "description": "AWS secret access key." + }, + "sessionToken": { + "type": "string", + "description": "AWS session token." + }, + "type": { + "type": "string", + "enum": [ + "sessionCredentials" + ] + } + } + } + ], + "description": "The only AWS credential form remote binding resolution can return." + }, + "RemoteAzureClientConfig": { + "type": "object", + "description": "Response-safe Azure client configuration. It contains one container-bound\nuser-delegation SAS and no OAuth or refreshable identity source.", + "required": [ + "subscriptionId", + "tenantId", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteAzureCredentials", + "description": "A short-lived SAS bound to the requested Blob container." + }, + "region": { + "type": "string", + "description": "Azure region configured for the deployment.", + "nullable": true + }, + "subscriptionId": { + "type": "string", + "description": "Azure subscription containing the storage account." + }, + "tenantId": { + "type": "string", + "description": "Azure tenant owning the identity." + } + }, + "additionalProperties": false + }, + "RemoteAzureContainerSas": { + "type": "object", + "description": "Explicit fields of an Azure user-delegation SAS. Keeping the fields typed\nlets clients independently validate container scope, permissions, protocol,\nand expiry before constructing query parameters.", + "required": [ + "accountName", + "containerName", + "permissions", + "startsAt", + "expiresAt", + "signedObjectId", + "signedTenantId", + "signedKeyStart", + "signedKeyExpiry", + "signedKeyService", + "signedKeyVersion", + "protocol", + "serviceVersion", + "signedResource", + "signature" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account named by the signed canonical resource." + }, + "containerName": { + "type": "string", + "description": "Blob container named by the signed canonical resource." + }, + "expiresAt": { + "type": "string", + "description": "SAS validity end (`se`)." + }, + "permissions": { + "type": "string", + "description": "Canonically ordered SAS permissions (`sp`)." + }, + "protocol": { + "type": "string", + "description": "Required transport protocol (`spr`)." + }, + "serviceVersion": { + "type": "string", + "description": "Storage authorization version (`sv`)." + }, + "signature": { + "type": "string", + "description": "HMAC-SHA256 signature (`sig`)." + }, + "signedKeyExpiry": { + "type": "string", + "description": "Delegation-key validity end (`ske`)." + }, + "signedKeyService": { + "type": "string", + "description": "Delegation-key service (`sks`)." + }, + "signedKeyStart": { + "type": "string", + "description": "Delegation-key validity start (`skt`)." + }, + "signedKeyVersion": { + "type": "string", + "description": "Delegation-key version (`skv`)." + }, + "signedObjectId": { + "type": "string", + "description": "Object ID that requested the delegation key (`skoid`)." + }, + "signedResource": { + "type": "string", + "description": "Signed resource kind (`sr`)." + }, + "signedTenantId": { + "type": "string", + "description": "Tenant ID that issued the delegation key (`sktid`)." + }, + "startsAt": { + "type": "string", + "description": "SAS validity start (`st`)." + } + }, + "additionalProperties": false + }, + "RemoteAzureCredentials": { + "oneOf": [ + { + "type": "object", + "description": "User-delegation SAS signed for exactly one container.", + "required": [ + "sas", + "type" + ], + "properties": { + "sas": { + "$ref": "#/components/schemas/RemoteAzureContainerSas", + "description": "Explicit signed fields required to reconstruct the SAS query." + }, + "type": { + "type": "string", + "enum": [ + "containerSas" + ] + } + } + } + ], + "description": "The only Azure credential form remote binding resolution can return." + }, + "RemoteBlobStorageBinding": { + "type": "object", + "description": "Concrete Azure Blob Storage topology returned to remote clients.", + "required": [ + "accountName", + "containerName" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account containing the authorized container." + }, + "containerName": { + "type": "string", + "description": "Blob container authorized by the credential lease." + } + }, + "additionalProperties": false + }, + "RemoteGcpClientConfig": { + "type": "object", + "description": "Response-safe GCP client configuration. Refreshable source credentials and\nservice endpoint overrides cannot be represented by this type.", + "required": [ + "projectId", + "region", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteGcpCredentials", + "description": "Already-minted OAuth access token." + }, + "projectId": { + "type": "string", + "description": "GCP project containing the bucket." + }, + "projectNumber": { + "type": "string", + "description": "Numeric GCP project id, when known.", + "nullable": true + }, + "region": { + "type": "string", + "description": "GCP region configured for the deployment." + } + }, + "additionalProperties": false + }, + "RemoteGcpCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Short-lived OAuth access token. Its expiry is the response `expiresAt`.", + "required": [ + "token", + "type" + ], + "properties": { + "token": { + "type": "string", + "description": "OAuth bearer token." + }, + "type": { + "type": "string", + "enum": [ + "accessToken" + ] + } + } + } + ], + "description": "The only GCP credential form remote binding resolution can return." + }, + "RemoteGcsStorageBinding": { + "type": "object", + "description": "Concrete Google Cloud Storage topology returned to remote clients.", + "required": [ + "bucketName" + ], + "properties": { + "bucketName": { + "type": "string", + "description": "GCS bucket name authorized by the credential lease." + } + }, + "additionalProperties": false + }, + "RemoteS3StorageBinding": { + "type": "object", + "description": "Concrete S3 topology returned to remote clients.", + "required": [ + "bucketName" + ], + "properties": { + "bucketName": { + "type": "string", + "description": "S3 bucket name authorized by the credential lease." + } + }, + "additionalProperties": false + }, "RemoteStackManagementHeartbeatData": { "oneOf": [ { @@ -11727,27 +12125,110 @@ } } }, - "ResolveCredentialsRequest": { + "ResolveBindingRequest": { "type": "object", + "description": "Request body for `POST /v1/bindings/resolve`.", "required": [ - "deploymentId" + "deploymentId", + "resourceId" ], "properties": { "deploymentId": { - "type": "string" + "type": "string", + "description": "Deployment containing the remote-enabled resource." + }, + "resourceId": { + "type": "string", + "description": "Logical Storage resource id in the deployment's stack state." } - } + }, + "additionalProperties": false }, - "ResolveCredentialsResponse": { - "type": "object", - "required": [ - "clientConfig" - ], - "properties": { - "clientConfig": { - "$ref": "#/components/schemas/ClientConfig" + "ResolveBindingResponse": { + "oneOf": [ + { + "type": "object", + "description": "AWS S3 and an AWS session.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteS3StorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAwsClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "s3" + ] + } + } + }, + { + "type": "object", + "description": "Azure Blob Storage and an exact container-scoped SAS.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteBlobStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAzureClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "blob" + ] + } + } + }, + { + "type": "object", + "description": "Google Cloud Storage and a bucket-downscoped access token.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteGcsStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteGcpClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "gcs" + ] + } + } } - } + ], + "description": "One approved remote Storage binding paired with credentials for the same\nprovider. The discriminant makes cross-provider combinations impossible." }, "ResourceEntry": { "type": "object", @@ -13348,6 +13829,12 @@ } } } + }, + "securitySchemes": { + "bearer": { + "type": "http", + "scheme": "bearer" + } } }, "tags": [ @@ -13383,6 +13870,10 @@ "name": "credentials", "description": "Credential resolution for deployments" }, + { + "name": "bindings", + "description": "Remote resource binding resolution" + }, { "name": "telemetry", "description": "OTLP telemetry ingestion" diff --git a/client-sdks/manager/rust/src/lib.rs b/client-sdks/manager/rust/src/lib.rs index bc91784c9..5d53671b0 100644 --- a/client-sdks/manager/rust/src/lib.rs +++ b/client-sdks/manager/rust/src/lib.rs @@ -55,6 +55,22 @@ impl SdkResultExtReadingBody> for Result SdkResultExtReadingBody> + for Result, Error> +{ + fn into_sdk_error_reading_body( + self, + ) -> impl std::future::Future, AlienError>> + Send + { + async move { + match self { + Ok(response) => Ok(response), + Err(error) => Err(convert_typed_sdk_error_reading_body(error).await), + } + } + } +} + impl SdkResultExt> for Result, Error<()>> { fn into_sdk_error(self) -> Result, AlienError> { self.map_err(convert_sdk_error) @@ -71,56 +87,109 @@ impl SdkResultExt> for Result, Error<()>> { pub async fn convert_sdk_error_reading_body(err: Error<()>) -> AlienError { match err { Error::UnexpectedResponse(response) => { - let status = response.status().as_u16(); - let canonical_reason = response - .status() - .canonical_reason() - .unwrap_or("Unknown") - .to_string(); - let url = response.url().to_string(); - let header_request_id = response - .headers() - .get("x-request-id") - .and_then(|value| value.to_str().ok()) - .map(str::to_string); - let body = response.text().await.unwrap_or_default(); - - if let Ok(mut api_error) = serde_json::from_str::>(&body) { - if api_error.http_status_code.is_none() { - api_error.http_status_code = Some(status); - } - let body_request_id = serde_json::from_str::(&body) - .ok() - .and_then(|value| value.get("requestId")?.as_str().map(str::to_string)); - api_error.context = context_with_request_id( - api_error.context, - header_request_id.as_deref().or(body_request_id.as_deref()), - ); - return api_error; - } - - AlienError { - code: "UNEXPECTED_RESPONSE".to_string(), - message: format!("Unexpected response: {} {}", status, canonical_reason), - context: Some(serde_json::json!({ - "status": status, - "url": url, - })), - hint: None, - retryable: status >= 500, - internal: false, - http_status_code: Some(status), - source: None, - human_layer_presentation: HumanLayerPresentation::Normal, - error: Some(GenericError { - message: format!("Unexpected response status: {}", status), - }), - } + convert_unexpected_response_reading_body(response).await } other => convert_sdk_error(other), } } +async fn convert_typed_sdk_error_reading_body( + err: Error, +) -> AlienError { + match err { + Error::ErrorResponse(response) => convert_typed_error_response(response), + Error::UnexpectedResponse(response) => { + convert_unexpected_response_reading_body(response).await + } + other => convert_sdk_error(other.into_untyped()), + } +} + +fn convert_typed_error_response( + response: ResponseValue, +) -> AlienError { + let status = response.status().as_u16(); + let request_id = response + .headers() + .get("x-request-id") + .and_then(|value| value.to_str().ok()) + .map(str::to_string); + let api_error = response.into_inner(); + let message = String::from(api_error.message); + let source = api_error + .source + .and_then(|value| serde_json::from_value::>(value).ok()) + .map(Box::new); + let http_status_code = api_error + .http_status_code + .and_then(|value| u16::try_from(value).ok()) + .filter(|value| (100..=599).contains(value)) + .or(Some(status)); + + AlienError { + code: String::from(api_error.code), + message: message.clone(), + context: context_with_request_id(api_error.context, request_id.as_deref()), + hint: api_error.hint, + retryable: api_error.retryable, + internal: api_error.internal, + http_status_code, + source, + human_layer_presentation: HumanLayerPresentation::Normal, + error: Some(GenericError { message }), + } +} + +async fn convert_unexpected_response_reading_body( + response: reqwest::Response, +) -> AlienError { + let status = response.status().as_u16(); + let canonical_reason = response + .status() + .canonical_reason() + .unwrap_or("Unknown") + .to_string(); + let url = response.url().to_string(); + let header_request_id = response + .headers() + .get("x-request-id") + .and_then(|value| value.to_str().ok()) + .map(str::to_string); + let body = response.text().await.unwrap_or_default(); + + if let Ok(mut api_error) = serde_json::from_str::>(&body) { + if api_error.http_status_code.is_none() { + api_error.http_status_code = Some(status); + } + let body_request_id = serde_json::from_str::(&body) + .ok() + .and_then(|value| value.get("requestId")?.as_str().map(str::to_string)); + api_error.context = context_with_request_id( + api_error.context, + header_request_id.as_deref().or(body_request_id.as_deref()), + ); + return api_error; + } + + AlienError { + code: "UNEXPECTED_RESPONSE".to_string(), + message: format!("Unexpected response: {} {}", status, canonical_reason), + context: Some(serde_json::json!({ + "status": status, + "url": url, + })), + hint: None, + retryable: is_retryable_http_status(status), + internal: false, + http_status_code: Some(status), + source: None, + human_layer_presentation: HumanLayerPresentation::Normal, + error: Some(GenericError { + message: format!("Unexpected response status: {}", status), + }), + } +} + fn context_with_request_id( context: Option, request_id: Option<&str>, @@ -144,6 +213,12 @@ fn context_with_request_id( } } +/// Returns whether an HTTP response represents a transient failure that a +/// caller may safely retry. +pub fn is_retryable_http_status(status: u16) -> bool { + matches!(status, 408 | 425 | 429) || (500..=599).contains(&status) +} + /// Convert a progenitor SDK error to AlienError, preserving all details. pub fn convert_sdk_error(err: Error<()>) -> AlienError { match err { @@ -160,7 +235,7 @@ pub fn convert_sdk_error(err: Error<()>) -> AlienError { "status": status, })), hint: None, - retryable: status >= 500, + retryable: is_retryable_http_status(status), internal: false, http_status_code: Some(status), source: None, @@ -219,23 +294,15 @@ pub fn convert_sdk_error(err: Error<()>) -> AlienError { } } Error::InvalidResponsePayload(bytes, json_err) => { - let raw_body = String::from_utf8_lossy(&bytes); - let truncated = if raw_body.len() > 1000 { - format!( - "{}...(truncated {} bytes)", - &raw_body[..1000], - raw_body.len() - 1000 - ) - } else { - raw_body.to_string() - }; - AlienError { code: "INVALID_RESPONSE_PAYLOAD".to_string(), message: format!("Failed to parse response: {}", json_err), context: Some(serde_json::json!({ "parseError": json_err.to_string(), - "responseBody": truncated, + // Manager responses can contain short-lived credentials. + // Preserve enough metadata to diagnose truncation or + // schema drift without copying response bytes into errors. + "responseBodyLength": bytes.len(), })), hint: None, retryable: false, @@ -280,7 +347,7 @@ pub fn convert_sdk_error(err: Error<()>) -> AlienError { "url": response.url().to_string(), })), hint: None, - retryable: status >= 500, + retryable: is_retryable_http_status(status), internal: false, http_status_code: Some(status), source: None, @@ -345,7 +412,7 @@ fn build_reqwest_source(reqwest_err: &reqwest::Error) -> Option Error<()> { + fn unexpected_response(status: u16, body: &str) -> Error { let response = http::Response::builder() .status(status) .body(body.to_string()) @@ -383,6 +450,44 @@ mod tests { assert!(!error.internal); } + #[tokio::test] + async fn typed_error_response_preserves_alien_error_and_request_id() { + let api_error = serde_json::from_value::(serde_json::json!({ + "code": "FORBIDDEN", + "message": "Binding access denied", + "context": { "deploymentId": "dep_123" }, + "hint": "Use the assigned manager", + "retryable": false, + "internal": false, + "httpStatusCode": 403, + "source": { + "code": "GENERIC_ERROR", + "message": "policy rejected request", + "retryable": false, + "internal": false + } + })) + .expect("typed API error should deserialize"); + let mut headers = reqwest::header::HeaderMap::new(); + headers.insert("x-request-id", "req_header_123".parse().unwrap()); + let response = ResponseValue::new(api_error, reqwest::StatusCode::FORBIDDEN, headers); + + let error = convert_typed_sdk_error_reading_body(Error::ErrorResponse(response)).await; + + assert_eq!(error.code, "FORBIDDEN"); + assert_eq!(error.message, "Binding access denied"); + assert_eq!(error.http_status_code, Some(403)); + assert_eq!(error.hint.as_deref(), Some("Use the assigned manager")); + assert_eq!(error.context.as_ref().unwrap()["deploymentId"], "dep_123"); + assert_eq!( + error.context.as_ref().unwrap()["requestId"], + "req_header_123" + ); + assert_eq!(error.source.as_ref().unwrap().code, "GENERIC_ERROR"); + assert!(!error.retryable); + assert!(!error.internal); + } + #[tokio::test] async fn reading_body_falls_back_to_generic_error_for_non_alien_payloads() { let error = @@ -395,6 +500,91 @@ mod tests { assert!(error.retryable); } + #[tokio::test] + async fn reading_body_classifies_unstructured_rate_limits_as_retryable() { + let error = convert_sdk_error_reading_body(unexpected_response(429, "rate limited")).await; + + assert_eq!(error.code, "UNEXPECTED_RESPONSE"); + assert_eq!(error.http_status_code, Some(429)); + assert!(error.retryable); + } + + #[tokio::test] + async fn typed_endpoint_classifies_undocumented_rate_limits_as_retryable() { + let error = convert_typed_sdk_error_reading_body(unexpected_response::( + 429, + "rate limited", + )) + .await; + + assert_eq!(error.code, "UNEXPECTED_RESPONSE"); + assert_eq!(error.http_status_code, Some(429)); + assert!(error.retryable); + } + + #[tokio::test] + async fn generated_typed_endpoint_preserves_malformed_server_error_status() { + use std::io::{Read, Write}; + + let listener = std::net::TcpListener::bind("127.0.0.1:0") + .expect("test server should bind to a loopback port"); + let address = listener + .local_addr() + .expect("test server should have a local address"); + let server = std::thread::spawn(move || { + let (mut stream, _) = listener + .accept() + .expect("test server should accept the SDK request"); + let mut request = [0_u8; 4096]; + stream + .read(&mut request) + .expect("test server should read the SDK request"); + stream + .write_all( + b"HTTP/1.1 500 Internal Server Error\r\ncontent-type: text/html\r\ncontent-length: 17\r\nconnection: close\r\n\r\nupstream exploded", + ) + .expect("test server should return its malformed error body"); + }); + + let sdk_error = Client::new(&format!("http://{address}")) + .resolve_binding() + .body(types::ResolveBindingRequest { + deployment_id: "dep_test".to_string(), + resource_id: "storage".to_string(), + }) + .send() + .await + .expect_err("the generated SDK should return the server error"); + server.join().expect("test server should stop cleanly"); + + assert!(matches!( + &sdk_error, + Error::UnexpectedResponse(response) + if response.status() == reqwest::StatusCode::INTERNAL_SERVER_ERROR + )); + let error = convert_typed_sdk_error_reading_body(sdk_error).await; + + assert_eq!(error.code, "UNEXPECTED_RESPONSE"); + assert_eq!(error.http_status_code, Some(500)); + assert!(error.retryable); + } + + #[test] + fn retryable_http_statuses_are_limited_to_transient_failures() { + for status in [408, 425, 429, 500, 502, 503, 504, 599] { + assert!( + is_retryable_http_status(status), + "status {status} should be retryable" + ); + } + for status in [400, 401, 403, 404, 409, 422, 600] { + assert!( + !is_retryable_http_status(status), + "status {status} should not be retryable" + ); + } + } + #[tokio::test] async fn communication_error_includes_url_in_message_and_context() { let reqwest_err = reqwest::Client::new() @@ -414,4 +604,29 @@ mod tests { "http://127.0.0.1:9/v1/initialize" ); } + + #[test] + fn invalid_success_payload_never_copies_response_credentials_into_errors() { + let body = br#"{"accessToken":"sensitive-token","unexpected":true}"#.to_vec(); + let parse_error = serde_json::from_slice::(b"{") + .expect_err("fixture JSON should be invalid"); + let error = super::convert_sdk_error(Error::InvalidResponsePayload( + body.clone().into(), + parse_error, + )); + let rendered = format!("{error:?}"); + + assert_eq!(error.code, "INVALID_RESPONSE_PAYLOAD"); + assert_eq!( + error.context.as_ref().unwrap()["responseBodyLength"], + body.len() + ); + assert!(!rendered.contains("sensitive-token")); + assert!(error + .context + .as_ref() + .unwrap() + .get("responseBody") + .is_none()); + } } diff --git a/client-sdks/manager/typescript/.speakeasy/gen.lock b/client-sdks/manager/typescript/.speakeasy/gen.lock index 7d1ff447c..7da47d7a6 100644 --- a/client-sdks/manager/typescript/.speakeasy/gen.lock +++ b/client-sdks/manager/typescript/.speakeasy/gen.lock @@ -1,22 +1,22 @@ lockVersion: 2.0.0 id: 8940d7e8-6d5d-4ea9-9632-85457ecd75f0 management: - docChecksum: 387434866d9b7268ce65054f741e89bc + docChecksum: a798dd909369d68f202196bf3c0a5a6d docVersion: 1.0.0 - speakeasyVersion: 1.790.1 - generationVersion: 2.918.1 - releaseVersion: 1.15.0 - configChecksum: 60a8102d607fcf7c722a19adce321b15 + speakeasyVersion: 1.790.3 + generationVersion: 2.918.4 + releaseVersion: 2.1.6 + configChecksum: 49f06c92dc657f976ff8ef6736f9c9c0 repoURL: https://github.com/alienplatform/alien.git repoSubDirectory: client-sdks/manager/typescript persistentEdits: - generation_id: 243ad1d2-472d-469e-864b-7d6ff8afd82c - pristine_commit_hash: 0f15fa014a66436b9cab78905987a0bb87583413 - pristine_tree_hash: 2f25ad6267568b18296b672bd5e6b966cc5a77ce + generation_id: f75471be-671f-4ce1-aa91-f7f7af8fbc48 + pristine_commit_hash: 1eea0addd47f8f01dd020393b75f220f687da98e + pristine_tree_hash: 6e2d9fe0e04c0cc3b3acb9f0452ae88794bee233 features: typescript: additionalDependencies: 0.1.0 - additionalProperties: 0.1.3 + additionalProperties: 0.1.4 constsAndDefaults: 0.1.14 core: 3.31.4 defaultEnabledRetries: 0.1.0 @@ -176,8 +176,8 @@ trackedFiles: pristine_git_object: cfc351e45667695480b21c0a9cfaead5ecaa4f8e docs/models/azurecredentials.md: id: efb5910c7ea5 - last_write_checksum: sha1:4810eea32a671b28882d1085ef06ace800ed8a55 - pristine_git_object: 8b2e76a25003bf4a0a589f1620b9740f5fb1474c + last_write_checksum: sha1:56f2bdd8c81b3c8def44a31d0a89bd3b22eabb0e + pristine_git_object: 275aa11afd8abdb0200c28629de44317bfebd773 docs/models/azurecredentialsaccesstoken.md: id: 13bb524021cd last_write_checksum: sha1:61e94ae805732c10cb44811de021271feb6d89e8 @@ -186,6 +186,10 @@ trackedFiles: id: ad028772057a last_write_checksum: sha1:8a2c2cd5e8ecc180410f69a06e588bbb79f27831 pristine_git_object: 0cef782c595f1076e0f0d4990a18b21b234e970b + docs/models/azurecredentialssastoken.md: + id: 6f73e48d3535 + last_write_checksum: sha1:e6ccc526a6b613328fa7ec115ddb90fa1275379a + pristine_git_object: d231d9e09bb791adfd1a0b9e3bd8124a58d4e796 docs/models/azurecredentialsscopedaccesstokens.md: id: 41bc618b5641 last_write_checksum: sha1:8736061b99c3809158c0c8538fc35a497b6e52b3 @@ -440,12 +444,12 @@ trackedFiles: pristine_git_object: d65ed3211df626860c5de607b6386085ba0e8ccb docs/models/computepoolselectionautoscale.md: id: 888c69d9238c - last_write_checksum: sha1:e0310dad472f56a1f72f5284ab494877bb098340 - pristine_git_object: d688a8bd7be820cb34f27de07b8283cd715e3039 + last_write_checksum: sha1:518c57d6c2583b9b4db8c0449f43859a56f6d446 + pristine_git_object: 8fb85faa387e3cbdedd5b730bd676fc757be1141 docs/models/computepoolselectionfixed.md: id: c8fd3ab1360a - last_write_checksum: sha1:27ec77c214129e3b3189da665eeaa39ac8050d47 - pristine_git_object: 67034f7ad8660b093e541168662e9850375bf213 + last_write_checksum: sha1:36bc5697e261efdefd6a9a83a7cb32072a23c847 + pristine_git_object: 9a5fceb34ebe943fdd6f86445c043805a2c30e1f docs/models/computesettings.md: id: 7132ceec987d last_write_checksum: sha1:436f6c4c6a0ac58b03d1ba7f9e6c875554f9582f @@ -574,14 +578,26 @@ trackedFiles: id: f8f0907c6906 last_write_checksum: sha1:72530ca03965fdac11c0047f517a8223dc9b9a00 pristine_git_object: d796d52c3e87189eb58191a0a75b60f02ae59514 + docs/models/errors/alienerror.md: + id: 5efd872a4461 + last_write_checksum: sha1:41abee6bb8b7ae75d9e671909e38eee87cc55cfc + pristine_git_object: a44974b6316e56871c4f410faf4f60cc8fec258f docs/models/errors/errorresponse.md: id: f49cea889d69 last_write_checksum: sha1:1fd500a21310d350d878732c2dbd10fc2936d643 pristine_git_object: 6884c59ac8738f410dda1859f1762cf619c40483 + docs/models/exposeprotocol.md: + id: ffde144dce0f + last_write_checksum: sha1:2c1676838903db4819f24b1f10f6a07be0a20f5e + pristine_git_object: 1cf5391712b97025b3dea90a75b97a624cc672b8 docs/models/externalbindings.md: id: 90b25a76ccad last_write_checksum: sha1:415c53855152001e053f881f3bb3f9480c0b5dc9 pristine_git_object: c07935ffc6f1d23750d07830eab1874c660bcfa3 + docs/models/failuredomainselection.md: + id: 8ad7d50f78b7 + last_write_checksum: sha1:26799972062ebaf912d182a598ba406d04979138 + pristine_git_object: c1b69e096efbad6296f50fb9a82d978aa7f0ae23 docs/models/gcpcredentials.md: id: ba5218b3c3a0 last_write_checksum: sha1:4cc2e2c253416be3b32431c4f1df031bd4806500 @@ -894,6 +910,10 @@ trackedFiles: id: e809551c35c9 last_write_checksum: sha1:866a84952c8e46f8e3e7bb67c38f48d82c203124 pristine_git_object: 7052e1b1c902dd3b8d19866ec0a1d874a9fd204f + docs/models/loadbalancerendpoint.md: + id: c7bdf4a5c752 + last_write_checksum: sha1:5576458b18dd40b0ca5e66959d99162d533a2449 + pristine_git_object: 951a14a4d849c04dd0ceb85d6dba2b14232b1a5d docs/models/localoperation.md: id: 685cd167e973 last_write_checksum: sha1:9f71cbaeb53dbf91b204f76a755e0a9589525b00 @@ -1162,6 +1182,10 @@ trackedFiles: id: 6d7e5d6f7a9e last_write_checksum: sha1:860dddc2d9c8400886bb21ffd3947e846473a4d0 pristine_git_object: a1e160df9fea5e973cf651cf138435fa2f4cf149 + docs/models/publicendpointoutput.md: + id: e8f71c91239e + last_write_checksum: sha1:1cf317c1915070a0ded3412edc3c402f053c7a5e + pristine_git_object: 85340139967f0e36dfc95ef9be6a98e99aaa36be docs/models/publicendpointtargetsettings.md: id: ac14217a60e2 last_write_checksum: sha1:333519bbc1e5b9d827d64816af745cf20faafc13 @@ -1222,6 +1246,70 @@ trackedFiles: id: 5ce86c07628b last_write_checksum: sha1:414c2f232f15e19831883836353cd6929e54f211 pristine_git_object: f77e149a58290cd791d7b4af2ec5c15ba0c37880 + docs/models/remoteawsclientconfig.md: + id: 3a1857fd562b + last_write_checksum: sha1:0af18acf0b1955cddac01c244843f2979a3b11d3 + pristine_git_object: 491e2aed3c7bc2f71d7fa669267edd0d7795ceac + docs/models/remoteawscredentials.md: + id: 9001c4f1128a + last_write_checksum: sha1:8e8d8397a9cac4a675a2d837e877d4082733bd7b + pristine_git_object: a2e3d2b9b4532ff4a0aa592dcc0f58afd98f1b1a + docs/models/remoteawscredentialssessioncredentials.md: + id: 60f714a63735 + last_write_checksum: sha1:c6422ff4649989d8fea328599c6d8e996d37a22b + pristine_git_object: 07df165ab4bf712d932be124d9aacccd549f89af + docs/models/remoteawscredentialstype.md: + id: 144ccb35f514 + last_write_checksum: sha1:5357a2c99f75668313769f029b3bf84843416d4d + pristine_git_object: 76a0180378641864c990c046313896c4ccaaf236 + docs/models/remoteazureclientconfig.md: + id: d6c017b35743 + last_write_checksum: sha1:2af52229c72bb552f88e2632d93cdfc1a06a9b9f + pristine_git_object: 795635908bf497bbbd3961bbee33d50b4ec5f011 + docs/models/remoteazurecontainersas.md: + id: 969f5c46f23a + last_write_checksum: sha1:cf0963b261a4141285775edefa1674193d7f4622 + pristine_git_object: a2940c8cc1c6f8531544b90058697fede7ea02f2 + docs/models/remoteazurecredentials.md: + id: 8cdf1082fa04 + last_write_checksum: sha1:dd7887e6b5f818f25227609a6306572fff842e26 + pristine_git_object: b12ed89f357567934a92275f5a2142ed306062d4 + docs/models/remoteazurecredentialscontainersas.md: + id: 9620d0df293d + last_write_checksum: sha1:b0f47790841ad961615c6cff183ee389f3b13bce + pristine_git_object: 5747156005339f3c4e5a02f6c7cbb618fe913a10 + docs/models/remoteazurecredentialstype.md: + id: 40fb25fd59d9 + last_write_checksum: sha1:36da73e6ba20c6e1cf23b444e89153a8e0704392 + pristine_git_object: 0e19910c998f4261916257e032d16a156e1df40e + docs/models/remoteblobstoragebinding.md: + id: 5a82d2097d0e + last_write_checksum: sha1:ee4a448bca6d3b964714766c1e1efbe839a981fc + pristine_git_object: fbe4665c6a280b36b36fac850a757e4b2b187625 + docs/models/remotegcpclientconfig.md: + id: ec7e461f7f09 + last_write_checksum: sha1:b8e3d016932052f800d989b51a3486c0887ffefd + pristine_git_object: 79f7a363b6bf78c91a219869b78ef601986b079f + docs/models/remotegcpcredentials.md: + id: f31f2da95538 + last_write_checksum: sha1:ad0997a2bdc7cf58cb8616c20901866a7437941f + pristine_git_object: c755273ef56c4c5213aa11b23751689344eb010f + docs/models/remotegcpcredentialsaccesstoken.md: + id: ee8a75eb95a1 + last_write_checksum: sha1:1a7aa14193b56d05ce2ca2880b347afb6a76da46 + pristine_git_object: 510dd29a74981ddce91f7708dbff520dbb0da27f + docs/models/remotegcpcredentialstype.md: + id: 383942b12258 + last_write_checksum: sha1:b88413652210008c24cea4d74da330b9ecd7d9c5 + pristine_git_object: d1ce0afa4f43ec8caded9d0a53c7f600ba7ad38b + docs/models/remotegcsstoragebinding.md: + id: 54e0139d8a3c + last_write_checksum: sha1:3e4260141eff34d80819d9c42439a3b38f40dab2 + pristine_git_object: 50e744f9571f4a7c8e328c6b3b403d96dadaf2b0 + docs/models/remotes3storagebinding.md: + id: 8d2bae60370d + last_write_checksum: sha1:a446b02111340f2dc7f423a4992eff569d367399 + pristine_git_object: 33f7ec1686be4e23f90522561d4f425cb828e27f docs/models/remotestackmanagementheartbeatdata.md: id: 94bb63595ad2 last_write_checksum: sha1:baa4bd0dfb026a41fdf889e6aa81105a9e1133f8 @@ -1242,18 +1330,30 @@ trackedFiles: id: 1da9b1506ade last_write_checksum: sha1:85173c6858d7e609983661c53001676f18f97ac6 pristine_git_object: 6f71b7a139d26a9c8a51d66ba8d48b826a67e1c3 - docs/models/resolvecredentialsrequest.md: - id: 018b6f6908fe - last_write_checksum: sha1:606a3637e04e132c2bb944ca501b46512222bec7 - pristine_git_object: ccffc0dfd703b3c9398142f8a30f245a4b98b828 - docs/models/resolvecredentialsresponse.md: - id: bdfad47fdc60 - last_write_checksum: sha1:1c2a933ef036483f77ec52df6ee8f58cb3949b16 - pristine_git_object: de36540cfc7d3145753c602921c2321e6c361b63 + docs/models/resolvebindingrequest.md: + id: 3aeb40a10f21 + last_write_checksum: sha1:76929269174c515fb4c3c161a5b055f249717fc4 + pristine_git_object: b2e9ff980d7369d95d2bcddf33a11e588e55b0fa + docs/models/resolvebindingresponse.md: + id: 0208ea61e515 + last_write_checksum: sha1:37e4ed61cabeaed3b4f89b061d48350f547cc98b + pristine_git_object: d6f8ffad1ab5c52d9b421b64038b06ed4ab2f045 + docs/models/resolvebindingresponseblob.md: + id: c4d3f9d38a37 + last_write_checksum: sha1:d6b478e8c57c16a89765616125b3a98f69109239 + pristine_git_object: 5dea5ba439fef4f9e7e3c05ccf53ba39a71c1985 + docs/models/resolvebindingresponsegcs.md: + id: f666abc87913 + last_write_checksum: sha1:2336670df2dc0db50db6ebd1587d3e6e03acfc59 + pristine_git_object: 68b0ceee9459ff3983996922f63286b5a83a95b4 + docs/models/resolvebindingresponses3.md: + id: 3808cc2746b4 + last_write_checksum: sha1:f9089fb250f9d1b507fb5acb45a701659d306da2 + pristine_git_object: 6c91b7aec458253226275e77997eaa741672de94 docs/models/resourceentry.md: id: d9b6374fe8f4 - last_write_checksum: sha1:6f02d6b8268bc0e335c04e4d876e46d937abac63 - pristine_git_object: 12e9d0524bda91f2ed7129123669e539799476cb + last_write_checksum: sha1:2ecdf898923a5e8449e1cfde246f88120c2eab4d + pristine_git_object: 522aa4a8eafb81952b74452e4c07aefd5c346fe0 docs/models/resourceheartbeat.md: id: a11ea71a67e4 last_write_checksum: sha1:a589d9b03f84e0ae67304dc3d055a8beaa119538 @@ -1550,14 +1650,18 @@ trackedFiles: id: 6fbf7752339b last_write_checksum: sha1:7c234300408a90e9c7dd97806c864edcfcf5094f pristine_git_object: 55e83efe7c9b689b65a846b83fea7f923f8332b2 + docs/sdks/bindings/README.md: + id: 5f707c9965e2 + last_write_checksum: sha1:999a98ec7fe9c87bc4c1b6149581cef18210c5a9 + pristine_git_object: 01057a800dd34059e6105fc3e7566b5a263d9d23 docs/sdks/commands/README.md: id: 8951f1925b1f last_write_checksum: sha1:b0a7269e356ea66dfe639e2c5a64450b6da2ba89 pristine_git_object: bc0a2e4af798a70d672c92d9ad0604ff5de7c7d8 docs/sdks/credentials/README.md: id: fb7e49751327 - last_write_checksum: sha1:468ddbe656f521be0f334ca9e5f285121a8e7c5f - pristine_git_object: df8af1be18349355a6cf5ac3d588226bc38254c2 + last_write_checksum: sha1:5535df20b5f83408a15d4fef27b969136a6f7ee7 + pristine_git_object: fdd2ce9af373adfb8c4607e7aaeab5df2ce626f3 docs/sdks/deploymentgroups/README.md: id: 5df9f1e7770b last_write_checksum: sha1:fde85ac9c7c13f36bfbd1fca9d22ef62235e465b @@ -1612,16 +1716,20 @@ trackedFiles: pristine_git_object: ee6bb1a089f199ee421f67dd2cfd0e26a3b112c9 jsr.json: id: 7f6ab7767282 - last_write_checksum: sha1:9c4a17baad3ffff6404bf739c838c4ff6ae20835 - pristine_git_object: 329443cf6b91292f2652bc273ea2743ab0264e8b + last_write_checksum: sha1:41872d9a5892005f4d0127c498c6dab3bb99b01d + pristine_git_object: 58ae39ebbaca93213588601b4f0ffffe6e55cf81 package.json: id: 7030d0b2f71b - last_write_checksum: sha1:e781bb7ded327175994b80764c4bfb05a3e65fb9 - pristine_git_object: 406f2a34bbde6c5e8cbf50a52075bbffe1684875 + last_write_checksum: sha1:740e3f867544d00fa94fece31be57346e65a01a8 + pristine_git_object: 479f1733be9ddb1c5b2d154d3164f8c59a546400 src/core.ts: id: f431fdbcd144 last_write_checksum: sha1:a3b94f76908a8f9a4857fea8aac869403adb797c pristine_git_object: 460274e12d3bbc21a750870d0e81414abaa1ea01 + src/funcs/bindingsResolveBinding.ts: + id: 3b95f037e426 + last_write_checksum: sha1:b5fb25036d43fe8d50ae396a1d85f04d702640cb + pristine_git_object: ee037441526d30d9ffb19d6db491ef134bd90e26 src/funcs/commandsCreateCommand.ts: id: a6e02d231daf last_write_checksum: sha1:882448117fe89c2a8b5d5869261c908669265844 @@ -1650,10 +1758,6 @@ trackedFiles: id: 278658e1ec58 last_write_checksum: sha1:ce3f65ffeed391412e2ddeab596630c2a60500c2 pristine_git_object: 16c5d78cd105a8f9414e36a0a308e0e001a86c79 - src/funcs/credentialsResolveCredentials.ts: - id: 18d870f7d941 - last_write_checksum: sha1:91f9a873361b33ab2d070bd3fd954fdd9b4c2927 - pristine_git_object: b08d3e2b3cf35ef85a9393c2f8037f8367f8b71f src/funcs/deploymentGroupsCreateDeploymentGroup.ts: id: ed689368c82d last_write_checksum: sha1:83745307535e7c0f3fec3eb7aeac51d51ecb3326 @@ -1776,8 +1880,8 @@ trackedFiles: pristine_git_object: 962ea486e17eabe13bcf068493a556110c944df8 src/lib/config.ts: id: 320761608fb3 - last_write_checksum: sha1:08000539d102705c9e3fabd34e49420c1d93ac3a - pristine_git_object: 05217ba6e2ce60bff67efef2adaf1402b58d29f7 + last_write_checksum: sha1:9475c1042bb6f3154f91be5401a5bab49e20dbcc + pristine_git_object: ab4275ba61b3818e4bdf0afbf0b252265e917356 src/lib/encodings.ts: id: 3bd8ead98afd last_write_checksum: sha1:50d9b187dcfc3cca8d3bbd9fe074f865d715d2b0 @@ -1820,8 +1924,8 @@ trackedFiles: pristine_git_object: cdca6ba1afc9bea5ff9a6d830337117d7f2f7197 src/lib/security.ts: id: 0502afa7922e - last_write_checksum: sha1:0a299e102da406da5bacd683c23d3f9199e8d6d5 - pristine_git_object: 3a8f5b7a7784f2bafa70123c238372ed16320032 + last_write_checksum: sha1:51c4e5af86c425fee38c9dd32fef49f3e5a67d81 + pristine_git_object: 126af7c05c4704f3853bc1adf796b6b7c3e80a62 src/lib/url.ts: id: b0057e24ed76 last_write_checksum: sha1:3bceadd74bf0b31adf13eb06b7531077c3e07d65 @@ -1896,8 +2000,8 @@ trackedFiles: pristine_git_object: a2ef656dc0ac0c0100d9f35260778b5d348791a7 src/models/azurecredentials.ts: id: 1924e1e07c04 - last_write_checksum: sha1:6eca929ae694adef86ff6cbc6424641cb42baade - pristine_git_object: 43f2d926585cb84c97d78d2f61702029ce48117d + last_write_checksum: sha1:de4fd3d6b34e90315e973975d0365b9ebe267e45 + pristine_git_object: 731cac8cdab0172d6b02693c0e2ef5afc37a3bdc src/models/azurecustomcertificateconfig.ts: id: fb6deddf08d9 last_write_checksum: sha1:f2a04f6994f497c0a7ac8d832c43be37a64c51b7 @@ -2016,8 +2120,8 @@ trackedFiles: pristine_git_object: d4f5d4a765437f0eb88ca8687491ada2187597de src/models/computepoolselection.ts: id: b5b825209733 - last_write_checksum: sha1:ece64992833ff0c353d93bebef9c1a0fdb12f5f5 - pristine_git_object: 15fdf9260fadfd9b75c427e72a392bbf8a72f156 + last_write_checksum: sha1:e3571cccf39c33f09f85b8e74e4a92de68684981 + pristine_git_object: 8245743d03cc2a700062c2fe793e309c07d66cf9 src/models/computesettings.ts: id: 168db43e6b87 last_write_checksum: sha1:1d43f4721e4195f9216b8664023b6bf0a8cb27d5 @@ -2110,6 +2214,10 @@ trackedFiles: id: 52cd9dc41091 last_write_checksum: sha1:bc1b97ad507469c31b54f82762b86e6fd341d1c1 pristine_git_object: 3a37228ea8c76d068eb6471592bb1c6c8069b6c1 + src/models/errors/alienerror.ts: + id: 85047abb3998 + last_write_checksum: sha1:69dd7868e6d1263de5aeff2bc3e09b942be76812 + pristine_git_object: ffe76508f321b734cd0c2639dc435f4bb11d13f0 src/models/errors/alienmanagerdefaulterror.ts: id: 61bd284ef615 last_write_checksum: sha1:cf5b3560db44a7cf51c01fa6f9bf282208cfaacf @@ -2128,8 +2236,8 @@ trackedFiles: pristine_git_object: b34f612124c797c2a1106b9735708f679a90b74f src/models/errors/index.ts: id: c4e22507cb83 - last_write_checksum: sha1:df4d81d295aeb4d9bd618a52086c3261ce857d80 - pristine_git_object: fb89667004e645fb5d5ca4c64694a097a75b2c89 + last_write_checksum: sha1:9e8e3ece178708ba378c2f0980c66632f21ae85d + pristine_git_object: 34de99dc75affae437f15aabbbb9ffdf6cb3be57 src/models/errors/responsevalidationerror.ts: id: 88ff98a41be9 last_write_checksum: sha1:e934160d3002b2f7133e02a57002cb9eacf80eda @@ -2138,6 +2246,14 @@ trackedFiles: id: fb6b2b49c445 last_write_checksum: sha1:92771987c251f02fd86cfd824a3be709cd3c2837 pristine_git_object: db00022e05d55600252f401eb0e6ab46278e0b07 + src/models/exposeprotocol.ts: + id: 70f3f207a00e + last_write_checksum: sha1:d93122f2d6e8f65f0349a1aa0d02507e87f5b4a4 + pristine_git_object: 696abd7f5ce619dd20476058609f3dd6bc125f01 + src/models/failuredomainselection.ts: + id: cc66e2c5465b + last_write_checksum: sha1:d86bc8f8bb8fd9beb31dce05b890ade6538f28a6 + pristine_git_object: ebf180859359b0f4ed640db673deb3cf49d0af5b src/models/gcpcredentials.ts: id: db1baa8ae0ff last_write_checksum: sha1:0506b3b719df434470c2a379af1dbe5da3d087bc @@ -2200,8 +2316,8 @@ trackedFiles: pristine_git_object: 89518bfb8678ec100b59d9fba96fa46b7c1bc524 src/models/index.ts: id: f93644b0f37e - last_write_checksum: sha1:7379d82a7c1897ded74b0d1c134e11e79bb9454a - pristine_git_object: 494aa56b190c4be730b1d671694f0fc79e6f8af9 + last_write_checksum: sha1:2169b06796acad096a88a9ffc31f7df81ed149ff + pristine_git_object: 5acebe2dbbaad3c7cf567ff32c834cee7c713d33 src/models/initialdesiredrelease.ts: id: 02797165f21e last_write_checksum: sha1:5648c16c94e5da50401460ee7fc7e42349f1d870 @@ -2342,6 +2458,10 @@ trackedFiles: id: b52de963f92a last_write_checksum: sha1:8399d9bd28285519e14675e3dcd4f420255cc9b6 pristine_git_object: 839754a537b8274bb5be8389659e0120b00751f4 + src/models/loadbalancerendpoint.ts: + id: 9739a6a67103 + last_write_checksum: sha1:85f5325f970b3dee233271d5ff2875c191a9bedf + pristine_git_object: 5138e7c3831fd864a9a0d7dc1b4886cc86375501 src/models/localoperation.ts: id: 7137d3f98d2d last_write_checksum: sha1:7184595e2ea3d61cffab1b3e788ffb871cc5376e @@ -2534,6 +2654,10 @@ trackedFiles: id: 3525f7113deb last_write_checksum: sha1:c2f657443e878512054d4b75d2536cdbc130eba7 pristine_git_object: 413ef4d2186fd803cc7a60a84d276d13f85bac43 + src/models/publicendpointoutput.ts: + id: 8605c0176477 + last_write_checksum: sha1:06eaaeb5a1929064e333ef5b4cd6c06194232f5d + pristine_git_object: 18a84f6be8cc64da08e873b04336dcfbdaa558bf src/models/publicendpointtargetsettings.ts: id: 991188cd44c5 last_write_checksum: sha1:f4e92f97c51f05494e3b93482cc6de785fba8e8b @@ -2570,6 +2694,46 @@ trackedFiles: id: ebe384d32221 last_write_checksum: sha1:3b18da8737d56b8af2914f27f8c229a866e236c0 pristine_git_object: ab3a4e9f7d0737de99ecd52b98ac3989f21ed71c + src/models/remoteawsclientconfig.ts: + id: 97f2e0025204 + last_write_checksum: sha1:38630e72307f08bda8cf8ca31a42548faaa14f6f + pristine_git_object: 808363e787c63b1141cf66e65fe17054fcc8bf42 + src/models/remoteawscredentials.ts: + id: 8192f652f0b7 + last_write_checksum: sha1:5bef2bf270a9a8937b28ed9e695df3324d242ef6 + pristine_git_object: 08bd4717d0d8f61c5f5e6cf72c14e5bdba15bfba + src/models/remoteazureclientconfig.ts: + id: 85b0e5c7d81d + last_write_checksum: sha1:210c139b49931d84a3ffbbdb52df38e611fe4b68 + pristine_git_object: cc66b81c8fa576b6da0d59df8dcd0536f5f2d76d + src/models/remoteazurecontainersas.ts: + id: f5203d18b787 + last_write_checksum: sha1:688612a67687d6021850565f65ab289b796841c4 + pristine_git_object: cfa52295cffaf10a05c0c9108a84eda95015439b + src/models/remoteazurecredentials.ts: + id: 38255495e1b5 + last_write_checksum: sha1:cd13a872a04e7a75a5b936db0ff9fc1c6fbec332 + pristine_git_object: c45ce63bac5d72f750ee810e2c0f37cc3e59ebf9 + src/models/remoteblobstoragebinding.ts: + id: 0933bbb9f14f + last_write_checksum: sha1:4ce044396a12f8b9fe405c74e95473ffe0abe798 + pristine_git_object: ac749ae7eb5cff540c1d196050695cec6224f4b8 + src/models/remotegcpclientconfig.ts: + id: 892765bdcb36 + last_write_checksum: sha1:831bd8ddafcb30dbda2d67b8fcc7d108f87b1326 + pristine_git_object: 95f18522751b222e193dc3bbcbb8f564f0e6ff57 + src/models/remotegcpcredentials.ts: + id: b1f94a20e698 + last_write_checksum: sha1:5bd426e028b0fd24498e9e4e6f58dada5e001ee0 + pristine_git_object: e32876591e9db0e950fbbc8c423b5e9b8cd662bc + src/models/remotegcsstoragebinding.ts: + id: a063a485d383 + last_write_checksum: sha1:2a64842e08f66c3963f3df3d978f50645a2916c3 + pristine_git_object: a97fe60332b8167b7e8ffb83345f81f3db7e6c45 + src/models/remotes3storagebinding.ts: + id: 6a174f337b42 + last_write_checksum: sha1:a6275720228d43181ff85d6a2213733bb96475c6 + pristine_git_object: 8ae0ca48e8921997cf28b980f2f0b42f8ffa10a9 src/models/remotestackmanagementheartbeatdata.ts: id: 2cd5ef589c74 last_write_checksum: sha1:9cbe9a985721b89dbbeed6217f54fd6e18710be5 @@ -2578,18 +2742,18 @@ trackedFiles: id: da96324d7e9a last_write_checksum: sha1:9640eedcaadff4743a7307240beb8976698c49d5 pristine_git_object: 0caf3613c909e1f938a9e06ff78458096a7dfc40 - src/models/resolvecredentialsrequest.ts: - id: 7b6479b1b69a - last_write_checksum: sha1:8312295608d74c24d8db9bf677cc4d2cccf465ba - pristine_git_object: bf70f6f61a299a0e3118aae07c21aeded125d1b3 - src/models/resolvecredentialsresponse.ts: - id: faf1fe7868cf - last_write_checksum: sha1:84c8210dbcf98a7e6225b2cc2f6d12a7d5cd0848 - pristine_git_object: 96d50e7d7193ed820657995f0b4a56d5fd541c25 + src/models/resolvebindingrequest.ts: + id: 7a965fad71ee + last_write_checksum: sha1:653f05c74b004433d22229562e22c8b5183fae20 + pristine_git_object: 97afffa4c2ae4ffb0c2117246901b161cd4f3d13 + src/models/resolvebindingresponse.ts: + id: 37005788c9ee + last_write_checksum: sha1:721fbe27abd0b54104952a31fcacbe55f37aa940 + pristine_git_object: ae9d5ac8d2b0003bf2e52d8b4b9c878814a2cf23 src/models/resourceentry.ts: id: be3f44e565f3 - last_write_checksum: sha1:d8754ef9df29ecb55482708109cd2c3722c559b0 - pristine_git_object: 08da4adf09a3ed68dfed6ec48f7735624634f19a + last_write_checksum: sha1:6cbb8f2d61b16fa73e79a8f8e3240fef19ac8475 + pristine_git_object: 281fad9d9f9453b97d61057d689b1a69b15531e6 src/models/resourceheartbeat.ts: id: 2df71c4ae0f7 last_write_checksum: sha1:9f41d5c65adcc790607dc848f8c6ae12954cefa1 @@ -2722,14 +2886,18 @@ trackedFiles: id: 9da22410e2a5 last_write_checksum: sha1:78f83726ff34f38e8b025fbec93596f44187fd96 pristine_git_object: e257f9f95c1938187fda16e44b480b21d70cfb19 + src/sdk/bindings.ts: + id: 510bba664957 + last_write_checksum: sha1:0679f75283e8589add6f09205e8d29e19f48f5cb + pristine_git_object: 5dcab0339882dd871323990f74ecaa8eb8d7554a src/sdk/commands.ts: id: 31ec805cf614 last_write_checksum: sha1:762a472b4965c756fab552c205183d224eec67fb pristine_git_object: 75ce7521722df19c76be40feeb0b63b8b206f6d4 src/sdk/credentials.ts: id: 4808925acf5a - last_write_checksum: sha1:8340a348c41540dddd98dca46cabd9759b1727a4 - pristine_git_object: 00d0453d22e2ed3ec5a7f121913eeb210c618c0b + last_write_checksum: sha1:6c5a2d12fae1e1cb1b0cabcbbc420c33f16f7649 + pristine_git_object: 7471e40332c9bd2a8a06bf468d399dd0eacfb6d1 src/sdk/deploymentgroups.ts: id: fee2f374fda2 last_write_checksum: sha1:ee6d83281be22eba4595084300895ba882768116 @@ -2756,8 +2924,8 @@ trackedFiles: pristine_git_object: 6cbc9fd2e9f920c4e2bdfcc5d219fd703d802354 src/sdk/sdk.ts: id: 784571af2f69 - last_write_checksum: sha1:19aa6e77438d48231ab1b0743d26cd69ffbce373 - pristine_git_object: f0fed4c48e073e18d45e341236085304d64f2974 + last_write_checksum: sha1:da0f5bf70480bc02cba8709d4fa19d76a3f6e711 + pristine_git_object: 6f5e190ac00c25b22b64d03bf8f8282f3b2ef42b src/sdk/stackimport.ts: id: 77bfb533e29c last_write_checksum: sha1:f1ab2af87291104629f3caeaf72118b08aff220a @@ -3077,4 +3245,13 @@ examples: responses: "200": application/json: {"clientConfig": {"mode": "inCluster", "platform": "kubernetes"}, "expiresAt": "1751321854442", "principal": ""} + resolve_binding: + speakeasy-default-resolve-binding: + requestBody: + application/json: {"deploymentId": "", "resourceId": ""} + responses: + "200": + application/json: {"binding": {"accountName": "", "containerName": ""}, "clientConfig": {"credentials": {"sas": {"accountName": "", "containerName": "", "expiresAt": "1755026518655", "permissions": "", "protocol": "", "serviceVersion": "", "signature": "", "signedKeyExpiry": "", "signedKeyService": "", "signedKeyStart": "", "signedKeyVersion": "", "signedObjectId": "", "signedResource": "", "signedTenantId": "", "startsAt": ""}, "type": "containerSas"}, "subscriptionId": "", "tenantId": ""}, "expiresAt": "1743687001805", "service": "blob"} + "400": + application/json: {"code": "NOT_FOUND", "internal": true, "message": "Item not found.", "retryable": false} examplesVersion: 1.0.2 diff --git a/client-sdks/manager/typescript/.speakeasy/gen.yaml b/client-sdks/manager/typescript/.speakeasy/gen.yaml index 7de78d795..5ec0ef974 100644 --- a/client-sdks/manager/typescript/.speakeasy/gen.yaml +++ b/client-sdks/manager/typescript/.speakeasy/gen.yaml @@ -34,7 +34,7 @@ generation: generateNewTests: true skipResponseBodyAssertions: false typescript: - version: 1.15.0 + version: 2.1.6 acceptHeaderEnum: true additionalDependencies: dependencies: {} diff --git a/client-sdks/manager/typescript/.speakeasy/workflow.lock b/client-sdks/manager/typescript/.speakeasy/workflow.lock new file mode 100644 index 000000000..227e62425 --- /dev/null +++ b/client-sdks/manager/typescript/.speakeasy/workflow.lock @@ -0,0 +1,16 @@ +speakeasyVersion: 1.790.3 +sources: {} +targets: + manager-typescript: + source: manager-api +workflow: + workflowVersion: 1.0.0 + speakeasyVersion: 1.790.3 + sources: + manager-api: + inputs: + - location: ../openapi.json + targets: + manager-typescript: + target: typescript + source: manager-api diff --git a/client-sdks/manager/typescript/.speakeasy/workflow.yaml b/client-sdks/manager/typescript/.speakeasy/workflow.yaml new file mode 100644 index 000000000..f900cc234 --- /dev/null +++ b/client-sdks/manager/typescript/.speakeasy/workflow.yaml @@ -0,0 +1,10 @@ +workflowVersion: 1.0.0 +speakeasyVersion: 1.790.3 +sources: + manager-api: + inputs: + - location: ../openapi.json +targets: + manager-typescript: + target: typescript + source: manager-api diff --git a/client-sdks/manager/typescript/README.md b/client-sdks/manager/typescript/README.md index af27ea705..0e3ef4bdb 100644 --- a/client-sdks/manager/typescript/README.md +++ b/client-sdks/manager/typescript/README.md @@ -111,9 +111,9 @@ run(); This SDK supports the following security scheme globally: -| Name | Type | Scheme | Environment Variable | -| -------- | ------ | ------- | ---------------------- | -| `bearer` | apiKey | API key | `ALIEN_MANAGER_BEARER` | +| Name | Type | Scheme | Environment Variable | +| -------- | ---- | ----------- | ---------------------- | +| `bearer` | http | HTTP Bearer | `ALIEN_MANAGER_BEARER` | To authenticate with the API the `bearer` parameter must be set when initializing the SDK client instance. For example: ```typescript @@ -141,6 +141,10 @@ run();
Available methods +### [Bindings](docs/sdks/bindings/README.md) + +* [resolveBinding](docs/sdks/bindings/README.md#resolvebinding) + ### [Commands](docs/sdks/commands/README.md) * [createCommand](docs/sdks/commands/README.md#createcommand) - Create a new command @@ -153,7 +157,6 @@ run(); ### [Credentials](docs/sdks/credentials/README.md) * [mintCredentials](docs/sdks/credentials/README.md#mintcredentials) -* [resolveCredentials](docs/sdks/credentials/README.md#resolvecredentials) ### [DeploymentGroups](docs/sdks/deploymentgroups/README.md) @@ -240,6 +243,7 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). Available standalone functions +- [`bindingsResolveBinding`](docs/sdks/bindings/README.md#resolvebinding) - [`commandsCreateCommand`](docs/sdks/commands/README.md#createcommand) - Create a new command - [`commandsGetCommandPayload`](docs/sdks/commands/README.md#getcommandpayload) - Get command payload (params and response) from KV - [`commandsGetCommandStatus`](docs/sdks/commands/README.md#getcommandstatus) - Get command status @@ -247,7 +251,6 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). - [`commandsSubmitResponse`](docs/sdks/commands/README.md#submitresponse) - Submit response from deployment - [`commandsUploadComplete`](docs/sdks/commands/README.md#uploadcomplete) - Mark upload as complete - [`credentialsMintCredentials`](docs/sdks/credentials/README.md#mintcredentials) -- [`credentialsResolveCredentials`](docs/sdks/credentials/README.md#resolvecredentials) - [`deploymentGroupsCreateDeploymentGroup`](docs/sdks/deploymentgroups/README.md#createdeploymentgroup) - Every handler in this file runs `auth::require_auth(&state, &headers)` and then threads `&subject` into the `DeploymentStore` calls — see the trait doc on [`DeploymentStore`] for the convention. @@ -386,12 +389,9 @@ const alienManager = new AlienManager({ async function run() { try { - const result = await alienManager.commands.createCommand({ - command: "", + const result = await alienManager.bindings.resolveBinding({ deploymentId: "", - params: { - mode: "storage", - }, + resourceId: "", }); console.log(result); @@ -404,10 +404,12 @@ async function run() { console.log(error.headers); // Depending on the method different errors may be thrown - if (error instanceof errors.ErrorResponse) { + if (error instanceof errors.AlienError) { console.log(error.data$.code); // string - console.log(error.data$.details); // string - console.log(error.data$.message); // string + console.log(error.data$.context); // any + console.log(error.data$.hint); // string + console.log(error.data$.httpStatusCode); // number + console.log(error.data$.internal); // boolean } } } @@ -421,7 +423,7 @@ run(); **Primary error:** * [`AlienManagerError`](./src/models/errors/alienmanagererror.ts): The base class for HTTP error responses. -
Less common errors (7) +
Less common errors (8)
@@ -435,6 +437,7 @@ run(); **Inherit from [`AlienManagerError`](./src/models/errors/alienmanagererror.ts)**: * [`ErrorResponse`](./src/models/errors/errorresponse.ts): Error response wrapper for API endpoints. Applicable to 8 of 33 methods.* +* [`AlienError`](./src/models/errors/alienerror.ts): Canonical error container that provides a structured way to represent errors with rich metadata including error codes, human-readable messages, context, and chaining capabilities for error propagation. This struct is designed to be both machine-readable and user-friendly, supporting serialization for API responses and detailed error reporting in distributed systems. Applicable to 1 of 33 methods.* * [`ResponseValidationError`](./src/models/errors/responsevalidationerror.ts): Type mismatch between the data returned from the server and the structure expected by the SDK. See `error.rawValue` for the raw value and `error.pretty()` for a nicely formatted multi-line string.
diff --git a/client-sdks/manager/typescript/docs/models/azurecredentials.md b/client-sdks/manager/typescript/docs/models/azurecredentials.md index 8b2e76a25..275aa11af 100644 --- a/client-sdks/manager/typescript/docs/models/azurecredentials.md +++ b/client-sdks/manager/typescript/docs/models/azurecredentials.md @@ -37,6 +37,15 @@ const value: models.AzureCredentialsScopedAccessTokens = { }; ``` +### `models.AzureCredentialsSasToken` + +```typescript +const value: models.AzureCredentialsSasToken = { + queryParameters: {}, + type: "sasToken", +}; +``` + ### `models.AzureCredentialsVMManagedIdentity` ```typescript diff --git a/client-sdks/manager/typescript/docs/models/azurecredentialssastoken.md b/client-sdks/manager/typescript/docs/models/azurecredentialssastoken.md new file mode 100644 index 000000000..d231d9e09 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/azurecredentialssastoken.md @@ -0,0 +1,24 @@ +# AzureCredentialsSasToken + +A short-lived Azure Storage shared access signature. + +Query parameter values are kept decoded. Azure clients must encode them +when attaching them to a request URL. + +## Example Usage + +```typescript +import { AzureCredentialsSasToken } from "@alienplatform/manager-api/models"; + +let value: AzureCredentialsSasToken = { + queryParameters: {}, + type: "sasToken", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `queryParameters` | Record | :heavy_check_mark: | Exact SAS query parameters, including the signature and expiry. | +| `type` | *"sasToken"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/computepoolselectionautoscale.md b/client-sdks/manager/typescript/docs/models/computepoolselectionautoscale.md index d688a8bd7..8fb85faa3 100644 --- a/client-sdks/manager/typescript/docs/models/computepoolselectionautoscale.md +++ b/client-sdks/manager/typescript/docs/models/computepoolselectionautoscale.md @@ -16,9 +16,10 @@ let value: ComputePoolSelectionAutoscale = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `max` | *number* | :heavy_check_mark: | Maximum machine count. | -| `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `failureDomains` | [models.FailureDomainSelection](../models/failuredomainselection.md) | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `max` | *number* | :heavy_check_mark: | Maximum machine count. | +| `min` | *number* | :heavy_check_mark: | Minimum machine count. | +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/computepoolselectionfixed.md b/client-sdks/manager/typescript/docs/models/computepoolselectionfixed.md index 67034f7ad..9a5fceb34 100644 --- a/client-sdks/manager/typescript/docs/models/computepoolselectionfixed.md +++ b/client-sdks/manager/typescript/docs/models/computepoolselectionfixed.md @@ -15,8 +15,9 @@ let value: ComputePoolSelectionFixed = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `failureDomains` | [models.FailureDomainSelection](../models/failuredomainselection.md) | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/errors/alienerror.md b/client-sdks/manager/typescript/docs/models/errors/alienerror.md new file mode 100644 index 000000000..a44974b63 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/errors/alienerror.md @@ -0,0 +1,30 @@ +# AlienError + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { AlienError } from "@alienplatform/manager-api/models/errors"; + +// No examples available for this model +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | NOT_FOUND | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | Item not found. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/exposeprotocol.md b/client-sdks/manager/typescript/docs/models/exposeprotocol.md new file mode 100644 index 000000000..1cf539171 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/exposeprotocol.md @@ -0,0 +1,17 @@ +# ExposeProtocol + +Protocol for public workload endpoints. + +## Example Usage + +```typescript +import { ExposeProtocol } from "@alienplatform/manager-api/models"; + +let value: ExposeProtocol = "tcp"; +``` + +## Values + +```typescript +"http" | "tcp" +``` \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/failuredomainselection.md b/client-sdks/manager/typescript/docs/models/failuredomainselection.md new file mode 100644 index 000000000..c1b69e096 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/failuredomainselection.md @@ -0,0 +1,20 @@ +# FailureDomainSelection + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { FailureDomainSelection } from "@alienplatform/manager-api/models"; + +let value: FailureDomainSelection = { + spread: 264968, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/loadbalancerendpoint.md b/client-sdks/manager/typescript/docs/models/loadbalancerendpoint.md new file mode 100644 index 000000000..951a14a4d --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/loadbalancerendpoint.md @@ -0,0 +1,21 @@ +# LoadBalancerEndpoint + +Load balancer endpoint information for DNS management. +This is optional metadata used by the DNS controller to create domain mappings. + +## Example Usage + +```typescript +import { LoadBalancerEndpoint } from "@alienplatform/manager-api/models"; + +let value: LoadBalancerEndpoint = { + dnsName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `dnsName` | *string* | :heavy_check_mark: | The DNS name of the load balancer endpoint (e.g., ALB DNS, API Gateway domain). | +| `hostedZoneId` | *string* | :heavy_minus_sign: | AWS Route53 hosted zone ID (for ALIAS records). Only set on AWS. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/publicendpointoutput.md b/client-sdks/manager/typescript/docs/models/publicendpointoutput.md new file mode 100644 index 000000000..853401399 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/publicendpointoutput.md @@ -0,0 +1,27 @@ +# PublicEndpointOutput + +Runtime-resolved public endpoint metadata. + +## Example Usage + +```typescript +import { PublicEndpointOutput } from "@alienplatform/manager-api/models"; + +let value: PublicEndpointOutput = { + host: "elastic-collaboration.info", + port: 780477, + protocol: "tcp", + url: "https://functional-fuel.name/", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `host` | *string* | :heavy_check_mark: | Hostname for this endpoint. | +| `loadBalancerEndpoint` | [models.LoadBalancerEndpoint](../models/loadbalancerendpoint.md) | :heavy_minus_sign: | N/A | +| `port` | *number* | :heavy_check_mark: | Public connection port. | +| `protocol` | [models.ExposeProtocol](../models/exposeprotocol.md) | :heavy_check_mark: | Protocol for public workload endpoints. | +| `url` | *string* | :heavy_check_mark: | Base URL for this endpoint. | +| `wildcardHost` | *string* | :heavy_minus_sign: | Wildcard hostname routed to this endpoint, when configured. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteawsclientconfig.md b/client-sdks/manager/typescript/docs/models/remoteawsclientconfig.md new file mode 100644 index 000000000..491e2aed3 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteawsclientconfig.md @@ -0,0 +1,30 @@ +# RemoteAwsClientConfig + +Response-safe AWS client configuration. The public contract deliberately +has no static, profile, metadata, or web-identity credential variants. + +## Example Usage + +```typescript +import { RemoteAwsClientConfig } from "@alienplatform/manager-api/models"; + +let value: RemoteAwsClientConfig = { + accountId: "", + credentials: { + accessKeyId: "", + expiresAt: "1755867390141", + secretAccessKey: "", + sessionToken: "", + type: "sessionCredentials", + }, + region: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `accountId` | *string* | :heavy_check_mark: | AWS account containing the bucket. | +| `credentials` | *models.RemoteAwsCredentials* | :heavy_check_mark: | The only AWS credential form remote binding resolution can return. | +| `region` | *string* | :heavy_check_mark: | AWS region containing the bucket. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteawscredentials.md b/client-sdks/manager/typescript/docs/models/remoteawscredentials.md new file mode 100644 index 000000000..2024110c4 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteawscredentials.md @@ -0,0 +1,18 @@ +# RemoteAwsCredentials + +The only AWS credential form remote binding resolution can return. + + +## Supported Types + +### `models.RemoteAwsCredentialsSessionCredentials` + +```typescript +const value: models.RemoteAwsCredentialsSessionCredentials = { + accessKeyId: "", + expiresAt: "1754675774082", + secretAccessKey: "", + sessionToken: "", + type: "sessionCredentials", +}; +``` diff --git a/client-sdks/manager/typescript/docs/models/remoteawscredentialssessioncredentials.md b/client-sdks/manager/typescript/docs/models/remoteawscredentialssessioncredentials.md new file mode 100644 index 000000000..07df165ab --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteawscredentialssessioncredentials.md @@ -0,0 +1,27 @@ +# RemoteAwsCredentialsSessionCredentials + +Temporary AWS session credentials with an authoritative expiry. + +## Example Usage + +```typescript +import { RemoteAwsCredentialsSessionCredentials } from "@alienplatform/manager-api/models"; + +let value: RemoteAwsCredentialsSessionCredentials = { + accessKeyId: "", + expiresAt: "1754675774082", + secretAccessKey: "", + sessionToken: "", + type: "sessionCredentials", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `accessKeyId` | *string* | :heavy_check_mark: | AWS access key id. | +| `expiresAt` | *string* | :heavy_check_mark: | Provider-reported credential expiry. | +| `secretAccessKey` | *string* | :heavy_check_mark: | AWS secret access key. | +| `sessionToken` | *string* | :heavy_check_mark: | AWS session token. | +| `type` | [models.RemoteAwsCredentialsType](../models/remoteawscredentialstype.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteawscredentialstype.md b/client-sdks/manager/typescript/docs/models/remoteawscredentialstype.md new file mode 100644 index 000000000..76a018037 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteawscredentialstype.md @@ -0,0 +1,15 @@ +# RemoteAwsCredentialsType + +## Example Usage + +```typescript +import { RemoteAwsCredentialsType } from "@alienplatform/manager-api/models"; + +let value: RemoteAwsCredentialsType = "sessionCredentials"; +``` + +## Values + +```typescript +"sessionCredentials" +``` \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteazureclientconfig.md b/client-sdks/manager/typescript/docs/models/remoteazureclientconfig.md new file mode 100644 index 000000000..795635908 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteazureclientconfig.md @@ -0,0 +1,44 @@ +# RemoteAzureClientConfig + +Response-safe Azure client configuration. It contains one container-bound +user-delegation SAS and no OAuth or refreshable identity source. + +## Example Usage + +```typescript +import { RemoteAzureClientConfig } from "@alienplatform/manager-api/models"; + +let value: RemoteAzureClientConfig = { + credentials: { + sas: { + accountName: "", + containerName: "", + expiresAt: "1762181110811", + permissions: "", + protocol: "", + serviceVersion: "", + signature: "", + signedKeyExpiry: "", + signedKeyService: "", + signedKeyStart: "", + signedKeyVersion: "", + signedObjectId: "", + signedResource: "", + signedTenantId: "", + startsAt: "", + }, + type: "containerSas", + }, + subscriptionId: "", + tenantId: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `credentials` | *models.RemoteAzureCredentials* | :heavy_check_mark: | The only Azure credential form remote binding resolution can return. | +| `region` | *string* | :heavy_minus_sign: | Azure region configured for the deployment. | +| `subscriptionId` | *string* | :heavy_check_mark: | Azure subscription containing the storage account. | +| `tenantId` | *string* | :heavy_check_mark: | Azure tenant owning the identity. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteazurecontainersas.md b/client-sdks/manager/typescript/docs/models/remoteazurecontainersas.md new file mode 100644 index 000000000..a2940c8cc --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteazurecontainersas.md @@ -0,0 +1,49 @@ +# RemoteAzureContainerSas + +Explicit fields of an Azure user-delegation SAS. Keeping the fields typed +lets clients independently validate container scope, permissions, protocol, +and expiry before constructing query parameters. + +## Example Usage + +```typescript +import { RemoteAzureContainerSas } from "@alienplatform/manager-api/models"; + +let value: RemoteAzureContainerSas = { + accountName: "", + containerName: "", + expiresAt: "1750776331862", + permissions: "", + protocol: "", + serviceVersion: "", + signature: "", + signedKeyExpiry: "", + signedKeyService: "", + signedKeyStart: "", + signedKeyVersion: "", + signedObjectId: "", + signedResource: "", + signedTenantId: "", + startsAt: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `accountName` | *string* | :heavy_check_mark: | Storage account named by the signed canonical resource. | +| `containerName` | *string* | :heavy_check_mark: | Blob container named by the signed canonical resource. | +| `expiresAt` | *string* | :heavy_check_mark: | SAS validity end (`se`). | +| `permissions` | *string* | :heavy_check_mark: | Canonically ordered SAS permissions (`sp`). | +| `protocol` | *string* | :heavy_check_mark: | Required transport protocol (`spr`). | +| `serviceVersion` | *string* | :heavy_check_mark: | Storage authorization version (`sv`). | +| `signature` | *string* | :heavy_check_mark: | HMAC-SHA256 signature (`sig`). | +| `signedKeyExpiry` | *string* | :heavy_check_mark: | Delegation-key validity end (`ske`). | +| `signedKeyService` | *string* | :heavy_check_mark: | Delegation-key service (`sks`). | +| `signedKeyStart` | *string* | :heavy_check_mark: | Delegation-key validity start (`skt`). | +| `signedKeyVersion` | *string* | :heavy_check_mark: | Delegation-key version (`skv`). | +| `signedObjectId` | *string* | :heavy_check_mark: | Object ID that requested the delegation key (`skoid`). | +| `signedResource` | *string* | :heavy_check_mark: | Signed resource kind (`sr`). | +| `signedTenantId` | *string* | :heavy_check_mark: | Tenant ID that issued the delegation key (`sktid`). | +| `startsAt` | *string* | :heavy_check_mark: | SAS validity start (`st`). | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteazurecredentials.md b/client-sdks/manager/typescript/docs/models/remoteazurecredentials.md new file mode 100644 index 000000000..c5902d05d --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteazurecredentials.md @@ -0,0 +1,31 @@ +# RemoteAzureCredentials + +The only Azure credential form remote binding resolution can return. + + +## Supported Types + +### `models.RemoteAzureCredentialsContainerSas` + +```typescript +const value: models.RemoteAzureCredentialsContainerSas = { + sas: { + accountName: "", + containerName: "", + expiresAt: "1762181110811", + permissions: "", + protocol: "", + serviceVersion: "", + signature: "", + signedKeyExpiry: "", + signedKeyService: "", + signedKeyStart: "", + signedKeyVersion: "", + signedObjectId: "", + signedResource: "", + signedTenantId: "", + startsAt: "", + }, + type: "containerSas", +}; +``` diff --git a/client-sdks/manager/typescript/docs/models/remoteazurecredentialscontainersas.md b/client-sdks/manager/typescript/docs/models/remoteazurecredentialscontainersas.md new file mode 100644 index 000000000..574715600 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteazurecredentialscontainersas.md @@ -0,0 +1,37 @@ +# RemoteAzureCredentialsContainerSas + +User-delegation SAS signed for exactly one container. + +## Example Usage + +```typescript +import { RemoteAzureCredentialsContainerSas } from "@alienplatform/manager-api/models"; + +let value: RemoteAzureCredentialsContainerSas = { + sas: { + accountName: "", + containerName: "", + expiresAt: "1762181110811", + permissions: "", + protocol: "", + serviceVersion: "", + signature: "", + signedKeyExpiry: "", + signedKeyService: "", + signedKeyStart: "", + signedKeyVersion: "", + signedObjectId: "", + signedResource: "", + signedTenantId: "", + startsAt: "", + }, + type: "containerSas", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `sas` | [models.RemoteAzureContainerSas](../models/remoteazurecontainersas.md) | :heavy_check_mark: | Explicit fields of an Azure user-delegation SAS. Keeping the fields typed
lets clients independently validate container scope, permissions, protocol,
and expiry before constructing query parameters. | +| `type` | [models.RemoteAzureCredentialsType](../models/remoteazurecredentialstype.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteazurecredentialstype.md b/client-sdks/manager/typescript/docs/models/remoteazurecredentialstype.md new file mode 100644 index 000000000..0e19910c9 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteazurecredentialstype.md @@ -0,0 +1,15 @@ +# RemoteAzureCredentialsType + +## Example Usage + +```typescript +import { RemoteAzureCredentialsType } from "@alienplatform/manager-api/models"; + +let value: RemoteAzureCredentialsType = "containerSas"; +``` + +## Values + +```typescript +"containerSas" +``` \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remoteblobstoragebinding.md b/client-sdks/manager/typescript/docs/models/remoteblobstoragebinding.md new file mode 100644 index 000000000..fbe4665c6 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remoteblobstoragebinding.md @@ -0,0 +1,21 @@ +# RemoteBlobStorageBinding + +Concrete Azure Blob Storage topology returned to remote clients. + +## Example Usage + +```typescript +import { RemoteBlobStorageBinding } from "@alienplatform/manager-api/models"; + +let value: RemoteBlobStorageBinding = { + accountName: "", + containerName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `accountName` | *string* | :heavy_check_mark: | Storage account containing the authorized container. | +| `containerName` | *string* | :heavy_check_mark: | Blob container authorized by the credential lease. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remotegcpclientconfig.md b/client-sdks/manager/typescript/docs/models/remotegcpclientconfig.md new file mode 100644 index 000000000..79f7a363b --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remotegcpclientconfig.md @@ -0,0 +1,28 @@ +# RemoteGcpClientConfig + +Response-safe GCP client configuration. Refreshable source credentials and +service endpoint overrides cannot be represented by this type. + +## Example Usage + +```typescript +import { RemoteGcpClientConfig } from "@alienplatform/manager-api/models"; + +let value: RemoteGcpClientConfig = { + credentials: { + token: "", + type: "accessToken", + }, + projectId: "", + region: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `credentials` | *models.RemoteGcpCredentials* | :heavy_check_mark: | The only GCP credential form remote binding resolution can return. | +| `projectId` | *string* | :heavy_check_mark: | GCP project containing the bucket. | +| `projectNumber` | *string* | :heavy_minus_sign: | Numeric GCP project id, when known. | +| `region` | *string* | :heavy_check_mark: | GCP region configured for the deployment. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remotegcpcredentials.md b/client-sdks/manager/typescript/docs/models/remotegcpcredentials.md new file mode 100644 index 000000000..71ac1cdbd --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remotegcpcredentials.md @@ -0,0 +1,15 @@ +# RemoteGcpCredentials + +The only GCP credential form remote binding resolution can return. + + +## Supported Types + +### `models.RemoteGcpCredentialsAccessToken` + +```typescript +const value: models.RemoteGcpCredentialsAccessToken = { + token: "", + type: "accessToken", +}; +``` diff --git a/client-sdks/manager/typescript/docs/models/remotegcpcredentialsaccesstoken.md b/client-sdks/manager/typescript/docs/models/remotegcpcredentialsaccesstoken.md new file mode 100644 index 000000000..510dd29a7 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remotegcpcredentialsaccesstoken.md @@ -0,0 +1,21 @@ +# RemoteGcpCredentialsAccessToken + +Short-lived OAuth access token. Its expiry is the response `expiresAt`. + +## Example Usage + +```typescript +import { RemoteGcpCredentialsAccessToken } from "@alienplatform/manager-api/models"; + +let value: RemoteGcpCredentialsAccessToken = { + token: "", + type: "accessToken", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `token` | *string* | :heavy_check_mark: | OAuth bearer token. | +| `type` | [models.RemoteGcpCredentialsType](../models/remotegcpcredentialstype.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remotegcpcredentialstype.md b/client-sdks/manager/typescript/docs/models/remotegcpcredentialstype.md new file mode 100644 index 000000000..d1ce0afa4 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remotegcpcredentialstype.md @@ -0,0 +1,15 @@ +# RemoteGcpCredentialsType + +## Example Usage + +```typescript +import { RemoteGcpCredentialsType } from "@alienplatform/manager-api/models"; + +let value: RemoteGcpCredentialsType = "accessToken"; +``` + +## Values + +```typescript +"accessToken" +``` \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remotegcsstoragebinding.md b/client-sdks/manager/typescript/docs/models/remotegcsstoragebinding.md new file mode 100644 index 000000000..50e744f95 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remotegcsstoragebinding.md @@ -0,0 +1,19 @@ +# RemoteGcsStorageBinding + +Concrete Google Cloud Storage topology returned to remote clients. + +## Example Usage + +```typescript +import { RemoteGcsStorageBinding } from "@alienplatform/manager-api/models"; + +let value: RemoteGcsStorageBinding = { + bucketName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `bucketName` | *string* | :heavy_check_mark: | GCS bucket name authorized by the credential lease. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/remotes3storagebinding.md b/client-sdks/manager/typescript/docs/models/remotes3storagebinding.md new file mode 100644 index 000000000..33f7ec168 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/remotes3storagebinding.md @@ -0,0 +1,19 @@ +# RemoteS3StorageBinding + +Concrete S3 topology returned to remote clients. + +## Example Usage + +```typescript +import { RemoteS3StorageBinding } from "@alienplatform/manager-api/models"; + +let value: RemoteS3StorageBinding = { + bucketName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `bucketName` | *string* | :heavy_check_mark: | S3 bucket name authorized by the credential lease. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resolvebindingrequest.md b/client-sdks/manager/typescript/docs/models/resolvebindingrequest.md new file mode 100644 index 000000000..b2e9ff980 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/resolvebindingrequest.md @@ -0,0 +1,21 @@ +# ResolveBindingRequest + +Request body for `POST /v1/bindings/resolve`. + +## Example Usage + +```typescript +import { ResolveBindingRequest } from "@alienplatform/manager-api/models"; + +let value: ResolveBindingRequest = { + deploymentId: "", + resourceId: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `deploymentId` | *string* | :heavy_check_mark: | Deployment containing the remote-enabled resource. | +| `resourceId` | *string* | :heavy_check_mark: | Logical Storage resource id in the deployment's stack state. | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resolvebindingresponse.md b/client-sdks/manager/typescript/docs/models/resolvebindingresponse.md new file mode 100644 index 000000000..7e255502d --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/resolvebindingresponse.md @@ -0,0 +1,87 @@ +# ResolveBindingResponse + +One approved remote Storage binding paired with credentials for the same +provider. The discriminant makes cross-provider combinations impossible. + + +## Supported Types + +### `models.ResolveBindingResponseS3` + +```typescript +const value: models.ResolveBindingResponseS3 = { + binding: { + bucketName: "", + }, + clientConfig: { + accountId: "", + credentials: { + accessKeyId: "", + expiresAt: "1755867390141", + secretAccessKey: "", + sessionToken: "", + type: "sessionCredentials", + }, + region: "", + }, + expiresAt: "1750122153944", + service: "s3", +}; +``` + +### `models.ResolveBindingResponseBlob` + +```typescript +const value: models.ResolveBindingResponseBlob = { + binding: { + accountName: "", + containerName: "", + }, + clientConfig: { + credentials: { + sas: { + accountName: "", + containerName: "", + expiresAt: "1762181110811", + permissions: "", + protocol: "", + serviceVersion: "", + signature: "", + signedKeyExpiry: "", + signedKeyService: "", + signedKeyStart: "", + signedKeyVersion: "", + signedObjectId: "", + signedResource: "", + signedTenantId: "", + startsAt: "", + }, + type: "containerSas", + }, + subscriptionId: "", + tenantId: "", + }, + expiresAt: "1759301232953", + service: "blob", +}; +``` + +### `models.ResolveBindingResponseGcs` + +```typescript +const value: models.ResolveBindingResponseGcs = { + binding: { + bucketName: "", + }, + clientConfig: { + credentials: { + token: "", + type: "accessToken", + }, + projectId: "", + region: "", + }, + expiresAt: "1741179780880", + service: "gcs", +}; +``` diff --git a/client-sdks/manager/typescript/docs/models/resolvebindingresponseblob.md b/client-sdks/manager/typescript/docs/models/resolvebindingresponseblob.md new file mode 100644 index 000000000..5dea5ba43 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/resolvebindingresponseblob.md @@ -0,0 +1,51 @@ +# ResolveBindingResponseBlob + +Azure Blob Storage and an exact container-scoped SAS. + +## Example Usage + +```typescript +import { ResolveBindingResponseBlob } from "@alienplatform/manager-api/models"; + +let value: ResolveBindingResponseBlob = { + binding: { + accountName: "", + containerName: "", + }, + clientConfig: { + credentials: { + sas: { + accountName: "", + containerName: "", + expiresAt: "1762181110811", + permissions: "", + protocol: "", + serviceVersion: "", + signature: "", + signedKeyExpiry: "", + signedKeyService: "", + signedKeyStart: "", + signedKeyVersion: "", + signedObjectId: "", + signedResource: "", + signedTenantId: "", + startsAt: "", + }, + type: "containerSas", + }, + subscriptionId: "", + tenantId: "", + }, + expiresAt: "1759301232953", + service: "blob", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.RemoteBlobStorageBinding](../models/remoteblobstoragebinding.md) | :heavy_check_mark: | Concrete Azure Blob Storage topology returned to remote clients. | +| `clientConfig` | [models.RemoteAzureClientConfig](../models/remoteazureclientconfig.md) | :heavy_check_mark: | Response-safe Azure client configuration. It contains one container-bound
user-delegation SAS and no OAuth or refreshable identity source. | +| `expiresAt` | *string* | :heavy_check_mark: | N/A | +| `service` | *"blob"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resolvebindingresponsegcs.md b/client-sdks/manager/typescript/docs/models/resolvebindingresponsegcs.md new file mode 100644 index 000000000..68b0ceee9 --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/resolvebindingresponsegcs.md @@ -0,0 +1,34 @@ +# ResolveBindingResponseGcs + +Google Cloud Storage and a bucket-downscoped access token. + +## Example Usage + +```typescript +import { ResolveBindingResponseGcs } from "@alienplatform/manager-api/models"; + +let value: ResolveBindingResponseGcs = { + binding: { + bucketName: "", + }, + clientConfig: { + credentials: { + token: "", + type: "accessToken", + }, + projectId: "", + region: "", + }, + expiresAt: "1741179780880", + service: "gcs", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.RemoteGcsStorageBinding](../models/remotegcsstoragebinding.md) | :heavy_check_mark: | Concrete Google Cloud Storage topology returned to remote clients. | +| `clientConfig` | [models.RemoteGcpClientConfig](../models/remotegcpclientconfig.md) | :heavy_check_mark: | Response-safe GCP client configuration. Refreshable source credentials and
service endpoint overrides cannot be represented by this type. | +| `expiresAt` | *string* | :heavy_check_mark: | N/A | +| `service` | *"gcs"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resolvebindingresponses3.md b/client-sdks/manager/typescript/docs/models/resolvebindingresponses3.md new file mode 100644 index 000000000..6c91b7aec --- /dev/null +++ b/client-sdks/manager/typescript/docs/models/resolvebindingresponses3.md @@ -0,0 +1,37 @@ +# ResolveBindingResponseS3 + +AWS S3 and an AWS session. + +## Example Usage + +```typescript +import { ResolveBindingResponseS3 } from "@alienplatform/manager-api/models"; + +let value: ResolveBindingResponseS3 = { + binding: { + bucketName: "", + }, + clientConfig: { + accountId: "", + credentials: { + accessKeyId: "", + expiresAt: "1755867390141", + secretAccessKey: "", + sessionToken: "", + type: "sessionCredentials", + }, + region: "", + }, + expiresAt: "1750122153944", + service: "s3", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.RemoteS3StorageBinding](../models/remotes3storagebinding.md) | :heavy_check_mark: | Concrete S3 topology returned to remote clients. | +| `clientConfig` | [models.RemoteAwsClientConfig](../models/remoteawsclientconfig.md) | :heavy_check_mark: | Response-safe AWS client configuration. The public contract deliberately
has no static, profile, metadata, or web-identity credential variants. | +| `expiresAt` | *string* | :heavy_check_mark: | N/A | +| `service` | *"s3"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resolvecredentialsrequest.md b/client-sdks/manager/typescript/docs/models/resolvecredentialsrequest.md deleted file mode 100644 index ccffc0dfd..000000000 --- a/client-sdks/manager/typescript/docs/models/resolvecredentialsrequest.md +++ /dev/null @@ -1,17 +0,0 @@ -# ResolveCredentialsRequest - -## Example Usage - -```typescript -import { ResolveCredentialsRequest } from "@alienplatform/manager-api/models"; - -let value: ResolveCredentialsRequest = { - deploymentId: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `deploymentId` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resolvecredentialsresponse.md b/client-sdks/manager/typescript/docs/models/resolvecredentialsresponse.md deleted file mode 100644 index de36540cf..000000000 --- a/client-sdks/manager/typescript/docs/models/resolvecredentialsresponse.md +++ /dev/null @@ -1,23 +0,0 @@ -# ResolveCredentialsResponse - -## Example Usage - -```typescript -import { ResolveCredentialsResponse } from "@alienplatform/manager-api/models"; - -let value: ResolveCredentialsResponse = { - clientConfig: { - cloud: {}, - kubernetes: { - mode: "inCluster", - }, - platform: "kubernetesCloud", - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `clientConfig` | *models.ClientConfigUnion* | :heavy_check_mark: | Configuration for different cloud platform clients | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/models/resourceentry.md b/client-sdks/manager/typescript/docs/models/resourceentry.md index 12e9d0524..522aa4a8e 100644 --- a/client-sdks/manager/typescript/docs/models/resourceentry.md +++ b/client-sdks/manager/typescript/docs/models/resourceentry.md @@ -12,7 +12,8 @@ let value: ResourceEntry = { ## Fields -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `publicUrl` | *string* | :heavy_minus_sign: | N/A | -| `resourceType` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `publicEndpoints` | Record | :heavy_minus_sign: | N/A | +| `publicUrl` | *string* | :heavy_minus_sign: | N/A | +| `resourceType` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/sdks/bindings/README.md b/client-sdks/manager/typescript/docs/sdks/bindings/README.md new file mode 100644 index 000000000..01057a800 --- /dev/null +++ b/client-sdks/manager/typescript/docs/sdks/bindings/README.md @@ -0,0 +1,85 @@ +# Bindings + +## Overview + +Remote resource binding resolution + +### Available Operations + +* [resolveBinding](#resolvebinding) + +## resolveBinding + +### Example Usage + + +```typescript +import { AlienManager } from "@alienplatform/manager-api"; + +const alienManager = new AlienManager({ + serverURL: "https://api.example.com", + bearer: process.env["ALIEN_MANAGER_BEARER"] ?? "", +}); + +async function run() { + const result = await alienManager.bindings.resolveBinding({ + deploymentId: "", + resourceId: "", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienManagerCore } from "@alienplatform/manager-api/core.js"; +import { bindingsResolveBinding } from "@alienplatform/manager-api/funcs/bindingsResolveBinding.js"; + +// Use `AlienManagerCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alienManager = new AlienManagerCore({ + serverURL: "https://api.example.com", + bearer: process.env["ALIEN_MANAGER_BEARER"] ?? "", +}); + +async function run() { + const res = await bindingsResolveBinding(alienManager, { + deploymentId: "", + resourceId: "", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("bindingsResolveBinding failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [models.ResolveBindingRequest](../../models/resolvebindingrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.ResolveBindingResponse](../../models/resolvebindingresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.AlienError | 400, 401, 403, 404 | application/json | +| errors.AlienManagerDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/client-sdks/manager/typescript/docs/sdks/credentials/README.md b/client-sdks/manager/typescript/docs/sdks/credentials/README.md index df8af1be1..fdd2ce9af 100644 --- a/client-sdks/manager/typescript/docs/sdks/credentials/README.md +++ b/client-sdks/manager/typescript/docs/sdks/credentials/README.md @@ -7,7 +7,6 @@ Credential resolution for deployments ### Available Operations * [mintCredentials](#mintcredentials) -* [resolveCredentials](#resolvecredentials) ## mintCredentials @@ -82,79 +81,6 @@ run(); ### Errors -| Error Type | Status Code | Content Type | -| ------------------------------- | ------------------------------- | ------------------------------- | -| errors.AlienManagerDefaultError | 4XX, 5XX | \*/\* | - -## resolveCredentials - -### Example Usage - - -```typescript -import { AlienManager } from "@alienplatform/manager-api"; - -const alienManager = new AlienManager({ - serverURL: "https://api.example.com", - bearer: process.env["ALIEN_MANAGER_BEARER"] ?? "", -}); - -async function run() { - const result = await alienManager.credentials.resolveCredentials({ - deploymentId: "", - }); - - console.log(result); -} - -run(); -``` - -### Standalone function - -The standalone function version of this method: - -```typescript -import { AlienManagerCore } from "@alienplatform/manager-api/core.js"; -import { credentialsResolveCredentials } from "@alienplatform/manager-api/funcs/credentialsResolveCredentials.js"; - -// Use `AlienManagerCore` for best tree-shaking performance. -// You can create one instance of it to use across an application. -const alienManager = new AlienManagerCore({ - serverURL: "https://api.example.com", - bearer: process.env["ALIEN_MANAGER_BEARER"] ?? "", -}); - -async function run() { - const res = await credentialsResolveCredentials(alienManager, { - deploymentId: "", - }); - if (res.ok) { - const { value: result } = res; - console.log(result); - } else { - console.log("credentialsResolveCredentials failed:", res.error); - } -} - -run(); -``` - -### Parameters - -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `request` | [models.ResolveCredentialsRequest](../../models/resolvecredentialsrequest.md) | :heavy_check_mark: | The request object to use for the request. | -| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | -| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | -| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | - -### Response - -**Promise\<[models.ResolveCredentialsResponse](../../models/resolvecredentialsresponse.md)\>** - -### Errors - | Error Type | Status Code | Content Type | | ------------------------------- | ------------------------------- | ------------------------------- | | errors.AlienManagerDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/client-sdks/manager/typescript/examples/package-lock.json b/client-sdks/manager/typescript/examples/package-lock.json new file mode 100644 index 000000000..9106b937d --- /dev/null +++ b/client-sdks/manager/typescript/examples/package-lock.json @@ -0,0 +1,848 @@ +{ + "name": "@alienplatform/manager-api-examples", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@alienplatform/manager-api-examples", + "version": "1.0.0", + "dependencies": { + "@alienplatform/manager-api": "file:.." + }, + "devDependencies": { + "@types/node": "^20.0.0", + "dotenv": "^16.4.5", + "tsx": "^4.19.2" + } + }, + "..": { + "name": "@alienplatform/manager-api", + "version": "2.1.6", + "license": "FSL-1.1-Apache-2.0", + "dependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.26.0", + "eslint": "^9.26.0", + "globals": "^15.14.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.26.0" + } + }, + "../../../../node_modules/.pnpm/@eslint+js@9.39.2/node_modules/@eslint/js": { + "version": "9.39.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "../../../../node_modules/.pnpm/eslint@9.39.2_jiti@2.6.1/node_modules/eslint": { + "version": "9.39.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.18.0", + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@cypress/webpack-preprocessor": "^6.0.2", + "@eslint/json": "^0.13.2", + "@trunkio/launcher": "^1.3.4", + "@types/esquery": "^1.5.4", + "@types/node": "^22.13.14", + "@typescript-eslint/parser": "^8.4.0", + "babel-loader": "^8.0.5", + "c8": "^7.12.0", + "chai": "^4.0.1", + "cheerio": "^0.22.0", + "common-tags": "^1.8.0", + "core-js": "^3.1.3", + "cypress": "^14.1.0", + "ejs": "^3.0.2", + "eslint": "file:.", + "eslint-config-eslint": "file:packages/eslint-config-eslint", + "eslint-plugin-eslint-plugin": "^6.0.0", + "eslint-plugin-expect-type": "^0.6.0", + "eslint-plugin-yml": "^1.14.0", + "eslint-release": "^3.3.0", + "eslint-rule-composer": "^0.3.0", + "eslump": "^3.0.0", + "esprima": "^4.0.1", + "fast-glob": "^3.2.11", + "fs-teardown": "^0.1.3", + "glob": "^10.0.0", + "globals": "^16.2.0", + "got": "^11.8.3", + "gray-matter": "^4.0.3", + "jiti": "^2.6.1", + "jiti-v2.0": "npm:jiti@2.0.x", + "jiti-v2.1": "npm:jiti@2.1.x", + "knip": "^5.60.2", + "lint-staged": "^11.0.0", + "markdown-it": "^12.2.0", + "markdown-it-container": "^3.0.0", + "marked": "^4.0.8", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", + "mocha": "^11.7.1", + "node-polyfill-webpack-plugin": "^1.0.3", + "npm-license": "^0.3.3", + "pirates": "^4.0.5", + "progress": "^2.0.3", + "proxyquire": "^2.0.1", + "recast": "^0.23.0", + "regenerator-runtime": "^0.14.0", + "semver": "^7.5.3", + "shelljs": "^0.10.0", + "sinon": "^11.0.0", + "typescript": "^5.3.3", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "yorkie": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "../../../../node_modules/.pnpm/globals@15.15.0/node_modules/globals": { + "version": "15.15.0", + "dev": true, + "license": "MIT", + "devDependencies": { + "@vitest/eslint-plugin": "^1.1.30", + "ava": "^6.1.3", + "cheerio": "^1.0.0-rc.12", + "eslint-plugin-jest": "^28.8.3", + "execa": "^9.4.0", + "get-port": "^7.1.0", + "npm-run-all2": "^6.2.3", + "outdent": "^0.8.0", + "puppeteer": "^23.4.1", + "shelljs": "^0.8.5", + "tsd": "^0.31.2", + "type-fest": "^4.26.1", + "xo": "^0.59.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../../../node_modules/.pnpm/typescript-eslint@8.52.0_eslint@9.39.2_jiti@2.6.1__typescript@5.8.3/node_modules/typescript-eslint": { + "version": "8.52.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" + }, + "devDependencies": { + "@vitest/coverage-v8": "^3.2.4", + "eslint": "*", + "rimraf": "*", + "typescript": "*", + "vitest": "^3.2.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "../../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript": { + "version": "5.8.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "devDependencies": { + "@dprint/formatter": "^0.4.1", + "@dprint/typescript": "0.93.3", + "@esfx/canceltoken": "^1.0.0", + "@eslint/js": "^9.17.0", + "@octokit/rest": "^21.0.2", + "@types/chai": "^4.3.20", + "@types/diff": "^5.2.3", + "@types/minimist": "^1.2.5", + "@types/mocha": "^10.0.10", + "@types/ms": "^0.7.34", + "@types/node": "latest", + "@types/source-map-support": "^0.5.10", + "@types/which": "^3.0.4", + "@typescript-eslint/rule-tester": "^8.18.1", + "@typescript-eslint/type-utils": "^8.18.1", + "@typescript-eslint/utils": "^8.18.1", + "azure-devops-node-api": "^14.1.0", + "c8": "^10.1.3", + "chai": "^4.5.0", + "chalk": "^4.1.2", + "chokidar": "^3.6.0", + "diff": "^5.2.0", + "dprint": "^0.47.6", + "esbuild": "^0.24.0", + "eslint": "^9.17.0", + "eslint-formatter-autolinkable-stylish": "^1.4.0", + "eslint-plugin-regexp": "^2.7.0", + "fast-xml-parser": "^4.5.1", + "glob": "^10.4.5", + "globals": "^15.13.0", + "hereby": "^1.10.0", + "jsonc-parser": "^3.3.1", + "knip": "^5.41.0", + "minimist": "^1.2.8", + "mocha": "^10.8.2", + "mocha-fivemat-progress-reporter": "^0.1.0", + "monocart-coverage-reports": "^2.11.4", + "ms": "^2.1.3", + "playwright": "^1.49.1", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1", + "typescript": "^5.7.2", + "typescript-eslint": "^8.18.1", + "which": "^3.0.1" + }, + "engines": { + "node": ">=14.17" + } + }, + "../../../../node_modules/.pnpm/zod@4.3.2/node_modules/zod": { + "version": "4.3.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "../node_modules/@eslint/js": { + "resolved": "../../../../node_modules/.pnpm/@eslint+js@9.39.2/node_modules/@eslint/js", + "link": true + }, + "../node_modules/eslint": { + "resolved": "../../../../node_modules/.pnpm/eslint@9.39.2_jiti@2.6.1/node_modules/eslint", + "link": true + }, + "../node_modules/globals": { + "resolved": "../../../../node_modules/.pnpm/globals@15.15.0/node_modules/globals", + "link": true + }, + "../node_modules/typescript": { + "resolved": "../../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript", + "link": true + }, + "../node_modules/typescript-eslint": { + "resolved": "../../../../node_modules/.pnpm/typescript-eslint@8.52.0_eslint@9.39.2_jiti@2.6.1__typescript@5.8.3/node_modules/typescript-eslint", + "link": true + }, + "../node_modules/zod": { + "resolved": "../../../../node_modules/.pnpm/zod@4.3.2/node_modules/zod", + "link": true + }, + "node_modules/@alienplatform/manager-api": { + "resolved": "..", + "link": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@types/node": { + "version": "20.19.43", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/esbuild": { + "version": "0.28.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/tsx": { + "version": "4.23.1", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "dev": true, + "license": "MIT" + } + } +} diff --git a/client-sdks/manager/typescript/jsr.json b/client-sdks/manager/typescript/jsr.json index 329443cf6..58ae39ebb 100644 --- a/client-sdks/manager/typescript/jsr.json +++ b/client-sdks/manager/typescript/jsr.json @@ -2,7 +2,7 @@ { "name": "@alienplatform/manager-api", - "version": "1.15.0", + "version": "2.1.6", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/client-sdks/manager/typescript/package-lock.json b/client-sdks/manager/typescript/package-lock.json new file mode 100644 index 000000000..f3bb2e8cd --- /dev/null +++ b/client-sdks/manager/typescript/package-lock.json @@ -0,0 +1,299 @@ +{ + "name": "@alienplatform/manager-api", + "version": "2.1.6", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@alienplatform/manager-api", + "version": "2.1.6", + "license": "FSL-1.1-Apache-2.0", + "dependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.26.0", + "eslint": "^9.26.0", + "globals": "^15.14.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.26.0" + } + }, + "../../../node_modules/.pnpm/@eslint+js@9.39.2/node_modules/@eslint/js": { + "version": "9.39.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "../../../node_modules/.pnpm/eslint@9.39.2_jiti@2.6.1/node_modules/eslint": { + "version": "9.39.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.18.0", + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@cypress/webpack-preprocessor": "^6.0.2", + "@eslint/json": "^0.13.2", + "@trunkio/launcher": "^1.3.4", + "@types/esquery": "^1.5.4", + "@types/node": "^22.13.14", + "@typescript-eslint/parser": "^8.4.0", + "babel-loader": "^8.0.5", + "c8": "^7.12.0", + "chai": "^4.0.1", + "cheerio": "^0.22.0", + "common-tags": "^1.8.0", + "core-js": "^3.1.3", + "cypress": "^14.1.0", + "ejs": "^3.0.2", + "eslint": "file:.", + "eslint-config-eslint": "file:packages/eslint-config-eslint", + "eslint-plugin-eslint-plugin": "^6.0.0", + "eslint-plugin-expect-type": "^0.6.0", + "eslint-plugin-yml": "^1.14.0", + "eslint-release": "^3.3.0", + "eslint-rule-composer": "^0.3.0", + "eslump": "^3.0.0", + "esprima": "^4.0.1", + "fast-glob": "^3.2.11", + "fs-teardown": "^0.1.3", + "glob": "^10.0.0", + "globals": "^16.2.0", + "got": "^11.8.3", + "gray-matter": "^4.0.3", + "jiti": "^2.6.1", + "jiti-v2.0": "npm:jiti@2.0.x", + "jiti-v2.1": "npm:jiti@2.1.x", + "knip": "^5.60.2", + "lint-staged": "^11.0.0", + "markdown-it": "^12.2.0", + "markdown-it-container": "^3.0.0", + "marked": "^4.0.8", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", + "mocha": "^11.7.1", + "node-polyfill-webpack-plugin": "^1.0.3", + "npm-license": "^0.3.3", + "pirates": "^4.0.5", + "progress": "^2.0.3", + "proxyquire": "^2.0.1", + "recast": "^0.23.0", + "regenerator-runtime": "^0.14.0", + "semver": "^7.5.3", + "shelljs": "^0.10.0", + "sinon": "^11.0.0", + "typescript": "^5.3.3", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "yorkie": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "../../../node_modules/.pnpm/globals@15.15.0/node_modules/globals": { + "version": "15.15.0", + "dev": true, + "license": "MIT", + "devDependencies": { + "@vitest/eslint-plugin": "^1.1.30", + "ava": "^6.1.3", + "cheerio": "^1.0.0-rc.12", + "eslint-plugin-jest": "^28.8.3", + "execa": "^9.4.0", + "get-port": "^7.1.0", + "npm-run-all2": "^6.2.3", + "outdent": "^0.8.0", + "puppeteer": "^23.4.1", + "shelljs": "^0.8.5", + "tsd": "^0.31.2", + "type-fest": "^4.26.1", + "xo": "^0.59.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../../node_modules/.pnpm/typescript-eslint@8.52.0_eslint@9.39.2_jiti@2.6.1__typescript@5.8.3/node_modules/typescript-eslint": { + "version": "8.52.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" + }, + "devDependencies": { + "@vitest/coverage-v8": "^3.2.4", + "eslint": "*", + "rimraf": "*", + "typescript": "*", + "vitest": "^3.2.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript": { + "version": "5.8.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "devDependencies": { + "@dprint/formatter": "^0.4.1", + "@dprint/typescript": "0.93.3", + "@esfx/canceltoken": "^1.0.0", + "@eslint/js": "^9.17.0", + "@octokit/rest": "^21.0.2", + "@types/chai": "^4.3.20", + "@types/diff": "^5.2.3", + "@types/minimist": "^1.2.5", + "@types/mocha": "^10.0.10", + "@types/ms": "^0.7.34", + "@types/node": "latest", + "@types/source-map-support": "^0.5.10", + "@types/which": "^3.0.4", + "@typescript-eslint/rule-tester": "^8.18.1", + "@typescript-eslint/type-utils": "^8.18.1", + "@typescript-eslint/utils": "^8.18.1", + "azure-devops-node-api": "^14.1.0", + "c8": "^10.1.3", + "chai": "^4.5.0", + "chalk": "^4.1.2", + "chokidar": "^3.6.0", + "diff": "^5.2.0", + "dprint": "^0.47.6", + "esbuild": "^0.24.0", + "eslint": "^9.17.0", + "eslint-formatter-autolinkable-stylish": "^1.4.0", + "eslint-plugin-regexp": "^2.7.0", + "fast-xml-parser": "^4.5.1", + "glob": "^10.4.5", + "globals": "^15.13.0", + "hereby": "^1.10.0", + "jsonc-parser": "^3.3.1", + "knip": "^5.41.0", + "minimist": "^1.2.8", + "mocha": "^10.8.2", + "mocha-fivemat-progress-reporter": "^0.1.0", + "monocart-coverage-reports": "^2.11.4", + "ms": "^2.1.3", + "playwright": "^1.49.1", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1", + "typescript": "^5.7.2", + "typescript-eslint": "^8.18.1", + "which": "^3.0.1" + }, + "engines": { + "node": ">=14.17" + } + }, + "../../../node_modules/.pnpm/zod@4.3.2/node_modules/zod": { + "version": "4.3.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@eslint/js": { + "resolved": "../../../node_modules/.pnpm/@eslint+js@9.39.2/node_modules/@eslint/js", + "link": true + }, + "node_modules/eslint": { + "resolved": "../../../node_modules/.pnpm/eslint@9.39.2_jiti@2.6.1/node_modules/eslint", + "link": true + }, + "node_modules/globals": { + "resolved": "../../../node_modules/.pnpm/globals@15.15.0/node_modules/globals", + "link": true + }, + "node_modules/typescript": { + "resolved": "../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript", + "link": true + }, + "node_modules/typescript-eslint": { + "resolved": "../../../node_modules/.pnpm/typescript-eslint@8.52.0_eslint@9.39.2_jiti@2.6.1__typescript@5.8.3/node_modules/typescript-eslint", + "link": true + }, + "node_modules/zod": { + "resolved": "../../../node_modules/.pnpm/zod@4.3.2/node_modules/zod", + "link": true + } + } +} diff --git a/client-sdks/manager/typescript/src/funcs/bindingsResolveBinding.ts b/client-sdks/manager/typescript/src/funcs/bindingsResolveBinding.ts new file mode 100644 index 000000000..ee0374415 --- /dev/null +++ b/client-sdks/manager/typescript/src/funcs/bindingsResolveBinding.ts @@ -0,0 +1,165 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienManagerCore } from "../core.js"; +import { encodeJSON } from "../lib/encodings.js"; +import { matchStatusCode } from "../lib/http.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienManagerError } from "../models/errors/alienmanagererror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function bindingsResolveBinding( + client: AlienManagerCore, + request: models.ResolveBindingRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.ResolveBindingResponse, + | errors.AlienError + | AlienManagerError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienManagerCore, + request: models.ResolveBindingRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.ResolveBindingResponse, + | errors.AlienError + | AlienManagerError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => models.ResolveBindingRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload, { explode: true }); + + const path = pathToFunc("/v1/bindings/resolve")(); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.bearer); + const securityInput = secConfig == null ? {} : { bearer: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "resolve_binding", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.bearer, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + isErrorStatusCode: (statusCode: number) => + matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]), + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.ResolveBindingResponse, + | errors.AlienError + | AlienManagerError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.ResolveBindingResponse$inboundSchema), + M.jsonErr([400, 401, 403, 404], errors.AlienError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/manager/typescript/src/funcs/credentialsResolveCredentials.ts b/client-sdks/manager/typescript/src/funcs/credentialsResolveCredentials.ts deleted file mode 100644 index b08d3e2b3..000000000 --- a/client-sdks/manager/typescript/src/funcs/credentialsResolveCredentials.ts +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ - -import { AlienManagerCore } from "../core.js"; -import { encodeJSON } from "../lib/encodings.js"; -import { matchStatusCode } from "../lib/http.js"; -import * as M from "../lib/matchers.js"; -import { compactMap } from "../lib/primitives.js"; -import { safeParse } from "../lib/schemas.js"; -import { RequestOptions } from "../lib/sdks.js"; -import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; -import { pathToFunc } from "../lib/url.js"; -import { AlienManagerError } from "../models/errors/alienmanagererror.js"; -import { - ConnectionError, - InvalidRequestError, - RequestAbortedError, - RequestTimeoutError, - UnexpectedClientError, -} from "../models/errors/httpclienterrors.js"; -import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; -import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; -import * as models from "../models/index.js"; -import { APICall, APIPromise } from "../types/async.js"; -import { Result } from "../types/fp.js"; - -export function credentialsResolveCredentials( - client: AlienManagerCore, - request: models.ResolveCredentialsRequest, - options?: RequestOptions, -): APIPromise< - Result< - models.ResolveCredentialsResponse, - | AlienManagerError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError - > -> { - return new APIPromise($do( - client, - request, - options, - )); -} - -async function $do( - client: AlienManagerCore, - request: models.ResolveCredentialsRequest, - options?: RequestOptions, -): Promise< - [ - Result< - models.ResolveCredentialsResponse, - | AlienManagerError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError - >, - APICall, - ] -> { - const parsed = safeParse( - request, - (value) => models.ResolveCredentialsRequest$outboundSchema.parse(value), - "Input validation failed", - ); - if (!parsed.ok) { - return [parsed, { status: "invalid" }]; - } - const payload = parsed.value; - const body = encodeJSON("body", payload, { explode: true }); - - const path = pathToFunc("/v1/resolve-credentials")(); - - const headers = new Headers(compactMap({ - "Content-Type": "application/json", - Accept: "application/json", - })); - - const secConfig = await extractSecurity(client._options.bearer); - const securityInput = secConfig == null ? {} : { bearer: secConfig }; - const requestSecurity = resolveGlobalSecurity(securityInput); - - const context = { - options: client._options, - baseURL: options?.serverURL ?? client._baseURL ?? "", - operationID: "resolve_credentials", - oAuth2Scopes: null, - - resolvedSecurity: requestSecurity, - - securitySource: client._options.bearer, - retryConfig: options?.retries - || client._options.retryConfig - || { strategy: "none" }, - retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], - }; - - const requestRes = client._createRequest(context, { - security: requestSecurity, - method: "POST", - baseURL: options?.serverURL, - path: path, - headers: headers, - body: body, - userAgent: client._options.userAgent, - timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, - }, options); - if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; - } - const req = requestRes.value; - - const doResult = await client._do(req, { - context, - isErrorStatusCode: (statusCode: number) => - matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]), - retryConfig: context.retryConfig, - retryCodes: context.retryCodes, - }); - if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; - } - const response = doResult.value; - - const [result] = await M.match< - models.ResolveCredentialsResponse, - | AlienManagerError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError - >( - M.json(200, models.ResolveCredentialsResponse$inboundSchema), - M.fail("4XX"), - M.fail("5XX"), - )(response, req); - if (!result.ok) { - return [result, { status: "complete", request: req, response }]; - } - - return [result, { status: "complete", request: req, response }]; -} diff --git a/client-sdks/manager/typescript/src/lib/config.ts b/client-sdks/manager/typescript/src/lib/config.ts index 05217ba6e..ab4275ba6 100644 --- a/client-sdks/manager/typescript/src/lib/config.ts +++ b/client-sdks/manager/typescript/src/lib/config.ts @@ -43,8 +43,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "1.0.0", - sdkVersion: "1.15.0", - genVersion: "2.918.1", + sdkVersion: "2.1.6", + genVersion: "2.918.4", userAgent: - "speakeasy-sdk/typescript 1.15.0 2.918.1 1.0.0 @alienplatform/manager-api", + "speakeasy-sdk/typescript 2.1.6 2.918.4 1.0.0 @alienplatform/manager-api", } as const; diff --git a/client-sdks/manager/typescript/src/lib/security.ts b/client-sdks/manager/typescript/src/lib/security.ts index 3a8f5b7a7..126af7c05 100644 --- a/client-sdks/manager/typescript/src/lib/security.ts +++ b/client-sdks/manager/typescript/src/lib/security.ts @@ -251,7 +251,7 @@ export function resolveGlobalSecurity( [ { fieldName: "Authorization", - type: "apiKey:header", + type: "http:bearer", value: security?.bearer ?? env().ALIEN_MANAGER_BEARER, }, ], diff --git a/client-sdks/manager/typescript/src/models/azurecredentials.ts b/client-sdks/manager/typescript/src/models/azurecredentials.ts index 43f2d9265..731cac8cd 100644 --- a/client-sdks/manager/typescript/src/models/azurecredentials.ts +++ b/client-sdks/manager/typescript/src/models/azurecredentials.ts @@ -68,6 +68,22 @@ export type AzureCredentialsVMManagedIdentity = { type: "vmManagedIdentity"; }; +/** + * A short-lived Azure Storage shared access signature. + * + * @remarks + * + * Query parameter values are kept decoded. Azure clients must encode them + * when attaching them to a request URL. + */ +export type AzureCredentialsSasToken = { + /** + * Exact SAS query parameters, including the signature and expiry. + */ + queryParameters: { [k: string]: string }; + type: "sasToken"; +}; + /** * Short-lived bearer tokens keyed by their exact Azure OAuth scope. * @@ -122,6 +138,7 @@ export type AzureCredentials = | AzureCredentialsServicePrincipal | AzureCredentialsAccessToken | AzureCredentialsScopedAccessTokens + | AzureCredentialsSasToken | AzureCredentialsVMManagedIdentity | AzureCredentialsWorkloadIdentity | AzureCredentialsManagedIdentity; @@ -207,6 +224,29 @@ export function azureCredentialsVMManagedIdentityFromJSON( ); } +/** @internal */ +export const AzureCredentialsSasToken$inboundSchema: z.ZodType< + AzureCredentialsSasToken, + unknown +> = z.object({ + query_parameters: z.record(z.string(), z.string()), + type: z.literal("sasToken"), +}).transform((v) => { + return remap$(v, { + "query_parameters": "queryParameters", + }); +}); + +export function azureCredentialsSasTokenFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AzureCredentialsSasToken$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AzureCredentialsSasToken' from JSON`, + ); +} + /** @internal */ export const AzureCredentialsScopedAccessTokens$inboundSchema: z.ZodType< AzureCredentialsScopedAccessTokens, @@ -279,6 +319,7 @@ export const AzureCredentials$inboundSchema: z.ZodType< z.lazy(() => AzureCredentialsServicePrincipal$inboundSchema), z.lazy(() => AzureCredentialsAccessToken$inboundSchema), z.lazy(() => AzureCredentialsScopedAccessTokens$inboundSchema), + z.lazy(() => AzureCredentialsSasToken$inboundSchema), z.lazy(() => AzureCredentialsVMManagedIdentity$inboundSchema), z.lazy(() => AzureCredentialsWorkloadIdentity$inboundSchema), z.lazy(() => AzureCredentialsManagedIdentity$inboundSchema), diff --git a/client-sdks/manager/typescript/src/models/computepoolselection.ts b/client-sdks/manager/typescript/src/models/computepoolselection.ts index 15fdf9260..8245743d0 100644 --- a/client-sdks/manager/typescript/src/models/computepoolselection.ts +++ b/client-sdks/manager/typescript/src/models/computepoolselection.ts @@ -3,14 +3,22 @@ */ import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + FailureDomainSelection, + FailureDomainSelection$inboundSchema, + FailureDomainSelection$Outbound, + FailureDomainSelection$outboundSchema, +} from "./failuredomainselection.js"; /** * Autoscaling machine pool. */ export type ComputePoolSelectionAutoscale = { + failureDomains?: FailureDomainSelection | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -30,6 +38,7 @@ export type ComputePoolSelectionAutoscale = { * Fixed number of machines. */ export type ComputePoolSelectionFixed = { + failureDomains?: FailureDomainSelection | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -53,13 +62,19 @@ export const ComputePoolSelectionAutoscale$inboundSchema: z.ZodType< ComputePoolSelectionAutoscale, unknown > = z.object({ + failure_domains: z.nullable(FailureDomainSelection$inboundSchema).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); /** @internal */ export type ComputePoolSelectionAutoscale$Outbound = { + failure_domains?: FailureDomainSelection$Outbound | null | undefined; machine?: string | null | undefined; max: number; min: number; @@ -71,10 +86,15 @@ export const ComputePoolSelectionAutoscale$outboundSchema: z.ZodType< ComputePoolSelectionAutoscale$Outbound, ComputePoolSelectionAutoscale > = z.object({ + failureDomains: z.nullable(FailureDomainSelection$outboundSchema).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function computePoolSelectionAutoscaleToJSON( @@ -101,12 +121,18 @@ export const ComputePoolSelectionFixed$inboundSchema: z.ZodType< ComputePoolSelectionFixed, unknown > = z.object({ + failure_domains: z.nullable(FailureDomainSelection$inboundSchema).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); /** @internal */ export type ComputePoolSelectionFixed$Outbound = { + failure_domains?: FailureDomainSelection$Outbound | null | undefined; machine?: string | null | undefined; machines: number; mode: "fixed"; @@ -117,9 +143,14 @@ export const ComputePoolSelectionFixed$outboundSchema: z.ZodType< ComputePoolSelectionFixed$Outbound, ComputePoolSelectionFixed > = z.object({ + failureDomains: z.nullable(FailureDomainSelection$outboundSchema).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function computePoolSelectionFixedToJSON( diff --git a/client-sdks/manager/typescript/src/models/errors/alienerror.ts b/client-sdks/manager/typescript/src/models/errors/alienerror.ts new file mode 100644 index 000000000..ffe76508f --- /dev/null +++ b/client-sdks/manager/typescript/src/models/errors/alienerror.ts @@ -0,0 +1,213 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { AlienManagerError } from "./alienmanagererror.js"; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type AlienErrorData = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable?: boolean | undefined; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | undefined; +}; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export class AlienError extends AlienManagerError { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable?: boolean | undefined; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | undefined; + + /** The original data that was passed to this error instance. */ + data$: AlienErrorData; + + constructor( + err: AlienErrorData, + httpMeta: { response: Response; request: Request; body: string }, + ) { + const message = err.message || `API error occurred: ${JSON.stringify(err)}`; + super(message, httpMeta); + this.data$ = err; + this.code = err.code; + if (err.context != null) this.context = err.context; + if (err.hint != null) this.hint = err.hint; + if (err.httpStatusCode != null) this.httpStatusCode = err.httpStatusCode; + this.internal = err.internal; + if (err.retryable != null) this.retryable = err.retryable; + if (err.source != null) this.source = err.source; + + this.name = "AlienError"; + } +} + +/** @internal */ +export const AlienError$inboundSchema: z.ZodType = z + .object({ + code: z.string(), + context: z.any().optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.any().optional(), + request$: z.custom(x => x instanceof Request), + response$: z.custom(x => x instanceof Response), + body$: z.string(), + }) + .transform((v) => { + return new AlienError(v, { + request: v.request$, + response: v.response$, + body: v.body$, + }); + }); diff --git a/client-sdks/manager/typescript/src/models/errors/index.ts b/client-sdks/manager/typescript/src/models/errors/index.ts index fb8966700..34de99dc7 100644 --- a/client-sdks/manager/typescript/src/models/errors/index.ts +++ b/client-sdks/manager/typescript/src/models/errors/index.ts @@ -2,6 +2,7 @@ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ +export * from "./alienerror.js"; export * from "./alienmanagerdefaulterror.js"; export * from "./alienmanagererror.js"; export * from "./errorresponse.js"; diff --git a/client-sdks/manager/typescript/src/models/exposeprotocol.ts b/client-sdks/manager/typescript/src/models/exposeprotocol.ts new file mode 100644 index 000000000..696abd7f5 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/exposeprotocol.ts @@ -0,0 +1,22 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { ClosedEnum } from "../types/enums.js"; + +/** + * Protocol for public workload endpoints. + */ +export const ExposeProtocol = { + Http: "http", + Tcp: "tcp", +} as const; +/** + * Protocol for public workload endpoints. + */ +export type ExposeProtocol = ClosedEnum; + +/** @internal */ +export const ExposeProtocol$inboundSchema: z.ZodEnum = z + .enum(ExposeProtocol); diff --git a/client-sdks/manager/typescript/src/models/failuredomainselection.ts b/client-sdks/manager/typescript/src/models/failuredomainselection.ts new file mode 100644 index 000000000..ebf180859 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/failuredomainselection.ts @@ -0,0 +1,65 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Failure-domain policy selected for a compute pool. + */ +export type FailureDomainSelection = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +/** @internal */ +export const FailureDomainSelection$inboundSchema: z.ZodType< + FailureDomainSelection, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); +/** @internal */ +export type FailureDomainSelection$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const FailureDomainSelection$outboundSchema: z.ZodType< + FailureDomainSelection$Outbound, + FailureDomainSelection +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function failureDomainSelectionToJSON( + failureDomainSelection: FailureDomainSelection, +): string { + return JSON.stringify( + FailureDomainSelection$outboundSchema.parse(failureDomainSelection), + ); +} +export function failureDomainSelectionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => FailureDomainSelection$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'FailureDomainSelection' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/index.ts b/client-sdks/manager/typescript/src/models/index.ts index 494aa56b1..5acebe2db 100644 --- a/client-sdks/manager/typescript/src/models/index.ts +++ b/client-sdks/manager/typescript/src/models/index.ts @@ -73,6 +73,8 @@ export * from "./domainsettings.js"; export * from "./envelope.js"; export * from "./environmentvariable.js"; export * from "./environmentvariabletype.js"; +export * from "./exposeprotocol.js"; +export * from "./failuredomainselection.js"; export * from "./gcpcredentials.js"; export * from "./gcpcustomcertificateconfig.js"; export * from "./gcpimpersonationconfig.js"; @@ -123,6 +125,7 @@ export * from "./leaseresponse.js"; export * from "./listdeploymentgroupsresponse.js"; export * from "./listdeploymentsresponse.js"; export * from "./listreleasesresponse.js"; +export * from "./loadbalancerendpoint.js"; export * from "./localoperation.js"; export * from "./localruntimeeventsnapshot.js"; export * from "./localruntimeeventsubject.js"; @@ -155,6 +158,7 @@ export * from "./presignedrequest.js"; export * from "./presignedrequestbackend.js"; export * from "./providerfleetstatus.js"; export * from "./providerlifecyclestate.js"; +export * from "./publicendpointoutput.js"; export * from "./publicendpointtargetsettings.js"; export * from "./queueheartbeatdata.js"; export * from "./queueheartbeatstatus.js"; @@ -164,10 +168,20 @@ export * from "./reconcilerequest.js"; export * from "./reconcileresponse.js"; export * from "./releaserequest.js"; export * from "./releaseresponse.js"; +export * from "./remoteawsclientconfig.js"; +export * from "./remoteawscredentials.js"; +export * from "./remoteazureclientconfig.js"; +export * from "./remoteazurecontainersas.js"; +export * from "./remoteazurecredentials.js"; +export * from "./remoteblobstoragebinding.js"; +export * from "./remotegcpclientconfig.js"; +export * from "./remotegcpcredentials.js"; +export * from "./remotegcsstoragebinding.js"; +export * from "./remotes3storagebinding.js"; export * from "./remotestackmanagementheartbeatdata.js"; export * from "./remotestackmanagementheartbeatstatus.js"; -export * from "./resolvecredentialsrequest.js"; -export * from "./resolvecredentialsresponse.js"; +export * from "./resolvebindingrequest.js"; +export * from "./resolvebindingresponse.js"; export * from "./resourceentry.js"; export * from "./resourceheartbeat.js"; export * from "./resourceheartbeatdata.js"; diff --git a/client-sdks/manager/typescript/src/models/loadbalancerendpoint.ts b/client-sdks/manager/typescript/src/models/loadbalancerendpoint.ts new file mode 100644 index 000000000..5138e7c38 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/loadbalancerendpoint.ts @@ -0,0 +1,44 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Load balancer endpoint information for DNS management. + * + * @remarks + * This is optional metadata used by the DNS controller to create domain mappings. + */ +export type LoadBalancerEndpoint = { + /** + * The DNS name of the load balancer endpoint (e.g., ALB DNS, API Gateway domain). + */ + dnsName: string; + /** + * AWS Route53 hosted zone ID (for ALIAS records). Only set on AWS. + */ + hostedZoneId?: string | null | undefined; +}; + +/** @internal */ +export const LoadBalancerEndpoint$inboundSchema: z.ZodType< + LoadBalancerEndpoint, + unknown +> = z.object({ + dnsName: z.string(), + hostedZoneId: z.nullable(z.string()).optional(), +}); + +export function loadBalancerEndpointFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => LoadBalancerEndpoint$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'LoadBalancerEndpoint' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/publicendpointoutput.ts b/client-sdks/manager/typescript/src/models/publicendpointoutput.ts new file mode 100644 index 000000000..18a84f6be --- /dev/null +++ b/client-sdks/manager/typescript/src/models/publicendpointoutput.ts @@ -0,0 +1,67 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + ExposeProtocol, + ExposeProtocol$inboundSchema, +} from "./exposeprotocol.js"; +import { + LoadBalancerEndpoint, + LoadBalancerEndpoint$inboundSchema, +} from "./loadbalancerendpoint.js"; + +/** + * Runtime-resolved public endpoint metadata. + */ +export type PublicEndpointOutput = { + /** + * Hostname for this endpoint. + */ + host: string; + loadBalancerEndpoint?: LoadBalancerEndpoint | null | undefined; + /** + * Public connection port. + */ + port: number; + /** + * Protocol for public workload endpoints. + */ + protocol: ExposeProtocol; + /** + * Base URL for this endpoint. + */ + url: string; + /** + * Wildcard hostname routed to this endpoint, when configured. + */ + wildcardHost?: string | null | undefined; +}; + +/** @internal */ +export const PublicEndpointOutput$inboundSchema: z.ZodType< + PublicEndpointOutput, + unknown +> = z.object({ + host: z.string(), + loadBalancerEndpoint: z.nullable(LoadBalancerEndpoint$inboundSchema) + .optional(), + port: z.int(), + protocol: ExposeProtocol$inboundSchema, + url: z.string(), + wildcardHost: z.nullable(z.string()).optional(), +}); + +export function publicEndpointOutputFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => PublicEndpointOutput$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'PublicEndpointOutput' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remoteawsclientconfig.ts b/client-sdks/manager/typescript/src/models/remoteawsclientconfig.ts new file mode 100644 index 000000000..808363e78 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remoteawsclientconfig.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + RemoteAwsCredentials, + RemoteAwsCredentials$inboundSchema, +} from "./remoteawscredentials.js"; + +/** + * Response-safe AWS client configuration. The public contract deliberately + * + * @remarks + * has no static, profile, metadata, or web-identity credential variants. + */ +export type RemoteAwsClientConfig = { + /** + * AWS account containing the bucket. + */ + accountId: string; + /** + * The only AWS credential form remote binding resolution can return. + */ + credentials: RemoteAwsCredentials; + /** + * AWS region containing the bucket. + */ + region: string; +}; + +/** @internal */ +export const RemoteAwsClientConfig$inboundSchema: z.ZodType< + RemoteAwsClientConfig, + unknown +> = z.object({ + accountId: z.string(), + credentials: RemoteAwsCredentials$inboundSchema, + region: z.string(), +}); + +export function remoteAwsClientConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteAwsClientConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAwsClientConfig' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remoteawscredentials.ts b/client-sdks/manager/typescript/src/models/remoteawscredentials.ts new file mode 100644 index 000000000..08bd4717d --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remoteawscredentials.ts @@ -0,0 +1,88 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export const RemoteAwsCredentialsType = { + SessionCredentials: "sessionCredentials", +} as const; +export type RemoteAwsCredentialsType = ClosedEnum< + typeof RemoteAwsCredentialsType +>; + +/** + * Temporary AWS session credentials with an authoritative expiry. + */ +export type RemoteAwsCredentialsSessionCredentials = { + /** + * AWS access key id. + */ + accessKeyId: string; + /** + * Provider-reported credential expiry. + */ + expiresAt: string; + /** + * AWS secret access key. + */ + secretAccessKey: string; + /** + * AWS session token. + */ + sessionToken: string; + type: RemoteAwsCredentialsType; +}; + +/** + * The only AWS credential form remote binding resolution can return. + */ +export type RemoteAwsCredentials = RemoteAwsCredentialsSessionCredentials; + +/** @internal */ +export const RemoteAwsCredentialsType$inboundSchema: z.ZodEnum< + typeof RemoteAwsCredentialsType +> = z.enum(RemoteAwsCredentialsType); + +/** @internal */ +export const RemoteAwsCredentialsSessionCredentials$inboundSchema: z.ZodType< + RemoteAwsCredentialsSessionCredentials, + unknown +> = z.object({ + accessKeyId: z.string(), + expiresAt: z.string(), + secretAccessKey: z.string(), + sessionToken: z.string(), + type: RemoteAwsCredentialsType$inboundSchema, +}); + +export function remoteAwsCredentialsSessionCredentialsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + RemoteAwsCredentialsSessionCredentials$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAwsCredentialsSessionCredentials' from JSON`, + ); +} + +/** @internal */ +export const RemoteAwsCredentials$inboundSchema: z.ZodType< + RemoteAwsCredentials, + unknown +> = z.lazy(() => RemoteAwsCredentialsSessionCredentials$inboundSchema); + +export function remoteAwsCredentialsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteAwsCredentials$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAwsCredentials' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remoteazureclientconfig.ts b/client-sdks/manager/typescript/src/models/remoteazureclientconfig.ts new file mode 100644 index 000000000..cc66b81c8 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remoteazureclientconfig.ts @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + RemoteAzureCredentials, + RemoteAzureCredentials$inboundSchema, +} from "./remoteazurecredentials.js"; + +/** + * Response-safe Azure client configuration. It contains one container-bound + * + * @remarks + * user-delegation SAS and no OAuth or refreshable identity source. + */ +export type RemoteAzureClientConfig = { + /** + * The only Azure credential form remote binding resolution can return. + */ + credentials: RemoteAzureCredentials; + /** + * Azure region configured for the deployment. + */ + region?: string | null | undefined; + /** + * Azure subscription containing the storage account. + */ + subscriptionId: string; + /** + * Azure tenant owning the identity. + */ + tenantId: string; +}; + +/** @internal */ +export const RemoteAzureClientConfig$inboundSchema: z.ZodType< + RemoteAzureClientConfig, + unknown +> = z.object({ + credentials: RemoteAzureCredentials$inboundSchema, + region: z.nullable(z.string()).optional(), + subscriptionId: z.string(), + tenantId: z.string(), +}); + +export function remoteAzureClientConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteAzureClientConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAzureClientConfig' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remoteazurecontainersas.ts b/client-sdks/manager/typescript/src/models/remoteazurecontainersas.ts new file mode 100644 index 000000000..cfa52295c --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remoteazurecontainersas.ts @@ -0,0 +1,110 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Explicit fields of an Azure user-delegation SAS. Keeping the fields typed + * + * @remarks + * lets clients independently validate container scope, permissions, protocol, + * and expiry before constructing query parameters. + */ +export type RemoteAzureContainerSas = { + /** + * Storage account named by the signed canonical resource. + */ + accountName: string; + /** + * Blob container named by the signed canonical resource. + */ + containerName: string; + /** + * SAS validity end (`se`). + */ + expiresAt: string; + /** + * Canonically ordered SAS permissions (`sp`). + */ + permissions: string; + /** + * Required transport protocol (`spr`). + */ + protocol: string; + /** + * Storage authorization version (`sv`). + */ + serviceVersion: string; + /** + * HMAC-SHA256 signature (`sig`). + */ + signature: string; + /** + * Delegation-key validity end (`ske`). + */ + signedKeyExpiry: string; + /** + * Delegation-key service (`sks`). + */ + signedKeyService: string; + /** + * Delegation-key validity start (`skt`). + */ + signedKeyStart: string; + /** + * Delegation-key version (`skv`). + */ + signedKeyVersion: string; + /** + * Object ID that requested the delegation key (`skoid`). + */ + signedObjectId: string; + /** + * Signed resource kind (`sr`). + */ + signedResource: string; + /** + * Tenant ID that issued the delegation key (`sktid`). + */ + signedTenantId: string; + /** + * SAS validity start (`st`). + */ + startsAt: string; +}; + +/** @internal */ +export const RemoteAzureContainerSas$inboundSchema: z.ZodType< + RemoteAzureContainerSas, + unknown +> = z.object({ + accountName: z.string(), + containerName: z.string(), + expiresAt: z.string(), + permissions: z.string(), + protocol: z.string(), + serviceVersion: z.string(), + signature: z.string(), + signedKeyExpiry: z.string(), + signedKeyService: z.string(), + signedKeyStart: z.string(), + signedKeyVersion: z.string(), + signedObjectId: z.string(), + signedResource: z.string(), + signedTenantId: z.string(), + startsAt: z.string(), +}); + +export function remoteAzureContainerSasFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteAzureContainerSas$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAzureContainerSas' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remoteazurecredentials.ts b/client-sdks/manager/typescript/src/models/remoteazurecredentials.ts new file mode 100644 index 000000000..c45ce63ba --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remoteazurecredentials.ts @@ -0,0 +1,81 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + RemoteAzureContainerSas, + RemoteAzureContainerSas$inboundSchema, +} from "./remoteazurecontainersas.js"; + +export const RemoteAzureCredentialsType = { + ContainerSas: "containerSas", +} as const; +export type RemoteAzureCredentialsType = ClosedEnum< + typeof RemoteAzureCredentialsType +>; + +/** + * User-delegation SAS signed for exactly one container. + */ +export type RemoteAzureCredentialsContainerSas = { + /** + * Explicit fields of an Azure user-delegation SAS. Keeping the fields typed + * + * @remarks + * lets clients independently validate container scope, permissions, protocol, + * and expiry before constructing query parameters. + */ + sas: RemoteAzureContainerSas; + type: RemoteAzureCredentialsType; +}; + +/** + * The only Azure credential form remote binding resolution can return. + */ +export type RemoteAzureCredentials = RemoteAzureCredentialsContainerSas; + +/** @internal */ +export const RemoteAzureCredentialsType$inboundSchema: z.ZodEnum< + typeof RemoteAzureCredentialsType +> = z.enum(RemoteAzureCredentialsType); + +/** @internal */ +export const RemoteAzureCredentialsContainerSas$inboundSchema: z.ZodType< + RemoteAzureCredentialsContainerSas, + unknown +> = z.object({ + sas: RemoteAzureContainerSas$inboundSchema, + type: RemoteAzureCredentialsType$inboundSchema, +}); + +export function remoteAzureCredentialsContainerSasFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + RemoteAzureCredentialsContainerSas$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAzureCredentialsContainerSas' from JSON`, + ); +} + +/** @internal */ +export const RemoteAzureCredentials$inboundSchema: z.ZodType< + RemoteAzureCredentials, + unknown +> = z.lazy(() => RemoteAzureCredentialsContainerSas$inboundSchema); + +export function remoteAzureCredentialsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteAzureCredentials$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteAzureCredentials' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remoteblobstoragebinding.ts b/client-sdks/manager/typescript/src/models/remoteblobstoragebinding.ts new file mode 100644 index 000000000..ac749ae7e --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remoteblobstoragebinding.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Concrete Azure Blob Storage topology returned to remote clients. + */ +export type RemoteBlobStorageBinding = { + /** + * Storage account containing the authorized container. + */ + accountName: string; + /** + * Blob container authorized by the credential lease. + */ + containerName: string; +}; + +/** @internal */ +export const RemoteBlobStorageBinding$inboundSchema: z.ZodType< + RemoteBlobStorageBinding, + unknown +> = z.object({ + accountName: z.string(), + containerName: z.string(), +}); + +export function remoteBlobStorageBindingFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteBlobStorageBinding$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteBlobStorageBinding' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remotegcpclientconfig.ts b/client-sdks/manager/typescript/src/models/remotegcpclientconfig.ts new file mode 100644 index 000000000..95f185227 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remotegcpclientconfig.ts @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + RemoteGcpCredentials, + RemoteGcpCredentials$inboundSchema, +} from "./remotegcpcredentials.js"; + +/** + * Response-safe GCP client configuration. Refreshable source credentials and + * + * @remarks + * service endpoint overrides cannot be represented by this type. + */ +export type RemoteGcpClientConfig = { + /** + * The only GCP credential form remote binding resolution can return. + */ + credentials: RemoteGcpCredentials; + /** + * GCP project containing the bucket. + */ + projectId: string; + /** + * Numeric GCP project id, when known. + */ + projectNumber?: string | null | undefined; + /** + * GCP region configured for the deployment. + */ + region: string; +}; + +/** @internal */ +export const RemoteGcpClientConfig$inboundSchema: z.ZodType< + RemoteGcpClientConfig, + unknown +> = z.object({ + credentials: RemoteGcpCredentials$inboundSchema, + projectId: z.string(), + projectNumber: z.nullable(z.string()).optional(), + region: z.string(), +}); + +export function remoteGcpClientConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteGcpClientConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteGcpClientConfig' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remotegcpcredentials.ts b/client-sdks/manager/typescript/src/models/remotegcpcredentials.ts new file mode 100644 index 000000000..e32876591 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remotegcpcredentials.ts @@ -0,0 +1,72 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export const RemoteGcpCredentialsType = { + AccessToken: "accessToken", +} as const; +export type RemoteGcpCredentialsType = ClosedEnum< + typeof RemoteGcpCredentialsType +>; + +/** + * Short-lived OAuth access token. Its expiry is the response `expiresAt`. + */ +export type RemoteGcpCredentialsAccessToken = { + /** + * OAuth bearer token. + */ + token: string; + type: RemoteGcpCredentialsType; +}; + +/** + * The only GCP credential form remote binding resolution can return. + */ +export type RemoteGcpCredentials = RemoteGcpCredentialsAccessToken; + +/** @internal */ +export const RemoteGcpCredentialsType$inboundSchema: z.ZodEnum< + typeof RemoteGcpCredentialsType +> = z.enum(RemoteGcpCredentialsType); + +/** @internal */ +export const RemoteGcpCredentialsAccessToken$inboundSchema: z.ZodType< + RemoteGcpCredentialsAccessToken, + unknown +> = z.object({ + token: z.string(), + type: RemoteGcpCredentialsType$inboundSchema, +}); + +export function remoteGcpCredentialsAccessTokenFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteGcpCredentialsAccessToken$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteGcpCredentialsAccessToken' from JSON`, + ); +} + +/** @internal */ +export const RemoteGcpCredentials$inboundSchema: z.ZodType< + RemoteGcpCredentials, + unknown +> = z.lazy(() => RemoteGcpCredentialsAccessToken$inboundSchema); + +export function remoteGcpCredentialsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteGcpCredentials$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteGcpCredentials' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remotegcsstoragebinding.ts b/client-sdks/manager/typescript/src/models/remotegcsstoragebinding.ts new file mode 100644 index 000000000..a97fe6033 --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remotegcsstoragebinding.ts @@ -0,0 +1,36 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Concrete Google Cloud Storage topology returned to remote clients. + */ +export type RemoteGcsStorageBinding = { + /** + * GCS bucket name authorized by the credential lease. + */ + bucketName: string; +}; + +/** @internal */ +export const RemoteGcsStorageBinding$inboundSchema: z.ZodType< + RemoteGcsStorageBinding, + unknown +> = z.object({ + bucketName: z.string(), +}); + +export function remoteGcsStorageBindingFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteGcsStorageBinding$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteGcsStorageBinding' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/remotes3storagebinding.ts b/client-sdks/manager/typescript/src/models/remotes3storagebinding.ts new file mode 100644 index 000000000..8ae0ca48e --- /dev/null +++ b/client-sdks/manager/typescript/src/models/remotes3storagebinding.ts @@ -0,0 +1,36 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Concrete S3 topology returned to remote clients. + */ +export type RemoteS3StorageBinding = { + /** + * S3 bucket name authorized by the credential lease. + */ + bucketName: string; +}; + +/** @internal */ +export const RemoteS3StorageBinding$inboundSchema: z.ZodType< + RemoteS3StorageBinding, + unknown +> = z.object({ + bucketName: z.string(), +}); + +export function remoteS3StorageBindingFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => RemoteS3StorageBinding$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RemoteS3StorageBinding' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/resolvebindingrequest.ts b/client-sdks/manager/typescript/src/models/resolvebindingrequest.ts new file mode 100644 index 000000000..97afffa4c --- /dev/null +++ b/client-sdks/manager/typescript/src/models/resolvebindingrequest.ts @@ -0,0 +1,42 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +/** + * Request body for `POST /v1/bindings/resolve`. + */ +export type ResolveBindingRequest = { + /** + * Deployment containing the remote-enabled resource. + */ + deploymentId: string; + /** + * Logical Storage resource id in the deployment's stack state. + */ + resourceId: string; +}; + +/** @internal */ +export type ResolveBindingRequest$Outbound = { + deploymentId: string; + resourceId: string; +}; + +/** @internal */ +export const ResolveBindingRequest$outboundSchema: z.ZodType< + ResolveBindingRequest$Outbound, + ResolveBindingRequest +> = z.object({ + deploymentId: z.string(), + resourceId: z.string(), +}); + +export function resolveBindingRequestToJSON( + resolveBindingRequest: ResolveBindingRequest, +): string { + return JSON.stringify( + ResolveBindingRequest$outboundSchema.parse(resolveBindingRequest), + ); +} diff --git a/client-sdks/manager/typescript/src/models/resolvebindingresponse.ts b/client-sdks/manager/typescript/src/models/resolvebindingresponse.ts new file mode 100644 index 000000000..ae9d5ac8d --- /dev/null +++ b/client-sdks/manager/typescript/src/models/resolvebindingresponse.ts @@ -0,0 +1,183 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + RemoteAwsClientConfig, + RemoteAwsClientConfig$inboundSchema, +} from "./remoteawsclientconfig.js"; +import { + RemoteAzureClientConfig, + RemoteAzureClientConfig$inboundSchema, +} from "./remoteazureclientconfig.js"; +import { + RemoteBlobStorageBinding, + RemoteBlobStorageBinding$inboundSchema, +} from "./remoteblobstoragebinding.js"; +import { + RemoteGcpClientConfig, + RemoteGcpClientConfig$inboundSchema, +} from "./remotegcpclientconfig.js"; +import { + RemoteGcsStorageBinding, + RemoteGcsStorageBinding$inboundSchema, +} from "./remotegcsstoragebinding.js"; +import { + RemoteS3StorageBinding, + RemoteS3StorageBinding$inboundSchema, +} from "./remotes3storagebinding.js"; + +/** + * Google Cloud Storage and a bucket-downscoped access token. + */ +export type ResolveBindingResponseGcs = { + /** + * Concrete Google Cloud Storage topology returned to remote clients. + */ + binding: RemoteGcsStorageBinding; + /** + * Response-safe GCP client configuration. Refreshable source credentials and + * + * @remarks + * service endpoint overrides cannot be represented by this type. + */ + clientConfig: RemoteGcpClientConfig; + expiresAt: string; + service: "gcs"; +}; + +/** + * Azure Blob Storage and an exact container-scoped SAS. + */ +export type ResolveBindingResponseBlob = { + /** + * Concrete Azure Blob Storage topology returned to remote clients. + */ + binding: RemoteBlobStorageBinding; + /** + * Response-safe Azure client configuration. It contains one container-bound + * + * @remarks + * user-delegation SAS and no OAuth or refreshable identity source. + */ + clientConfig: RemoteAzureClientConfig; + expiresAt: string; + service: "blob"; +}; + +/** + * AWS S3 and an AWS session. + */ +export type ResolveBindingResponseS3 = { + /** + * Concrete S3 topology returned to remote clients. + */ + binding: RemoteS3StorageBinding; + /** + * Response-safe AWS client configuration. The public contract deliberately + * + * @remarks + * has no static, profile, metadata, or web-identity credential variants. + */ + clientConfig: RemoteAwsClientConfig; + expiresAt: string; + service: "s3"; +}; + +/** + * One approved remote Storage binding paired with credentials for the same + * + * @remarks + * provider. The discriminant makes cross-provider combinations impossible. + */ +export type ResolveBindingResponse = + | ResolveBindingResponseS3 + | ResolveBindingResponseBlob + | ResolveBindingResponseGcs; + +/** @internal */ +export const ResolveBindingResponseGcs$inboundSchema: z.ZodType< + ResolveBindingResponseGcs, + unknown +> = z.object({ + binding: RemoteGcsStorageBinding$inboundSchema, + clientConfig: RemoteGcpClientConfig$inboundSchema, + expiresAt: z.string(), + service: z.literal("gcs"), +}); + +export function resolveBindingResponseGcsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ResolveBindingResponseGcs$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ResolveBindingResponseGcs' from JSON`, + ); +} + +/** @internal */ +export const ResolveBindingResponseBlob$inboundSchema: z.ZodType< + ResolveBindingResponseBlob, + unknown +> = z.object({ + binding: RemoteBlobStorageBinding$inboundSchema, + clientConfig: RemoteAzureClientConfig$inboundSchema, + expiresAt: z.string(), + service: z.literal("blob"), +}); + +export function resolveBindingResponseBlobFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ResolveBindingResponseBlob$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ResolveBindingResponseBlob' from JSON`, + ); +} + +/** @internal */ +export const ResolveBindingResponseS3$inboundSchema: z.ZodType< + ResolveBindingResponseS3, + unknown +> = z.object({ + binding: RemoteS3StorageBinding$inboundSchema, + clientConfig: RemoteAwsClientConfig$inboundSchema, + expiresAt: z.string(), + service: z.literal("s3"), +}); + +export function resolveBindingResponseS3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ResolveBindingResponseS3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ResolveBindingResponseS3' from JSON`, + ); +} + +/** @internal */ +export const ResolveBindingResponse$inboundSchema: z.ZodType< + ResolveBindingResponse, + unknown +> = z.union([ + z.lazy(() => ResolveBindingResponseS3$inboundSchema), + z.lazy(() => ResolveBindingResponseBlob$inboundSchema), + z.lazy(() => ResolveBindingResponseGcs$inboundSchema), +]); + +export function resolveBindingResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ResolveBindingResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ResolveBindingResponse' from JSON`, + ); +} diff --git a/client-sdks/manager/typescript/src/models/resolvecredentialsrequest.ts b/client-sdks/manager/typescript/src/models/resolvecredentialsrequest.ts deleted file mode 100644 index bf70f6f61..000000000 --- a/client-sdks/manager/typescript/src/models/resolvecredentialsrequest.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ - -import * as z from "zod/v4"; - -export type ResolveCredentialsRequest = { - deploymentId: string; -}; - -/** @internal */ -export type ResolveCredentialsRequest$Outbound = { - deploymentId: string; -}; - -/** @internal */ -export const ResolveCredentialsRequest$outboundSchema: z.ZodType< - ResolveCredentialsRequest$Outbound, - ResolveCredentialsRequest -> = z.object({ - deploymentId: z.string(), -}); - -export function resolveCredentialsRequestToJSON( - resolveCredentialsRequest: ResolveCredentialsRequest, -): string { - return JSON.stringify( - ResolveCredentialsRequest$outboundSchema.parse(resolveCredentialsRequest), - ); -} diff --git a/client-sdks/manager/typescript/src/models/resolvecredentialsresponse.ts b/client-sdks/manager/typescript/src/models/resolvecredentialsresponse.ts deleted file mode 100644 index 96d50e7d7..000000000 --- a/client-sdks/manager/typescript/src/models/resolvecredentialsresponse.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ - -import * as z from "zod/v4"; -import { safeParse } from "../lib/schemas.js"; -import { Result as SafeParseResult } from "../types/fp.js"; -import { - ClientConfigUnion, - ClientConfigUnion$inboundSchema, -} from "./clientconfigunion.js"; -import { SDKValidationError } from "./errors/sdkvalidationerror.js"; - -export type ResolveCredentialsResponse = { - /** - * Configuration for different cloud platform clients - */ - clientConfig: ClientConfigUnion; -}; - -/** @internal */ -export const ResolveCredentialsResponse$inboundSchema: z.ZodType< - ResolveCredentialsResponse, - unknown -> = z.object({ - clientConfig: ClientConfigUnion$inboundSchema, -}); - -export function resolveCredentialsResponseFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => ResolveCredentialsResponse$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ResolveCredentialsResponse' from JSON`, - ); -} diff --git a/client-sdks/manager/typescript/src/models/resourceentry.ts b/client-sdks/manager/typescript/src/models/resourceentry.ts index 08da4adf0..281fad9d9 100644 --- a/client-sdks/manager/typescript/src/models/resourceentry.ts +++ b/client-sdks/manager/typescript/src/models/resourceentry.ts @@ -6,8 +6,13 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + PublicEndpointOutput, + PublicEndpointOutput$inboundSchema, +} from "./publicendpointoutput.js"; export type ResourceEntry = { + publicEndpoints?: { [k: string]: PublicEndpointOutput } | undefined; publicUrl?: string | null | undefined; resourceType: string; }; @@ -15,6 +20,8 @@ export type ResourceEntry = { /** @internal */ export const ResourceEntry$inboundSchema: z.ZodType = z .object({ + publicEndpoints: z.record(z.string(), PublicEndpointOutput$inboundSchema) + .optional(), publicUrl: z.nullable(z.string()).optional(), resourceType: z.string(), }); diff --git a/client-sdks/manager/typescript/src/sdk/bindings.ts b/client-sdks/manager/typescript/src/sdk/bindings.ts new file mode 100644 index 000000000..5dcab0339 --- /dev/null +++ b/client-sdks/manager/typescript/src/sdk/bindings.ts @@ -0,0 +1,21 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { bindingsResolveBinding } from "../funcs/bindingsResolveBinding.js"; +import { ClientSDK, RequestOptions } from "../lib/sdks.js"; +import * as models from "../models/index.js"; +import { unwrapAsync } from "../types/fp.js"; + +export class Bindings extends ClientSDK { + async resolveBinding( + request: models.ResolveBindingRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(bindingsResolveBinding( + this, + request, + options, + )); + } +} diff --git a/client-sdks/manager/typescript/src/sdk/credentials.ts b/client-sdks/manager/typescript/src/sdk/credentials.ts index 00d0453d2..7471e4033 100644 --- a/client-sdks/manager/typescript/src/sdk/credentials.ts +++ b/client-sdks/manager/typescript/src/sdk/credentials.ts @@ -3,7 +3,6 @@ */ import { credentialsMintCredentials } from "../funcs/credentialsMintCredentials.js"; -import { credentialsResolveCredentials } from "../funcs/credentialsResolveCredentials.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as models from "../models/index.js"; import { unwrapAsync } from "../types/fp.js"; @@ -19,15 +18,4 @@ export class Credentials extends ClientSDK { options, )); } - - async resolveCredentials( - request: models.ResolveCredentialsRequest, - options?: RequestOptions, - ): Promise { - return unwrapAsync(credentialsResolveCredentials( - this, - request, - options, - )); - } } diff --git a/client-sdks/manager/typescript/src/sdk/sdk.ts b/client-sdks/manager/typescript/src/sdk/sdk.ts index f0fed4c48..6f5e190ac 100644 --- a/client-sdks/manager/typescript/src/sdk/sdk.ts +++ b/client-sdks/manager/typescript/src/sdk/sdk.ts @@ -3,6 +3,7 @@ */ import { ClientSDK } from "../lib/sdks.js"; +import { Bindings } from "./bindings.js"; import { Commands } from "./commands.js"; import { Credentials } from "./credentials.js"; import { DeploymentGroups } from "./deploymentgroups.js"; @@ -20,6 +21,11 @@ export class AlienManager extends ClientSDK { return (this._health ??= new Health(this._options)); } + private _bindings?: Bindings; + get bindings(): Bindings { + return (this._bindings ??= new Bindings(this._options)); + } + private _commands?: Commands; get commands(): Commands { return (this._commands ??= new Commands(this._options)); diff --git a/client-sdks/platform/openapi.json b/client-sdks/platform/openapi.json index e3768067b..3176d4dfa 100644 --- a/client-sdks/platform/openapi.json +++ b/client-sdks/platform/openapi.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"title":"Alien API","version":"1.0.0","contact":{"name":"Alien Team","url":"https://alien.dev"}},"servers":[{"url":"https://api.alien.dev","description":"Alien API - Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key for authentication, must be provided as a Bearer token. Generate an API key at https://alien.dev/api-keys"}},"schemas":{"WorkspaceInvitationPreview":{"type":"object","properties":{"kind":{"type":"string","enum":["email","link"]},"workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name","logoUrl"]},"inviter":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"image":{"type":"string","nullable":true,"format":"uri"}},"required":["name","image"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["active","accepted","expired","revoked"]},"emailHint":{"type":"string","nullable":true}},"required":["kind","workspace","inviter","role","expiresAt","state","emailHint"],"additionalProperties":false},"WorkspaceRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"Role for workspace-scoped service accounts","example":"workspace.member"},"APIError":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"requestId":{"type":"string","description":"Request ID echoed in the x-request-id response header and server logs."}},"required":["code","message","internal"]},"Membership":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"role":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","logoUrl","role","createdAt"],"additionalProperties":false},"UserProfile":{"type":"object","properties":{"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","description":"User's email address"},"name":{"type":"string","description":"User's display name"},"image":{"type":"string","nullable":true,"description":"User's avatar image URL"},"githubUsername":{"type":"string","nullable":true,"description":"Linked GitHub username"},"cliConnected":{"type":"boolean","description":"Whether this user has ever authenticated a request from the Alien CLI. Latched on first CLI request, never cleared."},"company":{"type":"string","nullable":true,"description":"Company name collected during profile setup."},"acquisitionSource":{"type":"string","nullable":true,"enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other",null],"description":"How the user heard about Alien."},"acquisitionSourceDetail":{"type":"string","nullable":true,"description":"Additional acquisition source detail when the source is other."},"useCases":{"type":"string","nullable":true,"description":"What the user is hoping to use Alien for."},"profileSetupCompletedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the user completed the required profile setup dialog."},"profileSetupVersion":{"type":"integer","nullable":true,"description":"Version of the required profile setup dialog the user completed."}},"required":["id","email","name","image","githubUsername","cliConnected","company","acquisitionSource","acquisitionSourceDetail","useCases","profileSetupCompletedAt","profileSetupVersion"],"additionalProperties":false},"UserProfileSetupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"},"company":{"type":"string","minLength":1,"maxLength":120,"description":"Company name"},"acquisitionSource":{"type":"string","enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other"],"description":"How the user heard about Alien"},"acquisitionSourceDetail":{"type":"string","minLength":1,"maxLength":200,"description":"Required when acquisitionSource is other"},"useCases":{"type":"string","maxLength":2000,"description":"What the user is hoping to use Alien for"}},"required":["name","company","acquisitionSource"],"additionalProperties":false},"GitNamespace":{"type":"object","properties":{"id":{"type":"number","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"installationId":{"type":"number","nullable":true},"type":{"type":"string","enum":["team","user"]},"provider":{"type":"string","enum":["github"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","slug","installationId","type","provider","createdAt"],"additionalProperties":false},"GitRepository":{"type":"object","properties":{"name":{"type":"string"},"private":{"type":"boolean"},"defaultBranch":{"type":"string"},"pushedAt":{"type":"string","format":"date-time"}},"required":["name","private","defaultBranch"],"additionalProperties":false},"AcceptWorkspaceInvitationResponse":{"type":"object","properties":{"outcome":{"type":"string","enum":["joined","already-member"]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"workspaceName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["outcome","workspaceId","workspaceName","role"],"additionalProperties":false},"Subject":{"oneOf":[{"$ref":"#/components/schemas/UserSubject"},{"$ref":"#/components/schemas/ServiceAccountSubject"}],"discriminator":{"propertyName":"kind","mapping":{"user":"#/components/schemas/UserSubject","serviceAccount":"#/components/schemas/ServiceAccountSubject"}},"description":"Authenticated principal that can be either a user (with workspace-scoped permissions) or a service account (with configurable scope and role)"},"UserSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["user"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","format":"email","description":"User's email address"},"workspaceId":{"type":"string","description":"ID of the workspace the user is authenticated within"},"workspaceName":{"type":"string","description":"Name of the workspace the user is authenticated within"},"role":{"$ref":"#/components/schemas/UserRole"}},"required":["kind","id","email","workspaceId","role"],"description":"Authenticated user subject with workspace-scoped permissions"},"UserRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"User's role within the workspace","example":"workspace.member"},"ServiceAccountSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["serviceAccount"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique service account identifier (API key ID)"},"workspaceId":{"type":"string","description":"ID of the workspace the service account belongs to"},"workspaceName":{"type":"string","description":"Name of the workspace the service account belongs to"},"scope":{"$ref":"#/components/schemas/SubjectScope"},"role":{"$ref":"#/components/schemas/Role"}},"required":["kind","id","workspaceId","scope","role"],"description":"Authenticated service account subject with scoped permissions (workspace, project, or deployment level)"},"SubjectScope":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["workspace"],"description":"Workspace-scoped access"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["project"],"description":"Project-scoped access"},"projectId":{"type":"string","description":"ID of the specific project this scope applies to"}},"required":["type","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment"],"description":"Deployment-scoped access"},"deploymentId":{"type":"string","description":"ID of the specific deployment this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"}},"required":["type","deploymentId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"],"description":"Deployment group-scoped access"},"deploymentGroupId":{"type":"string","description":"ID of the specific deployment group this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"}},"required":["type","deploymentGroupId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["manager"],"description":"Manager-scoped access"},"managerId":{"type":"string","description":"ID of the specific manager this scope applies to"}},"required":["type","managerId"]}],"description":"Authorization scope defining what resources this service account can access"},"Role":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"$ref":"#/components/schemas/ProjectRole"},{"$ref":"#/components/schemas/DeploymentRole"},{"$ref":"#/components/schemas/DeploymentGroupRole"},{"$ref":"#/components/schemas/ManagerRole"}],"description":"Role defining what actions this service account can perform within its scope","example":"workspace.member"},"ProjectRole":{"type":"string","enum":["project.viewer","project.developer"],"description":"Role for project-scoped service accounts","example":"project.developer"},"DeploymentRole":{"type":"string","enum":["deployment.viewer","deployment.manager","deployment.telemetry-writer"],"description":"Role for deployment-scoped service accounts","example":"deployment.manager"},"DeploymentGroupRole":{"type":"string","enum":["deployment-group.deployer"],"description":"Role for deployment group-scoped service accounts","example":"deployment-group.deployer"},"ManagerRole":{"type":"string","enum":["manager.runtime"],"description":"Role for manager-scoped service accounts","example":"manager.runtime"},"Workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name.","example":"my-workspace"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"onboardingDismissedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the Getting Started walkthrough was dismissed or completed for this workspace. Null means it has never been dismissed; the dashboard auto-promotes the walkthrough until this is set."},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","onboardingDismissedAt","createdAt"],"additionalProperties":false},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","email","name","image","role","joinedAt"],"additionalProperties":false},"AgentSettings":{"type":"object","properties":{"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"enabled":{"type":"boolean","description":"Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`."},"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["workspaceId","enabled","debugPermissionMode","createdAt","updatedAt"],"additionalProperties":false},"UpdateWorkspaceSettingsRequest":{"type":"object","properties":{"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"enabled":{"type":"boolean","description":"Turn the ai-agent on (`true`) or off (`false`) for this workspace."}}},"WorkspaceInvitation":{"type":"object","properties":{"id":{"type":"string","pattern":"winv_[0-9a-zA-Z]{32}$","description":"Unique identifier for the workspace invitation.","example":"winv_DsgltMIFV0GmqtxV5NYTtrknrna"},"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"status":{"type":"string","enum":["pending","accepted","revoked","expired"]},"deliveryStatus":{"type":"string","enum":["pending","sent","failed"]},"expiresAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","email","role","status","deliveryStatus","expiresAt","lastSentAt","createdAt","inviteUrl"],"additionalProperties":false},"WorkspaceInviteLink":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"wil_[0-9a-zA-Z]{40}$","description":"Unique identifier for the workspace invite link.","example":"wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"useCount":{"type":"integer","minimum":0},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","role","expiresAt","createdAt","useCount","lastUsedAt","inviteUrl"],"additionalProperties":false},"ProjectListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deploymentCount":{"type":"number"},"latestRelease":{"$ref":"#/components/schemas/ProjectReleaseInfo"}}}]},"DeploymentPortalAppearancePreset":{"type":"string","enum":["clean","technical","enterprise","playful","minimal"],"default":"clean","description":"Curated visual style for the deployment portal."},"DeploymentPortalAccentColor":{"type":"string","enum":["blue","purple","green","orange","pink","slate"],"default":"blue","description":"Accent color used for highlights and primary actions."},"DeploymentPortalDensity":{"type":"string","enum":["comfortable","compact"],"default":"comfortable","description":"Layout density for portal content."},"ProjectReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","gitMetadata","createdAt"]},"GitMetadata":{"type":"object","nullable":true,"properties":{"commitSha":{"type":"string","nullable":true,"maxLength":40,"description":"The hash of the commit","example":"dc36199b2234c6586ebe05ec94078a895c707e29"},"commitMessage":{"type":"string","nullable":true,"maxLength":1024,"description":"The commit message","example":"add method to measure Interaction to Next Paint (INP) (#36490)"},"commitRef":{"type":"string","nullable":true,"maxLength":256,"description":"The branch or tag on which the commit was made","example":"main"},"commitDate":{"type":"string","nullable":true,"format":"date-time","description":"The date and time when the commit was created","example":"2026-03-16T12:00:00Z"},"dirty":{"type":"boolean","nullable":true,"description":"Whether or not there have been modifications to the working tree since the latest commit","example":true},"remoteUrl":{"type":"string","nullable":true,"maxLength":2048,"description":"The git repository's remote origin url","example":"https://github.com/alienplatform/alien"},"commitAuthorName":{"type":"string","nullable":true,"maxLength":256,"description":"The name of the author of the commit (from git config)","example":"John Doe"},"commitAuthorEmail":{"type":"string","nullable":true,"maxLength":256,"format":"email","description":"The email of the author of the commit (from git config)","example":"john@example.com"},"commitAuthorLogin":{"type":"string","nullable":true,"maxLength":256,"description":"The provider username of the commit author (e.g., GitHub login), resolved server-side from the commit email","example":"johndoe"},"commitAuthorAvatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"The avatar URL of the commit author, resolved server-side from the provider login","example":"https://github.com/johndoe.png"},"provider":{"$ref":"#/components/schemas/GitProvider"}}},"GitProvider":{"oneOf":[{"$ref":"#/components/schemas/GitHubProvider"},{"$ref":"#/components/schemas/GitLabProvider"},{"nullable":true}],"description":"Provider-specific repository information, resolved server-side from remoteUrl"},"GitHubProvider":{"type":"object","properties":{"type":{"type":"string","enum":["github"]},"org":{"type":"string","maxLength":256,"description":"Repository owner (user or organization)"},"repo":{"type":"string","maxLength":256,"description":"Repository name"}},"required":["type","org","repo"]},"GitLabProvider":{"type":"object","properties":{"type":{"type":"string","enum":["gitlab"]},"namespace":{"type":"string","maxLength":256,"description":"Group/project namespace"},"project":{"type":"string","maxLength":256,"description":"Project name"}},"required":["type","namespace","project"]},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","createdAt","workspaceId"]},"ProjectIDOrNamePathParam":{"type":"string","maxLength":100,"description":"Project ID or name."},"ProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","redirectUris"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"hasClientSecret":{"type":"boolean","enum":[true]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","clientId","hasClientSecret","redirectUris"]}]},"GcpOAuthClientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[a-zA-Z0-9_-]+-[a-zA-Z0-9_-]+\\.apps\\.googleusercontent\\.com$","description":"Google OAuth web client ID.","example":"1234567890-abc123.apps.googleusercontent.com"},"UpdateProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId"]}]},"GcpOAuthClientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Google OAuth web client secret. Write-only; never returned by the API.","example":"GOCSPX-example"},"UpdateProject":{"type":"object","properties":{"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."}}},"DeploymentPortalDomainResponse":{"type":"object","properties":{"deploymentPortalEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"},"packageEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["deploymentPortalEndpoint","packageEndpoint"]},"DomainEndpoint":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dend_[0-9a-z]{28}$","description":"Unique identifier for the domain endpoint.","example":"dend_1bb6gdvm1bs74acqkjstcgv"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domainId":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"kind":{"$ref":"#/components/schemas/DomainEndpointKind"},"owner":{"$ref":"#/components/schemas/DomainEndpointOwner"},"hostname":{"type":"string","minLength":1,"maxLength":253},"status":{"$ref":"#/components/schemas/DomainEndpointStatus"},"provider":{"type":"string","nullable":true},"providerState":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"managedDnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPortalManagedDnsRecord"}},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"retryAttempts":{"type":"integer","minimum":0},"nextStepAfter":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","workspaceId","domainId","kind","owner","hostname","status","managedDnsRecords","retryAttempts","createdAt","updatedAt"]},"DomainEndpointKind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"DomainEndpointOwner":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DomainEndpointOwnerType"},"id":{"type":"string"}},"required":["type","id"]},"DomainEndpointOwnerType":{"type":"string","enum":["workspace","project","manager"]},"DomainEndpointStatus":{"type":"string","enum":["waiting_for_domain","provisioning","waiting_for_dns","waiting_for_health","active","failed","deleting"]},"DeploymentPortalManagedDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true}},"required":["name","type","value"]},"DeploymentLinkSetupResponse":{"type":"object","properties":{"activeRelease":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","nullable":true},"stack":{"$ref":"#/components/schemas/StackByPlatform"}},"required":["id","version","stack"]},"visiblePackageTypes":{"type":"array","items":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"}},"visibleSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}}},"required":["activeRelease","visiblePackageTypes","visibleSetupMethods"]},"StackByPlatform":{"type":"object","nullable":true,"properties":{"aws":{"nullable":true},"gcp":{"nullable":true},"azure":{"nullable":true},"kubernetes":{"nullable":true},"machines":{"nullable":true},"local":{"nullable":true},"test":{"nullable":true}},"additionalProperties":false},"DeploymentSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform","helm","cli","manual"]},"DeploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments allowed in this deployment group"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","projectId","workspaceId","createdAt"]},"CreateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments in this deployment group"}},"required":["name","project"]},"EnsureDeploymentGroupByNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments for newly created groups"}},"required":["name","project"]},"ProjectIDOrNameQueryParam":{"type":"string","maxLength":100,"description":"Filter by project ID or name."},"UpdateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"maxDeployments":{"type":"integer","minimum":1,"description":"Maximum number of deployments in this deployment group"}}},"CreateDeploymentGroupTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The API key token"},"deploymentLink":{"type":"string","description":"Formatted deployment link"}},"required":["token","deploymentLink"]},"CreateDeploymentGroupTokenRequest":{"type":"object","properties":{"description":{"type":"string","description":"Description for the API key"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"},"deploymentSetupConfig":{"$ref":"#/components/schemas/DeploymentSetupConfig"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["deploymentSetupConfig"]},"DeploymentSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."}},"required":["metadata","policy","environmentVariables"]},"DeploymentSetupMetadata":{"type":"object","additionalProperties":{"nullable":true}},"DeploymentSetupPolicy":{"type":"object","properties":{"allowedPlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"allowedKubernetesBasePlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","on-prem"]},"minItems":1,"description":"Kubernetes base environments the recipient may target."},"allowedKubernetesClusterSources":{"type":"array","items":{"$ref":"#/components/schemas/KubernetesClusterSource"},"minItems":1,"description":"Whether recipients may create a cluster, use an existing cluster, or both."},"allowedSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}},"allowReleasePinning":{"type":"boolean"},"stackSettings":{"$ref":"#/components/schemas/DeploymentSetupStackSettingsPolicy"}},"required":["allowedPlatforms","allowedSetupMethods"]},"KubernetesClusterSource":{"type":"string","enum":["create","existing"]},"DeploymentSetupStackSettingsPolicy":{"type":"object","properties":{"defaults":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"allowedDeploymentModels":{"type":"array","items":{"type":"string","enum":["push","pull","airgapped"]}},"allowedNetworkModes":{"type":"array","items":{"type":"string","enum":["none","create","default","byo"]}},"allowedUpdatesModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required"]}},"allowedTelemetryModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required","off"]}},"allowedHeartbeatsModes":{"type":"array","items":{"type":"string","enum":["on","off"]}},"allowExternalBindings":{"type":"boolean"},"allowCustomRegistry":{"type":"boolean"}}},"EnvironmentVariableConfig":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"value":{"type":"string","maxLength":10000,"description":"Variable value (encrypted in database)"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","value","type","targetResources"]},"EnvironmentVariableType":{"type":"string","enum":["plain","secret"],"description":"Variable type (plain or secret)"},"EncryptedStackInputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EncryptedStackInputValue"},"default":{}},"EncryptedStackInputValue":{"type":"object","properties":{"value":{"type":"string","description":"Encrypted JSON-encoded input value."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"]},"secret":{"type":"boolean","description":"Whether the original input is secret."}},"required":["value","kind","secret"]},"StackInputValuesRequest":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{}},"StackInputValueRequest":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"CreateFirstPartyDeploymentSessionResponse":{"type":"object","properties":{"token":{"type":"string","description":"The deployment-group session token"}},"required":["token"]},"Package":{"type":"object","properties":{"id":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"type":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"},"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string","description":"Package version (e.g., '1.0.0', 'rel_abc123')"},"sourceReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release used as package build input. Null for release-less packages such as Operate Operator images.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"setupFingerprints":{"$ref":"#/components/schemas/SetupFingerprintMap"},"packageBuildInputHash":{"type":"string","description":"Hash of Platform-known package build request inputs: package type, source release, setup fingerprints, package config, and setup contract version"},"config":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"}},"required":["displayName","name"],"description":"Branding configuration for the deploy CLI binary."},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for CloudFormation packages"},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"}},"required":["chartName","description"],"description":"Configuration for the Helm chart package"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"}},"required":["displayName","name"],"description":"Branding configuration for the Operator image."},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for Terraform package generation."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]}],"description":"Type-specific configuration"},"outputs":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"digest":{"type":"string","description":"Image digest (e.g., \"sha256:abc123...\")"},"image":{"type":"string","description":"Full image reference (e.g., \"public.ecr.aws/acme/operators/project-id:1.2.3\")"},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain embedded into the Operator binary, if whitelabeled."}},"required":["digest","image"],"description":"Outputs from an Operator image package build"},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]},{"nullable":true}],"description":"Package outputs (only when status is 'ready')"},"error":{"nullable":true,"description":"Error information if status is 'failed'"},"sourceBinarySha256":{"type":"string","nullable":true,"description":"Builder-recorded source binary SHA256 (for cli/terraform packages)"},"retries":{"type":"integer","minimum":0,"description":"Number of build retries"},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"leaseExpiresAt":{"type":"string","format":"date-time","nullable":true,"description":"Expiration of the current builder lease"},"buildPhase":{"type":"string","nullable":true,"enum":["building","publishing",null],"description":"Coarse package build phase"},"lastProgressAt":{"type":"string","format":"date-time","nullable":true,"description":"Last successful builder lease renewal or phase change"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","projectId","workspaceId","type","status","version","setupFingerprints","packageBuildInputHash","config","retries","createdAt","updatedAt"]},"SetupFingerprintMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SetupFingerprintInfo"},"description":"Per-target setup compatibility fingerprints copied from the source release"},"SetupFingerprintInfo":{"type":"object","properties":{"target":{"$ref":"#/components/schemas/SetupTarget"},"fingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"version":{"$ref":"#/components/schemas/SetupFingerprintVersion"}},"required":["target","fingerprint","version"]},"SetupTarget":{"type":"string","minLength":1,"description":"Stable target key for the setup contract, e.g. aws/us-east-1"},"SetupFingerprint":{"type":"string","minLength":1,"description":"Deterministic setup contract fingerprint for one setup target"},"SetupFingerprintVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup fingerprint algorithm version"},"ReleaseListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Release"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"rollout":{"type":"object","nullable":true,"properties":{"updatedCount":{"type":"integer","description":"Deployments that finished updating to this release (excludes initial provisions)"},"pendingCount":{"type":"integer","description":"Deployments currently targeting this release but not yet running it"},"avgDurationMs":{"type":"number","nullable":true,"description":"Average time from release creation until a deployment finished updating, in milliseconds"}},"required":["updatedCount","pendingCount","avgDurationMs"],"description":"Rollout stats, included when ?include=rollout is used"}}}]},"Release":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"projectId":{"type":"string","maxLength":128},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"setupFingerprints":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintMap"},{"description":"Per-target setup compatibility fingerprints for this release"}]},"rootDirectory":{"type":"string","nullable":true,"maxLength":256},"workspaceId":{"type":"string","maxLength":128}},"required":["id","projectId","version","createdAt","setupFingerprints","workspaceId"]},"CreateReleaseRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256}},"required":["project"]},"ReleaseAuthorFilterItem":{"type":"object","properties":{"login":{"type":"string","nullable":true,"description":"Provider username (e.g., GitHub login)"},"name":{"type":"string","nullable":true,"description":"Git commit author name"},"avatarUrl":{"type":"string","nullable":true,"format":"uri","description":"Author avatar URL"}},"required":["login","name","avatarUrl"]},"DeploymentListItemResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if in a failed state"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"$ref":"#/components/schemas/ManagerID"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentProtocolVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DeploymentState protocol version owned by the runtime/manager"},"OperatorCapabilityReport":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":128},"state":{"$ref":"#/components/schemas/OperatorCapabilityState"},"detail":{"type":"string","nullable":true,"maxLength":512}},"required":["key","state"]},"OperatorCapabilityState":{"type":"string","enum":["granted","denied","unavailable"]},"ManagerID":{"type":"string","pattern":"mgr_[0-9a-z]{28}$","description":"ID of the manager","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"DeploymentReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","version","createdAt"]},"DeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"}},"required":["id","name"]},"DeploymentProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"}},"required":["id","name"]},"DeploymentStats":{"type":"object","properties":{"total":{"type":"number","description":"Total number of deployments matching filters"},"byStatus":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by status (only includes statuses with non-zero counts)"},"byPlatform":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by platform (only includes platforms with non-zero counts)"},"byCurrentRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by currentReleaseId. The empty string key represents deployments with no current release (initial provisioning)."},"byPinnedRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by pinnedReleaseId among deployments that are pinned. Excludes unpinned deployments."}},"required":["total","byStatus","byPlatform","byCurrentRelease","byPinnedRelease"]},"DeploymentDetailResponse":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}}}]},"Deployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"targetEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of target environment variables for the deployment"},"currentEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of current environment variables for the deployment"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentConnectionInfo":{"type":"object","properties":{"arc":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Manager URL for commands"},"deploymentId":{"type":"string","description":"Deployment ID to use in command requests"}},"required":["url","deploymentId"]},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"publicEndpoints":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"protocol":{"type":"string","enum":["http","tcp"]},"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"wildcardHost":{"type":"string"}},"required":["url","protocol","host","port"]},"description":"Public endpoints keyed by endpoint name."}},"required":["type"]},"description":"Deployed resources and their public endpoints"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"platform":{"type":"string"}},"required":["arc","resources","status","platform"]},"CreateDeploymentResponse":{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Effective deployment model persisted for the deployment."},"token":{"type":"string","description":"Deployment token (only returned when using deployment group token)"}},"required":["deployment","deploymentModel"]},"NewDeploymentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentGroupId":{"type":"string","description":"Required for workspace/project tokens. Deployment group tokens use their own group automatically."},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Optional manager to assign. If omitted, the project default or system manager is selected."}]},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"Stack settings for deployment customization"},"resourcePrefix":{"$ref":"#/components/schemas/ResourcePrefix"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method that created the deployment. Defaults to cli."}]},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup method metadata used to guide privileged teardown."}]},"inputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{},"description":"Stack input values provided by the deployment creator."},"operatorScope":{"type":"string","minLength":1,"maxLength":512,"description":"Display-only scope reported by the Operator manifest."},"operatorPermission":{"type":"string","minLength":1,"maxLength":64,"description":"Display-only permission tier reported by the Operator manifest."},"initialDesiredRelease":{"type":"string","enum":["active","none"],"default":"active","description":"Desired-release selection for a new deployment. Use none to register an environment without initially requesting a release; later updates can assign one."}},"required":["name","platform","project"],"additionalProperties":false,"description":"Request schema for creating a new deployment"},"ResourcePrefix":{"type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?=[a-z0-9])){1,38}[a-z0-9]$","description":"Optional physical-name prefix for generated cloud resources. Omit to let the manager generate one."},"ImportDeploymentRequest":{"oneOf":[{"$ref":"#/components/schemas/ForwardImportRequest"},{"$ref":"#/components/schemas/PersistImportedDeploymentRequest"}],"description":"Request schema for importing a deployment from resolved setup infrastructure"},"ForwardImportRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["forward"],"default":"forward"},"project":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user-session callers."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Required for user-session callers. Deployment-group tokens use their own group automatically.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager ID. If omitted, the first suitable manager for the source platform is used."}]},"source":{"$ref":"#/components/schemas/ImportSource"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["source"]},"ImportSource":{"type":"object","properties":{"deploymentName":{"type":"string","minLength":1,"description":"User-chosen deployment name. Must be unique within the deployment group; the manager returns 409 on collision."},"resourcePrefix":{"allOf":[{"$ref":"#/components/schemas/ResourcePrefix"},{"description":"Stable physical-name prefix used by the setup artifact."}]},"sourceKind":{"$ref":"#/components/schemas/ImportSourceKind"},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup source metadata needed to guide privileged teardown."}]},"releaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release that produced the setup artifact. Defaults to latest.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Cloud platform of the imported stack"},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"region":{"type":"string","description":"Region or location reported by the setup artifact"},"setupTarget":{"allOf":[{"$ref":"#/components/schemas/SetupTarget"},{"description":"Setup target this package was generated for"}]},"setupImportFormatVersion":{"$ref":"#/components/schemas/SetupImportFormatVersion"},"setupFingerprint":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprint"},{"description":"Setup compatibility fingerprint embedded in the package"}]},"setupFingerprintVersion":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintVersion"},{"description":"Setup fingerprint algorithm version embedded in the package"}]},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ImportedResource"},"minItems":1}},"required":["deploymentName","resourcePrefix","platform","region","setupTarget","setupImportFormatVersion","setupFingerprint","setupFingerprintVersion","stackSettings","resources"],"description":"Resolved setup import payload"},"ImportSourceKind":{"type":"string","enum":["cloudformation","terraform","helm"],"description":"Source label for observability only — does not affect import behavior."},"KubernetesBasePlatform":{"type":"string","enum":["aws","gcp","azure"],"description":"Base cloud platform for cloud-backed Kubernetes imports."},"SetupImportFormatVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup import payload format version embedded in the package"},"ImportedResource":{"type":"object","properties":{"id":{"type":"string","description":"Resource id from the active stack"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"importData":{"type":"object","additionalProperties":{"nullable":true},"description":"Resolved typed import payload"}},"required":["id","type","importData"]},"PersistImportedDeploymentRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["persist"]},"name":{"type":"string","minLength":1,"description":"Deployment name. Must be unique within the deployment group."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"stackState":{"nullable":true},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"runtimeMetadata":{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},"scheduleReconciliation":{"type":"boolean","default":false},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"default":"provisioning","description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"currentReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"setupMetadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"setupTarget":{"$ref":"#/components/schemas/SetupTarget"},"setupFingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"setupFingerprintVersion":{"$ref":"#/components/schemas/SetupFingerprintVersion"},"deploymentToken":{"type":"string"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["mode","name","deploymentGroupId","managerId","platform","stackSettings","runtimeMetadata","deploymentProtocolVersion","setupTarget","setupFingerprint","setupFingerprintVersion"]},"SetFirstPartyDeploymentInputsResponse":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"SetFirstPartyDeploymentInputsRequest":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["platform"]},"SetupRegistrationOperationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"status":{"$ref":"#/components/schemas/SetupRegistrationOperationStatus"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"physicalResourceId":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/SetupRegistrationOperationResult"},"error":{"type":"object","nullable":true,"properties":{"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["message","retryable"]}},"required":["id","action","sourceKind","status","deploymentId","physicalResourceId","result","error"]},"SetupRegistrationAction":{"type":"string","enum":["create","update","delete"]},"SetupRegistrationOperationStatus":{"type":"string","enum":["pending","processing","waiting-for-handoff","succeeded","failed","responding","responded"]},"SetupRegistrationOperationResult":{"type":"object","nullable":true,"properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deploymentToken":{"type":"string","nullable":true},"helmValues":{"type":"string","nullable":true}},"required":["deploymentId","deploymentToken","helmValues"]},"CreateSetupRegistrationOperationRequest":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"source":{"allOf":[{"$ref":"#/components/schemas/ImportSource"}],"nullable":true},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":512},"cloudFormation":{"$ref":"#/components/schemas/SetupRegistrationCloudFormationTarget"}},"required":["action","sourceKind"],"additionalProperties":false},"SetupRegistrationCloudFormationTarget":{"type":"object","nullable":true,"properties":{"stackId":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"logicalResourceId":{"type":"string","minLength":1},"responseUrl":{"type":"string","format":"uri"},"physicalResourceId":{"type":"string","nullable":true,"minLength":1},"serviceTimeoutSeconds":{"type":"integer","minimum":60,"maximum":7200,"default":3300}},"required":["stackId","requestId","logicalResourceId","responseUrl"],"additionalProperties":false},"DeleteDeploymentResponse":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]},"message":{"type":"string"}},"required":["action","message"]},"DeleteDeploymentRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]}},"required":["action"]},"PinReleaseRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release ID to pin the deployment to. Set to null to unpin and use active release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for pinning/unpinning deployment release"},"DeploymentInputsResponse":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"description":"Current non-secret input values. Secret values are never returned."},"providedInputIds":{"type":"array","items":{"type":"string"},"description":"Input IDs that currently have a value, including redacted secrets."}},"required":["inputs","values","providedInputIds"]},"UpdateDeploymentInputsResponse":{"allOf":[{"$ref":"#/components/schemas/DeploymentInputsResponse"},{"type":"object","properties":{"runtimeUpdateRequested":{"type":"boolean"}},"required":["runtimeUpdateRequested"]}]},"UpdateDeploymentInputsRequest":{"type":"object","properties":{"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"clearInputIds":{"type":"array","items":{"type":"string"},"default":[]}},"additionalProperties":false},"UpdateDeploymentEnvironmentVariablesRequest":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"type":{"type":"string","enum":["plain","secret"],"description":"Variable type"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources)"}},"required":["name","value","type"]},"description":"Environment variables for the deployment"}},"required":["variables"],"additionalProperties":false,"description":"Request schema for updating deployment environment variables"},"CreateDeploymentTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The generated deployment token (only shown once)"},"deploymentId":{"type":"string","description":"The deployment ID that this token is scoped to"}},"required":["token","deploymentId"]},"CreateDeploymentTokenRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128,"description":"Optional description for the deployment token"},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiration date for the deployment token"}},"required":["description"]},"CreateManagerResponse":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["pending"]},"setupToken":{"type":"string"},"setupTokenId":{"type":"string"},"deploymentLink":{"type":"string"},"setupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["plain","secret"]},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["name","type","targetResources"]}}},"required":["metadata","policy","environmentVariables"]},"setup":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["cloudformation"]},"deploymentPortalUrl":{"type":"string"},"launchUrl":{"type":"string"},"templateUrl":{"type":"string"},"stackName":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","launchUrl","templateUrl","stackName","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["google-oauth"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"oauthStartUrl":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","oauthStartUrl","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["terraform"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"providerSource":{"type":"string"},"moduleSource":{"type":"string"},"moduleVersion":{"type":"string"},"moduleInputs":{"type":"object","additionalProperties":{"type":"string"}},"mainTf":{"type":"string"},"tfvars":{"type":"string"},"commands":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","providerSource","moduleSource","moduleInputs","mainTf","tfvars","commands","stackSettings"]}]}},"required":["managerId","setupStatus","setupToken","setupTokenId","deploymentLink","setupConfig","setup"]},"NewManagerRequest":{"type":"object","properties":{"name":{"type":"string"},"cloud":{"$ref":"#/components/schemas/PrivateManagerCloud"},"region":{"type":"string","minLength":1,"maxLength":64,"description":"Cloud region for the manager."},"setupMethod":{"$ref":"#/components/schemas/PrivateManagerSetupMethod"},"network":{"type":"string","enum":["create","default"],"description":"Optional network mode for the private-manager setup. Defaults to create for production isolation; default uses the provider default network for faster dev/test setup."},"otlpConfig":{"type":"object","properties":{"logsEndpoint":{"type":"string","format":"uri","description":"External OTLP logs endpoint (e.g. https://api.axiom.co/v1/logs)"},"logsAuthHeader":{"type":"string","description":"Auth header in 'key=value,...' format (e.g. 'authorization=Bearer ,x-axiom-dataset=')"}},"required":["logsEndpoint","logsAuthHeader"],"description":"Optional external OTLP config for forwarding logs to Axiom, Datadog, etc. Falls back to built-in DeepStore when not set."}},"required":["name","cloud","region"]},"PrivateManagerCloud":{"type":"string","enum":["aws","gcp","azure"],"description":"Cloud where the private manager will be deployed."},"PrivateManagerSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform"],"description":"Optional setup method. Defaults to cloudformation for AWS, google-oauth for GCP, and terraform for Azure."},"ManagerRetryResponse":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/CreateManagerResponse"},{"type":"object","properties":{"mode":{"type":"string","enum":["setup"]}},"required":["mode"]}]},{"$ref":"#/components/schemas/ManagerRetryDeploymentResponse"}]},"ManagerRetryDeploymentResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["deployment"]},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["provisioning"]},"deploymentId":{"type":"string"},"message":{"type":"string"}},"required":["mode","managerId","setupStatus","deploymentId","message"]},"Manager":{"type":"object","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for the manager"}]},"name":{"type":"string","description":"Display name of the manager"},"targets":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms this manager can handle"},"cloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where this private manager is deployed"},"region":{"type":"string","nullable":true,"description":"Cloud region selected for this private manager"},"setupStatus":{"type":"string","nullable":true,"enum":["pending","provisioning","active","failed","deleting","deleted",null],"description":"Private manager setup lifecycle status"},"url":{"type":"string","nullable":true,"format":"uri","description":"Manager URL (self-reported via heartbeat). DeepStore endpoints are exposed through this URL (e.g., {url}/v1/logs)"},"managementConfigs":{"$ref":"#/components/schemas/ManagerManagementConfigs"},"isSystem":{"type":"boolean","description":"Whether this is a system manager (Alien-hosted)"},"workspaceId":{"type":"string","description":"The workspace ID (for system managers, this is ALIEN_WORKSPACE_ID)"},"status":{"$ref":"#/components/schemas/ManagerStatus"},"version":{"type":"string","nullable":true,"description":"Manager version (self-reported via heartbeat)"},"metrics":{"type":"object","nullable":true,"properties":{"activeDeployments":{"type":"number","description":"Number of active deployments"},"pendingDeployments":{"type":"number","description":"Number of pending deployments"},"memoryUsageMb":{"type":"number","description":"Memory usage in megabytes"},"cpuUsagePercent":{"type":"number","description":"CPU usage percentage"}},"description":"Runtime metrics (self-reported via heartbeat)"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the manager"},"logsDatabaseId":{"type":"string","nullable":true,"description":"ID of the logs database associated with this manager"},"managedDeploymentCount":{"type":"integer","minimum":0,"description":"Number of deployments currently being managed by this manager"},"defaultProjectCount":{"type":"integer","minimum":0,"description":"Number of projects that select this manager as a default manager"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the manager was created"}},"required":["id","name","targets","managementConfigs","isSystem","workspaceId","status","managedDeploymentCount","defaultProjectCount","createdAt"],"description":"Manager schema"},"ManagerManagementConfigs":{"type":"object","properties":{"aws":{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"},"platform":{"type":"string","enum":["aws"]}},"required":["managingRoleArn","platform"]},"gcp":{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"},"platform":{"type":"string","enum":["gcp"]}},"required":["serviceAccountEmail","platform"]},"azure":{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."},"platform":{"type":"string","enum":["azure"]}},"required":["managingTenantId","oidcIssuer","oidcSubject","platform"]},"kubernetes":{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}},"description":"Per-platform management configurations for cross-account access (self-reported via heartbeat)"},"ManagerStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"],"description":"Current health status"},"ManagerDomainBindingResponse":{"type":"object","properties":{"managerDomainBinding":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["managerDomainBinding"]},"UpdateManagerDomainBinding":{"type":"object","properties":{"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"}},"additionalProperties":false},"UpdateManagerRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Optional release ID to update to. If not provided, the active release will be chosen","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for updating a manager to a new release"},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"debugSessionId":{"type":"string","nullable":true,"pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"data":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["LoadingConfiguration"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["Finished"]}},"required":["type"]},{"type":"object","properties":{"stack":{"type":"string","description":"Name of the stack being built"},"type":{"type":"string","enum":["BuildingStack"]}},"required":["stack","type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform being targeted"},"stack":{"type":"string","description":"Name of the stack being checked"},"type":{"type":"string","enum":["RunningPreflights"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"targetTriple":{"type":"string","description":"Target triple for the runtime"},"type":{"type":"string","enum":["DownloadingAlienRuntime"]},"url":{"type":"string","description":"URL being downloaded from"}},"required":["targetTriple","type","url"]},{"type":"object","properties":{"relatedResources":{"type":"array","items":{"type":"string"},"description":"All resource names sharing this build (for deduped container groups)"},"resourceName":{"type":"string","description":"Name of the resource being built"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["BuildingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being built"},"type":{"type":"string","enum":["BuildingImage"]}},"required":["image","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being pushed"},"progress":{"oneOf":[{"type":"object","properties":{"bytesUploaded":{"type":"integer","minimum":0,"description":"Bytes uploaded so far"},"layersUploaded":{"type":"integer","minimum":0,"description":"Number of layers uploaded so far"},"operation":{"type":"string","description":"Current operation being performed"},"totalBytes":{"type":"integer","minimum":0,"description":"Total bytes to upload"},"totalLayers":{"type":"integer","minimum":0,"description":"Total number of layers to upload"}},"required":["bytesUploaded","layersUploaded","operation","totalBytes","totalLayers"],"description":"Progress information for image push operations"},{"nullable":true}]},"type":{"type":"string","enum":["PushingImage"]}},"required":["image","type"]},{"type":"object","properties":{"destination":{"type":"string","nullable":true,"description":"Human-readable destination for pushed images"},"platform":{"type":"string","description":"Target platform"},"stack":{"type":"string","description":"Name of the stack being pushed"},"type":{"type":"string","enum":["PushingStack"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"resourceName":{"type":"string","description":"Name of the resource being pushed"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["PushingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"project":{"type":"string","description":"Project name"},"type":{"type":"string","enum":["CreatingRelease"]}},"required":["project","type"]},{"type":"object","properties":{"language":{"type":"string","description":"Language being compiled (rust, typescript, etc.)"},"progress":{"type":"string","nullable":true,"description":"Current progress/status line from the build output"},"type":{"type":"string","enum":["CompilingCode"]}},"required":["language","type"]},{"type":"object","properties":{"nextState":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},"suggestedDelayMs":{"type":"integer","nullable":true,"minimum":0,"description":"An suggested duration to wait before executing the next step."},"type":{"type":"string","enum":["StackStep"]}},"required":["nextState","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["GeneratingCloudFormationTemplate"]}},"required":["type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform for which the template is being generated"},"type":{"type":"string","enum":["GeneratingTemplate"]}},"required":["platform","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being provisioned"},"releaseId":{"type":"string","description":"ID of the release being deployed to the agent"},"type":{"type":"string","enum":["ProvisioningAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being updated"},"releaseId":{"type":"string","description":"ID of the new release being deployed to the agent"},"type":{"type":"string","enum":["UpdatingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being deleted"},"releaseId":{"type":"string","description":"ID of the release that was running on the agent"},"type":{"type":"string","enum":["DeletingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being debugged"},"debugSessionId":{"type":"string","description":"ID of the debug session"},"type":{"type":"string","enum":["DebuggingAgent"]}},"required":["agentId","debugSessionId","type"]},{"type":"object","properties":{"strategyName":{"type":"string","description":"Name of the deployment strategy being used"},"type":{"type":"string","enum":["PreparingEnvironment"]}},"required":["strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being deployed"},"type":{"type":"string","enum":["DeployingStack"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being tested"},"type":{"type":"string","enum":["RunningTestWorker"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpStack"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpEnvironment"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"platformName":{"type":"string","description":"Name of the platform (e.g., \"AWS\", \"GCP\")"},"type":{"type":"string","enum":["SettingUpPlatformContext"]}},"required":["platformName","type"]},{"type":"object","properties":{"repositoryName":{"type":"string","description":"Name of the docker repository"},"type":{"type":"string","enum":["EnsuringDockerRepository"]}},"required":["repositoryName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeployingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"roleArn":{"type":"string","description":"ARN of the role to assume"},"type":{"type":"string","enum":["AssumingRole"]}},"required":["roleArn","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"type":{"type":"string","enum":["ImportingStackStateFromCloudFormation"]}},"required":["cfnStackName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeletingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"bucketNames":{"type":"array","items":{"type":"string"},"description":"Names of the S3 buckets being emptied"},"type":{"type":"string","enum":["EmptyingBuckets"]}},"required":["bucketNames","type"]},{"type":"object","properties":{"deploymentGroupId":{"type":"string","description":"ID of the deployment group this slot belongs to"},"deploymentId":{"type":"string","description":"ID of the deployment that was created"},"releaseId":{"type":"string","nullable":true,"description":"Initial release the slot was created with, if any"},"type":{"type":"string","enum":["DeploymentCreated"]}},"required":["deploymentGroupId","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousReleaseId":{"type":"string","nullable":true,"description":"ID of the release that was previously live, if any"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentReleased"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release the platform was trying to deploy, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"phase":{"type":"string","enum":["preflights","provisioning","updating","deleting"],"description":"Phase of a deployment at which a failure occurred.\n\nDerived from the source deployment status: `preflights-failed` →\n`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →\n`Updating`, `delete-failed` → `Deleting`.\n`refresh-failed` is modelled separately via `DeploymentDegraded`."},"type":{"type":"string","enum":["DeploymentFailed"]}},"required":["deploymentId","error","phase","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"type":{"type":"string","enum":["DeploymentDegraded"]}},"required":["deploymentId","error","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentRecovered"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment that was deleted"},"type":{"type":"string","enum":["DeploymentDeleted"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release that the failed attempt was targeting, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"previousError":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"type":{"type":"string","enum":["DeploymentRetryRequested"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release being redeployed"},"type":{"type":"string","enum":["DeploymentRedeployRequested"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"pinnedReleaseId":{"type":"string","description":"ID of the release that is now pinned"},"previousPinnedReleaseId":{"type":"string","nullable":true,"description":"ID of the previously pinned release, if any"},"type":{"type":"string","enum":["DeploymentReleasePinned"]}},"required":["deploymentId","pinnedReleaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousPinnedReleaseId":{"type":"string","description":"ID of the release that was previously pinned"},"type":{"type":"string","enum":["DeploymentReleaseUnpinned"]}},"required":["deploymentId","previousPinnedReleaseId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"changedKeys":{"type":"array","items":{"type":"string"},"description":"Names of the environment variables that changed (added, removed, or modified)"},"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentEnvironmentUpdated"]}},"required":["changedKeys","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentDeletionRequested"]}},"required":["deploymentId","type"]}]},"state":{"oneOf":[{"type":"object","properties":{"failed":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]}},"description":"Event failed with an error"}},"required":["failed"]},{"type":"string","enum":["none"]},{"type":"string","enum":["started"]},{"type":"string","enum":["success"]}],"description":"Represents the state of an event"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","data","state","projectId","createdAt","workspaceId"]},"GenerateManagerTokenResponse":{"type":"object","properties":{"accessToken":{"type":"string","description":"Platform JWT for authenticating with the manager"},"expiresIn":{"type":"number","nullable":true,"description":"Token lifetime in seconds"},"tokenType":{"type":"string","enum":["Bearer"]},"managerUrl":{"type":"string","description":"Manager URL for direct access"},"databaseId":{"type":"string","nullable":true,"description":"Log database ID (null if logs not configured)"},"controlPlaneUrl":{"type":"string","nullable":true,"description":"Log control plane URL (null if logs not configured)"}},"required":["accessToken","expiresIn","tokenType","managerUrl","databaseId","controlPlaneUrl"]},"GenerateManagerTokenRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to scope token access to."}},"required":["project"]},"ResolveManagerGcpOAuthProviderResponse":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId","clientSecret"]}]},"ResolveManagerGcpOAuthProviderRequest":{"type":"object","properties":{"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group bearer token whose project-level OAuth provider should be resolved."},"returnOrigin":{"type":"string","format":"uri","description":"Browser origin that will receive the Google OAuth callback result. Must be a first-party dashboard origin or the active portal origin for the deployment group's project."}},"required":["deploymentGroupToken"]},"ManagerHeartbeatResponse":{"type":"object","properties":{"acknowledged":{"type":"boolean"},"timestamp":{"type":"string"}},"required":["acknowledged","timestamp"]},"ManagerHeartbeatRequest":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Current health status"},"version":{"type":"string","description":"Manager version"},"url":{"type":"string","format":"uri","description":"Manager public URL (for accessing DeepStore endpoints)"},"managementConfigs":{"allOf":[{"$ref":"#/components/schemas/ManagerManagementConfigs"},{"description":"Per-platform management configurations for cross-account access"}]},"metrics":{"type":"object","properties":{"activeDeployments":{"type":"number"},"pendingDeployments":{"type":"number"},"memoryUsageMb":{"type":"number"},"cpuUsagePercent":{"type":"number"}},"description":"Optional runtime metrics"}},"required":["status","url","managementConfigs"]},"ManagerDeployment":{"type":"object","properties":{"platform":{"type":"string","description":"Platform of the internal deployment"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status of the internal deployment"},"deploymentId":{"type":"string","description":"Internal deployment ID"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Currently deployed private manager release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Target private manager release for an in-progress update","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"error":{"nullable":true,"description":"Latest provision / upgrade / delete error"},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type"},"status":{"type":"string","description":"Resource status"},"outputs":{"type":"object","additionalProperties":{"nullable":true},"description":"Resource outputs"}},"required":["type","status"]},"description":"Simplified stack state resources"},"environmentInfo":{"nullable":true,"description":"Manager environment info"}},"required":["platform","status","deploymentId","resources"]},"PrepareOperatorManifestPackageResponse":{"type":"object","properties":{"package":{"$ref":"#/components/schemas/Package"}},"required":["package"]},"PrepareOperatorManifestPackageRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}},"required":["project"],"additionalProperties":false},"RenderOperatorManifestResponse":{"type":"object","properties":{"manifest":{"type":"string","description":"Rendered multi-document Kubernetes manifest"},"applyCommand":{"type":"string","description":"kubectl command for applying the manifest from a file"},"filename":{"type":"string","description":"Suggested local filename"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL embedded in the manifest"},"imagePending":{"type":"boolean","description":"True when the operator image is still building. The manifest contains a placeholder image () and must not be applied yet — re-render once the operator-image package is ready to get the real image."}},"required":["manifest","applyCommand","filename","managerUrl","imagePending"]},"RenderOperatorManifestRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"format":{"type":"string","enum":["raw","helm"],"default":"raw","description":"raw: a kubectl-applyable manifest for one cluster. helm: a paste-into-your-chart template whose namespace and environment name come from Helm at install time."},"environmentName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Per-environment identity. Required for raw output, ignored for helm.","example":"my-app"},"namespace":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$","description":"Namespace to observe and install into. Omit for helm to use the release namespace."},"scope":{"type":"string","enum":["namespace","cluster"],"default":"namespace","description":"namespace: a namespaced Role that manages the install namespace. cluster: a ClusterRole that manages every namespace."},"labelSelector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional Kubernetes label selector narrowing what is managed, applied within the scope."},"permission":{"type":"string","enum":["observe"],"default":"observe","description":"Operator permission tier"},"operatorImagePackageId":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Ready operator-image package to use for the Operator image. If omitted, the latest ready operator-image package for the project is used.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group token embedded in the operator Secret"},"logCollector":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"description":"Enable the node log collector DaemonSet for raw pod logs."}},"required":["project","deploymentGroupToken"],"additionalProperties":false},"APIKey":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["id","email","image"],"description":"User information associated with the API key"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig","createdByUser"],"description":"API key information"},"APIKeyDeploymentSetupConfig":{"type":"object","nullable":true,"properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDeploymentSetupEnvironmentVariable"}}},"required":["metadata","policy","environmentVariables"]},"APIKeyDeploymentSetupEnvironmentVariable":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]},"CreateAPIKeyResponse":{"type":"object","properties":{"apiKey":{"type":"string","description":"The generated API key value (only shown once)"},"keyInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig"]}},"required":["apiKey","keyInfo"],"description":"Response containing the new API key and its metadata"},"CreateAPIKeyRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"scope":{"$ref":"#/components/schemas/Scope"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"required":["description","scope","expiresAt"],"description":"Request schema for creating a new API key"},"Scope":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceScope"},{"$ref":"#/components/schemas/ProjectScope"},{"$ref":"#/components/schemas/DeploymentScope"},{"$ref":"#/components/schemas/DeploymentGroupScope"},{"$ref":"#/components/schemas/ManagerScope"}],"discriminator":{"propertyName":"type","mapping":{"workspace":"#/components/schemas/WorkspaceScope","project":"#/components/schemas/ProjectScope","deployment":"#/components/schemas/DeploymentScope","deployment-group":"#/components/schemas/DeploymentGroupScope","manager":"#/components/schemas/ManagerScope"}},"description":"Scope and role configuration for service accounts"},"WorkspaceScope":{"type":"object","properties":{"type":{"type":"string","enum":["workspace"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["type","role"],"description":"Workspace-scoped configuration"},"ProjectScope":{"type":"object","properties":{"type":{"type":"string","enum":["project"]},"projectId":{"type":"string","description":"ID of the project this is scoped to"},"role":{"$ref":"#/components/schemas/ProjectRole"}},"required":["type","projectId","role"],"description":"Project-scoped configuration"},"DeploymentScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"deploymentId":{"type":"string","description":"ID of the deployment this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"},"role":{"$ref":"#/components/schemas/DeploymentRole"}},"required":["type","deploymentId","projectId","role"],"description":"Deployment-scoped configuration"},"DeploymentGroupScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"]},"deploymentGroupId":{"type":"string","description":"ID of the deployment group this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"},"role":{"$ref":"#/components/schemas/DeploymentGroupRole"}},"required":["type","deploymentGroupId","projectId","role"],"description":"Deployment group-scoped configuration"},"ManagerScope":{"type":"object","properties":{"type":{"type":"string","enum":["manager"]},"managerId":{"type":"string","description":"ID of the manager this is scoped to"},"role":{"$ref":"#/components/schemas/ManagerRole"}},"required":["type","managerId","role"],"description":"Manager-scoped configuration"},"UpdateAPIKeyRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"deploymentSetupConfig":{"$ref":"#/components/schemas/UpdateDeploymentSetupPolicy"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"description":"Request schema for updating an API key"},"UpdateDeploymentSetupPolicy":{"type":"object","properties":{"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"}},"required":["policy"],"description":"Editable part of a deployment link's setup config. Locked env vars and input values are preserved."},"DeleteAPIKeysRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"minItems":1}},"required":["ids"]},"DomainWithUsage":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DomainEndpoint"}},"usage":{"type":"object","properties":{"deploymentUrlProjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"portalBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true},"hostname":{"type":"string"}},"required":["id","projectId","projectName","hostname"]}},"packageDomains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]}},"managerBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"managerId":{"type":"string"},"managerName":{"type":"string"},"hostname":{"type":"string"}},"required":["id","managerId","managerName","hostname"]}}},"required":["deploymentUrlProjects","portalBindings","packageDomains","managerBindings"]}},"required":["endpoints","usage"]}]},"Domain":{"type":"object","properties":{"id":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domain":{"type":"string"},"isSystem":{"type":"boolean"},"claimToken":{"type":"string"},"hostedZoneId":{"type":"string","nullable":true},"nameServers":{"type":"array","nullable":true,"items":{"type":"string"}},"status":{"type":"string","enum":["pending-zone-creation","pending-verification","verified","lost-verification","failed","deleting"]},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"verifiedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","workspaceId","domain","isSystem","claimToken","status","createdAt","updatedAt"]},"EventListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"releaseCreatedAt":{"type":"string","format":"date-time","description":"createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used"}}}]},"ListMachinesJoinTokensResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"}}},"required":["tokens"]},"MachinesJoinTokenSummary":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"maxJoins":{"type":"integer","nullable":true},"joinCount":{"type":"integer"},"lastUsedAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true}},"required":["id","createdAt","createdBy","joinCount"]},"CreateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RotateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RevokeMachinesJoinTokenResponse":{"type":"object","properties":{"tokenId":{"type":"string"},"revoked":{"type":"boolean"}},"required":["tokenId","revoked"]},"ListMachinesInventoryResponse":{"type":"object","properties":{"machines":{"type":"array","items":{"$ref":"#/components/schemas/MachinesInventoryItem"}}},"required":["machines"]},"MachinesInventoryItem":{"type":"object","properties":{"machineId":{"type":"string"},"status":{"type":"string"},"capacityGroup":{"type":"string"},"zone":{"type":"string"},"cpu":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"memory":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"storage":{"allOf":[{"$ref":"#/components/schemas/MachinesCapacityMetric"}],"nullable":true},"drainBlockers":{"type":"array","items":{"$ref":"#/components/schemas/MachinesDrainBlocker"}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"overlayIp":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"horizondVersion":{"type":"string","nullable":true},"localOverrides":{"type":"array","items":{"$ref":"#/components/schemas/MachinesLocalOverrideObservation"}},"localOverridesObservedAt":{"type":"string","nullable":true},"replicaCount":{"type":"integer"}},"required":["machineId","status","capacityGroup","zone","cpu","memory","drainBlockers","drainForce","lastHeartbeat","localOverrides","replicaCount"]},"MachinesCapacityMetric":{"type":"object","properties":{"allocated":{"type":"number"},"systemReserve":{"type":"number"},"total":{"type":"number"}},"required":["allocated","systemReserve","total"]},"MachinesDrainBlocker":{"type":"object","properties":{"reason":{"type":"string"},"workloadId":{"type":"string","nullable":true},"workloadName":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true},"schedulingMode":{"type":"string","nullable":true},"state":{"type":"string","nullable":true}},"required":["reason"]},"MachinesLocalOverrideObservation":{"type":"object","properties":{"activeDigest":{"type":"string","nullable":true},"actor":{"type":"string","nullable":true},"baseAssignmentHash":{"type":"string"},"baseDigest":{"type":"string","nullable":true},"candidateDigest":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"failureCategory":{"type":"string","nullable":true},"fallbackDigest":{"type":"string","nullable":true},"forcedStop":{"type":"boolean","nullable":true},"healthySince":{"type":"string","nullable":true},"incidentId":{"type":"string","nullable":true},"lifecycle":{"type":"string"},"phaseStartedAt":{"type":"string","nullable":true},"replicaId":{"type":"string"},"workloadName":{"type":"string"}},"required":["baseAssignmentHash","lifecycle","replicaId","workloadName"]},"CancelMachinesMachineDrainResponse":{"type":"object","properties":{"machineId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["machineId","cancelled"]},"DrainMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"requested":{"type":"boolean"}},"required":["machineId","requested"]},"DrainMachinesMachineRequest":{"type":"object","properties":{"deadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"force":{"type":"boolean"}}},"RemoveMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"removed":{"type":"boolean"}},"required":["machineId","removed"]},"CommandListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Command"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/CommandDeploymentInfo"},"project":{"$ref":"#/components/schemas/CommandProjectInfo"}}}]},"CommandDeploymentInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"$ref":"#/components/schemas/CommandDeploymentGroupInfo"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"managerId":{"type":"string","description":"Manager ID for obtaining access tokens"},"managerUrl":{"type":"string","nullable":true,"format":"uri","description":"URL of the manager for direct payload access"},"managerName":{"type":"string","nullable":true,"description":"Human-readable name of the manager"},"managerIsSystem":{"type":"boolean","nullable":true,"description":"Whether the manager is Alien-hosted (system)"}},"required":["id","name","managerId"]},"CommandDeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CommandProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string"}},"required":["id","name"]},"Command":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","description":"Command name (e.g., 'analyze-repository', 'sync-data')"},"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Command states in the Commands protocol lifecycle"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Delivery mode for this command (push/pull), derived from the target at creation time"},"target":{"type":"object","nullable":true,"properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to; null on commands created before target routing"},"attempt":{"type":"number","nullable":true,"description":"Current attempt number"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","nullable":true,"description":"Size of command params in bytes"},"responseSizeBytes":{"type":"number","nullable":true,"description":"Size of command response in bytes"},"createdAt":{"type":"string","format":"date-time","description":"When the command was created"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command was dispatched to the deployment"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command completed"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if command failed"},"result":{"nullable":true,"description":"Decoded command result when available"}},"required":["id","deploymentId","projectId","workspaceId","name","state","deploymentModel","target","attempt","deadline","requestSizeBytes","responseSizeBytes","createdAt","dispatchedAt","completedAt","error"]},"ListCommandNamesResponse":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ListCommandDeploymentsResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name"]}}},"required":["deployments"]},"CreateCommandResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"projectId":{"type":"string","description":"Project ID (for manager to use in routing)"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"How to dispatch the command"},"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to"},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How the command is delivered to its target"}},"required":["id","projectId","deploymentModel","target","deliveryMode"]},"CreateCommandRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Target deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Command name (e.g., 'analyze-repository')"},"params":{"nullable":true,"description":"Command parameters for public invocation"},"target":{"type":"string","maxLength":255,"description":"Resource id the command is addressed to. Required when the deployment has more than one command-capable resource."},"initialState":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Initial state (PENDING_UPLOAD if params require upload, PENDING if inline)"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Size of command params in bytes"}},"required":["deploymentId","name"]},"ResolvedCommandTarget":{"type":"object","properties":{"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Identifies the specific resource a command is addressed to."},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How a command is delivered to its target resource.\n\nThis is a Commands-protocol-specific concept and is intentionally distinct\nfrom `DeploymentModel` (see `stack_settings.rs`), which governs the\ninfrastructure-level push/pull wiring for a deployment. Serialized\nlowercase for consistency with `CommandTargetType`."}},"required":["target","deliveryMode"]},"UpdateCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"New command state"},"attempt":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Current attempt number"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command was dispatched"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}}},"DispatchCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"DispatchCommandRequest":{"type":"object","properties":{"dispatchedAt":{"type":"string","format":"date-time","description":"When the command was dispatched"}},"required":["dispatchedAt"]},"CompleteCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"CompleteCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["SUCCEEDED","FAILED","EXPIRED"],"description":"Terminal state to transition to"},"completedAt":{"type":"string","format":"date-time","description":"When the command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}},"required":["state","completedAt"]},"IncrementCommandAttemptResponse":{"type":"object","properties":{"attempt":{"type":"integer","description":"The attempt number after the increment"}},"required":["attempt"]},"DebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"DebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"owner":{"type":"string","nullable":true,"maxLength":128},"state":{"$ref":"#/components/schemas/DebugSessionState"},"mode":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"provider":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"presignedUrls":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DebugPackagePresignedURLs"}},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","state","mode","presignedUrls","createdAt","expiresAt","deploymentId","projectId","workspaceId"]},"DebugSessionState":{"type":"string","enum":["pending","running","stopping","stopped","expired","failed"]},"DebugPackagePresignedURLs":{"type":"object","properties":{"readUrl":{"type":"string","maxLength":2048,"format":"uri"},"writeUrl":{"type":"string","maxLength":2048,"format":"uri"}},"required":["readUrl","writeUrl"]},"CreateDebugSessionRequest":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Override the generated id. Manager passes the registry session id so logs correlate.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"owner":{"type":"string","nullable":true,"maxLength":128},"expiresAt":{"type":"string","format":"date-time"},"state":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Initial state. Defaults to 'pending'."}]}},"required":["deploymentId","expiresAt"]},"UpdateDebugSessionRequest":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/DebugSessionState"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"expiresAt":{"type":"string","format":"date-time"}}},"DeploymentInfo":{"type":"object","properties":{"tokenType":{"type":"string","enum":["deployment","deployment-group"],"description":"Type of token used to authenticate this request"},"deployment":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"required":["name","platform"],"description":"Deployment details (present when using a deployment-scoped token)"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"pinnedSubdomain":{"type":"string","nullable":true}},"required":["id","name","pinnedSubdomain"],"description":"Deployment group details (present when using a deployment-group token)"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatarUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name"]},"project":{"type":"object","properties":{"name":{"type":"string"},"portal":{"type":"object","properties":{"appearance":{"$ref":"#/components/schemas/DeploymentPortalAppearance"}},"required":["appearance"]},"stackSummary":{"type":"object","nullable":true,"properties":{"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms supported by the active release"},"requiresNetwork":{"type":"boolean","description":"Whether the stack contains resources that require cloud VPC networking"},"resourceCounts":{"type":"object","properties":{"workers":{"type":"integer","minimum":0},"containers":{"type":"integer","minimum":0},"publicHttpsEndpoints":{"type":"integer","minimum":0,"description":"Resources that declare managed public HTTPS endpoint setup"},"externalInfra":{"type":"integer","minimum":0,"description":"Storage, queue, KV, vault, database, or cache resources that Kubernetes needs Terraform to provision"},"total":{"type":"integer","minimum":0}},"required":["workers","containers","publicHttpsEndpoints","externalInfra","total"]},"publicEndpoints":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"endpointName":{"type":"string"},"hostLabel":{"type":"string"},"wildcardSubdomains":{"type":"boolean"}},"required":["resourceId","endpointName","hostLabel","wildcardSubdomains"]},"description":"Public endpoints declared by the active release stack"}},"required":["platforms","requiresNetwork","resourceCounts","publicEndpoints"]},"generatedDomain":{"type":"object","nullable":true,"properties":{"domain":{"type":"string"},"isSystem":{"type":"boolean"}},"required":["domain","isSystem"],"description":"Parent domain for generated deployment URLs. Chosen public subdomains are only allowed when isSystem is false."}},"required":["name","portal"]},"packages":{"type":"object","properties":{"ready":{"type":"boolean","description":"True if all enabled packages are ready for deployment"},"cli":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"commandName":{"type":"string","description":"CLI command name to use in install instructions"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},"error":{"nullable":true},"installScripts":{"type":"object","properties":{"windows":{"type":"string","format":"uri"},"mac":{"type":"string","format":"uri"},"linux":{"type":"string","format":"uri"}},"required":["windows","mac","linux"],"description":"Install script URLs for each OS"}},"required":["status","commandName","installScripts"]},"cloudformation":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},"error":{"nullable":true},"mode":{"type":"string","enum":["auto","outputs"]},"launchUrl":{"type":"string","format":"uri","description":"CloudFormation launch URL"},"outputsSchema":{"nullable":true}},"required":["status","mode","launchUrl"]},"terraform":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},"error":{"nullable":true},"providerSource":{"type":"string","description":"Terraform provider source (without https://)"},"moduleSources":{"type":"object","additionalProperties":{"type":"string"},"description":"Terraform module sources by target"},"moduleVersion":{"type":"string"},"managerUrls":{"type":"object","additionalProperties":{"type":"string"},"description":"Manager URLs by Terraform target"}},"required":["status","providerSource","moduleSources","managerUrls"]},"helm":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},"error":{"nullable":true},"chartRef":{"type":"string","description":"OCI chart reference"},"managerFetchExample":{"type":"string"},"localImportExample":{"type":"string"}},"required":["status","chartRef"]}},"required":["ready"]},"installContext":{"type":"object","properties":{"targets":{"type":"object","additionalProperties":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managerUrl":{"type":"string","format":"uri"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"awsManagingAccountId":{"type":"string"}},"required":["platform","managerUrl"]},"description":"Deployment-session install context by Terraform/installer target"}},"required":["targets"]},"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"},"setupConfig":{"$ref":"#/components/schemas/DeploymentInfoSetupConfig"},"readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ready","notReady","unknown"]},"checks":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["passed","failed","warning","unknown"]},"message":{"type":"string"},"checkedAt":{"type":"string"}},"required":["code","status","message","checkedAt"]}}},"required":["status","checks"]}},"required":["tokenType","workspace","project","packages","installContext","supportedRegions"]},"DeploymentPortalAppearance":{"type":"object","properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}}},"SupportedCloudRegions":{"type":"object","properties":{"aws":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by this Alien environment."},"gcp":{"type":"array","items":{"type":"string"},"description":"GCP regions supported by this Alien environment."},"azure":{"type":"array","items":{"type":"string"},"description":"Azure locations supported by this Alien environment."}},"required":["aws","gcp","azure"]},"DeploymentInfoSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]}},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"inputValues":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedStackInputSummary"}}},"required":["metadata","policy","environmentVariables"]},"ResolvedStackInputSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"]}},"required":{"type":"boolean"},"secret":{"type":"boolean"},"provided":{"type":"boolean"}},"required":["id","label","providedBy","required","secret","provided"]},"DeploymentComputePlan":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"poolId":{"type":"string"},"workloads":{"type":"array","items":{"type":"string"}},"requirements":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"scale":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"machines":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","machines"]},{"type":"object","properties":{"type":{"type":"string","enum":["autoscale"]},"min":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]},"max":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","min","max"]}]},"selected":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"recommended":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"machines":{"type":"array","items":{"type":"object","properties":{"machine":{"type":"string"},"profile":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"recommended":{"type":"boolean"}},"required":["machine","profile","recommended"]}},"errors":{"type":"array","items":{"type":"string"}}},"required":["poolId","workloads","requirements","scale","selected","recommended","machines"]}}},"required":["pools"]},"PreparedDeploymentStack":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"setup":{"$ref":"#/components/schemas/SetupFingerprintInfo"}},"required":["platform","stack","setup"]},"SlackInstallUrlResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"SlackIntegrationStatus":{"type":"object","properties":{"connected":{"type":"boolean"},"slackTeamId":{"type":"string","nullable":true},"slackTeamName":{"type":"string","nullable":true},"installedByUserId":{"type":"string","nullable":true},"installedAt":{"type":"string","nullable":true},"notificationChannelId":{"type":"string","nullable":true}},"required":["connected","slackTeamId","slackTeamName","installedByUserId","installedAt","notificationChannelId"]},"SlackChannelsResponse":{"type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}}},"required":["channels"]},"SlackChannel":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isMember":{"type":"boolean"}},"required":["id","name","isMember"]},"SlackNotificationChannelResponse":{"type":"object","properties":{"notificationChannelId":{"type":"string","nullable":true},"warning":{"type":"string","nullable":true}},"required":["notificationChannelId","warning"]},"SlackNotificationChannelRequest":{"type":"object","properties":{"channelId":{"type":"string","nullable":true}},"required":["channelId"]},"AgentSessionListResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionListItem"}}},"required":["sessions"]},"AgentSessionListItem":{"type":"object","properties":{"id":{"type":"string"},"triggerType":{"type":"string"},"subjectId":{"type":"string"},"subject":{"$ref":"#/components/schemas/AgentSessionSubject"},"status":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","triggerType","subjectId","subject","status","createdAt","updatedAt"]},"AgentSessionSubject":{"type":"object","properties":{"deploymentName":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"releaseId":{"type":"string","nullable":true},"releaseCommitMessage":{"type":"string","nullable":true},"releaseCommitRef":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true}},"required":["deploymentName","deploymentGroupId","deploymentGroupName","releaseId","releaseCommitMessage","releaseCommitRef","projectId","projectName"]},"AgentSessionDetail":{"allOf":[{"$ref":"#/components/schemas/AgentSessionListItem"},{"type":"object","properties":{"resultText":{"type":"string","nullable":true},"toolNames":{"type":"array","nullable":true,"items":{"type":"string"}},"error":{"type":"string","nullable":true},"pendingApproval":{"type":"object","nullable":true,"properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["resultText","toolNames","error","pendingApproval"]}]},"AgentSessionEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionEvent"}},"latestSeq":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["events","latestSeq","hasMore"]},"AgentSessionEvent":{"oneOf":[{"$ref":"#/components/schemas/AgentSessionStatusEvent"},{"$ref":"#/components/schemas/AgentSessionStepEvent"},{"$ref":"#/components/schemas/AgentSessionToolCallEvent"},{"$ref":"#/components/schemas/AgentSessionToolResultEvent"},{"$ref":"#/components/schemas/AgentSessionMarkdownEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalRequestedEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalGrantedEvent"},{"$ref":"#/components/schemas/AgentSessionRestartedEvent"},{"$ref":"#/components/schemas/AgentSessionEventsTruncatedEvent"}],"discriminator":{"propertyName":"type","mapping":{"status":"#/components/schemas/AgentSessionStatusEvent","step":"#/components/schemas/AgentSessionStepEvent","tool_call":"#/components/schemas/AgentSessionToolCallEvent","tool_result":"#/components/schemas/AgentSessionToolResultEvent","markdown":"#/components/schemas/AgentSessionMarkdownEvent","approval_requested":"#/components/schemas/AgentSessionApprovalRequestedEvent","approval_granted":"#/components/schemas/AgentSessionApprovalGrantedEvent","session_restarted":"#/components/schemas/AgentSessionRestartedEvent","events_truncated":"#/components/schemas/AgentSessionEventsTruncatedEvent"}}},"AgentSessionStatusEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["status"]},"payload":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionStepEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["step"]},"payload":{"type":"object","properties":{"stepId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["in_progress","complete","error"]}},"required":["stepId","title","status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolCallEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolResultEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_result"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string","nullable":true},"toolName":{"type":"string","nullable":true},"ok":{"type":"boolean"},"output":{"nullable":true}},"required":["toolCallId","toolName","ok"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionMarkdownEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["markdown"]},"payload":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalRequestedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_requested"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalGrantedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_granted"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"approvedByUserId":{"type":"string"},"approvedByName":{"type":"string","nullable":true},"source":{"type":"string","enum":["dashboard","slack"]}},"required":["approvalId","approvedByUserId","approvedByName","source"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionRestartedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["session_restarted"]},"payload":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionEventsTruncatedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["events_truncated"]},"payload":{"type":"object","properties":{"limit":{"type":"number"}},"required":["limit"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApproveResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"resumed":{"type":"boolean"}},"required":["jobId","status","resumed"]},"AgentSessionStopResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"canceled":{"type":"boolean"}},"required":["jobId","status","canceled"]},"SyncListResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"userEnvironmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"deploymentToken":{"type":"string","nullable":true},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId","userEnvironmentVariables"]}}},"required":["deployments"],"description":"Full deployment records for manager operation"},"SyncListRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. Manager-scoped tokens are always constrained to their own manager ID."}]},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to include"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment status"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by deployment platform"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Filter by deployment group ID","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum records to return"}},"additionalProperties":false,"description":"Request to list full operational deployments"},"SyncAcquireResponseDeployment":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Deployment group ID the deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method recorded on the deployment when it has a setup-owned path."}]},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state (includes releases)"},"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration"}},"required":["deploymentId","projectId","deploymentGroupId","current","config"]},"SyncContextRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the context. Manager-scoped tokens are constrained to their own manager ID."}]},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"SyncAcquireResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"},"description":"List of acquired deployments with deployment context"},"failures":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment that failed","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"error":{"allOf":[{"$ref":"#/components/schemas/APIError"},{"description":"Error that occurred during context building"}]}},"required":["deploymentId","projectId","error"]},"description":"List of deployments that failed during context building (locks already released)"}},"required":["deployments","failures"],"description":"Acquired deployments and failures"},"SyncAcquireRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. If omitted, resolved from each deployment's managerId column."}]},"session":{"type":"string","description":"Unique session identifier for lock tracking"},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to lock (for Pull model sync)"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment statuses (default: all deployment statuses)"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by platforms (default: all platforms the Manager supports)"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Filter by setup method for setup-owned acquisition paths"}]},"acquireMode":{"type":"string","enum":["runtime","setup-run","setup-teardown"],"description":"Phase ownership mode for deployment acquisition"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model from stackSettings.deploymentModel."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of deployments to acquire (default: 10)"}},"required":["session","deploymentModel"],"additionalProperties":false,"description":"Request to acquire deployments for processing"},"SyncReconcileResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the state was reconciled"},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state after reconciliation"},"target":{"type":"object","properties":{"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration\n\nConfiguration for how to perform the deployment.\nNote: Credentials (ClientConfig) are passed separately to step() function."},"releaseInfo":{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."}},"required":["config","releaseInfo"],"description":"Target deployment if update is needed"}},"required":["success","current"],"description":"State reconciliation result with optional target"},"SyncReconcileRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to reconcile state for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Lock session (push model only) - verifies lock ownership"},"state":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Complete deployment state after step() execution"},"updateHeartbeat":{"type":"boolean","description":"Update heartbeat timestamp (for successful health checks)"},"suggestedDelayMs":{"type":"integer","minimum":0,"description":"Delay before this deployment should be acquired again."},"resourceHeartbeats":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"description":"Latest typed resource heartbeats collected during this step."},"observedInventoryBatches":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"],"description":"Backend whose observer produced this snapshot."},"complete":{"type":"boolean","description":"Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`."},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inventoryScope":{"type":"string","description":"Stable scope for the provider list operation that produced this batch."},"observedAt":{"type":"string","format":"date-time","description":"Time the inventory scope was observed."},"resources":{"type":"array","items":{"type":"object","properties":{"alienResourceId":{"type":"string","nullable":true},"attributes":{"type":"object","properties":{},"additionalProperties":{"nullable":true}},"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"counts":{"oneOf":[{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},{"nullable":true}]},"deploymentId":{"type":"string","nullable":true},"displayName":{"type":"string"},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerKind":{"type":"string","description":"Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type."},"providerStale":{"type":"boolean"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"rawIdentity":{"type":"string","description":"Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc."},"region":{"type":"string","nullable":true},"resourceTypeHint":{"oneOf":[{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},{"nullable":true}]},"scope":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"description":"Release/version identity observed from the provider resource, when available."}},"required":["displayName","health","lifecycle","partial","providerKind","providerStale","rawIdentity"]}},"sourceKind":{"type":"string","description":"Writer/source for this inventory pass, such as `operator` or\n`manager-observer`."}},"required":["backend","complete","controllerPlatform","inventoryScope","observedAt","resources","sourceKind"]},"description":"Observed raw-resource inventory batches read during this step."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Operator-reported runtime capabilities."},"operatorVersion":{"type":"string","minLength":1,"maxLength":128,"description":"Operator binary version reported by the runtime."}},"required":["deploymentId","state"],"additionalProperties":false,"description":"Request to reconcile deployment state"},"SyncReleaseRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to release","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Session identifier to release"}},"required":["deploymentId","session"],"additionalProperties":false,"description":"Request to release deployment lock"},"ResolveResponse":{"type":"object","properties":{"managerId":{"type":"string","description":"Manager ID"},"managerName":{"type":"string","description":"Manager display name"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL"},"managerIsSystem":{"type":"boolean","description":"Whether the manager is Alien-hosted"},"managerCloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where the private manager is hosted. Null for Alien-hosted managers."},"projectId":{"type":"string","description":"Resolved project ID"},"installContext":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}},"required":["platform","managementConfig"],"description":"Target install context derived from platform-managed manager metadata. Present for cloud push platforms."}},"required":["managerId","managerName","managerUrl","managerIsSystem","projectId"]},"CloudRegionsResponse":{"type":"object","properties":{"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"}},"required":["supportedRegions"]},"BillingAuditLogRow":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"action":{"type":"string"},"payload":{"nullable":true},"createdAt":{"type":"string"}},"required":["id","workspaceId","action","createdAt"]},"WorkspaceBillingEntitlements":{"type":"object","properties":{"planId":{"$ref":"#/components/schemas/PlanId"},"planStatus":{"$ref":"#/components/schemas/BillingPlanStatus"},"features":{"$ref":"#/components/schemas/BillingFeatureFlags"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"syncedAt":{"type":"string","nullable":true,"format":"date-time"},"stale":{"type":"boolean"}},"required":["planId","planStatus","features","limits","syncedAt","stale"]},"PlanId":{"type":"string","enum":["starter","pro","pro_annual","enterprise"]},"BillingPlanStatus":{"type":"string","enum":["active","trialing","past_due","canceled","none"]},"BillingFeatureFlags":{"type":"object","properties":{"custom_domains":{"type":"boolean"},"private_managers":{"type":"boolean"},"sso_saml":{"type":"boolean"},"audit_logs":{"type":"boolean"},"airgapped":{"type":"boolean"}},"required":["custom_domains","private_managers","sso_saml","audit_logs","airgapped"]},"BillingLimits":{"type":"object","properties":{"maxDeployments":{"type":"number","nullable":true},"maxProjects":{"type":"number","nullable":true},"maxSeats":{"type":"number","nullable":true},"maxCustomDomains":{"type":"number","nullable":true},"creditUsd":{"type":"number","nullable":true},"seatsIncluded":{"type":"number","nullable":true}},"required":["maxDeployments","maxProjects","maxSeats","maxCustomDomains","creditUsd","seatsIncluded"]}},"parameters":{}},"paths":{"/v1/invitations/{token}":{"get":{"operationId":"getWorkspaceInvitationPreview","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationPreview"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/memberships":{"get":{"operationId":"listMemberships","description":"List all workspaces the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listMemberships","responses":{"200":{"description":"List of user's workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile":{"get":{"operationId":"getUserProfile","description":"Get the current user's profile and user-scoped onboarding state.","x-speakeasy-group":"user","x-speakeasy-name-override":"getProfile","responses":{"200":{"description":"User profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateUserProfile","description":"Update the current user's profile (display name).","x-speakeasy-group":"user","x-speakeasy-name-override":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"}}}}}},"responses":{"200":{"description":"Profile updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile/setup":{"post":{"operationId":"completeUserProfileSetup","description":"Complete the required beta intake and profile setup dialog.","x-speakeasy-group":"user","x-speakeasy-name-override":"completeProfileSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileSetupRequest"}}}},"responses":{"200":{"description":"Profile setup completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/workspaces":{"post":{"operationId":"createWorkspace","description":"Create a new workspace. The current user will be automatically added as an admin.","x-speakeasy-group":"user","x-speakeasy-name-override":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name"},"logoUrl":{"type":"string","format":"uri","description":"Optional workspace logo URL"}},"required":["name"]}}}},"responses":{"201":{"description":"Created workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Bad request - invalid workspace name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Workspace name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces":{"get":{"operationId":"listGitNamespaces","description":"List all git namespaces (GitHub installations) the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaces","parameters":[{"schema":{"type":"string","enum":["github"],"default":"github"},"required":false,"name":"provider","in":"query"}],"responses":{"200":{"description":"List of user's git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/sync":{"post":{"operationId":"syncGitNamespaces","description":"Sync git namespaces from the provider. For GitHub, this fetches all app installations accessible to the user.","x-speakeasy-group":"user","x-speakeasy-name-override":"syncGitNamespaces","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"description":"Git provider to sync"}},"required":["provider"]}}}},"responses":{"200":{"description":"Synced git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/{id}/repositories":{"get":{"operationId":"listGitNamespaceRepositories","description":"List repositories accessible through a git namespace (GitHub installation).","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaceRepositories","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","description":"Search query to filter repositories by name"},"required":false,"description":"Search query to filter repositories by name","name":"search","in":"query"}],"responses":{"200":{"description":"List of repositories.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitRepository"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Git namespace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/invitations/{token}/accept":{"post":{"operationId":"acceptWorkspaceInvitation","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptWorkspaceInvitationResponse"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","description":"Get the current authenticated principal (user or service account). Works with both session cookies and API keys.","x-speakeasy-group":"auth","x-speakeasy-name-override":"whoami","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","example":"my-workspace"},"required":false,"description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Current authenticated principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subject"}}}},"400":{"description":"Missing required workspace for user credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","description":"Retrieve all workspaces.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search workspaces by name"},"required":false,"description":"Search workspaces by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","description":"Retrieve a workspace by ID.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspace","description":"Update a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"}}}}}},"responses":{"200":{"description":"Workspace updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteWorkspace","description":"Delete a workspace. The workspace must have no projects.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Workspace deleted successfully."},"400":{"description":"Workspace still has projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listWorkspaceMembers","description":"List all members of a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"listMembers","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"List of workspace members.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"addWorkspaceMember","description":"Add a member to a workspace by email. The user must already have an account.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"addMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of the user to add"},"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"Role to assign"}]}},"required":["email","role"]}}}},"responses":{"201":{"description":"Member added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"404":{"description":"Workspace or user not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"User is already a member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMember","description":"Update a workspace member's role.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"New role to assign"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Member role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"400":{"description":"Cannot remove last admin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"removeWorkspaceMember","description":"Remove a member from a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"removeMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Member removed successfully."},"400":{"description":"Cannot remove last admin or self.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/dismiss-onboarding":{"post":{"operationId":"dismissWorkspaceOnboarding","description":"Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"dismissOnboarding","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace with onboardingDismissedAt populated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/settings":{"get":{"operationId":"getWorkspaceSettings","description":"Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"getSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspaceSettings","description":"Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}}},"responses":{"200":{"description":"Updated ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations":{"get":{"operationId":"listWorkspaceInvitations","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Pending invitations.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvitation"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["email","role"]}}}},"responses":{"201":{"description":"Invitation created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"403":{"description":"Seat limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}/resend":{"post":{"operationId":"resendWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Invitation email sent again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}":{"delete":{"operationId":"revokeWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invitation revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invite-link":{"get":{"operationId":"getWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Active invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"createWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["role"]}}}},"responses":{"200":{"description":"Invite link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invite link revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","description":"Retrieve all projects.","x-speakeasy-group":"projects","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search projects by name"},"required":false,"description":"Search projects by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deploymentCount","latestRelease"]},"description":"Optional fields to include: deploymentCount, latestRelease"},"required":false,"description":"Optional fields to include: deploymentCount, latestRelease","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved projects.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createProject","description":"Create a new project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name"]}}}},"responses":{"201":{"description":"Project created successfully.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"}}}]}}}},"400":{"description":"Invalid request or GitHub repository connection failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}":{"get":{"operationId":"getProject","description":"Retrieve a project by ID or name.","x-speakeasy-group":"projects","x-speakeasy-name-override":"get","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateProject","description":"Update a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"update","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProject"}}}},"responses":{"200":{"description":"Project updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteProject","description":"Delete a project. The project must have no deployments.","x-speakeasy-group":"projects","x-speakeasy-name-override":"delete","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Project deleted successfully."},"400":{"description":"Project still has deployments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/gcp-oauth-provider":{"get":{"operationId":"getProjectGcpOAuthProvider","description":"Retrieve redacted project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateProjectGcpOAuthProvider","description":"Update project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"updateGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGcpOAuthProvider"}}}},"responses":{"200":{"description":"Google Cloud OAuth provider settings updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"400":{"description":"Invalid provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-portal-domain":{"get":{"operationId":"getProjectDeploymentPortalDomain","description":"Get the deployment portal domain binding for a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentPortalDomain","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved deployment portal domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPortalDomainResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/import-template":{"post":{"operationId":"createProjectFromTemplate","description":"Create a project by forking alienplatform/alien into your namespace, then configuring GitHub Actions.","x-speakeasy-group":"projects","x-speakeasy-name-override":"createFromTemplate","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"targetNamespace":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-]+$","description":"GitHub owner namespace (user or organization) that will receive the fork"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name","targetNamespace","templatePath"]}}}},"responses":{"201":{"description":"Project created successfully from template.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"},"template":{"type":"object","properties":{"sourceRepository":{"type":"string","enum":["alienplatform/alien"]},"forkRepository":{"type":"string","description":"Fork repository in / format"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"resolvedRootDirectory":{"type":"string"}},"required":["sourceRepository","forkRepository","templatePath","resolvedRootDirectory"]}},"required":["template"]}]}}}},"400":{"description":"Bad request or GitHub integration not installed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Fork exists but is not ready yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/template-urls":{"get":{"operationId":"getProjectTemplateUrls","description":"Get template URLs for deploying setup stacks in this project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getTemplateUrls","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Template URLs retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"aws":{"type":"object","nullable":true,"properties":{"templateUrl":{"type":"string","format":"uri","description":"URL to download the CloudFormation template"},"launchStackUrl":{"type":"string","format":"uri","description":"URL to launch the template in the AWS CloudFormation console"}},"required":["templateUrl","launchStackUrl"],"description":"Template URLs for deploying an AWS setup stack"}}}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-link-setup":{"get":{"operationId":"getProjectDeploymentLinkSetup","description":"Get the active release stack and portal-visible setup availability for deployment-link configuration.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentLinkSetup","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment-link setup retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLinkSetupResponse"}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/active-release":{"get":{"operationId":"getProjectActiveRelease","description":"Get the active release for this project. Returns the latest release, or the pinned release if deploymentId is provided and that deployment has a pinned release.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getActiveRelease","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Optional deployment ID to check for pinned release"},"required":false,"description":"Optional deployment ID to check for pinned release","name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Active release retrieved successfully.","content":{"application/json":{"schema":{"nullable":true}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups":{"post":{"operationId":"createDeploymentGroup","tags":["deployment-groups"],"summary":"Create a new deployment group","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group with this name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listDeploymentGroups","tags":["deployment-groups"],"summary":"List deployment groups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of deployment groups","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"}}}]},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/by-name":{"put":{"operationId":"ensureDeploymentGroupByName","tags":["deployment-groups"],"summary":"Get or create a deployment group by project and name","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureDeploymentGroupByNameRequest"}}}},"responses":{"200":{"description":"Deployment group returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}":{"get":{"operationId":"getDeploymentGroup","tags":["deployment-groups"],"summary":"Get deployment group details","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"}],"responses":{"200":{"description":"Deployment group details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"deploymentCount":{"type":"integer","description":"Current number of deployments in this deployment group"}},"required":["deploymentCount"]}]}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentGroup","tags":["deployment-groups"],"summary":"Update deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDeploymentGroup","tags":["deployment-groups"],"summary":"Delete deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Deployment group deleted successfully"},"400":{"description":"Cannot delete deployment group that has deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/tokens":{"post":{"operationId":"createDeploymentGroupToken","tags":["deployment-groups"],"summary":"Create deployment group token","description":"Creates a deployment-group scoped API key and returns both the token and formatted deployment link","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenRequest"}}}},"responses":{"200":{"description":"Deployment group token created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenResponse"}}}},"400":{"description":"Deployment setup configuration is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/first-party-session":{"post":{"operationId":"createFirstPartyDeploymentSession","tags":["deployment-groups"],"summary":"Create first-party deployment session","description":"Mints a short-lived deployment-group token with the recommended self-deploy policy for the authenticated developer.","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"First-party deployment session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirstPartyDeploymentSessionResponse"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages":{"get":{"operationId":"listPackages","description":"List packages with optional filters. Returns packages ordered by creation date (newest first).","x-speakeasy-group":"packages","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Filter by package type"},"required":false,"description":"Filter by package type","name":"type","in":"query"},{"schema":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Filter by package status"},"required":false,"description":"Filter by package status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search packages by type or version"},"required":false,"description":"Search packages by type or version","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of packages.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}":{"get":{"operationId":"getPackage","description":"Get details of a specific package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/rebuild":{"post":{"operationId":"rebuildPackages","description":"Rebuild packages for a project. This will cancel any pending packages and create new ones with auto-incremented versions.","x-speakeasy-group":"packages","x-speakeasy-name-override":"rebuild","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to rebuild packages for"}},"required":["project"]}}}},"responses":{"200":{"description":"Packages rebuilt successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"packagesCreated":{"type":"integer","description":"Number of packages created"}},"required":["packagesCreated"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}/cancel":{"post":{"operationId":"cancelPackage","description":"Cancel a pending or building package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"cancel","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package canceled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Package cannot be canceled (not in pending or building status).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases":{"get":{"operationId":"listReleases","description":"Retrieve all releases.","x-speakeasy-group":"releases","x-speakeasy-name-override":"list","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search releases by commit message, branch, SHA, or release ID"},"required":false,"description":"Search releases by commit message, branch, SHA, or release ID","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by git branch (commitRef)"},"required":false,"description":"Filter by git branch (commitRef)","name":"branch","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by commit author login or name"},"required":false,"description":"Filter by commit author login or name","name":"author","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created after this date (ISO 8601)"},"required":false,"description":"Filter releases created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created before this date (ISO 8601)"},"required":false,"description":"Filter releases created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved releases.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createRelease","description":"Create a new release.","x-speakeasy-group":"releases","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseRequest"}}}},"responses":{"201":{"description":"Release created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/branches":{"get":{"operationId":"listReleaseBranches","description":"List distinct git branches across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listBranches","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search branches by name (case-insensitive contains)"},"required":false,"description":"Search branches by name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of branches to return"},"required":false,"description":"Maximum number of branches to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct branches.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/authors":{"get":{"operationId":"listReleaseAuthors","description":"List distinct commit authors across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listAuthors","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search authors by login or name (case-insensitive contains)"},"required":false,"description":"Search authors by login or name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of authors to return"},"required":false,"description":"Maximum number of authors to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct authors.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAuthorFilterItem"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/{id}":{"get":{"operationId":"getRelease","description":"Retrieve a release by ID.","x-speakeasy-group":"releases","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"required":true,"description":"Unique identifier for the release.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseListItemResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments":{"get":{"operationId":"listDeployments","description":"Retrieve all deployments.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"list","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Filter by exact deployment name. Must be used with deploymentGroup."},"required":false,"description":"Filter by exact deployment name. Must be used with deploymentGroup.","name":"name","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name, public subdomain, or deployment group name"},"required":false,"description":"Search deployments by name, public subdomain, or deployment group name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved deployments.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"400":{"description":"Invalid deployment list filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDeployment","description":"Create a new deployment. Deployment group tokens automatically use their group. Workspace/project tokens must provide deploymentGroupId.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeploymentRequest"}}}},"responses":{"200":{"description":"Existing deployment returned for idempotent deployment-group registration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"201":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"400":{"description":"Bad request - deployment group has reached max deployments limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Forbidden - insufficient permissions to create deployments in this context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project or deployment group not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/stats":{"get":{"operationId":"getDeploymentStats","description":"Get aggregated deployment statistics. Returns total count and breakdown by status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getStats","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name or deployment group name"},"required":false,"description":"Search deployments by name or deployment group name","name":"search","in":"query"}],"responses":{"200":{"description":"Deployment statistics retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStats"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-environments":{"get":{"operationId":"listDeploymentFilterEnvironments","description":"List distinct effective environments used by deployments. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterEnvironments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Distinct environments retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-deployment-groups":{"get":{"operationId":"listDeploymentFilterDeploymentGroups","description":"List deployment groups with deployment counts. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterDeploymentGroups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return"},"required":false,"description":"Maximum number of items to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Deployment groups for filter retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"deploymentCount":{"type":"number"},"runningCount":{"type":"number","description":"Number of deployments in 'running' status"},"failedCount":{"type":"number","description":"Number of deployments in a failed status"},"inProgressCount":{"type":"number","description":"Number of deployments in an in-progress status (provisioning, updating, etc.)"}},"required":["id","name","deploymentCount","runningCount","failedCount","inProgressCount"]}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeployment","description":"Retrieve a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetailResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/info":{"get":{"operationId":"getDeploymentConnectionInfo","description":"Get deployment connection information including command endpoint and resource URLs.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment connection information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentConnectionInfo"}}}},"400":{"description":"Deployment not ready (no manager assigned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/import":{"post":{"operationId":"importDeployment","description":"Import a deployment from resolved setup infrastructure such as CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"import","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDeploymentRequest"}}}},"responses":{"200":{"description":"Deployment import was idempotent and returned an existing deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"201":{"description":"Deployment imported and created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/first-party-inputs":{"put":{"operationId":"setFirstPartyDeploymentInputs","description":"Store operator-provided input values on a first-party deployment session token so CLI/local deploys apply them.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"setFirstPartyDeploymentInputs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Input values stored on the session token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsResponse"}}}},"400":{"description":"A deployment-group token scope is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"The token is not a first-party deployment session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to store input values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations":{"post":{"operationId":"createSetupRegistrationOperation","description":"Start a durable setup registration operation for CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createSetupRegistrationOperation","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupRegistrationOperationRequest"}}}},"responses":{"202":{"description":"Setup registration operation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"400":{"description":"Invalid setup registration operation request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed before callback acceptance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations/{id}":{"get":{"operationId":"getSetupRegistrationOperation","description":"Get setup registration operation status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getSetupRegistrationOperation","parameters":[{"schema":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"required":true,"description":"Unique identifier for the setup registration operation.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Setup registration operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"404":{"description":"Setup registration operation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/delete":{"post":{"operationId":"deleteDeployment","description":"Delete, detach, or forget a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentRequest"}}}},"responses":{"202":{"description":"Deployment deletion request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentResponse"}}}},"400":{"description":"Cannot delete the deployment in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"redeployDeployment","description":"Redeploy a running deployment with the same release and fresh environment variables. Sets status to update-pending.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"redeploy","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment redeployment triggered successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot redeploy - deployment must be running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/pin-release":{"post":{"operationId":"pinDeploymentRelease","description":"Pin or unpin a running or runtime-failed deployment. Running deployments start an update; failed deployments retry toward the selected release.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"pinRelease","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinReleaseRequest"}}}},"responses":{"202":{"description":"Release pin updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot pin release from the deployment's current lifecycle state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/retry":{"post":{"operationId":"retryDeployment","description":"Retry a failed deployment operation. Uses alien-infra's retry mechanisms to resume from exact failure point.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"retry","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment retry enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Deployment is not in a failed state that can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/inputs":{"get":{"operationId":"getDeploymentInputs","description":"Get the active input definitions and current non-secret values for a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment inputs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInputsResponse"}}}},"403":{"description":"Insufficient permission to read deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentInputs","description":"Update runtime stack inputs, rebuild their environment-variable mappings, and request a deployment update when runtime configuration changes.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Deployment inputs saved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsResponse"}}}},"400":{"description":"Input values are invalid for the deployment release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, project, or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/environment-variables":{"patch":{"operationId":"updateDeploymentEnvironmentVariables","description":"Update a deployment's environment variables. If the deployment is running and not locked, the status will be changed to update-pending to trigger a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateEnvironmentVariables","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentEnvironmentVariablesRequest"}}}},"responses":{"202":{"description":"Environment variables updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Environment variables are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update environment variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/token":{"post":{"operationId":"createDeploymentToken","description":"Create a deployment token (deployment-scoped API key). The deployment must exist before creating a token.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenRequest"}}}},"responses":{"201":{"description":"Deployment token created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers":{"post":{"operationId":"createManager","description":"Create a new manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewManagerRequest"}}}},"responses":{"201":{"description":"Manager created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Invalid private manager setup method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"A manager for this target already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listManagers","description":"Retrieve all managers.","x-speakeasy-group":"managers","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search managers by name"},"required":false,"description":"Search managers by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of managers to return"},"required":false,"description":"Maximum number of managers to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved managers.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manager"}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/setup-token":{"post":{"operationId":"retryManagerSetup","description":"Revoke previous private-manager setup tokens and issue a fresh setup token/config.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retrySetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"201":{"description":"Fresh manager setup token generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Manager setup cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or setup config not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/retry":{"post":{"operationId":"retryManager","description":"Retry private-manager setup. Returns a fresh setup action before the internal deployment exists, or requests retry for the internal deployment after it exists.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retry","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager retry handled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerRetryResponse"}}}},"400":{"description":"Manager cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or internal deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/cancel-setup":{"post":{"operationId":"cancelManagerSetup","description":"Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record.","x-speakeasy-group":"managers","x-speakeasy-name-override":"cancelSetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager setup canceled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Manager setup cannot be canceled in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}":{"get":{"operationId":"getManager","description":"Retrieve a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"get","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manager"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteManager","description":"Delete a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"delete","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager deletion enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot delete the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Internal deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/domain-binding":{"get":{"operationId":"getManagerDomainBinding","description":"Get the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager domain binding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateManagerDomainBinding","description":"Create, update, or remove the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"updateDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerDomainBinding"}}}},"responses":{"200":{"description":"Manager domain binding updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"400":{"description":"Invalid domain binding request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or domain not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/management-config":{"get":{"operationId":"getManagerManagementConfig","description":"Get the management configuration for a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getManagementConfig","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":true,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Management config retrieved successfully.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/provision":{"post":{"operationId":"provisionManager","description":"Enqueue provisioning for a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"provision","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager provisioning enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot provision the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/update":{"post":{"operationId":"updateManager","description":"Update a manager to a specific release ID or active release.","x-speakeasy-group":"managers","x-speakeasy-name-override":"update","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerRequest"}}}},"responses":{"202":{"description":"Manager update enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot update the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/events":{"get":{"operationId":"listManagerEvents","description":"Retrieve all events of a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"listEvents","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"]}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/token":{"post":{"operationId":"generateManagerToken","description":"Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/gcp-oauth-provider/resolve":{"post":{"operationId":"resolveManagerGcpOAuthProvider","description":"Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap.","x-speakeasy-group":"managers","x-speakeasy-name-override":"resolveGcpOAuthProvider","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderRequest"}}}},"responses":{"200":{"description":"Resolved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderResponse"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Manager cannot resolve this deployment group's project settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/heartbeat":{"post":{"operationId":"reportManagerHeartbeat","description":"Report Manager health status and metrics.","x-speakeasy-group":"managers","x-speakeasy-name-override":"reportHeartbeat","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatRequest"}}}},"responses":{"200":{"description":"Heartbeat acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/deployment":{"get":{"operationId":"getManagerDeployment","description":"Get deployment details for a private manager (internal deployment platform, status, resources).","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDeployment","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager deployment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDeployment"}}}},"404":{"description":"Manager not found or has no internal deployment (alien-hosted managers don't have deployment info).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/prepare":{"post":{"operationId":"prepareOperatorManifestPackage","tags":["operator-manifests"],"summary":"Prepare the white-labeled Operator image for an Operate install","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageRequest"}}}},"responses":{"200":{"description":"Operator image package created or reused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/render":{"post":{"operationId":"renderOperatorManifest","tags":["operator-manifests"],"summary":"Render a Kubernetes Operator manifest","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestRequest"}}}},"responses":{"200":{"description":"Operator manifest rendered successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Operator image package is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Invalid platform or manager configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listAPIKeys","description":"Retrieve all API keys for the current workspace.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved API keys.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/APIKey"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createAPIKey","description":"Create a new API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"API key created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"403":{"description":"Insufficient permissions to create API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/{id}":{"get":{"operationId":"getAPIKey","description":"Retrieve a specific API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateAPIKey","description":"Update an API key (enable/disable, change description).","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyRequest"}}}},"responses":{"200":{"description":"API key updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeAPIKey","description":"Revoke (soft delete) an API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"revoke","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"API key revoked successfully."},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/batch-delete":{"post":{"operationId":"deleteAPIKeys","description":"Permanently delete multiple API keys.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"deleteMultiple","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAPIKeysRequest"}}}},"responses":{"200":{"description":"API keys deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedCount":{"type":"number"}},"required":["deletedCount"]}}}},"403":{"description":"Insufficient permissions to delete API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains":{"get":{"operationId":"listDomains","description":"List system domains and workspace domains.","x-speakeasy-group":"domains","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domains.","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainWithUsage"}}},"required":["domains"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDomain","description":"Create a workspace domain and optional initial endpoints.","x-speakeasy-group":"domains","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253},"setup":{"type":"object","properties":{"deploymentPortal":{"type":"boolean"},"packages":{"type":"boolean"},"deploymentUrlProjectId":{"type":"string","nullable":true,"pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"managerIds":{"type":"array","items":{"type":"string"}}}}},"required":["domain"]}}}},"responses":{"200":{"description":"Returned an existing workspace domain claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"201":{"description":"Created domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Domain is reserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/endpoints":{"post":{"operationId":"createDomainEndpoint","description":"Create an endpoint under a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"createEndpoint","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["workspace","project","manager"]},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind"]}}}},"responses":{"201":{"description":"Created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Endpoint cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomain","description":"Get domain by ID.","x-speakeasy-group":"domains","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDomain","description":"Delete a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain deletion requested.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain is in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/refresh":{"post":{"operationId":"refreshDomain","description":"Refresh workspace domain verification.","x-speakeasy-group":"domains","x-speakeasy-name-override":"refresh","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain verification refresh requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events":{"get":{"operationId":"listEvents","description":"Retrieve all events.","x-speakeasy-group":"events","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter events to a single deployment."},"required":false,"description":"Filter events to a single deployment.","name":"deploymentId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["releaseCreatedAt"]},"description":"Optional fields to include: releaseCreatedAt"},"required":false,"description":"Optional fields to include: releaseCreatedAt","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events/{id}":{"get":{"operationId":"getEvent","description":"Retrieve an event by ID.","x-speakeasy-group":"events","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"required":true,"description":"Unique identifier for the event.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens":{"get":{"operationId":"listMachinesJoinTokens","x-speakeasy-group":"machines","x-speakeasy-name-override":"listJoinTokens","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Join tokens for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesJoinTokensResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"createJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Newly minted Machines join token. Existing tokens keep working; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/rotate":{"post":{"operationId":"rotateMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"rotateJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Rotated Machines join token. Revokes all existing tokens, then mints a new one; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/{tokenId}":{"delete":{"operationId":"revokeMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"revokeJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"tokenId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines join token revocation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/inventory":{"get":{"operationId":"listMachinesInventory","x-speakeasy-group":"machines","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machine inventory for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesInventoryResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}/drain":{"delete":{"operationId":"cancelMachinesMachineDrain","x-speakeasy-group":"machines","x-speakeasy-name-override":"cancelMachineDrain","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines drain cancellation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMachinesMachineDrainResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"drainMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"drainMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineRequest"}}}},"responses":{"200":{"description":"Machines drain request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}":{"delete":{"operationId":"removeMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"removeMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines remove request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands":{"get":{"operationId":"listCommands","description":"Retrieve commands. Use for dashboard analytics and command history.","x-speakeasy-group":"commands","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Filter by command state"},"required":false,"description":"Filter by command state","name":"state","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Filter by command name"},"required":false,"description":"Filter by command name","name":"name","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search commands by name"},"required":false,"description":"Search commands by name","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created after this date (ISO 8601)"},"required":false,"description":"Filter commands created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created before this date (ISO 8601)"},"required":false,"description":"Filter commands created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deployment","project"]},"description":"Optional fields to include: deployment, project"},"required":false,"description":"Optional fields to include: deployment, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved commands.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommandListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createCommand","description":"Create command metadata. Called by manager when processing commands. Returns project info for routing decisions.","x-speakeasy-group":"commands","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandRequest"}}}},"responses":{"201":{"description":"Command created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandResponse"}}}},"400":{"description":"Deployment is not ready or has no assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The deployment manager is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/names":{"get":{"operationId":"listCommandNames","description":"List distinct command names. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listNames","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search command names (prefix match)"},"required":false,"description":"Search command names (prefix match)","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct command names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandNamesResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/deployments":{"get":{"operationId":"listCommandDeployments","description":"List distinct deployments that have commands, including deployment group info. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search deployment or deployment group names"},"required":false,"description":"Search deployment or deployment group names","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct deployments that have commands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandDeploymentsResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/target":{"get":{"operationId":"resolveCommandTarget","description":"Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named.","x-speakeasy-group":"commands","x-speakeasy-name-override":"resolveTarget","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment to resolve the target for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Deployment to resolve the target for","name":"deploymentId","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Explicit resource id to resolve; must be a command-capable resource"},"required":false,"description":"Explicit resource id to resolve; must be a command-capable resource","name":"target","in":"query"}],"responses":{"200":{"description":"Resolved command target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedCommandTarget"}}}},"404":{"description":"Deployment or target not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}":{"patch":{"operationId":"updateCommand","description":"Update command state. Called by manager when command is dispatched or completes.","x-speakeasy-group":"commands","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommandRequest"}}}},"responses":{"200":{"description":"Command updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getCommand","description":"Retrieve a command by ID.","x-speakeasy-group":"commands","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/dispatch":{"post":{"operationId":"dispatchCommand","description":"Atomically mark a command DISPATCHED unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"dispatch","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandRequest"}}}},"responses":{"200":{"description":"Dispatch attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/complete":{"post":{"operationId":"completeCommand","description":"Atomically transition a command to a terminal state (SUCCEEDED, FAILED, or EXPIRED) unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"complete","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandRequest"}}}},"responses":{"200":{"description":"Completion attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/increment-attempt":{"post":{"operationId":"incrementCommandAttempt","description":"Atomically increment the command's attempt counter and return the new value.","x-speakeasy-group":"commands","x-speakeasy-name-override":"incrementAttempt","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Attempt incremented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementCommandAttemptResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions":{"get":{"operationId":"listDebugSessions","description":"Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Filter by session state"}]},"required":false,"description":"Filter by session state","name":"state","in":"query"},{"schema":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model (push/pull). Joins against the parent deployment."},"required":false,"description":"Filter by deployment model (push/pull). Joins against the parent deployment.","name":"mode","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Filter by cloud provider. Joins against the parent deployment."},"required":false,"description":"Filter by cloud provider. Joins against the parent deployment.","name":"provider","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated debug sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSessionListResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDebugSession","description":"Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}}},"responses":{"201":{"description":"Debug session created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/{id}":{"patch":{"operationId":"updateDebugSession","description":"Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDebugSessionRequest"}}}},"responses":{"200":{"description":"Debug session updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Debug session not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getDebugSession","description":"Retrieve a debug session by ID.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved debug session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info":{"get":{"operationId":"getDeploymentInfo","description":"Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":false,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Deployment information retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"401":{"description":"Unauthorized — requires a deployment-scoped or deployment-group-scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/compute-plan":{"post":{"operationId":"planDeploymentCompute","description":"Plan deployment compute for the active release before stack preparation. The response contains recommended machine and scale choices for cloud compute pools.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"planCompute","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Compute plan returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentComputePlan"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/prepare-stack":{"post":{"operationId":"prepareDeploymentStack","description":"Prepare the active release stack for a deployment portal setup session. The response contains the generated stack shape plus setup compatibility metadata.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"prepareStack","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Prepared stack returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedDeploymentStack"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"operationId":"slackIntegrationInstallUrl","description":"Generate the Slack OAuth consent URL for this workspace.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"installUrl","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"OAuth URL the dashboard should redirect the user to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/status":{"get":{"operationId":"slackIntegrationStatus","description":"Return the Slack install for this workspace (if any).","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"status","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationStatus"}}}}}}},"/v1/integrations/slack/channels":{"get":{"operationId":"slackIntegrationChannels","description":"List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"listChannels","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Public channels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelsResponse"}}}},"400":{"description":"Workspace not connected to Slack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/notification-channel":{"put":{"operationId":"slackIntegrationSetNotificationChannel","description":"Configure which Slack channel receives ai-agent monitor reports.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"setNotificationChannel","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelRequest"}}}},"responses":{"200":{"description":"Channel saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelResponse"}}}},"400":{"description":"Not connected, or join failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/installation":{"delete":{"operationId":"slackIntegrationUninstall","description":"Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"uninstall","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Uninstalled."}}}},"/v1/agent-sessions":{"get":{"operationId":"listAgentSessions","description":"List ai-agent monitor sessions for this workspace. Newest first, capped at 50.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionListResponse"}}}}}}},"/v1/agent-sessions/{id}":{"get":{"operationId":"getAgentSession","description":"Retrieve one ai-agent monitor session by id.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/events":{"get":{"operationId":"listAgentSessionEvents","description":"Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"events","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Events after the cursor, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionEventsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/approve":{"post":{"operationId":"approveAgentSession","description":"Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"approve","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already resumed / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"202":{"description":"Approved; resume enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/stop":{"post":{"operationId":"stopAgentSession","description":"Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"stop","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already terminal / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"202":{"description":"Cancel accepted; session stopped.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/list":{"post":{"operationId":"syncList","description":"List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows.","x-speakeasy-group":"sync","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListRequest"}}}},"responses":{"200":{"description":"Full deployment records returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/context":{"post":{"operationId":"syncContext","description":"Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock.","x-speakeasy-group":"sync","x-speakeasy-name-override":"context","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncContextRequest"}}}},"responses":{"200":{"description":"Computed deployment context returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"}}}},"404":{"description":"Deployment not found or not assigned to this manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to build deployment context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/acquire":{"post":{"operationId":"syncAcquire","description":"Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing.","x-speakeasy-group":"sync","x-speakeasy-name-override":"acquire","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireRequest"}}}},"responses":{"200":{"description":"Deployments acquired successfully (empty arrays if none available). Failures indicate deployments that were locked but failed during context building - their locks have been released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/reconcile":{"post":{"operationId":"syncReconcile","description":"Reconcile deployment state. Push model requests that include a session verify lock ownership. Pull model state reports are accepted as authz-gated agent progress even when they carry an agent-sync session. Accepts full DeploymentState after step() execution.","x-speakeasy-group":"sync","x-speakeasy-name-override":"reconcile","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileRequest"}}}},"responses":{"200":{"description":"State reconciled successfully. If target is present, continue deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment locked (pull) or session mismatch (push).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/release":{"post":{"operationId":"syncRelease","description":"Release a deployment lock. Must be called after processing an acquired deployment, even if processing failed. This is critical to avoid deadlocks.","x-speakeasy-group":"sync","x-speakeasy-name-override":"release","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReleaseRequest"}}}},"responses":{"200":{"description":"Lock released successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources":{"get":{"operationId":"listInventory","x-speakeasy-group":"resources","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Unified managed and observed resource inventory rows.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["managed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt","source","deploymentId","deploymentName"]},{"type":"object","properties":{"source":{"type":"string","enum":["observed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"rawKind":{"type":"string"},"alienResourceId":{"type":"string","nullable":true},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["source","deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","name","rawKind","alienResourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}":{"get":{"operationId":"listResourceOverview","x-speakeasy-group":"resources","x-speakeasy-name-override":"listOverview","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Compute resource overview rows from latest heartbeats.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/{resourceId}/deployments":{"get":{"operationId":"listResourceDeployments","x-speakeasy-group":"resources","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Deployments where the resource is installed.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt"]}}},"required":["resourceType","resourceId","deployments"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/deployments/{deploymentId}/{resourceId}":{"get":{"operationId":"getResourceDeploymentDetail","x-speakeasy-group":"resources","x-speakeasy-name-override":"getDeploymentDetail","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"deploymentId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Latest heartbeat detail for one compute resource deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"},"desiredImage":{"type":"string","nullable":true}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt","desiredImage"]},"heartbeat":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["available"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"staleAt":{"type":"string","format":"date-time"},"platformStale":{"type":"boolean"},"heartbeat":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"raw":{"type":"array","items":{"nullable":true}}},"required":["status","deploymentId","resourceId","resourceType","backend","controllerPlatform","observedAt","staleAt","platformStale","heartbeat","raw"]},{"type":"object","properties":{"status":{"type":"string","enum":["missing"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"}},"required":["status","deploymentId","resourceId","resourceType"]}]}},"required":["deployment","heartbeat"]}}}},"404":{"description":"Deployment or resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resolve":{"get":{"operationId":"resolve","tags":["resolve"],"summary":"Resolve manager for a project and platform","description":"Returns the manager URL for a given project and platform. The project can be provided as a query parameter, or derived from the token's scope (project-scoped, deployment-group-scoped, or deployment-scoped tokens carry an implicit project). This is the single entry point for all CLI tools to discover which manager to talk to.","x-speakeasy-group":"resolve","x-speakeasy-name-override":"resolve","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform to resolve the manager for"},"required":true,"description":"Target platform to resolve the manager for","name":"platform","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope)."},"required":false,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope).","name":"project","in":"query"}],"responses":{"200":{"description":"Manager resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"description":"Missing required project parameter for this token type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found or no manager available for platform.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Manager not ready yet (no URL reported). Retry after a delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/cloud-regions":{"get":{"operationId":"getCloudRegions","description":"Get cloud regions supported by this Alien environment.","x-speakeasy-group":"cloudRegions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Supported cloud regions retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudRegionsResponse"}}}}}}},"/v1/billing/audit-log":{"get":{"operationId":"listBillingAuditLog","description":"List billing activity entries for the current workspace.","x-speakeasy-group":"billing","x-speakeasy-name-override":"listAuditLog","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor: id from the previous page."},"required":false,"description":"Cursor: id from the previous page.","name":"before","in":"query"}],"responses":{"200":{"description":"Audit-log rows newest-first.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingAuditLogRow"}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"]}}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"getWorkspaceBillingEntitlements","description":"Get the workspace billing entitlements used for product feature gates. Autumn is the source of truth; the response is served through the workspace billing read model with stale-cache fallback.","x-speakeasy-group":"billing","x-speakeasy-name-override":"getEntitlements","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace billing entitlements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBillingEntitlements"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}}}} \ No newline at end of file +{"openapi":"3.0.0","info":{"title":"Alien API","version":"1.0.0","contact":{"name":"Alien Team","url":"https://alien.dev"}},"servers":[{"url":"https://api.alien.dev","description":"Alien API - Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key for authentication, must be provided as a Bearer token. Generate an API key at https://alien.dev/api-keys"}},"schemas":{"WorkspaceInvitationPreview":{"type":"object","properties":{"kind":{"type":"string","enum":["email","link"]},"workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name","logoUrl"]},"inviter":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"image":{"type":"string","nullable":true,"format":"uri"}},"required":["name","image"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["active","accepted","expired","revoked"]},"emailHint":{"type":"string","nullable":true}},"required":["kind","workspace","inviter","role","expiresAt","state","emailHint"],"additionalProperties":false},"WorkspaceRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"Role for workspace-scoped service accounts","example":"workspace.member"},"APIError":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"requestId":{"type":"string","description":"Request ID echoed in the x-request-id response header and server logs."}},"required":["code","message","internal"]},"Membership":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"role":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","logoUrl","role","createdAt"],"additionalProperties":false},"UserProfile":{"type":"object","properties":{"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","description":"User's email address"},"name":{"type":"string","description":"User's display name"},"image":{"type":"string","nullable":true,"description":"User's avatar image URL"},"githubUsername":{"type":"string","nullable":true,"description":"Linked GitHub username"},"cliConnected":{"type":"boolean","description":"Whether this user has ever authenticated a request from the Alien CLI. Latched on first CLI request, never cleared."},"company":{"type":"string","nullable":true,"description":"Company name collected during profile setup."},"acquisitionSource":{"type":"string","nullable":true,"enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other",null],"description":"How the user heard about Alien."},"acquisitionSourceDetail":{"type":"string","nullable":true,"description":"Additional acquisition source detail when the source is other."},"useCases":{"type":"string","nullable":true,"description":"What the user is hoping to use Alien for."},"profileSetupCompletedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the user completed the required profile setup dialog."},"profileSetupVersion":{"type":"integer","nullable":true,"description":"Version of the required profile setup dialog the user completed."}},"required":["id","email","name","image","githubUsername","cliConnected","company","acquisitionSource","acquisitionSourceDetail","useCases","profileSetupCompletedAt","profileSetupVersion"],"additionalProperties":false},"UserProfileSetupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"},"company":{"type":"string","minLength":1,"maxLength":120,"description":"Company name"},"acquisitionSource":{"type":"string","enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other"],"description":"How the user heard about Alien"},"acquisitionSourceDetail":{"type":"string","minLength":1,"maxLength":200,"description":"Required when acquisitionSource is other"},"useCases":{"type":"string","maxLength":2000,"description":"What the user is hoping to use Alien for"}},"required":["name","company","acquisitionSource"],"additionalProperties":false},"GitNamespace":{"type":"object","properties":{"id":{"type":"number","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"installationId":{"type":"number","nullable":true},"type":{"type":"string","enum":["team","user"]},"provider":{"type":"string","enum":["github"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","slug","installationId","type","provider","createdAt"],"additionalProperties":false},"GitRepository":{"type":"object","properties":{"name":{"type":"string"},"private":{"type":"boolean"},"defaultBranch":{"type":"string"},"pushedAt":{"type":"string","format":"date-time"}},"required":["name","private","defaultBranch"],"additionalProperties":false},"AcceptWorkspaceInvitationResponse":{"type":"object","properties":{"outcome":{"type":"string","enum":["joined","already-member"]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"workspaceName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["outcome","workspaceId","workspaceName","role"],"additionalProperties":false},"Subject":{"oneOf":[{"$ref":"#/components/schemas/UserSubject"},{"$ref":"#/components/schemas/ServiceAccountSubject"}],"discriminator":{"propertyName":"kind","mapping":{"user":"#/components/schemas/UserSubject","serviceAccount":"#/components/schemas/ServiceAccountSubject"}},"description":"Authenticated principal that can be either a user (with workspace-scoped permissions) or a service account (with configurable scope and role)"},"UserSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["user"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","format":"email","description":"User's email address"},"workspaceId":{"type":"string","description":"ID of the workspace the user is authenticated within"},"workspaceName":{"type":"string","description":"Name of the workspace the user is authenticated within"},"role":{"$ref":"#/components/schemas/UserRole"}},"required":["kind","id","email","workspaceId","role"],"description":"Authenticated user subject with workspace-scoped permissions"},"UserRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"User's role within the workspace","example":"workspace.member"},"ServiceAccountSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["serviceAccount"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique service account identifier (API key ID)"},"workspaceId":{"type":"string","description":"ID of the workspace the service account belongs to"},"workspaceName":{"type":"string","description":"Name of the workspace the service account belongs to"},"scope":{"$ref":"#/components/schemas/SubjectScope"},"role":{"$ref":"#/components/schemas/Role"}},"required":["kind","id","workspaceId","scope","role"],"description":"Authenticated service account subject with scoped permissions (workspace, project, or deployment level)"},"SubjectScope":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["workspace"],"description":"Workspace-scoped access"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["project"],"description":"Project-scoped access"},"projectId":{"type":"string","description":"ID of the specific project this scope applies to"}},"required":["type","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment"],"description":"Deployment-scoped access"},"deploymentId":{"type":"string","description":"ID of the specific deployment this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"}},"required":["type","deploymentId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"],"description":"Deployment group-scoped access"},"deploymentGroupId":{"type":"string","description":"ID of the specific deployment group this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"}},"required":["type","deploymentGroupId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["manager"],"description":"Manager-scoped access"},"managerId":{"type":"string","description":"ID of the specific manager this scope applies to"}},"required":["type","managerId"]}],"description":"Authorization scope defining what resources this service account can access"},"Role":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"$ref":"#/components/schemas/ProjectRole"},{"$ref":"#/components/schemas/DeploymentRole"},{"$ref":"#/components/schemas/DeploymentGroupRole"},{"$ref":"#/components/schemas/ManagerRole"}],"description":"Role defining what actions this service account can perform within its scope","example":"workspace.member"},"ProjectRole":{"type":"string","enum":["project.viewer","project.developer"],"description":"Role for project-scoped service accounts","example":"project.developer"},"DeploymentRole":{"type":"string","enum":["deployment.viewer","deployment.manager","deployment.telemetry-writer"],"description":"Role for deployment-scoped service accounts","example":"deployment.manager"},"DeploymentGroupRole":{"type":"string","enum":["deployment-group.deployer"],"description":"Role for deployment group-scoped service accounts","example":"deployment-group.deployer"},"ManagerRole":{"type":"string","enum":["manager.runtime"],"description":"Role for manager-scoped service accounts","example":"manager.runtime"},"Workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name.","example":"my-workspace"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"onboardingDismissedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the Getting Started walkthrough was dismissed or completed for this workspace. Null means it has never been dismissed; the dashboard auto-promotes the walkthrough until this is set."},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","onboardingDismissedAt","createdAt"],"additionalProperties":false},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","email","name","image","role","joinedAt"],"additionalProperties":false},"AgentSettings":{"type":"object","properties":{"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"enabled":{"type":"boolean","description":"Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`."},"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["workspaceId","enabled","debugPermissionMode","createdAt","updatedAt"],"additionalProperties":false},"UpdateWorkspaceSettingsRequest":{"type":"object","properties":{"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"enabled":{"type":"boolean","description":"Turn the ai-agent on (`true`) or off (`false`) for this workspace."}}},"WorkspaceInvitation":{"type":"object","properties":{"id":{"type":"string","pattern":"winv_[0-9a-zA-Z]{32}$","description":"Unique identifier for the workspace invitation.","example":"winv_DsgltMIFV0GmqtxV5NYTtrknrna"},"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"status":{"type":"string","enum":["pending","accepted","revoked","expired"]},"deliveryStatus":{"type":"string","enum":["pending","sent","failed"]},"expiresAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","email","role","status","deliveryStatus","expiresAt","lastSentAt","createdAt","inviteUrl"],"additionalProperties":false},"WorkspaceInviteLink":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"wil_[0-9a-zA-Z]{40}$","description":"Unique identifier for the workspace invite link.","example":"wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"useCount":{"type":"integer","minimum":0},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","role","expiresAt","createdAt","useCount","lastUsedAt","inviteUrl"],"additionalProperties":false},"ProjectListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deploymentCount":{"type":"number"},"latestRelease":{"$ref":"#/components/schemas/ProjectReleaseInfo"}}}]},"DeploymentPortalAppearancePreset":{"type":"string","enum":["clean","technical","enterprise","playful","minimal"],"default":"clean","description":"Curated visual style for the deployment portal."},"DeploymentPortalAccentColor":{"type":"string","enum":["blue","purple","green","orange","pink","slate"],"default":"blue","description":"Accent color used for highlights and primary actions."},"DeploymentPortalDensity":{"type":"string","enum":["comfortable","compact"],"default":"comfortable","description":"Layout density for portal content."},"ProjectReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","gitMetadata","createdAt"]},"GitMetadata":{"type":"object","nullable":true,"properties":{"commitSha":{"type":"string","nullable":true,"maxLength":40,"description":"The hash of the commit","example":"dc36199b2234c6586ebe05ec94078a895c707e29"},"commitMessage":{"type":"string","nullable":true,"maxLength":1024,"description":"The commit message","example":"add method to measure Interaction to Next Paint (INP) (#36490)"},"commitRef":{"type":"string","nullable":true,"maxLength":256,"description":"The branch or tag on which the commit was made","example":"main"},"commitDate":{"type":"string","nullable":true,"format":"date-time","description":"The date and time when the commit was created","example":"2026-03-16T12:00:00Z"},"dirty":{"type":"boolean","nullable":true,"description":"Whether or not there have been modifications to the working tree since the latest commit","example":true},"remoteUrl":{"type":"string","nullable":true,"maxLength":2048,"description":"The git repository's remote origin url","example":"https://github.com/alienplatform/alien"},"commitAuthorName":{"type":"string","nullable":true,"maxLength":256,"description":"The name of the author of the commit (from git config)","example":"John Doe"},"commitAuthorEmail":{"type":"string","nullable":true,"maxLength":256,"format":"email","description":"The email of the author of the commit (from git config)","example":"john@example.com"},"commitAuthorLogin":{"type":"string","nullable":true,"maxLength":256,"description":"The provider username of the commit author (e.g., GitHub login), resolved server-side from the commit email","example":"johndoe"},"commitAuthorAvatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"The avatar URL of the commit author, resolved server-side from the provider login","example":"https://github.com/johndoe.png"},"provider":{"$ref":"#/components/schemas/GitProvider"}}},"GitProvider":{"oneOf":[{"$ref":"#/components/schemas/GitHubProvider"},{"$ref":"#/components/schemas/GitLabProvider"},{"nullable":true}],"description":"Provider-specific repository information, resolved server-side from remoteUrl"},"GitHubProvider":{"type":"object","properties":{"type":{"type":"string","enum":["github"]},"org":{"type":"string","maxLength":256,"description":"Repository owner (user or organization)"},"repo":{"type":"string","maxLength":256,"description":"Repository name"}},"required":["type","org","repo"]},"GitLabProvider":{"type":"object","properties":{"type":{"type":"string","enum":["gitlab"]},"namespace":{"type":"string","maxLength":256,"description":"Group/project namespace"},"project":{"type":"string","maxLength":256,"description":"Project name"}},"required":["type","namespace","project"]},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","createdAt","workspaceId"]},"ProjectIDOrNamePathParam":{"type":"string","maxLength":100,"description":"Project ID or name."},"ProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","redirectUris"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"hasClientSecret":{"type":"boolean","enum":[true]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","clientId","hasClientSecret","redirectUris"]}]},"GcpOAuthClientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[a-zA-Z0-9_-]+-[a-zA-Z0-9_-]+\\.apps\\.googleusercontent\\.com$","description":"Google OAuth web client ID.","example":"1234567890-abc123.apps.googleusercontent.com"},"UpdateProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId"]}]},"GcpOAuthClientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Google OAuth web client secret. Write-only; never returned by the API.","example":"GOCSPX-example"},"UpdateProject":{"type":"object","properties":{"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."}}},"DeploymentPortalDomainResponse":{"type":"object","properties":{"deploymentPortalEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"},"packageEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["deploymentPortalEndpoint","packageEndpoint"]},"DomainEndpoint":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dend_[0-9a-z]{28}$","description":"Unique identifier for the domain endpoint.","example":"dend_1bb6gdvm1bs74acqkjstcgv"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domainId":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"kind":{"$ref":"#/components/schemas/DomainEndpointKind"},"owner":{"$ref":"#/components/schemas/DomainEndpointOwner"},"hostname":{"type":"string","minLength":1,"maxLength":253},"status":{"$ref":"#/components/schemas/DomainEndpointStatus"},"provider":{"type":"string","nullable":true},"providerState":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"managedDnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPortalManagedDnsRecord"}},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"retryAttempts":{"type":"integer","minimum":0},"nextStepAfter":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","workspaceId","domainId","kind","owner","hostname","status","managedDnsRecords","retryAttempts","createdAt","updatedAt"]},"DomainEndpointKind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"DomainEndpointOwner":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DomainEndpointOwnerType"},"id":{"type":"string"}},"required":["type","id"]},"DomainEndpointOwnerType":{"type":"string","enum":["workspace","project","manager"]},"DomainEndpointStatus":{"type":"string","enum":["waiting_for_domain","provisioning","waiting_for_dns","waiting_for_health","active","failed","deleting"]},"DeploymentPortalManagedDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true}},"required":["name","type","value"]},"DeploymentLinkSetupResponse":{"type":"object","properties":{"activeRelease":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","nullable":true},"stack":{"$ref":"#/components/schemas/StackByPlatform"}},"required":["id","version","stack"]},"visiblePackageTypes":{"type":"array","items":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"}},"visibleSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}}},"required":["activeRelease","visiblePackageTypes","visibleSetupMethods"]},"StackByPlatform":{"type":"object","nullable":true,"properties":{"aws":{"nullable":true},"gcp":{"nullable":true},"azure":{"nullable":true},"kubernetes":{"nullable":true},"machines":{"nullable":true},"local":{"nullable":true},"test":{"nullable":true}},"additionalProperties":false},"DeploymentSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform","helm","cli","manual"]},"DeploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments allowed in this deployment group"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","projectId","workspaceId","createdAt"]},"CreateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments in this deployment group"}},"required":["name","project"]},"EnsureDeploymentGroupByNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments for newly created groups"}},"required":["name","project"]},"ProjectIDOrNameQueryParam":{"type":"string","maxLength":100,"description":"Filter by project ID or name."},"UpdateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"maxDeployments":{"type":"integer","minimum":1,"description":"Maximum number of deployments in this deployment group"}}},"CreateDeploymentGroupTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The API key token"},"deploymentLink":{"type":"string","description":"Formatted deployment link"}},"required":["token","deploymentLink"]},"CreateDeploymentGroupTokenRequest":{"type":"object","properties":{"description":{"type":"string","description":"Description for the API key"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"},"deploymentSetupConfig":{"$ref":"#/components/schemas/DeploymentSetupConfig"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["deploymentSetupConfig"]},"DeploymentSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."}},"required":["metadata","policy","environmentVariables"]},"DeploymentSetupMetadata":{"type":"object","additionalProperties":{"nullable":true}},"DeploymentSetupPolicy":{"type":"object","properties":{"allowedPlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"allowedKubernetesBasePlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","on-prem"]},"minItems":1,"description":"Kubernetes base environments the recipient may target."},"allowedKubernetesClusterSources":{"type":"array","items":{"$ref":"#/components/schemas/KubernetesClusterSource"},"minItems":1,"description":"Whether recipients may create a cluster, use an existing cluster, or both."},"allowedSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}},"allowReleasePinning":{"type":"boolean"},"stackSettings":{"$ref":"#/components/schemas/DeploymentSetupStackSettingsPolicy"}},"required":["allowedPlatforms","allowedSetupMethods"]},"KubernetesClusterSource":{"type":"string","enum":["create","existing"]},"DeploymentSetupStackSettingsPolicy":{"type":"object","properties":{"defaults":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"allowedDeploymentModels":{"type":"array","items":{"type":"string","enum":["push","pull","airgapped"]}},"allowedNetworkModes":{"type":"array","items":{"type":"string","enum":["none","create","default","byo"]}},"allowedUpdatesModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required"]}},"allowedTelemetryModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required","off"]}},"allowedHeartbeatsModes":{"type":"array","items":{"type":"string","enum":["on","off"]}},"allowExternalBindings":{"type":"boolean"},"allowCustomRegistry":{"type":"boolean"}}},"EnvironmentVariableConfig":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"value":{"type":"string","maxLength":10000,"description":"Variable value (encrypted in database)"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","value","type","targetResources"]},"EnvironmentVariableType":{"type":"string","enum":["plain","secret"],"description":"Variable type (plain or secret)"},"EncryptedStackInputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EncryptedStackInputValue"},"default":{}},"EncryptedStackInputValue":{"type":"object","properties":{"value":{"type":"string","description":"Encrypted JSON-encoded input value."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"]},"secret":{"type":"boolean","description":"Whether the original input is secret."}},"required":["value","kind","secret"]},"StackInputValuesRequest":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{}},"StackInputValueRequest":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"CreateFirstPartyDeploymentSessionResponse":{"type":"object","properties":{"token":{"type":"string","description":"The deployment-group session token"}},"required":["token"]},"Package":{"type":"object","properties":{"id":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"type":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"},"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string","description":"Package version (e.g., '1.0.0', 'rel_abc123')"},"sourceReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release used as package build input. Null for release-less packages such as Operate Operator images.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"setupFingerprints":{"$ref":"#/components/schemas/SetupFingerprintMap"},"packageBuildInputHash":{"type":"string","description":"Hash of Platform-known package build request inputs: package type, source release, setup fingerprints, package config, and setup contract version"},"config":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"}},"required":["displayName","name"],"description":"Branding configuration for the deploy CLI binary."},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for CloudFormation packages"},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"}},"required":["chartName","description"],"description":"Configuration for the Helm chart package"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"}},"required":["displayName","name"],"description":"Branding configuration for the Operator image."},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for Terraform package generation."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]}],"description":"Type-specific configuration"},"outputs":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"digest":{"type":"string","description":"Image digest (e.g., \"sha256:abc123...\")"},"image":{"type":"string","description":"Full image reference (e.g., \"public.ecr.aws/acme/operators/project-id:1.2.3\")"},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain embedded into the Operator binary, if whitelabeled."}},"required":["digest","image"],"description":"Outputs from an Operator image package build"},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]},{"nullable":true}],"description":"Package outputs (only when status is 'ready')"},"error":{"nullable":true,"description":"Error information if status is 'failed'"},"sourceBinarySha256":{"type":"string","nullable":true,"description":"Builder-recorded source binary SHA256 (for cli/terraform packages)"},"retries":{"type":"integer","minimum":0,"description":"Number of build retries"},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"leaseExpiresAt":{"type":"string","format":"date-time","nullable":true,"description":"Expiration of the current builder lease"},"buildPhase":{"type":"string","nullable":true,"enum":["building","publishing",null],"description":"Coarse package build phase"},"lastProgressAt":{"type":"string","format":"date-time","nullable":true,"description":"Last successful builder lease renewal or phase change"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","projectId","workspaceId","type","status","version","setupFingerprints","packageBuildInputHash","config","retries","createdAt","updatedAt"]},"SetupFingerprintMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SetupFingerprintInfo"},"description":"Per-target setup compatibility fingerprints copied from the source release"},"SetupFingerprintInfo":{"type":"object","properties":{"target":{"$ref":"#/components/schemas/SetupTarget"},"fingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"version":{"$ref":"#/components/schemas/SetupFingerprintVersion"}},"required":["target","fingerprint","version"]},"SetupTarget":{"type":"string","minLength":1,"description":"Stable target key for the setup contract, e.g. aws/us-east-1"},"SetupFingerprint":{"type":"string","minLength":1,"description":"Deterministic setup contract fingerprint for one setup target"},"SetupFingerprintVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup fingerprint algorithm version"},"ReleaseListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Release"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"rollout":{"type":"object","nullable":true,"properties":{"updatedCount":{"type":"integer","description":"Deployments that finished updating to this release (excludes initial provisions)"},"pendingCount":{"type":"integer","description":"Deployments currently targeting this release but not yet running it"},"avgDurationMs":{"type":"number","nullable":true,"description":"Average time from release creation until a deployment finished updating, in milliseconds"}},"required":["updatedCount","pendingCount","avgDurationMs"],"description":"Rollout stats, included when ?include=rollout is used"}}}]},"Release":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"projectId":{"type":"string","maxLength":128},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"setupFingerprints":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintMap"},{"description":"Per-target setup compatibility fingerprints for this release"}]},"rootDirectory":{"type":"string","nullable":true,"maxLength":256},"workspaceId":{"type":"string","maxLength":128}},"required":["id","projectId","version","createdAt","setupFingerprints","workspaceId"]},"CreateReleaseRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256}},"required":["project"]},"ReleaseAuthorFilterItem":{"type":"object","properties":{"login":{"type":"string","nullable":true,"description":"Provider username (e.g., GitHub login)"},"name":{"type":"string","nullable":true,"description":"Git commit author name"},"avatarUrl":{"type":"string","nullable":true,"format":"uri","description":"Author avatar URL"}},"required":["login","name","avatarUrl"]},"DeploymentListItemResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if in a failed state"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"$ref":"#/components/schemas/ManagerID"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentProtocolVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DeploymentState protocol version owned by the runtime/manager"},"OperatorCapabilityReport":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":128},"state":{"$ref":"#/components/schemas/OperatorCapabilityState"},"detail":{"type":"string","nullable":true,"maxLength":512}},"required":["key","state"]},"OperatorCapabilityState":{"type":"string","enum":["granted","denied","unavailable"]},"ManagerID":{"type":"string","pattern":"mgr_[0-9a-z]{28}$","description":"ID of the manager","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"DeploymentReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","version","createdAt"]},"DeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"}},"required":["id","name"]},"DeploymentProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"}},"required":["id","name"]},"DeploymentStats":{"type":"object","properties":{"total":{"type":"number","description":"Total number of deployments matching filters"},"byStatus":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by status (only includes statuses with non-zero counts)"},"byPlatform":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by platform (only includes platforms with non-zero counts)"},"byCurrentRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by currentReleaseId. The empty string key represents deployments with no current release (initial provisioning)."},"byPinnedRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by pinnedReleaseId among deployments that are pinned. Excludes unpinned deployments."}},"required":["total","byStatus","byPlatform","byCurrentRelease","byPinnedRelease"]},"DeploymentDetailResponse":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}}}]},"Deployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"targetEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of target environment variables for the deployment"},"currentEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of current environment variables for the deployment"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentConnectionInfo":{"type":"object","properties":{"arc":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Manager URL for commands"},"deploymentId":{"type":"string","description":"Deployment ID to use in command requests"}},"required":["url","deploymentId"]},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"publicEndpoints":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"protocol":{"type":"string","enum":["http","tcp"]},"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"wildcardHost":{"type":"string"}},"required":["url","protocol","host","port"]},"description":"Public endpoints keyed by endpoint name."}},"required":["type"]},"description":"Deployed resources and their public endpoints"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"platform":{"type":"string"}},"required":["arc","resources","status","platform"]},"CreateDeploymentResponse":{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Effective deployment model persisted for the deployment."},"token":{"type":"string","description":"Deployment token (only returned when using deployment group token)"}},"required":["deployment","deploymentModel"]},"NewDeploymentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentGroupId":{"type":"string","description":"Required for workspace/project tokens. Deployment group tokens use their own group automatically."},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Optional manager to assign. If omitted, the project default or system manager is selected."}]},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"Stack settings for deployment customization"},"resourcePrefix":{"$ref":"#/components/schemas/ResourcePrefix"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method that created the deployment. Defaults to cli."}]},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup method metadata used to guide privileged teardown."}]},"inputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{},"description":"Stack input values provided by the deployment creator."},"operatorScope":{"type":"string","minLength":1,"maxLength":512,"description":"Display-only scope reported by the Operator manifest."},"operatorPermission":{"type":"string","minLength":1,"maxLength":64,"description":"Display-only permission tier reported by the Operator manifest."},"initialDesiredRelease":{"type":"string","enum":["active","none"],"default":"active","description":"Desired-release selection for a new deployment. Use none to register an environment without initially requesting a release; later updates can assign one."}},"required":["name","platform","project"],"additionalProperties":false,"description":"Request schema for creating a new deployment"},"ResourcePrefix":{"type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?=[a-z0-9])){1,38}[a-z0-9]$","description":"Optional physical-name prefix for generated cloud resources. Omit to let the manager generate one."},"ImportDeploymentRequest":{"oneOf":[{"$ref":"#/components/schemas/ForwardImportRequest"},{"$ref":"#/components/schemas/PersistImportedDeploymentRequest"}],"description":"Request schema for importing a deployment from resolved setup infrastructure"},"ForwardImportRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["forward"],"default":"forward"},"project":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user-session callers."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Required for user-session callers. Deployment-group tokens use their own group automatically.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager ID. If omitted, the first suitable manager for the source platform is used."}]},"source":{"$ref":"#/components/schemas/ImportSource"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["source"]},"ImportSource":{"type":"object","properties":{"deploymentName":{"type":"string","minLength":1,"description":"User-chosen deployment name. Must be unique within the deployment group; the manager returns 409 on collision."},"resourcePrefix":{"allOf":[{"$ref":"#/components/schemas/ResourcePrefix"},{"description":"Stable physical-name prefix used by the setup artifact."}]},"sourceKind":{"$ref":"#/components/schemas/ImportSourceKind"},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup source metadata needed to guide privileged teardown."}]},"releaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release that produced the setup artifact. Defaults to latest.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Cloud platform of the imported stack"},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"region":{"type":"string","description":"Region or location reported by the setup artifact"},"setupTarget":{"allOf":[{"$ref":"#/components/schemas/SetupTarget"},{"description":"Setup target this package was generated for"}]},"setupImportFormatVersion":{"$ref":"#/components/schemas/SetupImportFormatVersion"},"setupFingerprint":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprint"},{"description":"Setup compatibility fingerprint embedded in the package"}]},"setupFingerprintVersion":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintVersion"},{"description":"Setup fingerprint algorithm version embedded in the package"}]},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ImportedResource"},"minItems":1}},"required":["deploymentName","resourcePrefix","platform","region","setupTarget","setupImportFormatVersion","setupFingerprint","setupFingerprintVersion","stackSettings","resources"],"description":"Resolved setup import payload"},"ImportSourceKind":{"type":"string","enum":["cloudformation","terraform","helm"],"description":"Source label for observability only — does not affect import behavior."},"KubernetesBasePlatform":{"type":"string","enum":["aws","gcp","azure"],"description":"Base cloud platform for cloud-backed Kubernetes imports."},"SetupImportFormatVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup import payload format version embedded in the package"},"ImportedResource":{"type":"object","properties":{"id":{"type":"string","description":"Resource id from the active stack"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"importData":{"type":"object","additionalProperties":{"nullable":true},"description":"Resolved typed import payload"}},"required":["id","type","importData"]},"PersistImportedDeploymentRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["persist"]},"name":{"type":"string","minLength":1,"description":"Deployment name. Must be unique within the deployment group."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"stackState":{"nullable":true},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"runtimeMetadata":{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},"scheduleReconciliation":{"type":"boolean","default":false},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"default":"provisioning","description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"currentReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"setupMetadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"setupTarget":{"$ref":"#/components/schemas/SetupTarget"},"setupFingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"setupFingerprintVersion":{"$ref":"#/components/schemas/SetupFingerprintVersion"},"deploymentToken":{"type":"string"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["mode","name","deploymentGroupId","managerId","platform","stackSettings","runtimeMetadata","deploymentProtocolVersion","setupTarget","setupFingerprint","setupFingerprintVersion"]},"SetFirstPartyDeploymentInputsResponse":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"SetFirstPartyDeploymentInputsRequest":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["platform"]},"SetupRegistrationOperationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"status":{"$ref":"#/components/schemas/SetupRegistrationOperationStatus"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"physicalResourceId":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/SetupRegistrationOperationResult"},"error":{"type":"object","nullable":true,"properties":{"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["message","retryable"]}},"required":["id","action","sourceKind","status","deploymentId","physicalResourceId","result","error"]},"SetupRegistrationAction":{"type":"string","enum":["create","update","delete"]},"SetupRegistrationOperationStatus":{"type":"string","enum":["pending","processing","waiting-for-handoff","succeeded","failed","responding","responded"]},"SetupRegistrationOperationResult":{"type":"object","nullable":true,"properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deploymentToken":{"type":"string","nullable":true},"helmValues":{"type":"string","nullable":true}},"required":["deploymentId","deploymentToken","helmValues"]},"CreateSetupRegistrationOperationRequest":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"source":{"allOf":[{"$ref":"#/components/schemas/ImportSource"}],"nullable":true},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":512},"cloudFormation":{"$ref":"#/components/schemas/SetupRegistrationCloudFormationTarget"}},"required":["action","sourceKind"],"additionalProperties":false},"SetupRegistrationCloudFormationTarget":{"type":"object","nullable":true,"properties":{"stackId":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"logicalResourceId":{"type":"string","minLength":1},"responseUrl":{"type":"string","format":"uri"},"physicalResourceId":{"type":"string","nullable":true,"minLength":1},"serviceTimeoutSeconds":{"type":"integer","minimum":60,"maximum":7200,"default":3300}},"required":["stackId","requestId","logicalResourceId","responseUrl"],"additionalProperties":false},"DeleteDeploymentResponse":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]},"message":{"type":"string"}},"required":["action","message"]},"DeleteDeploymentRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]}},"required":["action"]},"PinReleaseRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release ID to pin the deployment to. Set to null to unpin and use active release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for pinning/unpinning deployment release"},"DeploymentInputsResponse":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"description":"Current non-secret input values. Secret values are never returned."},"providedInputIds":{"type":"array","items":{"type":"string"},"description":"Input IDs that currently have a value, including redacted secrets."}},"required":["inputs","values","providedInputIds"]},"UpdateDeploymentInputsResponse":{"allOf":[{"$ref":"#/components/schemas/DeploymentInputsResponse"},{"type":"object","properties":{"runtimeUpdateRequested":{"type":"boolean"}},"required":["runtimeUpdateRequested"]}]},"UpdateDeploymentInputsRequest":{"type":"object","properties":{"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"clearInputIds":{"type":"array","items":{"type":"string"},"default":[]}},"additionalProperties":false},"UpdateDeploymentEnvironmentVariablesRequest":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"type":{"type":"string","enum":["plain","secret"],"description":"Variable type"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources)"}},"required":["name","value","type"]},"description":"Environment variables for the deployment"}},"required":["variables"],"additionalProperties":false,"description":"Request schema for updating deployment environment variables"},"CreateDeploymentTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The generated deployment token (only shown once)"},"deploymentId":{"type":"string","description":"The deployment ID that this token is scoped to"}},"required":["token","deploymentId"]},"CreateDeploymentTokenRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128,"description":"Optional description for the deployment token"},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiration date for the deployment token"}},"required":["description"]},"CreateManagerResponse":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["pending"]},"setupToken":{"type":"string"},"setupTokenId":{"type":"string"},"deploymentLink":{"type":"string"},"setupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["plain","secret"]},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["name","type","targetResources"]}}},"required":["metadata","policy","environmentVariables"]},"setup":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["cloudformation"]},"deploymentPortalUrl":{"type":"string"},"launchUrl":{"type":"string"},"templateUrl":{"type":"string"},"stackName":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","launchUrl","templateUrl","stackName","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["google-oauth"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"oauthStartUrl":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","oauthStartUrl","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["terraform"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"providerSource":{"type":"string"},"moduleSource":{"type":"string"},"moduleVersion":{"type":"string"},"moduleInputs":{"type":"object","additionalProperties":{"type":"string"}},"mainTf":{"type":"string"},"tfvars":{"type":"string"},"commands":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","providerSource","moduleSource","moduleInputs","mainTf","tfvars","commands","stackSettings"]}]}},"required":["managerId","setupStatus","setupToken","setupTokenId","deploymentLink","setupConfig","setup"]},"NewManagerRequest":{"type":"object","properties":{"name":{"type":"string"},"cloud":{"$ref":"#/components/schemas/PrivateManagerCloud"},"region":{"type":"string","minLength":1,"maxLength":64,"description":"Cloud region for the manager."},"setupMethod":{"$ref":"#/components/schemas/PrivateManagerSetupMethod"},"network":{"type":"string","enum":["create","default"],"description":"Optional network mode for the private-manager setup. Defaults to create for production isolation; default uses the provider default network for faster dev/test setup."},"otlpConfig":{"type":"object","properties":{"logsEndpoint":{"type":"string","format":"uri","description":"External OTLP logs endpoint (e.g. https://api.axiom.co/v1/logs)"},"logsAuthHeader":{"type":"string","description":"Auth header in 'key=value,...' format (e.g. 'authorization=Bearer ,x-axiom-dataset=')"}},"required":["logsEndpoint","logsAuthHeader"],"description":"Optional external OTLP config for forwarding logs to Axiom, Datadog, etc. Falls back to built-in DeepStore when not set."}},"required":["name","cloud","region"]},"PrivateManagerCloud":{"type":"string","enum":["aws","gcp","azure"],"description":"Cloud where the private manager will be deployed."},"PrivateManagerSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform"],"description":"Optional setup method. Defaults to cloudformation for AWS, google-oauth for GCP, and terraform for Azure."},"ManagerRetryResponse":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/CreateManagerResponse"},{"type":"object","properties":{"mode":{"type":"string","enum":["setup"]}},"required":["mode"]}]},{"$ref":"#/components/schemas/ManagerRetryDeploymentResponse"}]},"ManagerRetryDeploymentResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["deployment"]},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["provisioning"]},"deploymentId":{"type":"string"},"message":{"type":"string"}},"required":["mode","managerId","setupStatus","deploymentId","message"]},"Manager":{"type":"object","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for the manager"}]},"name":{"type":"string","description":"Display name of the manager"},"targets":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms this manager can handle"},"cloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where this private manager is deployed"},"region":{"type":"string","nullable":true,"description":"Cloud region selected for this private manager"},"setupStatus":{"type":"string","nullable":true,"enum":["pending","provisioning","active","failed","deleting","deleted",null],"description":"Private manager setup lifecycle status"},"url":{"type":"string","nullable":true,"format":"uri","description":"Manager URL (self-reported via heartbeat). DeepStore endpoints are exposed through this URL (e.g., {url}/v1/logs)"},"managementConfigs":{"$ref":"#/components/schemas/ManagerManagementConfigs"},"isSystem":{"type":"boolean","description":"Whether this is a system manager (Alien-hosted)"},"workspaceId":{"type":"string","description":"The workspace ID (for system managers, this is ALIEN_WORKSPACE_ID)"},"status":{"$ref":"#/components/schemas/ManagerStatus"},"version":{"type":"string","nullable":true,"description":"Manager version (self-reported via heartbeat)"},"metrics":{"type":"object","nullable":true,"properties":{"activeDeployments":{"type":"number","description":"Number of active deployments"},"pendingDeployments":{"type":"number","description":"Number of pending deployments"},"memoryUsageMb":{"type":"number","description":"Memory usage in megabytes"},"cpuUsagePercent":{"type":"number","description":"CPU usage percentage"}},"description":"Runtime metrics (self-reported via heartbeat)"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the manager"},"logsDatabaseId":{"type":"string","nullable":true,"description":"ID of the logs database associated with this manager"},"managedDeploymentCount":{"type":"integer","minimum":0,"description":"Number of deployments currently being managed by this manager"},"defaultProjectCount":{"type":"integer","minimum":0,"description":"Number of projects that select this manager as a default manager"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the manager was created"}},"required":["id","name","targets","managementConfigs","isSystem","workspaceId","status","managedDeploymentCount","defaultProjectCount","createdAt"],"description":"Manager schema"},"ManagerManagementConfigs":{"type":"object","properties":{"aws":{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"},"platform":{"type":"string","enum":["aws"]}},"required":["managingRoleArn","platform"]},"gcp":{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"},"platform":{"type":"string","enum":["gcp"]}},"required":["serviceAccountEmail","platform"]},"azure":{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."},"platform":{"type":"string","enum":["azure"]}},"required":["managingTenantId","oidcIssuer","oidcSubject","platform"]},"kubernetes":{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}},"description":"Per-platform management configurations for cross-account access (self-reported via heartbeat)"},"ManagerStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"],"description":"Current health status"},"ManagerDomainBindingResponse":{"type":"object","properties":{"managerDomainBinding":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["managerDomainBinding"]},"UpdateManagerDomainBinding":{"type":"object","properties":{"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"}},"additionalProperties":false},"UpdateManagerRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Optional release ID to update to. If not provided, the active release will be chosen","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for updating a manager to a new release"},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"debugSessionId":{"type":"string","nullable":true,"pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"data":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["LoadingConfiguration"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["Finished"]}},"required":["type"]},{"type":"object","properties":{"stack":{"type":"string","description":"Name of the stack being built"},"type":{"type":"string","enum":["BuildingStack"]}},"required":["stack","type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform being targeted"},"stack":{"type":"string","description":"Name of the stack being checked"},"type":{"type":"string","enum":["RunningPreflights"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"targetTriple":{"type":"string","description":"Target triple for the runtime"},"type":{"type":"string","enum":["DownloadingAlienRuntime"]},"url":{"type":"string","description":"URL being downloaded from"}},"required":["targetTriple","type","url"]},{"type":"object","properties":{"relatedResources":{"type":"array","items":{"type":"string"},"description":"All resource names sharing this build (for deduped container groups)"},"resourceName":{"type":"string","description":"Name of the resource being built"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["BuildingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being built"},"type":{"type":"string","enum":["BuildingImage"]}},"required":["image","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being pushed"},"progress":{"oneOf":[{"type":"object","properties":{"bytesUploaded":{"type":"integer","minimum":0,"description":"Bytes uploaded so far"},"layersUploaded":{"type":"integer","minimum":0,"description":"Number of layers uploaded so far"},"operation":{"type":"string","description":"Current operation being performed"},"totalBytes":{"type":"integer","minimum":0,"description":"Total bytes to upload"},"totalLayers":{"type":"integer","minimum":0,"description":"Total number of layers to upload"}},"required":["bytesUploaded","layersUploaded","operation","totalBytes","totalLayers"],"description":"Progress information for image push operations"},{"nullable":true}]},"type":{"type":"string","enum":["PushingImage"]}},"required":["image","type"]},{"type":"object","properties":{"destination":{"type":"string","nullable":true,"description":"Human-readable destination for pushed images"},"platform":{"type":"string","description":"Target platform"},"stack":{"type":"string","description":"Name of the stack being pushed"},"type":{"type":"string","enum":["PushingStack"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"resourceName":{"type":"string","description":"Name of the resource being pushed"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["PushingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"project":{"type":"string","description":"Project name"},"type":{"type":"string","enum":["CreatingRelease"]}},"required":["project","type"]},{"type":"object","properties":{"language":{"type":"string","description":"Language being compiled (rust, typescript, etc.)"},"progress":{"type":"string","nullable":true,"description":"Current progress/status line from the build output"},"type":{"type":"string","enum":["CompilingCode"]}},"required":["language","type"]},{"type":"object","properties":{"nextState":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},"suggestedDelayMs":{"type":"integer","nullable":true,"minimum":0,"description":"An suggested duration to wait before executing the next step."},"type":{"type":"string","enum":["StackStep"]}},"required":["nextState","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["GeneratingCloudFormationTemplate"]}},"required":["type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform for which the template is being generated"},"type":{"type":"string","enum":["GeneratingTemplate"]}},"required":["platform","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being provisioned"},"releaseId":{"type":"string","description":"ID of the release being deployed to the agent"},"type":{"type":"string","enum":["ProvisioningAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being updated"},"releaseId":{"type":"string","description":"ID of the new release being deployed to the agent"},"type":{"type":"string","enum":["UpdatingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being deleted"},"releaseId":{"type":"string","description":"ID of the release that was running on the agent"},"type":{"type":"string","enum":["DeletingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being debugged"},"debugSessionId":{"type":"string","description":"ID of the debug session"},"type":{"type":"string","enum":["DebuggingAgent"]}},"required":["agentId","debugSessionId","type"]},{"type":"object","properties":{"strategyName":{"type":"string","description":"Name of the deployment strategy being used"},"type":{"type":"string","enum":["PreparingEnvironment"]}},"required":["strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being deployed"},"type":{"type":"string","enum":["DeployingStack"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being tested"},"type":{"type":"string","enum":["RunningTestWorker"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpStack"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpEnvironment"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"platformName":{"type":"string","description":"Name of the platform (e.g., \"AWS\", \"GCP\")"},"type":{"type":"string","enum":["SettingUpPlatformContext"]}},"required":["platformName","type"]},{"type":"object","properties":{"repositoryName":{"type":"string","description":"Name of the docker repository"},"type":{"type":"string","enum":["EnsuringDockerRepository"]}},"required":["repositoryName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeployingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"roleArn":{"type":"string","description":"ARN of the role to assume"},"type":{"type":"string","enum":["AssumingRole"]}},"required":["roleArn","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"type":{"type":"string","enum":["ImportingStackStateFromCloudFormation"]}},"required":["cfnStackName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeletingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"bucketNames":{"type":"array","items":{"type":"string"},"description":"Names of the S3 buckets being emptied"},"type":{"type":"string","enum":["EmptyingBuckets"]}},"required":["bucketNames","type"]},{"type":"object","properties":{"deploymentGroupId":{"type":"string","description":"ID of the deployment group this slot belongs to"},"deploymentId":{"type":"string","description":"ID of the deployment that was created"},"releaseId":{"type":"string","nullable":true,"description":"Initial release the slot was created with, if any"},"type":{"type":"string","enum":["DeploymentCreated"]}},"required":["deploymentGroupId","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousReleaseId":{"type":"string","nullable":true,"description":"ID of the release that was previously live, if any"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentReleased"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release the platform was trying to deploy, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"phase":{"type":"string","enum":["preflights","provisioning","updating","deleting"],"description":"Phase of a deployment at which a failure occurred.\n\nDerived from the source deployment status: `preflights-failed` →\n`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →\n`Updating`, `delete-failed` → `Deleting`.\n`refresh-failed` is modelled separately via `DeploymentDegraded`."},"type":{"type":"string","enum":["DeploymentFailed"]}},"required":["deploymentId","error","phase","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"type":{"type":"string","enum":["DeploymentDegraded"]}},"required":["deploymentId","error","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentRecovered"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment that was deleted"},"type":{"type":"string","enum":["DeploymentDeleted"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release that the failed attempt was targeting, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"previousError":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"type":{"type":"string","enum":["DeploymentRetryRequested"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release being redeployed"},"type":{"type":"string","enum":["DeploymentRedeployRequested"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"pinnedReleaseId":{"type":"string","description":"ID of the release that is now pinned"},"previousPinnedReleaseId":{"type":"string","nullable":true,"description":"ID of the previously pinned release, if any"},"type":{"type":"string","enum":["DeploymentReleasePinned"]}},"required":["deploymentId","pinnedReleaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousPinnedReleaseId":{"type":"string","description":"ID of the release that was previously pinned"},"type":{"type":"string","enum":["DeploymentReleaseUnpinned"]}},"required":["deploymentId","previousPinnedReleaseId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"changedKeys":{"type":"array","items":{"type":"string"},"description":"Names of the environment variables that changed (added, removed, or modified)"},"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentEnvironmentUpdated"]}},"required":["changedKeys","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentDeletionRequested"]}},"required":["deploymentId","type"]}]},"state":{"oneOf":[{"type":"object","properties":{"failed":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]}},"description":"Event failed with an error"}},"required":["failed"]},{"type":"string","enum":["none"]},{"type":"string","enum":["started"]},{"type":"string","enum":["success"]}],"description":"Represents the state of an event"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","data","state","projectId","createdAt","workspaceId"]},"GenerateManagerTokenResponse":{"type":"object","properties":{"accessToken":{"type":"string","description":"Platform JWT for authenticating with the manager"},"expiresIn":{"type":"number","nullable":true,"description":"Token lifetime in seconds"},"tokenType":{"type":"string","enum":["Bearer"]},"managerUrl":{"type":"string","description":"Manager URL for direct access"},"databaseId":{"type":"string","nullable":true,"description":"Log database ID (null if logs not configured)"},"controlPlaneUrl":{"type":"string","nullable":true,"description":"Log control plane URL (null if logs not configured)"}},"required":["accessToken","expiresIn","tokenType","managerUrl","databaseId","controlPlaneUrl"]},"GenerateManagerTokenRequest":{"type":"object","properties":{"project":{"type":"string","minLength":1,"maxLength":100,"description":"Project ID or name to scope token access to."}},"required":["project"],"additionalProperties":false},"GenerateManagerBindingTokenRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Exact deployment whose remote bindings may be resolved.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"GenerateManagerCommandTokenRequest":{"type":"object","properties":{"commandId":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Exact command whose encrypted payload may be read.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"}},"required":["commandId"],"additionalProperties":false},"ResolveManagerGcpOAuthProviderResponse":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId","clientSecret"]}]},"ResolveManagerGcpOAuthProviderRequest":{"type":"object","properties":{"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group bearer token whose project-level OAuth provider should be resolved."},"returnOrigin":{"type":"string","format":"uri","description":"Browser origin that will receive the Google OAuth callback result. Must be a first-party dashboard origin or the active portal origin for the deployment group's project."}},"required":["deploymentGroupToken"]},"ManagerHeartbeatResponse":{"type":"object","properties":{"acknowledged":{"type":"boolean"},"timestamp":{"type":"string"}},"required":["acknowledged","timestamp"]},"ManagerHeartbeatRequest":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Current health status"},"version":{"type":"string","description":"Manager version"},"url":{"type":"string","format":"uri","description":"Manager public URL (for accessing DeepStore endpoints)"},"managementConfigs":{"allOf":[{"$ref":"#/components/schemas/ManagerManagementConfigs"},{"description":"Per-platform management configurations for cross-account access"}]},"metrics":{"type":"object","properties":{"activeDeployments":{"type":"number"},"pendingDeployments":{"type":"number"},"memoryUsageMb":{"type":"number"},"cpuUsagePercent":{"type":"number"}},"description":"Optional runtime metrics"}},"required":["status","url","managementConfigs"]},"ManagerDeployment":{"type":"object","properties":{"platform":{"type":"string","description":"Platform of the internal deployment"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status of the internal deployment"},"deploymentId":{"type":"string","description":"Internal deployment ID"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Currently deployed private manager release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Target private manager release for an in-progress update","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"error":{"nullable":true,"description":"Latest provision / upgrade / delete error"},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type"},"status":{"type":"string","description":"Resource status"},"outputs":{"type":"object","additionalProperties":{"nullable":true},"description":"Resource outputs"}},"required":["type","status"]},"description":"Simplified stack state resources"},"environmentInfo":{"nullable":true,"description":"Manager environment info"}},"required":["platform","status","deploymentId","resources"]},"PrepareOperatorManifestPackageResponse":{"type":"object","properties":{"package":{"$ref":"#/components/schemas/Package"}},"required":["package"]},"PrepareOperatorManifestPackageRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}},"required":["project"],"additionalProperties":false},"RenderOperatorManifestResponse":{"type":"object","properties":{"manifest":{"type":"string","description":"Rendered multi-document Kubernetes manifest"},"applyCommand":{"type":"string","description":"kubectl command for applying the manifest from a file"},"filename":{"type":"string","description":"Suggested local filename"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL embedded in the manifest"},"imagePending":{"type":"boolean","description":"True when the operator image is still building. The manifest contains a placeholder image () and must not be applied yet — re-render once the operator-image package is ready to get the real image."}},"required":["manifest","applyCommand","filename","managerUrl","imagePending"]},"RenderOperatorManifestRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"format":{"type":"string","enum":["raw","helm"],"default":"raw","description":"raw: a kubectl-applyable manifest for one cluster. helm: a paste-into-your-chart template whose namespace and environment name come from Helm at install time."},"environmentName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Per-environment identity. Required for raw output, ignored for helm.","example":"my-app"},"namespace":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$","description":"Namespace to observe and install into. Omit for helm to use the release namespace."},"scope":{"type":"string","enum":["namespace","cluster"],"default":"namespace","description":"namespace: a namespaced Role that manages the install namespace. cluster: a ClusterRole that manages every namespace."},"labelSelector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional Kubernetes label selector narrowing what is managed, applied within the scope."},"permission":{"type":"string","enum":["observe"],"default":"observe","description":"Operator permission tier"},"operatorImagePackageId":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Ready operator-image package to use for the Operator image. If omitted, the latest ready operator-image package for the project is used.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group token embedded in the operator Secret"},"logCollector":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"description":"Enable the node log collector DaemonSet for raw pod logs."}},"required":["project","deploymentGroupToken"],"additionalProperties":false},"APIKey":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["id","email","image"],"description":"User information associated with the API key"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig","createdByUser"],"description":"API key information"},"APIKeyDeploymentSetupConfig":{"type":"object","nullable":true,"properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDeploymentSetupEnvironmentVariable"}}},"required":["metadata","policy","environmentVariables"]},"APIKeyDeploymentSetupEnvironmentVariable":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]},"CreateAPIKeyResponse":{"type":"object","properties":{"apiKey":{"type":"string","description":"The generated API key value (only shown once)"},"keyInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig"]}},"required":["apiKey","keyInfo"],"description":"Response containing the new API key and its metadata"},"CreateAPIKeyRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"scope":{"$ref":"#/components/schemas/Scope"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"required":["description","scope","expiresAt"],"description":"Request schema for creating a new API key"},"Scope":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceScope"},{"$ref":"#/components/schemas/ProjectScope"},{"$ref":"#/components/schemas/DeploymentScope"},{"$ref":"#/components/schemas/DeploymentGroupScope"},{"$ref":"#/components/schemas/ManagerScope"}],"discriminator":{"propertyName":"type","mapping":{"workspace":"#/components/schemas/WorkspaceScope","project":"#/components/schemas/ProjectScope","deployment":"#/components/schemas/DeploymentScope","deployment-group":"#/components/schemas/DeploymentGroupScope","manager":"#/components/schemas/ManagerScope"}},"description":"Scope and role configuration for service accounts"},"WorkspaceScope":{"type":"object","properties":{"type":{"type":"string","enum":["workspace"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["type","role"],"description":"Workspace-scoped configuration"},"ProjectScope":{"type":"object","properties":{"type":{"type":"string","enum":["project"]},"projectId":{"type":"string","description":"ID of the project this is scoped to"},"role":{"$ref":"#/components/schemas/ProjectRole"}},"required":["type","projectId","role"],"description":"Project-scoped configuration"},"DeploymentScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"deploymentId":{"type":"string","description":"ID of the deployment this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"},"role":{"$ref":"#/components/schemas/DeploymentRole"}},"required":["type","deploymentId","projectId","role"],"description":"Deployment-scoped configuration"},"DeploymentGroupScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"]},"deploymentGroupId":{"type":"string","description":"ID of the deployment group this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"},"role":{"$ref":"#/components/schemas/DeploymentGroupRole"}},"required":["type","deploymentGroupId","projectId","role"],"description":"Deployment group-scoped configuration"},"ManagerScope":{"type":"object","properties":{"type":{"type":"string","enum":["manager"]},"managerId":{"type":"string","description":"ID of the manager this is scoped to"},"role":{"$ref":"#/components/schemas/ManagerRole"}},"required":["type","managerId","role"],"description":"Manager-scoped configuration"},"UpdateAPIKeyRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"deploymentSetupConfig":{"$ref":"#/components/schemas/UpdateDeploymentSetupPolicy"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"description":"Request schema for updating an API key"},"UpdateDeploymentSetupPolicy":{"type":"object","properties":{"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"}},"required":["policy"],"description":"Editable part of a deployment link's setup config. Locked env vars and input values are preserved."},"DeleteAPIKeysRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"minItems":1}},"required":["ids"]},"DomainWithUsage":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DomainEndpoint"}},"usage":{"type":"object","properties":{"deploymentUrlProjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"portalBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true},"hostname":{"type":"string"}},"required":["id","projectId","projectName","hostname"]}},"packageDomains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]}},"managerBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"managerId":{"type":"string"},"managerName":{"type":"string"},"hostname":{"type":"string"}},"required":["id","managerId","managerName","hostname"]}}},"required":["deploymentUrlProjects","portalBindings","packageDomains","managerBindings"]}},"required":["endpoints","usage"]}]},"Domain":{"type":"object","properties":{"id":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domain":{"type":"string"},"isSystem":{"type":"boolean"},"claimToken":{"type":"string"},"hostedZoneId":{"type":"string","nullable":true},"nameServers":{"type":"array","nullable":true,"items":{"type":"string"}},"status":{"type":"string","enum":["pending-zone-creation","pending-verification","verified","lost-verification","failed","deleting"]},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"verifiedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","workspaceId","domain","isSystem","claimToken","status","createdAt","updatedAt"]},"EventListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"releaseCreatedAt":{"type":"string","format":"date-time","description":"createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used"}}}]},"ListMachinesJoinTokensResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"}}},"required":["tokens"]},"MachinesJoinTokenSummary":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"maxJoins":{"type":"integer","nullable":true},"joinCount":{"type":"integer"},"lastUsedAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true}},"required":["id","createdAt","createdBy","joinCount"]},"CreateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RotateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RevokeMachinesJoinTokenResponse":{"type":"object","properties":{"tokenId":{"type":"string"},"revoked":{"type":"boolean"}},"required":["tokenId","revoked"]},"ListMachinesInventoryResponse":{"type":"object","properties":{"machines":{"type":"array","items":{"$ref":"#/components/schemas/MachinesInventoryItem"}}},"required":["machines"]},"MachinesInventoryItem":{"type":"object","properties":{"machineId":{"type":"string"},"status":{"type":"string"},"capacityGroup":{"type":"string"},"zone":{"type":"string"},"cpu":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"memory":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"storage":{"allOf":[{"$ref":"#/components/schemas/MachinesCapacityMetric"}],"nullable":true},"drainBlockers":{"type":"array","items":{"$ref":"#/components/schemas/MachinesDrainBlocker"}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"overlayIp":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"horizondVersion":{"type":"string","nullable":true},"localOverrides":{"type":"array","items":{"$ref":"#/components/schemas/MachinesLocalOverrideObservation"}},"localOverridesObservedAt":{"type":"string","nullable":true},"replicaCount":{"type":"integer"}},"required":["machineId","status","capacityGroup","zone","cpu","memory","drainBlockers","drainForce","lastHeartbeat","localOverrides","replicaCount"]},"MachinesCapacityMetric":{"type":"object","properties":{"allocated":{"type":"number"},"systemReserve":{"type":"number"},"total":{"type":"number"}},"required":["allocated","systemReserve","total"]},"MachinesDrainBlocker":{"type":"object","properties":{"reason":{"type":"string"},"workloadId":{"type":"string","nullable":true},"workloadName":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true},"schedulingMode":{"type":"string","nullable":true},"state":{"type":"string","nullable":true}},"required":["reason"]},"MachinesLocalOverrideObservation":{"type":"object","properties":{"activeDigest":{"type":"string","nullable":true},"actor":{"type":"string","nullable":true},"baseAssignmentHash":{"type":"string"},"baseDigest":{"type":"string","nullable":true},"candidateDigest":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"failureCategory":{"type":"string","nullable":true},"fallbackDigest":{"type":"string","nullable":true},"forcedStop":{"type":"boolean","nullable":true},"healthySince":{"type":"string","nullable":true},"incidentId":{"type":"string","nullable":true},"lifecycle":{"type":"string"},"phaseStartedAt":{"type":"string","nullable":true},"replicaId":{"type":"string"},"workloadName":{"type":"string"}},"required":["baseAssignmentHash","lifecycle","replicaId","workloadName"]},"CancelMachinesMachineDrainResponse":{"type":"object","properties":{"machineId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["machineId","cancelled"]},"DrainMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"requested":{"type":"boolean"}},"required":["machineId","requested"]},"DrainMachinesMachineRequest":{"type":"object","properties":{"deadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"force":{"type":"boolean"}}},"RemoveMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"removed":{"type":"boolean"}},"required":["machineId","removed"]},"CommandListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Command"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/CommandDeploymentInfo"},"project":{"$ref":"#/components/schemas/CommandProjectInfo"}}}]},"CommandDeploymentInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"$ref":"#/components/schemas/CommandDeploymentGroupInfo"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"managerId":{"type":"string","description":"Manager ID for obtaining access tokens"},"managerUrl":{"type":"string","nullable":true,"format":"uri","description":"URL of the manager for direct payload access"},"managerName":{"type":"string","nullable":true,"description":"Human-readable name of the manager"},"managerIsSystem":{"type":"boolean","nullable":true,"description":"Whether the manager is Alien-hosted (system)"}},"required":["id","name","managerId"]},"CommandDeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CommandProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string"}},"required":["id","name"]},"Command":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","description":"Command name (e.g., 'analyze-repository', 'sync-data')"},"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Command states in the Commands protocol lifecycle"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Delivery mode for this command (push/pull), derived from the target at creation time"},"target":{"type":"object","nullable":true,"properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to; null on commands created before target routing"},"attempt":{"type":"number","nullable":true,"description":"Current attempt number"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","nullable":true,"description":"Size of command params in bytes"},"responseSizeBytes":{"type":"number","nullable":true,"description":"Size of command response in bytes"},"createdAt":{"type":"string","format":"date-time","description":"When the command was created"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command was dispatched to the deployment"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command completed"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if command failed"},"result":{"nullable":true,"description":"Decoded command result when available"}},"required":["id","deploymentId","projectId","workspaceId","name","state","deploymentModel","target","attempt","deadline","requestSizeBytes","responseSizeBytes","createdAt","dispatchedAt","completedAt","error"]},"ListCommandNamesResponse":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ListCommandDeploymentsResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name"]}}},"required":["deployments"]},"CreateCommandResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"projectId":{"type":"string","description":"Project ID (for manager to use in routing)"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"How to dispatch the command"},"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to"},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How the command is delivered to its target"}},"required":["id","projectId","deploymentModel","target","deliveryMode"]},"CreateCommandRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Target deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Command name (e.g., 'analyze-repository')"},"params":{"nullable":true,"description":"Command parameters for public invocation"},"target":{"type":"string","maxLength":255,"description":"Resource id the command is addressed to. Required when the deployment has more than one command-capable resource."},"initialState":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Initial state (PENDING_UPLOAD if params require upload, PENDING if inline)"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Size of command params in bytes"}},"required":["deploymentId","name"]},"ResolvedCommandTarget":{"type":"object","properties":{"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Identifies the specific resource a command is addressed to."},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How a command is delivered to its target resource.\n\nThis is a Commands-protocol-specific concept and is intentionally distinct\nfrom `DeploymentModel` (see `stack_settings.rs`), which governs the\ninfrastructure-level push/pull wiring for a deployment. Serialized\nlowercase for consistency with `CommandTargetType`."}},"required":["target","deliveryMode"]},"UpdateCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"New command state"},"attempt":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Current attempt number"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command was dispatched"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}}},"DispatchCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"DispatchCommandRequest":{"type":"object","properties":{"dispatchedAt":{"type":"string","format":"date-time","description":"When the command was dispatched"}},"required":["dispatchedAt"]},"CompleteCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"CompleteCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["SUCCEEDED","FAILED","EXPIRED"],"description":"Terminal state to transition to"},"completedAt":{"type":"string","format":"date-time","description":"When the command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}},"required":["state","completedAt"]},"IncrementCommandAttemptResponse":{"type":"object","properties":{"attempt":{"type":"integer","description":"The attempt number after the increment"}},"required":["attempt"]},"DebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"DebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"owner":{"type":"string","nullable":true,"maxLength":320},"state":{"$ref":"#/components/schemas/DebugSessionState"},"mode":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"provider":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"presignedUrls":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DebugPackagePresignedURLs"}},"error":{"$ref":"#/components/schemas/DebugSessionPublicError"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deployment":{"$ref":"#/components/schemas/DebugSessionDeployment"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","state","mode","presignedUrls","createdAt","expiresAt","deploymentId","deployment","projectId","workspaceId"]},"DebugSessionState":{"type":"string","enum":["pending","running","stopping","stopped","expired","failed"]},"DebugPackagePresignedURLs":{"type":"object","properties":{"readUrl":{"type":"string","maxLength":2048,"format":"uri"},"writeUrl":{"type":"string","maxLength":2048,"format":"uri"}},"required":["readUrl","writeUrl"]},"DebugSessionPublicError":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128},"context":{"$ref":"#/components/schemas/DebugSessionPublicErrorContext"},"hint":{"type":"string","nullable":true},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599},"internal":{"type":"boolean","enum":[false]},"message":{"type":"string","maxLength":16384},"retryable":{"type":"boolean"},"source":{"$ref":"#/components/schemas/DebugSessionPublicErrorCause"}},"required":["code","internal","message","retryable"]},"DebugSessionPublicErrorContext":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]}}]},"DebugSessionPublicErrorCause":{"type":"object","properties":{"code":{"type":"string","maxLength":128},"context":{"$ref":"#/components/schemas/DebugSessionPublicErrorContext"},"hint":{"type":"string","nullable":true},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599},"internal":{"type":"boolean","enum":[false]},"message":{"type":"string","maxLength":16384},"retryable":{"type":"boolean"}},"required":["code","internal","message","retryable"]},"DebugSessionDeployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"}},"required":["id","name"]},"platform":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"}},"required":["id","name"]},"ManagerActiveDebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ManagerActiveDebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"ManagerActiveDebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"state":{"$ref":"#/components/schemas/DebugSessionState"},"expiresAt":{"type":"string","format":"date-time"},"backendTargetId":{"type":"string","nullable":true,"maxLength":512}},"required":["id","deploymentId","state","expiresAt"]},"CreateDebugSessionRequest":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Override the generated id. Manager passes the registry session id so logs correlate.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"owner":{"type":"string","minLength":1,"maxLength":320,"description":"Original actor label attested by the assigned manager."},"expiresAt":{"type":"string","format":"date-time"},"backendTargetId":{"type":"string","minLength":1,"maxLength":512,"description":"Provider-owned target used for exact restart reconciliation."}},"required":["deploymentId","owner","expiresAt"]},"UpdateDebugSessionRequest":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/DebugSessionState"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."}}},"DeploymentInfo":{"type":"object","properties":{"tokenType":{"type":"string","enum":["deployment","deployment-group"],"description":"Type of token used to authenticate this request"},"deployment":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"required":["name","platform"],"description":"Deployment details (present when using a deployment-scoped token)"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"pinnedSubdomain":{"type":"string","nullable":true}},"required":["id","name","pinnedSubdomain"],"description":"Deployment group details (present when using a deployment-group token)"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatarUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name"]},"project":{"type":"object","properties":{"name":{"type":"string"},"portal":{"type":"object","properties":{"appearance":{"$ref":"#/components/schemas/DeploymentPortalAppearance"}},"required":["appearance"]},"stackSummary":{"type":"object","nullable":true,"properties":{"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms supported by the active release"},"requiresNetwork":{"type":"boolean","description":"Whether the stack contains resources that require cloud VPC networking"},"resourceCounts":{"type":"object","properties":{"workers":{"type":"integer","minimum":0},"containers":{"type":"integer","minimum":0},"publicHttpsEndpoints":{"type":"integer","minimum":0,"description":"Resources that declare managed public HTTPS endpoint setup"},"externalInfra":{"type":"integer","minimum":0,"description":"Storage, queue, KV, vault, database, or cache resources that Kubernetes needs Terraform to provision"},"total":{"type":"integer","minimum":0}},"required":["workers","containers","publicHttpsEndpoints","externalInfra","total"]},"publicEndpoints":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"endpointName":{"type":"string"},"hostLabel":{"type":"string"},"wildcardSubdomains":{"type":"boolean"}},"required":["resourceId","endpointName","hostLabel","wildcardSubdomains"]},"description":"Public endpoints declared by the active release stack"}},"required":["platforms","requiresNetwork","resourceCounts","publicEndpoints"]},"generatedDomain":{"type":"object","nullable":true,"properties":{"domain":{"type":"string"},"isSystem":{"type":"boolean"}},"required":["domain","isSystem"],"description":"Parent domain for generated deployment URLs. Chosen public subdomains are only allowed when isSystem is false."}},"required":["name","portal"]},"packages":{"type":"object","properties":{"ready":{"type":"boolean","description":"True if all enabled packages are ready for deployment"},"cli":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"commandName":{"type":"string","description":"CLI command name to use in install instructions"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},"error":{"nullable":true},"installScripts":{"type":"object","properties":{"windows":{"type":"string","format":"uri"},"mac":{"type":"string","format":"uri"},"linux":{"type":"string","format":"uri"}},"required":["windows","mac","linux"],"description":"Install script URLs for each OS"}},"required":["status","commandName","installScripts"]},"cloudformation":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},"error":{"nullable":true},"mode":{"type":"string","enum":["auto","outputs"]},"launchUrl":{"type":"string","format":"uri","description":"CloudFormation launch URL"},"outputsSchema":{"nullable":true}},"required":["status","mode","launchUrl"]},"terraform":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},"error":{"nullable":true},"providerSource":{"type":"string","description":"Terraform provider source (without https://)"},"moduleSources":{"type":"object","additionalProperties":{"type":"string"},"description":"Terraform module sources by target"},"moduleVersion":{"type":"string"},"managerUrls":{"type":"object","additionalProperties":{"type":"string"},"description":"Manager URLs by Terraform target"}},"required":["status","providerSource","moduleSources","managerUrls"]},"helm":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},"error":{"nullable":true},"chartRef":{"type":"string","description":"OCI chart reference"},"managerFetchExample":{"type":"string"},"localImportExample":{"type":"string"}},"required":["status","chartRef"]}},"required":["ready"]},"installContext":{"type":"object","properties":{"targets":{"type":"object","additionalProperties":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managerUrl":{"type":"string","format":"uri"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"awsManagingAccountId":{"type":"string"}},"required":["platform","managerUrl"]},"description":"Deployment-session install context by Terraform/installer target"}},"required":["targets"]},"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"},"setupConfig":{"$ref":"#/components/schemas/DeploymentInfoSetupConfig"},"readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ready","notReady","unknown"]},"checks":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["passed","failed","warning","unknown"]},"message":{"type":"string"},"checkedAt":{"type":"string"}},"required":["code","status","message","checkedAt"]}}},"required":["status","checks"]}},"required":["tokenType","workspace","project","packages","installContext","supportedRegions"]},"DeploymentPortalAppearance":{"type":"object","properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}}},"SupportedCloudRegions":{"type":"object","properties":{"aws":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by this Alien environment."},"gcp":{"type":"array","items":{"type":"string"},"description":"GCP regions supported by this Alien environment."},"azure":{"type":"array","items":{"type":"string"},"description":"Azure locations supported by this Alien environment."}},"required":["aws","gcp","azure"]},"DeploymentInfoSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]}},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"inputValues":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedStackInputSummary"}}},"required":["metadata","policy","environmentVariables"]},"ResolvedStackInputSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"]}},"required":{"type":"boolean"},"secret":{"type":"boolean"},"provided":{"type":"boolean"}},"required":["id","label","providedBy","required","secret","provided"]},"DeploymentComputePlan":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"poolId":{"type":"string"},"workloads":{"type":"array","items":{"type":"string"}},"requirements":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"scale":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"machines":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","machines"]},{"type":"object","properties":{"type":{"type":"string","enum":["autoscale"]},"min":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]},"max":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","min","max"]}]},"selected":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"recommended":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"machines":{"type":"array","items":{"type":"object","properties":{"machine":{"type":"string"},"profile":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"recommended":{"type":"boolean"}},"required":["machine","profile","recommended"]}},"errors":{"type":"array","items":{"type":"string"}}},"required":["poolId","workloads","requirements","scale","selected","recommended","machines"]}}},"required":["pools"]},"PreparedDeploymentStack":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"setup":{"$ref":"#/components/schemas/SetupFingerprintInfo"}},"required":["platform","stack","setup"]},"SlackInstallUrlResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"SlackIntegrationStatus":{"type":"object","properties":{"connected":{"type":"boolean"},"slackTeamId":{"type":"string","nullable":true},"slackTeamName":{"type":"string","nullable":true},"installedByUserId":{"type":"string","nullable":true},"installedAt":{"type":"string","nullable":true},"notificationChannelId":{"type":"string","nullable":true}},"required":["connected","slackTeamId","slackTeamName","installedByUserId","installedAt","notificationChannelId"]},"SlackChannelsResponse":{"type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}}},"required":["channels"]},"SlackChannel":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isMember":{"type":"boolean"}},"required":["id","name","isMember"]},"SlackNotificationChannelResponse":{"type":"object","properties":{"notificationChannelId":{"type":"string","nullable":true},"warning":{"type":"string","nullable":true}},"required":["notificationChannelId","warning"]},"SlackNotificationChannelRequest":{"type":"object","properties":{"channelId":{"type":"string","nullable":true}},"required":["channelId"]},"AgentSessionListResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionListItem"}}},"required":["sessions"]},"AgentSessionListItem":{"type":"object","properties":{"id":{"type":"string"},"triggerType":{"type":"string"},"subjectId":{"type":"string"},"subject":{"$ref":"#/components/schemas/AgentSessionSubject"},"status":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","triggerType","subjectId","subject","status","createdAt","updatedAt"]},"AgentSessionSubject":{"type":"object","properties":{"deploymentName":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"releaseId":{"type":"string","nullable":true},"releaseCommitMessage":{"type":"string","nullable":true},"releaseCommitRef":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true}},"required":["deploymentName","deploymentGroupId","deploymentGroupName","releaseId","releaseCommitMessage","releaseCommitRef","projectId","projectName"]},"AgentSessionDetail":{"allOf":[{"$ref":"#/components/schemas/AgentSessionListItem"},{"type":"object","properties":{"resultText":{"type":"string","nullable":true},"toolNames":{"type":"array","nullable":true,"items":{"type":"string"}},"error":{"type":"string","nullable":true},"pendingApproval":{"type":"object","nullable":true,"properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["resultText","toolNames","error","pendingApproval"]}]},"AgentSessionEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionEvent"}},"latestSeq":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["events","latestSeq","hasMore"]},"AgentSessionEvent":{"oneOf":[{"$ref":"#/components/schemas/AgentSessionStatusEvent"},{"$ref":"#/components/schemas/AgentSessionStepEvent"},{"$ref":"#/components/schemas/AgentSessionToolCallEvent"},{"$ref":"#/components/schemas/AgentSessionToolResultEvent"},{"$ref":"#/components/schemas/AgentSessionMarkdownEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalRequestedEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalGrantedEvent"},{"$ref":"#/components/schemas/AgentSessionRestartedEvent"},{"$ref":"#/components/schemas/AgentSessionEventsTruncatedEvent"}],"discriminator":{"propertyName":"type","mapping":{"status":"#/components/schemas/AgentSessionStatusEvent","step":"#/components/schemas/AgentSessionStepEvent","tool_call":"#/components/schemas/AgentSessionToolCallEvent","tool_result":"#/components/schemas/AgentSessionToolResultEvent","markdown":"#/components/schemas/AgentSessionMarkdownEvent","approval_requested":"#/components/schemas/AgentSessionApprovalRequestedEvent","approval_granted":"#/components/schemas/AgentSessionApprovalGrantedEvent","session_restarted":"#/components/schemas/AgentSessionRestartedEvent","events_truncated":"#/components/schemas/AgentSessionEventsTruncatedEvent"}}},"AgentSessionStatusEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["status"]},"payload":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionStepEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["step"]},"payload":{"type":"object","properties":{"stepId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["in_progress","complete","error"]}},"required":["stepId","title","status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolCallEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolResultEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_result"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string","nullable":true},"toolName":{"type":"string","nullable":true},"ok":{"type":"boolean"},"output":{"nullable":true}},"required":["toolCallId","toolName","ok"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionMarkdownEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["markdown"]},"payload":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalRequestedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_requested"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalGrantedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_granted"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"approvedByUserId":{"type":"string"},"approvedByName":{"type":"string","nullable":true},"source":{"type":"string","enum":["dashboard","slack"]}},"required":["approvalId","approvedByUserId","approvedByName","source"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionRestartedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["session_restarted"]},"payload":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionEventsTruncatedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["events_truncated"]},"payload":{"type":"object","properties":{"limit":{"type":"number"}},"required":["limit"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApproveResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"resumed":{"type":"boolean"}},"required":["jobId","status","resumed"]},"AgentSessionStopResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"canceled":{"type":"boolean"}},"required":["jobId","status","canceled"]},"SyncListResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"userEnvironmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"deploymentToken":{"type":"string","nullable":true},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId","userEnvironmentVariables"]}}},"required":["deployments"],"description":"Full deployment records for manager operation"},"SyncListRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. Manager-scoped tokens are always constrained to their own manager ID."}]},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to include"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment status"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by deployment platform"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Filter by deployment group ID","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum records to return"}},"additionalProperties":false,"description":"Request to list full operational deployments"},"SyncAcquireResponseDeployment":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Deployment group ID the deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method recorded on the deployment when it has a setup-owned path."}]},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state (includes releases)"},"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration"}},"required":["deploymentId","projectId","deploymentGroupId","current","config"]},"SyncContextRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the context. Manager-scoped tokens are constrained to their own manager ID."}]},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"SyncAcquireResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"},"description":"List of acquired deployments with deployment context"},"failures":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment that failed","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"error":{"allOf":[{"$ref":"#/components/schemas/APIError"},{"description":"Error that occurred during context building"}]}},"required":["deploymentId","projectId","error"]},"description":"List of deployments that failed during context building (locks already released)"}},"required":["deployments","failures"],"description":"Acquired deployments and failures"},"SyncAcquireRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. If omitted, resolved from each deployment's managerId column."}]},"session":{"type":"string","description":"Unique session identifier for lock tracking"},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to lock (for Pull model sync)"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment statuses (default: all deployment statuses)"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by platforms (default: all platforms the Manager supports)"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Filter by setup method for setup-owned acquisition paths"}]},"acquireMode":{"type":"string","enum":["runtime","setup-run","setup-teardown"],"description":"Phase ownership mode for deployment acquisition"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model from stackSettings.deploymentModel."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of deployments to acquire (default: 10)"}},"required":["session","deploymentModel"],"additionalProperties":false,"description":"Request to acquire deployments for processing"},"SyncReconcileResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the state was reconciled"},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state after reconciliation"},"target":{"type":"object","properties":{"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration\n\nConfiguration for how to perform the deployment.\nNote: Credentials (ClientConfig) are passed separately to step() function."},"releaseInfo":{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."}},"required":["config","releaseInfo"],"description":"Target deployment if update is needed"}},"required":["success","current"],"description":"State reconciliation result with optional target"},"SyncReconcileRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to reconcile state for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Lock session (push model only) - verifies lock ownership"},"state":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Complete deployment state after step() execution"},"updateHeartbeat":{"type":"boolean","description":"Update heartbeat timestamp (for successful health checks)"},"suggestedDelayMs":{"type":"integer","minimum":0,"description":"Delay before this deployment should be acquired again."},"resourceHeartbeats":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"description":"Latest typed resource heartbeats collected during this step."},"observedInventoryBatches":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"],"description":"Backend whose observer produced this snapshot."},"complete":{"type":"boolean","description":"Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`."},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inventoryScope":{"type":"string","description":"Stable scope for the provider list operation that produced this batch."},"observedAt":{"type":"string","format":"date-time","description":"Time the inventory scope was observed."},"resources":{"type":"array","items":{"type":"object","properties":{"alienResourceId":{"type":"string","nullable":true},"attributes":{"type":"object","properties":{},"additionalProperties":{"nullable":true}},"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"counts":{"oneOf":[{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},{"nullable":true}]},"deploymentId":{"type":"string","nullable":true},"displayName":{"type":"string"},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerKind":{"type":"string","description":"Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type."},"providerStale":{"type":"boolean"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"rawIdentity":{"type":"string","description":"Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc."},"region":{"type":"string","nullable":true},"resourceTypeHint":{"oneOf":[{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},{"nullable":true}]},"scope":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"description":"Release/version identity observed from the provider resource, when available."}},"required":["displayName","health","lifecycle","partial","providerKind","providerStale","rawIdentity"]}},"sourceKind":{"type":"string","description":"Writer/source for this inventory pass, such as `operator` or\n`manager-observer`."}},"required":["backend","complete","controllerPlatform","inventoryScope","observedAt","resources","sourceKind"]},"description":"Observed raw-resource inventory batches read during this step."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Operator-reported runtime capabilities."},"operatorVersion":{"type":"string","minLength":1,"maxLength":128,"description":"Operator binary version reported by the runtime."}},"required":["deploymentId","state"],"additionalProperties":false,"description":"Request to reconcile deployment state"},"SyncReleaseRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to release","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Session identifier to release"}},"required":["deploymentId","session"],"additionalProperties":false,"description":"Request to release deployment lock"},"ResolveResponse":{"type":"object","properties":{"managerId":{"type":"string","description":"Manager ID"},"managerName":{"type":"string","description":"Manager display name"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL"},"managerIsSystem":{"type":"boolean","description":"Whether the manager is Alien-hosted"},"managerCloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where the private manager is hosted. Null for Alien-hosted managers."},"projectId":{"type":"string","description":"Resolved project ID"},"installContext":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}},"required":["platform","managementConfig"],"description":"Target install context derived from platform-managed manager metadata. Present for cloud push platforms."}},"required":["managerId","managerName","managerUrl","managerIsSystem","projectId"]},"CloudRegionsResponse":{"type":"object","properties":{"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"}},"required":["supportedRegions"]},"BillingAuditLogRow":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"action":{"type":"string"},"payload":{"nullable":true},"createdAt":{"type":"string"}},"required":["id","workspaceId","action","createdAt"]},"WorkspaceBillingEntitlements":{"type":"object","properties":{"planId":{"$ref":"#/components/schemas/PlanId"},"planStatus":{"$ref":"#/components/schemas/BillingPlanStatus"},"features":{"$ref":"#/components/schemas/BillingFeatureFlags"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"syncedAt":{"type":"string","nullable":true,"format":"date-time"},"stale":{"type":"boolean"}},"required":["planId","planStatus","features","limits","syncedAt","stale"]},"PlanId":{"type":"string","enum":["starter","pro","pro_annual","enterprise"]},"BillingPlanStatus":{"type":"string","enum":["active","trialing","past_due","canceled","none"]},"BillingFeatureFlags":{"type":"object","properties":{"custom_domains":{"type":"boolean"},"private_managers":{"type":"boolean"},"sso_saml":{"type":"boolean"},"audit_logs":{"type":"boolean"},"airgapped":{"type":"boolean"}},"required":["custom_domains","private_managers","sso_saml","audit_logs","airgapped"]},"BillingLimits":{"type":"object","properties":{"maxDeployments":{"type":"number","nullable":true},"maxProjects":{"type":"number","nullable":true},"maxSeats":{"type":"number","nullable":true},"maxCustomDomains":{"type":"number","nullable":true},"creditUsd":{"type":"number","nullable":true},"seatsIncluded":{"type":"number","nullable":true}},"required":["maxDeployments","maxProjects","maxSeats","maxCustomDomains","creditUsd","seatsIncluded"]}},"parameters":{}},"paths":{"/v1/invitations/{token}":{"get":{"operationId":"getWorkspaceInvitationPreview","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationPreview"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/memberships":{"get":{"operationId":"listMemberships","description":"List all workspaces the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listMemberships","responses":{"200":{"description":"List of user's workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile":{"get":{"operationId":"getUserProfile","description":"Get the current user's profile and user-scoped onboarding state.","x-speakeasy-group":"user","x-speakeasy-name-override":"getProfile","responses":{"200":{"description":"User profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateUserProfile","description":"Update the current user's profile (display name).","x-speakeasy-group":"user","x-speakeasy-name-override":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"}}}}}},"responses":{"200":{"description":"Profile updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile/setup":{"post":{"operationId":"completeUserProfileSetup","description":"Complete the required beta intake and profile setup dialog.","x-speakeasy-group":"user","x-speakeasy-name-override":"completeProfileSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileSetupRequest"}}}},"responses":{"200":{"description":"Profile setup completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/workspaces":{"post":{"operationId":"createWorkspace","description":"Create a new workspace. The current user will be automatically added as an admin.","x-speakeasy-group":"user","x-speakeasy-name-override":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name"},"logoUrl":{"type":"string","format":"uri","description":"Optional workspace logo URL"}},"required":["name"]}}}},"responses":{"201":{"description":"Created workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Bad request - invalid workspace name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Workspace name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces":{"get":{"operationId":"listGitNamespaces","description":"List all git namespaces (GitHub installations) the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaces","parameters":[{"schema":{"type":"string","enum":["github"],"default":"github"},"required":false,"name":"provider","in":"query"}],"responses":{"200":{"description":"List of user's git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/sync":{"post":{"operationId":"syncGitNamespaces","description":"Sync git namespaces from the provider. For GitHub, this fetches all app installations accessible to the user.","x-speakeasy-group":"user","x-speakeasy-name-override":"syncGitNamespaces","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"description":"Git provider to sync"}},"required":["provider"]}}}},"responses":{"200":{"description":"Synced git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/{id}/repositories":{"get":{"operationId":"listGitNamespaceRepositories","description":"List repositories accessible through a git namespace (GitHub installation).","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaceRepositories","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","description":"Search query to filter repositories by name"},"required":false,"description":"Search query to filter repositories by name","name":"search","in":"query"}],"responses":{"200":{"description":"List of repositories.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitRepository"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Git namespace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/invitations/{token}/accept":{"post":{"operationId":"acceptWorkspaceInvitation","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptWorkspaceInvitationResponse"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","description":"Get the current authenticated principal (user or service account). Works with both session cookies and API keys.","x-speakeasy-group":"auth","x-speakeasy-name-override":"whoami","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","example":"my-workspace"},"required":false,"description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Current authenticated principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subject"}}}},"400":{"description":"Missing required workspace for user credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","description":"Retrieve all workspaces.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search workspaces by name"},"required":false,"description":"Search workspaces by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","description":"Retrieve a workspace by ID.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspace","description":"Update a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"}}}}}},"responses":{"200":{"description":"Workspace updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteWorkspace","description":"Delete a workspace. The workspace must have no projects.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Workspace deleted successfully."},"400":{"description":"Workspace still has projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listWorkspaceMembers","description":"List all members of a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"listMembers","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"List of workspace members.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"addWorkspaceMember","description":"Add a member to a workspace by email. The user must already have an account.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"addMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of the user to add"},"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"Role to assign"}]}},"required":["email","role"]}}}},"responses":{"201":{"description":"Member added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"404":{"description":"Workspace or user not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"User is already a member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMember","description":"Update a workspace member's role.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"New role to assign"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Member role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"400":{"description":"Cannot remove last admin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"removeWorkspaceMember","description":"Remove a member from a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"removeMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Member removed successfully."},"400":{"description":"Cannot remove last admin or self.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/dismiss-onboarding":{"post":{"operationId":"dismissWorkspaceOnboarding","description":"Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"dismissOnboarding","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace with onboardingDismissedAt populated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/settings":{"get":{"operationId":"getWorkspaceSettings","description":"Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"getSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspaceSettings","description":"Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}}},"responses":{"200":{"description":"Updated ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations":{"get":{"operationId":"listWorkspaceInvitations","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Pending invitations.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvitation"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["email","role"]}}}},"responses":{"201":{"description":"Invitation created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"403":{"description":"Seat limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}/resend":{"post":{"operationId":"resendWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Invitation email sent again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}":{"delete":{"operationId":"revokeWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invitation revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invite-link":{"get":{"operationId":"getWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Active invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"createWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["role"]}}}},"responses":{"200":{"description":"Invite link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invite link revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","description":"Retrieve all projects.","x-speakeasy-group":"projects","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search projects by name"},"required":false,"description":"Search projects by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deploymentCount","latestRelease"]},"description":"Optional fields to include: deploymentCount, latestRelease"},"required":false,"description":"Optional fields to include: deploymentCount, latestRelease","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved projects.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createProject","description":"Create a new project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name"]}}}},"responses":{"201":{"description":"Project created successfully.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"}}}]}}}},"400":{"description":"Invalid request or GitHub repository connection failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}":{"get":{"operationId":"getProject","description":"Retrieve a project by ID or name.","x-speakeasy-group":"projects","x-speakeasy-name-override":"get","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateProject","description":"Update a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"update","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProject"}}}},"responses":{"200":{"description":"Project updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteProject","description":"Delete a project. The project must have no deployments.","x-speakeasy-group":"projects","x-speakeasy-name-override":"delete","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Project deleted successfully."},"400":{"description":"Project still has deployments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/gcp-oauth-provider":{"get":{"operationId":"getProjectGcpOAuthProvider","description":"Retrieve redacted project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateProjectGcpOAuthProvider","description":"Update project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"updateGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGcpOAuthProvider"}}}},"responses":{"200":{"description":"Google Cloud OAuth provider settings updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"400":{"description":"Invalid provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-portal-domain":{"get":{"operationId":"getProjectDeploymentPortalDomain","description":"Get the deployment portal domain binding for a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentPortalDomain","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved deployment portal domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPortalDomainResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/import-template":{"post":{"operationId":"createProjectFromTemplate","description":"Create a project by forking alienplatform/alien into your namespace, then configuring GitHub Actions.","x-speakeasy-group":"projects","x-speakeasy-name-override":"createFromTemplate","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"targetNamespace":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-]+$","description":"GitHub owner namespace (user or organization) that will receive the fork"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name","targetNamespace","templatePath"]}}}},"responses":{"201":{"description":"Project created successfully from template.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"},"template":{"type":"object","properties":{"sourceRepository":{"type":"string","enum":["alienplatform/alien"]},"forkRepository":{"type":"string","description":"Fork repository in / format"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"resolvedRootDirectory":{"type":"string"}},"required":["sourceRepository","forkRepository","templatePath","resolvedRootDirectory"]}},"required":["template"]}]}}}},"400":{"description":"Bad request or GitHub integration not installed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Fork exists but is not ready yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/template-urls":{"get":{"operationId":"getProjectTemplateUrls","description":"Get template URLs for deploying setup stacks in this project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getTemplateUrls","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Template URLs retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"aws":{"type":"object","nullable":true,"properties":{"templateUrl":{"type":"string","format":"uri","description":"URL to download the CloudFormation template"},"launchStackUrl":{"type":"string","format":"uri","description":"URL to launch the template in the AWS CloudFormation console"}},"required":["templateUrl","launchStackUrl"],"description":"Template URLs for deploying an AWS setup stack"}}}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-link-setup":{"get":{"operationId":"getProjectDeploymentLinkSetup","description":"Get the active release stack and portal-visible setup availability for deployment-link configuration.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentLinkSetup","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment-link setup retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLinkSetupResponse"}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/active-release":{"get":{"operationId":"getProjectActiveRelease","description":"Get the active release for this project. Returns the latest release, or the pinned release if deploymentId is provided and that deployment has a pinned release.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getActiveRelease","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Optional deployment ID to check for pinned release"},"required":false,"description":"Optional deployment ID to check for pinned release","name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Active release retrieved successfully.","content":{"application/json":{"schema":{"nullable":true}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups":{"post":{"operationId":"createDeploymentGroup","tags":["deployment-groups"],"summary":"Create a new deployment group","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group with this name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listDeploymentGroups","tags":["deployment-groups"],"summary":"List deployment groups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of deployment groups","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"}}}]},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/by-name":{"put":{"operationId":"ensureDeploymentGroupByName","tags":["deployment-groups"],"summary":"Get or create a deployment group by project and name","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureDeploymentGroupByNameRequest"}}}},"responses":{"200":{"description":"Deployment group returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}":{"get":{"operationId":"getDeploymentGroup","tags":["deployment-groups"],"summary":"Get deployment group details","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"}],"responses":{"200":{"description":"Deployment group details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"deploymentCount":{"type":"integer","description":"Current number of deployments in this deployment group"}},"required":["deploymentCount"]}]}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentGroup","tags":["deployment-groups"],"summary":"Update deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDeploymentGroup","tags":["deployment-groups"],"summary":"Delete deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Deployment group deleted successfully"},"400":{"description":"Cannot delete deployment group that has deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/tokens":{"post":{"operationId":"createDeploymentGroupToken","tags":["deployment-groups"],"summary":"Create deployment group token","description":"Creates a deployment-group scoped API key and returns both the token and formatted deployment link","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenRequest"}}}},"responses":{"200":{"description":"Deployment group token created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenResponse"}}}},"400":{"description":"Deployment setup configuration is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/first-party-session":{"post":{"operationId":"createFirstPartyDeploymentSession","tags":["deployment-groups"],"summary":"Create first-party deployment session","description":"Mints a short-lived deployment-group token with the recommended self-deploy policy for the authenticated developer.","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"First-party deployment session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirstPartyDeploymentSessionResponse"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages":{"get":{"operationId":"listPackages","description":"List packages with optional filters. Returns packages ordered by creation date (newest first).","x-speakeasy-group":"packages","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Filter by package type"},"required":false,"description":"Filter by package type","name":"type","in":"query"},{"schema":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Filter by package status"},"required":false,"description":"Filter by package status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search packages by type or version"},"required":false,"description":"Search packages by type or version","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of packages.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}":{"get":{"operationId":"getPackage","description":"Get details of a specific package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/rebuild":{"post":{"operationId":"rebuildPackages","description":"Rebuild packages for a project. This will cancel any pending packages and create new ones with auto-incremented versions.","x-speakeasy-group":"packages","x-speakeasy-name-override":"rebuild","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to rebuild packages for"}},"required":["project"]}}}},"responses":{"200":{"description":"Packages rebuilt successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"packagesCreated":{"type":"integer","description":"Number of packages created"}},"required":["packagesCreated"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}/cancel":{"post":{"operationId":"cancelPackage","description":"Cancel a pending or building package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"cancel","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package canceled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Package cannot be canceled (not in pending or building status).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases":{"get":{"operationId":"listReleases","description":"Retrieve all releases.","x-speakeasy-group":"releases","x-speakeasy-name-override":"list","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search releases by commit message, branch, SHA, or release ID"},"required":false,"description":"Search releases by commit message, branch, SHA, or release ID","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by git branch (commitRef)"},"required":false,"description":"Filter by git branch (commitRef)","name":"branch","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by commit author login or name"},"required":false,"description":"Filter by commit author login or name","name":"author","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created after this date (ISO 8601)"},"required":false,"description":"Filter releases created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created before this date (ISO 8601)"},"required":false,"description":"Filter releases created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved releases.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createRelease","description":"Create a new release.","x-speakeasy-group":"releases","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseRequest"}}}},"responses":{"201":{"description":"Release created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/branches":{"get":{"operationId":"listReleaseBranches","description":"List distinct git branches across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listBranches","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search branches by name (case-insensitive contains)"},"required":false,"description":"Search branches by name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of branches to return"},"required":false,"description":"Maximum number of branches to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct branches.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/authors":{"get":{"operationId":"listReleaseAuthors","description":"List distinct commit authors across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listAuthors","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search authors by login or name (case-insensitive contains)"},"required":false,"description":"Search authors by login or name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of authors to return"},"required":false,"description":"Maximum number of authors to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct authors.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAuthorFilterItem"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/{id}":{"get":{"operationId":"getRelease","description":"Retrieve a release by ID.","x-speakeasy-group":"releases","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"required":true,"description":"Unique identifier for the release.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseListItemResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments":{"get":{"operationId":"listDeployments","description":"Retrieve all deployments.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"list","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Filter by exact deployment name. Must be used with deploymentGroup."},"required":false,"description":"Filter by exact deployment name. Must be used with deploymentGroup.","name":"name","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name, public subdomain, or deployment group name"},"required":false,"description":"Search deployments by name, public subdomain, or deployment group name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved deployments.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"400":{"description":"Invalid deployment list filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDeployment","description":"Create a new deployment. Deployment group tokens automatically use their group. Workspace/project tokens must provide deploymentGroupId.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeploymentRequest"}}}},"responses":{"200":{"description":"Existing deployment returned for idempotent deployment-group registration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"201":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"400":{"description":"Bad request - deployment group has reached max deployments limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Forbidden - insufficient permissions to create deployments in this context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project or deployment group not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/stats":{"get":{"operationId":"getDeploymentStats","description":"Get aggregated deployment statistics. Returns total count and breakdown by status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getStats","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name or deployment group name"},"required":false,"description":"Search deployments by name or deployment group name","name":"search","in":"query"}],"responses":{"200":{"description":"Deployment statistics retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStats"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-environments":{"get":{"operationId":"listDeploymentFilterEnvironments","description":"List distinct effective environments used by deployments. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterEnvironments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Distinct environments retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-deployment-groups":{"get":{"operationId":"listDeploymentFilterDeploymentGroups","description":"List deployment groups with deployment counts. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterDeploymentGroups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return"},"required":false,"description":"Maximum number of items to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Deployment groups for filter retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"deploymentCount":{"type":"number"},"runningCount":{"type":"number","description":"Number of deployments in 'running' status"},"failedCount":{"type":"number","description":"Number of deployments in a failed status"},"inProgressCount":{"type":"number","description":"Number of deployments in an in-progress status (provisioning, updating, etc.)"}},"required":["id","name","deploymentCount","runningCount","failedCount","inProgressCount"]}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeployment","description":"Retrieve a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetailResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/info":{"get":{"operationId":"getDeploymentConnectionInfo","description":"Get deployment connection information including command endpoint and resource URLs.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment connection information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentConnectionInfo"}}}},"400":{"description":"Deployment not ready (no manager assigned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/import":{"post":{"operationId":"importDeployment","description":"Import a deployment from resolved setup infrastructure such as CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"import","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDeploymentRequest"}}}},"responses":{"200":{"description":"Deployment import was idempotent and returned an existing deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"201":{"description":"Deployment imported and created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/first-party-inputs":{"put":{"operationId":"setFirstPartyDeploymentInputs","description":"Store operator-provided input values on a first-party deployment session token so CLI/local deploys apply them.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"setFirstPartyDeploymentInputs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Input values stored on the session token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsResponse"}}}},"400":{"description":"A deployment-group token scope is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"The token is not a first-party deployment session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to store input values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations":{"post":{"operationId":"createSetupRegistrationOperation","description":"Start a durable setup registration operation for CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createSetupRegistrationOperation","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupRegistrationOperationRequest"}}}},"responses":{"202":{"description":"Setup registration operation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"400":{"description":"Invalid setup registration operation request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed before callback acceptance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations/{id}":{"get":{"operationId":"getSetupRegistrationOperation","description":"Get setup registration operation status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getSetupRegistrationOperation","parameters":[{"schema":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"required":true,"description":"Unique identifier for the setup registration operation.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Setup registration operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"404":{"description":"Setup registration operation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/delete":{"post":{"operationId":"deleteDeployment","description":"Delete, detach, or forget a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentRequest"}}}},"responses":{"202":{"description":"Deployment deletion request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentResponse"}}}},"400":{"description":"Cannot delete the deployment in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"redeployDeployment","description":"Redeploy a running deployment with the same release and fresh environment variables. Sets status to update-pending.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"redeploy","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment redeployment triggered successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot redeploy - deployment must be running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/pin-release":{"post":{"operationId":"pinDeploymentRelease","description":"Pin or unpin a running or runtime-failed deployment. Running deployments start an update; failed deployments retry toward the selected release.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"pinRelease","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinReleaseRequest"}}}},"responses":{"202":{"description":"Release pin updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot pin release from the deployment's current lifecycle state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/retry":{"post":{"operationId":"retryDeployment","description":"Retry a failed deployment operation. Uses alien-infra's retry mechanisms to resume from exact failure point.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"retry","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment retry enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Deployment is not in a failed state that can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/inputs":{"get":{"operationId":"getDeploymentInputs","description":"Get the active input definitions and current non-secret values for a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment inputs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInputsResponse"}}}},"403":{"description":"Insufficient permission to read deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentInputs","description":"Update runtime stack inputs, rebuild their environment-variable mappings, and request a deployment update when runtime configuration changes.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Deployment inputs saved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsResponse"}}}},"400":{"description":"Input values are invalid for the deployment release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, project, or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/environment-variables":{"patch":{"operationId":"updateDeploymentEnvironmentVariables","description":"Update a deployment's environment variables. If the deployment is running and not locked, the status will be changed to update-pending to trigger a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateEnvironmentVariables","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentEnvironmentVariablesRequest"}}}},"responses":{"202":{"description":"Environment variables updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Environment variables are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update environment variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/token":{"post":{"operationId":"createDeploymentToken","description":"Create a deployment token (deployment-scoped API key). The deployment must exist before creating a token.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenRequest"}}}},"responses":{"201":{"description":"Deployment token created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers":{"post":{"operationId":"createManager","description":"Create a new manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewManagerRequest"}}}},"responses":{"201":{"description":"Manager created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Invalid private manager setup method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"A manager for this target already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listManagers","description":"Retrieve all managers.","x-speakeasy-group":"managers","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search managers by name"},"required":false,"description":"Search managers by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of managers to return"},"required":false,"description":"Maximum number of managers to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved managers.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manager"}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/setup-token":{"post":{"operationId":"retryManagerSetup","description":"Revoke previous private-manager setup tokens and issue a fresh setup token/config.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retrySetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"201":{"description":"Fresh manager setup token generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Manager setup cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or setup config not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/retry":{"post":{"operationId":"retryManager","description":"Retry private-manager setup. Returns a fresh setup action before the internal deployment exists, or requests retry for the internal deployment after it exists.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retry","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager retry handled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerRetryResponse"}}}},"400":{"description":"Manager cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or internal deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/cancel-setup":{"post":{"operationId":"cancelManagerSetup","description":"Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record.","x-speakeasy-group":"managers","x-speakeasy-name-override":"cancelSetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager setup canceled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Manager setup cannot be canceled in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}":{"get":{"operationId":"getManager","description":"Retrieve a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"get","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manager"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteManager","description":"Delete a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"delete","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager deletion enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot delete the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Internal deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/domain-binding":{"get":{"operationId":"getManagerDomainBinding","description":"Get the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager domain binding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateManagerDomainBinding","description":"Create, update, or remove the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"updateDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerDomainBinding"}}}},"responses":{"200":{"description":"Manager domain binding updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"400":{"description":"Invalid domain binding request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or domain not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/management-config":{"get":{"operationId":"getManagerManagementConfig","description":"Get the management configuration for a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getManagementConfig","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":true,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Management config retrieved successfully.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/provision":{"post":{"operationId":"provisionManager","description":"Enqueue provisioning for a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"provision","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager provisioning enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot provision the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/update":{"post":{"operationId":"updateManager","description":"Update a manager to a specific release ID or active release.","x-speakeasy-group":"managers","x-speakeasy-name-override":"update","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerRequest"}}}},"responses":{"202":{"description":"Manager update enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot update the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/events":{"get":{"operationId":"listManagerEvents","description":"Retrieve all events of a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"listEvents","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"]}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/token":{"post":{"operationId":"generateManagerToken","description":"Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/binding-token":{"post":{"operationId":"generateManagerBindingToken","description":"Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerBindingToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerBindingTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/command-token":{"post":{"operationId":"generateManagerCommandToken","description":"Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerCommandToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerCommandTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/gcp-oauth-provider/resolve":{"post":{"operationId":"resolveManagerGcpOAuthProvider","description":"Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap.","x-speakeasy-group":"managers","x-speakeasy-name-override":"resolveGcpOAuthProvider","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderRequest"}}}},"responses":{"200":{"description":"Resolved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderResponse"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Manager cannot resolve this deployment group's project settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/heartbeat":{"post":{"operationId":"reportManagerHeartbeat","description":"Report Manager health status and metrics.","x-speakeasy-group":"managers","x-speakeasy-name-override":"reportHeartbeat","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatRequest"}}}},"responses":{"200":{"description":"Heartbeat acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/deployment":{"get":{"operationId":"getManagerDeployment","description":"Get deployment details for a private manager (internal deployment platform, status, resources).","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDeployment","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager deployment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDeployment"}}}},"404":{"description":"Manager not found or has no internal deployment (alien-hosted managers don't have deployment info).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/prepare":{"post":{"operationId":"prepareOperatorManifestPackage","tags":["operator-manifests"],"summary":"Prepare the white-labeled Operator image for an Operate install","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageRequest"}}}},"responses":{"200":{"description":"Operator image package created or reused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/render":{"post":{"operationId":"renderOperatorManifest","tags":["operator-manifests"],"summary":"Render a Kubernetes Operator manifest","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestRequest"}}}},"responses":{"200":{"description":"Operator manifest rendered successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Operator image package is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Invalid platform or manager configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listAPIKeys","description":"Retrieve all API keys for the current workspace.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved API keys.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/APIKey"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createAPIKey","description":"Create a new API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"API key created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"403":{"description":"Insufficient permissions to create API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/{id}":{"get":{"operationId":"getAPIKey","description":"Retrieve a specific API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateAPIKey","description":"Update an API key (enable/disable, change description).","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyRequest"}}}},"responses":{"200":{"description":"API key updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeAPIKey","description":"Revoke (soft delete) an API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"revoke","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"API key revoked successfully."},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/batch-delete":{"post":{"operationId":"deleteAPIKeys","description":"Permanently delete multiple API keys.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"deleteMultiple","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAPIKeysRequest"}}}},"responses":{"200":{"description":"API keys deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedCount":{"type":"number"}},"required":["deletedCount"]}}}},"403":{"description":"Insufficient permissions to delete API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains":{"get":{"operationId":"listDomains","description":"List system domains and workspace domains.","x-speakeasy-group":"domains","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domains.","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainWithUsage"}}},"required":["domains"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDomain","description":"Create a workspace domain and optional initial endpoints.","x-speakeasy-group":"domains","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253},"setup":{"type":"object","properties":{"deploymentPortal":{"type":"boolean"},"packages":{"type":"boolean"},"deploymentUrlProjectId":{"type":"string","nullable":true,"pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"managerIds":{"type":"array","items":{"type":"string"}}}}},"required":["domain"]}}}},"responses":{"200":{"description":"Returned an existing workspace domain claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"201":{"description":"Created domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Domain is reserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/endpoints":{"post":{"operationId":"createDomainEndpoint","description":"Create an endpoint under a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"createEndpoint","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["workspace","project","manager"]},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind"]}}}},"responses":{"201":{"description":"Created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Endpoint cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomain","description":"Get domain by ID.","x-speakeasy-group":"domains","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDomain","description":"Delete a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain deletion requested.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain is in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/refresh":{"post":{"operationId":"refreshDomain","description":"Refresh workspace domain verification.","x-speakeasy-group":"domains","x-speakeasy-name-override":"refresh","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain verification refresh requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events":{"get":{"operationId":"listEvents","description":"Retrieve all events.","x-speakeasy-group":"events","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter events to a single deployment."},"required":false,"description":"Filter events to a single deployment.","name":"deploymentId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["releaseCreatedAt"]},"description":"Optional fields to include: releaseCreatedAt"},"required":false,"description":"Optional fields to include: releaseCreatedAt","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events/{id}":{"get":{"operationId":"getEvent","description":"Retrieve an event by ID.","x-speakeasy-group":"events","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"required":true,"description":"Unique identifier for the event.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens":{"get":{"operationId":"listMachinesJoinTokens","x-speakeasy-group":"machines","x-speakeasy-name-override":"listJoinTokens","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Join tokens for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesJoinTokensResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"createJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Newly minted Machines join token. Existing tokens keep working; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/rotate":{"post":{"operationId":"rotateMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"rotateJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Rotated Machines join token. Revokes all existing tokens, then mints a new one; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/{tokenId}":{"delete":{"operationId":"revokeMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"revokeJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"tokenId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines join token revocation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/inventory":{"get":{"operationId":"listMachinesInventory","x-speakeasy-group":"machines","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machine inventory for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesInventoryResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}/drain":{"delete":{"operationId":"cancelMachinesMachineDrain","x-speakeasy-group":"machines","x-speakeasy-name-override":"cancelMachineDrain","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines drain cancellation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMachinesMachineDrainResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"drainMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"drainMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineRequest"}}}},"responses":{"200":{"description":"Machines drain request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}":{"delete":{"operationId":"removeMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"removeMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines remove request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands":{"get":{"operationId":"listCommands","description":"Retrieve commands. Use for dashboard analytics and command history.","x-speakeasy-group":"commands","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Filter by command state"},"required":false,"description":"Filter by command state","name":"state","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Filter by command name"},"required":false,"description":"Filter by command name","name":"name","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search commands by name"},"required":false,"description":"Search commands by name","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created after this date (ISO 8601)"},"required":false,"description":"Filter commands created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created before this date (ISO 8601)"},"required":false,"description":"Filter commands created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deployment","project"]},"description":"Optional fields to include: deployment, project"},"required":false,"description":"Optional fields to include: deployment, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved commands.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommandListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createCommand","description":"Create command metadata. Called by manager when processing commands. Returns project info for routing decisions.","x-speakeasy-group":"commands","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandRequest"}}}},"responses":{"201":{"description":"Command created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandResponse"}}}},"400":{"description":"Deployment is not ready or has no assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The deployment manager is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/names":{"get":{"operationId":"listCommandNames","description":"List distinct command names. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listNames","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search command names (prefix match)"},"required":false,"description":"Search command names (prefix match)","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct command names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandNamesResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/deployments":{"get":{"operationId":"listCommandDeployments","description":"List distinct deployments that have commands, including deployment group info. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search deployment or deployment group names"},"required":false,"description":"Search deployment or deployment group names","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct deployments that have commands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandDeploymentsResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/target":{"get":{"operationId":"resolveCommandTarget","description":"Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named.","x-speakeasy-group":"commands","x-speakeasy-name-override":"resolveTarget","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment to resolve the target for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Deployment to resolve the target for","name":"deploymentId","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Explicit resource id to resolve; must be a command-capable resource"},"required":false,"description":"Explicit resource id to resolve; must be a command-capable resource","name":"target","in":"query"}],"responses":{"200":{"description":"Resolved command target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedCommandTarget"}}}},"404":{"description":"Deployment or target not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}":{"patch":{"operationId":"updateCommand","description":"Update command state. Called by manager when command is dispatched or completes.","x-speakeasy-group":"commands","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommandRequest"}}}},"responses":{"200":{"description":"Command updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getCommand","description":"Retrieve a command by ID.","x-speakeasy-group":"commands","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/dispatch":{"post":{"operationId":"dispatchCommand","description":"Atomically mark a command DISPATCHED unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"dispatch","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandRequest"}}}},"responses":{"200":{"description":"Dispatch attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/complete":{"post":{"operationId":"completeCommand","description":"Atomically transition a command to a terminal state (SUCCEEDED, FAILED, or EXPIRED) unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"complete","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandRequest"}}}},"responses":{"200":{"description":"Completion attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/increment-attempt":{"post":{"operationId":"incrementCommandAttempt","description":"Atomically increment the command's attempt counter and return the new value.","x-speakeasy-group":"commands","x-speakeasy-name-override":"incrementAttempt","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Attempt incremented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementCommandAttemptResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions":{"get":{"operationId":"listDebugSessions","description":"Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Filter by session state"}]},"required":false,"description":"Filter by session state","name":"state","in":"query"},{"schema":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model (push/pull). Joins against the parent deployment."},"required":false,"description":"Filter by deployment model (push/pull). Joins against the parent deployment.","name":"mode","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Filter by cloud provider. Joins against the parent deployment."},"required":false,"description":"Filter by cloud provider. Joins against the parent deployment.","name":"provider","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated debug sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSessionListResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDebugSession","description":"Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}}},"responses":{"201":{"description":"Debug session created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"403":{"description":"Caller is not the deployment's assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/internal/manager-active":{"get":{"operationId":"listActiveManagerDebugSessions","description":"List active debug sessions created by the calling manager so runtime reconciliation can resume after restart.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"listActiveForManager","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated active debug sessions owned by the calling manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerActiveDebugSessionListResponse"}}}},"403":{"description":"Caller is not a manager runtime.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/{id}":{"patch":{"operationId":"updateDebugSession","description":"Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDebugSessionRequest"}}}},"responses":{"200":{"description":"Debug session updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"403":{"description":"Caller is not the manager that created the audit row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Debug session not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"The lifecycle transition is stale or would reactivate a terminal session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getDebugSession","description":"Retrieve a debug session by ID.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved debug session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info":{"get":{"operationId":"getDeploymentInfo","description":"Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":false,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Deployment information retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"401":{"description":"Unauthorized — requires a deployment-scoped or deployment-group-scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/compute-plan":{"post":{"operationId":"planDeploymentCompute","description":"Plan deployment compute for the active release before stack preparation. The response contains recommended machine and scale choices for cloud compute pools.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"planCompute","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Compute plan returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentComputePlan"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/prepare-stack":{"post":{"operationId":"prepareDeploymentStack","description":"Prepare the active release stack for a deployment portal setup session. The response contains the generated stack shape plus setup compatibility metadata.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"prepareStack","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Prepared stack returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedDeploymentStack"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"operationId":"slackIntegrationInstallUrl","description":"Generate the Slack OAuth consent URL for this workspace.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"installUrl","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"OAuth URL the dashboard should redirect the user to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/status":{"get":{"operationId":"slackIntegrationStatus","description":"Return the Slack install for this workspace (if any).","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"status","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationStatus"}}}}}}},"/v1/integrations/slack/channels":{"get":{"operationId":"slackIntegrationChannels","description":"List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"listChannels","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Public channels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelsResponse"}}}},"400":{"description":"Workspace not connected to Slack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/notification-channel":{"put":{"operationId":"slackIntegrationSetNotificationChannel","description":"Configure which Slack channel receives ai-agent monitor reports.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"setNotificationChannel","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelRequest"}}}},"responses":{"200":{"description":"Channel saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelResponse"}}}},"400":{"description":"Not connected, or join failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/installation":{"delete":{"operationId":"slackIntegrationUninstall","description":"Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"uninstall","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Uninstalled."}}}},"/v1/agent-sessions":{"get":{"operationId":"listAgentSessions","description":"List ai-agent monitor sessions for this workspace. Newest first, capped at 50.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionListResponse"}}}}}}},"/v1/agent-sessions/{id}":{"get":{"operationId":"getAgentSession","description":"Retrieve one ai-agent monitor session by id.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/events":{"get":{"operationId":"listAgentSessionEvents","description":"Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"events","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Events after the cursor, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionEventsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/approve":{"post":{"operationId":"approveAgentSession","description":"Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"approve","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already resumed / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"202":{"description":"Approved; resume enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/stop":{"post":{"operationId":"stopAgentSession","description":"Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"stop","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already terminal / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"202":{"description":"Cancel accepted; session stopped.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/list":{"post":{"operationId":"syncList","description":"List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows.","x-speakeasy-group":"sync","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListRequest"}}}},"responses":{"200":{"description":"Full deployment records returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/context":{"post":{"operationId":"syncContext","description":"Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock.","x-speakeasy-group":"sync","x-speakeasy-name-override":"context","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncContextRequest"}}}},"responses":{"200":{"description":"Computed deployment context returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"}}}},"404":{"description":"Deployment not found or not assigned to this manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to build deployment context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/acquire":{"post":{"operationId":"syncAcquire","description":"Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing.","x-speakeasy-group":"sync","x-speakeasy-name-override":"acquire","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireRequest"}}}},"responses":{"200":{"description":"Deployments acquired successfully (empty arrays if none available). Failures indicate deployments that were locked but failed during context building - their locks have been released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/reconcile":{"post":{"operationId":"syncReconcile","description":"Reconcile deployment state. Push model requests that include a session verify lock ownership. Pull model state reports are accepted as authz-gated agent progress even when they carry an agent-sync session. Accepts full DeploymentState after step() execution.","x-speakeasy-group":"sync","x-speakeasy-name-override":"reconcile","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileRequest"}}}},"responses":{"200":{"description":"State reconciled successfully. If target is present, continue deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment locked (pull) or session mismatch (push).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/release":{"post":{"operationId":"syncRelease","description":"Release a deployment lock. Must be called after processing an acquired deployment, even if processing failed. This is critical to avoid deadlocks.","x-speakeasy-group":"sync","x-speakeasy-name-override":"release","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReleaseRequest"}}}},"responses":{"200":{"description":"Lock released successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources":{"get":{"operationId":"listInventory","x-speakeasy-group":"resources","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Unified managed and observed resource inventory rows.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["managed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt","source","deploymentId","deploymentName"]},{"type":"object","properties":{"source":{"type":"string","enum":["observed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"rawKind":{"type":"string"},"alienResourceId":{"type":"string","nullable":true},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["source","deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","name","rawKind","alienResourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}":{"get":{"operationId":"listResourceOverview","x-speakeasy-group":"resources","x-speakeasy-name-override":"listOverview","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Compute resource overview rows from latest heartbeats.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/{resourceId}/deployments":{"get":{"operationId":"listResourceDeployments","x-speakeasy-group":"resources","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Deployments where the resource is installed.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt"]}}},"required":["resourceType","resourceId","deployments"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/deployments/{deploymentId}/{resourceId}":{"get":{"operationId":"getResourceDeploymentDetail","x-speakeasy-group":"resources","x-speakeasy-name-override":"getDeploymentDetail","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"deploymentId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Latest heartbeat detail for one compute resource deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"},"desiredImage":{"type":"string","nullable":true}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt","desiredImage"]},"heartbeat":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["available"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"staleAt":{"type":"string","format":"date-time"},"platformStale":{"type":"boolean"},"heartbeat":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"raw":{"type":"array","items":{"nullable":true}}},"required":["status","deploymentId","resourceId","resourceType","backend","controllerPlatform","observedAt","staleAt","platformStale","heartbeat","raw"]},{"type":"object","properties":{"status":{"type":"string","enum":["missing"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"}},"required":["status","deploymentId","resourceId","resourceType"]}]}},"required":["deployment","heartbeat"]}}}},"404":{"description":"Deployment or resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resolve":{"get":{"operationId":"resolve","tags":["resolve"],"summary":"Resolve manager for a project and platform","description":"Returns the manager URL for a given project and platform. The project can be provided as a query parameter, or derived from the token's scope (project-scoped, deployment-group-scoped, or deployment-scoped tokens carry an implicit project). This is the single entry point for all CLI tools to discover which manager to talk to.","x-speakeasy-group":"resolve","x-speakeasy-name-override":"resolve","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform to resolve the manager for"},"required":true,"description":"Target platform to resolve the manager for","name":"platform","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope)."},"required":false,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope).","name":"project","in":"query"}],"responses":{"200":{"description":"Manager resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"description":"Missing required project parameter for this token type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found or no manager available for platform.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Manager not ready yet (no URL reported). Retry after a delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/cloud-regions":{"get":{"operationId":"getCloudRegions","description":"Get cloud regions supported by this Alien environment.","x-speakeasy-group":"cloudRegions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Supported cloud regions retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudRegionsResponse"}}}}}}},"/v1/billing/audit-log":{"get":{"operationId":"listBillingAuditLog","description":"List billing activity entries for the current workspace.","x-speakeasy-group":"billing","x-speakeasy-name-override":"listAuditLog","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor: id from the previous page."},"required":false,"description":"Cursor: id from the previous page.","name":"before","in":"query"}],"responses":{"200":{"description":"Audit-log rows newest-first.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingAuditLogRow"}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"]}}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"getWorkspaceBillingEntitlements","description":"Get the workspace billing entitlements used for product feature gates. Autumn is the source of truth; the response is served through the workspace billing read model with stale-cache fallback.","x-speakeasy-group":"billing","x-speakeasy-name-override":"getEntitlements","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace billing entitlements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBillingEntitlements"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}}}} \ No newline at end of file diff --git a/client-sdks/platform/rust/openapi-3.0.json b/client-sdks/platform/rust/openapi-3.0.json index e3768067b..3176d4dfa 100644 --- a/client-sdks/platform/rust/openapi-3.0.json +++ b/client-sdks/platform/rust/openapi-3.0.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"title":"Alien API","version":"1.0.0","contact":{"name":"Alien Team","url":"https://alien.dev"}},"servers":[{"url":"https://api.alien.dev","description":"Alien API - Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key for authentication, must be provided as a Bearer token. Generate an API key at https://alien.dev/api-keys"}},"schemas":{"WorkspaceInvitationPreview":{"type":"object","properties":{"kind":{"type":"string","enum":["email","link"]},"workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name","logoUrl"]},"inviter":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"image":{"type":"string","nullable":true,"format":"uri"}},"required":["name","image"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["active","accepted","expired","revoked"]},"emailHint":{"type":"string","nullable":true}},"required":["kind","workspace","inviter","role","expiresAt","state","emailHint"],"additionalProperties":false},"WorkspaceRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"Role for workspace-scoped service accounts","example":"workspace.member"},"APIError":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"requestId":{"type":"string","description":"Request ID echoed in the x-request-id response header and server logs."}},"required":["code","message","internal"]},"Membership":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"role":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","logoUrl","role","createdAt"],"additionalProperties":false},"UserProfile":{"type":"object","properties":{"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","description":"User's email address"},"name":{"type":"string","description":"User's display name"},"image":{"type":"string","nullable":true,"description":"User's avatar image URL"},"githubUsername":{"type":"string","nullable":true,"description":"Linked GitHub username"},"cliConnected":{"type":"boolean","description":"Whether this user has ever authenticated a request from the Alien CLI. Latched on first CLI request, never cleared."},"company":{"type":"string","nullable":true,"description":"Company name collected during profile setup."},"acquisitionSource":{"type":"string","nullable":true,"enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other",null],"description":"How the user heard about Alien."},"acquisitionSourceDetail":{"type":"string","nullable":true,"description":"Additional acquisition source detail when the source is other."},"useCases":{"type":"string","nullable":true,"description":"What the user is hoping to use Alien for."},"profileSetupCompletedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the user completed the required profile setup dialog."},"profileSetupVersion":{"type":"integer","nullable":true,"description":"Version of the required profile setup dialog the user completed."}},"required":["id","email","name","image","githubUsername","cliConnected","company","acquisitionSource","acquisitionSourceDetail","useCases","profileSetupCompletedAt","profileSetupVersion"],"additionalProperties":false},"UserProfileSetupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"},"company":{"type":"string","minLength":1,"maxLength":120,"description":"Company name"},"acquisitionSource":{"type":"string","enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other"],"description":"How the user heard about Alien"},"acquisitionSourceDetail":{"type":"string","minLength":1,"maxLength":200,"description":"Required when acquisitionSource is other"},"useCases":{"type":"string","maxLength":2000,"description":"What the user is hoping to use Alien for"}},"required":["name","company","acquisitionSource"],"additionalProperties":false},"GitNamespace":{"type":"object","properties":{"id":{"type":"number","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"installationId":{"type":"number","nullable":true},"type":{"type":"string","enum":["team","user"]},"provider":{"type":"string","enum":["github"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","slug","installationId","type","provider","createdAt"],"additionalProperties":false},"GitRepository":{"type":"object","properties":{"name":{"type":"string"},"private":{"type":"boolean"},"defaultBranch":{"type":"string"},"pushedAt":{"type":"string","format":"date-time"}},"required":["name","private","defaultBranch"],"additionalProperties":false},"AcceptWorkspaceInvitationResponse":{"type":"object","properties":{"outcome":{"type":"string","enum":["joined","already-member"]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"workspaceName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["outcome","workspaceId","workspaceName","role"],"additionalProperties":false},"Subject":{"oneOf":[{"$ref":"#/components/schemas/UserSubject"},{"$ref":"#/components/schemas/ServiceAccountSubject"}],"discriminator":{"propertyName":"kind","mapping":{"user":"#/components/schemas/UserSubject","serviceAccount":"#/components/schemas/ServiceAccountSubject"}},"description":"Authenticated principal that can be either a user (with workspace-scoped permissions) or a service account (with configurable scope and role)"},"UserSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["user"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","format":"email","description":"User's email address"},"workspaceId":{"type":"string","description":"ID of the workspace the user is authenticated within"},"workspaceName":{"type":"string","description":"Name of the workspace the user is authenticated within"},"role":{"$ref":"#/components/schemas/UserRole"}},"required":["kind","id","email","workspaceId","role"],"description":"Authenticated user subject with workspace-scoped permissions"},"UserRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"User's role within the workspace","example":"workspace.member"},"ServiceAccountSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["serviceAccount"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique service account identifier (API key ID)"},"workspaceId":{"type":"string","description":"ID of the workspace the service account belongs to"},"workspaceName":{"type":"string","description":"Name of the workspace the service account belongs to"},"scope":{"$ref":"#/components/schemas/SubjectScope"},"role":{"$ref":"#/components/schemas/Role"}},"required":["kind","id","workspaceId","scope","role"],"description":"Authenticated service account subject with scoped permissions (workspace, project, or deployment level)"},"SubjectScope":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["workspace"],"description":"Workspace-scoped access"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["project"],"description":"Project-scoped access"},"projectId":{"type":"string","description":"ID of the specific project this scope applies to"}},"required":["type","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment"],"description":"Deployment-scoped access"},"deploymentId":{"type":"string","description":"ID of the specific deployment this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"}},"required":["type","deploymentId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"],"description":"Deployment group-scoped access"},"deploymentGroupId":{"type":"string","description":"ID of the specific deployment group this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"}},"required":["type","deploymentGroupId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["manager"],"description":"Manager-scoped access"},"managerId":{"type":"string","description":"ID of the specific manager this scope applies to"}},"required":["type","managerId"]}],"description":"Authorization scope defining what resources this service account can access"},"Role":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"$ref":"#/components/schemas/ProjectRole"},{"$ref":"#/components/schemas/DeploymentRole"},{"$ref":"#/components/schemas/DeploymentGroupRole"},{"$ref":"#/components/schemas/ManagerRole"}],"description":"Role defining what actions this service account can perform within its scope","example":"workspace.member"},"ProjectRole":{"type":"string","enum":["project.viewer","project.developer"],"description":"Role for project-scoped service accounts","example":"project.developer"},"DeploymentRole":{"type":"string","enum":["deployment.viewer","deployment.manager","deployment.telemetry-writer"],"description":"Role for deployment-scoped service accounts","example":"deployment.manager"},"DeploymentGroupRole":{"type":"string","enum":["deployment-group.deployer"],"description":"Role for deployment group-scoped service accounts","example":"deployment-group.deployer"},"ManagerRole":{"type":"string","enum":["manager.runtime"],"description":"Role for manager-scoped service accounts","example":"manager.runtime"},"Workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name.","example":"my-workspace"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"onboardingDismissedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the Getting Started walkthrough was dismissed or completed for this workspace. Null means it has never been dismissed; the dashboard auto-promotes the walkthrough until this is set."},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","onboardingDismissedAt","createdAt"],"additionalProperties":false},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","email","name","image","role","joinedAt"],"additionalProperties":false},"AgentSettings":{"type":"object","properties":{"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"enabled":{"type":"boolean","description":"Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`."},"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["workspaceId","enabled","debugPermissionMode","createdAt","updatedAt"],"additionalProperties":false},"UpdateWorkspaceSettingsRequest":{"type":"object","properties":{"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"enabled":{"type":"boolean","description":"Turn the ai-agent on (`true`) or off (`false`) for this workspace."}}},"WorkspaceInvitation":{"type":"object","properties":{"id":{"type":"string","pattern":"winv_[0-9a-zA-Z]{32}$","description":"Unique identifier for the workspace invitation.","example":"winv_DsgltMIFV0GmqtxV5NYTtrknrna"},"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"status":{"type":"string","enum":["pending","accepted","revoked","expired"]},"deliveryStatus":{"type":"string","enum":["pending","sent","failed"]},"expiresAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","email","role","status","deliveryStatus","expiresAt","lastSentAt","createdAt","inviteUrl"],"additionalProperties":false},"WorkspaceInviteLink":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"wil_[0-9a-zA-Z]{40}$","description":"Unique identifier for the workspace invite link.","example":"wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"useCount":{"type":"integer","minimum":0},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","role","expiresAt","createdAt","useCount","lastUsedAt","inviteUrl"],"additionalProperties":false},"ProjectListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deploymentCount":{"type":"number"},"latestRelease":{"$ref":"#/components/schemas/ProjectReleaseInfo"}}}]},"DeploymentPortalAppearancePreset":{"type":"string","enum":["clean","technical","enterprise","playful","minimal"],"default":"clean","description":"Curated visual style for the deployment portal."},"DeploymentPortalAccentColor":{"type":"string","enum":["blue","purple","green","orange","pink","slate"],"default":"blue","description":"Accent color used for highlights and primary actions."},"DeploymentPortalDensity":{"type":"string","enum":["comfortable","compact"],"default":"comfortable","description":"Layout density for portal content."},"ProjectReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","gitMetadata","createdAt"]},"GitMetadata":{"type":"object","nullable":true,"properties":{"commitSha":{"type":"string","nullable":true,"maxLength":40,"description":"The hash of the commit","example":"dc36199b2234c6586ebe05ec94078a895c707e29"},"commitMessage":{"type":"string","nullable":true,"maxLength":1024,"description":"The commit message","example":"add method to measure Interaction to Next Paint (INP) (#36490)"},"commitRef":{"type":"string","nullable":true,"maxLength":256,"description":"The branch or tag on which the commit was made","example":"main"},"commitDate":{"type":"string","nullable":true,"format":"date-time","description":"The date and time when the commit was created","example":"2026-03-16T12:00:00Z"},"dirty":{"type":"boolean","nullable":true,"description":"Whether or not there have been modifications to the working tree since the latest commit","example":true},"remoteUrl":{"type":"string","nullable":true,"maxLength":2048,"description":"The git repository's remote origin url","example":"https://github.com/alienplatform/alien"},"commitAuthorName":{"type":"string","nullable":true,"maxLength":256,"description":"The name of the author of the commit (from git config)","example":"John Doe"},"commitAuthorEmail":{"type":"string","nullable":true,"maxLength":256,"format":"email","description":"The email of the author of the commit (from git config)","example":"john@example.com"},"commitAuthorLogin":{"type":"string","nullable":true,"maxLength":256,"description":"The provider username of the commit author (e.g., GitHub login), resolved server-side from the commit email","example":"johndoe"},"commitAuthorAvatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"The avatar URL of the commit author, resolved server-side from the provider login","example":"https://github.com/johndoe.png"},"provider":{"$ref":"#/components/schemas/GitProvider"}}},"GitProvider":{"oneOf":[{"$ref":"#/components/schemas/GitHubProvider"},{"$ref":"#/components/schemas/GitLabProvider"},{"nullable":true}],"description":"Provider-specific repository information, resolved server-side from remoteUrl"},"GitHubProvider":{"type":"object","properties":{"type":{"type":"string","enum":["github"]},"org":{"type":"string","maxLength":256,"description":"Repository owner (user or organization)"},"repo":{"type":"string","maxLength":256,"description":"Repository name"}},"required":["type","org","repo"]},"GitLabProvider":{"type":"object","properties":{"type":{"type":"string","enum":["gitlab"]},"namespace":{"type":"string","maxLength":256,"description":"Group/project namespace"},"project":{"type":"string","maxLength":256,"description":"Project name"}},"required":["type","namespace","project"]},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","createdAt","workspaceId"]},"ProjectIDOrNamePathParam":{"type":"string","maxLength":100,"description":"Project ID or name."},"ProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","redirectUris"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"hasClientSecret":{"type":"boolean","enum":[true]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","clientId","hasClientSecret","redirectUris"]}]},"GcpOAuthClientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[a-zA-Z0-9_-]+-[a-zA-Z0-9_-]+\\.apps\\.googleusercontent\\.com$","description":"Google OAuth web client ID.","example":"1234567890-abc123.apps.googleusercontent.com"},"UpdateProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId"]}]},"GcpOAuthClientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Google OAuth web client secret. Write-only; never returned by the API.","example":"GOCSPX-example"},"UpdateProject":{"type":"object","properties":{"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."}}},"DeploymentPortalDomainResponse":{"type":"object","properties":{"deploymentPortalEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"},"packageEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["deploymentPortalEndpoint","packageEndpoint"]},"DomainEndpoint":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dend_[0-9a-z]{28}$","description":"Unique identifier for the domain endpoint.","example":"dend_1bb6gdvm1bs74acqkjstcgv"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domainId":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"kind":{"$ref":"#/components/schemas/DomainEndpointKind"},"owner":{"$ref":"#/components/schemas/DomainEndpointOwner"},"hostname":{"type":"string","minLength":1,"maxLength":253},"status":{"$ref":"#/components/schemas/DomainEndpointStatus"},"provider":{"type":"string","nullable":true},"providerState":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"managedDnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPortalManagedDnsRecord"}},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"retryAttempts":{"type":"integer","minimum":0},"nextStepAfter":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","workspaceId","domainId","kind","owner","hostname","status","managedDnsRecords","retryAttempts","createdAt","updatedAt"]},"DomainEndpointKind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"DomainEndpointOwner":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DomainEndpointOwnerType"},"id":{"type":"string"}},"required":["type","id"]},"DomainEndpointOwnerType":{"type":"string","enum":["workspace","project","manager"]},"DomainEndpointStatus":{"type":"string","enum":["waiting_for_domain","provisioning","waiting_for_dns","waiting_for_health","active","failed","deleting"]},"DeploymentPortalManagedDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true}},"required":["name","type","value"]},"DeploymentLinkSetupResponse":{"type":"object","properties":{"activeRelease":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","nullable":true},"stack":{"$ref":"#/components/schemas/StackByPlatform"}},"required":["id","version","stack"]},"visiblePackageTypes":{"type":"array","items":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"}},"visibleSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}}},"required":["activeRelease","visiblePackageTypes","visibleSetupMethods"]},"StackByPlatform":{"type":"object","nullable":true,"properties":{"aws":{"nullable":true},"gcp":{"nullable":true},"azure":{"nullable":true},"kubernetes":{"nullable":true},"machines":{"nullable":true},"local":{"nullable":true},"test":{"nullable":true}},"additionalProperties":false},"DeploymentSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform","helm","cli","manual"]},"DeploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments allowed in this deployment group"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","projectId","workspaceId","createdAt"]},"CreateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments in this deployment group"}},"required":["name","project"]},"EnsureDeploymentGroupByNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments for newly created groups"}},"required":["name","project"]},"ProjectIDOrNameQueryParam":{"type":"string","maxLength":100,"description":"Filter by project ID or name."},"UpdateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"maxDeployments":{"type":"integer","minimum":1,"description":"Maximum number of deployments in this deployment group"}}},"CreateDeploymentGroupTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The API key token"},"deploymentLink":{"type":"string","description":"Formatted deployment link"}},"required":["token","deploymentLink"]},"CreateDeploymentGroupTokenRequest":{"type":"object","properties":{"description":{"type":"string","description":"Description for the API key"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"},"deploymentSetupConfig":{"$ref":"#/components/schemas/DeploymentSetupConfig"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["deploymentSetupConfig"]},"DeploymentSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."}},"required":["metadata","policy","environmentVariables"]},"DeploymentSetupMetadata":{"type":"object","additionalProperties":{"nullable":true}},"DeploymentSetupPolicy":{"type":"object","properties":{"allowedPlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"allowedKubernetesBasePlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","on-prem"]},"minItems":1,"description":"Kubernetes base environments the recipient may target."},"allowedKubernetesClusterSources":{"type":"array","items":{"$ref":"#/components/schemas/KubernetesClusterSource"},"minItems":1,"description":"Whether recipients may create a cluster, use an existing cluster, or both."},"allowedSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}},"allowReleasePinning":{"type":"boolean"},"stackSettings":{"$ref":"#/components/schemas/DeploymentSetupStackSettingsPolicy"}},"required":["allowedPlatforms","allowedSetupMethods"]},"KubernetesClusterSource":{"type":"string","enum":["create","existing"]},"DeploymentSetupStackSettingsPolicy":{"type":"object","properties":{"defaults":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"allowedDeploymentModels":{"type":"array","items":{"type":"string","enum":["push","pull","airgapped"]}},"allowedNetworkModes":{"type":"array","items":{"type":"string","enum":["none","create","default","byo"]}},"allowedUpdatesModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required"]}},"allowedTelemetryModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required","off"]}},"allowedHeartbeatsModes":{"type":"array","items":{"type":"string","enum":["on","off"]}},"allowExternalBindings":{"type":"boolean"},"allowCustomRegistry":{"type":"boolean"}}},"EnvironmentVariableConfig":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"value":{"type":"string","maxLength":10000,"description":"Variable value (encrypted in database)"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","value","type","targetResources"]},"EnvironmentVariableType":{"type":"string","enum":["plain","secret"],"description":"Variable type (plain or secret)"},"EncryptedStackInputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EncryptedStackInputValue"},"default":{}},"EncryptedStackInputValue":{"type":"object","properties":{"value":{"type":"string","description":"Encrypted JSON-encoded input value."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"]},"secret":{"type":"boolean","description":"Whether the original input is secret."}},"required":["value","kind","secret"]},"StackInputValuesRequest":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{}},"StackInputValueRequest":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"CreateFirstPartyDeploymentSessionResponse":{"type":"object","properties":{"token":{"type":"string","description":"The deployment-group session token"}},"required":["token"]},"Package":{"type":"object","properties":{"id":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"type":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"},"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string","description":"Package version (e.g., '1.0.0', 'rel_abc123')"},"sourceReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release used as package build input. Null for release-less packages such as Operate Operator images.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"setupFingerprints":{"$ref":"#/components/schemas/SetupFingerprintMap"},"packageBuildInputHash":{"type":"string","description":"Hash of Platform-known package build request inputs: package type, source release, setup fingerprints, package config, and setup contract version"},"config":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"}},"required":["displayName","name"],"description":"Branding configuration for the deploy CLI binary."},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for CloudFormation packages"},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"}},"required":["chartName","description"],"description":"Configuration for the Helm chart package"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"}},"required":["displayName","name"],"description":"Branding configuration for the Operator image."},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for Terraform package generation."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]}],"description":"Type-specific configuration"},"outputs":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"digest":{"type":"string","description":"Image digest (e.g., \"sha256:abc123...\")"},"image":{"type":"string","description":"Full image reference (e.g., \"public.ecr.aws/acme/operators/project-id:1.2.3\")"},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain embedded into the Operator binary, if whitelabeled."}},"required":["digest","image"],"description":"Outputs from an Operator image package build"},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]},{"nullable":true}],"description":"Package outputs (only when status is 'ready')"},"error":{"nullable":true,"description":"Error information if status is 'failed'"},"sourceBinarySha256":{"type":"string","nullable":true,"description":"Builder-recorded source binary SHA256 (for cli/terraform packages)"},"retries":{"type":"integer","minimum":0,"description":"Number of build retries"},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"leaseExpiresAt":{"type":"string","format":"date-time","nullable":true,"description":"Expiration of the current builder lease"},"buildPhase":{"type":"string","nullable":true,"enum":["building","publishing",null],"description":"Coarse package build phase"},"lastProgressAt":{"type":"string","format":"date-time","nullable":true,"description":"Last successful builder lease renewal or phase change"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","projectId","workspaceId","type","status","version","setupFingerprints","packageBuildInputHash","config","retries","createdAt","updatedAt"]},"SetupFingerprintMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SetupFingerprintInfo"},"description":"Per-target setup compatibility fingerprints copied from the source release"},"SetupFingerprintInfo":{"type":"object","properties":{"target":{"$ref":"#/components/schemas/SetupTarget"},"fingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"version":{"$ref":"#/components/schemas/SetupFingerprintVersion"}},"required":["target","fingerprint","version"]},"SetupTarget":{"type":"string","minLength":1,"description":"Stable target key for the setup contract, e.g. aws/us-east-1"},"SetupFingerprint":{"type":"string","minLength":1,"description":"Deterministic setup contract fingerprint for one setup target"},"SetupFingerprintVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup fingerprint algorithm version"},"ReleaseListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Release"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"rollout":{"type":"object","nullable":true,"properties":{"updatedCount":{"type":"integer","description":"Deployments that finished updating to this release (excludes initial provisions)"},"pendingCount":{"type":"integer","description":"Deployments currently targeting this release but not yet running it"},"avgDurationMs":{"type":"number","nullable":true,"description":"Average time from release creation until a deployment finished updating, in milliseconds"}},"required":["updatedCount","pendingCount","avgDurationMs"],"description":"Rollout stats, included when ?include=rollout is used"}}}]},"Release":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"projectId":{"type":"string","maxLength":128},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"setupFingerprints":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintMap"},{"description":"Per-target setup compatibility fingerprints for this release"}]},"rootDirectory":{"type":"string","nullable":true,"maxLength":256},"workspaceId":{"type":"string","maxLength":128}},"required":["id","projectId","version","createdAt","setupFingerprints","workspaceId"]},"CreateReleaseRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256}},"required":["project"]},"ReleaseAuthorFilterItem":{"type":"object","properties":{"login":{"type":"string","nullable":true,"description":"Provider username (e.g., GitHub login)"},"name":{"type":"string","nullable":true,"description":"Git commit author name"},"avatarUrl":{"type":"string","nullable":true,"format":"uri","description":"Author avatar URL"}},"required":["login","name","avatarUrl"]},"DeploymentListItemResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if in a failed state"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"$ref":"#/components/schemas/ManagerID"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentProtocolVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DeploymentState protocol version owned by the runtime/manager"},"OperatorCapabilityReport":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":128},"state":{"$ref":"#/components/schemas/OperatorCapabilityState"},"detail":{"type":"string","nullable":true,"maxLength":512}},"required":["key","state"]},"OperatorCapabilityState":{"type":"string","enum":["granted","denied","unavailable"]},"ManagerID":{"type":"string","pattern":"mgr_[0-9a-z]{28}$","description":"ID of the manager","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"DeploymentReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","version","createdAt"]},"DeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"}},"required":["id","name"]},"DeploymentProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"}},"required":["id","name"]},"DeploymentStats":{"type":"object","properties":{"total":{"type":"number","description":"Total number of deployments matching filters"},"byStatus":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by status (only includes statuses with non-zero counts)"},"byPlatform":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by platform (only includes platforms with non-zero counts)"},"byCurrentRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by currentReleaseId. The empty string key represents deployments with no current release (initial provisioning)."},"byPinnedRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by pinnedReleaseId among deployments that are pinned. Excludes unpinned deployments."}},"required":["total","byStatus","byPlatform","byCurrentRelease","byPinnedRelease"]},"DeploymentDetailResponse":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}}}]},"Deployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"targetEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of target environment variables for the deployment"},"currentEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of current environment variables for the deployment"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentConnectionInfo":{"type":"object","properties":{"arc":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Manager URL for commands"},"deploymentId":{"type":"string","description":"Deployment ID to use in command requests"}},"required":["url","deploymentId"]},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"publicEndpoints":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"protocol":{"type":"string","enum":["http","tcp"]},"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"wildcardHost":{"type":"string"}},"required":["url","protocol","host","port"]},"description":"Public endpoints keyed by endpoint name."}},"required":["type"]},"description":"Deployed resources and their public endpoints"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"platform":{"type":"string"}},"required":["arc","resources","status","platform"]},"CreateDeploymentResponse":{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Effective deployment model persisted for the deployment."},"token":{"type":"string","description":"Deployment token (only returned when using deployment group token)"}},"required":["deployment","deploymentModel"]},"NewDeploymentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentGroupId":{"type":"string","description":"Required for workspace/project tokens. Deployment group tokens use their own group automatically."},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Optional manager to assign. If omitted, the project default or system manager is selected."}]},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"Stack settings for deployment customization"},"resourcePrefix":{"$ref":"#/components/schemas/ResourcePrefix"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method that created the deployment. Defaults to cli."}]},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup method metadata used to guide privileged teardown."}]},"inputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{},"description":"Stack input values provided by the deployment creator."},"operatorScope":{"type":"string","minLength":1,"maxLength":512,"description":"Display-only scope reported by the Operator manifest."},"operatorPermission":{"type":"string","minLength":1,"maxLength":64,"description":"Display-only permission tier reported by the Operator manifest."},"initialDesiredRelease":{"type":"string","enum":["active","none"],"default":"active","description":"Desired-release selection for a new deployment. Use none to register an environment without initially requesting a release; later updates can assign one."}},"required":["name","platform","project"],"additionalProperties":false,"description":"Request schema for creating a new deployment"},"ResourcePrefix":{"type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?=[a-z0-9])){1,38}[a-z0-9]$","description":"Optional physical-name prefix for generated cloud resources. Omit to let the manager generate one."},"ImportDeploymentRequest":{"oneOf":[{"$ref":"#/components/schemas/ForwardImportRequest"},{"$ref":"#/components/schemas/PersistImportedDeploymentRequest"}],"description":"Request schema for importing a deployment from resolved setup infrastructure"},"ForwardImportRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["forward"],"default":"forward"},"project":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user-session callers."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Required for user-session callers. Deployment-group tokens use their own group automatically.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager ID. If omitted, the first suitable manager for the source platform is used."}]},"source":{"$ref":"#/components/schemas/ImportSource"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["source"]},"ImportSource":{"type":"object","properties":{"deploymentName":{"type":"string","minLength":1,"description":"User-chosen deployment name. Must be unique within the deployment group; the manager returns 409 on collision."},"resourcePrefix":{"allOf":[{"$ref":"#/components/schemas/ResourcePrefix"},{"description":"Stable physical-name prefix used by the setup artifact."}]},"sourceKind":{"$ref":"#/components/schemas/ImportSourceKind"},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup source metadata needed to guide privileged teardown."}]},"releaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release that produced the setup artifact. Defaults to latest.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Cloud platform of the imported stack"},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"region":{"type":"string","description":"Region or location reported by the setup artifact"},"setupTarget":{"allOf":[{"$ref":"#/components/schemas/SetupTarget"},{"description":"Setup target this package was generated for"}]},"setupImportFormatVersion":{"$ref":"#/components/schemas/SetupImportFormatVersion"},"setupFingerprint":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprint"},{"description":"Setup compatibility fingerprint embedded in the package"}]},"setupFingerprintVersion":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintVersion"},{"description":"Setup fingerprint algorithm version embedded in the package"}]},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ImportedResource"},"minItems":1}},"required":["deploymentName","resourcePrefix","platform","region","setupTarget","setupImportFormatVersion","setupFingerprint","setupFingerprintVersion","stackSettings","resources"],"description":"Resolved setup import payload"},"ImportSourceKind":{"type":"string","enum":["cloudformation","terraform","helm"],"description":"Source label for observability only — does not affect import behavior."},"KubernetesBasePlatform":{"type":"string","enum":["aws","gcp","azure"],"description":"Base cloud platform for cloud-backed Kubernetes imports."},"SetupImportFormatVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup import payload format version embedded in the package"},"ImportedResource":{"type":"object","properties":{"id":{"type":"string","description":"Resource id from the active stack"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"importData":{"type":"object","additionalProperties":{"nullable":true},"description":"Resolved typed import payload"}},"required":["id","type","importData"]},"PersistImportedDeploymentRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["persist"]},"name":{"type":"string","minLength":1,"description":"Deployment name. Must be unique within the deployment group."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"stackState":{"nullable":true},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"runtimeMetadata":{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},"scheduleReconciliation":{"type":"boolean","default":false},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"default":"provisioning","description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"currentReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"setupMetadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"setupTarget":{"$ref":"#/components/schemas/SetupTarget"},"setupFingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"setupFingerprintVersion":{"$ref":"#/components/schemas/SetupFingerprintVersion"},"deploymentToken":{"type":"string"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["mode","name","deploymentGroupId","managerId","platform","stackSettings","runtimeMetadata","deploymentProtocolVersion","setupTarget","setupFingerprint","setupFingerprintVersion"]},"SetFirstPartyDeploymentInputsResponse":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"SetFirstPartyDeploymentInputsRequest":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["platform"]},"SetupRegistrationOperationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"status":{"$ref":"#/components/schemas/SetupRegistrationOperationStatus"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"physicalResourceId":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/SetupRegistrationOperationResult"},"error":{"type":"object","nullable":true,"properties":{"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["message","retryable"]}},"required":["id","action","sourceKind","status","deploymentId","physicalResourceId","result","error"]},"SetupRegistrationAction":{"type":"string","enum":["create","update","delete"]},"SetupRegistrationOperationStatus":{"type":"string","enum":["pending","processing","waiting-for-handoff","succeeded","failed","responding","responded"]},"SetupRegistrationOperationResult":{"type":"object","nullable":true,"properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deploymentToken":{"type":"string","nullable":true},"helmValues":{"type":"string","nullable":true}},"required":["deploymentId","deploymentToken","helmValues"]},"CreateSetupRegistrationOperationRequest":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"source":{"allOf":[{"$ref":"#/components/schemas/ImportSource"}],"nullable":true},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":512},"cloudFormation":{"$ref":"#/components/schemas/SetupRegistrationCloudFormationTarget"}},"required":["action","sourceKind"],"additionalProperties":false},"SetupRegistrationCloudFormationTarget":{"type":"object","nullable":true,"properties":{"stackId":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"logicalResourceId":{"type":"string","minLength":1},"responseUrl":{"type":"string","format":"uri"},"physicalResourceId":{"type":"string","nullable":true,"minLength":1},"serviceTimeoutSeconds":{"type":"integer","minimum":60,"maximum":7200,"default":3300}},"required":["stackId","requestId","logicalResourceId","responseUrl"],"additionalProperties":false},"DeleteDeploymentResponse":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]},"message":{"type":"string"}},"required":["action","message"]},"DeleteDeploymentRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]}},"required":["action"]},"PinReleaseRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release ID to pin the deployment to. Set to null to unpin and use active release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for pinning/unpinning deployment release"},"DeploymentInputsResponse":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"description":"Current non-secret input values. Secret values are never returned."},"providedInputIds":{"type":"array","items":{"type":"string"},"description":"Input IDs that currently have a value, including redacted secrets."}},"required":["inputs","values","providedInputIds"]},"UpdateDeploymentInputsResponse":{"allOf":[{"$ref":"#/components/schemas/DeploymentInputsResponse"},{"type":"object","properties":{"runtimeUpdateRequested":{"type":"boolean"}},"required":["runtimeUpdateRequested"]}]},"UpdateDeploymentInputsRequest":{"type":"object","properties":{"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"clearInputIds":{"type":"array","items":{"type":"string"},"default":[]}},"additionalProperties":false},"UpdateDeploymentEnvironmentVariablesRequest":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"type":{"type":"string","enum":["plain","secret"],"description":"Variable type"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources)"}},"required":["name","value","type"]},"description":"Environment variables for the deployment"}},"required":["variables"],"additionalProperties":false,"description":"Request schema for updating deployment environment variables"},"CreateDeploymentTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The generated deployment token (only shown once)"},"deploymentId":{"type":"string","description":"The deployment ID that this token is scoped to"}},"required":["token","deploymentId"]},"CreateDeploymentTokenRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128,"description":"Optional description for the deployment token"},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiration date for the deployment token"}},"required":["description"]},"CreateManagerResponse":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["pending"]},"setupToken":{"type":"string"},"setupTokenId":{"type":"string"},"deploymentLink":{"type":"string"},"setupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["plain","secret"]},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["name","type","targetResources"]}}},"required":["metadata","policy","environmentVariables"]},"setup":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["cloudformation"]},"deploymentPortalUrl":{"type":"string"},"launchUrl":{"type":"string"},"templateUrl":{"type":"string"},"stackName":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","launchUrl","templateUrl","stackName","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["google-oauth"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"oauthStartUrl":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","oauthStartUrl","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["terraform"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"providerSource":{"type":"string"},"moduleSource":{"type":"string"},"moduleVersion":{"type":"string"},"moduleInputs":{"type":"object","additionalProperties":{"type":"string"}},"mainTf":{"type":"string"},"tfvars":{"type":"string"},"commands":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","providerSource","moduleSource","moduleInputs","mainTf","tfvars","commands","stackSettings"]}]}},"required":["managerId","setupStatus","setupToken","setupTokenId","deploymentLink","setupConfig","setup"]},"NewManagerRequest":{"type":"object","properties":{"name":{"type":"string"},"cloud":{"$ref":"#/components/schemas/PrivateManagerCloud"},"region":{"type":"string","minLength":1,"maxLength":64,"description":"Cloud region for the manager."},"setupMethod":{"$ref":"#/components/schemas/PrivateManagerSetupMethod"},"network":{"type":"string","enum":["create","default"],"description":"Optional network mode for the private-manager setup. Defaults to create for production isolation; default uses the provider default network for faster dev/test setup."},"otlpConfig":{"type":"object","properties":{"logsEndpoint":{"type":"string","format":"uri","description":"External OTLP logs endpoint (e.g. https://api.axiom.co/v1/logs)"},"logsAuthHeader":{"type":"string","description":"Auth header in 'key=value,...' format (e.g. 'authorization=Bearer ,x-axiom-dataset=')"}},"required":["logsEndpoint","logsAuthHeader"],"description":"Optional external OTLP config for forwarding logs to Axiom, Datadog, etc. Falls back to built-in DeepStore when not set."}},"required":["name","cloud","region"]},"PrivateManagerCloud":{"type":"string","enum":["aws","gcp","azure"],"description":"Cloud where the private manager will be deployed."},"PrivateManagerSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform"],"description":"Optional setup method. Defaults to cloudformation for AWS, google-oauth for GCP, and terraform for Azure."},"ManagerRetryResponse":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/CreateManagerResponse"},{"type":"object","properties":{"mode":{"type":"string","enum":["setup"]}},"required":["mode"]}]},{"$ref":"#/components/schemas/ManagerRetryDeploymentResponse"}]},"ManagerRetryDeploymentResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["deployment"]},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["provisioning"]},"deploymentId":{"type":"string"},"message":{"type":"string"}},"required":["mode","managerId","setupStatus","deploymentId","message"]},"Manager":{"type":"object","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for the manager"}]},"name":{"type":"string","description":"Display name of the manager"},"targets":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms this manager can handle"},"cloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where this private manager is deployed"},"region":{"type":"string","nullable":true,"description":"Cloud region selected for this private manager"},"setupStatus":{"type":"string","nullable":true,"enum":["pending","provisioning","active","failed","deleting","deleted",null],"description":"Private manager setup lifecycle status"},"url":{"type":"string","nullable":true,"format":"uri","description":"Manager URL (self-reported via heartbeat). DeepStore endpoints are exposed through this URL (e.g., {url}/v1/logs)"},"managementConfigs":{"$ref":"#/components/schemas/ManagerManagementConfigs"},"isSystem":{"type":"boolean","description":"Whether this is a system manager (Alien-hosted)"},"workspaceId":{"type":"string","description":"The workspace ID (for system managers, this is ALIEN_WORKSPACE_ID)"},"status":{"$ref":"#/components/schemas/ManagerStatus"},"version":{"type":"string","nullable":true,"description":"Manager version (self-reported via heartbeat)"},"metrics":{"type":"object","nullable":true,"properties":{"activeDeployments":{"type":"number","description":"Number of active deployments"},"pendingDeployments":{"type":"number","description":"Number of pending deployments"},"memoryUsageMb":{"type":"number","description":"Memory usage in megabytes"},"cpuUsagePercent":{"type":"number","description":"CPU usage percentage"}},"description":"Runtime metrics (self-reported via heartbeat)"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the manager"},"logsDatabaseId":{"type":"string","nullable":true,"description":"ID of the logs database associated with this manager"},"managedDeploymentCount":{"type":"integer","minimum":0,"description":"Number of deployments currently being managed by this manager"},"defaultProjectCount":{"type":"integer","minimum":0,"description":"Number of projects that select this manager as a default manager"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the manager was created"}},"required":["id","name","targets","managementConfigs","isSystem","workspaceId","status","managedDeploymentCount","defaultProjectCount","createdAt"],"description":"Manager schema"},"ManagerManagementConfigs":{"type":"object","properties":{"aws":{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"},"platform":{"type":"string","enum":["aws"]}},"required":["managingRoleArn","platform"]},"gcp":{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"},"platform":{"type":"string","enum":["gcp"]}},"required":["serviceAccountEmail","platform"]},"azure":{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."},"platform":{"type":"string","enum":["azure"]}},"required":["managingTenantId","oidcIssuer","oidcSubject","platform"]},"kubernetes":{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}},"description":"Per-platform management configurations for cross-account access (self-reported via heartbeat)"},"ManagerStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"],"description":"Current health status"},"ManagerDomainBindingResponse":{"type":"object","properties":{"managerDomainBinding":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["managerDomainBinding"]},"UpdateManagerDomainBinding":{"type":"object","properties":{"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"}},"additionalProperties":false},"UpdateManagerRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Optional release ID to update to. If not provided, the active release will be chosen","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for updating a manager to a new release"},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"debugSessionId":{"type":"string","nullable":true,"pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"data":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["LoadingConfiguration"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["Finished"]}},"required":["type"]},{"type":"object","properties":{"stack":{"type":"string","description":"Name of the stack being built"},"type":{"type":"string","enum":["BuildingStack"]}},"required":["stack","type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform being targeted"},"stack":{"type":"string","description":"Name of the stack being checked"},"type":{"type":"string","enum":["RunningPreflights"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"targetTriple":{"type":"string","description":"Target triple for the runtime"},"type":{"type":"string","enum":["DownloadingAlienRuntime"]},"url":{"type":"string","description":"URL being downloaded from"}},"required":["targetTriple","type","url"]},{"type":"object","properties":{"relatedResources":{"type":"array","items":{"type":"string"},"description":"All resource names sharing this build (for deduped container groups)"},"resourceName":{"type":"string","description":"Name of the resource being built"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["BuildingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being built"},"type":{"type":"string","enum":["BuildingImage"]}},"required":["image","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being pushed"},"progress":{"oneOf":[{"type":"object","properties":{"bytesUploaded":{"type":"integer","minimum":0,"description":"Bytes uploaded so far"},"layersUploaded":{"type":"integer","minimum":0,"description":"Number of layers uploaded so far"},"operation":{"type":"string","description":"Current operation being performed"},"totalBytes":{"type":"integer","minimum":0,"description":"Total bytes to upload"},"totalLayers":{"type":"integer","minimum":0,"description":"Total number of layers to upload"}},"required":["bytesUploaded","layersUploaded","operation","totalBytes","totalLayers"],"description":"Progress information for image push operations"},{"nullable":true}]},"type":{"type":"string","enum":["PushingImage"]}},"required":["image","type"]},{"type":"object","properties":{"destination":{"type":"string","nullable":true,"description":"Human-readable destination for pushed images"},"platform":{"type":"string","description":"Target platform"},"stack":{"type":"string","description":"Name of the stack being pushed"},"type":{"type":"string","enum":["PushingStack"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"resourceName":{"type":"string","description":"Name of the resource being pushed"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["PushingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"project":{"type":"string","description":"Project name"},"type":{"type":"string","enum":["CreatingRelease"]}},"required":["project","type"]},{"type":"object","properties":{"language":{"type":"string","description":"Language being compiled (rust, typescript, etc.)"},"progress":{"type":"string","nullable":true,"description":"Current progress/status line from the build output"},"type":{"type":"string","enum":["CompilingCode"]}},"required":["language","type"]},{"type":"object","properties":{"nextState":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},"suggestedDelayMs":{"type":"integer","nullable":true,"minimum":0,"description":"An suggested duration to wait before executing the next step."},"type":{"type":"string","enum":["StackStep"]}},"required":["nextState","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["GeneratingCloudFormationTemplate"]}},"required":["type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform for which the template is being generated"},"type":{"type":"string","enum":["GeneratingTemplate"]}},"required":["platform","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being provisioned"},"releaseId":{"type":"string","description":"ID of the release being deployed to the agent"},"type":{"type":"string","enum":["ProvisioningAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being updated"},"releaseId":{"type":"string","description":"ID of the new release being deployed to the agent"},"type":{"type":"string","enum":["UpdatingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being deleted"},"releaseId":{"type":"string","description":"ID of the release that was running on the agent"},"type":{"type":"string","enum":["DeletingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being debugged"},"debugSessionId":{"type":"string","description":"ID of the debug session"},"type":{"type":"string","enum":["DebuggingAgent"]}},"required":["agentId","debugSessionId","type"]},{"type":"object","properties":{"strategyName":{"type":"string","description":"Name of the deployment strategy being used"},"type":{"type":"string","enum":["PreparingEnvironment"]}},"required":["strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being deployed"},"type":{"type":"string","enum":["DeployingStack"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being tested"},"type":{"type":"string","enum":["RunningTestWorker"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpStack"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpEnvironment"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"platformName":{"type":"string","description":"Name of the platform (e.g., \"AWS\", \"GCP\")"},"type":{"type":"string","enum":["SettingUpPlatformContext"]}},"required":["platformName","type"]},{"type":"object","properties":{"repositoryName":{"type":"string","description":"Name of the docker repository"},"type":{"type":"string","enum":["EnsuringDockerRepository"]}},"required":["repositoryName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeployingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"roleArn":{"type":"string","description":"ARN of the role to assume"},"type":{"type":"string","enum":["AssumingRole"]}},"required":["roleArn","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"type":{"type":"string","enum":["ImportingStackStateFromCloudFormation"]}},"required":["cfnStackName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeletingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"bucketNames":{"type":"array","items":{"type":"string"},"description":"Names of the S3 buckets being emptied"},"type":{"type":"string","enum":["EmptyingBuckets"]}},"required":["bucketNames","type"]},{"type":"object","properties":{"deploymentGroupId":{"type":"string","description":"ID of the deployment group this slot belongs to"},"deploymentId":{"type":"string","description":"ID of the deployment that was created"},"releaseId":{"type":"string","nullable":true,"description":"Initial release the slot was created with, if any"},"type":{"type":"string","enum":["DeploymentCreated"]}},"required":["deploymentGroupId","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousReleaseId":{"type":"string","nullable":true,"description":"ID of the release that was previously live, if any"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentReleased"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release the platform was trying to deploy, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"phase":{"type":"string","enum":["preflights","provisioning","updating","deleting"],"description":"Phase of a deployment at which a failure occurred.\n\nDerived from the source deployment status: `preflights-failed` →\n`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →\n`Updating`, `delete-failed` → `Deleting`.\n`refresh-failed` is modelled separately via `DeploymentDegraded`."},"type":{"type":"string","enum":["DeploymentFailed"]}},"required":["deploymentId","error","phase","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"type":{"type":"string","enum":["DeploymentDegraded"]}},"required":["deploymentId","error","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentRecovered"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment that was deleted"},"type":{"type":"string","enum":["DeploymentDeleted"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release that the failed attempt was targeting, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"previousError":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"type":{"type":"string","enum":["DeploymentRetryRequested"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release being redeployed"},"type":{"type":"string","enum":["DeploymentRedeployRequested"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"pinnedReleaseId":{"type":"string","description":"ID of the release that is now pinned"},"previousPinnedReleaseId":{"type":"string","nullable":true,"description":"ID of the previously pinned release, if any"},"type":{"type":"string","enum":["DeploymentReleasePinned"]}},"required":["deploymentId","pinnedReleaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousPinnedReleaseId":{"type":"string","description":"ID of the release that was previously pinned"},"type":{"type":"string","enum":["DeploymentReleaseUnpinned"]}},"required":["deploymentId","previousPinnedReleaseId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"changedKeys":{"type":"array","items":{"type":"string"},"description":"Names of the environment variables that changed (added, removed, or modified)"},"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentEnvironmentUpdated"]}},"required":["changedKeys","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentDeletionRequested"]}},"required":["deploymentId","type"]}]},"state":{"oneOf":[{"type":"object","properties":{"failed":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]}},"description":"Event failed with an error"}},"required":["failed"]},{"type":"string","enum":["none"]},{"type":"string","enum":["started"]},{"type":"string","enum":["success"]}],"description":"Represents the state of an event"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","data","state","projectId","createdAt","workspaceId"]},"GenerateManagerTokenResponse":{"type":"object","properties":{"accessToken":{"type":"string","description":"Platform JWT for authenticating with the manager"},"expiresIn":{"type":"number","nullable":true,"description":"Token lifetime in seconds"},"tokenType":{"type":"string","enum":["Bearer"]},"managerUrl":{"type":"string","description":"Manager URL for direct access"},"databaseId":{"type":"string","nullable":true,"description":"Log database ID (null if logs not configured)"},"controlPlaneUrl":{"type":"string","nullable":true,"description":"Log control plane URL (null if logs not configured)"}},"required":["accessToken","expiresIn","tokenType","managerUrl","databaseId","controlPlaneUrl"]},"GenerateManagerTokenRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to scope token access to."}},"required":["project"]},"ResolveManagerGcpOAuthProviderResponse":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId","clientSecret"]}]},"ResolveManagerGcpOAuthProviderRequest":{"type":"object","properties":{"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group bearer token whose project-level OAuth provider should be resolved."},"returnOrigin":{"type":"string","format":"uri","description":"Browser origin that will receive the Google OAuth callback result. Must be a first-party dashboard origin or the active portal origin for the deployment group's project."}},"required":["deploymentGroupToken"]},"ManagerHeartbeatResponse":{"type":"object","properties":{"acknowledged":{"type":"boolean"},"timestamp":{"type":"string"}},"required":["acknowledged","timestamp"]},"ManagerHeartbeatRequest":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Current health status"},"version":{"type":"string","description":"Manager version"},"url":{"type":"string","format":"uri","description":"Manager public URL (for accessing DeepStore endpoints)"},"managementConfigs":{"allOf":[{"$ref":"#/components/schemas/ManagerManagementConfigs"},{"description":"Per-platform management configurations for cross-account access"}]},"metrics":{"type":"object","properties":{"activeDeployments":{"type":"number"},"pendingDeployments":{"type":"number"},"memoryUsageMb":{"type":"number"},"cpuUsagePercent":{"type":"number"}},"description":"Optional runtime metrics"}},"required":["status","url","managementConfigs"]},"ManagerDeployment":{"type":"object","properties":{"platform":{"type":"string","description":"Platform of the internal deployment"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status of the internal deployment"},"deploymentId":{"type":"string","description":"Internal deployment ID"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Currently deployed private manager release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Target private manager release for an in-progress update","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"error":{"nullable":true,"description":"Latest provision / upgrade / delete error"},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type"},"status":{"type":"string","description":"Resource status"},"outputs":{"type":"object","additionalProperties":{"nullable":true},"description":"Resource outputs"}},"required":["type","status"]},"description":"Simplified stack state resources"},"environmentInfo":{"nullable":true,"description":"Manager environment info"}},"required":["platform","status","deploymentId","resources"]},"PrepareOperatorManifestPackageResponse":{"type":"object","properties":{"package":{"$ref":"#/components/schemas/Package"}},"required":["package"]},"PrepareOperatorManifestPackageRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}},"required":["project"],"additionalProperties":false},"RenderOperatorManifestResponse":{"type":"object","properties":{"manifest":{"type":"string","description":"Rendered multi-document Kubernetes manifest"},"applyCommand":{"type":"string","description":"kubectl command for applying the manifest from a file"},"filename":{"type":"string","description":"Suggested local filename"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL embedded in the manifest"},"imagePending":{"type":"boolean","description":"True when the operator image is still building. The manifest contains a placeholder image () and must not be applied yet — re-render once the operator-image package is ready to get the real image."}},"required":["manifest","applyCommand","filename","managerUrl","imagePending"]},"RenderOperatorManifestRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"format":{"type":"string","enum":["raw","helm"],"default":"raw","description":"raw: a kubectl-applyable manifest for one cluster. helm: a paste-into-your-chart template whose namespace and environment name come from Helm at install time."},"environmentName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Per-environment identity. Required for raw output, ignored for helm.","example":"my-app"},"namespace":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$","description":"Namespace to observe and install into. Omit for helm to use the release namespace."},"scope":{"type":"string","enum":["namespace","cluster"],"default":"namespace","description":"namespace: a namespaced Role that manages the install namespace. cluster: a ClusterRole that manages every namespace."},"labelSelector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional Kubernetes label selector narrowing what is managed, applied within the scope."},"permission":{"type":"string","enum":["observe"],"default":"observe","description":"Operator permission tier"},"operatorImagePackageId":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Ready operator-image package to use for the Operator image. If omitted, the latest ready operator-image package for the project is used.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group token embedded in the operator Secret"},"logCollector":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"description":"Enable the node log collector DaemonSet for raw pod logs."}},"required":["project","deploymentGroupToken"],"additionalProperties":false},"APIKey":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["id","email","image"],"description":"User information associated with the API key"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig","createdByUser"],"description":"API key information"},"APIKeyDeploymentSetupConfig":{"type":"object","nullable":true,"properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDeploymentSetupEnvironmentVariable"}}},"required":["metadata","policy","environmentVariables"]},"APIKeyDeploymentSetupEnvironmentVariable":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]},"CreateAPIKeyResponse":{"type":"object","properties":{"apiKey":{"type":"string","description":"The generated API key value (only shown once)"},"keyInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig"]}},"required":["apiKey","keyInfo"],"description":"Response containing the new API key and its metadata"},"CreateAPIKeyRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"scope":{"$ref":"#/components/schemas/Scope"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"required":["description","scope","expiresAt"],"description":"Request schema for creating a new API key"},"Scope":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceScope"},{"$ref":"#/components/schemas/ProjectScope"},{"$ref":"#/components/schemas/DeploymentScope"},{"$ref":"#/components/schemas/DeploymentGroupScope"},{"$ref":"#/components/schemas/ManagerScope"}],"discriminator":{"propertyName":"type","mapping":{"workspace":"#/components/schemas/WorkspaceScope","project":"#/components/schemas/ProjectScope","deployment":"#/components/schemas/DeploymentScope","deployment-group":"#/components/schemas/DeploymentGroupScope","manager":"#/components/schemas/ManagerScope"}},"description":"Scope and role configuration for service accounts"},"WorkspaceScope":{"type":"object","properties":{"type":{"type":"string","enum":["workspace"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["type","role"],"description":"Workspace-scoped configuration"},"ProjectScope":{"type":"object","properties":{"type":{"type":"string","enum":["project"]},"projectId":{"type":"string","description":"ID of the project this is scoped to"},"role":{"$ref":"#/components/schemas/ProjectRole"}},"required":["type","projectId","role"],"description":"Project-scoped configuration"},"DeploymentScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"deploymentId":{"type":"string","description":"ID of the deployment this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"},"role":{"$ref":"#/components/schemas/DeploymentRole"}},"required":["type","deploymentId","projectId","role"],"description":"Deployment-scoped configuration"},"DeploymentGroupScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"]},"deploymentGroupId":{"type":"string","description":"ID of the deployment group this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"},"role":{"$ref":"#/components/schemas/DeploymentGroupRole"}},"required":["type","deploymentGroupId","projectId","role"],"description":"Deployment group-scoped configuration"},"ManagerScope":{"type":"object","properties":{"type":{"type":"string","enum":["manager"]},"managerId":{"type":"string","description":"ID of the manager this is scoped to"},"role":{"$ref":"#/components/schemas/ManagerRole"}},"required":["type","managerId","role"],"description":"Manager-scoped configuration"},"UpdateAPIKeyRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"deploymentSetupConfig":{"$ref":"#/components/schemas/UpdateDeploymentSetupPolicy"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"description":"Request schema for updating an API key"},"UpdateDeploymentSetupPolicy":{"type":"object","properties":{"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"}},"required":["policy"],"description":"Editable part of a deployment link's setup config. Locked env vars and input values are preserved."},"DeleteAPIKeysRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"minItems":1}},"required":["ids"]},"DomainWithUsage":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DomainEndpoint"}},"usage":{"type":"object","properties":{"deploymentUrlProjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"portalBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true},"hostname":{"type":"string"}},"required":["id","projectId","projectName","hostname"]}},"packageDomains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]}},"managerBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"managerId":{"type":"string"},"managerName":{"type":"string"},"hostname":{"type":"string"}},"required":["id","managerId","managerName","hostname"]}}},"required":["deploymentUrlProjects","portalBindings","packageDomains","managerBindings"]}},"required":["endpoints","usage"]}]},"Domain":{"type":"object","properties":{"id":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domain":{"type":"string"},"isSystem":{"type":"boolean"},"claimToken":{"type":"string"},"hostedZoneId":{"type":"string","nullable":true},"nameServers":{"type":"array","nullable":true,"items":{"type":"string"}},"status":{"type":"string","enum":["pending-zone-creation","pending-verification","verified","lost-verification","failed","deleting"]},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"verifiedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","workspaceId","domain","isSystem","claimToken","status","createdAt","updatedAt"]},"EventListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"releaseCreatedAt":{"type":"string","format":"date-time","description":"createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used"}}}]},"ListMachinesJoinTokensResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"}}},"required":["tokens"]},"MachinesJoinTokenSummary":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"maxJoins":{"type":"integer","nullable":true},"joinCount":{"type":"integer"},"lastUsedAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true}},"required":["id","createdAt","createdBy","joinCount"]},"CreateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RotateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RevokeMachinesJoinTokenResponse":{"type":"object","properties":{"tokenId":{"type":"string"},"revoked":{"type":"boolean"}},"required":["tokenId","revoked"]},"ListMachinesInventoryResponse":{"type":"object","properties":{"machines":{"type":"array","items":{"$ref":"#/components/schemas/MachinesInventoryItem"}}},"required":["machines"]},"MachinesInventoryItem":{"type":"object","properties":{"machineId":{"type":"string"},"status":{"type":"string"},"capacityGroup":{"type":"string"},"zone":{"type":"string"},"cpu":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"memory":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"storage":{"allOf":[{"$ref":"#/components/schemas/MachinesCapacityMetric"}],"nullable":true},"drainBlockers":{"type":"array","items":{"$ref":"#/components/schemas/MachinesDrainBlocker"}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"overlayIp":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"horizondVersion":{"type":"string","nullable":true},"localOverrides":{"type":"array","items":{"$ref":"#/components/schemas/MachinesLocalOverrideObservation"}},"localOverridesObservedAt":{"type":"string","nullable":true},"replicaCount":{"type":"integer"}},"required":["machineId","status","capacityGroup","zone","cpu","memory","drainBlockers","drainForce","lastHeartbeat","localOverrides","replicaCount"]},"MachinesCapacityMetric":{"type":"object","properties":{"allocated":{"type":"number"},"systemReserve":{"type":"number"},"total":{"type":"number"}},"required":["allocated","systemReserve","total"]},"MachinesDrainBlocker":{"type":"object","properties":{"reason":{"type":"string"},"workloadId":{"type":"string","nullable":true},"workloadName":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true},"schedulingMode":{"type":"string","nullable":true},"state":{"type":"string","nullable":true}},"required":["reason"]},"MachinesLocalOverrideObservation":{"type":"object","properties":{"activeDigest":{"type":"string","nullable":true},"actor":{"type":"string","nullable":true},"baseAssignmentHash":{"type":"string"},"baseDigest":{"type":"string","nullable":true},"candidateDigest":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"failureCategory":{"type":"string","nullable":true},"fallbackDigest":{"type":"string","nullable":true},"forcedStop":{"type":"boolean","nullable":true},"healthySince":{"type":"string","nullable":true},"incidentId":{"type":"string","nullable":true},"lifecycle":{"type":"string"},"phaseStartedAt":{"type":"string","nullable":true},"replicaId":{"type":"string"},"workloadName":{"type":"string"}},"required":["baseAssignmentHash","lifecycle","replicaId","workloadName"]},"CancelMachinesMachineDrainResponse":{"type":"object","properties":{"machineId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["machineId","cancelled"]},"DrainMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"requested":{"type":"boolean"}},"required":["machineId","requested"]},"DrainMachinesMachineRequest":{"type":"object","properties":{"deadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"force":{"type":"boolean"}}},"RemoveMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"removed":{"type":"boolean"}},"required":["machineId","removed"]},"CommandListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Command"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/CommandDeploymentInfo"},"project":{"$ref":"#/components/schemas/CommandProjectInfo"}}}]},"CommandDeploymentInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"$ref":"#/components/schemas/CommandDeploymentGroupInfo"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"managerId":{"type":"string","description":"Manager ID for obtaining access tokens"},"managerUrl":{"type":"string","nullable":true,"format":"uri","description":"URL of the manager for direct payload access"},"managerName":{"type":"string","nullable":true,"description":"Human-readable name of the manager"},"managerIsSystem":{"type":"boolean","nullable":true,"description":"Whether the manager is Alien-hosted (system)"}},"required":["id","name","managerId"]},"CommandDeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CommandProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string"}},"required":["id","name"]},"Command":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","description":"Command name (e.g., 'analyze-repository', 'sync-data')"},"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Command states in the Commands protocol lifecycle"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Delivery mode for this command (push/pull), derived from the target at creation time"},"target":{"type":"object","nullable":true,"properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to; null on commands created before target routing"},"attempt":{"type":"number","nullable":true,"description":"Current attempt number"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","nullable":true,"description":"Size of command params in bytes"},"responseSizeBytes":{"type":"number","nullable":true,"description":"Size of command response in bytes"},"createdAt":{"type":"string","format":"date-time","description":"When the command was created"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command was dispatched to the deployment"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command completed"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if command failed"},"result":{"nullable":true,"description":"Decoded command result when available"}},"required":["id","deploymentId","projectId","workspaceId","name","state","deploymentModel","target","attempt","deadline","requestSizeBytes","responseSizeBytes","createdAt","dispatchedAt","completedAt","error"]},"ListCommandNamesResponse":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ListCommandDeploymentsResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name"]}}},"required":["deployments"]},"CreateCommandResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"projectId":{"type":"string","description":"Project ID (for manager to use in routing)"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"How to dispatch the command"},"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to"},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How the command is delivered to its target"}},"required":["id","projectId","deploymentModel","target","deliveryMode"]},"CreateCommandRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Target deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Command name (e.g., 'analyze-repository')"},"params":{"nullable":true,"description":"Command parameters for public invocation"},"target":{"type":"string","maxLength":255,"description":"Resource id the command is addressed to. Required when the deployment has more than one command-capable resource."},"initialState":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Initial state (PENDING_UPLOAD if params require upload, PENDING if inline)"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Size of command params in bytes"}},"required":["deploymentId","name"]},"ResolvedCommandTarget":{"type":"object","properties":{"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Identifies the specific resource a command is addressed to."},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How a command is delivered to its target resource.\n\nThis is a Commands-protocol-specific concept and is intentionally distinct\nfrom `DeploymentModel` (see `stack_settings.rs`), which governs the\ninfrastructure-level push/pull wiring for a deployment. Serialized\nlowercase for consistency with `CommandTargetType`."}},"required":["target","deliveryMode"]},"UpdateCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"New command state"},"attempt":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Current attempt number"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command was dispatched"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}}},"DispatchCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"DispatchCommandRequest":{"type":"object","properties":{"dispatchedAt":{"type":"string","format":"date-time","description":"When the command was dispatched"}},"required":["dispatchedAt"]},"CompleteCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"CompleteCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["SUCCEEDED","FAILED","EXPIRED"],"description":"Terminal state to transition to"},"completedAt":{"type":"string","format":"date-time","description":"When the command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}},"required":["state","completedAt"]},"IncrementCommandAttemptResponse":{"type":"object","properties":{"attempt":{"type":"integer","description":"The attempt number after the increment"}},"required":["attempt"]},"DebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"DebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"owner":{"type":"string","nullable":true,"maxLength":128},"state":{"$ref":"#/components/schemas/DebugSessionState"},"mode":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"provider":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"presignedUrls":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DebugPackagePresignedURLs"}},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","state","mode","presignedUrls","createdAt","expiresAt","deploymentId","projectId","workspaceId"]},"DebugSessionState":{"type":"string","enum":["pending","running","stopping","stopped","expired","failed"]},"DebugPackagePresignedURLs":{"type":"object","properties":{"readUrl":{"type":"string","maxLength":2048,"format":"uri"},"writeUrl":{"type":"string","maxLength":2048,"format":"uri"}},"required":["readUrl","writeUrl"]},"CreateDebugSessionRequest":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Override the generated id. Manager passes the registry session id so logs correlate.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"owner":{"type":"string","nullable":true,"maxLength":128},"expiresAt":{"type":"string","format":"date-time"},"state":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Initial state. Defaults to 'pending'."}]}},"required":["deploymentId","expiresAt"]},"UpdateDebugSessionRequest":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/DebugSessionState"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"expiresAt":{"type":"string","format":"date-time"}}},"DeploymentInfo":{"type":"object","properties":{"tokenType":{"type":"string","enum":["deployment","deployment-group"],"description":"Type of token used to authenticate this request"},"deployment":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"required":["name","platform"],"description":"Deployment details (present when using a deployment-scoped token)"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"pinnedSubdomain":{"type":"string","nullable":true}},"required":["id","name","pinnedSubdomain"],"description":"Deployment group details (present when using a deployment-group token)"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatarUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name"]},"project":{"type":"object","properties":{"name":{"type":"string"},"portal":{"type":"object","properties":{"appearance":{"$ref":"#/components/schemas/DeploymentPortalAppearance"}},"required":["appearance"]},"stackSummary":{"type":"object","nullable":true,"properties":{"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms supported by the active release"},"requiresNetwork":{"type":"boolean","description":"Whether the stack contains resources that require cloud VPC networking"},"resourceCounts":{"type":"object","properties":{"workers":{"type":"integer","minimum":0},"containers":{"type":"integer","minimum":0},"publicHttpsEndpoints":{"type":"integer","minimum":0,"description":"Resources that declare managed public HTTPS endpoint setup"},"externalInfra":{"type":"integer","minimum":0,"description":"Storage, queue, KV, vault, database, or cache resources that Kubernetes needs Terraform to provision"},"total":{"type":"integer","minimum":0}},"required":["workers","containers","publicHttpsEndpoints","externalInfra","total"]},"publicEndpoints":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"endpointName":{"type":"string"},"hostLabel":{"type":"string"},"wildcardSubdomains":{"type":"boolean"}},"required":["resourceId","endpointName","hostLabel","wildcardSubdomains"]},"description":"Public endpoints declared by the active release stack"}},"required":["platforms","requiresNetwork","resourceCounts","publicEndpoints"]},"generatedDomain":{"type":"object","nullable":true,"properties":{"domain":{"type":"string"},"isSystem":{"type":"boolean"}},"required":["domain","isSystem"],"description":"Parent domain for generated deployment URLs. Chosen public subdomains are only allowed when isSystem is false."}},"required":["name","portal"]},"packages":{"type":"object","properties":{"ready":{"type":"boolean","description":"True if all enabled packages are ready for deployment"},"cli":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"commandName":{"type":"string","description":"CLI command name to use in install instructions"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},"error":{"nullable":true},"installScripts":{"type":"object","properties":{"windows":{"type":"string","format":"uri"},"mac":{"type":"string","format":"uri"},"linux":{"type":"string","format":"uri"}},"required":["windows","mac","linux"],"description":"Install script URLs for each OS"}},"required":["status","commandName","installScripts"]},"cloudformation":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},"error":{"nullable":true},"mode":{"type":"string","enum":["auto","outputs"]},"launchUrl":{"type":"string","format":"uri","description":"CloudFormation launch URL"},"outputsSchema":{"nullable":true}},"required":["status","mode","launchUrl"]},"terraform":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},"error":{"nullable":true},"providerSource":{"type":"string","description":"Terraform provider source (without https://)"},"moduleSources":{"type":"object","additionalProperties":{"type":"string"},"description":"Terraform module sources by target"},"moduleVersion":{"type":"string"},"managerUrls":{"type":"object","additionalProperties":{"type":"string"},"description":"Manager URLs by Terraform target"}},"required":["status","providerSource","moduleSources","managerUrls"]},"helm":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},"error":{"nullable":true},"chartRef":{"type":"string","description":"OCI chart reference"},"managerFetchExample":{"type":"string"},"localImportExample":{"type":"string"}},"required":["status","chartRef"]}},"required":["ready"]},"installContext":{"type":"object","properties":{"targets":{"type":"object","additionalProperties":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managerUrl":{"type":"string","format":"uri"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"awsManagingAccountId":{"type":"string"}},"required":["platform","managerUrl"]},"description":"Deployment-session install context by Terraform/installer target"}},"required":["targets"]},"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"},"setupConfig":{"$ref":"#/components/schemas/DeploymentInfoSetupConfig"},"readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ready","notReady","unknown"]},"checks":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["passed","failed","warning","unknown"]},"message":{"type":"string"},"checkedAt":{"type":"string"}},"required":["code","status","message","checkedAt"]}}},"required":["status","checks"]}},"required":["tokenType","workspace","project","packages","installContext","supportedRegions"]},"DeploymentPortalAppearance":{"type":"object","properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}}},"SupportedCloudRegions":{"type":"object","properties":{"aws":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by this Alien environment."},"gcp":{"type":"array","items":{"type":"string"},"description":"GCP regions supported by this Alien environment."},"azure":{"type":"array","items":{"type":"string"},"description":"Azure locations supported by this Alien environment."}},"required":["aws","gcp","azure"]},"DeploymentInfoSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]}},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"inputValues":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedStackInputSummary"}}},"required":["metadata","policy","environmentVariables"]},"ResolvedStackInputSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"]}},"required":{"type":"boolean"},"secret":{"type":"boolean"},"provided":{"type":"boolean"}},"required":["id","label","providedBy","required","secret","provided"]},"DeploymentComputePlan":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"poolId":{"type":"string"},"workloads":{"type":"array","items":{"type":"string"}},"requirements":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"scale":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"machines":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","machines"]},{"type":"object","properties":{"type":{"type":"string","enum":["autoscale"]},"min":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]},"max":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","min","max"]}]},"selected":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"recommended":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"machines":{"type":"array","items":{"type":"object","properties":{"machine":{"type":"string"},"profile":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"recommended":{"type":"boolean"}},"required":["machine","profile","recommended"]}},"errors":{"type":"array","items":{"type":"string"}}},"required":["poolId","workloads","requirements","scale","selected","recommended","machines"]}}},"required":["pools"]},"PreparedDeploymentStack":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"setup":{"$ref":"#/components/schemas/SetupFingerprintInfo"}},"required":["platform","stack","setup"]},"SlackInstallUrlResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"SlackIntegrationStatus":{"type":"object","properties":{"connected":{"type":"boolean"},"slackTeamId":{"type":"string","nullable":true},"slackTeamName":{"type":"string","nullable":true},"installedByUserId":{"type":"string","nullable":true},"installedAt":{"type":"string","nullable":true},"notificationChannelId":{"type":"string","nullable":true}},"required":["connected","slackTeamId","slackTeamName","installedByUserId","installedAt","notificationChannelId"]},"SlackChannelsResponse":{"type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}}},"required":["channels"]},"SlackChannel":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isMember":{"type":"boolean"}},"required":["id","name","isMember"]},"SlackNotificationChannelResponse":{"type":"object","properties":{"notificationChannelId":{"type":"string","nullable":true},"warning":{"type":"string","nullable":true}},"required":["notificationChannelId","warning"]},"SlackNotificationChannelRequest":{"type":"object","properties":{"channelId":{"type":"string","nullable":true}},"required":["channelId"]},"AgentSessionListResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionListItem"}}},"required":["sessions"]},"AgentSessionListItem":{"type":"object","properties":{"id":{"type":"string"},"triggerType":{"type":"string"},"subjectId":{"type":"string"},"subject":{"$ref":"#/components/schemas/AgentSessionSubject"},"status":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","triggerType","subjectId","subject","status","createdAt","updatedAt"]},"AgentSessionSubject":{"type":"object","properties":{"deploymentName":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"releaseId":{"type":"string","nullable":true},"releaseCommitMessage":{"type":"string","nullable":true},"releaseCommitRef":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true}},"required":["deploymentName","deploymentGroupId","deploymentGroupName","releaseId","releaseCommitMessage","releaseCommitRef","projectId","projectName"]},"AgentSessionDetail":{"allOf":[{"$ref":"#/components/schemas/AgentSessionListItem"},{"type":"object","properties":{"resultText":{"type":"string","nullable":true},"toolNames":{"type":"array","nullable":true,"items":{"type":"string"}},"error":{"type":"string","nullable":true},"pendingApproval":{"type":"object","nullable":true,"properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["resultText","toolNames","error","pendingApproval"]}]},"AgentSessionEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionEvent"}},"latestSeq":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["events","latestSeq","hasMore"]},"AgentSessionEvent":{"oneOf":[{"$ref":"#/components/schemas/AgentSessionStatusEvent"},{"$ref":"#/components/schemas/AgentSessionStepEvent"},{"$ref":"#/components/schemas/AgentSessionToolCallEvent"},{"$ref":"#/components/schemas/AgentSessionToolResultEvent"},{"$ref":"#/components/schemas/AgentSessionMarkdownEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalRequestedEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalGrantedEvent"},{"$ref":"#/components/schemas/AgentSessionRestartedEvent"},{"$ref":"#/components/schemas/AgentSessionEventsTruncatedEvent"}],"discriminator":{"propertyName":"type","mapping":{"status":"#/components/schemas/AgentSessionStatusEvent","step":"#/components/schemas/AgentSessionStepEvent","tool_call":"#/components/schemas/AgentSessionToolCallEvent","tool_result":"#/components/schemas/AgentSessionToolResultEvent","markdown":"#/components/schemas/AgentSessionMarkdownEvent","approval_requested":"#/components/schemas/AgentSessionApprovalRequestedEvent","approval_granted":"#/components/schemas/AgentSessionApprovalGrantedEvent","session_restarted":"#/components/schemas/AgentSessionRestartedEvent","events_truncated":"#/components/schemas/AgentSessionEventsTruncatedEvent"}}},"AgentSessionStatusEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["status"]},"payload":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionStepEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["step"]},"payload":{"type":"object","properties":{"stepId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["in_progress","complete","error"]}},"required":["stepId","title","status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolCallEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolResultEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_result"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string","nullable":true},"toolName":{"type":"string","nullable":true},"ok":{"type":"boolean"},"output":{"nullable":true}},"required":["toolCallId","toolName","ok"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionMarkdownEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["markdown"]},"payload":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalRequestedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_requested"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalGrantedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_granted"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"approvedByUserId":{"type":"string"},"approvedByName":{"type":"string","nullable":true},"source":{"type":"string","enum":["dashboard","slack"]}},"required":["approvalId","approvedByUserId","approvedByName","source"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionRestartedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["session_restarted"]},"payload":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionEventsTruncatedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["events_truncated"]},"payload":{"type":"object","properties":{"limit":{"type":"number"}},"required":["limit"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApproveResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"resumed":{"type":"boolean"}},"required":["jobId","status","resumed"]},"AgentSessionStopResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"canceled":{"type":"boolean"}},"required":["jobId","status","canceled"]},"SyncListResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"userEnvironmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"deploymentToken":{"type":"string","nullable":true},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId","userEnvironmentVariables"]}}},"required":["deployments"],"description":"Full deployment records for manager operation"},"SyncListRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. Manager-scoped tokens are always constrained to their own manager ID."}]},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to include"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment status"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by deployment platform"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Filter by deployment group ID","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum records to return"}},"additionalProperties":false,"description":"Request to list full operational deployments"},"SyncAcquireResponseDeployment":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Deployment group ID the deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method recorded on the deployment when it has a setup-owned path."}]},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state (includes releases)"},"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration"}},"required":["deploymentId","projectId","deploymentGroupId","current","config"]},"SyncContextRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the context. Manager-scoped tokens are constrained to their own manager ID."}]},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"SyncAcquireResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"},"description":"List of acquired deployments with deployment context"},"failures":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment that failed","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"error":{"allOf":[{"$ref":"#/components/schemas/APIError"},{"description":"Error that occurred during context building"}]}},"required":["deploymentId","projectId","error"]},"description":"List of deployments that failed during context building (locks already released)"}},"required":["deployments","failures"],"description":"Acquired deployments and failures"},"SyncAcquireRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. If omitted, resolved from each deployment's managerId column."}]},"session":{"type":"string","description":"Unique session identifier for lock tracking"},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to lock (for Pull model sync)"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment statuses (default: all deployment statuses)"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by platforms (default: all platforms the Manager supports)"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Filter by setup method for setup-owned acquisition paths"}]},"acquireMode":{"type":"string","enum":["runtime","setup-run","setup-teardown"],"description":"Phase ownership mode for deployment acquisition"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model from stackSettings.deploymentModel."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of deployments to acquire (default: 10)"}},"required":["session","deploymentModel"],"additionalProperties":false,"description":"Request to acquire deployments for processing"},"SyncReconcileResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the state was reconciled"},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state after reconciliation"},"target":{"type":"object","properties":{"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration\n\nConfiguration for how to perform the deployment.\nNote: Credentials (ClientConfig) are passed separately to step() function."},"releaseInfo":{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."}},"required":["config","releaseInfo"],"description":"Target deployment if update is needed"}},"required":["success","current"],"description":"State reconciliation result with optional target"},"SyncReconcileRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to reconcile state for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Lock session (push model only) - verifies lock ownership"},"state":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Complete deployment state after step() execution"},"updateHeartbeat":{"type":"boolean","description":"Update heartbeat timestamp (for successful health checks)"},"suggestedDelayMs":{"type":"integer","minimum":0,"description":"Delay before this deployment should be acquired again."},"resourceHeartbeats":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"description":"Latest typed resource heartbeats collected during this step."},"observedInventoryBatches":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"],"description":"Backend whose observer produced this snapshot."},"complete":{"type":"boolean","description":"Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`."},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inventoryScope":{"type":"string","description":"Stable scope for the provider list operation that produced this batch."},"observedAt":{"type":"string","format":"date-time","description":"Time the inventory scope was observed."},"resources":{"type":"array","items":{"type":"object","properties":{"alienResourceId":{"type":"string","nullable":true},"attributes":{"type":"object","properties":{},"additionalProperties":{"nullable":true}},"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"counts":{"oneOf":[{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},{"nullable":true}]},"deploymentId":{"type":"string","nullable":true},"displayName":{"type":"string"},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerKind":{"type":"string","description":"Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type."},"providerStale":{"type":"boolean"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"rawIdentity":{"type":"string","description":"Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc."},"region":{"type":"string","nullable":true},"resourceTypeHint":{"oneOf":[{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},{"nullable":true}]},"scope":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"description":"Release/version identity observed from the provider resource, when available."}},"required":["displayName","health","lifecycle","partial","providerKind","providerStale","rawIdentity"]}},"sourceKind":{"type":"string","description":"Writer/source for this inventory pass, such as `operator` or\n`manager-observer`."}},"required":["backend","complete","controllerPlatform","inventoryScope","observedAt","resources","sourceKind"]},"description":"Observed raw-resource inventory batches read during this step."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Operator-reported runtime capabilities."},"operatorVersion":{"type":"string","minLength":1,"maxLength":128,"description":"Operator binary version reported by the runtime."}},"required":["deploymentId","state"],"additionalProperties":false,"description":"Request to reconcile deployment state"},"SyncReleaseRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to release","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Session identifier to release"}},"required":["deploymentId","session"],"additionalProperties":false,"description":"Request to release deployment lock"},"ResolveResponse":{"type":"object","properties":{"managerId":{"type":"string","description":"Manager ID"},"managerName":{"type":"string","description":"Manager display name"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL"},"managerIsSystem":{"type":"boolean","description":"Whether the manager is Alien-hosted"},"managerCloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where the private manager is hosted. Null for Alien-hosted managers."},"projectId":{"type":"string","description":"Resolved project ID"},"installContext":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}},"required":["platform","managementConfig"],"description":"Target install context derived from platform-managed manager metadata. Present for cloud push platforms."}},"required":["managerId","managerName","managerUrl","managerIsSystem","projectId"]},"CloudRegionsResponse":{"type":"object","properties":{"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"}},"required":["supportedRegions"]},"BillingAuditLogRow":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"action":{"type":"string"},"payload":{"nullable":true},"createdAt":{"type":"string"}},"required":["id","workspaceId","action","createdAt"]},"WorkspaceBillingEntitlements":{"type":"object","properties":{"planId":{"$ref":"#/components/schemas/PlanId"},"planStatus":{"$ref":"#/components/schemas/BillingPlanStatus"},"features":{"$ref":"#/components/schemas/BillingFeatureFlags"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"syncedAt":{"type":"string","nullable":true,"format":"date-time"},"stale":{"type":"boolean"}},"required":["planId","planStatus","features","limits","syncedAt","stale"]},"PlanId":{"type":"string","enum":["starter","pro","pro_annual","enterprise"]},"BillingPlanStatus":{"type":"string","enum":["active","trialing","past_due","canceled","none"]},"BillingFeatureFlags":{"type":"object","properties":{"custom_domains":{"type":"boolean"},"private_managers":{"type":"boolean"},"sso_saml":{"type":"boolean"},"audit_logs":{"type":"boolean"},"airgapped":{"type":"boolean"}},"required":["custom_domains","private_managers","sso_saml","audit_logs","airgapped"]},"BillingLimits":{"type":"object","properties":{"maxDeployments":{"type":"number","nullable":true},"maxProjects":{"type":"number","nullable":true},"maxSeats":{"type":"number","nullable":true},"maxCustomDomains":{"type":"number","nullable":true},"creditUsd":{"type":"number","nullable":true},"seatsIncluded":{"type":"number","nullable":true}},"required":["maxDeployments","maxProjects","maxSeats","maxCustomDomains","creditUsd","seatsIncluded"]}},"parameters":{}},"paths":{"/v1/invitations/{token}":{"get":{"operationId":"getWorkspaceInvitationPreview","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationPreview"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/memberships":{"get":{"operationId":"listMemberships","description":"List all workspaces the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listMemberships","responses":{"200":{"description":"List of user's workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile":{"get":{"operationId":"getUserProfile","description":"Get the current user's profile and user-scoped onboarding state.","x-speakeasy-group":"user","x-speakeasy-name-override":"getProfile","responses":{"200":{"description":"User profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateUserProfile","description":"Update the current user's profile (display name).","x-speakeasy-group":"user","x-speakeasy-name-override":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"}}}}}},"responses":{"200":{"description":"Profile updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile/setup":{"post":{"operationId":"completeUserProfileSetup","description":"Complete the required beta intake and profile setup dialog.","x-speakeasy-group":"user","x-speakeasy-name-override":"completeProfileSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileSetupRequest"}}}},"responses":{"200":{"description":"Profile setup completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/workspaces":{"post":{"operationId":"createWorkspace","description":"Create a new workspace. The current user will be automatically added as an admin.","x-speakeasy-group":"user","x-speakeasy-name-override":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name"},"logoUrl":{"type":"string","format":"uri","description":"Optional workspace logo URL"}},"required":["name"]}}}},"responses":{"201":{"description":"Created workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Bad request - invalid workspace name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Workspace name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces":{"get":{"operationId":"listGitNamespaces","description":"List all git namespaces (GitHub installations) the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaces","parameters":[{"schema":{"type":"string","enum":["github"],"default":"github"},"required":false,"name":"provider","in":"query"}],"responses":{"200":{"description":"List of user's git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/sync":{"post":{"operationId":"syncGitNamespaces","description":"Sync git namespaces from the provider. For GitHub, this fetches all app installations accessible to the user.","x-speakeasy-group":"user","x-speakeasy-name-override":"syncGitNamespaces","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"description":"Git provider to sync"}},"required":["provider"]}}}},"responses":{"200":{"description":"Synced git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/{id}/repositories":{"get":{"operationId":"listGitNamespaceRepositories","description":"List repositories accessible through a git namespace (GitHub installation).","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaceRepositories","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","description":"Search query to filter repositories by name"},"required":false,"description":"Search query to filter repositories by name","name":"search","in":"query"}],"responses":{"200":{"description":"List of repositories.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitRepository"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Git namespace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/invitations/{token}/accept":{"post":{"operationId":"acceptWorkspaceInvitation","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptWorkspaceInvitationResponse"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","description":"Get the current authenticated principal (user or service account). Works with both session cookies and API keys.","x-speakeasy-group":"auth","x-speakeasy-name-override":"whoami","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","example":"my-workspace"},"required":false,"description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Current authenticated principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subject"}}}},"400":{"description":"Missing required workspace for user credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","description":"Retrieve all workspaces.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search workspaces by name"},"required":false,"description":"Search workspaces by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","description":"Retrieve a workspace by ID.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspace","description":"Update a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"}}}}}},"responses":{"200":{"description":"Workspace updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteWorkspace","description":"Delete a workspace. The workspace must have no projects.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Workspace deleted successfully."},"400":{"description":"Workspace still has projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listWorkspaceMembers","description":"List all members of a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"listMembers","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"List of workspace members.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"addWorkspaceMember","description":"Add a member to a workspace by email. The user must already have an account.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"addMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of the user to add"},"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"Role to assign"}]}},"required":["email","role"]}}}},"responses":{"201":{"description":"Member added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"404":{"description":"Workspace or user not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"User is already a member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMember","description":"Update a workspace member's role.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"New role to assign"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Member role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"400":{"description":"Cannot remove last admin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"removeWorkspaceMember","description":"Remove a member from a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"removeMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Member removed successfully."},"400":{"description":"Cannot remove last admin or self.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/dismiss-onboarding":{"post":{"operationId":"dismissWorkspaceOnboarding","description":"Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"dismissOnboarding","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace with onboardingDismissedAt populated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/settings":{"get":{"operationId":"getWorkspaceSettings","description":"Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"getSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspaceSettings","description":"Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}}},"responses":{"200":{"description":"Updated ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations":{"get":{"operationId":"listWorkspaceInvitations","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Pending invitations.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvitation"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["email","role"]}}}},"responses":{"201":{"description":"Invitation created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"403":{"description":"Seat limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}/resend":{"post":{"operationId":"resendWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Invitation email sent again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}":{"delete":{"operationId":"revokeWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invitation revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invite-link":{"get":{"operationId":"getWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Active invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"createWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["role"]}}}},"responses":{"200":{"description":"Invite link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invite link revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","description":"Retrieve all projects.","x-speakeasy-group":"projects","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search projects by name"},"required":false,"description":"Search projects by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deploymentCount","latestRelease"]},"description":"Optional fields to include: deploymentCount, latestRelease"},"required":false,"description":"Optional fields to include: deploymentCount, latestRelease","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved projects.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createProject","description":"Create a new project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name"]}}}},"responses":{"201":{"description":"Project created successfully.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"}}}]}}}},"400":{"description":"Invalid request or GitHub repository connection failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}":{"get":{"operationId":"getProject","description":"Retrieve a project by ID or name.","x-speakeasy-group":"projects","x-speakeasy-name-override":"get","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateProject","description":"Update a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"update","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProject"}}}},"responses":{"200":{"description":"Project updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteProject","description":"Delete a project. The project must have no deployments.","x-speakeasy-group":"projects","x-speakeasy-name-override":"delete","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Project deleted successfully."},"400":{"description":"Project still has deployments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/gcp-oauth-provider":{"get":{"operationId":"getProjectGcpOAuthProvider","description":"Retrieve redacted project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateProjectGcpOAuthProvider","description":"Update project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"updateGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGcpOAuthProvider"}}}},"responses":{"200":{"description":"Google Cloud OAuth provider settings updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"400":{"description":"Invalid provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-portal-domain":{"get":{"operationId":"getProjectDeploymentPortalDomain","description":"Get the deployment portal domain binding for a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentPortalDomain","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved deployment portal domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPortalDomainResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/import-template":{"post":{"operationId":"createProjectFromTemplate","description":"Create a project by forking alienplatform/alien into your namespace, then configuring GitHub Actions.","x-speakeasy-group":"projects","x-speakeasy-name-override":"createFromTemplate","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"targetNamespace":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-]+$","description":"GitHub owner namespace (user or organization) that will receive the fork"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name","targetNamespace","templatePath"]}}}},"responses":{"201":{"description":"Project created successfully from template.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"},"template":{"type":"object","properties":{"sourceRepository":{"type":"string","enum":["alienplatform/alien"]},"forkRepository":{"type":"string","description":"Fork repository in / format"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"resolvedRootDirectory":{"type":"string"}},"required":["sourceRepository","forkRepository","templatePath","resolvedRootDirectory"]}},"required":["template"]}]}}}},"400":{"description":"Bad request or GitHub integration not installed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Fork exists but is not ready yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/template-urls":{"get":{"operationId":"getProjectTemplateUrls","description":"Get template URLs for deploying setup stacks in this project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getTemplateUrls","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Template URLs retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"aws":{"type":"object","nullable":true,"properties":{"templateUrl":{"type":"string","format":"uri","description":"URL to download the CloudFormation template"},"launchStackUrl":{"type":"string","format":"uri","description":"URL to launch the template in the AWS CloudFormation console"}},"required":["templateUrl","launchStackUrl"],"description":"Template URLs for deploying an AWS setup stack"}}}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-link-setup":{"get":{"operationId":"getProjectDeploymentLinkSetup","description":"Get the active release stack and portal-visible setup availability for deployment-link configuration.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentLinkSetup","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment-link setup retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLinkSetupResponse"}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/active-release":{"get":{"operationId":"getProjectActiveRelease","description":"Get the active release for this project. Returns the latest release, or the pinned release if deploymentId is provided and that deployment has a pinned release.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getActiveRelease","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Optional deployment ID to check for pinned release"},"required":false,"description":"Optional deployment ID to check for pinned release","name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Active release retrieved successfully.","content":{"application/json":{"schema":{"nullable":true}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups":{"post":{"operationId":"createDeploymentGroup","tags":["deployment-groups"],"summary":"Create a new deployment group","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group with this name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listDeploymentGroups","tags":["deployment-groups"],"summary":"List deployment groups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of deployment groups","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"}}}]},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/by-name":{"put":{"operationId":"ensureDeploymentGroupByName","tags":["deployment-groups"],"summary":"Get or create a deployment group by project and name","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureDeploymentGroupByNameRequest"}}}},"responses":{"200":{"description":"Deployment group returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}":{"get":{"operationId":"getDeploymentGroup","tags":["deployment-groups"],"summary":"Get deployment group details","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"}],"responses":{"200":{"description":"Deployment group details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"deploymentCount":{"type":"integer","description":"Current number of deployments in this deployment group"}},"required":["deploymentCount"]}]}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentGroup","tags":["deployment-groups"],"summary":"Update deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDeploymentGroup","tags":["deployment-groups"],"summary":"Delete deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Deployment group deleted successfully"},"400":{"description":"Cannot delete deployment group that has deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/tokens":{"post":{"operationId":"createDeploymentGroupToken","tags":["deployment-groups"],"summary":"Create deployment group token","description":"Creates a deployment-group scoped API key and returns both the token and formatted deployment link","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenRequest"}}}},"responses":{"200":{"description":"Deployment group token created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenResponse"}}}},"400":{"description":"Deployment setup configuration is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/first-party-session":{"post":{"operationId":"createFirstPartyDeploymentSession","tags":["deployment-groups"],"summary":"Create first-party deployment session","description":"Mints a short-lived deployment-group token with the recommended self-deploy policy for the authenticated developer.","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"First-party deployment session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirstPartyDeploymentSessionResponse"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages":{"get":{"operationId":"listPackages","description":"List packages with optional filters. Returns packages ordered by creation date (newest first).","x-speakeasy-group":"packages","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Filter by package type"},"required":false,"description":"Filter by package type","name":"type","in":"query"},{"schema":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Filter by package status"},"required":false,"description":"Filter by package status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search packages by type or version"},"required":false,"description":"Search packages by type or version","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of packages.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}":{"get":{"operationId":"getPackage","description":"Get details of a specific package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/rebuild":{"post":{"operationId":"rebuildPackages","description":"Rebuild packages for a project. This will cancel any pending packages and create new ones with auto-incremented versions.","x-speakeasy-group":"packages","x-speakeasy-name-override":"rebuild","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to rebuild packages for"}},"required":["project"]}}}},"responses":{"200":{"description":"Packages rebuilt successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"packagesCreated":{"type":"integer","description":"Number of packages created"}},"required":["packagesCreated"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}/cancel":{"post":{"operationId":"cancelPackage","description":"Cancel a pending or building package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"cancel","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package canceled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Package cannot be canceled (not in pending or building status).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases":{"get":{"operationId":"listReleases","description":"Retrieve all releases.","x-speakeasy-group":"releases","x-speakeasy-name-override":"list","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search releases by commit message, branch, SHA, or release ID"},"required":false,"description":"Search releases by commit message, branch, SHA, or release ID","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by git branch (commitRef)"},"required":false,"description":"Filter by git branch (commitRef)","name":"branch","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by commit author login or name"},"required":false,"description":"Filter by commit author login or name","name":"author","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created after this date (ISO 8601)"},"required":false,"description":"Filter releases created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created before this date (ISO 8601)"},"required":false,"description":"Filter releases created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved releases.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createRelease","description":"Create a new release.","x-speakeasy-group":"releases","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseRequest"}}}},"responses":{"201":{"description":"Release created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/branches":{"get":{"operationId":"listReleaseBranches","description":"List distinct git branches across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listBranches","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search branches by name (case-insensitive contains)"},"required":false,"description":"Search branches by name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of branches to return"},"required":false,"description":"Maximum number of branches to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct branches.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/authors":{"get":{"operationId":"listReleaseAuthors","description":"List distinct commit authors across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listAuthors","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search authors by login or name (case-insensitive contains)"},"required":false,"description":"Search authors by login or name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of authors to return"},"required":false,"description":"Maximum number of authors to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct authors.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAuthorFilterItem"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/{id}":{"get":{"operationId":"getRelease","description":"Retrieve a release by ID.","x-speakeasy-group":"releases","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"required":true,"description":"Unique identifier for the release.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseListItemResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments":{"get":{"operationId":"listDeployments","description":"Retrieve all deployments.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"list","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Filter by exact deployment name. Must be used with deploymentGroup."},"required":false,"description":"Filter by exact deployment name. Must be used with deploymentGroup.","name":"name","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name, public subdomain, or deployment group name"},"required":false,"description":"Search deployments by name, public subdomain, or deployment group name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved deployments.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"400":{"description":"Invalid deployment list filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDeployment","description":"Create a new deployment. Deployment group tokens automatically use their group. Workspace/project tokens must provide deploymentGroupId.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeploymentRequest"}}}},"responses":{"200":{"description":"Existing deployment returned for idempotent deployment-group registration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"201":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"400":{"description":"Bad request - deployment group has reached max deployments limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Forbidden - insufficient permissions to create deployments in this context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project or deployment group not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/stats":{"get":{"operationId":"getDeploymentStats","description":"Get aggregated deployment statistics. Returns total count and breakdown by status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getStats","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name or deployment group name"},"required":false,"description":"Search deployments by name or deployment group name","name":"search","in":"query"}],"responses":{"200":{"description":"Deployment statistics retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStats"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-environments":{"get":{"operationId":"listDeploymentFilterEnvironments","description":"List distinct effective environments used by deployments. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterEnvironments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Distinct environments retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-deployment-groups":{"get":{"operationId":"listDeploymentFilterDeploymentGroups","description":"List deployment groups with deployment counts. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterDeploymentGroups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return"},"required":false,"description":"Maximum number of items to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Deployment groups for filter retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"deploymentCount":{"type":"number"},"runningCount":{"type":"number","description":"Number of deployments in 'running' status"},"failedCount":{"type":"number","description":"Number of deployments in a failed status"},"inProgressCount":{"type":"number","description":"Number of deployments in an in-progress status (provisioning, updating, etc.)"}},"required":["id","name","deploymentCount","runningCount","failedCount","inProgressCount"]}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeployment","description":"Retrieve a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetailResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/info":{"get":{"operationId":"getDeploymentConnectionInfo","description":"Get deployment connection information including command endpoint and resource URLs.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment connection information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentConnectionInfo"}}}},"400":{"description":"Deployment not ready (no manager assigned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/import":{"post":{"operationId":"importDeployment","description":"Import a deployment from resolved setup infrastructure such as CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"import","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDeploymentRequest"}}}},"responses":{"200":{"description":"Deployment import was idempotent and returned an existing deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"201":{"description":"Deployment imported and created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/first-party-inputs":{"put":{"operationId":"setFirstPartyDeploymentInputs","description":"Store operator-provided input values on a first-party deployment session token so CLI/local deploys apply them.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"setFirstPartyDeploymentInputs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Input values stored on the session token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsResponse"}}}},"400":{"description":"A deployment-group token scope is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"The token is not a first-party deployment session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to store input values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations":{"post":{"operationId":"createSetupRegistrationOperation","description":"Start a durable setup registration operation for CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createSetupRegistrationOperation","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupRegistrationOperationRequest"}}}},"responses":{"202":{"description":"Setup registration operation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"400":{"description":"Invalid setup registration operation request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed before callback acceptance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations/{id}":{"get":{"operationId":"getSetupRegistrationOperation","description":"Get setup registration operation status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getSetupRegistrationOperation","parameters":[{"schema":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"required":true,"description":"Unique identifier for the setup registration operation.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Setup registration operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"404":{"description":"Setup registration operation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/delete":{"post":{"operationId":"deleteDeployment","description":"Delete, detach, or forget a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentRequest"}}}},"responses":{"202":{"description":"Deployment deletion request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentResponse"}}}},"400":{"description":"Cannot delete the deployment in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"redeployDeployment","description":"Redeploy a running deployment with the same release and fresh environment variables. Sets status to update-pending.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"redeploy","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment redeployment triggered successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot redeploy - deployment must be running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/pin-release":{"post":{"operationId":"pinDeploymentRelease","description":"Pin or unpin a running or runtime-failed deployment. Running deployments start an update; failed deployments retry toward the selected release.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"pinRelease","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinReleaseRequest"}}}},"responses":{"202":{"description":"Release pin updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot pin release from the deployment's current lifecycle state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/retry":{"post":{"operationId":"retryDeployment","description":"Retry a failed deployment operation. Uses alien-infra's retry mechanisms to resume from exact failure point.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"retry","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment retry enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Deployment is not in a failed state that can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/inputs":{"get":{"operationId":"getDeploymentInputs","description":"Get the active input definitions and current non-secret values for a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment inputs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInputsResponse"}}}},"403":{"description":"Insufficient permission to read deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentInputs","description":"Update runtime stack inputs, rebuild their environment-variable mappings, and request a deployment update when runtime configuration changes.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Deployment inputs saved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsResponse"}}}},"400":{"description":"Input values are invalid for the deployment release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, project, or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/environment-variables":{"patch":{"operationId":"updateDeploymentEnvironmentVariables","description":"Update a deployment's environment variables. If the deployment is running and not locked, the status will be changed to update-pending to trigger a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateEnvironmentVariables","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentEnvironmentVariablesRequest"}}}},"responses":{"202":{"description":"Environment variables updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Environment variables are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update environment variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/token":{"post":{"operationId":"createDeploymentToken","description":"Create a deployment token (deployment-scoped API key). The deployment must exist before creating a token.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenRequest"}}}},"responses":{"201":{"description":"Deployment token created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers":{"post":{"operationId":"createManager","description":"Create a new manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewManagerRequest"}}}},"responses":{"201":{"description":"Manager created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Invalid private manager setup method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"A manager for this target already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listManagers","description":"Retrieve all managers.","x-speakeasy-group":"managers","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search managers by name"},"required":false,"description":"Search managers by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of managers to return"},"required":false,"description":"Maximum number of managers to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved managers.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manager"}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/setup-token":{"post":{"operationId":"retryManagerSetup","description":"Revoke previous private-manager setup tokens and issue a fresh setup token/config.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retrySetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"201":{"description":"Fresh manager setup token generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Manager setup cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or setup config not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/retry":{"post":{"operationId":"retryManager","description":"Retry private-manager setup. Returns a fresh setup action before the internal deployment exists, or requests retry for the internal deployment after it exists.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retry","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager retry handled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerRetryResponse"}}}},"400":{"description":"Manager cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or internal deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/cancel-setup":{"post":{"operationId":"cancelManagerSetup","description":"Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record.","x-speakeasy-group":"managers","x-speakeasy-name-override":"cancelSetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager setup canceled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Manager setup cannot be canceled in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}":{"get":{"operationId":"getManager","description":"Retrieve a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"get","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manager"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteManager","description":"Delete a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"delete","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager deletion enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot delete the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Internal deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/domain-binding":{"get":{"operationId":"getManagerDomainBinding","description":"Get the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager domain binding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateManagerDomainBinding","description":"Create, update, or remove the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"updateDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerDomainBinding"}}}},"responses":{"200":{"description":"Manager domain binding updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"400":{"description":"Invalid domain binding request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or domain not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/management-config":{"get":{"operationId":"getManagerManagementConfig","description":"Get the management configuration for a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getManagementConfig","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":true,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Management config retrieved successfully.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/provision":{"post":{"operationId":"provisionManager","description":"Enqueue provisioning for a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"provision","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager provisioning enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot provision the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/update":{"post":{"operationId":"updateManager","description":"Update a manager to a specific release ID or active release.","x-speakeasy-group":"managers","x-speakeasy-name-override":"update","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerRequest"}}}},"responses":{"202":{"description":"Manager update enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot update the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/events":{"get":{"operationId":"listManagerEvents","description":"Retrieve all events of a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"listEvents","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"]}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/token":{"post":{"operationId":"generateManagerToken","description":"Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/gcp-oauth-provider/resolve":{"post":{"operationId":"resolveManagerGcpOAuthProvider","description":"Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap.","x-speakeasy-group":"managers","x-speakeasy-name-override":"resolveGcpOAuthProvider","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderRequest"}}}},"responses":{"200":{"description":"Resolved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderResponse"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Manager cannot resolve this deployment group's project settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/heartbeat":{"post":{"operationId":"reportManagerHeartbeat","description":"Report Manager health status and metrics.","x-speakeasy-group":"managers","x-speakeasy-name-override":"reportHeartbeat","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatRequest"}}}},"responses":{"200":{"description":"Heartbeat acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/deployment":{"get":{"operationId":"getManagerDeployment","description":"Get deployment details for a private manager (internal deployment platform, status, resources).","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDeployment","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager deployment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDeployment"}}}},"404":{"description":"Manager not found or has no internal deployment (alien-hosted managers don't have deployment info).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/prepare":{"post":{"operationId":"prepareOperatorManifestPackage","tags":["operator-manifests"],"summary":"Prepare the white-labeled Operator image for an Operate install","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageRequest"}}}},"responses":{"200":{"description":"Operator image package created or reused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/render":{"post":{"operationId":"renderOperatorManifest","tags":["operator-manifests"],"summary":"Render a Kubernetes Operator manifest","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestRequest"}}}},"responses":{"200":{"description":"Operator manifest rendered successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Operator image package is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Invalid platform or manager configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listAPIKeys","description":"Retrieve all API keys for the current workspace.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved API keys.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/APIKey"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createAPIKey","description":"Create a new API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"API key created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"403":{"description":"Insufficient permissions to create API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/{id}":{"get":{"operationId":"getAPIKey","description":"Retrieve a specific API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateAPIKey","description":"Update an API key (enable/disable, change description).","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyRequest"}}}},"responses":{"200":{"description":"API key updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeAPIKey","description":"Revoke (soft delete) an API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"revoke","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"API key revoked successfully."},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/batch-delete":{"post":{"operationId":"deleteAPIKeys","description":"Permanently delete multiple API keys.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"deleteMultiple","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAPIKeysRequest"}}}},"responses":{"200":{"description":"API keys deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedCount":{"type":"number"}},"required":["deletedCount"]}}}},"403":{"description":"Insufficient permissions to delete API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains":{"get":{"operationId":"listDomains","description":"List system domains and workspace domains.","x-speakeasy-group":"domains","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domains.","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainWithUsage"}}},"required":["domains"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDomain","description":"Create a workspace domain and optional initial endpoints.","x-speakeasy-group":"domains","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253},"setup":{"type":"object","properties":{"deploymentPortal":{"type":"boolean"},"packages":{"type":"boolean"},"deploymentUrlProjectId":{"type":"string","nullable":true,"pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"managerIds":{"type":"array","items":{"type":"string"}}}}},"required":["domain"]}}}},"responses":{"200":{"description":"Returned an existing workspace domain claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"201":{"description":"Created domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Domain is reserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/endpoints":{"post":{"operationId":"createDomainEndpoint","description":"Create an endpoint under a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"createEndpoint","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["workspace","project","manager"]},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind"]}}}},"responses":{"201":{"description":"Created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Endpoint cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomain","description":"Get domain by ID.","x-speakeasy-group":"domains","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDomain","description":"Delete a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain deletion requested.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain is in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/refresh":{"post":{"operationId":"refreshDomain","description":"Refresh workspace domain verification.","x-speakeasy-group":"domains","x-speakeasy-name-override":"refresh","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain verification refresh requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events":{"get":{"operationId":"listEvents","description":"Retrieve all events.","x-speakeasy-group":"events","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter events to a single deployment."},"required":false,"description":"Filter events to a single deployment.","name":"deploymentId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["releaseCreatedAt"]},"description":"Optional fields to include: releaseCreatedAt"},"required":false,"description":"Optional fields to include: releaseCreatedAt","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events/{id}":{"get":{"operationId":"getEvent","description":"Retrieve an event by ID.","x-speakeasy-group":"events","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"required":true,"description":"Unique identifier for the event.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens":{"get":{"operationId":"listMachinesJoinTokens","x-speakeasy-group":"machines","x-speakeasy-name-override":"listJoinTokens","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Join tokens for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesJoinTokensResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"createJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Newly minted Machines join token. Existing tokens keep working; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/rotate":{"post":{"operationId":"rotateMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"rotateJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Rotated Machines join token. Revokes all existing tokens, then mints a new one; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/{tokenId}":{"delete":{"operationId":"revokeMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"revokeJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"tokenId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines join token revocation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/inventory":{"get":{"operationId":"listMachinesInventory","x-speakeasy-group":"machines","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machine inventory for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesInventoryResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}/drain":{"delete":{"operationId":"cancelMachinesMachineDrain","x-speakeasy-group":"machines","x-speakeasy-name-override":"cancelMachineDrain","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines drain cancellation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMachinesMachineDrainResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"drainMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"drainMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineRequest"}}}},"responses":{"200":{"description":"Machines drain request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}":{"delete":{"operationId":"removeMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"removeMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines remove request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands":{"get":{"operationId":"listCommands","description":"Retrieve commands. Use for dashboard analytics and command history.","x-speakeasy-group":"commands","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Filter by command state"},"required":false,"description":"Filter by command state","name":"state","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Filter by command name"},"required":false,"description":"Filter by command name","name":"name","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search commands by name"},"required":false,"description":"Search commands by name","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created after this date (ISO 8601)"},"required":false,"description":"Filter commands created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created before this date (ISO 8601)"},"required":false,"description":"Filter commands created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deployment","project"]},"description":"Optional fields to include: deployment, project"},"required":false,"description":"Optional fields to include: deployment, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved commands.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommandListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createCommand","description":"Create command metadata. Called by manager when processing commands. Returns project info for routing decisions.","x-speakeasy-group":"commands","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandRequest"}}}},"responses":{"201":{"description":"Command created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandResponse"}}}},"400":{"description":"Deployment is not ready or has no assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The deployment manager is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/names":{"get":{"operationId":"listCommandNames","description":"List distinct command names. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listNames","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search command names (prefix match)"},"required":false,"description":"Search command names (prefix match)","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct command names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandNamesResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/deployments":{"get":{"operationId":"listCommandDeployments","description":"List distinct deployments that have commands, including deployment group info. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search deployment or deployment group names"},"required":false,"description":"Search deployment or deployment group names","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct deployments that have commands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandDeploymentsResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/target":{"get":{"operationId":"resolveCommandTarget","description":"Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named.","x-speakeasy-group":"commands","x-speakeasy-name-override":"resolveTarget","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment to resolve the target for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Deployment to resolve the target for","name":"deploymentId","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Explicit resource id to resolve; must be a command-capable resource"},"required":false,"description":"Explicit resource id to resolve; must be a command-capable resource","name":"target","in":"query"}],"responses":{"200":{"description":"Resolved command target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedCommandTarget"}}}},"404":{"description":"Deployment or target not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}":{"patch":{"operationId":"updateCommand","description":"Update command state. Called by manager when command is dispatched or completes.","x-speakeasy-group":"commands","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommandRequest"}}}},"responses":{"200":{"description":"Command updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getCommand","description":"Retrieve a command by ID.","x-speakeasy-group":"commands","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/dispatch":{"post":{"operationId":"dispatchCommand","description":"Atomically mark a command DISPATCHED unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"dispatch","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandRequest"}}}},"responses":{"200":{"description":"Dispatch attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/complete":{"post":{"operationId":"completeCommand","description":"Atomically transition a command to a terminal state (SUCCEEDED, FAILED, or EXPIRED) unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"complete","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandRequest"}}}},"responses":{"200":{"description":"Completion attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/increment-attempt":{"post":{"operationId":"incrementCommandAttempt","description":"Atomically increment the command's attempt counter and return the new value.","x-speakeasy-group":"commands","x-speakeasy-name-override":"incrementAttempt","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Attempt incremented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementCommandAttemptResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions":{"get":{"operationId":"listDebugSessions","description":"Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Filter by session state"}]},"required":false,"description":"Filter by session state","name":"state","in":"query"},{"schema":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model (push/pull). Joins against the parent deployment."},"required":false,"description":"Filter by deployment model (push/pull). Joins against the parent deployment.","name":"mode","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Filter by cloud provider. Joins against the parent deployment."},"required":false,"description":"Filter by cloud provider. Joins against the parent deployment.","name":"provider","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated debug sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSessionListResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDebugSession","description":"Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}}},"responses":{"201":{"description":"Debug session created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/{id}":{"patch":{"operationId":"updateDebugSession","description":"Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDebugSessionRequest"}}}},"responses":{"200":{"description":"Debug session updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Debug session not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getDebugSession","description":"Retrieve a debug session by ID.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved debug session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info":{"get":{"operationId":"getDeploymentInfo","description":"Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":false,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Deployment information retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"401":{"description":"Unauthorized — requires a deployment-scoped or deployment-group-scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/compute-plan":{"post":{"operationId":"planDeploymentCompute","description":"Plan deployment compute for the active release before stack preparation. The response contains recommended machine and scale choices for cloud compute pools.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"planCompute","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Compute plan returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentComputePlan"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/prepare-stack":{"post":{"operationId":"prepareDeploymentStack","description":"Prepare the active release stack for a deployment portal setup session. The response contains the generated stack shape plus setup compatibility metadata.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"prepareStack","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Prepared stack returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedDeploymentStack"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"operationId":"slackIntegrationInstallUrl","description":"Generate the Slack OAuth consent URL for this workspace.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"installUrl","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"OAuth URL the dashboard should redirect the user to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/status":{"get":{"operationId":"slackIntegrationStatus","description":"Return the Slack install for this workspace (if any).","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"status","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationStatus"}}}}}}},"/v1/integrations/slack/channels":{"get":{"operationId":"slackIntegrationChannels","description":"List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"listChannels","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Public channels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelsResponse"}}}},"400":{"description":"Workspace not connected to Slack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/notification-channel":{"put":{"operationId":"slackIntegrationSetNotificationChannel","description":"Configure which Slack channel receives ai-agent monitor reports.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"setNotificationChannel","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelRequest"}}}},"responses":{"200":{"description":"Channel saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelResponse"}}}},"400":{"description":"Not connected, or join failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/installation":{"delete":{"operationId":"slackIntegrationUninstall","description":"Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"uninstall","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Uninstalled."}}}},"/v1/agent-sessions":{"get":{"operationId":"listAgentSessions","description":"List ai-agent monitor sessions for this workspace. Newest first, capped at 50.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionListResponse"}}}}}}},"/v1/agent-sessions/{id}":{"get":{"operationId":"getAgentSession","description":"Retrieve one ai-agent monitor session by id.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/events":{"get":{"operationId":"listAgentSessionEvents","description":"Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"events","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Events after the cursor, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionEventsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/approve":{"post":{"operationId":"approveAgentSession","description":"Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"approve","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already resumed / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"202":{"description":"Approved; resume enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/stop":{"post":{"operationId":"stopAgentSession","description":"Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"stop","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already terminal / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"202":{"description":"Cancel accepted; session stopped.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/list":{"post":{"operationId":"syncList","description":"List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows.","x-speakeasy-group":"sync","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListRequest"}}}},"responses":{"200":{"description":"Full deployment records returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/context":{"post":{"operationId":"syncContext","description":"Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock.","x-speakeasy-group":"sync","x-speakeasy-name-override":"context","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncContextRequest"}}}},"responses":{"200":{"description":"Computed deployment context returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"}}}},"404":{"description":"Deployment not found or not assigned to this manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to build deployment context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/acquire":{"post":{"operationId":"syncAcquire","description":"Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing.","x-speakeasy-group":"sync","x-speakeasy-name-override":"acquire","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireRequest"}}}},"responses":{"200":{"description":"Deployments acquired successfully (empty arrays if none available). Failures indicate deployments that were locked but failed during context building - their locks have been released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/reconcile":{"post":{"operationId":"syncReconcile","description":"Reconcile deployment state. Push model requests that include a session verify lock ownership. Pull model state reports are accepted as authz-gated agent progress even when they carry an agent-sync session. Accepts full DeploymentState after step() execution.","x-speakeasy-group":"sync","x-speakeasy-name-override":"reconcile","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileRequest"}}}},"responses":{"200":{"description":"State reconciled successfully. If target is present, continue deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment locked (pull) or session mismatch (push).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/release":{"post":{"operationId":"syncRelease","description":"Release a deployment lock. Must be called after processing an acquired deployment, even if processing failed. This is critical to avoid deadlocks.","x-speakeasy-group":"sync","x-speakeasy-name-override":"release","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReleaseRequest"}}}},"responses":{"200":{"description":"Lock released successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources":{"get":{"operationId":"listInventory","x-speakeasy-group":"resources","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Unified managed and observed resource inventory rows.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["managed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt","source","deploymentId","deploymentName"]},{"type":"object","properties":{"source":{"type":"string","enum":["observed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"rawKind":{"type":"string"},"alienResourceId":{"type":"string","nullable":true},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["source","deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","name","rawKind","alienResourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}":{"get":{"operationId":"listResourceOverview","x-speakeasy-group":"resources","x-speakeasy-name-override":"listOverview","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Compute resource overview rows from latest heartbeats.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/{resourceId}/deployments":{"get":{"operationId":"listResourceDeployments","x-speakeasy-group":"resources","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Deployments where the resource is installed.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt"]}}},"required":["resourceType","resourceId","deployments"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/deployments/{deploymentId}/{resourceId}":{"get":{"operationId":"getResourceDeploymentDetail","x-speakeasy-group":"resources","x-speakeasy-name-override":"getDeploymentDetail","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"deploymentId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Latest heartbeat detail for one compute resource deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"},"desiredImage":{"type":"string","nullable":true}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt","desiredImage"]},"heartbeat":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["available"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"staleAt":{"type":"string","format":"date-time"},"platformStale":{"type":"boolean"},"heartbeat":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"raw":{"type":"array","items":{"nullable":true}}},"required":["status","deploymentId","resourceId","resourceType","backend","controllerPlatform","observedAt","staleAt","platformStale","heartbeat","raw"]},{"type":"object","properties":{"status":{"type":"string","enum":["missing"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"}},"required":["status","deploymentId","resourceId","resourceType"]}]}},"required":["deployment","heartbeat"]}}}},"404":{"description":"Deployment or resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resolve":{"get":{"operationId":"resolve","tags":["resolve"],"summary":"Resolve manager for a project and platform","description":"Returns the manager URL for a given project and platform. The project can be provided as a query parameter, or derived from the token's scope (project-scoped, deployment-group-scoped, or deployment-scoped tokens carry an implicit project). This is the single entry point for all CLI tools to discover which manager to talk to.","x-speakeasy-group":"resolve","x-speakeasy-name-override":"resolve","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform to resolve the manager for"},"required":true,"description":"Target platform to resolve the manager for","name":"platform","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope)."},"required":false,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope).","name":"project","in":"query"}],"responses":{"200":{"description":"Manager resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"description":"Missing required project parameter for this token type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found or no manager available for platform.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Manager not ready yet (no URL reported). Retry after a delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/cloud-regions":{"get":{"operationId":"getCloudRegions","description":"Get cloud regions supported by this Alien environment.","x-speakeasy-group":"cloudRegions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Supported cloud regions retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudRegionsResponse"}}}}}}},"/v1/billing/audit-log":{"get":{"operationId":"listBillingAuditLog","description":"List billing activity entries for the current workspace.","x-speakeasy-group":"billing","x-speakeasy-name-override":"listAuditLog","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor: id from the previous page."},"required":false,"description":"Cursor: id from the previous page.","name":"before","in":"query"}],"responses":{"200":{"description":"Audit-log rows newest-first.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingAuditLogRow"}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"]}}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"getWorkspaceBillingEntitlements","description":"Get the workspace billing entitlements used for product feature gates. Autumn is the source of truth; the response is served through the workspace billing read model with stale-cache fallback.","x-speakeasy-group":"billing","x-speakeasy-name-override":"getEntitlements","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace billing entitlements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBillingEntitlements"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}}}} \ No newline at end of file +{"openapi":"3.0.0","info":{"title":"Alien API","version":"1.0.0","contact":{"name":"Alien Team","url":"https://alien.dev"}},"servers":[{"url":"https://api.alien.dev","description":"Alien API - Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key for authentication, must be provided as a Bearer token. Generate an API key at https://alien.dev/api-keys"}},"schemas":{"WorkspaceInvitationPreview":{"type":"object","properties":{"kind":{"type":"string","enum":["email","link"]},"workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name","logoUrl"]},"inviter":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"image":{"type":"string","nullable":true,"format":"uri"}},"required":["name","image"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["active","accepted","expired","revoked"]},"emailHint":{"type":"string","nullable":true}},"required":["kind","workspace","inviter","role","expiresAt","state","emailHint"],"additionalProperties":false},"WorkspaceRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"Role for workspace-scoped service accounts","example":"workspace.member"},"APIError":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"requestId":{"type":"string","description":"Request ID echoed in the x-request-id response header and server logs."}},"required":["code","message","internal"]},"Membership":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"role":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","logoUrl","role","createdAt"],"additionalProperties":false},"UserProfile":{"type":"object","properties":{"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","description":"User's email address"},"name":{"type":"string","description":"User's display name"},"image":{"type":"string","nullable":true,"description":"User's avatar image URL"},"githubUsername":{"type":"string","nullable":true,"description":"Linked GitHub username"},"cliConnected":{"type":"boolean","description":"Whether this user has ever authenticated a request from the Alien CLI. Latched on first CLI request, never cleared."},"company":{"type":"string","nullable":true,"description":"Company name collected during profile setup."},"acquisitionSource":{"type":"string","nullable":true,"enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other",null],"description":"How the user heard about Alien."},"acquisitionSourceDetail":{"type":"string","nullable":true,"description":"Additional acquisition source detail when the source is other."},"useCases":{"type":"string","nullable":true,"description":"What the user is hoping to use Alien for."},"profileSetupCompletedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the user completed the required profile setup dialog."},"profileSetupVersion":{"type":"integer","nullable":true,"description":"Version of the required profile setup dialog the user completed."}},"required":["id","email","name","image","githubUsername","cliConnected","company","acquisitionSource","acquisitionSourceDetail","useCases","profileSetupCompletedAt","profileSetupVersion"],"additionalProperties":false},"UserProfileSetupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"},"company":{"type":"string","minLength":1,"maxLength":120,"description":"Company name"},"acquisitionSource":{"type":"string","enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other"],"description":"How the user heard about Alien"},"acquisitionSourceDetail":{"type":"string","minLength":1,"maxLength":200,"description":"Required when acquisitionSource is other"},"useCases":{"type":"string","maxLength":2000,"description":"What the user is hoping to use Alien for"}},"required":["name","company","acquisitionSource"],"additionalProperties":false},"GitNamespace":{"type":"object","properties":{"id":{"type":"number","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"installationId":{"type":"number","nullable":true},"type":{"type":"string","enum":["team","user"]},"provider":{"type":"string","enum":["github"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","slug","installationId","type","provider","createdAt"],"additionalProperties":false},"GitRepository":{"type":"object","properties":{"name":{"type":"string"},"private":{"type":"boolean"},"defaultBranch":{"type":"string"},"pushedAt":{"type":"string","format":"date-time"}},"required":["name","private","defaultBranch"],"additionalProperties":false},"AcceptWorkspaceInvitationResponse":{"type":"object","properties":{"outcome":{"type":"string","enum":["joined","already-member"]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"workspaceName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["outcome","workspaceId","workspaceName","role"],"additionalProperties":false},"Subject":{"oneOf":[{"$ref":"#/components/schemas/UserSubject"},{"$ref":"#/components/schemas/ServiceAccountSubject"}],"discriminator":{"propertyName":"kind","mapping":{"user":"#/components/schemas/UserSubject","serviceAccount":"#/components/schemas/ServiceAccountSubject"}},"description":"Authenticated principal that can be either a user (with workspace-scoped permissions) or a service account (with configurable scope and role)"},"UserSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["user"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","format":"email","description":"User's email address"},"workspaceId":{"type":"string","description":"ID of the workspace the user is authenticated within"},"workspaceName":{"type":"string","description":"Name of the workspace the user is authenticated within"},"role":{"$ref":"#/components/schemas/UserRole"}},"required":["kind","id","email","workspaceId","role"],"description":"Authenticated user subject with workspace-scoped permissions"},"UserRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"User's role within the workspace","example":"workspace.member"},"ServiceAccountSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["serviceAccount"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique service account identifier (API key ID)"},"workspaceId":{"type":"string","description":"ID of the workspace the service account belongs to"},"workspaceName":{"type":"string","description":"Name of the workspace the service account belongs to"},"scope":{"$ref":"#/components/schemas/SubjectScope"},"role":{"$ref":"#/components/schemas/Role"}},"required":["kind","id","workspaceId","scope","role"],"description":"Authenticated service account subject with scoped permissions (workspace, project, or deployment level)"},"SubjectScope":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["workspace"],"description":"Workspace-scoped access"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["project"],"description":"Project-scoped access"},"projectId":{"type":"string","description":"ID of the specific project this scope applies to"}},"required":["type","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment"],"description":"Deployment-scoped access"},"deploymentId":{"type":"string","description":"ID of the specific deployment this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"}},"required":["type","deploymentId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"],"description":"Deployment group-scoped access"},"deploymentGroupId":{"type":"string","description":"ID of the specific deployment group this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"}},"required":["type","deploymentGroupId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["manager"],"description":"Manager-scoped access"},"managerId":{"type":"string","description":"ID of the specific manager this scope applies to"}},"required":["type","managerId"]}],"description":"Authorization scope defining what resources this service account can access"},"Role":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"$ref":"#/components/schemas/ProjectRole"},{"$ref":"#/components/schemas/DeploymentRole"},{"$ref":"#/components/schemas/DeploymentGroupRole"},{"$ref":"#/components/schemas/ManagerRole"}],"description":"Role defining what actions this service account can perform within its scope","example":"workspace.member"},"ProjectRole":{"type":"string","enum":["project.viewer","project.developer"],"description":"Role for project-scoped service accounts","example":"project.developer"},"DeploymentRole":{"type":"string","enum":["deployment.viewer","deployment.manager","deployment.telemetry-writer"],"description":"Role for deployment-scoped service accounts","example":"deployment.manager"},"DeploymentGroupRole":{"type":"string","enum":["deployment-group.deployer"],"description":"Role for deployment group-scoped service accounts","example":"deployment-group.deployer"},"ManagerRole":{"type":"string","enum":["manager.runtime"],"description":"Role for manager-scoped service accounts","example":"manager.runtime"},"Workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name.","example":"my-workspace"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"onboardingDismissedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the Getting Started walkthrough was dismissed or completed for this workspace. Null means it has never been dismissed; the dashboard auto-promotes the walkthrough until this is set."},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","onboardingDismissedAt","createdAt"],"additionalProperties":false},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","email","name","image","role","joinedAt"],"additionalProperties":false},"AgentSettings":{"type":"object","properties":{"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"enabled":{"type":"boolean","description":"Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`."},"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["workspaceId","enabled","debugPermissionMode","createdAt","updatedAt"],"additionalProperties":false},"UpdateWorkspaceSettingsRequest":{"type":"object","properties":{"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"enabled":{"type":"boolean","description":"Turn the ai-agent on (`true`) or off (`false`) for this workspace."}}},"WorkspaceInvitation":{"type":"object","properties":{"id":{"type":"string","pattern":"winv_[0-9a-zA-Z]{32}$","description":"Unique identifier for the workspace invitation.","example":"winv_DsgltMIFV0GmqtxV5NYTtrknrna"},"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"status":{"type":"string","enum":["pending","accepted","revoked","expired"]},"deliveryStatus":{"type":"string","enum":["pending","sent","failed"]},"expiresAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","email","role","status","deliveryStatus","expiresAt","lastSentAt","createdAt","inviteUrl"],"additionalProperties":false},"WorkspaceInviteLink":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"wil_[0-9a-zA-Z]{40}$","description":"Unique identifier for the workspace invite link.","example":"wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"useCount":{"type":"integer","minimum":0},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","role","expiresAt","createdAt","useCount","lastUsedAt","inviteUrl"],"additionalProperties":false},"ProjectListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deploymentCount":{"type":"number"},"latestRelease":{"$ref":"#/components/schemas/ProjectReleaseInfo"}}}]},"DeploymentPortalAppearancePreset":{"type":"string","enum":["clean","technical","enterprise","playful","minimal"],"default":"clean","description":"Curated visual style for the deployment portal."},"DeploymentPortalAccentColor":{"type":"string","enum":["blue","purple","green","orange","pink","slate"],"default":"blue","description":"Accent color used for highlights and primary actions."},"DeploymentPortalDensity":{"type":"string","enum":["comfortable","compact"],"default":"comfortable","description":"Layout density for portal content."},"ProjectReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","gitMetadata","createdAt"]},"GitMetadata":{"type":"object","nullable":true,"properties":{"commitSha":{"type":"string","nullable":true,"maxLength":40,"description":"The hash of the commit","example":"dc36199b2234c6586ebe05ec94078a895c707e29"},"commitMessage":{"type":"string","nullable":true,"maxLength":1024,"description":"The commit message","example":"add method to measure Interaction to Next Paint (INP) (#36490)"},"commitRef":{"type":"string","nullable":true,"maxLength":256,"description":"The branch or tag on which the commit was made","example":"main"},"commitDate":{"type":"string","nullable":true,"format":"date-time","description":"The date and time when the commit was created","example":"2026-03-16T12:00:00Z"},"dirty":{"type":"boolean","nullable":true,"description":"Whether or not there have been modifications to the working tree since the latest commit","example":true},"remoteUrl":{"type":"string","nullable":true,"maxLength":2048,"description":"The git repository's remote origin url","example":"https://github.com/alienplatform/alien"},"commitAuthorName":{"type":"string","nullable":true,"maxLength":256,"description":"The name of the author of the commit (from git config)","example":"John Doe"},"commitAuthorEmail":{"type":"string","nullable":true,"maxLength":256,"format":"email","description":"The email of the author of the commit (from git config)","example":"john@example.com"},"commitAuthorLogin":{"type":"string","nullable":true,"maxLength":256,"description":"The provider username of the commit author (e.g., GitHub login), resolved server-side from the commit email","example":"johndoe"},"commitAuthorAvatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"The avatar URL of the commit author, resolved server-side from the provider login","example":"https://github.com/johndoe.png"},"provider":{"$ref":"#/components/schemas/GitProvider"}}},"GitProvider":{"oneOf":[{"$ref":"#/components/schemas/GitHubProvider"},{"$ref":"#/components/schemas/GitLabProvider"},{"nullable":true}],"description":"Provider-specific repository information, resolved server-side from remoteUrl"},"GitHubProvider":{"type":"object","properties":{"type":{"type":"string","enum":["github"]},"org":{"type":"string","maxLength":256,"description":"Repository owner (user or organization)"},"repo":{"type":"string","maxLength":256,"description":"Repository name"}},"required":["type","org","repo"]},"GitLabProvider":{"type":"object","properties":{"type":{"type":"string","enum":["gitlab"]},"namespace":{"type":"string","maxLength":256,"description":"Group/project namespace"},"project":{"type":"string","maxLength":256,"description":"Project name"}},"required":["type","namespace","project"]},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","createdAt","workspaceId"]},"ProjectIDOrNamePathParam":{"type":"string","maxLength":100,"description":"Project ID or name."},"ProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","redirectUris"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"hasClientSecret":{"type":"boolean","enum":[true]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","clientId","hasClientSecret","redirectUris"]}]},"GcpOAuthClientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[a-zA-Z0-9_-]+-[a-zA-Z0-9_-]+\\.apps\\.googleusercontent\\.com$","description":"Google OAuth web client ID.","example":"1234567890-abc123.apps.googleusercontent.com"},"UpdateProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId"]}]},"GcpOAuthClientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Google OAuth web client secret. Write-only; never returned by the API.","example":"GOCSPX-example"},"UpdateProject":{"type":"object","properties":{"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."}}},"DeploymentPortalDomainResponse":{"type":"object","properties":{"deploymentPortalEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"},"packageEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["deploymentPortalEndpoint","packageEndpoint"]},"DomainEndpoint":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dend_[0-9a-z]{28}$","description":"Unique identifier for the domain endpoint.","example":"dend_1bb6gdvm1bs74acqkjstcgv"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domainId":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"kind":{"$ref":"#/components/schemas/DomainEndpointKind"},"owner":{"$ref":"#/components/schemas/DomainEndpointOwner"},"hostname":{"type":"string","minLength":1,"maxLength":253},"status":{"$ref":"#/components/schemas/DomainEndpointStatus"},"provider":{"type":"string","nullable":true},"providerState":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"managedDnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPortalManagedDnsRecord"}},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"retryAttempts":{"type":"integer","minimum":0},"nextStepAfter":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","workspaceId","domainId","kind","owner","hostname","status","managedDnsRecords","retryAttempts","createdAt","updatedAt"]},"DomainEndpointKind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"DomainEndpointOwner":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DomainEndpointOwnerType"},"id":{"type":"string"}},"required":["type","id"]},"DomainEndpointOwnerType":{"type":"string","enum":["workspace","project","manager"]},"DomainEndpointStatus":{"type":"string","enum":["waiting_for_domain","provisioning","waiting_for_dns","waiting_for_health","active","failed","deleting"]},"DeploymentPortalManagedDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true}},"required":["name","type","value"]},"DeploymentLinkSetupResponse":{"type":"object","properties":{"activeRelease":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","nullable":true},"stack":{"$ref":"#/components/schemas/StackByPlatform"}},"required":["id","version","stack"]},"visiblePackageTypes":{"type":"array","items":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"}},"visibleSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}}},"required":["activeRelease","visiblePackageTypes","visibleSetupMethods"]},"StackByPlatform":{"type":"object","nullable":true,"properties":{"aws":{"nullable":true},"gcp":{"nullable":true},"azure":{"nullable":true},"kubernetes":{"nullable":true},"machines":{"nullable":true},"local":{"nullable":true},"test":{"nullable":true}},"additionalProperties":false},"DeploymentSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform","helm","cli","manual"]},"DeploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments allowed in this deployment group"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","projectId","workspaceId","createdAt"]},"CreateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments in this deployment group"}},"required":["name","project"]},"EnsureDeploymentGroupByNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments for newly created groups"}},"required":["name","project"]},"ProjectIDOrNameQueryParam":{"type":"string","maxLength":100,"description":"Filter by project ID or name."},"UpdateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"maxDeployments":{"type":"integer","minimum":1,"description":"Maximum number of deployments in this deployment group"}}},"CreateDeploymentGroupTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The API key token"},"deploymentLink":{"type":"string","description":"Formatted deployment link"}},"required":["token","deploymentLink"]},"CreateDeploymentGroupTokenRequest":{"type":"object","properties":{"description":{"type":"string","description":"Description for the API key"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"},"deploymentSetupConfig":{"$ref":"#/components/schemas/DeploymentSetupConfig"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["deploymentSetupConfig"]},"DeploymentSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."}},"required":["metadata","policy","environmentVariables"]},"DeploymentSetupMetadata":{"type":"object","additionalProperties":{"nullable":true}},"DeploymentSetupPolicy":{"type":"object","properties":{"allowedPlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"allowedKubernetesBasePlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","on-prem"]},"minItems":1,"description":"Kubernetes base environments the recipient may target."},"allowedKubernetesClusterSources":{"type":"array","items":{"$ref":"#/components/schemas/KubernetesClusterSource"},"minItems":1,"description":"Whether recipients may create a cluster, use an existing cluster, or both."},"allowedSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}},"allowReleasePinning":{"type":"boolean"},"stackSettings":{"$ref":"#/components/schemas/DeploymentSetupStackSettingsPolicy"}},"required":["allowedPlatforms","allowedSetupMethods"]},"KubernetesClusterSource":{"type":"string","enum":["create","existing"]},"DeploymentSetupStackSettingsPolicy":{"type":"object","properties":{"defaults":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"allowedDeploymentModels":{"type":"array","items":{"type":"string","enum":["push","pull","airgapped"]}},"allowedNetworkModes":{"type":"array","items":{"type":"string","enum":["none","create","default","byo"]}},"allowedUpdatesModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required"]}},"allowedTelemetryModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required","off"]}},"allowedHeartbeatsModes":{"type":"array","items":{"type":"string","enum":["on","off"]}},"allowExternalBindings":{"type":"boolean"},"allowCustomRegistry":{"type":"boolean"}}},"EnvironmentVariableConfig":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"value":{"type":"string","maxLength":10000,"description":"Variable value (encrypted in database)"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","value","type","targetResources"]},"EnvironmentVariableType":{"type":"string","enum":["plain","secret"],"description":"Variable type (plain or secret)"},"EncryptedStackInputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EncryptedStackInputValue"},"default":{}},"EncryptedStackInputValue":{"type":"object","properties":{"value":{"type":"string","description":"Encrypted JSON-encoded input value."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"]},"secret":{"type":"boolean","description":"Whether the original input is secret."}},"required":["value","kind","secret"]},"StackInputValuesRequest":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{}},"StackInputValueRequest":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"CreateFirstPartyDeploymentSessionResponse":{"type":"object","properties":{"token":{"type":"string","description":"The deployment-group session token"}},"required":["token"]},"Package":{"type":"object","properties":{"id":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"type":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"},"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string","description":"Package version (e.g., '1.0.0', 'rel_abc123')"},"sourceReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release used as package build input. Null for release-less packages such as Operate Operator images.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"setupFingerprints":{"$ref":"#/components/schemas/SetupFingerprintMap"},"packageBuildInputHash":{"type":"string","description":"Hash of Platform-known package build request inputs: package type, source release, setup fingerprints, package config, and setup contract version"},"config":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"}},"required":["displayName","name"],"description":"Branding configuration for the deploy CLI binary."},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for CloudFormation packages"},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"}},"required":["chartName","description"],"description":"Configuration for the Helm chart package"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"}},"required":["displayName","name"],"description":"Branding configuration for the Operator image."},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for Terraform package generation."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]}],"description":"Type-specific configuration"},"outputs":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"digest":{"type":"string","description":"Image digest (e.g., \"sha256:abc123...\")"},"image":{"type":"string","description":"Full image reference (e.g., \"public.ecr.aws/acme/operators/project-id:1.2.3\")"},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain embedded into the Operator binary, if whitelabeled."}},"required":["digest","image"],"description":"Outputs from an Operator image package build"},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]},{"nullable":true}],"description":"Package outputs (only when status is 'ready')"},"error":{"nullable":true,"description":"Error information if status is 'failed'"},"sourceBinarySha256":{"type":"string","nullable":true,"description":"Builder-recorded source binary SHA256 (for cli/terraform packages)"},"retries":{"type":"integer","minimum":0,"description":"Number of build retries"},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"leaseExpiresAt":{"type":"string","format":"date-time","nullable":true,"description":"Expiration of the current builder lease"},"buildPhase":{"type":"string","nullable":true,"enum":["building","publishing",null],"description":"Coarse package build phase"},"lastProgressAt":{"type":"string","format":"date-time","nullable":true,"description":"Last successful builder lease renewal or phase change"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","projectId","workspaceId","type","status","version","setupFingerprints","packageBuildInputHash","config","retries","createdAt","updatedAt"]},"SetupFingerprintMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SetupFingerprintInfo"},"description":"Per-target setup compatibility fingerprints copied from the source release"},"SetupFingerprintInfo":{"type":"object","properties":{"target":{"$ref":"#/components/schemas/SetupTarget"},"fingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"version":{"$ref":"#/components/schemas/SetupFingerprintVersion"}},"required":["target","fingerprint","version"]},"SetupTarget":{"type":"string","minLength":1,"description":"Stable target key for the setup contract, e.g. aws/us-east-1"},"SetupFingerprint":{"type":"string","minLength":1,"description":"Deterministic setup contract fingerprint for one setup target"},"SetupFingerprintVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup fingerprint algorithm version"},"ReleaseListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Release"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"rollout":{"type":"object","nullable":true,"properties":{"updatedCount":{"type":"integer","description":"Deployments that finished updating to this release (excludes initial provisions)"},"pendingCount":{"type":"integer","description":"Deployments currently targeting this release but not yet running it"},"avgDurationMs":{"type":"number","nullable":true,"description":"Average time from release creation until a deployment finished updating, in milliseconds"}},"required":["updatedCount","pendingCount","avgDurationMs"],"description":"Rollout stats, included when ?include=rollout is used"}}}]},"Release":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"projectId":{"type":"string","maxLength":128},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"setupFingerprints":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintMap"},{"description":"Per-target setup compatibility fingerprints for this release"}]},"rootDirectory":{"type":"string","nullable":true,"maxLength":256},"workspaceId":{"type":"string","maxLength":128}},"required":["id","projectId","version","createdAt","setupFingerprints","workspaceId"]},"CreateReleaseRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256}},"required":["project"]},"ReleaseAuthorFilterItem":{"type":"object","properties":{"login":{"type":"string","nullable":true,"description":"Provider username (e.g., GitHub login)"},"name":{"type":"string","nullable":true,"description":"Git commit author name"},"avatarUrl":{"type":"string","nullable":true,"format":"uri","description":"Author avatar URL"}},"required":["login","name","avatarUrl"]},"DeploymentListItemResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if in a failed state"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"$ref":"#/components/schemas/ManagerID"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentProtocolVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DeploymentState protocol version owned by the runtime/manager"},"OperatorCapabilityReport":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":128},"state":{"$ref":"#/components/schemas/OperatorCapabilityState"},"detail":{"type":"string","nullable":true,"maxLength":512}},"required":["key","state"]},"OperatorCapabilityState":{"type":"string","enum":["granted","denied","unavailable"]},"ManagerID":{"type":"string","pattern":"mgr_[0-9a-z]{28}$","description":"ID of the manager","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"DeploymentReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","version","createdAt"]},"DeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"}},"required":["id","name"]},"DeploymentProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"}},"required":["id","name"]},"DeploymentStats":{"type":"object","properties":{"total":{"type":"number","description":"Total number of deployments matching filters"},"byStatus":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by status (only includes statuses with non-zero counts)"},"byPlatform":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by platform (only includes platforms with non-zero counts)"},"byCurrentRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by currentReleaseId. The empty string key represents deployments with no current release (initial provisioning)."},"byPinnedRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by pinnedReleaseId among deployments that are pinned. Excludes unpinned deployments."}},"required":["total","byStatus","byPlatform","byCurrentRelease","byPinnedRelease"]},"DeploymentDetailResponse":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}}}]},"Deployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"targetEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of target environment variables for the deployment"},"currentEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of current environment variables for the deployment"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentConnectionInfo":{"type":"object","properties":{"arc":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Manager URL for commands"},"deploymentId":{"type":"string","description":"Deployment ID to use in command requests"}},"required":["url","deploymentId"]},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"publicEndpoints":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"protocol":{"type":"string","enum":["http","tcp"]},"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"wildcardHost":{"type":"string"}},"required":["url","protocol","host","port"]},"description":"Public endpoints keyed by endpoint name."}},"required":["type"]},"description":"Deployed resources and their public endpoints"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"platform":{"type":"string"}},"required":["arc","resources","status","platform"]},"CreateDeploymentResponse":{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Effective deployment model persisted for the deployment."},"token":{"type":"string","description":"Deployment token (only returned when using deployment group token)"}},"required":["deployment","deploymentModel"]},"NewDeploymentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentGroupId":{"type":"string","description":"Required for workspace/project tokens. Deployment group tokens use their own group automatically."},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Optional manager to assign. If omitted, the project default or system manager is selected."}]},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"Stack settings for deployment customization"},"resourcePrefix":{"$ref":"#/components/schemas/ResourcePrefix"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method that created the deployment. Defaults to cli."}]},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup method metadata used to guide privileged teardown."}]},"inputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{},"description":"Stack input values provided by the deployment creator."},"operatorScope":{"type":"string","minLength":1,"maxLength":512,"description":"Display-only scope reported by the Operator manifest."},"operatorPermission":{"type":"string","minLength":1,"maxLength":64,"description":"Display-only permission tier reported by the Operator manifest."},"initialDesiredRelease":{"type":"string","enum":["active","none"],"default":"active","description":"Desired-release selection for a new deployment. Use none to register an environment without initially requesting a release; later updates can assign one."}},"required":["name","platform","project"],"additionalProperties":false,"description":"Request schema for creating a new deployment"},"ResourcePrefix":{"type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?=[a-z0-9])){1,38}[a-z0-9]$","description":"Optional physical-name prefix for generated cloud resources. Omit to let the manager generate one."},"ImportDeploymentRequest":{"oneOf":[{"$ref":"#/components/schemas/ForwardImportRequest"},{"$ref":"#/components/schemas/PersistImportedDeploymentRequest"}],"description":"Request schema for importing a deployment from resolved setup infrastructure"},"ForwardImportRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["forward"],"default":"forward"},"project":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user-session callers."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Required for user-session callers. Deployment-group tokens use their own group automatically.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager ID. If omitted, the first suitable manager for the source platform is used."}]},"source":{"$ref":"#/components/schemas/ImportSource"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["source"]},"ImportSource":{"type":"object","properties":{"deploymentName":{"type":"string","minLength":1,"description":"User-chosen deployment name. Must be unique within the deployment group; the manager returns 409 on collision."},"resourcePrefix":{"allOf":[{"$ref":"#/components/schemas/ResourcePrefix"},{"description":"Stable physical-name prefix used by the setup artifact."}]},"sourceKind":{"$ref":"#/components/schemas/ImportSourceKind"},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup source metadata needed to guide privileged teardown."}]},"releaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release that produced the setup artifact. Defaults to latest.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Cloud platform of the imported stack"},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"region":{"type":"string","description":"Region or location reported by the setup artifact"},"setupTarget":{"allOf":[{"$ref":"#/components/schemas/SetupTarget"},{"description":"Setup target this package was generated for"}]},"setupImportFormatVersion":{"$ref":"#/components/schemas/SetupImportFormatVersion"},"setupFingerprint":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprint"},{"description":"Setup compatibility fingerprint embedded in the package"}]},"setupFingerprintVersion":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintVersion"},{"description":"Setup fingerprint algorithm version embedded in the package"}]},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ImportedResource"},"minItems":1}},"required":["deploymentName","resourcePrefix","platform","region","setupTarget","setupImportFormatVersion","setupFingerprint","setupFingerprintVersion","stackSettings","resources"],"description":"Resolved setup import payload"},"ImportSourceKind":{"type":"string","enum":["cloudformation","terraform","helm"],"description":"Source label for observability only — does not affect import behavior."},"KubernetesBasePlatform":{"type":"string","enum":["aws","gcp","azure"],"description":"Base cloud platform for cloud-backed Kubernetes imports."},"SetupImportFormatVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup import payload format version embedded in the package"},"ImportedResource":{"type":"object","properties":{"id":{"type":"string","description":"Resource id from the active stack"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"importData":{"type":"object","additionalProperties":{"nullable":true},"description":"Resolved typed import payload"}},"required":["id","type","importData"]},"PersistImportedDeploymentRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["persist"]},"name":{"type":"string","minLength":1,"description":"Deployment name. Must be unique within the deployment group."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"stackState":{"nullable":true},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"runtimeMetadata":{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},"scheduleReconciliation":{"type":"boolean","default":false},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"default":"provisioning","description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"currentReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"setupMetadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"setupTarget":{"$ref":"#/components/schemas/SetupTarget"},"setupFingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"setupFingerprintVersion":{"$ref":"#/components/schemas/SetupFingerprintVersion"},"deploymentToken":{"type":"string"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["mode","name","deploymentGroupId","managerId","platform","stackSettings","runtimeMetadata","deploymentProtocolVersion","setupTarget","setupFingerprint","setupFingerprintVersion"]},"SetFirstPartyDeploymentInputsResponse":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"SetFirstPartyDeploymentInputsRequest":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["platform"]},"SetupRegistrationOperationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"status":{"$ref":"#/components/schemas/SetupRegistrationOperationStatus"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"physicalResourceId":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/SetupRegistrationOperationResult"},"error":{"type":"object","nullable":true,"properties":{"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["message","retryable"]}},"required":["id","action","sourceKind","status","deploymentId","physicalResourceId","result","error"]},"SetupRegistrationAction":{"type":"string","enum":["create","update","delete"]},"SetupRegistrationOperationStatus":{"type":"string","enum":["pending","processing","waiting-for-handoff","succeeded","failed","responding","responded"]},"SetupRegistrationOperationResult":{"type":"object","nullable":true,"properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deploymentToken":{"type":"string","nullable":true},"helmValues":{"type":"string","nullable":true}},"required":["deploymentId","deploymentToken","helmValues"]},"CreateSetupRegistrationOperationRequest":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"source":{"allOf":[{"$ref":"#/components/schemas/ImportSource"}],"nullable":true},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":512},"cloudFormation":{"$ref":"#/components/schemas/SetupRegistrationCloudFormationTarget"}},"required":["action","sourceKind"],"additionalProperties":false},"SetupRegistrationCloudFormationTarget":{"type":"object","nullable":true,"properties":{"stackId":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"logicalResourceId":{"type":"string","minLength":1},"responseUrl":{"type":"string","format":"uri"},"physicalResourceId":{"type":"string","nullable":true,"minLength":1},"serviceTimeoutSeconds":{"type":"integer","minimum":60,"maximum":7200,"default":3300}},"required":["stackId","requestId","logicalResourceId","responseUrl"],"additionalProperties":false},"DeleteDeploymentResponse":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]},"message":{"type":"string"}},"required":["action","message"]},"DeleteDeploymentRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]}},"required":["action"]},"PinReleaseRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release ID to pin the deployment to. Set to null to unpin and use active release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for pinning/unpinning deployment release"},"DeploymentInputsResponse":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"description":"Current non-secret input values. Secret values are never returned."},"providedInputIds":{"type":"array","items":{"type":"string"},"description":"Input IDs that currently have a value, including redacted secrets."}},"required":["inputs","values","providedInputIds"]},"UpdateDeploymentInputsResponse":{"allOf":[{"$ref":"#/components/schemas/DeploymentInputsResponse"},{"type":"object","properties":{"runtimeUpdateRequested":{"type":"boolean"}},"required":["runtimeUpdateRequested"]}]},"UpdateDeploymentInputsRequest":{"type":"object","properties":{"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"clearInputIds":{"type":"array","items":{"type":"string"},"default":[]}},"additionalProperties":false},"UpdateDeploymentEnvironmentVariablesRequest":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"type":{"type":"string","enum":["plain","secret"],"description":"Variable type"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources)"}},"required":["name","value","type"]},"description":"Environment variables for the deployment"}},"required":["variables"],"additionalProperties":false,"description":"Request schema for updating deployment environment variables"},"CreateDeploymentTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The generated deployment token (only shown once)"},"deploymentId":{"type":"string","description":"The deployment ID that this token is scoped to"}},"required":["token","deploymentId"]},"CreateDeploymentTokenRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128,"description":"Optional description for the deployment token"},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiration date for the deployment token"}},"required":["description"]},"CreateManagerResponse":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["pending"]},"setupToken":{"type":"string"},"setupTokenId":{"type":"string"},"deploymentLink":{"type":"string"},"setupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["plain","secret"]},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["name","type","targetResources"]}}},"required":["metadata","policy","environmentVariables"]},"setup":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["cloudformation"]},"deploymentPortalUrl":{"type":"string"},"launchUrl":{"type":"string"},"templateUrl":{"type":"string"},"stackName":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","launchUrl","templateUrl","stackName","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["google-oauth"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"oauthStartUrl":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","oauthStartUrl","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["terraform"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"providerSource":{"type":"string"},"moduleSource":{"type":"string"},"moduleVersion":{"type":"string"},"moduleInputs":{"type":"object","additionalProperties":{"type":"string"}},"mainTf":{"type":"string"},"tfvars":{"type":"string"},"commands":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","providerSource","moduleSource","moduleInputs","mainTf","tfvars","commands","stackSettings"]}]}},"required":["managerId","setupStatus","setupToken","setupTokenId","deploymentLink","setupConfig","setup"]},"NewManagerRequest":{"type":"object","properties":{"name":{"type":"string"},"cloud":{"$ref":"#/components/schemas/PrivateManagerCloud"},"region":{"type":"string","minLength":1,"maxLength":64,"description":"Cloud region for the manager."},"setupMethod":{"$ref":"#/components/schemas/PrivateManagerSetupMethod"},"network":{"type":"string","enum":["create","default"],"description":"Optional network mode for the private-manager setup. Defaults to create for production isolation; default uses the provider default network for faster dev/test setup."},"otlpConfig":{"type":"object","properties":{"logsEndpoint":{"type":"string","format":"uri","description":"External OTLP logs endpoint (e.g. https://api.axiom.co/v1/logs)"},"logsAuthHeader":{"type":"string","description":"Auth header in 'key=value,...' format (e.g. 'authorization=Bearer ,x-axiom-dataset=')"}},"required":["logsEndpoint","logsAuthHeader"],"description":"Optional external OTLP config for forwarding logs to Axiom, Datadog, etc. Falls back to built-in DeepStore when not set."}},"required":["name","cloud","region"]},"PrivateManagerCloud":{"type":"string","enum":["aws","gcp","azure"],"description":"Cloud where the private manager will be deployed."},"PrivateManagerSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform"],"description":"Optional setup method. Defaults to cloudformation for AWS, google-oauth for GCP, and terraform for Azure."},"ManagerRetryResponse":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/CreateManagerResponse"},{"type":"object","properties":{"mode":{"type":"string","enum":["setup"]}},"required":["mode"]}]},{"$ref":"#/components/schemas/ManagerRetryDeploymentResponse"}]},"ManagerRetryDeploymentResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["deployment"]},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["provisioning"]},"deploymentId":{"type":"string"},"message":{"type":"string"}},"required":["mode","managerId","setupStatus","deploymentId","message"]},"Manager":{"type":"object","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for the manager"}]},"name":{"type":"string","description":"Display name of the manager"},"targets":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms this manager can handle"},"cloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where this private manager is deployed"},"region":{"type":"string","nullable":true,"description":"Cloud region selected for this private manager"},"setupStatus":{"type":"string","nullable":true,"enum":["pending","provisioning","active","failed","deleting","deleted",null],"description":"Private manager setup lifecycle status"},"url":{"type":"string","nullable":true,"format":"uri","description":"Manager URL (self-reported via heartbeat). DeepStore endpoints are exposed through this URL (e.g., {url}/v1/logs)"},"managementConfigs":{"$ref":"#/components/schemas/ManagerManagementConfigs"},"isSystem":{"type":"boolean","description":"Whether this is a system manager (Alien-hosted)"},"workspaceId":{"type":"string","description":"The workspace ID (for system managers, this is ALIEN_WORKSPACE_ID)"},"status":{"$ref":"#/components/schemas/ManagerStatus"},"version":{"type":"string","nullable":true,"description":"Manager version (self-reported via heartbeat)"},"metrics":{"type":"object","nullable":true,"properties":{"activeDeployments":{"type":"number","description":"Number of active deployments"},"pendingDeployments":{"type":"number","description":"Number of pending deployments"},"memoryUsageMb":{"type":"number","description":"Memory usage in megabytes"},"cpuUsagePercent":{"type":"number","description":"CPU usage percentage"}},"description":"Runtime metrics (self-reported via heartbeat)"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the manager"},"logsDatabaseId":{"type":"string","nullable":true,"description":"ID of the logs database associated with this manager"},"managedDeploymentCount":{"type":"integer","minimum":0,"description":"Number of deployments currently being managed by this manager"},"defaultProjectCount":{"type":"integer","minimum":0,"description":"Number of projects that select this manager as a default manager"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the manager was created"}},"required":["id","name","targets","managementConfigs","isSystem","workspaceId","status","managedDeploymentCount","defaultProjectCount","createdAt"],"description":"Manager schema"},"ManagerManagementConfigs":{"type":"object","properties":{"aws":{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"},"platform":{"type":"string","enum":["aws"]}},"required":["managingRoleArn","platform"]},"gcp":{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"},"platform":{"type":"string","enum":["gcp"]}},"required":["serviceAccountEmail","platform"]},"azure":{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."},"platform":{"type":"string","enum":["azure"]}},"required":["managingTenantId","oidcIssuer","oidcSubject","platform"]},"kubernetes":{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}},"description":"Per-platform management configurations for cross-account access (self-reported via heartbeat)"},"ManagerStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"],"description":"Current health status"},"ManagerDomainBindingResponse":{"type":"object","properties":{"managerDomainBinding":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["managerDomainBinding"]},"UpdateManagerDomainBinding":{"type":"object","properties":{"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"}},"additionalProperties":false},"UpdateManagerRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Optional release ID to update to. If not provided, the active release will be chosen","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for updating a manager to a new release"},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"debugSessionId":{"type":"string","nullable":true,"pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"data":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["LoadingConfiguration"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["Finished"]}},"required":["type"]},{"type":"object","properties":{"stack":{"type":"string","description":"Name of the stack being built"},"type":{"type":"string","enum":["BuildingStack"]}},"required":["stack","type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform being targeted"},"stack":{"type":"string","description":"Name of the stack being checked"},"type":{"type":"string","enum":["RunningPreflights"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"targetTriple":{"type":"string","description":"Target triple for the runtime"},"type":{"type":"string","enum":["DownloadingAlienRuntime"]},"url":{"type":"string","description":"URL being downloaded from"}},"required":["targetTriple","type","url"]},{"type":"object","properties":{"relatedResources":{"type":"array","items":{"type":"string"},"description":"All resource names sharing this build (for deduped container groups)"},"resourceName":{"type":"string","description":"Name of the resource being built"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["BuildingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being built"},"type":{"type":"string","enum":["BuildingImage"]}},"required":["image","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being pushed"},"progress":{"oneOf":[{"type":"object","properties":{"bytesUploaded":{"type":"integer","minimum":0,"description":"Bytes uploaded so far"},"layersUploaded":{"type":"integer","minimum":0,"description":"Number of layers uploaded so far"},"operation":{"type":"string","description":"Current operation being performed"},"totalBytes":{"type":"integer","minimum":0,"description":"Total bytes to upload"},"totalLayers":{"type":"integer","minimum":0,"description":"Total number of layers to upload"}},"required":["bytesUploaded","layersUploaded","operation","totalBytes","totalLayers"],"description":"Progress information for image push operations"},{"nullable":true}]},"type":{"type":"string","enum":["PushingImage"]}},"required":["image","type"]},{"type":"object","properties":{"destination":{"type":"string","nullable":true,"description":"Human-readable destination for pushed images"},"platform":{"type":"string","description":"Target platform"},"stack":{"type":"string","description":"Name of the stack being pushed"},"type":{"type":"string","enum":["PushingStack"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"resourceName":{"type":"string","description":"Name of the resource being pushed"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["PushingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"project":{"type":"string","description":"Project name"},"type":{"type":"string","enum":["CreatingRelease"]}},"required":["project","type"]},{"type":"object","properties":{"language":{"type":"string","description":"Language being compiled (rust, typescript, etc.)"},"progress":{"type":"string","nullable":true,"description":"Current progress/status line from the build output"},"type":{"type":"string","enum":["CompilingCode"]}},"required":["language","type"]},{"type":"object","properties":{"nextState":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},"suggestedDelayMs":{"type":"integer","nullable":true,"minimum":0,"description":"An suggested duration to wait before executing the next step."},"type":{"type":"string","enum":["StackStep"]}},"required":["nextState","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["GeneratingCloudFormationTemplate"]}},"required":["type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform for which the template is being generated"},"type":{"type":"string","enum":["GeneratingTemplate"]}},"required":["platform","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being provisioned"},"releaseId":{"type":"string","description":"ID of the release being deployed to the agent"},"type":{"type":"string","enum":["ProvisioningAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being updated"},"releaseId":{"type":"string","description":"ID of the new release being deployed to the agent"},"type":{"type":"string","enum":["UpdatingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being deleted"},"releaseId":{"type":"string","description":"ID of the release that was running on the agent"},"type":{"type":"string","enum":["DeletingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being debugged"},"debugSessionId":{"type":"string","description":"ID of the debug session"},"type":{"type":"string","enum":["DebuggingAgent"]}},"required":["agentId","debugSessionId","type"]},{"type":"object","properties":{"strategyName":{"type":"string","description":"Name of the deployment strategy being used"},"type":{"type":"string","enum":["PreparingEnvironment"]}},"required":["strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being deployed"},"type":{"type":"string","enum":["DeployingStack"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being tested"},"type":{"type":"string","enum":["RunningTestWorker"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpStack"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpEnvironment"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"platformName":{"type":"string","description":"Name of the platform (e.g., \"AWS\", \"GCP\")"},"type":{"type":"string","enum":["SettingUpPlatformContext"]}},"required":["platformName","type"]},{"type":"object","properties":{"repositoryName":{"type":"string","description":"Name of the docker repository"},"type":{"type":"string","enum":["EnsuringDockerRepository"]}},"required":["repositoryName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeployingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"roleArn":{"type":"string","description":"ARN of the role to assume"},"type":{"type":"string","enum":["AssumingRole"]}},"required":["roleArn","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"type":{"type":"string","enum":["ImportingStackStateFromCloudFormation"]}},"required":["cfnStackName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeletingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"bucketNames":{"type":"array","items":{"type":"string"},"description":"Names of the S3 buckets being emptied"},"type":{"type":"string","enum":["EmptyingBuckets"]}},"required":["bucketNames","type"]},{"type":"object","properties":{"deploymentGroupId":{"type":"string","description":"ID of the deployment group this slot belongs to"},"deploymentId":{"type":"string","description":"ID of the deployment that was created"},"releaseId":{"type":"string","nullable":true,"description":"Initial release the slot was created with, if any"},"type":{"type":"string","enum":["DeploymentCreated"]}},"required":["deploymentGroupId","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousReleaseId":{"type":"string","nullable":true,"description":"ID of the release that was previously live, if any"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentReleased"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release the platform was trying to deploy, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"phase":{"type":"string","enum":["preflights","provisioning","updating","deleting"],"description":"Phase of a deployment at which a failure occurred.\n\nDerived from the source deployment status: `preflights-failed` →\n`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →\n`Updating`, `delete-failed` → `Deleting`.\n`refresh-failed` is modelled separately via `DeploymentDegraded`."},"type":{"type":"string","enum":["DeploymentFailed"]}},"required":["deploymentId","error","phase","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"type":{"type":"string","enum":["DeploymentDegraded"]}},"required":["deploymentId","error","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentRecovered"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment that was deleted"},"type":{"type":"string","enum":["DeploymentDeleted"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release that the failed attempt was targeting, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"previousError":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"type":{"type":"string","enum":["DeploymentRetryRequested"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release being redeployed"},"type":{"type":"string","enum":["DeploymentRedeployRequested"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"pinnedReleaseId":{"type":"string","description":"ID of the release that is now pinned"},"previousPinnedReleaseId":{"type":"string","nullable":true,"description":"ID of the previously pinned release, if any"},"type":{"type":"string","enum":["DeploymentReleasePinned"]}},"required":["deploymentId","pinnedReleaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousPinnedReleaseId":{"type":"string","description":"ID of the release that was previously pinned"},"type":{"type":"string","enum":["DeploymentReleaseUnpinned"]}},"required":["deploymentId","previousPinnedReleaseId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"changedKeys":{"type":"array","items":{"type":"string"},"description":"Names of the environment variables that changed (added, removed, or modified)"},"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentEnvironmentUpdated"]}},"required":["changedKeys","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentDeletionRequested"]}},"required":["deploymentId","type"]}]},"state":{"oneOf":[{"type":"object","properties":{"failed":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]}},"description":"Event failed with an error"}},"required":["failed"]},{"type":"string","enum":["none"]},{"type":"string","enum":["started"]},{"type":"string","enum":["success"]}],"description":"Represents the state of an event"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","data","state","projectId","createdAt","workspaceId"]},"GenerateManagerTokenResponse":{"type":"object","properties":{"accessToken":{"type":"string","description":"Platform JWT for authenticating with the manager"},"expiresIn":{"type":"number","nullable":true,"description":"Token lifetime in seconds"},"tokenType":{"type":"string","enum":["Bearer"]},"managerUrl":{"type":"string","description":"Manager URL for direct access"},"databaseId":{"type":"string","nullable":true,"description":"Log database ID (null if logs not configured)"},"controlPlaneUrl":{"type":"string","nullable":true,"description":"Log control plane URL (null if logs not configured)"}},"required":["accessToken","expiresIn","tokenType","managerUrl","databaseId","controlPlaneUrl"]},"GenerateManagerTokenRequest":{"type":"object","properties":{"project":{"type":"string","minLength":1,"maxLength":100,"description":"Project ID or name to scope token access to."}},"required":["project"],"additionalProperties":false},"GenerateManagerBindingTokenRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Exact deployment whose remote bindings may be resolved.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"GenerateManagerCommandTokenRequest":{"type":"object","properties":{"commandId":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Exact command whose encrypted payload may be read.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"}},"required":["commandId"],"additionalProperties":false},"ResolveManagerGcpOAuthProviderResponse":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId","clientSecret"]}]},"ResolveManagerGcpOAuthProviderRequest":{"type":"object","properties":{"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group bearer token whose project-level OAuth provider should be resolved."},"returnOrigin":{"type":"string","format":"uri","description":"Browser origin that will receive the Google OAuth callback result. Must be a first-party dashboard origin or the active portal origin for the deployment group's project."}},"required":["deploymentGroupToken"]},"ManagerHeartbeatResponse":{"type":"object","properties":{"acknowledged":{"type":"boolean"},"timestamp":{"type":"string"}},"required":["acknowledged","timestamp"]},"ManagerHeartbeatRequest":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Current health status"},"version":{"type":"string","description":"Manager version"},"url":{"type":"string","format":"uri","description":"Manager public URL (for accessing DeepStore endpoints)"},"managementConfigs":{"allOf":[{"$ref":"#/components/schemas/ManagerManagementConfigs"},{"description":"Per-platform management configurations for cross-account access"}]},"metrics":{"type":"object","properties":{"activeDeployments":{"type":"number"},"pendingDeployments":{"type":"number"},"memoryUsageMb":{"type":"number"},"cpuUsagePercent":{"type":"number"}},"description":"Optional runtime metrics"}},"required":["status","url","managementConfigs"]},"ManagerDeployment":{"type":"object","properties":{"platform":{"type":"string","description":"Platform of the internal deployment"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status of the internal deployment"},"deploymentId":{"type":"string","description":"Internal deployment ID"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Currently deployed private manager release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Target private manager release for an in-progress update","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"error":{"nullable":true,"description":"Latest provision / upgrade / delete error"},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type"},"status":{"type":"string","description":"Resource status"},"outputs":{"type":"object","additionalProperties":{"nullable":true},"description":"Resource outputs"}},"required":["type","status"]},"description":"Simplified stack state resources"},"environmentInfo":{"nullable":true,"description":"Manager environment info"}},"required":["platform","status","deploymentId","resources"]},"PrepareOperatorManifestPackageResponse":{"type":"object","properties":{"package":{"$ref":"#/components/schemas/Package"}},"required":["package"]},"PrepareOperatorManifestPackageRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}},"required":["project"],"additionalProperties":false},"RenderOperatorManifestResponse":{"type":"object","properties":{"manifest":{"type":"string","description":"Rendered multi-document Kubernetes manifest"},"applyCommand":{"type":"string","description":"kubectl command for applying the manifest from a file"},"filename":{"type":"string","description":"Suggested local filename"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL embedded in the manifest"},"imagePending":{"type":"boolean","description":"True when the operator image is still building. The manifest contains a placeholder image () and must not be applied yet — re-render once the operator-image package is ready to get the real image."}},"required":["manifest","applyCommand","filename","managerUrl","imagePending"]},"RenderOperatorManifestRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"format":{"type":"string","enum":["raw","helm"],"default":"raw","description":"raw: a kubectl-applyable manifest for one cluster. helm: a paste-into-your-chart template whose namespace and environment name come from Helm at install time."},"environmentName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Per-environment identity. Required for raw output, ignored for helm.","example":"my-app"},"namespace":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$","description":"Namespace to observe and install into. Omit for helm to use the release namespace."},"scope":{"type":"string","enum":["namespace","cluster"],"default":"namespace","description":"namespace: a namespaced Role that manages the install namespace. cluster: a ClusterRole that manages every namespace."},"labelSelector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional Kubernetes label selector narrowing what is managed, applied within the scope."},"permission":{"type":"string","enum":["observe"],"default":"observe","description":"Operator permission tier"},"operatorImagePackageId":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Ready operator-image package to use for the Operator image. If omitted, the latest ready operator-image package for the project is used.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group token embedded in the operator Secret"},"logCollector":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"description":"Enable the node log collector DaemonSet for raw pod logs."}},"required":["project","deploymentGroupToken"],"additionalProperties":false},"APIKey":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["id","email","image"],"description":"User information associated with the API key"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig","createdByUser"],"description":"API key information"},"APIKeyDeploymentSetupConfig":{"type":"object","nullable":true,"properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDeploymentSetupEnvironmentVariable"}}},"required":["metadata","policy","environmentVariables"]},"APIKeyDeploymentSetupEnvironmentVariable":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]},"CreateAPIKeyResponse":{"type":"object","properties":{"apiKey":{"type":"string","description":"The generated API key value (only shown once)"},"keyInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig"]}},"required":["apiKey","keyInfo"],"description":"Response containing the new API key and its metadata"},"CreateAPIKeyRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"scope":{"$ref":"#/components/schemas/Scope"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"required":["description","scope","expiresAt"],"description":"Request schema for creating a new API key"},"Scope":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceScope"},{"$ref":"#/components/schemas/ProjectScope"},{"$ref":"#/components/schemas/DeploymentScope"},{"$ref":"#/components/schemas/DeploymentGroupScope"},{"$ref":"#/components/schemas/ManagerScope"}],"discriminator":{"propertyName":"type","mapping":{"workspace":"#/components/schemas/WorkspaceScope","project":"#/components/schemas/ProjectScope","deployment":"#/components/schemas/DeploymentScope","deployment-group":"#/components/schemas/DeploymentGroupScope","manager":"#/components/schemas/ManagerScope"}},"description":"Scope and role configuration for service accounts"},"WorkspaceScope":{"type":"object","properties":{"type":{"type":"string","enum":["workspace"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["type","role"],"description":"Workspace-scoped configuration"},"ProjectScope":{"type":"object","properties":{"type":{"type":"string","enum":["project"]},"projectId":{"type":"string","description":"ID of the project this is scoped to"},"role":{"$ref":"#/components/schemas/ProjectRole"}},"required":["type","projectId","role"],"description":"Project-scoped configuration"},"DeploymentScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"deploymentId":{"type":"string","description":"ID of the deployment this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"},"role":{"$ref":"#/components/schemas/DeploymentRole"}},"required":["type","deploymentId","projectId","role"],"description":"Deployment-scoped configuration"},"DeploymentGroupScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"]},"deploymentGroupId":{"type":"string","description":"ID of the deployment group this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"},"role":{"$ref":"#/components/schemas/DeploymentGroupRole"}},"required":["type","deploymentGroupId","projectId","role"],"description":"Deployment group-scoped configuration"},"ManagerScope":{"type":"object","properties":{"type":{"type":"string","enum":["manager"]},"managerId":{"type":"string","description":"ID of the manager this is scoped to"},"role":{"$ref":"#/components/schemas/ManagerRole"}},"required":["type","managerId","role"],"description":"Manager-scoped configuration"},"UpdateAPIKeyRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"deploymentSetupConfig":{"$ref":"#/components/schemas/UpdateDeploymentSetupPolicy"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"description":"Request schema for updating an API key"},"UpdateDeploymentSetupPolicy":{"type":"object","properties":{"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"}},"required":["policy"],"description":"Editable part of a deployment link's setup config. Locked env vars and input values are preserved."},"DeleteAPIKeysRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"minItems":1}},"required":["ids"]},"DomainWithUsage":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DomainEndpoint"}},"usage":{"type":"object","properties":{"deploymentUrlProjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"portalBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true},"hostname":{"type":"string"}},"required":["id","projectId","projectName","hostname"]}},"packageDomains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]}},"managerBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"managerId":{"type":"string"},"managerName":{"type":"string"},"hostname":{"type":"string"}},"required":["id","managerId","managerName","hostname"]}}},"required":["deploymentUrlProjects","portalBindings","packageDomains","managerBindings"]}},"required":["endpoints","usage"]}]},"Domain":{"type":"object","properties":{"id":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domain":{"type":"string"},"isSystem":{"type":"boolean"},"claimToken":{"type":"string"},"hostedZoneId":{"type":"string","nullable":true},"nameServers":{"type":"array","nullable":true,"items":{"type":"string"}},"status":{"type":"string","enum":["pending-zone-creation","pending-verification","verified","lost-verification","failed","deleting"]},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"verifiedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","workspaceId","domain","isSystem","claimToken","status","createdAt","updatedAt"]},"EventListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"releaseCreatedAt":{"type":"string","format":"date-time","description":"createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used"}}}]},"ListMachinesJoinTokensResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"}}},"required":["tokens"]},"MachinesJoinTokenSummary":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"maxJoins":{"type":"integer","nullable":true},"joinCount":{"type":"integer"},"lastUsedAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true}},"required":["id","createdAt","createdBy","joinCount"]},"CreateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RotateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RevokeMachinesJoinTokenResponse":{"type":"object","properties":{"tokenId":{"type":"string"},"revoked":{"type":"boolean"}},"required":["tokenId","revoked"]},"ListMachinesInventoryResponse":{"type":"object","properties":{"machines":{"type":"array","items":{"$ref":"#/components/schemas/MachinesInventoryItem"}}},"required":["machines"]},"MachinesInventoryItem":{"type":"object","properties":{"machineId":{"type":"string"},"status":{"type":"string"},"capacityGroup":{"type":"string"},"zone":{"type":"string"},"cpu":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"memory":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"storage":{"allOf":[{"$ref":"#/components/schemas/MachinesCapacityMetric"}],"nullable":true},"drainBlockers":{"type":"array","items":{"$ref":"#/components/schemas/MachinesDrainBlocker"}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"overlayIp":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"horizondVersion":{"type":"string","nullable":true},"localOverrides":{"type":"array","items":{"$ref":"#/components/schemas/MachinesLocalOverrideObservation"}},"localOverridesObservedAt":{"type":"string","nullable":true},"replicaCount":{"type":"integer"}},"required":["machineId","status","capacityGroup","zone","cpu","memory","drainBlockers","drainForce","lastHeartbeat","localOverrides","replicaCount"]},"MachinesCapacityMetric":{"type":"object","properties":{"allocated":{"type":"number"},"systemReserve":{"type":"number"},"total":{"type":"number"}},"required":["allocated","systemReserve","total"]},"MachinesDrainBlocker":{"type":"object","properties":{"reason":{"type":"string"},"workloadId":{"type":"string","nullable":true},"workloadName":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true},"schedulingMode":{"type":"string","nullable":true},"state":{"type":"string","nullable":true}},"required":["reason"]},"MachinesLocalOverrideObservation":{"type":"object","properties":{"activeDigest":{"type":"string","nullable":true},"actor":{"type":"string","nullable":true},"baseAssignmentHash":{"type":"string"},"baseDigest":{"type":"string","nullable":true},"candidateDigest":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"failureCategory":{"type":"string","nullable":true},"fallbackDigest":{"type":"string","nullable":true},"forcedStop":{"type":"boolean","nullable":true},"healthySince":{"type":"string","nullable":true},"incidentId":{"type":"string","nullable":true},"lifecycle":{"type":"string"},"phaseStartedAt":{"type":"string","nullable":true},"replicaId":{"type":"string"},"workloadName":{"type":"string"}},"required":["baseAssignmentHash","lifecycle","replicaId","workloadName"]},"CancelMachinesMachineDrainResponse":{"type":"object","properties":{"machineId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["machineId","cancelled"]},"DrainMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"requested":{"type":"boolean"}},"required":["machineId","requested"]},"DrainMachinesMachineRequest":{"type":"object","properties":{"deadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"force":{"type":"boolean"}}},"RemoveMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"removed":{"type":"boolean"}},"required":["machineId","removed"]},"CommandListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Command"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/CommandDeploymentInfo"},"project":{"$ref":"#/components/schemas/CommandProjectInfo"}}}]},"CommandDeploymentInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"$ref":"#/components/schemas/CommandDeploymentGroupInfo"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"managerId":{"type":"string","description":"Manager ID for obtaining access tokens"},"managerUrl":{"type":"string","nullable":true,"format":"uri","description":"URL of the manager for direct payload access"},"managerName":{"type":"string","nullable":true,"description":"Human-readable name of the manager"},"managerIsSystem":{"type":"boolean","nullable":true,"description":"Whether the manager is Alien-hosted (system)"}},"required":["id","name","managerId"]},"CommandDeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CommandProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string"}},"required":["id","name"]},"Command":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","description":"Command name (e.g., 'analyze-repository', 'sync-data')"},"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Command states in the Commands protocol lifecycle"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Delivery mode for this command (push/pull), derived from the target at creation time"},"target":{"type":"object","nullable":true,"properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to; null on commands created before target routing"},"attempt":{"type":"number","nullable":true,"description":"Current attempt number"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","nullable":true,"description":"Size of command params in bytes"},"responseSizeBytes":{"type":"number","nullable":true,"description":"Size of command response in bytes"},"createdAt":{"type":"string","format":"date-time","description":"When the command was created"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command was dispatched to the deployment"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command completed"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if command failed"},"result":{"nullable":true,"description":"Decoded command result when available"}},"required":["id","deploymentId","projectId","workspaceId","name","state","deploymentModel","target","attempt","deadline","requestSizeBytes","responseSizeBytes","createdAt","dispatchedAt","completedAt","error"]},"ListCommandNamesResponse":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ListCommandDeploymentsResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name"]}}},"required":["deployments"]},"CreateCommandResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"projectId":{"type":"string","description":"Project ID (for manager to use in routing)"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"How to dispatch the command"},"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to"},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How the command is delivered to its target"}},"required":["id","projectId","deploymentModel","target","deliveryMode"]},"CreateCommandRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Target deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Command name (e.g., 'analyze-repository')"},"params":{"nullable":true,"description":"Command parameters for public invocation"},"target":{"type":"string","maxLength":255,"description":"Resource id the command is addressed to. Required when the deployment has more than one command-capable resource."},"initialState":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Initial state (PENDING_UPLOAD if params require upload, PENDING if inline)"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Size of command params in bytes"}},"required":["deploymentId","name"]},"ResolvedCommandTarget":{"type":"object","properties":{"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Identifies the specific resource a command is addressed to."},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How a command is delivered to its target resource.\n\nThis is a Commands-protocol-specific concept and is intentionally distinct\nfrom `DeploymentModel` (see `stack_settings.rs`), which governs the\ninfrastructure-level push/pull wiring for a deployment. Serialized\nlowercase for consistency with `CommandTargetType`."}},"required":["target","deliveryMode"]},"UpdateCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"New command state"},"attempt":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Current attempt number"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command was dispatched"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}}},"DispatchCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"DispatchCommandRequest":{"type":"object","properties":{"dispatchedAt":{"type":"string","format":"date-time","description":"When the command was dispatched"}},"required":["dispatchedAt"]},"CompleteCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"CompleteCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["SUCCEEDED","FAILED","EXPIRED"],"description":"Terminal state to transition to"},"completedAt":{"type":"string","format":"date-time","description":"When the command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}},"required":["state","completedAt"]},"IncrementCommandAttemptResponse":{"type":"object","properties":{"attempt":{"type":"integer","description":"The attempt number after the increment"}},"required":["attempt"]},"DebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"DebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"owner":{"type":"string","nullable":true,"maxLength":320},"state":{"$ref":"#/components/schemas/DebugSessionState"},"mode":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"provider":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"presignedUrls":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DebugPackagePresignedURLs"}},"error":{"$ref":"#/components/schemas/DebugSessionPublicError"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deployment":{"$ref":"#/components/schemas/DebugSessionDeployment"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","state","mode","presignedUrls","createdAt","expiresAt","deploymentId","deployment","projectId","workspaceId"]},"DebugSessionState":{"type":"string","enum":["pending","running","stopping","stopped","expired","failed"]},"DebugPackagePresignedURLs":{"type":"object","properties":{"readUrl":{"type":"string","maxLength":2048,"format":"uri"},"writeUrl":{"type":"string","maxLength":2048,"format":"uri"}},"required":["readUrl","writeUrl"]},"DebugSessionPublicError":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128},"context":{"$ref":"#/components/schemas/DebugSessionPublicErrorContext"},"hint":{"type":"string","nullable":true},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599},"internal":{"type":"boolean","enum":[false]},"message":{"type":"string","maxLength":16384},"retryable":{"type":"boolean"},"source":{"$ref":"#/components/schemas/DebugSessionPublicErrorCause"}},"required":["code","internal","message","retryable"]},"DebugSessionPublicErrorContext":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]}}]},"DebugSessionPublicErrorCause":{"type":"object","properties":{"code":{"type":"string","maxLength":128},"context":{"$ref":"#/components/schemas/DebugSessionPublicErrorContext"},"hint":{"type":"string","nullable":true},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599},"internal":{"type":"boolean","enum":[false]},"message":{"type":"string","maxLength":16384},"retryable":{"type":"boolean"}},"required":["code","internal","message","retryable"]},"DebugSessionDeployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"}},"required":["id","name"]},"platform":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"}},"required":["id","name"]},"ManagerActiveDebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ManagerActiveDebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"ManagerActiveDebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"state":{"$ref":"#/components/schemas/DebugSessionState"},"expiresAt":{"type":"string","format":"date-time"},"backendTargetId":{"type":"string","nullable":true,"maxLength":512}},"required":["id","deploymentId","state","expiresAt"]},"CreateDebugSessionRequest":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Override the generated id. Manager passes the registry session id so logs correlate.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"owner":{"type":"string","minLength":1,"maxLength":320,"description":"Original actor label attested by the assigned manager."},"expiresAt":{"type":"string","format":"date-time"},"backendTargetId":{"type":"string","minLength":1,"maxLength":512,"description":"Provider-owned target used for exact restart reconciliation."}},"required":["deploymentId","owner","expiresAt"]},"UpdateDebugSessionRequest":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/DebugSessionState"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."}}},"DeploymentInfo":{"type":"object","properties":{"tokenType":{"type":"string","enum":["deployment","deployment-group"],"description":"Type of token used to authenticate this request"},"deployment":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"required":["name","platform"],"description":"Deployment details (present when using a deployment-scoped token)"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"pinnedSubdomain":{"type":"string","nullable":true}},"required":["id","name","pinnedSubdomain"],"description":"Deployment group details (present when using a deployment-group token)"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatarUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name"]},"project":{"type":"object","properties":{"name":{"type":"string"},"portal":{"type":"object","properties":{"appearance":{"$ref":"#/components/schemas/DeploymentPortalAppearance"}},"required":["appearance"]},"stackSummary":{"type":"object","nullable":true,"properties":{"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms supported by the active release"},"requiresNetwork":{"type":"boolean","description":"Whether the stack contains resources that require cloud VPC networking"},"resourceCounts":{"type":"object","properties":{"workers":{"type":"integer","minimum":0},"containers":{"type":"integer","minimum":0},"publicHttpsEndpoints":{"type":"integer","minimum":0,"description":"Resources that declare managed public HTTPS endpoint setup"},"externalInfra":{"type":"integer","minimum":0,"description":"Storage, queue, KV, vault, database, or cache resources that Kubernetes needs Terraform to provision"},"total":{"type":"integer","minimum":0}},"required":["workers","containers","publicHttpsEndpoints","externalInfra","total"]},"publicEndpoints":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"endpointName":{"type":"string"},"hostLabel":{"type":"string"},"wildcardSubdomains":{"type":"boolean"}},"required":["resourceId","endpointName","hostLabel","wildcardSubdomains"]},"description":"Public endpoints declared by the active release stack"}},"required":["platforms","requiresNetwork","resourceCounts","publicEndpoints"]},"generatedDomain":{"type":"object","nullable":true,"properties":{"domain":{"type":"string"},"isSystem":{"type":"boolean"}},"required":["domain","isSystem"],"description":"Parent domain for generated deployment URLs. Chosen public subdomains are only allowed when isSystem is false."}},"required":["name","portal"]},"packages":{"type":"object","properties":{"ready":{"type":"boolean","description":"True if all enabled packages are ready for deployment"},"cli":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"commandName":{"type":"string","description":"CLI command name to use in install instructions"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},"error":{"nullable":true},"installScripts":{"type":"object","properties":{"windows":{"type":"string","format":"uri"},"mac":{"type":"string","format":"uri"},"linux":{"type":"string","format":"uri"}},"required":["windows","mac","linux"],"description":"Install script URLs for each OS"}},"required":["status","commandName","installScripts"]},"cloudformation":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},"error":{"nullable":true},"mode":{"type":"string","enum":["auto","outputs"]},"launchUrl":{"type":"string","format":"uri","description":"CloudFormation launch URL"},"outputsSchema":{"nullable":true}},"required":["status","mode","launchUrl"]},"terraform":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},"error":{"nullable":true},"providerSource":{"type":"string","description":"Terraform provider source (without https://)"},"moduleSources":{"type":"object","additionalProperties":{"type":"string"},"description":"Terraform module sources by target"},"moduleVersion":{"type":"string"},"managerUrls":{"type":"object","additionalProperties":{"type":"string"},"description":"Manager URLs by Terraform target"}},"required":["status","providerSource","moduleSources","managerUrls"]},"helm":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},"error":{"nullable":true},"chartRef":{"type":"string","description":"OCI chart reference"},"managerFetchExample":{"type":"string"},"localImportExample":{"type":"string"}},"required":["status","chartRef"]}},"required":["ready"]},"installContext":{"type":"object","properties":{"targets":{"type":"object","additionalProperties":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managerUrl":{"type":"string","format":"uri"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"awsManagingAccountId":{"type":"string"}},"required":["platform","managerUrl"]},"description":"Deployment-session install context by Terraform/installer target"}},"required":["targets"]},"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"},"setupConfig":{"$ref":"#/components/schemas/DeploymentInfoSetupConfig"},"readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ready","notReady","unknown"]},"checks":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["passed","failed","warning","unknown"]},"message":{"type":"string"},"checkedAt":{"type":"string"}},"required":["code","status","message","checkedAt"]}}},"required":["status","checks"]}},"required":["tokenType","workspace","project","packages","installContext","supportedRegions"]},"DeploymentPortalAppearance":{"type":"object","properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}}},"SupportedCloudRegions":{"type":"object","properties":{"aws":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by this Alien environment."},"gcp":{"type":"array","items":{"type":"string"},"description":"GCP regions supported by this Alien environment."},"azure":{"type":"array","items":{"type":"string"},"description":"Azure locations supported by this Alien environment."}},"required":["aws","gcp","azure"]},"DeploymentInfoSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]}},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"inputValues":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedStackInputSummary"}}},"required":["metadata","policy","environmentVariables"]},"ResolvedStackInputSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"]}},"required":{"type":"boolean"},"secret":{"type":"boolean"},"provided":{"type":"boolean"}},"required":["id","label","providedBy","required","secret","provided"]},"DeploymentComputePlan":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"poolId":{"type":"string"},"workloads":{"type":"array","items":{"type":"string"}},"requirements":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"scale":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"machines":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","machines"]},{"type":"object","properties":{"type":{"type":"string","enum":["autoscale"]},"min":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]},"max":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","min","max"]}]},"selected":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"recommended":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"machines":{"type":"array","items":{"type":"object","properties":{"machine":{"type":"string"},"profile":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"recommended":{"type":"boolean"}},"required":["machine","profile","recommended"]}},"errors":{"type":"array","items":{"type":"string"}}},"required":["poolId","workloads","requirements","scale","selected","recommended","machines"]}}},"required":["pools"]},"PreparedDeploymentStack":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"setup":{"$ref":"#/components/schemas/SetupFingerprintInfo"}},"required":["platform","stack","setup"]},"SlackInstallUrlResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"SlackIntegrationStatus":{"type":"object","properties":{"connected":{"type":"boolean"},"slackTeamId":{"type":"string","nullable":true},"slackTeamName":{"type":"string","nullable":true},"installedByUserId":{"type":"string","nullable":true},"installedAt":{"type":"string","nullable":true},"notificationChannelId":{"type":"string","nullable":true}},"required":["connected","slackTeamId","slackTeamName","installedByUserId","installedAt","notificationChannelId"]},"SlackChannelsResponse":{"type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}}},"required":["channels"]},"SlackChannel":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isMember":{"type":"boolean"}},"required":["id","name","isMember"]},"SlackNotificationChannelResponse":{"type":"object","properties":{"notificationChannelId":{"type":"string","nullable":true},"warning":{"type":"string","nullable":true}},"required":["notificationChannelId","warning"]},"SlackNotificationChannelRequest":{"type":"object","properties":{"channelId":{"type":"string","nullable":true}},"required":["channelId"]},"AgentSessionListResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionListItem"}}},"required":["sessions"]},"AgentSessionListItem":{"type":"object","properties":{"id":{"type":"string"},"triggerType":{"type":"string"},"subjectId":{"type":"string"},"subject":{"$ref":"#/components/schemas/AgentSessionSubject"},"status":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","triggerType","subjectId","subject","status","createdAt","updatedAt"]},"AgentSessionSubject":{"type":"object","properties":{"deploymentName":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"releaseId":{"type":"string","nullable":true},"releaseCommitMessage":{"type":"string","nullable":true},"releaseCommitRef":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true}},"required":["deploymentName","deploymentGroupId","deploymentGroupName","releaseId","releaseCommitMessage","releaseCommitRef","projectId","projectName"]},"AgentSessionDetail":{"allOf":[{"$ref":"#/components/schemas/AgentSessionListItem"},{"type":"object","properties":{"resultText":{"type":"string","nullable":true},"toolNames":{"type":"array","nullable":true,"items":{"type":"string"}},"error":{"type":"string","nullable":true},"pendingApproval":{"type":"object","nullable":true,"properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["resultText","toolNames","error","pendingApproval"]}]},"AgentSessionEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionEvent"}},"latestSeq":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["events","latestSeq","hasMore"]},"AgentSessionEvent":{"oneOf":[{"$ref":"#/components/schemas/AgentSessionStatusEvent"},{"$ref":"#/components/schemas/AgentSessionStepEvent"},{"$ref":"#/components/schemas/AgentSessionToolCallEvent"},{"$ref":"#/components/schemas/AgentSessionToolResultEvent"},{"$ref":"#/components/schemas/AgentSessionMarkdownEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalRequestedEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalGrantedEvent"},{"$ref":"#/components/schemas/AgentSessionRestartedEvent"},{"$ref":"#/components/schemas/AgentSessionEventsTruncatedEvent"}],"discriminator":{"propertyName":"type","mapping":{"status":"#/components/schemas/AgentSessionStatusEvent","step":"#/components/schemas/AgentSessionStepEvent","tool_call":"#/components/schemas/AgentSessionToolCallEvent","tool_result":"#/components/schemas/AgentSessionToolResultEvent","markdown":"#/components/schemas/AgentSessionMarkdownEvent","approval_requested":"#/components/schemas/AgentSessionApprovalRequestedEvent","approval_granted":"#/components/schemas/AgentSessionApprovalGrantedEvent","session_restarted":"#/components/schemas/AgentSessionRestartedEvent","events_truncated":"#/components/schemas/AgentSessionEventsTruncatedEvent"}}},"AgentSessionStatusEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["status"]},"payload":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionStepEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["step"]},"payload":{"type":"object","properties":{"stepId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["in_progress","complete","error"]}},"required":["stepId","title","status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolCallEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolResultEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_result"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string","nullable":true},"toolName":{"type":"string","nullable":true},"ok":{"type":"boolean"},"output":{"nullable":true}},"required":["toolCallId","toolName","ok"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionMarkdownEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["markdown"]},"payload":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalRequestedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_requested"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalGrantedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_granted"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"approvedByUserId":{"type":"string"},"approvedByName":{"type":"string","nullable":true},"source":{"type":"string","enum":["dashboard","slack"]}},"required":["approvalId","approvedByUserId","approvedByName","source"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionRestartedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["session_restarted"]},"payload":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionEventsTruncatedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["events_truncated"]},"payload":{"type":"object","properties":{"limit":{"type":"number"}},"required":["limit"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApproveResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"resumed":{"type":"boolean"}},"required":["jobId","status","resumed"]},"AgentSessionStopResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"canceled":{"type":"boolean"}},"required":["jobId","status","canceled"]},"SyncListResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"userEnvironmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"deploymentToken":{"type":"string","nullable":true},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId","userEnvironmentVariables"]}}},"required":["deployments"],"description":"Full deployment records for manager operation"},"SyncListRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. Manager-scoped tokens are always constrained to their own manager ID."}]},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to include"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment status"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by deployment platform"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Filter by deployment group ID","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum records to return"}},"additionalProperties":false,"description":"Request to list full operational deployments"},"SyncAcquireResponseDeployment":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Deployment group ID the deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method recorded on the deployment when it has a setup-owned path."}]},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state (includes releases)"},"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration"}},"required":["deploymentId","projectId","deploymentGroupId","current","config"]},"SyncContextRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the context. Manager-scoped tokens are constrained to their own manager ID."}]},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"SyncAcquireResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"},"description":"List of acquired deployments with deployment context"},"failures":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment that failed","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"error":{"allOf":[{"$ref":"#/components/schemas/APIError"},{"description":"Error that occurred during context building"}]}},"required":["deploymentId","projectId","error"]},"description":"List of deployments that failed during context building (locks already released)"}},"required":["deployments","failures"],"description":"Acquired deployments and failures"},"SyncAcquireRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. If omitted, resolved from each deployment's managerId column."}]},"session":{"type":"string","description":"Unique session identifier for lock tracking"},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to lock (for Pull model sync)"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment statuses (default: all deployment statuses)"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by platforms (default: all platforms the Manager supports)"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Filter by setup method for setup-owned acquisition paths"}]},"acquireMode":{"type":"string","enum":["runtime","setup-run","setup-teardown"],"description":"Phase ownership mode for deployment acquisition"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model from stackSettings.deploymentModel."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of deployments to acquire (default: 10)"}},"required":["session","deploymentModel"],"additionalProperties":false,"description":"Request to acquire deployments for processing"},"SyncReconcileResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the state was reconciled"},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state after reconciliation"},"target":{"type":"object","properties":{"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration\n\nConfiguration for how to perform the deployment.\nNote: Credentials (ClientConfig) are passed separately to step() function."},"releaseInfo":{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."}},"required":["config","releaseInfo"],"description":"Target deployment if update is needed"}},"required":["success","current"],"description":"State reconciliation result with optional target"},"SyncReconcileRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to reconcile state for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Lock session (push model only) - verifies lock ownership"},"state":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Complete deployment state after step() execution"},"updateHeartbeat":{"type":"boolean","description":"Update heartbeat timestamp (for successful health checks)"},"suggestedDelayMs":{"type":"integer","minimum":0,"description":"Delay before this deployment should be acquired again."},"resourceHeartbeats":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"description":"Latest typed resource heartbeats collected during this step."},"observedInventoryBatches":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"],"description":"Backend whose observer produced this snapshot."},"complete":{"type":"boolean","description":"Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`."},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inventoryScope":{"type":"string","description":"Stable scope for the provider list operation that produced this batch."},"observedAt":{"type":"string","format":"date-time","description":"Time the inventory scope was observed."},"resources":{"type":"array","items":{"type":"object","properties":{"alienResourceId":{"type":"string","nullable":true},"attributes":{"type":"object","properties":{},"additionalProperties":{"nullable":true}},"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"counts":{"oneOf":[{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},{"nullable":true}]},"deploymentId":{"type":"string","nullable":true},"displayName":{"type":"string"},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerKind":{"type":"string","description":"Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type."},"providerStale":{"type":"boolean"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"rawIdentity":{"type":"string","description":"Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc."},"region":{"type":"string","nullable":true},"resourceTypeHint":{"oneOf":[{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},{"nullable":true}]},"scope":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"description":"Release/version identity observed from the provider resource, when available."}},"required":["displayName","health","lifecycle","partial","providerKind","providerStale","rawIdentity"]}},"sourceKind":{"type":"string","description":"Writer/source for this inventory pass, such as `operator` or\n`manager-observer`."}},"required":["backend","complete","controllerPlatform","inventoryScope","observedAt","resources","sourceKind"]},"description":"Observed raw-resource inventory batches read during this step."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Operator-reported runtime capabilities."},"operatorVersion":{"type":"string","minLength":1,"maxLength":128,"description":"Operator binary version reported by the runtime."}},"required":["deploymentId","state"],"additionalProperties":false,"description":"Request to reconcile deployment state"},"SyncReleaseRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to release","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Session identifier to release"}},"required":["deploymentId","session"],"additionalProperties":false,"description":"Request to release deployment lock"},"ResolveResponse":{"type":"object","properties":{"managerId":{"type":"string","description":"Manager ID"},"managerName":{"type":"string","description":"Manager display name"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL"},"managerIsSystem":{"type":"boolean","description":"Whether the manager is Alien-hosted"},"managerCloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where the private manager is hosted. Null for Alien-hosted managers."},"projectId":{"type":"string","description":"Resolved project ID"},"installContext":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}},"required":["platform","managementConfig"],"description":"Target install context derived from platform-managed manager metadata. Present for cloud push platforms."}},"required":["managerId","managerName","managerUrl","managerIsSystem","projectId"]},"CloudRegionsResponse":{"type":"object","properties":{"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"}},"required":["supportedRegions"]},"BillingAuditLogRow":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"action":{"type":"string"},"payload":{"nullable":true},"createdAt":{"type":"string"}},"required":["id","workspaceId","action","createdAt"]},"WorkspaceBillingEntitlements":{"type":"object","properties":{"planId":{"$ref":"#/components/schemas/PlanId"},"planStatus":{"$ref":"#/components/schemas/BillingPlanStatus"},"features":{"$ref":"#/components/schemas/BillingFeatureFlags"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"syncedAt":{"type":"string","nullable":true,"format":"date-time"},"stale":{"type":"boolean"}},"required":["planId","planStatus","features","limits","syncedAt","stale"]},"PlanId":{"type":"string","enum":["starter","pro","pro_annual","enterprise"]},"BillingPlanStatus":{"type":"string","enum":["active","trialing","past_due","canceled","none"]},"BillingFeatureFlags":{"type":"object","properties":{"custom_domains":{"type":"boolean"},"private_managers":{"type":"boolean"},"sso_saml":{"type":"boolean"},"audit_logs":{"type":"boolean"},"airgapped":{"type":"boolean"}},"required":["custom_domains","private_managers","sso_saml","audit_logs","airgapped"]},"BillingLimits":{"type":"object","properties":{"maxDeployments":{"type":"number","nullable":true},"maxProjects":{"type":"number","nullable":true},"maxSeats":{"type":"number","nullable":true},"maxCustomDomains":{"type":"number","nullable":true},"creditUsd":{"type":"number","nullable":true},"seatsIncluded":{"type":"number","nullable":true}},"required":["maxDeployments","maxProjects","maxSeats","maxCustomDomains","creditUsd","seatsIncluded"]}},"parameters":{}},"paths":{"/v1/invitations/{token}":{"get":{"operationId":"getWorkspaceInvitationPreview","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationPreview"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/memberships":{"get":{"operationId":"listMemberships","description":"List all workspaces the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listMemberships","responses":{"200":{"description":"List of user's workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile":{"get":{"operationId":"getUserProfile","description":"Get the current user's profile and user-scoped onboarding state.","x-speakeasy-group":"user","x-speakeasy-name-override":"getProfile","responses":{"200":{"description":"User profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateUserProfile","description":"Update the current user's profile (display name).","x-speakeasy-group":"user","x-speakeasy-name-override":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"}}}}}},"responses":{"200":{"description":"Profile updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile/setup":{"post":{"operationId":"completeUserProfileSetup","description":"Complete the required beta intake and profile setup dialog.","x-speakeasy-group":"user","x-speakeasy-name-override":"completeProfileSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileSetupRequest"}}}},"responses":{"200":{"description":"Profile setup completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/workspaces":{"post":{"operationId":"createWorkspace","description":"Create a new workspace. The current user will be automatically added as an admin.","x-speakeasy-group":"user","x-speakeasy-name-override":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name"},"logoUrl":{"type":"string","format":"uri","description":"Optional workspace logo URL"}},"required":["name"]}}}},"responses":{"201":{"description":"Created workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Bad request - invalid workspace name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Workspace name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces":{"get":{"operationId":"listGitNamespaces","description":"List all git namespaces (GitHub installations) the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaces","parameters":[{"schema":{"type":"string","enum":["github"],"default":"github"},"required":false,"name":"provider","in":"query"}],"responses":{"200":{"description":"List of user's git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/sync":{"post":{"operationId":"syncGitNamespaces","description":"Sync git namespaces from the provider. For GitHub, this fetches all app installations accessible to the user.","x-speakeasy-group":"user","x-speakeasy-name-override":"syncGitNamespaces","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"description":"Git provider to sync"}},"required":["provider"]}}}},"responses":{"200":{"description":"Synced git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/{id}/repositories":{"get":{"operationId":"listGitNamespaceRepositories","description":"List repositories accessible through a git namespace (GitHub installation).","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaceRepositories","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","description":"Search query to filter repositories by name"},"required":false,"description":"Search query to filter repositories by name","name":"search","in":"query"}],"responses":{"200":{"description":"List of repositories.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitRepository"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Git namespace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/invitations/{token}/accept":{"post":{"operationId":"acceptWorkspaceInvitation","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptWorkspaceInvitationResponse"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","description":"Get the current authenticated principal (user or service account). Works with both session cookies and API keys.","x-speakeasy-group":"auth","x-speakeasy-name-override":"whoami","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","example":"my-workspace"},"required":false,"description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Current authenticated principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subject"}}}},"400":{"description":"Missing required workspace for user credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","description":"Retrieve all workspaces.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search workspaces by name"},"required":false,"description":"Search workspaces by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","description":"Retrieve a workspace by ID.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspace","description":"Update a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"}}}}}},"responses":{"200":{"description":"Workspace updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteWorkspace","description":"Delete a workspace. The workspace must have no projects.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Workspace deleted successfully."},"400":{"description":"Workspace still has projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listWorkspaceMembers","description":"List all members of a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"listMembers","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"List of workspace members.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"addWorkspaceMember","description":"Add a member to a workspace by email. The user must already have an account.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"addMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of the user to add"},"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"Role to assign"}]}},"required":["email","role"]}}}},"responses":{"201":{"description":"Member added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"404":{"description":"Workspace or user not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"User is already a member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMember","description":"Update a workspace member's role.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"New role to assign"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Member role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"400":{"description":"Cannot remove last admin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"removeWorkspaceMember","description":"Remove a member from a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"removeMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Member removed successfully."},"400":{"description":"Cannot remove last admin or self.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/dismiss-onboarding":{"post":{"operationId":"dismissWorkspaceOnboarding","description":"Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"dismissOnboarding","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace with onboardingDismissedAt populated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/settings":{"get":{"operationId":"getWorkspaceSettings","description":"Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"getSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspaceSettings","description":"Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}}},"responses":{"200":{"description":"Updated ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations":{"get":{"operationId":"listWorkspaceInvitations","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Pending invitations.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvitation"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["email","role"]}}}},"responses":{"201":{"description":"Invitation created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"403":{"description":"Seat limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}/resend":{"post":{"operationId":"resendWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Invitation email sent again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}":{"delete":{"operationId":"revokeWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invitation revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invite-link":{"get":{"operationId":"getWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Active invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"createWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["role"]}}}},"responses":{"200":{"description":"Invite link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invite link revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","description":"Retrieve all projects.","x-speakeasy-group":"projects","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search projects by name"},"required":false,"description":"Search projects by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deploymentCount","latestRelease"]},"description":"Optional fields to include: deploymentCount, latestRelease"},"required":false,"description":"Optional fields to include: deploymentCount, latestRelease","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved projects.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createProject","description":"Create a new project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name"]}}}},"responses":{"201":{"description":"Project created successfully.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"}}}]}}}},"400":{"description":"Invalid request or GitHub repository connection failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}":{"get":{"operationId":"getProject","description":"Retrieve a project by ID or name.","x-speakeasy-group":"projects","x-speakeasy-name-override":"get","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateProject","description":"Update a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"update","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProject"}}}},"responses":{"200":{"description":"Project updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteProject","description":"Delete a project. The project must have no deployments.","x-speakeasy-group":"projects","x-speakeasy-name-override":"delete","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Project deleted successfully."},"400":{"description":"Project still has deployments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/gcp-oauth-provider":{"get":{"operationId":"getProjectGcpOAuthProvider","description":"Retrieve redacted project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateProjectGcpOAuthProvider","description":"Update project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"updateGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGcpOAuthProvider"}}}},"responses":{"200":{"description":"Google Cloud OAuth provider settings updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"400":{"description":"Invalid provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-portal-domain":{"get":{"operationId":"getProjectDeploymentPortalDomain","description":"Get the deployment portal domain binding for a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentPortalDomain","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved deployment portal domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPortalDomainResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/import-template":{"post":{"operationId":"createProjectFromTemplate","description":"Create a project by forking alienplatform/alien into your namespace, then configuring GitHub Actions.","x-speakeasy-group":"projects","x-speakeasy-name-override":"createFromTemplate","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"targetNamespace":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-]+$","description":"GitHub owner namespace (user or organization) that will receive the fork"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name","targetNamespace","templatePath"]}}}},"responses":{"201":{"description":"Project created successfully from template.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"},"template":{"type":"object","properties":{"sourceRepository":{"type":"string","enum":["alienplatform/alien"]},"forkRepository":{"type":"string","description":"Fork repository in / format"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"resolvedRootDirectory":{"type":"string"}},"required":["sourceRepository","forkRepository","templatePath","resolvedRootDirectory"]}},"required":["template"]}]}}}},"400":{"description":"Bad request or GitHub integration not installed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Fork exists but is not ready yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/template-urls":{"get":{"operationId":"getProjectTemplateUrls","description":"Get template URLs for deploying setup stacks in this project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getTemplateUrls","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Template URLs retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"aws":{"type":"object","nullable":true,"properties":{"templateUrl":{"type":"string","format":"uri","description":"URL to download the CloudFormation template"},"launchStackUrl":{"type":"string","format":"uri","description":"URL to launch the template in the AWS CloudFormation console"}},"required":["templateUrl","launchStackUrl"],"description":"Template URLs for deploying an AWS setup stack"}}}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-link-setup":{"get":{"operationId":"getProjectDeploymentLinkSetup","description":"Get the active release stack and portal-visible setup availability for deployment-link configuration.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentLinkSetup","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment-link setup retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLinkSetupResponse"}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/active-release":{"get":{"operationId":"getProjectActiveRelease","description":"Get the active release for this project. Returns the latest release, or the pinned release if deploymentId is provided and that deployment has a pinned release.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getActiveRelease","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Optional deployment ID to check for pinned release"},"required":false,"description":"Optional deployment ID to check for pinned release","name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Active release retrieved successfully.","content":{"application/json":{"schema":{"nullable":true}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups":{"post":{"operationId":"createDeploymentGroup","tags":["deployment-groups"],"summary":"Create a new deployment group","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group with this name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listDeploymentGroups","tags":["deployment-groups"],"summary":"List deployment groups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of deployment groups","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"}}}]},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/by-name":{"put":{"operationId":"ensureDeploymentGroupByName","tags":["deployment-groups"],"summary":"Get or create a deployment group by project and name","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureDeploymentGroupByNameRequest"}}}},"responses":{"200":{"description":"Deployment group returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}":{"get":{"operationId":"getDeploymentGroup","tags":["deployment-groups"],"summary":"Get deployment group details","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"}],"responses":{"200":{"description":"Deployment group details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"deploymentCount":{"type":"integer","description":"Current number of deployments in this deployment group"}},"required":["deploymentCount"]}]}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentGroup","tags":["deployment-groups"],"summary":"Update deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDeploymentGroup","tags":["deployment-groups"],"summary":"Delete deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Deployment group deleted successfully"},"400":{"description":"Cannot delete deployment group that has deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/tokens":{"post":{"operationId":"createDeploymentGroupToken","tags":["deployment-groups"],"summary":"Create deployment group token","description":"Creates a deployment-group scoped API key and returns both the token and formatted deployment link","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenRequest"}}}},"responses":{"200":{"description":"Deployment group token created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenResponse"}}}},"400":{"description":"Deployment setup configuration is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/first-party-session":{"post":{"operationId":"createFirstPartyDeploymentSession","tags":["deployment-groups"],"summary":"Create first-party deployment session","description":"Mints a short-lived deployment-group token with the recommended self-deploy policy for the authenticated developer.","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"First-party deployment session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirstPartyDeploymentSessionResponse"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages":{"get":{"operationId":"listPackages","description":"List packages with optional filters. Returns packages ordered by creation date (newest first).","x-speakeasy-group":"packages","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Filter by package type"},"required":false,"description":"Filter by package type","name":"type","in":"query"},{"schema":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Filter by package status"},"required":false,"description":"Filter by package status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search packages by type or version"},"required":false,"description":"Search packages by type or version","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of packages.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}":{"get":{"operationId":"getPackage","description":"Get details of a specific package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/rebuild":{"post":{"operationId":"rebuildPackages","description":"Rebuild packages for a project. This will cancel any pending packages and create new ones with auto-incremented versions.","x-speakeasy-group":"packages","x-speakeasy-name-override":"rebuild","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to rebuild packages for"}},"required":["project"]}}}},"responses":{"200":{"description":"Packages rebuilt successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"packagesCreated":{"type":"integer","description":"Number of packages created"}},"required":["packagesCreated"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}/cancel":{"post":{"operationId":"cancelPackage","description":"Cancel a pending or building package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"cancel","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package canceled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Package cannot be canceled (not in pending or building status).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases":{"get":{"operationId":"listReleases","description":"Retrieve all releases.","x-speakeasy-group":"releases","x-speakeasy-name-override":"list","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search releases by commit message, branch, SHA, or release ID"},"required":false,"description":"Search releases by commit message, branch, SHA, or release ID","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by git branch (commitRef)"},"required":false,"description":"Filter by git branch (commitRef)","name":"branch","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by commit author login or name"},"required":false,"description":"Filter by commit author login or name","name":"author","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created after this date (ISO 8601)"},"required":false,"description":"Filter releases created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created before this date (ISO 8601)"},"required":false,"description":"Filter releases created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved releases.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createRelease","description":"Create a new release.","x-speakeasy-group":"releases","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseRequest"}}}},"responses":{"201":{"description":"Release created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/branches":{"get":{"operationId":"listReleaseBranches","description":"List distinct git branches across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listBranches","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search branches by name (case-insensitive contains)"},"required":false,"description":"Search branches by name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of branches to return"},"required":false,"description":"Maximum number of branches to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct branches.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/authors":{"get":{"operationId":"listReleaseAuthors","description":"List distinct commit authors across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listAuthors","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search authors by login or name (case-insensitive contains)"},"required":false,"description":"Search authors by login or name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of authors to return"},"required":false,"description":"Maximum number of authors to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct authors.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAuthorFilterItem"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/{id}":{"get":{"operationId":"getRelease","description":"Retrieve a release by ID.","x-speakeasy-group":"releases","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"required":true,"description":"Unique identifier for the release.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseListItemResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments":{"get":{"operationId":"listDeployments","description":"Retrieve all deployments.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"list","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Filter by exact deployment name. Must be used with deploymentGroup."},"required":false,"description":"Filter by exact deployment name. Must be used with deploymentGroup.","name":"name","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name, public subdomain, or deployment group name"},"required":false,"description":"Search deployments by name, public subdomain, or deployment group name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved deployments.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"400":{"description":"Invalid deployment list filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDeployment","description":"Create a new deployment. Deployment group tokens automatically use their group. Workspace/project tokens must provide deploymentGroupId.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeploymentRequest"}}}},"responses":{"200":{"description":"Existing deployment returned for idempotent deployment-group registration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"201":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"400":{"description":"Bad request - deployment group has reached max deployments limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Forbidden - insufficient permissions to create deployments in this context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project or deployment group not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/stats":{"get":{"operationId":"getDeploymentStats","description":"Get aggregated deployment statistics. Returns total count and breakdown by status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getStats","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name or deployment group name"},"required":false,"description":"Search deployments by name or deployment group name","name":"search","in":"query"}],"responses":{"200":{"description":"Deployment statistics retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStats"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-environments":{"get":{"operationId":"listDeploymentFilterEnvironments","description":"List distinct effective environments used by deployments. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterEnvironments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Distinct environments retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-deployment-groups":{"get":{"operationId":"listDeploymentFilterDeploymentGroups","description":"List deployment groups with deployment counts. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterDeploymentGroups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return"},"required":false,"description":"Maximum number of items to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Deployment groups for filter retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"deploymentCount":{"type":"number"},"runningCount":{"type":"number","description":"Number of deployments in 'running' status"},"failedCount":{"type":"number","description":"Number of deployments in a failed status"},"inProgressCount":{"type":"number","description":"Number of deployments in an in-progress status (provisioning, updating, etc.)"}},"required":["id","name","deploymentCount","runningCount","failedCount","inProgressCount"]}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeployment","description":"Retrieve a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetailResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/info":{"get":{"operationId":"getDeploymentConnectionInfo","description":"Get deployment connection information including command endpoint and resource URLs.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment connection information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentConnectionInfo"}}}},"400":{"description":"Deployment not ready (no manager assigned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/import":{"post":{"operationId":"importDeployment","description":"Import a deployment from resolved setup infrastructure such as CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"import","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDeploymentRequest"}}}},"responses":{"200":{"description":"Deployment import was idempotent and returned an existing deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"201":{"description":"Deployment imported and created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/first-party-inputs":{"put":{"operationId":"setFirstPartyDeploymentInputs","description":"Store operator-provided input values on a first-party deployment session token so CLI/local deploys apply them.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"setFirstPartyDeploymentInputs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Input values stored on the session token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsResponse"}}}},"400":{"description":"A deployment-group token scope is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"The token is not a first-party deployment session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to store input values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations":{"post":{"operationId":"createSetupRegistrationOperation","description":"Start a durable setup registration operation for CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createSetupRegistrationOperation","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupRegistrationOperationRequest"}}}},"responses":{"202":{"description":"Setup registration operation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"400":{"description":"Invalid setup registration operation request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed before callback acceptance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations/{id}":{"get":{"operationId":"getSetupRegistrationOperation","description":"Get setup registration operation status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getSetupRegistrationOperation","parameters":[{"schema":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"required":true,"description":"Unique identifier for the setup registration operation.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Setup registration operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"404":{"description":"Setup registration operation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/delete":{"post":{"operationId":"deleteDeployment","description":"Delete, detach, or forget a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentRequest"}}}},"responses":{"202":{"description":"Deployment deletion request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentResponse"}}}},"400":{"description":"Cannot delete the deployment in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"redeployDeployment","description":"Redeploy a running deployment with the same release and fresh environment variables. Sets status to update-pending.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"redeploy","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment redeployment triggered successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot redeploy - deployment must be running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/pin-release":{"post":{"operationId":"pinDeploymentRelease","description":"Pin or unpin a running or runtime-failed deployment. Running deployments start an update; failed deployments retry toward the selected release.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"pinRelease","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinReleaseRequest"}}}},"responses":{"202":{"description":"Release pin updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot pin release from the deployment's current lifecycle state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/retry":{"post":{"operationId":"retryDeployment","description":"Retry a failed deployment operation. Uses alien-infra's retry mechanisms to resume from exact failure point.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"retry","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment retry enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Deployment is not in a failed state that can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/inputs":{"get":{"operationId":"getDeploymentInputs","description":"Get the active input definitions and current non-secret values for a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment inputs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInputsResponse"}}}},"403":{"description":"Insufficient permission to read deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentInputs","description":"Update runtime stack inputs, rebuild their environment-variable mappings, and request a deployment update when runtime configuration changes.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Deployment inputs saved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsResponse"}}}},"400":{"description":"Input values are invalid for the deployment release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, project, or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/environment-variables":{"patch":{"operationId":"updateDeploymentEnvironmentVariables","description":"Update a deployment's environment variables. If the deployment is running and not locked, the status will be changed to update-pending to trigger a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateEnvironmentVariables","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentEnvironmentVariablesRequest"}}}},"responses":{"202":{"description":"Environment variables updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Environment variables are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update environment variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/token":{"post":{"operationId":"createDeploymentToken","description":"Create a deployment token (deployment-scoped API key). The deployment must exist before creating a token.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenRequest"}}}},"responses":{"201":{"description":"Deployment token created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers":{"post":{"operationId":"createManager","description":"Create a new manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewManagerRequest"}}}},"responses":{"201":{"description":"Manager created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Invalid private manager setup method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"A manager for this target already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listManagers","description":"Retrieve all managers.","x-speakeasy-group":"managers","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search managers by name"},"required":false,"description":"Search managers by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of managers to return"},"required":false,"description":"Maximum number of managers to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved managers.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manager"}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/setup-token":{"post":{"operationId":"retryManagerSetup","description":"Revoke previous private-manager setup tokens and issue a fresh setup token/config.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retrySetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"201":{"description":"Fresh manager setup token generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Manager setup cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or setup config not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/retry":{"post":{"operationId":"retryManager","description":"Retry private-manager setup. Returns a fresh setup action before the internal deployment exists, or requests retry for the internal deployment after it exists.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retry","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager retry handled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerRetryResponse"}}}},"400":{"description":"Manager cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or internal deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/cancel-setup":{"post":{"operationId":"cancelManagerSetup","description":"Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record.","x-speakeasy-group":"managers","x-speakeasy-name-override":"cancelSetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager setup canceled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Manager setup cannot be canceled in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}":{"get":{"operationId":"getManager","description":"Retrieve a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"get","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manager"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteManager","description":"Delete a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"delete","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager deletion enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot delete the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Internal deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/domain-binding":{"get":{"operationId":"getManagerDomainBinding","description":"Get the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager domain binding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateManagerDomainBinding","description":"Create, update, or remove the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"updateDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerDomainBinding"}}}},"responses":{"200":{"description":"Manager domain binding updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"400":{"description":"Invalid domain binding request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or domain not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/management-config":{"get":{"operationId":"getManagerManagementConfig","description":"Get the management configuration for a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getManagementConfig","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":true,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Management config retrieved successfully.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/provision":{"post":{"operationId":"provisionManager","description":"Enqueue provisioning for a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"provision","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager provisioning enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot provision the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/update":{"post":{"operationId":"updateManager","description":"Update a manager to a specific release ID or active release.","x-speakeasy-group":"managers","x-speakeasy-name-override":"update","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerRequest"}}}},"responses":{"202":{"description":"Manager update enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot update the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/events":{"get":{"operationId":"listManagerEvents","description":"Retrieve all events of a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"listEvents","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"]}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/token":{"post":{"operationId":"generateManagerToken","description":"Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/binding-token":{"post":{"operationId":"generateManagerBindingToken","description":"Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerBindingToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerBindingTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/command-token":{"post":{"operationId":"generateManagerCommandToken","description":"Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerCommandToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerCommandTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/gcp-oauth-provider/resolve":{"post":{"operationId":"resolveManagerGcpOAuthProvider","description":"Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap.","x-speakeasy-group":"managers","x-speakeasy-name-override":"resolveGcpOAuthProvider","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderRequest"}}}},"responses":{"200":{"description":"Resolved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderResponse"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Manager cannot resolve this deployment group's project settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/heartbeat":{"post":{"operationId":"reportManagerHeartbeat","description":"Report Manager health status and metrics.","x-speakeasy-group":"managers","x-speakeasy-name-override":"reportHeartbeat","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatRequest"}}}},"responses":{"200":{"description":"Heartbeat acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/deployment":{"get":{"operationId":"getManagerDeployment","description":"Get deployment details for a private manager (internal deployment platform, status, resources).","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDeployment","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager deployment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDeployment"}}}},"404":{"description":"Manager not found or has no internal deployment (alien-hosted managers don't have deployment info).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/prepare":{"post":{"operationId":"prepareOperatorManifestPackage","tags":["operator-manifests"],"summary":"Prepare the white-labeled Operator image for an Operate install","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageRequest"}}}},"responses":{"200":{"description":"Operator image package created or reused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/render":{"post":{"operationId":"renderOperatorManifest","tags":["operator-manifests"],"summary":"Render a Kubernetes Operator manifest","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestRequest"}}}},"responses":{"200":{"description":"Operator manifest rendered successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Operator image package is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Invalid platform or manager configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listAPIKeys","description":"Retrieve all API keys for the current workspace.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved API keys.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/APIKey"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createAPIKey","description":"Create a new API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"API key created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"403":{"description":"Insufficient permissions to create API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/{id}":{"get":{"operationId":"getAPIKey","description":"Retrieve a specific API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateAPIKey","description":"Update an API key (enable/disable, change description).","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyRequest"}}}},"responses":{"200":{"description":"API key updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeAPIKey","description":"Revoke (soft delete) an API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"revoke","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"API key revoked successfully."},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/batch-delete":{"post":{"operationId":"deleteAPIKeys","description":"Permanently delete multiple API keys.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"deleteMultiple","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAPIKeysRequest"}}}},"responses":{"200":{"description":"API keys deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedCount":{"type":"number"}},"required":["deletedCount"]}}}},"403":{"description":"Insufficient permissions to delete API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains":{"get":{"operationId":"listDomains","description":"List system domains and workspace domains.","x-speakeasy-group":"domains","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domains.","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainWithUsage"}}},"required":["domains"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDomain","description":"Create a workspace domain and optional initial endpoints.","x-speakeasy-group":"domains","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253},"setup":{"type":"object","properties":{"deploymentPortal":{"type":"boolean"},"packages":{"type":"boolean"},"deploymentUrlProjectId":{"type":"string","nullable":true,"pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"managerIds":{"type":"array","items":{"type":"string"}}}}},"required":["domain"]}}}},"responses":{"200":{"description":"Returned an existing workspace domain claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"201":{"description":"Created domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Domain is reserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/endpoints":{"post":{"operationId":"createDomainEndpoint","description":"Create an endpoint under a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"createEndpoint","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["workspace","project","manager"]},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind"]}}}},"responses":{"201":{"description":"Created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Endpoint cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomain","description":"Get domain by ID.","x-speakeasy-group":"domains","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDomain","description":"Delete a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain deletion requested.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain is in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/refresh":{"post":{"operationId":"refreshDomain","description":"Refresh workspace domain verification.","x-speakeasy-group":"domains","x-speakeasy-name-override":"refresh","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain verification refresh requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events":{"get":{"operationId":"listEvents","description":"Retrieve all events.","x-speakeasy-group":"events","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter events to a single deployment."},"required":false,"description":"Filter events to a single deployment.","name":"deploymentId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["releaseCreatedAt"]},"description":"Optional fields to include: releaseCreatedAt"},"required":false,"description":"Optional fields to include: releaseCreatedAt","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events/{id}":{"get":{"operationId":"getEvent","description":"Retrieve an event by ID.","x-speakeasy-group":"events","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"required":true,"description":"Unique identifier for the event.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens":{"get":{"operationId":"listMachinesJoinTokens","x-speakeasy-group":"machines","x-speakeasy-name-override":"listJoinTokens","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Join tokens for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesJoinTokensResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"createJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Newly minted Machines join token. Existing tokens keep working; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/rotate":{"post":{"operationId":"rotateMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"rotateJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Rotated Machines join token. Revokes all existing tokens, then mints a new one; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/{tokenId}":{"delete":{"operationId":"revokeMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"revokeJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"tokenId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines join token revocation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/inventory":{"get":{"operationId":"listMachinesInventory","x-speakeasy-group":"machines","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machine inventory for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesInventoryResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}/drain":{"delete":{"operationId":"cancelMachinesMachineDrain","x-speakeasy-group":"machines","x-speakeasy-name-override":"cancelMachineDrain","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines drain cancellation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMachinesMachineDrainResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"drainMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"drainMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineRequest"}}}},"responses":{"200":{"description":"Machines drain request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}":{"delete":{"operationId":"removeMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"removeMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines remove request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands":{"get":{"operationId":"listCommands","description":"Retrieve commands. Use for dashboard analytics and command history.","x-speakeasy-group":"commands","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Filter by command state"},"required":false,"description":"Filter by command state","name":"state","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Filter by command name"},"required":false,"description":"Filter by command name","name":"name","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search commands by name"},"required":false,"description":"Search commands by name","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created after this date (ISO 8601)"},"required":false,"description":"Filter commands created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created before this date (ISO 8601)"},"required":false,"description":"Filter commands created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deployment","project"]},"description":"Optional fields to include: deployment, project"},"required":false,"description":"Optional fields to include: deployment, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved commands.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommandListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createCommand","description":"Create command metadata. Called by manager when processing commands. Returns project info for routing decisions.","x-speakeasy-group":"commands","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandRequest"}}}},"responses":{"201":{"description":"Command created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandResponse"}}}},"400":{"description":"Deployment is not ready or has no assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The deployment manager is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/names":{"get":{"operationId":"listCommandNames","description":"List distinct command names. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listNames","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search command names (prefix match)"},"required":false,"description":"Search command names (prefix match)","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct command names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandNamesResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/deployments":{"get":{"operationId":"listCommandDeployments","description":"List distinct deployments that have commands, including deployment group info. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search deployment or deployment group names"},"required":false,"description":"Search deployment or deployment group names","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct deployments that have commands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandDeploymentsResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/target":{"get":{"operationId":"resolveCommandTarget","description":"Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named.","x-speakeasy-group":"commands","x-speakeasy-name-override":"resolveTarget","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment to resolve the target for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Deployment to resolve the target for","name":"deploymentId","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Explicit resource id to resolve; must be a command-capable resource"},"required":false,"description":"Explicit resource id to resolve; must be a command-capable resource","name":"target","in":"query"}],"responses":{"200":{"description":"Resolved command target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedCommandTarget"}}}},"404":{"description":"Deployment or target not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}":{"patch":{"operationId":"updateCommand","description":"Update command state. Called by manager when command is dispatched or completes.","x-speakeasy-group":"commands","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommandRequest"}}}},"responses":{"200":{"description":"Command updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getCommand","description":"Retrieve a command by ID.","x-speakeasy-group":"commands","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/dispatch":{"post":{"operationId":"dispatchCommand","description":"Atomically mark a command DISPATCHED unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"dispatch","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandRequest"}}}},"responses":{"200":{"description":"Dispatch attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/complete":{"post":{"operationId":"completeCommand","description":"Atomically transition a command to a terminal state (SUCCEEDED, FAILED, or EXPIRED) unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"complete","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandRequest"}}}},"responses":{"200":{"description":"Completion attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/increment-attempt":{"post":{"operationId":"incrementCommandAttempt","description":"Atomically increment the command's attempt counter and return the new value.","x-speakeasy-group":"commands","x-speakeasy-name-override":"incrementAttempt","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Attempt incremented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementCommandAttemptResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions":{"get":{"operationId":"listDebugSessions","description":"Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Filter by session state"}]},"required":false,"description":"Filter by session state","name":"state","in":"query"},{"schema":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model (push/pull). Joins against the parent deployment."},"required":false,"description":"Filter by deployment model (push/pull). Joins against the parent deployment.","name":"mode","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Filter by cloud provider. Joins against the parent deployment."},"required":false,"description":"Filter by cloud provider. Joins against the parent deployment.","name":"provider","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated debug sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSessionListResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDebugSession","description":"Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}}},"responses":{"201":{"description":"Debug session created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"403":{"description":"Caller is not the deployment's assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/internal/manager-active":{"get":{"operationId":"listActiveManagerDebugSessions","description":"List active debug sessions created by the calling manager so runtime reconciliation can resume after restart.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"listActiveForManager","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated active debug sessions owned by the calling manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerActiveDebugSessionListResponse"}}}},"403":{"description":"Caller is not a manager runtime.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/{id}":{"patch":{"operationId":"updateDebugSession","description":"Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDebugSessionRequest"}}}},"responses":{"200":{"description":"Debug session updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"403":{"description":"Caller is not the manager that created the audit row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Debug session not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"The lifecycle transition is stale or would reactivate a terminal session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getDebugSession","description":"Retrieve a debug session by ID.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved debug session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info":{"get":{"operationId":"getDeploymentInfo","description":"Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":false,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Deployment information retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"401":{"description":"Unauthorized — requires a deployment-scoped or deployment-group-scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/compute-plan":{"post":{"operationId":"planDeploymentCompute","description":"Plan deployment compute for the active release before stack preparation. The response contains recommended machine and scale choices for cloud compute pools.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"planCompute","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Compute plan returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentComputePlan"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/prepare-stack":{"post":{"operationId":"prepareDeploymentStack","description":"Prepare the active release stack for a deployment portal setup session. The response contains the generated stack shape plus setup compatibility metadata.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"prepareStack","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Prepared stack returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedDeploymentStack"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"operationId":"slackIntegrationInstallUrl","description":"Generate the Slack OAuth consent URL for this workspace.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"installUrl","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"OAuth URL the dashboard should redirect the user to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/status":{"get":{"operationId":"slackIntegrationStatus","description":"Return the Slack install for this workspace (if any).","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"status","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationStatus"}}}}}}},"/v1/integrations/slack/channels":{"get":{"operationId":"slackIntegrationChannels","description":"List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"listChannels","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Public channels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelsResponse"}}}},"400":{"description":"Workspace not connected to Slack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/notification-channel":{"put":{"operationId":"slackIntegrationSetNotificationChannel","description":"Configure which Slack channel receives ai-agent monitor reports.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"setNotificationChannel","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelRequest"}}}},"responses":{"200":{"description":"Channel saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelResponse"}}}},"400":{"description":"Not connected, or join failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/installation":{"delete":{"operationId":"slackIntegrationUninstall","description":"Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"uninstall","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Uninstalled."}}}},"/v1/agent-sessions":{"get":{"operationId":"listAgentSessions","description":"List ai-agent monitor sessions for this workspace. Newest first, capped at 50.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionListResponse"}}}}}}},"/v1/agent-sessions/{id}":{"get":{"operationId":"getAgentSession","description":"Retrieve one ai-agent monitor session by id.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/events":{"get":{"operationId":"listAgentSessionEvents","description":"Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"events","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Events after the cursor, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionEventsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/approve":{"post":{"operationId":"approveAgentSession","description":"Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"approve","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already resumed / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"202":{"description":"Approved; resume enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/stop":{"post":{"operationId":"stopAgentSession","description":"Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"stop","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already terminal / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"202":{"description":"Cancel accepted; session stopped.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/list":{"post":{"operationId":"syncList","description":"List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows.","x-speakeasy-group":"sync","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListRequest"}}}},"responses":{"200":{"description":"Full deployment records returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/context":{"post":{"operationId":"syncContext","description":"Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock.","x-speakeasy-group":"sync","x-speakeasy-name-override":"context","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncContextRequest"}}}},"responses":{"200":{"description":"Computed deployment context returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"}}}},"404":{"description":"Deployment not found or not assigned to this manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to build deployment context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/acquire":{"post":{"operationId":"syncAcquire","description":"Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing.","x-speakeasy-group":"sync","x-speakeasy-name-override":"acquire","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireRequest"}}}},"responses":{"200":{"description":"Deployments acquired successfully (empty arrays if none available). Failures indicate deployments that were locked but failed during context building - their locks have been released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/reconcile":{"post":{"operationId":"syncReconcile","description":"Reconcile deployment state. Push model requests that include a session verify lock ownership. Pull model state reports are accepted as authz-gated agent progress even when they carry an agent-sync session. Accepts full DeploymentState after step() execution.","x-speakeasy-group":"sync","x-speakeasy-name-override":"reconcile","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileRequest"}}}},"responses":{"200":{"description":"State reconciled successfully. If target is present, continue deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment locked (pull) or session mismatch (push).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/release":{"post":{"operationId":"syncRelease","description":"Release a deployment lock. Must be called after processing an acquired deployment, even if processing failed. This is critical to avoid deadlocks.","x-speakeasy-group":"sync","x-speakeasy-name-override":"release","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReleaseRequest"}}}},"responses":{"200":{"description":"Lock released successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources":{"get":{"operationId":"listInventory","x-speakeasy-group":"resources","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Unified managed and observed resource inventory rows.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["managed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt","source","deploymentId","deploymentName"]},{"type":"object","properties":{"source":{"type":"string","enum":["observed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"rawKind":{"type":"string"},"alienResourceId":{"type":"string","nullable":true},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["source","deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","name","rawKind","alienResourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}":{"get":{"operationId":"listResourceOverview","x-speakeasy-group":"resources","x-speakeasy-name-override":"listOverview","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Compute resource overview rows from latest heartbeats.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/{resourceId}/deployments":{"get":{"operationId":"listResourceDeployments","x-speakeasy-group":"resources","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Deployments where the resource is installed.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt"]}}},"required":["resourceType","resourceId","deployments"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/deployments/{deploymentId}/{resourceId}":{"get":{"operationId":"getResourceDeploymentDetail","x-speakeasy-group":"resources","x-speakeasy-name-override":"getDeploymentDetail","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"deploymentId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Latest heartbeat detail for one compute resource deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"},"desiredImage":{"type":"string","nullable":true}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt","desiredImage"]},"heartbeat":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["available"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"staleAt":{"type":"string","format":"date-time"},"platformStale":{"type":"boolean"},"heartbeat":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"raw":{"type":"array","items":{"nullable":true}}},"required":["status","deploymentId","resourceId","resourceType","backend","controllerPlatform","observedAt","staleAt","platformStale","heartbeat","raw"]},{"type":"object","properties":{"status":{"type":"string","enum":["missing"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"}},"required":["status","deploymentId","resourceId","resourceType"]}]}},"required":["deployment","heartbeat"]}}}},"404":{"description":"Deployment or resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resolve":{"get":{"operationId":"resolve","tags":["resolve"],"summary":"Resolve manager for a project and platform","description":"Returns the manager URL for a given project and platform. The project can be provided as a query parameter, or derived from the token's scope (project-scoped, deployment-group-scoped, or deployment-scoped tokens carry an implicit project). This is the single entry point for all CLI tools to discover which manager to talk to.","x-speakeasy-group":"resolve","x-speakeasy-name-override":"resolve","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform to resolve the manager for"},"required":true,"description":"Target platform to resolve the manager for","name":"platform","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope)."},"required":false,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope).","name":"project","in":"query"}],"responses":{"200":{"description":"Manager resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"description":"Missing required project parameter for this token type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found or no manager available for platform.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Manager not ready yet (no URL reported). Retry after a delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/cloud-regions":{"get":{"operationId":"getCloudRegions","description":"Get cloud regions supported by this Alien environment.","x-speakeasy-group":"cloudRegions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Supported cloud regions retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudRegionsResponse"}}}}}}},"/v1/billing/audit-log":{"get":{"operationId":"listBillingAuditLog","description":"List billing activity entries for the current workspace.","x-speakeasy-group":"billing","x-speakeasy-name-override":"listAuditLog","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor: id from the previous page."},"required":false,"description":"Cursor: id from the previous page.","name":"before","in":"query"}],"responses":{"200":{"description":"Audit-log rows newest-first.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingAuditLogRow"}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"]}}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"getWorkspaceBillingEntitlements","description":"Get the workspace billing entitlements used for product feature gates. Autumn is the source of truth; the response is served through the workspace billing read model with stale-cache fallback.","x-speakeasy-group":"billing","x-speakeasy-name-override":"getEntitlements","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace billing entitlements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBillingEntitlements"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}}}} \ No newline at end of file diff --git a/client-sdks/platform/rust/openapi.json b/client-sdks/platform/rust/openapi.json index e3768067b..3176d4dfa 100644 --- a/client-sdks/platform/rust/openapi.json +++ b/client-sdks/platform/rust/openapi.json @@ -1 +1 @@ -{"openapi":"3.0.0","info":{"title":"Alien API","version":"1.0.0","contact":{"name":"Alien Team","url":"https://alien.dev"}},"servers":[{"url":"https://api.alien.dev","description":"Alien API - Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key for authentication, must be provided as a Bearer token. Generate an API key at https://alien.dev/api-keys"}},"schemas":{"WorkspaceInvitationPreview":{"type":"object","properties":{"kind":{"type":"string","enum":["email","link"]},"workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name","logoUrl"]},"inviter":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"image":{"type":"string","nullable":true,"format":"uri"}},"required":["name","image"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["active","accepted","expired","revoked"]},"emailHint":{"type":"string","nullable":true}},"required":["kind","workspace","inviter","role","expiresAt","state","emailHint"],"additionalProperties":false},"WorkspaceRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"Role for workspace-scoped service accounts","example":"workspace.member"},"APIError":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"requestId":{"type":"string","description":"Request ID echoed in the x-request-id response header and server logs."}},"required":["code","message","internal"]},"Membership":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"role":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","logoUrl","role","createdAt"],"additionalProperties":false},"UserProfile":{"type":"object","properties":{"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","description":"User's email address"},"name":{"type":"string","description":"User's display name"},"image":{"type":"string","nullable":true,"description":"User's avatar image URL"},"githubUsername":{"type":"string","nullable":true,"description":"Linked GitHub username"},"cliConnected":{"type":"boolean","description":"Whether this user has ever authenticated a request from the Alien CLI. Latched on first CLI request, never cleared."},"company":{"type":"string","nullable":true,"description":"Company name collected during profile setup."},"acquisitionSource":{"type":"string","nullable":true,"enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other",null],"description":"How the user heard about Alien."},"acquisitionSourceDetail":{"type":"string","nullable":true,"description":"Additional acquisition source detail when the source is other."},"useCases":{"type":"string","nullable":true,"description":"What the user is hoping to use Alien for."},"profileSetupCompletedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the user completed the required profile setup dialog."},"profileSetupVersion":{"type":"integer","nullable":true,"description":"Version of the required profile setup dialog the user completed."}},"required":["id","email","name","image","githubUsername","cliConnected","company","acquisitionSource","acquisitionSourceDetail","useCases","profileSetupCompletedAt","profileSetupVersion"],"additionalProperties":false},"UserProfileSetupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"},"company":{"type":"string","minLength":1,"maxLength":120,"description":"Company name"},"acquisitionSource":{"type":"string","enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other"],"description":"How the user heard about Alien"},"acquisitionSourceDetail":{"type":"string","minLength":1,"maxLength":200,"description":"Required when acquisitionSource is other"},"useCases":{"type":"string","maxLength":2000,"description":"What the user is hoping to use Alien for"}},"required":["name","company","acquisitionSource"],"additionalProperties":false},"GitNamespace":{"type":"object","properties":{"id":{"type":"number","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"installationId":{"type":"number","nullable":true},"type":{"type":"string","enum":["team","user"]},"provider":{"type":"string","enum":["github"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","slug","installationId","type","provider","createdAt"],"additionalProperties":false},"GitRepository":{"type":"object","properties":{"name":{"type":"string"},"private":{"type":"boolean"},"defaultBranch":{"type":"string"},"pushedAt":{"type":"string","format":"date-time"}},"required":["name","private","defaultBranch"],"additionalProperties":false},"AcceptWorkspaceInvitationResponse":{"type":"object","properties":{"outcome":{"type":"string","enum":["joined","already-member"]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"workspaceName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["outcome","workspaceId","workspaceName","role"],"additionalProperties":false},"Subject":{"oneOf":[{"$ref":"#/components/schemas/UserSubject"},{"$ref":"#/components/schemas/ServiceAccountSubject"}],"discriminator":{"propertyName":"kind","mapping":{"user":"#/components/schemas/UserSubject","serviceAccount":"#/components/schemas/ServiceAccountSubject"}},"description":"Authenticated principal that can be either a user (with workspace-scoped permissions) or a service account (with configurable scope and role)"},"UserSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["user"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","format":"email","description":"User's email address"},"workspaceId":{"type":"string","description":"ID of the workspace the user is authenticated within"},"workspaceName":{"type":"string","description":"Name of the workspace the user is authenticated within"},"role":{"$ref":"#/components/schemas/UserRole"}},"required":["kind","id","email","workspaceId","role"],"description":"Authenticated user subject with workspace-scoped permissions"},"UserRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"User's role within the workspace","example":"workspace.member"},"ServiceAccountSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["serviceAccount"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique service account identifier (API key ID)"},"workspaceId":{"type":"string","description":"ID of the workspace the service account belongs to"},"workspaceName":{"type":"string","description":"Name of the workspace the service account belongs to"},"scope":{"$ref":"#/components/schemas/SubjectScope"},"role":{"$ref":"#/components/schemas/Role"}},"required":["kind","id","workspaceId","scope","role"],"description":"Authenticated service account subject with scoped permissions (workspace, project, or deployment level)"},"SubjectScope":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["workspace"],"description":"Workspace-scoped access"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["project"],"description":"Project-scoped access"},"projectId":{"type":"string","description":"ID of the specific project this scope applies to"}},"required":["type","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment"],"description":"Deployment-scoped access"},"deploymentId":{"type":"string","description":"ID of the specific deployment this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"}},"required":["type","deploymentId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"],"description":"Deployment group-scoped access"},"deploymentGroupId":{"type":"string","description":"ID of the specific deployment group this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"}},"required":["type","deploymentGroupId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["manager"],"description":"Manager-scoped access"},"managerId":{"type":"string","description":"ID of the specific manager this scope applies to"}},"required":["type","managerId"]}],"description":"Authorization scope defining what resources this service account can access"},"Role":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"$ref":"#/components/schemas/ProjectRole"},{"$ref":"#/components/schemas/DeploymentRole"},{"$ref":"#/components/schemas/DeploymentGroupRole"},{"$ref":"#/components/schemas/ManagerRole"}],"description":"Role defining what actions this service account can perform within its scope","example":"workspace.member"},"ProjectRole":{"type":"string","enum":["project.viewer","project.developer"],"description":"Role for project-scoped service accounts","example":"project.developer"},"DeploymentRole":{"type":"string","enum":["deployment.viewer","deployment.manager","deployment.telemetry-writer"],"description":"Role for deployment-scoped service accounts","example":"deployment.manager"},"DeploymentGroupRole":{"type":"string","enum":["deployment-group.deployer"],"description":"Role for deployment group-scoped service accounts","example":"deployment-group.deployer"},"ManagerRole":{"type":"string","enum":["manager.runtime"],"description":"Role for manager-scoped service accounts","example":"manager.runtime"},"Workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name.","example":"my-workspace"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"onboardingDismissedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the Getting Started walkthrough was dismissed or completed for this workspace. Null means it has never been dismissed; the dashboard auto-promotes the walkthrough until this is set."},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","onboardingDismissedAt","createdAt"],"additionalProperties":false},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","email","name","image","role","joinedAt"],"additionalProperties":false},"AgentSettings":{"type":"object","properties":{"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"enabled":{"type":"boolean","description":"Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`."},"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["workspaceId","enabled","debugPermissionMode","createdAt","updatedAt"],"additionalProperties":false},"UpdateWorkspaceSettingsRequest":{"type":"object","properties":{"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"enabled":{"type":"boolean","description":"Turn the ai-agent on (`true`) or off (`false`) for this workspace."}}},"WorkspaceInvitation":{"type":"object","properties":{"id":{"type":"string","pattern":"winv_[0-9a-zA-Z]{32}$","description":"Unique identifier for the workspace invitation.","example":"winv_DsgltMIFV0GmqtxV5NYTtrknrna"},"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"status":{"type":"string","enum":["pending","accepted","revoked","expired"]},"deliveryStatus":{"type":"string","enum":["pending","sent","failed"]},"expiresAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","email","role","status","deliveryStatus","expiresAt","lastSentAt","createdAt","inviteUrl"],"additionalProperties":false},"WorkspaceInviteLink":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"wil_[0-9a-zA-Z]{40}$","description":"Unique identifier for the workspace invite link.","example":"wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"useCount":{"type":"integer","minimum":0},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","role","expiresAt","createdAt","useCount","lastUsedAt","inviteUrl"],"additionalProperties":false},"ProjectListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deploymentCount":{"type":"number"},"latestRelease":{"$ref":"#/components/schemas/ProjectReleaseInfo"}}}]},"DeploymentPortalAppearancePreset":{"type":"string","enum":["clean","technical","enterprise","playful","minimal"],"default":"clean","description":"Curated visual style for the deployment portal."},"DeploymentPortalAccentColor":{"type":"string","enum":["blue","purple","green","orange","pink","slate"],"default":"blue","description":"Accent color used for highlights and primary actions."},"DeploymentPortalDensity":{"type":"string","enum":["comfortable","compact"],"default":"comfortable","description":"Layout density for portal content."},"ProjectReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","gitMetadata","createdAt"]},"GitMetadata":{"type":"object","nullable":true,"properties":{"commitSha":{"type":"string","nullable":true,"maxLength":40,"description":"The hash of the commit","example":"dc36199b2234c6586ebe05ec94078a895c707e29"},"commitMessage":{"type":"string","nullable":true,"maxLength":1024,"description":"The commit message","example":"add method to measure Interaction to Next Paint (INP) (#36490)"},"commitRef":{"type":"string","nullable":true,"maxLength":256,"description":"The branch or tag on which the commit was made","example":"main"},"commitDate":{"type":"string","nullable":true,"format":"date-time","description":"The date and time when the commit was created","example":"2026-03-16T12:00:00Z"},"dirty":{"type":"boolean","nullable":true,"description":"Whether or not there have been modifications to the working tree since the latest commit","example":true},"remoteUrl":{"type":"string","nullable":true,"maxLength":2048,"description":"The git repository's remote origin url","example":"https://github.com/alienplatform/alien"},"commitAuthorName":{"type":"string","nullable":true,"maxLength":256,"description":"The name of the author of the commit (from git config)","example":"John Doe"},"commitAuthorEmail":{"type":"string","nullable":true,"maxLength":256,"format":"email","description":"The email of the author of the commit (from git config)","example":"john@example.com"},"commitAuthorLogin":{"type":"string","nullable":true,"maxLength":256,"description":"The provider username of the commit author (e.g., GitHub login), resolved server-side from the commit email","example":"johndoe"},"commitAuthorAvatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"The avatar URL of the commit author, resolved server-side from the provider login","example":"https://github.com/johndoe.png"},"provider":{"$ref":"#/components/schemas/GitProvider"}}},"GitProvider":{"oneOf":[{"$ref":"#/components/schemas/GitHubProvider"},{"$ref":"#/components/schemas/GitLabProvider"},{"nullable":true}],"description":"Provider-specific repository information, resolved server-side from remoteUrl"},"GitHubProvider":{"type":"object","properties":{"type":{"type":"string","enum":["github"]},"org":{"type":"string","maxLength":256,"description":"Repository owner (user or organization)"},"repo":{"type":"string","maxLength":256,"description":"Repository name"}},"required":["type","org","repo"]},"GitLabProvider":{"type":"object","properties":{"type":{"type":"string","enum":["gitlab"]},"namespace":{"type":"string","maxLength":256,"description":"Group/project namespace"},"project":{"type":"string","maxLength":256,"description":"Project name"}},"required":["type","namespace","project"]},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","createdAt","workspaceId"]},"ProjectIDOrNamePathParam":{"type":"string","maxLength":100,"description":"Project ID or name."},"ProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","redirectUris"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"hasClientSecret":{"type":"boolean","enum":[true]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","clientId","hasClientSecret","redirectUris"]}]},"GcpOAuthClientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[a-zA-Z0-9_-]+-[a-zA-Z0-9_-]+\\.apps\\.googleusercontent\\.com$","description":"Google OAuth web client ID.","example":"1234567890-abc123.apps.googleusercontent.com"},"UpdateProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId"]}]},"GcpOAuthClientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Google OAuth web client secret. Write-only; never returned by the API.","example":"GOCSPX-example"},"UpdateProject":{"type":"object","properties":{"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."}}},"DeploymentPortalDomainResponse":{"type":"object","properties":{"deploymentPortalEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"},"packageEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["deploymentPortalEndpoint","packageEndpoint"]},"DomainEndpoint":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dend_[0-9a-z]{28}$","description":"Unique identifier for the domain endpoint.","example":"dend_1bb6gdvm1bs74acqkjstcgv"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domainId":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"kind":{"$ref":"#/components/schemas/DomainEndpointKind"},"owner":{"$ref":"#/components/schemas/DomainEndpointOwner"},"hostname":{"type":"string","minLength":1,"maxLength":253},"status":{"$ref":"#/components/schemas/DomainEndpointStatus"},"provider":{"type":"string","nullable":true},"providerState":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"managedDnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPortalManagedDnsRecord"}},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"retryAttempts":{"type":"integer","minimum":0},"nextStepAfter":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","workspaceId","domainId","kind","owner","hostname","status","managedDnsRecords","retryAttempts","createdAt","updatedAt"]},"DomainEndpointKind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"DomainEndpointOwner":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DomainEndpointOwnerType"},"id":{"type":"string"}},"required":["type","id"]},"DomainEndpointOwnerType":{"type":"string","enum":["workspace","project","manager"]},"DomainEndpointStatus":{"type":"string","enum":["waiting_for_domain","provisioning","waiting_for_dns","waiting_for_health","active","failed","deleting"]},"DeploymentPortalManagedDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true}},"required":["name","type","value"]},"DeploymentLinkSetupResponse":{"type":"object","properties":{"activeRelease":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","nullable":true},"stack":{"$ref":"#/components/schemas/StackByPlatform"}},"required":["id","version","stack"]},"visiblePackageTypes":{"type":"array","items":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"}},"visibleSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}}},"required":["activeRelease","visiblePackageTypes","visibleSetupMethods"]},"StackByPlatform":{"type":"object","nullable":true,"properties":{"aws":{"nullable":true},"gcp":{"nullable":true},"azure":{"nullable":true},"kubernetes":{"nullable":true},"machines":{"nullable":true},"local":{"nullable":true},"test":{"nullable":true}},"additionalProperties":false},"DeploymentSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform","helm","cli","manual"]},"DeploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments allowed in this deployment group"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","projectId","workspaceId","createdAt"]},"CreateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments in this deployment group"}},"required":["name","project"]},"EnsureDeploymentGroupByNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments for newly created groups"}},"required":["name","project"]},"ProjectIDOrNameQueryParam":{"type":"string","maxLength":100,"description":"Filter by project ID or name."},"UpdateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"maxDeployments":{"type":"integer","minimum":1,"description":"Maximum number of deployments in this deployment group"}}},"CreateDeploymentGroupTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The API key token"},"deploymentLink":{"type":"string","description":"Formatted deployment link"}},"required":["token","deploymentLink"]},"CreateDeploymentGroupTokenRequest":{"type":"object","properties":{"description":{"type":"string","description":"Description for the API key"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"},"deploymentSetupConfig":{"$ref":"#/components/schemas/DeploymentSetupConfig"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["deploymentSetupConfig"]},"DeploymentSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."}},"required":["metadata","policy","environmentVariables"]},"DeploymentSetupMetadata":{"type":"object","additionalProperties":{"nullable":true}},"DeploymentSetupPolicy":{"type":"object","properties":{"allowedPlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"allowedKubernetesBasePlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","on-prem"]},"minItems":1,"description":"Kubernetes base environments the recipient may target."},"allowedKubernetesClusterSources":{"type":"array","items":{"$ref":"#/components/schemas/KubernetesClusterSource"},"minItems":1,"description":"Whether recipients may create a cluster, use an existing cluster, or both."},"allowedSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}},"allowReleasePinning":{"type":"boolean"},"stackSettings":{"$ref":"#/components/schemas/DeploymentSetupStackSettingsPolicy"}},"required":["allowedPlatforms","allowedSetupMethods"]},"KubernetesClusterSource":{"type":"string","enum":["create","existing"]},"DeploymentSetupStackSettingsPolicy":{"type":"object","properties":{"defaults":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"allowedDeploymentModels":{"type":"array","items":{"type":"string","enum":["push","pull","airgapped"]}},"allowedNetworkModes":{"type":"array","items":{"type":"string","enum":["none","create","default","byo"]}},"allowedUpdatesModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required"]}},"allowedTelemetryModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required","off"]}},"allowedHeartbeatsModes":{"type":"array","items":{"type":"string","enum":["on","off"]}},"allowExternalBindings":{"type":"boolean"},"allowCustomRegistry":{"type":"boolean"}}},"EnvironmentVariableConfig":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"value":{"type":"string","maxLength":10000,"description":"Variable value (encrypted in database)"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","value","type","targetResources"]},"EnvironmentVariableType":{"type":"string","enum":["plain","secret"],"description":"Variable type (plain or secret)"},"EncryptedStackInputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EncryptedStackInputValue"},"default":{}},"EncryptedStackInputValue":{"type":"object","properties":{"value":{"type":"string","description":"Encrypted JSON-encoded input value."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"]},"secret":{"type":"boolean","description":"Whether the original input is secret."}},"required":["value","kind","secret"]},"StackInputValuesRequest":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{}},"StackInputValueRequest":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"CreateFirstPartyDeploymentSessionResponse":{"type":"object","properties":{"token":{"type":"string","description":"The deployment-group session token"}},"required":["token"]},"Package":{"type":"object","properties":{"id":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"type":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"},"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string","description":"Package version (e.g., '1.0.0', 'rel_abc123')"},"sourceReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release used as package build input. Null for release-less packages such as Operate Operator images.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"setupFingerprints":{"$ref":"#/components/schemas/SetupFingerprintMap"},"packageBuildInputHash":{"type":"string","description":"Hash of Platform-known package build request inputs: package type, source release, setup fingerprints, package config, and setup contract version"},"config":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"}},"required":["displayName","name"],"description":"Branding configuration for the deploy CLI binary."},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for CloudFormation packages"},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"}},"required":["chartName","description"],"description":"Configuration for the Helm chart package"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"}},"required":["displayName","name"],"description":"Branding configuration for the Operator image."},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for Terraform package generation."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]}],"description":"Type-specific configuration"},"outputs":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"digest":{"type":"string","description":"Image digest (e.g., \"sha256:abc123...\")"},"image":{"type":"string","description":"Full image reference (e.g., \"public.ecr.aws/acme/operators/project-id:1.2.3\")"},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain embedded into the Operator binary, if whitelabeled."}},"required":["digest","image"],"description":"Outputs from an Operator image package build"},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]},{"nullable":true}],"description":"Package outputs (only when status is 'ready')"},"error":{"nullable":true,"description":"Error information if status is 'failed'"},"sourceBinarySha256":{"type":"string","nullable":true,"description":"Builder-recorded source binary SHA256 (for cli/terraform packages)"},"retries":{"type":"integer","minimum":0,"description":"Number of build retries"},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"leaseExpiresAt":{"type":"string","format":"date-time","nullable":true,"description":"Expiration of the current builder lease"},"buildPhase":{"type":"string","nullable":true,"enum":["building","publishing",null],"description":"Coarse package build phase"},"lastProgressAt":{"type":"string","format":"date-time","nullable":true,"description":"Last successful builder lease renewal or phase change"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","projectId","workspaceId","type","status","version","setupFingerprints","packageBuildInputHash","config","retries","createdAt","updatedAt"]},"SetupFingerprintMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SetupFingerprintInfo"},"description":"Per-target setup compatibility fingerprints copied from the source release"},"SetupFingerprintInfo":{"type":"object","properties":{"target":{"$ref":"#/components/schemas/SetupTarget"},"fingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"version":{"$ref":"#/components/schemas/SetupFingerprintVersion"}},"required":["target","fingerprint","version"]},"SetupTarget":{"type":"string","minLength":1,"description":"Stable target key for the setup contract, e.g. aws/us-east-1"},"SetupFingerprint":{"type":"string","minLength":1,"description":"Deterministic setup contract fingerprint for one setup target"},"SetupFingerprintVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup fingerprint algorithm version"},"ReleaseListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Release"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"rollout":{"type":"object","nullable":true,"properties":{"updatedCount":{"type":"integer","description":"Deployments that finished updating to this release (excludes initial provisions)"},"pendingCount":{"type":"integer","description":"Deployments currently targeting this release but not yet running it"},"avgDurationMs":{"type":"number","nullable":true,"description":"Average time from release creation until a deployment finished updating, in milliseconds"}},"required":["updatedCount","pendingCount","avgDurationMs"],"description":"Rollout stats, included when ?include=rollout is used"}}}]},"Release":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"projectId":{"type":"string","maxLength":128},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"setupFingerprints":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintMap"},{"description":"Per-target setup compatibility fingerprints for this release"}]},"rootDirectory":{"type":"string","nullable":true,"maxLength":256},"workspaceId":{"type":"string","maxLength":128}},"required":["id","projectId","version","createdAt","setupFingerprints","workspaceId"]},"CreateReleaseRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256}},"required":["project"]},"ReleaseAuthorFilterItem":{"type":"object","properties":{"login":{"type":"string","nullable":true,"description":"Provider username (e.g., GitHub login)"},"name":{"type":"string","nullable":true,"description":"Git commit author name"},"avatarUrl":{"type":"string","nullable":true,"format":"uri","description":"Author avatar URL"}},"required":["login","name","avatarUrl"]},"DeploymentListItemResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if in a failed state"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"$ref":"#/components/schemas/ManagerID"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentProtocolVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DeploymentState protocol version owned by the runtime/manager"},"OperatorCapabilityReport":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":128},"state":{"$ref":"#/components/schemas/OperatorCapabilityState"},"detail":{"type":"string","nullable":true,"maxLength":512}},"required":["key","state"]},"OperatorCapabilityState":{"type":"string","enum":["granted","denied","unavailable"]},"ManagerID":{"type":"string","pattern":"mgr_[0-9a-z]{28}$","description":"ID of the manager","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"DeploymentReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","version","createdAt"]},"DeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"}},"required":["id","name"]},"DeploymentProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"}},"required":["id","name"]},"DeploymentStats":{"type":"object","properties":{"total":{"type":"number","description":"Total number of deployments matching filters"},"byStatus":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by status (only includes statuses with non-zero counts)"},"byPlatform":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by platform (only includes platforms with non-zero counts)"},"byCurrentRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by currentReleaseId. The empty string key represents deployments with no current release (initial provisioning)."},"byPinnedRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by pinnedReleaseId among deployments that are pinned. Excludes unpinned deployments."}},"required":["total","byStatus","byPlatform","byCurrentRelease","byPinnedRelease"]},"DeploymentDetailResponse":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}}}]},"Deployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"targetEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of target environment variables for the deployment"},"currentEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of current environment variables for the deployment"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentConnectionInfo":{"type":"object","properties":{"arc":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Manager URL for commands"},"deploymentId":{"type":"string","description":"Deployment ID to use in command requests"}},"required":["url","deploymentId"]},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"publicEndpoints":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"protocol":{"type":"string","enum":["http","tcp"]},"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"wildcardHost":{"type":"string"}},"required":["url","protocol","host","port"]},"description":"Public endpoints keyed by endpoint name."}},"required":["type"]},"description":"Deployed resources and their public endpoints"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"platform":{"type":"string"}},"required":["arc","resources","status","platform"]},"CreateDeploymentResponse":{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Effective deployment model persisted for the deployment."},"token":{"type":"string","description":"Deployment token (only returned when using deployment group token)"}},"required":["deployment","deploymentModel"]},"NewDeploymentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentGroupId":{"type":"string","description":"Required for workspace/project tokens. Deployment group tokens use their own group automatically."},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Optional manager to assign. If omitted, the project default or system manager is selected."}]},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"Stack settings for deployment customization"},"resourcePrefix":{"$ref":"#/components/schemas/ResourcePrefix"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method that created the deployment. Defaults to cli."}]},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup method metadata used to guide privileged teardown."}]},"inputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{},"description":"Stack input values provided by the deployment creator."},"operatorScope":{"type":"string","minLength":1,"maxLength":512,"description":"Display-only scope reported by the Operator manifest."},"operatorPermission":{"type":"string","minLength":1,"maxLength":64,"description":"Display-only permission tier reported by the Operator manifest."},"initialDesiredRelease":{"type":"string","enum":["active","none"],"default":"active","description":"Desired-release selection for a new deployment. Use none to register an environment without initially requesting a release; later updates can assign one."}},"required":["name","platform","project"],"additionalProperties":false,"description":"Request schema for creating a new deployment"},"ResourcePrefix":{"type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?=[a-z0-9])){1,38}[a-z0-9]$","description":"Optional physical-name prefix for generated cloud resources. Omit to let the manager generate one."},"ImportDeploymentRequest":{"oneOf":[{"$ref":"#/components/schemas/ForwardImportRequest"},{"$ref":"#/components/schemas/PersistImportedDeploymentRequest"}],"description":"Request schema for importing a deployment from resolved setup infrastructure"},"ForwardImportRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["forward"],"default":"forward"},"project":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user-session callers."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Required for user-session callers. Deployment-group tokens use their own group automatically.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager ID. If omitted, the first suitable manager for the source platform is used."}]},"source":{"$ref":"#/components/schemas/ImportSource"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["source"]},"ImportSource":{"type":"object","properties":{"deploymentName":{"type":"string","minLength":1,"description":"User-chosen deployment name. Must be unique within the deployment group; the manager returns 409 on collision."},"resourcePrefix":{"allOf":[{"$ref":"#/components/schemas/ResourcePrefix"},{"description":"Stable physical-name prefix used by the setup artifact."}]},"sourceKind":{"$ref":"#/components/schemas/ImportSourceKind"},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup source metadata needed to guide privileged teardown."}]},"releaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release that produced the setup artifact. Defaults to latest.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Cloud platform of the imported stack"},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"region":{"type":"string","description":"Region or location reported by the setup artifact"},"setupTarget":{"allOf":[{"$ref":"#/components/schemas/SetupTarget"},{"description":"Setup target this package was generated for"}]},"setupImportFormatVersion":{"$ref":"#/components/schemas/SetupImportFormatVersion"},"setupFingerprint":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprint"},{"description":"Setup compatibility fingerprint embedded in the package"}]},"setupFingerprintVersion":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintVersion"},{"description":"Setup fingerprint algorithm version embedded in the package"}]},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ImportedResource"},"minItems":1}},"required":["deploymentName","resourcePrefix","platform","region","setupTarget","setupImportFormatVersion","setupFingerprint","setupFingerprintVersion","stackSettings","resources"],"description":"Resolved setup import payload"},"ImportSourceKind":{"type":"string","enum":["cloudformation","terraform","helm"],"description":"Source label for observability only — does not affect import behavior."},"KubernetesBasePlatform":{"type":"string","enum":["aws","gcp","azure"],"description":"Base cloud platform for cloud-backed Kubernetes imports."},"SetupImportFormatVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup import payload format version embedded in the package"},"ImportedResource":{"type":"object","properties":{"id":{"type":"string","description":"Resource id from the active stack"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"importData":{"type":"object","additionalProperties":{"nullable":true},"description":"Resolved typed import payload"}},"required":["id","type","importData"]},"PersistImportedDeploymentRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["persist"]},"name":{"type":"string","minLength":1,"description":"Deployment name. Must be unique within the deployment group."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"stackState":{"nullable":true},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"runtimeMetadata":{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},"scheduleReconciliation":{"type":"boolean","default":false},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"default":"provisioning","description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"currentReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"setupMetadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"setupTarget":{"$ref":"#/components/schemas/SetupTarget"},"setupFingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"setupFingerprintVersion":{"$ref":"#/components/schemas/SetupFingerprintVersion"},"deploymentToken":{"type":"string"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["mode","name","deploymentGroupId","managerId","platform","stackSettings","runtimeMetadata","deploymentProtocolVersion","setupTarget","setupFingerprint","setupFingerprintVersion"]},"SetFirstPartyDeploymentInputsResponse":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"SetFirstPartyDeploymentInputsRequest":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["platform"]},"SetupRegistrationOperationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"status":{"$ref":"#/components/schemas/SetupRegistrationOperationStatus"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"physicalResourceId":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/SetupRegistrationOperationResult"},"error":{"type":"object","nullable":true,"properties":{"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["message","retryable"]}},"required":["id","action","sourceKind","status","deploymentId","physicalResourceId","result","error"]},"SetupRegistrationAction":{"type":"string","enum":["create","update","delete"]},"SetupRegistrationOperationStatus":{"type":"string","enum":["pending","processing","waiting-for-handoff","succeeded","failed","responding","responded"]},"SetupRegistrationOperationResult":{"type":"object","nullable":true,"properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deploymentToken":{"type":"string","nullable":true},"helmValues":{"type":"string","nullable":true}},"required":["deploymentId","deploymentToken","helmValues"]},"CreateSetupRegistrationOperationRequest":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"source":{"allOf":[{"$ref":"#/components/schemas/ImportSource"}],"nullable":true},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":512},"cloudFormation":{"$ref":"#/components/schemas/SetupRegistrationCloudFormationTarget"}},"required":["action","sourceKind"],"additionalProperties":false},"SetupRegistrationCloudFormationTarget":{"type":"object","nullable":true,"properties":{"stackId":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"logicalResourceId":{"type":"string","minLength":1},"responseUrl":{"type":"string","format":"uri"},"physicalResourceId":{"type":"string","nullable":true,"minLength":1},"serviceTimeoutSeconds":{"type":"integer","minimum":60,"maximum":7200,"default":3300}},"required":["stackId","requestId","logicalResourceId","responseUrl"],"additionalProperties":false},"DeleteDeploymentResponse":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]},"message":{"type":"string"}},"required":["action","message"]},"DeleteDeploymentRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]}},"required":["action"]},"PinReleaseRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release ID to pin the deployment to. Set to null to unpin and use active release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for pinning/unpinning deployment release"},"DeploymentInputsResponse":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"description":"Current non-secret input values. Secret values are never returned."},"providedInputIds":{"type":"array","items":{"type":"string"},"description":"Input IDs that currently have a value, including redacted secrets."}},"required":["inputs","values","providedInputIds"]},"UpdateDeploymentInputsResponse":{"allOf":[{"$ref":"#/components/schemas/DeploymentInputsResponse"},{"type":"object","properties":{"runtimeUpdateRequested":{"type":"boolean"}},"required":["runtimeUpdateRequested"]}]},"UpdateDeploymentInputsRequest":{"type":"object","properties":{"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"clearInputIds":{"type":"array","items":{"type":"string"},"default":[]}},"additionalProperties":false},"UpdateDeploymentEnvironmentVariablesRequest":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"type":{"type":"string","enum":["plain","secret"],"description":"Variable type"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources)"}},"required":["name","value","type"]},"description":"Environment variables for the deployment"}},"required":["variables"],"additionalProperties":false,"description":"Request schema for updating deployment environment variables"},"CreateDeploymentTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The generated deployment token (only shown once)"},"deploymentId":{"type":"string","description":"The deployment ID that this token is scoped to"}},"required":["token","deploymentId"]},"CreateDeploymentTokenRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128,"description":"Optional description for the deployment token"},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiration date for the deployment token"}},"required":["description"]},"CreateManagerResponse":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["pending"]},"setupToken":{"type":"string"},"setupTokenId":{"type":"string"},"deploymentLink":{"type":"string"},"setupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["plain","secret"]},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["name","type","targetResources"]}}},"required":["metadata","policy","environmentVariables"]},"setup":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["cloudformation"]},"deploymentPortalUrl":{"type":"string"},"launchUrl":{"type":"string"},"templateUrl":{"type":"string"},"stackName":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","launchUrl","templateUrl","stackName","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["google-oauth"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"oauthStartUrl":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","oauthStartUrl","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["terraform"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"providerSource":{"type":"string"},"moduleSource":{"type":"string"},"moduleVersion":{"type":"string"},"moduleInputs":{"type":"object","additionalProperties":{"type":"string"}},"mainTf":{"type":"string"},"tfvars":{"type":"string"},"commands":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","providerSource","moduleSource","moduleInputs","mainTf","tfvars","commands","stackSettings"]}]}},"required":["managerId","setupStatus","setupToken","setupTokenId","deploymentLink","setupConfig","setup"]},"NewManagerRequest":{"type":"object","properties":{"name":{"type":"string"},"cloud":{"$ref":"#/components/schemas/PrivateManagerCloud"},"region":{"type":"string","minLength":1,"maxLength":64,"description":"Cloud region for the manager."},"setupMethod":{"$ref":"#/components/schemas/PrivateManagerSetupMethod"},"network":{"type":"string","enum":["create","default"],"description":"Optional network mode for the private-manager setup. Defaults to create for production isolation; default uses the provider default network for faster dev/test setup."},"otlpConfig":{"type":"object","properties":{"logsEndpoint":{"type":"string","format":"uri","description":"External OTLP logs endpoint (e.g. https://api.axiom.co/v1/logs)"},"logsAuthHeader":{"type":"string","description":"Auth header in 'key=value,...' format (e.g. 'authorization=Bearer ,x-axiom-dataset=')"}},"required":["logsEndpoint","logsAuthHeader"],"description":"Optional external OTLP config for forwarding logs to Axiom, Datadog, etc. Falls back to built-in DeepStore when not set."}},"required":["name","cloud","region"]},"PrivateManagerCloud":{"type":"string","enum":["aws","gcp","azure"],"description":"Cloud where the private manager will be deployed."},"PrivateManagerSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform"],"description":"Optional setup method. Defaults to cloudformation for AWS, google-oauth for GCP, and terraform for Azure."},"ManagerRetryResponse":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/CreateManagerResponse"},{"type":"object","properties":{"mode":{"type":"string","enum":["setup"]}},"required":["mode"]}]},{"$ref":"#/components/schemas/ManagerRetryDeploymentResponse"}]},"ManagerRetryDeploymentResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["deployment"]},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["provisioning"]},"deploymentId":{"type":"string"},"message":{"type":"string"}},"required":["mode","managerId","setupStatus","deploymentId","message"]},"Manager":{"type":"object","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for the manager"}]},"name":{"type":"string","description":"Display name of the manager"},"targets":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms this manager can handle"},"cloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where this private manager is deployed"},"region":{"type":"string","nullable":true,"description":"Cloud region selected for this private manager"},"setupStatus":{"type":"string","nullable":true,"enum":["pending","provisioning","active","failed","deleting","deleted",null],"description":"Private manager setup lifecycle status"},"url":{"type":"string","nullable":true,"format":"uri","description":"Manager URL (self-reported via heartbeat). DeepStore endpoints are exposed through this URL (e.g., {url}/v1/logs)"},"managementConfigs":{"$ref":"#/components/schemas/ManagerManagementConfigs"},"isSystem":{"type":"boolean","description":"Whether this is a system manager (Alien-hosted)"},"workspaceId":{"type":"string","description":"The workspace ID (for system managers, this is ALIEN_WORKSPACE_ID)"},"status":{"$ref":"#/components/schemas/ManagerStatus"},"version":{"type":"string","nullable":true,"description":"Manager version (self-reported via heartbeat)"},"metrics":{"type":"object","nullable":true,"properties":{"activeDeployments":{"type":"number","description":"Number of active deployments"},"pendingDeployments":{"type":"number","description":"Number of pending deployments"},"memoryUsageMb":{"type":"number","description":"Memory usage in megabytes"},"cpuUsagePercent":{"type":"number","description":"CPU usage percentage"}},"description":"Runtime metrics (self-reported via heartbeat)"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the manager"},"logsDatabaseId":{"type":"string","nullable":true,"description":"ID of the logs database associated with this manager"},"managedDeploymentCount":{"type":"integer","minimum":0,"description":"Number of deployments currently being managed by this manager"},"defaultProjectCount":{"type":"integer","minimum":0,"description":"Number of projects that select this manager as a default manager"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the manager was created"}},"required":["id","name","targets","managementConfigs","isSystem","workspaceId","status","managedDeploymentCount","defaultProjectCount","createdAt"],"description":"Manager schema"},"ManagerManagementConfigs":{"type":"object","properties":{"aws":{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"},"platform":{"type":"string","enum":["aws"]}},"required":["managingRoleArn","platform"]},"gcp":{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"},"platform":{"type":"string","enum":["gcp"]}},"required":["serviceAccountEmail","platform"]},"azure":{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."},"platform":{"type":"string","enum":["azure"]}},"required":["managingTenantId","oidcIssuer","oidcSubject","platform"]},"kubernetes":{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}},"description":"Per-platform management configurations for cross-account access (self-reported via heartbeat)"},"ManagerStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"],"description":"Current health status"},"ManagerDomainBindingResponse":{"type":"object","properties":{"managerDomainBinding":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["managerDomainBinding"]},"UpdateManagerDomainBinding":{"type":"object","properties":{"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"}},"additionalProperties":false},"UpdateManagerRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Optional release ID to update to. If not provided, the active release will be chosen","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for updating a manager to a new release"},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"debugSessionId":{"type":"string","nullable":true,"pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"data":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["LoadingConfiguration"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["Finished"]}},"required":["type"]},{"type":"object","properties":{"stack":{"type":"string","description":"Name of the stack being built"},"type":{"type":"string","enum":["BuildingStack"]}},"required":["stack","type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform being targeted"},"stack":{"type":"string","description":"Name of the stack being checked"},"type":{"type":"string","enum":["RunningPreflights"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"targetTriple":{"type":"string","description":"Target triple for the runtime"},"type":{"type":"string","enum":["DownloadingAlienRuntime"]},"url":{"type":"string","description":"URL being downloaded from"}},"required":["targetTriple","type","url"]},{"type":"object","properties":{"relatedResources":{"type":"array","items":{"type":"string"},"description":"All resource names sharing this build (for deduped container groups)"},"resourceName":{"type":"string","description":"Name of the resource being built"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["BuildingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being built"},"type":{"type":"string","enum":["BuildingImage"]}},"required":["image","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being pushed"},"progress":{"oneOf":[{"type":"object","properties":{"bytesUploaded":{"type":"integer","minimum":0,"description":"Bytes uploaded so far"},"layersUploaded":{"type":"integer","minimum":0,"description":"Number of layers uploaded so far"},"operation":{"type":"string","description":"Current operation being performed"},"totalBytes":{"type":"integer","minimum":0,"description":"Total bytes to upload"},"totalLayers":{"type":"integer","minimum":0,"description":"Total number of layers to upload"}},"required":["bytesUploaded","layersUploaded","operation","totalBytes","totalLayers"],"description":"Progress information for image push operations"},{"nullable":true}]},"type":{"type":"string","enum":["PushingImage"]}},"required":["image","type"]},{"type":"object","properties":{"destination":{"type":"string","nullable":true,"description":"Human-readable destination for pushed images"},"platform":{"type":"string","description":"Target platform"},"stack":{"type":"string","description":"Name of the stack being pushed"},"type":{"type":"string","enum":["PushingStack"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"resourceName":{"type":"string","description":"Name of the resource being pushed"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["PushingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"project":{"type":"string","description":"Project name"},"type":{"type":"string","enum":["CreatingRelease"]}},"required":["project","type"]},{"type":"object","properties":{"language":{"type":"string","description":"Language being compiled (rust, typescript, etc.)"},"progress":{"type":"string","nullable":true,"description":"Current progress/status line from the build output"},"type":{"type":"string","enum":["CompilingCode"]}},"required":["language","type"]},{"type":"object","properties":{"nextState":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},"suggestedDelayMs":{"type":"integer","nullable":true,"minimum":0,"description":"An suggested duration to wait before executing the next step."},"type":{"type":"string","enum":["StackStep"]}},"required":["nextState","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["GeneratingCloudFormationTemplate"]}},"required":["type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform for which the template is being generated"},"type":{"type":"string","enum":["GeneratingTemplate"]}},"required":["platform","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being provisioned"},"releaseId":{"type":"string","description":"ID of the release being deployed to the agent"},"type":{"type":"string","enum":["ProvisioningAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being updated"},"releaseId":{"type":"string","description":"ID of the new release being deployed to the agent"},"type":{"type":"string","enum":["UpdatingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being deleted"},"releaseId":{"type":"string","description":"ID of the release that was running on the agent"},"type":{"type":"string","enum":["DeletingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being debugged"},"debugSessionId":{"type":"string","description":"ID of the debug session"},"type":{"type":"string","enum":["DebuggingAgent"]}},"required":["agentId","debugSessionId","type"]},{"type":"object","properties":{"strategyName":{"type":"string","description":"Name of the deployment strategy being used"},"type":{"type":"string","enum":["PreparingEnvironment"]}},"required":["strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being deployed"},"type":{"type":"string","enum":["DeployingStack"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being tested"},"type":{"type":"string","enum":["RunningTestWorker"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpStack"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpEnvironment"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"platformName":{"type":"string","description":"Name of the platform (e.g., \"AWS\", \"GCP\")"},"type":{"type":"string","enum":["SettingUpPlatformContext"]}},"required":["platformName","type"]},{"type":"object","properties":{"repositoryName":{"type":"string","description":"Name of the docker repository"},"type":{"type":"string","enum":["EnsuringDockerRepository"]}},"required":["repositoryName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeployingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"roleArn":{"type":"string","description":"ARN of the role to assume"},"type":{"type":"string","enum":["AssumingRole"]}},"required":["roleArn","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"type":{"type":"string","enum":["ImportingStackStateFromCloudFormation"]}},"required":["cfnStackName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeletingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"bucketNames":{"type":"array","items":{"type":"string"},"description":"Names of the S3 buckets being emptied"},"type":{"type":"string","enum":["EmptyingBuckets"]}},"required":["bucketNames","type"]},{"type":"object","properties":{"deploymentGroupId":{"type":"string","description":"ID of the deployment group this slot belongs to"},"deploymentId":{"type":"string","description":"ID of the deployment that was created"},"releaseId":{"type":"string","nullable":true,"description":"Initial release the slot was created with, if any"},"type":{"type":"string","enum":["DeploymentCreated"]}},"required":["deploymentGroupId","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousReleaseId":{"type":"string","nullable":true,"description":"ID of the release that was previously live, if any"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentReleased"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release the platform was trying to deploy, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"phase":{"type":"string","enum":["preflights","provisioning","updating","deleting"],"description":"Phase of a deployment at which a failure occurred.\n\nDerived from the source deployment status: `preflights-failed` →\n`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →\n`Updating`, `delete-failed` → `Deleting`.\n`refresh-failed` is modelled separately via `DeploymentDegraded`."},"type":{"type":"string","enum":["DeploymentFailed"]}},"required":["deploymentId","error","phase","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"type":{"type":"string","enum":["DeploymentDegraded"]}},"required":["deploymentId","error","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentRecovered"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment that was deleted"},"type":{"type":"string","enum":["DeploymentDeleted"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release that the failed attempt was targeting, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"previousError":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"type":{"type":"string","enum":["DeploymentRetryRequested"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release being redeployed"},"type":{"type":"string","enum":["DeploymentRedeployRequested"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"pinnedReleaseId":{"type":"string","description":"ID of the release that is now pinned"},"previousPinnedReleaseId":{"type":"string","nullable":true,"description":"ID of the previously pinned release, if any"},"type":{"type":"string","enum":["DeploymentReleasePinned"]}},"required":["deploymentId","pinnedReleaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousPinnedReleaseId":{"type":"string","description":"ID of the release that was previously pinned"},"type":{"type":"string","enum":["DeploymentReleaseUnpinned"]}},"required":["deploymentId","previousPinnedReleaseId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"changedKeys":{"type":"array","items":{"type":"string"},"description":"Names of the environment variables that changed (added, removed, or modified)"},"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentEnvironmentUpdated"]}},"required":["changedKeys","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentDeletionRequested"]}},"required":["deploymentId","type"]}]},"state":{"oneOf":[{"type":"object","properties":{"failed":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]}},"description":"Event failed with an error"}},"required":["failed"]},{"type":"string","enum":["none"]},{"type":"string","enum":["started"]},{"type":"string","enum":["success"]}],"description":"Represents the state of an event"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","data","state","projectId","createdAt","workspaceId"]},"GenerateManagerTokenResponse":{"type":"object","properties":{"accessToken":{"type":"string","description":"Platform JWT for authenticating with the manager"},"expiresIn":{"type":"number","nullable":true,"description":"Token lifetime in seconds"},"tokenType":{"type":"string","enum":["Bearer"]},"managerUrl":{"type":"string","description":"Manager URL for direct access"},"databaseId":{"type":"string","nullable":true,"description":"Log database ID (null if logs not configured)"},"controlPlaneUrl":{"type":"string","nullable":true,"description":"Log control plane URL (null if logs not configured)"}},"required":["accessToken","expiresIn","tokenType","managerUrl","databaseId","controlPlaneUrl"]},"GenerateManagerTokenRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to scope token access to."}},"required":["project"]},"ResolveManagerGcpOAuthProviderResponse":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId","clientSecret"]}]},"ResolveManagerGcpOAuthProviderRequest":{"type":"object","properties":{"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group bearer token whose project-level OAuth provider should be resolved."},"returnOrigin":{"type":"string","format":"uri","description":"Browser origin that will receive the Google OAuth callback result. Must be a first-party dashboard origin or the active portal origin for the deployment group's project."}},"required":["deploymentGroupToken"]},"ManagerHeartbeatResponse":{"type":"object","properties":{"acknowledged":{"type":"boolean"},"timestamp":{"type":"string"}},"required":["acknowledged","timestamp"]},"ManagerHeartbeatRequest":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Current health status"},"version":{"type":"string","description":"Manager version"},"url":{"type":"string","format":"uri","description":"Manager public URL (for accessing DeepStore endpoints)"},"managementConfigs":{"allOf":[{"$ref":"#/components/schemas/ManagerManagementConfigs"},{"description":"Per-platform management configurations for cross-account access"}]},"metrics":{"type":"object","properties":{"activeDeployments":{"type":"number"},"pendingDeployments":{"type":"number"},"memoryUsageMb":{"type":"number"},"cpuUsagePercent":{"type":"number"}},"description":"Optional runtime metrics"}},"required":["status","url","managementConfigs"]},"ManagerDeployment":{"type":"object","properties":{"platform":{"type":"string","description":"Platform of the internal deployment"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status of the internal deployment"},"deploymentId":{"type":"string","description":"Internal deployment ID"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Currently deployed private manager release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Target private manager release for an in-progress update","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"error":{"nullable":true,"description":"Latest provision / upgrade / delete error"},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type"},"status":{"type":"string","description":"Resource status"},"outputs":{"type":"object","additionalProperties":{"nullable":true},"description":"Resource outputs"}},"required":["type","status"]},"description":"Simplified stack state resources"},"environmentInfo":{"nullable":true,"description":"Manager environment info"}},"required":["platform","status","deploymentId","resources"]},"PrepareOperatorManifestPackageResponse":{"type":"object","properties":{"package":{"$ref":"#/components/schemas/Package"}},"required":["package"]},"PrepareOperatorManifestPackageRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}},"required":["project"],"additionalProperties":false},"RenderOperatorManifestResponse":{"type":"object","properties":{"manifest":{"type":"string","description":"Rendered multi-document Kubernetes manifest"},"applyCommand":{"type":"string","description":"kubectl command for applying the manifest from a file"},"filename":{"type":"string","description":"Suggested local filename"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL embedded in the manifest"},"imagePending":{"type":"boolean","description":"True when the operator image is still building. The manifest contains a placeholder image () and must not be applied yet — re-render once the operator-image package is ready to get the real image."}},"required":["manifest","applyCommand","filename","managerUrl","imagePending"]},"RenderOperatorManifestRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"format":{"type":"string","enum":["raw","helm"],"default":"raw","description":"raw: a kubectl-applyable manifest for one cluster. helm: a paste-into-your-chart template whose namespace and environment name come from Helm at install time."},"environmentName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Per-environment identity. Required for raw output, ignored for helm.","example":"my-app"},"namespace":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$","description":"Namespace to observe and install into. Omit for helm to use the release namespace."},"scope":{"type":"string","enum":["namespace","cluster"],"default":"namespace","description":"namespace: a namespaced Role that manages the install namespace. cluster: a ClusterRole that manages every namespace."},"labelSelector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional Kubernetes label selector narrowing what is managed, applied within the scope."},"permission":{"type":"string","enum":["observe"],"default":"observe","description":"Operator permission tier"},"operatorImagePackageId":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Ready operator-image package to use for the Operator image. If omitted, the latest ready operator-image package for the project is used.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group token embedded in the operator Secret"},"logCollector":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"description":"Enable the node log collector DaemonSet for raw pod logs."}},"required":["project","deploymentGroupToken"],"additionalProperties":false},"APIKey":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["id","email","image"],"description":"User information associated with the API key"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig","createdByUser"],"description":"API key information"},"APIKeyDeploymentSetupConfig":{"type":"object","nullable":true,"properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDeploymentSetupEnvironmentVariable"}}},"required":["metadata","policy","environmentVariables"]},"APIKeyDeploymentSetupEnvironmentVariable":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]},"CreateAPIKeyResponse":{"type":"object","properties":{"apiKey":{"type":"string","description":"The generated API key value (only shown once)"},"keyInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig"]}},"required":["apiKey","keyInfo"],"description":"Response containing the new API key and its metadata"},"CreateAPIKeyRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"scope":{"$ref":"#/components/schemas/Scope"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"required":["description","scope","expiresAt"],"description":"Request schema for creating a new API key"},"Scope":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceScope"},{"$ref":"#/components/schemas/ProjectScope"},{"$ref":"#/components/schemas/DeploymentScope"},{"$ref":"#/components/schemas/DeploymentGroupScope"},{"$ref":"#/components/schemas/ManagerScope"}],"discriminator":{"propertyName":"type","mapping":{"workspace":"#/components/schemas/WorkspaceScope","project":"#/components/schemas/ProjectScope","deployment":"#/components/schemas/DeploymentScope","deployment-group":"#/components/schemas/DeploymentGroupScope","manager":"#/components/schemas/ManagerScope"}},"description":"Scope and role configuration for service accounts"},"WorkspaceScope":{"type":"object","properties":{"type":{"type":"string","enum":["workspace"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["type","role"],"description":"Workspace-scoped configuration"},"ProjectScope":{"type":"object","properties":{"type":{"type":"string","enum":["project"]},"projectId":{"type":"string","description":"ID of the project this is scoped to"},"role":{"$ref":"#/components/schemas/ProjectRole"}},"required":["type","projectId","role"],"description":"Project-scoped configuration"},"DeploymentScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"deploymentId":{"type":"string","description":"ID of the deployment this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"},"role":{"$ref":"#/components/schemas/DeploymentRole"}},"required":["type","deploymentId","projectId","role"],"description":"Deployment-scoped configuration"},"DeploymentGroupScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"]},"deploymentGroupId":{"type":"string","description":"ID of the deployment group this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"},"role":{"$ref":"#/components/schemas/DeploymentGroupRole"}},"required":["type","deploymentGroupId","projectId","role"],"description":"Deployment group-scoped configuration"},"ManagerScope":{"type":"object","properties":{"type":{"type":"string","enum":["manager"]},"managerId":{"type":"string","description":"ID of the manager this is scoped to"},"role":{"$ref":"#/components/schemas/ManagerRole"}},"required":["type","managerId","role"],"description":"Manager-scoped configuration"},"UpdateAPIKeyRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"deploymentSetupConfig":{"$ref":"#/components/schemas/UpdateDeploymentSetupPolicy"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"description":"Request schema for updating an API key"},"UpdateDeploymentSetupPolicy":{"type":"object","properties":{"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"}},"required":["policy"],"description":"Editable part of a deployment link's setup config. Locked env vars and input values are preserved."},"DeleteAPIKeysRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"minItems":1}},"required":["ids"]},"DomainWithUsage":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DomainEndpoint"}},"usage":{"type":"object","properties":{"deploymentUrlProjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"portalBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true},"hostname":{"type":"string"}},"required":["id","projectId","projectName","hostname"]}},"packageDomains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]}},"managerBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"managerId":{"type":"string"},"managerName":{"type":"string"},"hostname":{"type":"string"}},"required":["id","managerId","managerName","hostname"]}}},"required":["deploymentUrlProjects","portalBindings","packageDomains","managerBindings"]}},"required":["endpoints","usage"]}]},"Domain":{"type":"object","properties":{"id":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domain":{"type":"string"},"isSystem":{"type":"boolean"},"claimToken":{"type":"string"},"hostedZoneId":{"type":"string","nullable":true},"nameServers":{"type":"array","nullable":true,"items":{"type":"string"}},"status":{"type":"string","enum":["pending-zone-creation","pending-verification","verified","lost-verification","failed","deleting"]},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"verifiedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","workspaceId","domain","isSystem","claimToken","status","createdAt","updatedAt"]},"EventListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"releaseCreatedAt":{"type":"string","format":"date-time","description":"createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used"}}}]},"ListMachinesJoinTokensResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"}}},"required":["tokens"]},"MachinesJoinTokenSummary":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"maxJoins":{"type":"integer","nullable":true},"joinCount":{"type":"integer"},"lastUsedAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true}},"required":["id","createdAt","createdBy","joinCount"]},"CreateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RotateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RevokeMachinesJoinTokenResponse":{"type":"object","properties":{"tokenId":{"type":"string"},"revoked":{"type":"boolean"}},"required":["tokenId","revoked"]},"ListMachinesInventoryResponse":{"type":"object","properties":{"machines":{"type":"array","items":{"$ref":"#/components/schemas/MachinesInventoryItem"}}},"required":["machines"]},"MachinesInventoryItem":{"type":"object","properties":{"machineId":{"type":"string"},"status":{"type":"string"},"capacityGroup":{"type":"string"},"zone":{"type":"string"},"cpu":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"memory":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"storage":{"allOf":[{"$ref":"#/components/schemas/MachinesCapacityMetric"}],"nullable":true},"drainBlockers":{"type":"array","items":{"$ref":"#/components/schemas/MachinesDrainBlocker"}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"overlayIp":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"horizondVersion":{"type":"string","nullable":true},"localOverrides":{"type":"array","items":{"$ref":"#/components/schemas/MachinesLocalOverrideObservation"}},"localOverridesObservedAt":{"type":"string","nullable":true},"replicaCount":{"type":"integer"}},"required":["machineId","status","capacityGroup","zone","cpu","memory","drainBlockers","drainForce","lastHeartbeat","localOverrides","replicaCount"]},"MachinesCapacityMetric":{"type":"object","properties":{"allocated":{"type":"number"},"systemReserve":{"type":"number"},"total":{"type":"number"}},"required":["allocated","systemReserve","total"]},"MachinesDrainBlocker":{"type":"object","properties":{"reason":{"type":"string"},"workloadId":{"type":"string","nullable":true},"workloadName":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true},"schedulingMode":{"type":"string","nullable":true},"state":{"type":"string","nullable":true}},"required":["reason"]},"MachinesLocalOverrideObservation":{"type":"object","properties":{"activeDigest":{"type":"string","nullable":true},"actor":{"type":"string","nullable":true},"baseAssignmentHash":{"type":"string"},"baseDigest":{"type":"string","nullable":true},"candidateDigest":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"failureCategory":{"type":"string","nullable":true},"fallbackDigest":{"type":"string","nullable":true},"forcedStop":{"type":"boolean","nullable":true},"healthySince":{"type":"string","nullable":true},"incidentId":{"type":"string","nullable":true},"lifecycle":{"type":"string"},"phaseStartedAt":{"type":"string","nullable":true},"replicaId":{"type":"string"},"workloadName":{"type":"string"}},"required":["baseAssignmentHash","lifecycle","replicaId","workloadName"]},"CancelMachinesMachineDrainResponse":{"type":"object","properties":{"machineId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["machineId","cancelled"]},"DrainMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"requested":{"type":"boolean"}},"required":["machineId","requested"]},"DrainMachinesMachineRequest":{"type":"object","properties":{"deadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"force":{"type":"boolean"}}},"RemoveMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"removed":{"type":"boolean"}},"required":["machineId","removed"]},"CommandListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Command"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/CommandDeploymentInfo"},"project":{"$ref":"#/components/schemas/CommandProjectInfo"}}}]},"CommandDeploymentInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"$ref":"#/components/schemas/CommandDeploymentGroupInfo"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"managerId":{"type":"string","description":"Manager ID for obtaining access tokens"},"managerUrl":{"type":"string","nullable":true,"format":"uri","description":"URL of the manager for direct payload access"},"managerName":{"type":"string","nullable":true,"description":"Human-readable name of the manager"},"managerIsSystem":{"type":"boolean","nullable":true,"description":"Whether the manager is Alien-hosted (system)"}},"required":["id","name","managerId"]},"CommandDeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CommandProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string"}},"required":["id","name"]},"Command":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","description":"Command name (e.g., 'analyze-repository', 'sync-data')"},"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Command states in the Commands protocol lifecycle"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Delivery mode for this command (push/pull), derived from the target at creation time"},"target":{"type":"object","nullable":true,"properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to; null on commands created before target routing"},"attempt":{"type":"number","nullable":true,"description":"Current attempt number"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","nullable":true,"description":"Size of command params in bytes"},"responseSizeBytes":{"type":"number","nullable":true,"description":"Size of command response in bytes"},"createdAt":{"type":"string","format":"date-time","description":"When the command was created"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command was dispatched to the deployment"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command completed"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if command failed"},"result":{"nullable":true,"description":"Decoded command result when available"}},"required":["id","deploymentId","projectId","workspaceId","name","state","deploymentModel","target","attempt","deadline","requestSizeBytes","responseSizeBytes","createdAt","dispatchedAt","completedAt","error"]},"ListCommandNamesResponse":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ListCommandDeploymentsResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name"]}}},"required":["deployments"]},"CreateCommandResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"projectId":{"type":"string","description":"Project ID (for manager to use in routing)"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"How to dispatch the command"},"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to"},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How the command is delivered to its target"}},"required":["id","projectId","deploymentModel","target","deliveryMode"]},"CreateCommandRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Target deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Command name (e.g., 'analyze-repository')"},"params":{"nullable":true,"description":"Command parameters for public invocation"},"target":{"type":"string","maxLength":255,"description":"Resource id the command is addressed to. Required when the deployment has more than one command-capable resource."},"initialState":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Initial state (PENDING_UPLOAD if params require upload, PENDING if inline)"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Size of command params in bytes"}},"required":["deploymentId","name"]},"ResolvedCommandTarget":{"type":"object","properties":{"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Identifies the specific resource a command is addressed to."},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How a command is delivered to its target resource.\n\nThis is a Commands-protocol-specific concept and is intentionally distinct\nfrom `DeploymentModel` (see `stack_settings.rs`), which governs the\ninfrastructure-level push/pull wiring for a deployment. Serialized\nlowercase for consistency with `CommandTargetType`."}},"required":["target","deliveryMode"]},"UpdateCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"New command state"},"attempt":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Current attempt number"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command was dispatched"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}}},"DispatchCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"DispatchCommandRequest":{"type":"object","properties":{"dispatchedAt":{"type":"string","format":"date-time","description":"When the command was dispatched"}},"required":["dispatchedAt"]},"CompleteCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"CompleteCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["SUCCEEDED","FAILED","EXPIRED"],"description":"Terminal state to transition to"},"completedAt":{"type":"string","format":"date-time","description":"When the command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}},"required":["state","completedAt"]},"IncrementCommandAttemptResponse":{"type":"object","properties":{"attempt":{"type":"integer","description":"The attempt number after the increment"}},"required":["attempt"]},"DebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"DebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"owner":{"type":"string","nullable":true,"maxLength":128},"state":{"$ref":"#/components/schemas/DebugSessionState"},"mode":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"provider":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"presignedUrls":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DebugPackagePresignedURLs"}},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","state","mode","presignedUrls","createdAt","expiresAt","deploymentId","projectId","workspaceId"]},"DebugSessionState":{"type":"string","enum":["pending","running","stopping","stopped","expired","failed"]},"DebugPackagePresignedURLs":{"type":"object","properties":{"readUrl":{"type":"string","maxLength":2048,"format":"uri"},"writeUrl":{"type":"string","maxLength":2048,"format":"uri"}},"required":["readUrl","writeUrl"]},"CreateDebugSessionRequest":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Override the generated id. Manager passes the registry session id so logs correlate.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"owner":{"type":"string","nullable":true,"maxLength":128},"expiresAt":{"type":"string","format":"date-time"},"state":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Initial state. Defaults to 'pending'."}]}},"required":["deploymentId","expiresAt"]},"UpdateDebugSessionRequest":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/DebugSessionState"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"expiresAt":{"type":"string","format":"date-time"}}},"DeploymentInfo":{"type":"object","properties":{"tokenType":{"type":"string","enum":["deployment","deployment-group"],"description":"Type of token used to authenticate this request"},"deployment":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"required":["name","platform"],"description":"Deployment details (present when using a deployment-scoped token)"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"pinnedSubdomain":{"type":"string","nullable":true}},"required":["id","name","pinnedSubdomain"],"description":"Deployment group details (present when using a deployment-group token)"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatarUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name"]},"project":{"type":"object","properties":{"name":{"type":"string"},"portal":{"type":"object","properties":{"appearance":{"$ref":"#/components/schemas/DeploymentPortalAppearance"}},"required":["appearance"]},"stackSummary":{"type":"object","nullable":true,"properties":{"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms supported by the active release"},"requiresNetwork":{"type":"boolean","description":"Whether the stack contains resources that require cloud VPC networking"},"resourceCounts":{"type":"object","properties":{"workers":{"type":"integer","minimum":0},"containers":{"type":"integer","minimum":0},"publicHttpsEndpoints":{"type":"integer","minimum":0,"description":"Resources that declare managed public HTTPS endpoint setup"},"externalInfra":{"type":"integer","minimum":0,"description":"Storage, queue, KV, vault, database, or cache resources that Kubernetes needs Terraform to provision"},"total":{"type":"integer","minimum":0}},"required":["workers","containers","publicHttpsEndpoints","externalInfra","total"]},"publicEndpoints":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"endpointName":{"type":"string"},"hostLabel":{"type":"string"},"wildcardSubdomains":{"type":"boolean"}},"required":["resourceId","endpointName","hostLabel","wildcardSubdomains"]},"description":"Public endpoints declared by the active release stack"}},"required":["platforms","requiresNetwork","resourceCounts","publicEndpoints"]},"generatedDomain":{"type":"object","nullable":true,"properties":{"domain":{"type":"string"},"isSystem":{"type":"boolean"}},"required":["domain","isSystem"],"description":"Parent domain for generated deployment URLs. Chosen public subdomains are only allowed when isSystem is false."}},"required":["name","portal"]},"packages":{"type":"object","properties":{"ready":{"type":"boolean","description":"True if all enabled packages are ready for deployment"},"cli":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"commandName":{"type":"string","description":"CLI command name to use in install instructions"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},"error":{"nullable":true},"installScripts":{"type":"object","properties":{"windows":{"type":"string","format":"uri"},"mac":{"type":"string","format":"uri"},"linux":{"type":"string","format":"uri"}},"required":["windows","mac","linux"],"description":"Install script URLs for each OS"}},"required":["status","commandName","installScripts"]},"cloudformation":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},"error":{"nullable":true},"mode":{"type":"string","enum":["auto","outputs"]},"launchUrl":{"type":"string","format":"uri","description":"CloudFormation launch URL"},"outputsSchema":{"nullable":true}},"required":["status","mode","launchUrl"]},"terraform":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},"error":{"nullable":true},"providerSource":{"type":"string","description":"Terraform provider source (without https://)"},"moduleSources":{"type":"object","additionalProperties":{"type":"string"},"description":"Terraform module sources by target"},"moduleVersion":{"type":"string"},"managerUrls":{"type":"object","additionalProperties":{"type":"string"},"description":"Manager URLs by Terraform target"}},"required":["status","providerSource","moduleSources","managerUrls"]},"helm":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},"error":{"nullable":true},"chartRef":{"type":"string","description":"OCI chart reference"},"managerFetchExample":{"type":"string"},"localImportExample":{"type":"string"}},"required":["status","chartRef"]}},"required":["ready"]},"installContext":{"type":"object","properties":{"targets":{"type":"object","additionalProperties":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managerUrl":{"type":"string","format":"uri"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"awsManagingAccountId":{"type":"string"}},"required":["platform","managerUrl"]},"description":"Deployment-session install context by Terraform/installer target"}},"required":["targets"]},"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"},"setupConfig":{"$ref":"#/components/schemas/DeploymentInfoSetupConfig"},"readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ready","notReady","unknown"]},"checks":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["passed","failed","warning","unknown"]},"message":{"type":"string"},"checkedAt":{"type":"string"}},"required":["code","status","message","checkedAt"]}}},"required":["status","checks"]}},"required":["tokenType","workspace","project","packages","installContext","supportedRegions"]},"DeploymentPortalAppearance":{"type":"object","properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}}},"SupportedCloudRegions":{"type":"object","properties":{"aws":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by this Alien environment."},"gcp":{"type":"array","items":{"type":"string"},"description":"GCP regions supported by this Alien environment."},"azure":{"type":"array","items":{"type":"string"},"description":"Azure locations supported by this Alien environment."}},"required":["aws","gcp","azure"]},"DeploymentInfoSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]}},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"inputValues":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedStackInputSummary"}}},"required":["metadata","policy","environmentVariables"]},"ResolvedStackInputSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"]}},"required":{"type":"boolean"},"secret":{"type":"boolean"},"provided":{"type":"boolean"}},"required":["id","label","providedBy","required","secret","provided"]},"DeploymentComputePlan":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"poolId":{"type":"string"},"workloads":{"type":"array","items":{"type":"string"}},"requirements":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"scale":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"machines":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","machines"]},{"type":"object","properties":{"type":{"type":"string","enum":["autoscale"]},"min":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]},"max":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","min","max"]}]},"selected":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"recommended":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"machines":{"type":"array","items":{"type":"object","properties":{"machine":{"type":"string"},"profile":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"recommended":{"type":"boolean"}},"required":["machine","profile","recommended"]}},"errors":{"type":"array","items":{"type":"string"}}},"required":["poolId","workloads","requirements","scale","selected","recommended","machines"]}}},"required":["pools"]},"PreparedDeploymentStack":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"setup":{"$ref":"#/components/schemas/SetupFingerprintInfo"}},"required":["platform","stack","setup"]},"SlackInstallUrlResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"SlackIntegrationStatus":{"type":"object","properties":{"connected":{"type":"boolean"},"slackTeamId":{"type":"string","nullable":true},"slackTeamName":{"type":"string","nullable":true},"installedByUserId":{"type":"string","nullable":true},"installedAt":{"type":"string","nullable":true},"notificationChannelId":{"type":"string","nullable":true}},"required":["connected","slackTeamId","slackTeamName","installedByUserId","installedAt","notificationChannelId"]},"SlackChannelsResponse":{"type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}}},"required":["channels"]},"SlackChannel":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isMember":{"type":"boolean"}},"required":["id","name","isMember"]},"SlackNotificationChannelResponse":{"type":"object","properties":{"notificationChannelId":{"type":"string","nullable":true},"warning":{"type":"string","nullable":true}},"required":["notificationChannelId","warning"]},"SlackNotificationChannelRequest":{"type":"object","properties":{"channelId":{"type":"string","nullable":true}},"required":["channelId"]},"AgentSessionListResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionListItem"}}},"required":["sessions"]},"AgentSessionListItem":{"type":"object","properties":{"id":{"type":"string"},"triggerType":{"type":"string"},"subjectId":{"type":"string"},"subject":{"$ref":"#/components/schemas/AgentSessionSubject"},"status":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","triggerType","subjectId","subject","status","createdAt","updatedAt"]},"AgentSessionSubject":{"type":"object","properties":{"deploymentName":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"releaseId":{"type":"string","nullable":true},"releaseCommitMessage":{"type":"string","nullable":true},"releaseCommitRef":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true}},"required":["deploymentName","deploymentGroupId","deploymentGroupName","releaseId","releaseCommitMessage","releaseCommitRef","projectId","projectName"]},"AgentSessionDetail":{"allOf":[{"$ref":"#/components/schemas/AgentSessionListItem"},{"type":"object","properties":{"resultText":{"type":"string","nullable":true},"toolNames":{"type":"array","nullable":true,"items":{"type":"string"}},"error":{"type":"string","nullable":true},"pendingApproval":{"type":"object","nullable":true,"properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["resultText","toolNames","error","pendingApproval"]}]},"AgentSessionEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionEvent"}},"latestSeq":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["events","latestSeq","hasMore"]},"AgentSessionEvent":{"oneOf":[{"$ref":"#/components/schemas/AgentSessionStatusEvent"},{"$ref":"#/components/schemas/AgentSessionStepEvent"},{"$ref":"#/components/schemas/AgentSessionToolCallEvent"},{"$ref":"#/components/schemas/AgentSessionToolResultEvent"},{"$ref":"#/components/schemas/AgentSessionMarkdownEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalRequestedEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalGrantedEvent"},{"$ref":"#/components/schemas/AgentSessionRestartedEvent"},{"$ref":"#/components/schemas/AgentSessionEventsTruncatedEvent"}],"discriminator":{"propertyName":"type","mapping":{"status":"#/components/schemas/AgentSessionStatusEvent","step":"#/components/schemas/AgentSessionStepEvent","tool_call":"#/components/schemas/AgentSessionToolCallEvent","tool_result":"#/components/schemas/AgentSessionToolResultEvent","markdown":"#/components/schemas/AgentSessionMarkdownEvent","approval_requested":"#/components/schemas/AgentSessionApprovalRequestedEvent","approval_granted":"#/components/schemas/AgentSessionApprovalGrantedEvent","session_restarted":"#/components/schemas/AgentSessionRestartedEvent","events_truncated":"#/components/schemas/AgentSessionEventsTruncatedEvent"}}},"AgentSessionStatusEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["status"]},"payload":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionStepEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["step"]},"payload":{"type":"object","properties":{"stepId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["in_progress","complete","error"]}},"required":["stepId","title","status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolCallEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolResultEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_result"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string","nullable":true},"toolName":{"type":"string","nullable":true},"ok":{"type":"boolean"},"output":{"nullable":true}},"required":["toolCallId","toolName","ok"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionMarkdownEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["markdown"]},"payload":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalRequestedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_requested"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalGrantedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_granted"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"approvedByUserId":{"type":"string"},"approvedByName":{"type":"string","nullable":true},"source":{"type":"string","enum":["dashboard","slack"]}},"required":["approvalId","approvedByUserId","approvedByName","source"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionRestartedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["session_restarted"]},"payload":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionEventsTruncatedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["events_truncated"]},"payload":{"type":"object","properties":{"limit":{"type":"number"}},"required":["limit"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApproveResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"resumed":{"type":"boolean"}},"required":["jobId","status","resumed"]},"AgentSessionStopResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"canceled":{"type":"boolean"}},"required":["jobId","status","canceled"]},"SyncListResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"userEnvironmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"deploymentToken":{"type":"string","nullable":true},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId","userEnvironmentVariables"]}}},"required":["deployments"],"description":"Full deployment records for manager operation"},"SyncListRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. Manager-scoped tokens are always constrained to their own manager ID."}]},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to include"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment status"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by deployment platform"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Filter by deployment group ID","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum records to return"}},"additionalProperties":false,"description":"Request to list full operational deployments"},"SyncAcquireResponseDeployment":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Deployment group ID the deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method recorded on the deployment when it has a setup-owned path."}]},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state (includes releases)"},"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration"}},"required":["deploymentId","projectId","deploymentGroupId","current","config"]},"SyncContextRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the context. Manager-scoped tokens are constrained to their own manager ID."}]},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"SyncAcquireResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"},"description":"List of acquired deployments with deployment context"},"failures":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment that failed","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"error":{"allOf":[{"$ref":"#/components/schemas/APIError"},{"description":"Error that occurred during context building"}]}},"required":["deploymentId","projectId","error"]},"description":"List of deployments that failed during context building (locks already released)"}},"required":["deployments","failures"],"description":"Acquired deployments and failures"},"SyncAcquireRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. If omitted, resolved from each deployment's managerId column."}]},"session":{"type":"string","description":"Unique session identifier for lock tracking"},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to lock (for Pull model sync)"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment statuses (default: all deployment statuses)"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by platforms (default: all platforms the Manager supports)"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Filter by setup method for setup-owned acquisition paths"}]},"acquireMode":{"type":"string","enum":["runtime","setup-run","setup-teardown"],"description":"Phase ownership mode for deployment acquisition"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model from stackSettings.deploymentModel."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of deployments to acquire (default: 10)"}},"required":["session","deploymentModel"],"additionalProperties":false,"description":"Request to acquire deployments for processing"},"SyncReconcileResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the state was reconciled"},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state after reconciliation"},"target":{"type":"object","properties":{"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration\n\nConfiguration for how to perform the deployment.\nNote: Credentials (ClientConfig) are passed separately to step() function."},"releaseInfo":{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."}},"required":["config","releaseInfo"],"description":"Target deployment if update is needed"}},"required":["success","current"],"description":"State reconciliation result with optional target"},"SyncReconcileRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to reconcile state for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Lock session (push model only) - verifies lock ownership"},"state":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Complete deployment state after step() execution"},"updateHeartbeat":{"type":"boolean","description":"Update heartbeat timestamp (for successful health checks)"},"suggestedDelayMs":{"type":"integer","minimum":0,"description":"Delay before this deployment should be acquired again."},"resourceHeartbeats":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"description":"Latest typed resource heartbeats collected during this step."},"observedInventoryBatches":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"],"description":"Backend whose observer produced this snapshot."},"complete":{"type":"boolean","description":"Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`."},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inventoryScope":{"type":"string","description":"Stable scope for the provider list operation that produced this batch."},"observedAt":{"type":"string","format":"date-time","description":"Time the inventory scope was observed."},"resources":{"type":"array","items":{"type":"object","properties":{"alienResourceId":{"type":"string","nullable":true},"attributes":{"type":"object","properties":{},"additionalProperties":{"nullable":true}},"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"counts":{"oneOf":[{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},{"nullable":true}]},"deploymentId":{"type":"string","nullable":true},"displayName":{"type":"string"},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerKind":{"type":"string","description":"Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type."},"providerStale":{"type":"boolean"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"rawIdentity":{"type":"string","description":"Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc."},"region":{"type":"string","nullable":true},"resourceTypeHint":{"oneOf":[{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},{"nullable":true}]},"scope":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"description":"Release/version identity observed from the provider resource, when available."}},"required":["displayName","health","lifecycle","partial","providerKind","providerStale","rawIdentity"]}},"sourceKind":{"type":"string","description":"Writer/source for this inventory pass, such as `operator` or\n`manager-observer`."}},"required":["backend","complete","controllerPlatform","inventoryScope","observedAt","resources","sourceKind"]},"description":"Observed raw-resource inventory batches read during this step."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Operator-reported runtime capabilities."},"operatorVersion":{"type":"string","minLength":1,"maxLength":128,"description":"Operator binary version reported by the runtime."}},"required":["deploymentId","state"],"additionalProperties":false,"description":"Request to reconcile deployment state"},"SyncReleaseRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to release","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Session identifier to release"}},"required":["deploymentId","session"],"additionalProperties":false,"description":"Request to release deployment lock"},"ResolveResponse":{"type":"object","properties":{"managerId":{"type":"string","description":"Manager ID"},"managerName":{"type":"string","description":"Manager display name"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL"},"managerIsSystem":{"type":"boolean","description":"Whether the manager is Alien-hosted"},"managerCloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where the private manager is hosted. Null for Alien-hosted managers."},"projectId":{"type":"string","description":"Resolved project ID"},"installContext":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}},"required":["platform","managementConfig"],"description":"Target install context derived from platform-managed manager metadata. Present for cloud push platforms."}},"required":["managerId","managerName","managerUrl","managerIsSystem","projectId"]},"CloudRegionsResponse":{"type":"object","properties":{"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"}},"required":["supportedRegions"]},"BillingAuditLogRow":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"action":{"type":"string"},"payload":{"nullable":true},"createdAt":{"type":"string"}},"required":["id","workspaceId","action","createdAt"]},"WorkspaceBillingEntitlements":{"type":"object","properties":{"planId":{"$ref":"#/components/schemas/PlanId"},"planStatus":{"$ref":"#/components/schemas/BillingPlanStatus"},"features":{"$ref":"#/components/schemas/BillingFeatureFlags"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"syncedAt":{"type":"string","nullable":true,"format":"date-time"},"stale":{"type":"boolean"}},"required":["planId","planStatus","features","limits","syncedAt","stale"]},"PlanId":{"type":"string","enum":["starter","pro","pro_annual","enterprise"]},"BillingPlanStatus":{"type":"string","enum":["active","trialing","past_due","canceled","none"]},"BillingFeatureFlags":{"type":"object","properties":{"custom_domains":{"type":"boolean"},"private_managers":{"type":"boolean"},"sso_saml":{"type":"boolean"},"audit_logs":{"type":"boolean"},"airgapped":{"type":"boolean"}},"required":["custom_domains","private_managers","sso_saml","audit_logs","airgapped"]},"BillingLimits":{"type":"object","properties":{"maxDeployments":{"type":"number","nullable":true},"maxProjects":{"type":"number","nullable":true},"maxSeats":{"type":"number","nullable":true},"maxCustomDomains":{"type":"number","nullable":true},"creditUsd":{"type":"number","nullable":true},"seatsIncluded":{"type":"number","nullable":true}},"required":["maxDeployments","maxProjects","maxSeats","maxCustomDomains","creditUsd","seatsIncluded"]}},"parameters":{}},"paths":{"/v1/invitations/{token}":{"get":{"operationId":"getWorkspaceInvitationPreview","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationPreview"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/memberships":{"get":{"operationId":"listMemberships","description":"List all workspaces the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listMemberships","responses":{"200":{"description":"List of user's workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile":{"get":{"operationId":"getUserProfile","description":"Get the current user's profile and user-scoped onboarding state.","x-speakeasy-group":"user","x-speakeasy-name-override":"getProfile","responses":{"200":{"description":"User profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateUserProfile","description":"Update the current user's profile (display name).","x-speakeasy-group":"user","x-speakeasy-name-override":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"}}}}}},"responses":{"200":{"description":"Profile updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile/setup":{"post":{"operationId":"completeUserProfileSetup","description":"Complete the required beta intake and profile setup dialog.","x-speakeasy-group":"user","x-speakeasy-name-override":"completeProfileSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileSetupRequest"}}}},"responses":{"200":{"description":"Profile setup completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/workspaces":{"post":{"operationId":"createWorkspace","description":"Create a new workspace. The current user will be automatically added as an admin.","x-speakeasy-group":"user","x-speakeasy-name-override":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name"},"logoUrl":{"type":"string","format":"uri","description":"Optional workspace logo URL"}},"required":["name"]}}}},"responses":{"201":{"description":"Created workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Bad request - invalid workspace name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Workspace name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces":{"get":{"operationId":"listGitNamespaces","description":"List all git namespaces (GitHub installations) the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaces","parameters":[{"schema":{"type":"string","enum":["github"],"default":"github"},"required":false,"name":"provider","in":"query"}],"responses":{"200":{"description":"List of user's git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/sync":{"post":{"operationId":"syncGitNamespaces","description":"Sync git namespaces from the provider. For GitHub, this fetches all app installations accessible to the user.","x-speakeasy-group":"user","x-speakeasy-name-override":"syncGitNamespaces","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"description":"Git provider to sync"}},"required":["provider"]}}}},"responses":{"200":{"description":"Synced git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/{id}/repositories":{"get":{"operationId":"listGitNamespaceRepositories","description":"List repositories accessible through a git namespace (GitHub installation).","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaceRepositories","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","description":"Search query to filter repositories by name"},"required":false,"description":"Search query to filter repositories by name","name":"search","in":"query"}],"responses":{"200":{"description":"List of repositories.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitRepository"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Git namespace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/invitations/{token}/accept":{"post":{"operationId":"acceptWorkspaceInvitation","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptWorkspaceInvitationResponse"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","description":"Get the current authenticated principal (user or service account). Works with both session cookies and API keys.","x-speakeasy-group":"auth","x-speakeasy-name-override":"whoami","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","example":"my-workspace"},"required":false,"description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Current authenticated principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subject"}}}},"400":{"description":"Missing required workspace for user credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","description":"Retrieve all workspaces.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search workspaces by name"},"required":false,"description":"Search workspaces by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","description":"Retrieve a workspace by ID.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspace","description":"Update a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"}}}}}},"responses":{"200":{"description":"Workspace updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteWorkspace","description":"Delete a workspace. The workspace must have no projects.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Workspace deleted successfully."},"400":{"description":"Workspace still has projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listWorkspaceMembers","description":"List all members of a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"listMembers","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"List of workspace members.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"addWorkspaceMember","description":"Add a member to a workspace by email. The user must already have an account.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"addMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of the user to add"},"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"Role to assign"}]}},"required":["email","role"]}}}},"responses":{"201":{"description":"Member added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"404":{"description":"Workspace or user not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"User is already a member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMember","description":"Update a workspace member's role.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"New role to assign"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Member role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"400":{"description":"Cannot remove last admin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"removeWorkspaceMember","description":"Remove a member from a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"removeMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Member removed successfully."},"400":{"description":"Cannot remove last admin or self.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/dismiss-onboarding":{"post":{"operationId":"dismissWorkspaceOnboarding","description":"Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"dismissOnboarding","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace with onboardingDismissedAt populated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/settings":{"get":{"operationId":"getWorkspaceSettings","description":"Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"getSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspaceSettings","description":"Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}}},"responses":{"200":{"description":"Updated ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations":{"get":{"operationId":"listWorkspaceInvitations","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Pending invitations.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvitation"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["email","role"]}}}},"responses":{"201":{"description":"Invitation created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"403":{"description":"Seat limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}/resend":{"post":{"operationId":"resendWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Invitation email sent again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}":{"delete":{"operationId":"revokeWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invitation revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invite-link":{"get":{"operationId":"getWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Active invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"createWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["role"]}}}},"responses":{"200":{"description":"Invite link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invite link revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","description":"Retrieve all projects.","x-speakeasy-group":"projects","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search projects by name"},"required":false,"description":"Search projects by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deploymentCount","latestRelease"]},"description":"Optional fields to include: deploymentCount, latestRelease"},"required":false,"description":"Optional fields to include: deploymentCount, latestRelease","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved projects.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createProject","description":"Create a new project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name"]}}}},"responses":{"201":{"description":"Project created successfully.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"}}}]}}}},"400":{"description":"Invalid request or GitHub repository connection failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}":{"get":{"operationId":"getProject","description":"Retrieve a project by ID or name.","x-speakeasy-group":"projects","x-speakeasy-name-override":"get","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateProject","description":"Update a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"update","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProject"}}}},"responses":{"200":{"description":"Project updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteProject","description":"Delete a project. The project must have no deployments.","x-speakeasy-group":"projects","x-speakeasy-name-override":"delete","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Project deleted successfully."},"400":{"description":"Project still has deployments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/gcp-oauth-provider":{"get":{"operationId":"getProjectGcpOAuthProvider","description":"Retrieve redacted project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateProjectGcpOAuthProvider","description":"Update project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"updateGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGcpOAuthProvider"}}}},"responses":{"200":{"description":"Google Cloud OAuth provider settings updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"400":{"description":"Invalid provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-portal-domain":{"get":{"operationId":"getProjectDeploymentPortalDomain","description":"Get the deployment portal domain binding for a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentPortalDomain","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved deployment portal domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPortalDomainResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/import-template":{"post":{"operationId":"createProjectFromTemplate","description":"Create a project by forking alienplatform/alien into your namespace, then configuring GitHub Actions.","x-speakeasy-group":"projects","x-speakeasy-name-override":"createFromTemplate","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"targetNamespace":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-]+$","description":"GitHub owner namespace (user or organization) that will receive the fork"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name","targetNamespace","templatePath"]}}}},"responses":{"201":{"description":"Project created successfully from template.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"},"template":{"type":"object","properties":{"sourceRepository":{"type":"string","enum":["alienplatform/alien"]},"forkRepository":{"type":"string","description":"Fork repository in / format"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"resolvedRootDirectory":{"type":"string"}},"required":["sourceRepository","forkRepository","templatePath","resolvedRootDirectory"]}},"required":["template"]}]}}}},"400":{"description":"Bad request or GitHub integration not installed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Fork exists but is not ready yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/template-urls":{"get":{"operationId":"getProjectTemplateUrls","description":"Get template URLs for deploying setup stacks in this project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getTemplateUrls","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Template URLs retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"aws":{"type":"object","nullable":true,"properties":{"templateUrl":{"type":"string","format":"uri","description":"URL to download the CloudFormation template"},"launchStackUrl":{"type":"string","format":"uri","description":"URL to launch the template in the AWS CloudFormation console"}},"required":["templateUrl","launchStackUrl"],"description":"Template URLs for deploying an AWS setup stack"}}}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-link-setup":{"get":{"operationId":"getProjectDeploymentLinkSetup","description":"Get the active release stack and portal-visible setup availability for deployment-link configuration.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentLinkSetup","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment-link setup retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLinkSetupResponse"}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/active-release":{"get":{"operationId":"getProjectActiveRelease","description":"Get the active release for this project. Returns the latest release, or the pinned release if deploymentId is provided and that deployment has a pinned release.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getActiveRelease","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Optional deployment ID to check for pinned release"},"required":false,"description":"Optional deployment ID to check for pinned release","name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Active release retrieved successfully.","content":{"application/json":{"schema":{"nullable":true}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups":{"post":{"operationId":"createDeploymentGroup","tags":["deployment-groups"],"summary":"Create a new deployment group","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group with this name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listDeploymentGroups","tags":["deployment-groups"],"summary":"List deployment groups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of deployment groups","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"}}}]},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/by-name":{"put":{"operationId":"ensureDeploymentGroupByName","tags":["deployment-groups"],"summary":"Get or create a deployment group by project and name","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureDeploymentGroupByNameRequest"}}}},"responses":{"200":{"description":"Deployment group returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}":{"get":{"operationId":"getDeploymentGroup","tags":["deployment-groups"],"summary":"Get deployment group details","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"}],"responses":{"200":{"description":"Deployment group details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"deploymentCount":{"type":"integer","description":"Current number of deployments in this deployment group"}},"required":["deploymentCount"]}]}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentGroup","tags":["deployment-groups"],"summary":"Update deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDeploymentGroup","tags":["deployment-groups"],"summary":"Delete deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Deployment group deleted successfully"},"400":{"description":"Cannot delete deployment group that has deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/tokens":{"post":{"operationId":"createDeploymentGroupToken","tags":["deployment-groups"],"summary":"Create deployment group token","description":"Creates a deployment-group scoped API key and returns both the token and formatted deployment link","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenRequest"}}}},"responses":{"200":{"description":"Deployment group token created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenResponse"}}}},"400":{"description":"Deployment setup configuration is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/first-party-session":{"post":{"operationId":"createFirstPartyDeploymentSession","tags":["deployment-groups"],"summary":"Create first-party deployment session","description":"Mints a short-lived deployment-group token with the recommended self-deploy policy for the authenticated developer.","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"First-party deployment session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirstPartyDeploymentSessionResponse"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages":{"get":{"operationId":"listPackages","description":"List packages with optional filters. Returns packages ordered by creation date (newest first).","x-speakeasy-group":"packages","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Filter by package type"},"required":false,"description":"Filter by package type","name":"type","in":"query"},{"schema":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Filter by package status"},"required":false,"description":"Filter by package status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search packages by type or version"},"required":false,"description":"Search packages by type or version","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of packages.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}":{"get":{"operationId":"getPackage","description":"Get details of a specific package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/rebuild":{"post":{"operationId":"rebuildPackages","description":"Rebuild packages for a project. This will cancel any pending packages and create new ones with auto-incremented versions.","x-speakeasy-group":"packages","x-speakeasy-name-override":"rebuild","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to rebuild packages for"}},"required":["project"]}}}},"responses":{"200":{"description":"Packages rebuilt successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"packagesCreated":{"type":"integer","description":"Number of packages created"}},"required":["packagesCreated"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}/cancel":{"post":{"operationId":"cancelPackage","description":"Cancel a pending or building package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"cancel","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package canceled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Package cannot be canceled (not in pending or building status).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases":{"get":{"operationId":"listReleases","description":"Retrieve all releases.","x-speakeasy-group":"releases","x-speakeasy-name-override":"list","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search releases by commit message, branch, SHA, or release ID"},"required":false,"description":"Search releases by commit message, branch, SHA, or release ID","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by git branch (commitRef)"},"required":false,"description":"Filter by git branch (commitRef)","name":"branch","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by commit author login or name"},"required":false,"description":"Filter by commit author login or name","name":"author","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created after this date (ISO 8601)"},"required":false,"description":"Filter releases created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created before this date (ISO 8601)"},"required":false,"description":"Filter releases created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved releases.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createRelease","description":"Create a new release.","x-speakeasy-group":"releases","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseRequest"}}}},"responses":{"201":{"description":"Release created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/branches":{"get":{"operationId":"listReleaseBranches","description":"List distinct git branches across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listBranches","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search branches by name (case-insensitive contains)"},"required":false,"description":"Search branches by name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of branches to return"},"required":false,"description":"Maximum number of branches to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct branches.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/authors":{"get":{"operationId":"listReleaseAuthors","description":"List distinct commit authors across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listAuthors","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search authors by login or name (case-insensitive contains)"},"required":false,"description":"Search authors by login or name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of authors to return"},"required":false,"description":"Maximum number of authors to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct authors.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAuthorFilterItem"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/{id}":{"get":{"operationId":"getRelease","description":"Retrieve a release by ID.","x-speakeasy-group":"releases","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"required":true,"description":"Unique identifier for the release.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseListItemResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments":{"get":{"operationId":"listDeployments","description":"Retrieve all deployments.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"list","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Filter by exact deployment name. Must be used with deploymentGroup."},"required":false,"description":"Filter by exact deployment name. Must be used with deploymentGroup.","name":"name","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name, public subdomain, or deployment group name"},"required":false,"description":"Search deployments by name, public subdomain, or deployment group name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved deployments.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"400":{"description":"Invalid deployment list filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDeployment","description":"Create a new deployment. Deployment group tokens automatically use their group. Workspace/project tokens must provide deploymentGroupId.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeploymentRequest"}}}},"responses":{"200":{"description":"Existing deployment returned for idempotent deployment-group registration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"201":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"400":{"description":"Bad request - deployment group has reached max deployments limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Forbidden - insufficient permissions to create deployments in this context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project or deployment group not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/stats":{"get":{"operationId":"getDeploymentStats","description":"Get aggregated deployment statistics. Returns total count and breakdown by status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getStats","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name or deployment group name"},"required":false,"description":"Search deployments by name or deployment group name","name":"search","in":"query"}],"responses":{"200":{"description":"Deployment statistics retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStats"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-environments":{"get":{"operationId":"listDeploymentFilterEnvironments","description":"List distinct effective environments used by deployments. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterEnvironments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Distinct environments retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-deployment-groups":{"get":{"operationId":"listDeploymentFilterDeploymentGroups","description":"List deployment groups with deployment counts. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterDeploymentGroups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return"},"required":false,"description":"Maximum number of items to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Deployment groups for filter retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"deploymentCount":{"type":"number"},"runningCount":{"type":"number","description":"Number of deployments in 'running' status"},"failedCount":{"type":"number","description":"Number of deployments in a failed status"},"inProgressCount":{"type":"number","description":"Number of deployments in an in-progress status (provisioning, updating, etc.)"}},"required":["id","name","deploymentCount","runningCount","failedCount","inProgressCount"]}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeployment","description":"Retrieve a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetailResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/info":{"get":{"operationId":"getDeploymentConnectionInfo","description":"Get deployment connection information including command endpoint and resource URLs.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment connection information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentConnectionInfo"}}}},"400":{"description":"Deployment not ready (no manager assigned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/import":{"post":{"operationId":"importDeployment","description":"Import a deployment from resolved setup infrastructure such as CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"import","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDeploymentRequest"}}}},"responses":{"200":{"description":"Deployment import was idempotent and returned an existing deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"201":{"description":"Deployment imported and created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/first-party-inputs":{"put":{"operationId":"setFirstPartyDeploymentInputs","description":"Store operator-provided input values on a first-party deployment session token so CLI/local deploys apply them.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"setFirstPartyDeploymentInputs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Input values stored on the session token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsResponse"}}}},"400":{"description":"A deployment-group token scope is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"The token is not a first-party deployment session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to store input values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations":{"post":{"operationId":"createSetupRegistrationOperation","description":"Start a durable setup registration operation for CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createSetupRegistrationOperation","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupRegistrationOperationRequest"}}}},"responses":{"202":{"description":"Setup registration operation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"400":{"description":"Invalid setup registration operation request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed before callback acceptance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations/{id}":{"get":{"operationId":"getSetupRegistrationOperation","description":"Get setup registration operation status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getSetupRegistrationOperation","parameters":[{"schema":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"required":true,"description":"Unique identifier for the setup registration operation.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Setup registration operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"404":{"description":"Setup registration operation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/delete":{"post":{"operationId":"deleteDeployment","description":"Delete, detach, or forget a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentRequest"}}}},"responses":{"202":{"description":"Deployment deletion request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentResponse"}}}},"400":{"description":"Cannot delete the deployment in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"redeployDeployment","description":"Redeploy a running deployment with the same release and fresh environment variables. Sets status to update-pending.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"redeploy","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment redeployment triggered successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot redeploy - deployment must be running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/pin-release":{"post":{"operationId":"pinDeploymentRelease","description":"Pin or unpin a running or runtime-failed deployment. Running deployments start an update; failed deployments retry toward the selected release.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"pinRelease","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinReleaseRequest"}}}},"responses":{"202":{"description":"Release pin updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot pin release from the deployment's current lifecycle state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/retry":{"post":{"operationId":"retryDeployment","description":"Retry a failed deployment operation. Uses alien-infra's retry mechanisms to resume from exact failure point.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"retry","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment retry enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Deployment is not in a failed state that can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/inputs":{"get":{"operationId":"getDeploymentInputs","description":"Get the active input definitions and current non-secret values for a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment inputs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInputsResponse"}}}},"403":{"description":"Insufficient permission to read deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentInputs","description":"Update runtime stack inputs, rebuild their environment-variable mappings, and request a deployment update when runtime configuration changes.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Deployment inputs saved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsResponse"}}}},"400":{"description":"Input values are invalid for the deployment release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, project, or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/environment-variables":{"patch":{"operationId":"updateDeploymentEnvironmentVariables","description":"Update a deployment's environment variables. If the deployment is running and not locked, the status will be changed to update-pending to trigger a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateEnvironmentVariables","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentEnvironmentVariablesRequest"}}}},"responses":{"202":{"description":"Environment variables updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Environment variables are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update environment variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/token":{"post":{"operationId":"createDeploymentToken","description":"Create a deployment token (deployment-scoped API key). The deployment must exist before creating a token.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenRequest"}}}},"responses":{"201":{"description":"Deployment token created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers":{"post":{"operationId":"createManager","description":"Create a new manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewManagerRequest"}}}},"responses":{"201":{"description":"Manager created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Invalid private manager setup method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"A manager for this target already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listManagers","description":"Retrieve all managers.","x-speakeasy-group":"managers","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search managers by name"},"required":false,"description":"Search managers by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of managers to return"},"required":false,"description":"Maximum number of managers to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved managers.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manager"}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/setup-token":{"post":{"operationId":"retryManagerSetup","description":"Revoke previous private-manager setup tokens and issue a fresh setup token/config.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retrySetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"201":{"description":"Fresh manager setup token generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Manager setup cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or setup config not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/retry":{"post":{"operationId":"retryManager","description":"Retry private-manager setup. Returns a fresh setup action before the internal deployment exists, or requests retry for the internal deployment after it exists.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retry","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager retry handled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerRetryResponse"}}}},"400":{"description":"Manager cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or internal deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/cancel-setup":{"post":{"operationId":"cancelManagerSetup","description":"Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record.","x-speakeasy-group":"managers","x-speakeasy-name-override":"cancelSetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager setup canceled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Manager setup cannot be canceled in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}":{"get":{"operationId":"getManager","description":"Retrieve a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"get","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manager"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteManager","description":"Delete a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"delete","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager deletion enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot delete the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Internal deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/domain-binding":{"get":{"operationId":"getManagerDomainBinding","description":"Get the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager domain binding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateManagerDomainBinding","description":"Create, update, or remove the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"updateDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerDomainBinding"}}}},"responses":{"200":{"description":"Manager domain binding updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"400":{"description":"Invalid domain binding request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or domain not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/management-config":{"get":{"operationId":"getManagerManagementConfig","description":"Get the management configuration for a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getManagementConfig","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":true,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Management config retrieved successfully.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/provision":{"post":{"operationId":"provisionManager","description":"Enqueue provisioning for a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"provision","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager provisioning enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot provision the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/update":{"post":{"operationId":"updateManager","description":"Update a manager to a specific release ID or active release.","x-speakeasy-group":"managers","x-speakeasy-name-override":"update","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerRequest"}}}},"responses":{"202":{"description":"Manager update enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot update the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/events":{"get":{"operationId":"listManagerEvents","description":"Retrieve all events of a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"listEvents","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"]}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/token":{"post":{"operationId":"generateManagerToken","description":"Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/gcp-oauth-provider/resolve":{"post":{"operationId":"resolveManagerGcpOAuthProvider","description":"Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap.","x-speakeasy-group":"managers","x-speakeasy-name-override":"resolveGcpOAuthProvider","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderRequest"}}}},"responses":{"200":{"description":"Resolved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderResponse"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Manager cannot resolve this deployment group's project settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/heartbeat":{"post":{"operationId":"reportManagerHeartbeat","description":"Report Manager health status and metrics.","x-speakeasy-group":"managers","x-speakeasy-name-override":"reportHeartbeat","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatRequest"}}}},"responses":{"200":{"description":"Heartbeat acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/deployment":{"get":{"operationId":"getManagerDeployment","description":"Get deployment details for a private manager (internal deployment platform, status, resources).","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDeployment","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager deployment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDeployment"}}}},"404":{"description":"Manager not found or has no internal deployment (alien-hosted managers don't have deployment info).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/prepare":{"post":{"operationId":"prepareOperatorManifestPackage","tags":["operator-manifests"],"summary":"Prepare the white-labeled Operator image for an Operate install","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageRequest"}}}},"responses":{"200":{"description":"Operator image package created or reused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/render":{"post":{"operationId":"renderOperatorManifest","tags":["operator-manifests"],"summary":"Render a Kubernetes Operator manifest","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestRequest"}}}},"responses":{"200":{"description":"Operator manifest rendered successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Operator image package is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Invalid platform or manager configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listAPIKeys","description":"Retrieve all API keys for the current workspace.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved API keys.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/APIKey"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createAPIKey","description":"Create a new API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"API key created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"403":{"description":"Insufficient permissions to create API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/{id}":{"get":{"operationId":"getAPIKey","description":"Retrieve a specific API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateAPIKey","description":"Update an API key (enable/disable, change description).","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyRequest"}}}},"responses":{"200":{"description":"API key updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeAPIKey","description":"Revoke (soft delete) an API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"revoke","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"API key revoked successfully."},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/batch-delete":{"post":{"operationId":"deleteAPIKeys","description":"Permanently delete multiple API keys.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"deleteMultiple","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAPIKeysRequest"}}}},"responses":{"200":{"description":"API keys deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedCount":{"type":"number"}},"required":["deletedCount"]}}}},"403":{"description":"Insufficient permissions to delete API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains":{"get":{"operationId":"listDomains","description":"List system domains and workspace domains.","x-speakeasy-group":"domains","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domains.","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainWithUsage"}}},"required":["domains"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDomain","description":"Create a workspace domain and optional initial endpoints.","x-speakeasy-group":"domains","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253},"setup":{"type":"object","properties":{"deploymentPortal":{"type":"boolean"},"packages":{"type":"boolean"},"deploymentUrlProjectId":{"type":"string","nullable":true,"pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"managerIds":{"type":"array","items":{"type":"string"}}}}},"required":["domain"]}}}},"responses":{"200":{"description":"Returned an existing workspace domain claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"201":{"description":"Created domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Domain is reserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/endpoints":{"post":{"operationId":"createDomainEndpoint","description":"Create an endpoint under a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"createEndpoint","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["workspace","project","manager"]},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind"]}}}},"responses":{"201":{"description":"Created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Endpoint cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomain","description":"Get domain by ID.","x-speakeasy-group":"domains","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDomain","description":"Delete a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain deletion requested.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain is in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/refresh":{"post":{"operationId":"refreshDomain","description":"Refresh workspace domain verification.","x-speakeasy-group":"domains","x-speakeasy-name-override":"refresh","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain verification refresh requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events":{"get":{"operationId":"listEvents","description":"Retrieve all events.","x-speakeasy-group":"events","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter events to a single deployment."},"required":false,"description":"Filter events to a single deployment.","name":"deploymentId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["releaseCreatedAt"]},"description":"Optional fields to include: releaseCreatedAt"},"required":false,"description":"Optional fields to include: releaseCreatedAt","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events/{id}":{"get":{"operationId":"getEvent","description":"Retrieve an event by ID.","x-speakeasy-group":"events","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"required":true,"description":"Unique identifier for the event.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens":{"get":{"operationId":"listMachinesJoinTokens","x-speakeasy-group":"machines","x-speakeasy-name-override":"listJoinTokens","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Join tokens for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesJoinTokensResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"createJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Newly minted Machines join token. Existing tokens keep working; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/rotate":{"post":{"operationId":"rotateMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"rotateJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Rotated Machines join token. Revokes all existing tokens, then mints a new one; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/{tokenId}":{"delete":{"operationId":"revokeMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"revokeJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"tokenId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines join token revocation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/inventory":{"get":{"operationId":"listMachinesInventory","x-speakeasy-group":"machines","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machine inventory for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesInventoryResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}/drain":{"delete":{"operationId":"cancelMachinesMachineDrain","x-speakeasy-group":"machines","x-speakeasy-name-override":"cancelMachineDrain","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines drain cancellation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMachinesMachineDrainResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"drainMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"drainMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineRequest"}}}},"responses":{"200":{"description":"Machines drain request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}":{"delete":{"operationId":"removeMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"removeMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines remove request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands":{"get":{"operationId":"listCommands","description":"Retrieve commands. Use for dashboard analytics and command history.","x-speakeasy-group":"commands","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Filter by command state"},"required":false,"description":"Filter by command state","name":"state","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Filter by command name"},"required":false,"description":"Filter by command name","name":"name","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search commands by name"},"required":false,"description":"Search commands by name","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created after this date (ISO 8601)"},"required":false,"description":"Filter commands created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created before this date (ISO 8601)"},"required":false,"description":"Filter commands created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deployment","project"]},"description":"Optional fields to include: deployment, project"},"required":false,"description":"Optional fields to include: deployment, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved commands.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommandListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createCommand","description":"Create command metadata. Called by manager when processing commands. Returns project info for routing decisions.","x-speakeasy-group":"commands","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandRequest"}}}},"responses":{"201":{"description":"Command created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandResponse"}}}},"400":{"description":"Deployment is not ready or has no assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The deployment manager is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/names":{"get":{"operationId":"listCommandNames","description":"List distinct command names. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listNames","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search command names (prefix match)"},"required":false,"description":"Search command names (prefix match)","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct command names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandNamesResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/deployments":{"get":{"operationId":"listCommandDeployments","description":"List distinct deployments that have commands, including deployment group info. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search deployment or deployment group names"},"required":false,"description":"Search deployment or deployment group names","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct deployments that have commands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandDeploymentsResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/target":{"get":{"operationId":"resolveCommandTarget","description":"Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named.","x-speakeasy-group":"commands","x-speakeasy-name-override":"resolveTarget","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment to resolve the target for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Deployment to resolve the target for","name":"deploymentId","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Explicit resource id to resolve; must be a command-capable resource"},"required":false,"description":"Explicit resource id to resolve; must be a command-capable resource","name":"target","in":"query"}],"responses":{"200":{"description":"Resolved command target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedCommandTarget"}}}},"404":{"description":"Deployment or target not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}":{"patch":{"operationId":"updateCommand","description":"Update command state. Called by manager when command is dispatched or completes.","x-speakeasy-group":"commands","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommandRequest"}}}},"responses":{"200":{"description":"Command updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getCommand","description":"Retrieve a command by ID.","x-speakeasy-group":"commands","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/dispatch":{"post":{"operationId":"dispatchCommand","description":"Atomically mark a command DISPATCHED unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"dispatch","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandRequest"}}}},"responses":{"200":{"description":"Dispatch attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/complete":{"post":{"operationId":"completeCommand","description":"Atomically transition a command to a terminal state (SUCCEEDED, FAILED, or EXPIRED) unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"complete","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandRequest"}}}},"responses":{"200":{"description":"Completion attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/increment-attempt":{"post":{"operationId":"incrementCommandAttempt","description":"Atomically increment the command's attempt counter and return the new value.","x-speakeasy-group":"commands","x-speakeasy-name-override":"incrementAttempt","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Attempt incremented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementCommandAttemptResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions":{"get":{"operationId":"listDebugSessions","description":"Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Filter by session state"}]},"required":false,"description":"Filter by session state","name":"state","in":"query"},{"schema":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model (push/pull). Joins against the parent deployment."},"required":false,"description":"Filter by deployment model (push/pull). Joins against the parent deployment.","name":"mode","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Filter by cloud provider. Joins against the parent deployment."},"required":false,"description":"Filter by cloud provider. Joins against the parent deployment.","name":"provider","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated debug sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSessionListResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDebugSession","description":"Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}}},"responses":{"201":{"description":"Debug session created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/{id}":{"patch":{"operationId":"updateDebugSession","description":"Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDebugSessionRequest"}}}},"responses":{"200":{"description":"Debug session updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Debug session not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getDebugSession","description":"Retrieve a debug session by ID.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved debug session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info":{"get":{"operationId":"getDeploymentInfo","description":"Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":false,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Deployment information retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"401":{"description":"Unauthorized — requires a deployment-scoped or deployment-group-scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/compute-plan":{"post":{"operationId":"planDeploymentCompute","description":"Plan deployment compute for the active release before stack preparation. The response contains recommended machine and scale choices for cloud compute pools.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"planCompute","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Compute plan returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentComputePlan"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/prepare-stack":{"post":{"operationId":"prepareDeploymentStack","description":"Prepare the active release stack for a deployment portal setup session. The response contains the generated stack shape plus setup compatibility metadata.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"prepareStack","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Prepared stack returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedDeploymentStack"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"operationId":"slackIntegrationInstallUrl","description":"Generate the Slack OAuth consent URL for this workspace.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"installUrl","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"OAuth URL the dashboard should redirect the user to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/status":{"get":{"operationId":"slackIntegrationStatus","description":"Return the Slack install for this workspace (if any).","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"status","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationStatus"}}}}}}},"/v1/integrations/slack/channels":{"get":{"operationId":"slackIntegrationChannels","description":"List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"listChannels","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Public channels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelsResponse"}}}},"400":{"description":"Workspace not connected to Slack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/notification-channel":{"put":{"operationId":"slackIntegrationSetNotificationChannel","description":"Configure which Slack channel receives ai-agent monitor reports.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"setNotificationChannel","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelRequest"}}}},"responses":{"200":{"description":"Channel saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelResponse"}}}},"400":{"description":"Not connected, or join failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/installation":{"delete":{"operationId":"slackIntegrationUninstall","description":"Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"uninstall","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Uninstalled."}}}},"/v1/agent-sessions":{"get":{"operationId":"listAgentSessions","description":"List ai-agent monitor sessions for this workspace. Newest first, capped at 50.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionListResponse"}}}}}}},"/v1/agent-sessions/{id}":{"get":{"operationId":"getAgentSession","description":"Retrieve one ai-agent monitor session by id.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/events":{"get":{"operationId":"listAgentSessionEvents","description":"Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"events","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Events after the cursor, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionEventsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/approve":{"post":{"operationId":"approveAgentSession","description":"Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"approve","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already resumed / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"202":{"description":"Approved; resume enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/stop":{"post":{"operationId":"stopAgentSession","description":"Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"stop","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already terminal / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"202":{"description":"Cancel accepted; session stopped.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/list":{"post":{"operationId":"syncList","description":"List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows.","x-speakeasy-group":"sync","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListRequest"}}}},"responses":{"200":{"description":"Full deployment records returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/context":{"post":{"operationId":"syncContext","description":"Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock.","x-speakeasy-group":"sync","x-speakeasy-name-override":"context","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncContextRequest"}}}},"responses":{"200":{"description":"Computed deployment context returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"}}}},"404":{"description":"Deployment not found or not assigned to this manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to build deployment context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/acquire":{"post":{"operationId":"syncAcquire","description":"Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing.","x-speakeasy-group":"sync","x-speakeasy-name-override":"acquire","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireRequest"}}}},"responses":{"200":{"description":"Deployments acquired successfully (empty arrays if none available). Failures indicate deployments that were locked but failed during context building - their locks have been released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/reconcile":{"post":{"operationId":"syncReconcile","description":"Reconcile deployment state. Push model requests that include a session verify lock ownership. Pull model state reports are accepted as authz-gated agent progress even when they carry an agent-sync session. Accepts full DeploymentState after step() execution.","x-speakeasy-group":"sync","x-speakeasy-name-override":"reconcile","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileRequest"}}}},"responses":{"200":{"description":"State reconciled successfully. If target is present, continue deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment locked (pull) or session mismatch (push).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/release":{"post":{"operationId":"syncRelease","description":"Release a deployment lock. Must be called after processing an acquired deployment, even if processing failed. This is critical to avoid deadlocks.","x-speakeasy-group":"sync","x-speakeasy-name-override":"release","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReleaseRequest"}}}},"responses":{"200":{"description":"Lock released successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources":{"get":{"operationId":"listInventory","x-speakeasy-group":"resources","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Unified managed and observed resource inventory rows.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["managed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt","source","deploymentId","deploymentName"]},{"type":"object","properties":{"source":{"type":"string","enum":["observed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"rawKind":{"type":"string"},"alienResourceId":{"type":"string","nullable":true},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["source","deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","name","rawKind","alienResourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}":{"get":{"operationId":"listResourceOverview","x-speakeasy-group":"resources","x-speakeasy-name-override":"listOverview","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Compute resource overview rows from latest heartbeats.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/{resourceId}/deployments":{"get":{"operationId":"listResourceDeployments","x-speakeasy-group":"resources","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Deployments where the resource is installed.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt"]}}},"required":["resourceType","resourceId","deployments"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/deployments/{deploymentId}/{resourceId}":{"get":{"operationId":"getResourceDeploymentDetail","x-speakeasy-group":"resources","x-speakeasy-name-override":"getDeploymentDetail","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"deploymentId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Latest heartbeat detail for one compute resource deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"},"desiredImage":{"type":"string","nullable":true}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt","desiredImage"]},"heartbeat":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["available"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"staleAt":{"type":"string","format":"date-time"},"platformStale":{"type":"boolean"},"heartbeat":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"raw":{"type":"array","items":{"nullable":true}}},"required":["status","deploymentId","resourceId","resourceType","backend","controllerPlatform","observedAt","staleAt","platformStale","heartbeat","raw"]},{"type":"object","properties":{"status":{"type":"string","enum":["missing"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"}},"required":["status","deploymentId","resourceId","resourceType"]}]}},"required":["deployment","heartbeat"]}}}},"404":{"description":"Deployment or resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resolve":{"get":{"operationId":"resolve","tags":["resolve"],"summary":"Resolve manager for a project and platform","description":"Returns the manager URL for a given project and platform. The project can be provided as a query parameter, or derived from the token's scope (project-scoped, deployment-group-scoped, or deployment-scoped tokens carry an implicit project). This is the single entry point for all CLI tools to discover which manager to talk to.","x-speakeasy-group":"resolve","x-speakeasy-name-override":"resolve","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform to resolve the manager for"},"required":true,"description":"Target platform to resolve the manager for","name":"platform","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope)."},"required":false,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope).","name":"project","in":"query"}],"responses":{"200":{"description":"Manager resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"description":"Missing required project parameter for this token type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found or no manager available for platform.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Manager not ready yet (no URL reported). Retry after a delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/cloud-regions":{"get":{"operationId":"getCloudRegions","description":"Get cloud regions supported by this Alien environment.","x-speakeasy-group":"cloudRegions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Supported cloud regions retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudRegionsResponse"}}}}}}},"/v1/billing/audit-log":{"get":{"operationId":"listBillingAuditLog","description":"List billing activity entries for the current workspace.","x-speakeasy-group":"billing","x-speakeasy-name-override":"listAuditLog","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor: id from the previous page."},"required":false,"description":"Cursor: id from the previous page.","name":"before","in":"query"}],"responses":{"200":{"description":"Audit-log rows newest-first.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingAuditLogRow"}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"]}}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"getWorkspaceBillingEntitlements","description":"Get the workspace billing entitlements used for product feature gates. Autumn is the source of truth; the response is served through the workspace billing read model with stale-cache fallback.","x-speakeasy-group":"billing","x-speakeasy-name-override":"getEntitlements","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace billing entitlements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBillingEntitlements"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}}}} \ No newline at end of file +{"openapi":"3.0.0","info":{"title":"Alien API","version":"1.0.0","contact":{"name":"Alien Team","url":"https://alien.dev"}},"servers":[{"url":"https://api.alien.dev","description":"Alien API - Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key for authentication, must be provided as a Bearer token. Generate an API key at https://alien.dev/api-keys"}},"schemas":{"WorkspaceInvitationPreview":{"type":"object","properties":{"kind":{"type":"string","enum":["email","link"]},"workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name","logoUrl"]},"inviter":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"image":{"type":"string","nullable":true,"format":"uri"}},"required":["name","image"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["active","accepted","expired","revoked"]},"emailHint":{"type":"string","nullable":true}},"required":["kind","workspace","inviter","role","expiresAt","state","emailHint"],"additionalProperties":false},"WorkspaceRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"Role for workspace-scoped service accounts","example":"workspace.member"},"APIError":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"requestId":{"type":"string","description":"Request ID echoed in the x-request-id response header and server logs."}},"required":["code","message","internal"]},"Membership":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"role":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","logoUrl","role","createdAt"],"additionalProperties":false},"UserProfile":{"type":"object","properties":{"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","description":"User's email address"},"name":{"type":"string","description":"User's display name"},"image":{"type":"string","nullable":true,"description":"User's avatar image URL"},"githubUsername":{"type":"string","nullable":true,"description":"Linked GitHub username"},"cliConnected":{"type":"boolean","description":"Whether this user has ever authenticated a request from the Alien CLI. Latched on first CLI request, never cleared."},"company":{"type":"string","nullable":true,"description":"Company name collected during profile setup."},"acquisitionSource":{"type":"string","nullable":true,"enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other",null],"description":"How the user heard about Alien."},"acquisitionSourceDetail":{"type":"string","nullable":true,"description":"Additional acquisition source detail when the source is other."},"useCases":{"type":"string","nullable":true,"description":"What the user is hoping to use Alien for."},"profileSetupCompletedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the user completed the required profile setup dialog."},"profileSetupVersion":{"type":"integer","nullable":true,"description":"Version of the required profile setup dialog the user completed."}},"required":["id","email","name","image","githubUsername","cliConnected","company","acquisitionSource","acquisitionSourceDetail","useCases","profileSetupCompletedAt","profileSetupVersion"],"additionalProperties":false},"UserProfileSetupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"},"company":{"type":"string","minLength":1,"maxLength":120,"description":"Company name"},"acquisitionSource":{"type":"string","enum":["github","x-twitter","linkedin","hacker-news","reddit","search","friend-or-colleague","founder","event-or-community","other"],"description":"How the user heard about Alien"},"acquisitionSourceDetail":{"type":"string","minLength":1,"maxLength":200,"description":"Required when acquisitionSource is other"},"useCases":{"type":"string","maxLength":2000,"description":"What the user is hoping to use Alien for"}},"required":["name","company","acquisitionSource"],"additionalProperties":false},"GitNamespace":{"type":"object","properties":{"id":{"type":"number","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"installationId":{"type":"number","nullable":true},"type":{"type":"string","enum":["team","user"]},"provider":{"type":"string","enum":["github"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","slug","installationId","type","provider","createdAt"],"additionalProperties":false},"GitRepository":{"type":"object","properties":{"name":{"type":"string"},"private":{"type":"boolean"},"defaultBranch":{"type":"string"},"pushedAt":{"type":"string","format":"date-time"}},"required":["name","private","defaultBranch"],"additionalProperties":false},"AcceptWorkspaceInvitationResponse":{"type":"object","properties":{"outcome":{"type":"string","enum":["joined","already-member"]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"workspaceName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["outcome","workspaceId","workspaceName","role"],"additionalProperties":false},"Subject":{"oneOf":[{"$ref":"#/components/schemas/UserSubject"},{"$ref":"#/components/schemas/ServiceAccountSubject"}],"discriminator":{"propertyName":"kind","mapping":{"user":"#/components/schemas/UserSubject","serviceAccount":"#/components/schemas/ServiceAccountSubject"}},"description":"Authenticated principal that can be either a user (with workspace-scoped permissions) or a service account (with configurable scope and role)"},"UserSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["user"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique user identifier"},"email":{"type":"string","format":"email","description":"User's email address"},"workspaceId":{"type":"string","description":"ID of the workspace the user is authenticated within"},"workspaceName":{"type":"string","description":"Name of the workspace the user is authenticated within"},"role":{"$ref":"#/components/schemas/UserRole"}},"required":["kind","id","email","workspaceId","role"],"description":"Authenticated user subject with workspace-scoped permissions"},"UserRole":{"type":"string","enum":["workspace.viewer","workspace.member","workspace.admin"],"description":"User's role within the workspace","example":"workspace.member"},"ServiceAccountSubject":{"type":"object","properties":{"kind":{"type":"string","enum":["serviceAccount"],"description":"Subject type identifier"},"id":{"type":"string","description":"Unique service account identifier (API key ID)"},"workspaceId":{"type":"string","description":"ID of the workspace the service account belongs to"},"workspaceName":{"type":"string","description":"Name of the workspace the service account belongs to"},"scope":{"$ref":"#/components/schemas/SubjectScope"},"role":{"$ref":"#/components/schemas/Role"}},"required":["kind","id","workspaceId","scope","role"],"description":"Authenticated service account subject with scoped permissions (workspace, project, or deployment level)"},"SubjectScope":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["workspace"],"description":"Workspace-scoped access"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["project"],"description":"Project-scoped access"},"projectId":{"type":"string","description":"ID of the specific project this scope applies to"}},"required":["type","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment"],"description":"Deployment-scoped access"},"deploymentId":{"type":"string","description":"ID of the specific deployment this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"}},"required":["type","deploymentId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"],"description":"Deployment group-scoped access"},"deploymentGroupId":{"type":"string","description":"ID of the specific deployment group this scope applies to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"}},"required":["type","deploymentGroupId","projectId"]},{"type":"object","properties":{"type":{"type":"string","enum":["manager"],"description":"Manager-scoped access"},"managerId":{"type":"string","description":"ID of the specific manager this scope applies to"}},"required":["type","managerId"]}],"description":"Authorization scope defining what resources this service account can access"},"Role":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"$ref":"#/components/schemas/ProjectRole"},{"$ref":"#/components/schemas/DeploymentRole"},{"$ref":"#/components/schemas/DeploymentGroupRole"},{"$ref":"#/components/schemas/ManagerRole"}],"description":"Role defining what actions this service account can perform within its scope","example":"workspace.member"},"ProjectRole":{"type":"string","enum":["project.viewer","project.developer"],"description":"Role for project-scoped service accounts","example":"project.developer"},"DeploymentRole":{"type":"string","enum":["deployment.viewer","deployment.manager","deployment.telemetry-writer"],"description":"Role for deployment-scoped service accounts","example":"deployment.manager"},"DeploymentGroupRole":{"type":"string","enum":["deployment-group.deployer"],"description":"Role for deployment group-scoped service accounts","example":"deployment-group.deployer"},"ManagerRole":{"type":"string","enum":["manager.runtime"],"description":"Role for manager-scoped service accounts","example":"manager.runtime"},"Workspace":{"type":"object","properties":{"id":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name.","example":"my-workspace"},"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"},"onboardingDismissedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the Getting Started walkthrough was dismissed or completed for this workspace. Null means it has never been dismissed; the dashboard auto-promotes the walkthrough until this is set."},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","onboardingDismissedAt","createdAt"],"additionalProperties":false},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"image":{"type":"string","nullable":true},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","email","name","image","role","joinedAt"],"additionalProperties":false},"AgentSettings":{"type":"object","properties":{"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"enabled":{"type":"boolean","description":"Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`."},"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["workspaceId","enabled","debugPermissionMode","createdAt","updatedAt"],"additionalProperties":false},"UpdateWorkspaceSettingsRequest":{"type":"object","properties":{"debugPermissionMode":{"type":"string","enum":["auto","ask"],"description":"Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack."},"enabled":{"type":"boolean","description":"Turn the ai-agent on (`true`) or off (`false`) for this workspace."}}},"WorkspaceInvitation":{"type":"object","properties":{"id":{"type":"string","pattern":"winv_[0-9a-zA-Z]{32}$","description":"Unique identifier for the workspace invitation.","example":"winv_DsgltMIFV0GmqtxV5NYTtrknrna"},"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"status":{"type":"string","enum":["pending","accepted","revoked","expired"]},"deliveryStatus":{"type":"string","enum":["pending","sent","failed"]},"expiresAt":{"type":"string","format":"date-time"},"lastSentAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","email","role","status","deliveryStatus","expiresAt","lastSentAt","createdAt","inviteUrl"],"additionalProperties":false},"WorkspaceInviteLink":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"wil_[0-9a-zA-Z]{40}$","description":"Unique identifier for the workspace invite link.","example":"wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"expiresAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"useCount":{"type":"integer","minimum":0},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"inviteUrl":{"type":"string","format":"uri"}},"required":["id","role","expiresAt","createdAt","useCount","lastUsedAt","inviteUrl"],"additionalProperties":false},"ProjectListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deploymentCount":{"type":"number"},"latestRelease":{"$ref":"#/components/schemas/ProjectReleaseInfo"}}}]},"DeploymentPortalAppearancePreset":{"type":"string","enum":["clean","technical","enterprise","playful","minimal"],"default":"clean","description":"Curated visual style for the deployment portal."},"DeploymentPortalAccentColor":{"type":"string","enum":["blue","purple","green","orange","pink","slate"],"default":"blue","description":"Accent color used for highlights and primary actions."},"DeploymentPortalDensity":{"type":"string","enum":["comfortable","compact"],"default":"comfortable","description":"Layout density for portal content."},"ProjectReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","gitMetadata","createdAt"]},"GitMetadata":{"type":"object","nullable":true,"properties":{"commitSha":{"type":"string","nullable":true,"maxLength":40,"description":"The hash of the commit","example":"dc36199b2234c6586ebe05ec94078a895c707e29"},"commitMessage":{"type":"string","nullable":true,"maxLength":1024,"description":"The commit message","example":"add method to measure Interaction to Next Paint (INP) (#36490)"},"commitRef":{"type":"string","nullable":true,"maxLength":256,"description":"The branch or tag on which the commit was made","example":"main"},"commitDate":{"type":"string","nullable":true,"format":"date-time","description":"The date and time when the commit was created","example":"2026-03-16T12:00:00Z"},"dirty":{"type":"boolean","nullable":true,"description":"Whether or not there have been modifications to the working tree since the latest commit","example":true},"remoteUrl":{"type":"string","nullable":true,"maxLength":2048,"description":"The git repository's remote origin url","example":"https://github.com/alienplatform/alien"},"commitAuthorName":{"type":"string","nullable":true,"maxLength":256,"description":"The name of the author of the commit (from git config)","example":"John Doe"},"commitAuthorEmail":{"type":"string","nullable":true,"maxLength":256,"format":"email","description":"The email of the author of the commit (from git config)","example":"john@example.com"},"commitAuthorLogin":{"type":"string","nullable":true,"maxLength":256,"description":"The provider username of the commit author (e.g., GitHub login), resolved server-side from the commit email","example":"johndoe"},"commitAuthorAvatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"The avatar URL of the commit author, resolved server-side from the provider login","example":"https://github.com/johndoe.png"},"provider":{"$ref":"#/components/schemas/GitProvider"}}},"GitProvider":{"oneOf":[{"$ref":"#/components/schemas/GitHubProvider"},{"$ref":"#/components/schemas/GitLabProvider"},{"nullable":true}],"description":"Provider-specific repository information, resolved server-side from remoteUrl"},"GitHubProvider":{"type":"object","properties":{"type":{"type":"string","enum":["github"]},"org":{"type":"string","maxLength":256,"description":"Repository owner (user or organization)"},"repo":{"type":"string","maxLength":256,"description":"Repository name"}},"required":["type","org","repo"]},"GitLabProvider":{"type":"object","properties":{"type":{"type":"string","enum":["gitlab"]},"namespace":{"type":"string","maxLength":256,"description":"Group/project namespace"},"project":{"type":"string","maxLength":256,"description":"Project name"}},"required":["type","namespace","project"]},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","createdAt","workspaceId"]},"ProjectIDOrNamePathParam":{"type":"string","maxLength":100,"description":"Project ID or name."},"ProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","redirectUris"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"hasClientSecret":{"type":"boolean","enum":[true]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"description":"Authorized redirect URIs that must be configured on the Google OAuth client."}},"required":["mode","clientId","hasClientSecret","redirectUris"]}]},"GcpOAuthClientId":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[a-zA-Z0-9_-]+-[a-zA-Z0-9_-]+\\.apps\\.googleusercontent\\.com$","description":"Google OAuth web client ID.","example":"1234567890-abc123.apps.googleusercontent.com"},"UpdateProjectGcpOAuthProvider":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId"]}]},"GcpOAuthClientSecret":{"type":"string","minLength":1,"maxLength":512,"description":"Google OAuth web client secret. Write-only; never returned by the API.","example":"GOCSPX-example"},"UpdateProject":{"type":"object","properties":{"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"deploymentPortalAppearance":{"type":"object","nullable":true,"properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}},"description":"Customer-facing deployment portal appearance settings."},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"},"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Selected domain for this project (null = default system domain)","example":"dom_469m0agk8luj4s16sakmmpdd"},"defaultManagers":{"type":"object","nullable":true,"properties":{"aws":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"gcp":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"azure":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"kubernetes":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"machines":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"local":{"type":"string","nullable":true,"pattern":"mgr_[0-9a-z]{28}$","description":"Unique identifier for a default private manager.","example":"mgr_enxscjrqiiu2lrc672hwwuc5"}},"description":"Project default private managers for new push deployments."}}},"DeploymentPortalDomainResponse":{"type":"object","properties":{"deploymentPortalEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"},"packageEndpoint":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["deploymentPortalEndpoint","packageEndpoint"]},"DomainEndpoint":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dend_[0-9a-z]{28}$","description":"Unique identifier for the domain endpoint.","example":"dend_1bb6gdvm1bs74acqkjstcgv"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domainId":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"kind":{"$ref":"#/components/schemas/DomainEndpointKind"},"owner":{"$ref":"#/components/schemas/DomainEndpointOwner"},"hostname":{"type":"string","minLength":1,"maxLength":253},"status":{"$ref":"#/components/schemas/DomainEndpointStatus"},"provider":{"type":"string","nullable":true},"providerState":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"managedDnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentPortalManagedDnsRecord"}},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"retryAttempts":{"type":"integer","minimum":0},"nextStepAfter":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","workspaceId","domainId","kind","owner","hostname","status","managedDnsRecords","retryAttempts","createdAt","updatedAt"]},"DomainEndpointKind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"DomainEndpointOwner":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DomainEndpointOwnerType"},"id":{"type":"string"}},"required":["type","id"]},"DomainEndpointOwnerType":{"type":"string","enum":["workspace","project","manager"]},"DomainEndpointStatus":{"type":"string","enum":["waiting_for_domain","provisioning","waiting_for_dns","waiting_for_health","active","failed","deleting"]},"DeploymentPortalManagedDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"},"ttl":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true}},"required":["name","type","value"]},"DeploymentLinkSetupResponse":{"type":"object","properties":{"activeRelease":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","nullable":true},"stack":{"$ref":"#/components/schemas/StackByPlatform"}},"required":["id","version","stack"]},"visiblePackageTypes":{"type":"array","items":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"}},"visibleSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}}},"required":["activeRelease","visiblePackageTypes","visibleSetupMethods"]},"StackByPlatform":{"type":"object","nullable":true,"properties":{"aws":{"nullable":true},"gcp":{"nullable":true},"azure":{"nullable":true},"kubernetes":{"nullable":true},"machines":{"nullable":true},"local":{"nullable":true},"test":{"nullable":true}},"additionalProperties":false},"DeploymentSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform","helm","cli","manual"]},"DeploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments allowed in this deployment group"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","projectId","workspaceId","createdAt"]},"CreateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments in this deployment group"}},"required":["name","project"]},"EnsureDeploymentGroupByNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"project":{"type":"string","maxLength":100,"description":"Project ID or name this deployment group belongs to"},"maxDeployments":{"type":"integer","minimum":1,"default":100,"description":"Maximum number of deployments for newly created groups"}},"required":["name","project"]},"ProjectIDOrNameQueryParam":{"type":"string","maxLength":100,"description":"Filter by project ID or name."},"UpdateDeploymentGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"},"maxDeployments":{"type":"integer","minimum":1,"description":"Maximum number of deployments in this deployment group"}}},"CreateDeploymentGroupTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The API key token"},"deploymentLink":{"type":"string","description":"Formatted deployment link"}},"required":["token","deploymentLink"]},"CreateDeploymentGroupTokenRequest":{"type":"object","properties":{"description":{"type":"string","description":"Description for the API key"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"},"deploymentSetupConfig":{"$ref":"#/components/schemas/DeploymentSetupConfig"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["deploymentSetupConfig"]},"DeploymentSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."}},"required":["metadata","policy","environmentVariables"]},"DeploymentSetupMetadata":{"type":"object","additionalProperties":{"nullable":true}},"DeploymentSetupPolicy":{"type":"object","properties":{"allowedPlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"allowedKubernetesBasePlatforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","on-prem"]},"minItems":1,"description":"Kubernetes base environments the recipient may target."},"allowedKubernetesClusterSources":{"type":"array","items":{"$ref":"#/components/schemas/KubernetesClusterSource"},"minItems":1,"description":"Whether recipients may create a cluster, use an existing cluster, or both."},"allowedSetupMethods":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentSetupMethod"}},"allowReleasePinning":{"type":"boolean"},"stackSettings":{"$ref":"#/components/schemas/DeploymentSetupStackSettingsPolicy"}},"required":["allowedPlatforms","allowedSetupMethods"]},"KubernetesClusterSource":{"type":"string","enum":["create","existing"]},"DeploymentSetupStackSettingsPolicy":{"type":"object","properties":{"defaults":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"allowedDeploymentModels":{"type":"array","items":{"type":"string","enum":["push","pull","airgapped"]}},"allowedNetworkModes":{"type":"array","items":{"type":"string","enum":["none","create","default","byo"]}},"allowedUpdatesModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required"]}},"allowedTelemetryModes":{"type":"array","items":{"type":"string","enum":["auto","approval-required","off"]}},"allowedHeartbeatsModes":{"type":"array","items":{"type":"string","enum":["on","off"]}},"allowExternalBindings":{"type":"boolean"},"allowCustomRegistry":{"type":"boolean"}}},"EnvironmentVariableConfig":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"value":{"type":"string","maxLength":10000,"description":"Variable value (encrypted in database)"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","value","type","targetResources"]},"EnvironmentVariableType":{"type":"string","enum":["plain","secret"],"description":"Variable type (plain or secret)"},"EncryptedStackInputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EncryptedStackInputValue"},"default":{}},"EncryptedStackInputValue":{"type":"object","properties":{"value":{"type":"string","description":"Encrypted JSON-encoded input value."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"]},"secret":{"type":"boolean","description":"Whether the original input is secret."}},"required":["value","kind","secret"]},"StackInputValuesRequest":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{}},"StackInputValueRequest":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"CreateFirstPartyDeploymentSessionResponse":{"type":"object","properties":{"token":{"type":"string","description":"The deployment-group session token"}},"required":["token"]},"Package":{"type":"object","properties":{"id":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"type":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Types of packages that can be built"},"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string","description":"Package version (e.g., '1.0.0', 'rel_abc123')"},"sourceReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release used as package build input. Null for release-less packages such as Operate Operator images.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"setupFingerprints":{"$ref":"#/components/schemas/SetupFingerprintMap"},"packageBuildInputHash":{"type":"string","description":"Hash of Platform-known package build request inputs: package type, source release, setup fingerprints, package config, and setup contract version"},"config":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"}},"required":["displayName","name"],"description":"Branding configuration for the deploy CLI binary."},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for CloudFormation packages"},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"}},"required":["chartName","description"],"description":"Configuration for the Helm chart package"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"}},"required":["displayName","name"],"description":"Branding configuration for the Operator image."},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts."},"supportedAwsRegions":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by the environment that built this package."}},"description":"Configuration for Terraform package generation."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]}],"description":"Type-specific configuration"},"outputs":{"oneOf":[{"allOf":[{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},{"type":"object","properties":{"type":{"type":"string","enum":["cli"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"digest":{"type":"string","description":"Image digest (e.g., \"sha256:abc123...\")"},"image":{"type":"string","description":"Full image reference (e.g., \"public.ecr.aws/acme/operators/project-id:1.2.3\")"},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain embedded into the Operator binary, if whitelabeled."}},"required":["digest","image"],"description":"Outputs from an Operator image package build"},{"type":"object","properties":{"type":{"type":"string","enum":["operator-image"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},{"type":"object","properties":{"type":{"type":"string","enum":["helm"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},{"type":"object","properties":{"type":{"type":"string","enum":["cloudformation"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},{"type":"object","properties":{"type":{"type":"string","enum":["terraform"]}},"required":["type"]}]},{"nullable":true}],"description":"Package outputs (only when status is 'ready')"},"error":{"nullable":true,"description":"Error information if status is 'failed'"},"sourceBinarySha256":{"type":"string","nullable":true,"description":"Builder-recorded source binary SHA256 (for cli/terraform packages)"},"retries":{"type":"integer","minimum":0,"description":"Number of build retries"},"lockedAt":{"type":"string","format":"date-time","nullable":true},"lockedBy":{"type":"string","nullable":true},"leaseExpiresAt":{"type":"string","format":"date-time","nullable":true,"description":"Expiration of the current builder lease"},"buildPhase":{"type":"string","nullable":true,"enum":["building","publishing",null],"description":"Coarse package build phase"},"lastProgressAt":{"type":"string","format":"date-time","nullable":true,"description":"Last successful builder lease renewal or phase change"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","projectId","workspaceId","type","status","version","setupFingerprints","packageBuildInputHash","config","retries","createdAt","updatedAt"]},"SetupFingerprintMap":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SetupFingerprintInfo"},"description":"Per-target setup compatibility fingerprints copied from the source release"},"SetupFingerprintInfo":{"type":"object","properties":{"target":{"$ref":"#/components/schemas/SetupTarget"},"fingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"version":{"$ref":"#/components/schemas/SetupFingerprintVersion"}},"required":["target","fingerprint","version"]},"SetupTarget":{"type":"string","minLength":1,"description":"Stable target key for the setup contract, e.g. aws/us-east-1"},"SetupFingerprint":{"type":"string","minLength":1,"description":"Deterministic setup contract fingerprint for one setup target"},"SetupFingerprintVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup fingerprint algorithm version"},"ReleaseListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Release"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"rollout":{"type":"object","nullable":true,"properties":{"updatedCount":{"type":"integer","description":"Deployments that finished updating to this release (excludes initial provisions)"},"pendingCount":{"type":"integer","description":"Deployments currently targeting this release but not yet running it"},"avgDurationMs":{"type":"number","nullable":true,"description":"Average time from release creation until a deployment finished updating, in milliseconds"}},"required":["updatedCount","pendingCount","avgDurationMs"],"description":"Rollout stats, included when ?include=rollout is used"}}}]},"Release":{"type":"object","properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"projectId":{"type":"string","maxLength":128},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"setupFingerprints":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintMap"},{"description":"Per-target setup compatibility fingerprints for this release"}]},"rootDirectory":{"type":"string","nullable":true,"maxLength":256},"workspaceId":{"type":"string","maxLength":128}},"required":["id","projectId","version","createdAt","setupFingerprints","workspaceId"]},"CreateReleaseRequest":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"stack":{"$ref":"#/components/schemas/StackByPlatform"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256}},"required":["project"]},"ReleaseAuthorFilterItem":{"type":"object","properties":{"login":{"type":"string","nullable":true,"description":"Provider username (e.g., GitHub login)"},"name":{"type":"string","nullable":true,"description":"Git commit author name"},"avatarUrl":{"type":"string","nullable":true,"format":"uri","description":"Author avatar URL"}},"required":["login","name","avatarUrl"]},"DeploymentListItemResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if in a failed state"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"$ref":"#/components/schemas/ManagerID"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentProtocolVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"DeploymentState protocol version owned by the runtime/manager"},"OperatorCapabilityReport":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":128},"state":{"$ref":"#/components/schemas/OperatorCapabilityState"},"detail":{"type":"string","nullable":true,"maxLength":512}},"required":["key","state"]},"OperatorCapabilityState":{"type":"string","enum":["granted","denied","unavailable"]},"ManagerID":{"type":"string","pattern":"mgr_[0-9a-z]{28}$","description":"ID of the manager","example":"mgr_enxscjrqiiu2lrc672hwwuc5"},"DeploymentReleaseInfo":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"version":{"type":"string","minLength":1,"maxLength":256},"gitMetadata":{"$ref":"#/components/schemas/GitMetadata"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","version","createdAt"]},"DeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!dg[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment group name.","example":"prod-us-east-1"}},"required":["id","name"]},"DeploymentProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"}},"required":["id","name"]},"DeploymentStats":{"type":"object","properties":{"total":{"type":"number","description":"Total number of deployments matching filters"},"byStatus":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by status (only includes statuses with non-zero counts)"},"byPlatform":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by platform (only includes platforms with non-zero counts)"},"byCurrentRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by currentReleaseId. The empty string key represents deployments with no current release (initial provisioning)."},"byPinnedRelease":{"type":"object","additionalProperties":{"type":"number"},"description":"Count of deployments by pinnedReleaseId among deployments that are pinned. Excludes unpinned deployments."}},"required":["total","byStatus","byPlatform","byCurrentRelease","byPinnedRelease"]},"DeploymentDetailResponse":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"release":{"$ref":"#/components/schemas/DeploymentReleaseInfo"},"deploymentGroup":{"$ref":"#/components/schemas/DeploymentGroupInfo"},"project":{"$ref":"#/components/schemas/DeploymentProjectInfo"}}}]},"Deployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"targetEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of target environment variables for the deployment"},"currentEnvironmentVariables":{"type":"object","nullable":true,"properties":{"variables":{"type":"array","items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Environment variables in the snapshot"},"hash":{"type":"string","description":"Deterministic hash of all variables for change detection"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when snapshot was created"}},"required":["variables","hash","createdAt"],"description":"Snapshot of current environment variables for the deployment"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId"]},"DeploymentConnectionInfo":{"type":"object","properties":{"arc":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Manager URL for commands"},"deploymentId":{"type":"string","description":"Deployment ID to use in command requests"}},"required":["url","deploymentId"]},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"publicEndpoints":{"type":"object","additionalProperties":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"protocol":{"type":"string","enum":["http","tcp"]},"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"wildcardHost":{"type":"string"}},"required":["url","protocol","host","port"]},"description":"Public endpoints keyed by endpoint name."}},"required":["type"]},"description":"Deployed resources and their public endpoints"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"platform":{"type":"string"}},"required":["arc","resources","status","platform"]},"CreateDeploymentResponse":{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Effective deployment model persisted for the deployment."},"token":{"type":"string","description":"Deployment token (only returned when using deployment group token)"}},"required":["deployment","deploymentModel"]},"NewDeploymentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"deploymentGroupId":{"type":"string","description":"Required for workspace/project tokens. Deployment group tokens use their own group automatically."},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Optional manager to assign. If omitted, the project default or system manager is selected."}]},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"environmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"},"description":"Configuration of environment variables for the deployment"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"project":{"type":"string","maxLength":100,"description":"Project ID or name"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"Stack settings for deployment customization"},"resourcePrefix":{"$ref":"#/components/schemas/ResourcePrefix"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method that created the deployment. Defaults to cli."}]},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup method metadata used to guide privileged teardown."}]},"inputValues":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"default":{},"description":"Stack input values provided by the deployment creator."},"operatorScope":{"type":"string","minLength":1,"maxLength":512,"description":"Display-only scope reported by the Operator manifest."},"operatorPermission":{"type":"string","minLength":1,"maxLength":64,"description":"Display-only permission tier reported by the Operator manifest."},"initialDesiredRelease":{"type":"string","enum":["active","none"],"default":"active","description":"Desired-release selection for a new deployment. Use none to register an environment without initially requesting a release; later updates can assign one."}},"required":["name","platform","project"],"additionalProperties":false,"description":"Request schema for creating a new deployment"},"ResourcePrefix":{"type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?=[a-z0-9])){1,38}[a-z0-9]$","description":"Optional physical-name prefix for generated cloud resources. Omit to let the manager generate one."},"ImportDeploymentRequest":{"oneOf":[{"$ref":"#/components/schemas/ForwardImportRequest"},{"$ref":"#/components/schemas/PersistImportedDeploymentRequest"}],"description":"Request schema for importing a deployment from resolved setup infrastructure"},"ForwardImportRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["forward"],"default":"forward"},"project":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user-session callers."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Required for user-session callers. Deployment-group tokens use their own group automatically.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager ID. If omitted, the first suitable manager for the source platform is used."}]},"source":{"$ref":"#/components/schemas/ImportSource"},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["source"]},"ImportSource":{"type":"object","properties":{"deploymentName":{"type":"string","minLength":1,"description":"User-chosen deployment name. Must be unique within the deployment group; the manager returns 409 on collision."},"resourcePrefix":{"allOf":[{"$ref":"#/components/schemas/ResourcePrefix"},{"description":"Stable physical-name prefix used by the setup artifact."}]},"sourceKind":{"$ref":"#/components/schemas/ImportSourceKind"},"setupMetadata":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMetadata"},{"description":"Setup source metadata needed to guide privileged teardown."}]},"releaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release that produced the setup artifact. Defaults to latest.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Cloud platform of the imported stack"},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"region":{"type":"string","description":"Region or location reported by the setup artifact"},"setupTarget":{"allOf":[{"$ref":"#/components/schemas/SetupTarget"},{"description":"Setup target this package was generated for"}]},"setupImportFormatVersion":{"$ref":"#/components/schemas/SetupImportFormatVersion"},"setupFingerprint":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprint"},{"description":"Setup compatibility fingerprint embedded in the package"}]},"setupFingerprintVersion":{"allOf":[{"$ref":"#/components/schemas/SetupFingerprintVersion"},{"description":"Setup fingerprint algorithm version embedded in the package"}]},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ImportedResource"},"minItems":1}},"required":["deploymentName","resourcePrefix","platform","region","setupTarget","setupImportFormatVersion","setupFingerprint","setupFingerprintVersion","stackSettings","resources"],"description":"Resolved setup import payload"},"ImportSourceKind":{"type":"string","enum":["cloudformation","terraform","helm"],"description":"Source label for observability only — does not affect import behavior."},"KubernetesBasePlatform":{"type":"string","enum":["aws","gcp","azure"],"description":"Base cloud platform for cloud-backed Kubernetes imports."},"SetupImportFormatVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Setup import payload format version embedded in the package"},"ImportedResource":{"type":"object","properties":{"id":{"type":"string","description":"Resource id from the active stack"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},"importData":{"type":"object","additionalProperties":{"nullable":true},"description":"Resolved typed import payload"}},"required":["id","type","importData"]},"PersistImportedDeploymentRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["persist"]},"name":{"type":"string","minLength":1,"description":"Deployment name. Must be unique within the deployment group."},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain."},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"basePlatform":{"$ref":"#/components/schemas/KubernetesBasePlatform"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."},"stackState":{"nullable":true},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"runtimeMetadata":{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},"scheduleReconciliation":{"type":"boolean","default":false},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"default":"provisioning","description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"currentReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"setupMetadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"setupTarget":{"$ref":"#/components/schemas/SetupTarget"},"setupFingerprint":{"$ref":"#/components/schemas/SetupFingerprint"},"setupFingerprintVersion":{"$ref":"#/components/schemas/SetupFingerprintVersion"},"deploymentToken":{"type":"string"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["mode","name","deploymentGroupId","managerId","platform","stackSettings","runtimeMetadata","deploymentProtocolVersion","setupTarget","setupFingerprint","setupFingerprintVersion"]},"SetFirstPartyDeploymentInputsResponse":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"SetFirstPartyDeploymentInputsRequest":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"}},"required":["platform"]},"SetupRegistrationOperationResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"status":{"$ref":"#/components/schemas/SetupRegistrationOperationStatus"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"physicalResourceId":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/SetupRegistrationOperationResult"},"error":{"type":"object","nullable":true,"properties":{"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["message","retryable"]}},"required":["id","action","sourceKind","status","deploymentId","physicalResourceId","result","error"]},"SetupRegistrationAction":{"type":"string","enum":["create","update","delete"]},"SetupRegistrationOperationStatus":{"type":"string","enum":["pending","processing","waiting-for-handoff","succeeded","failed","responding","responded"]},"SetupRegistrationOperationResult":{"type":"object","nullable":true,"properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deploymentToken":{"type":"string","nullable":true},"helmValues":{"type":"string","nullable":true}},"required":["deploymentId","deploymentToken","helmValues"]},"CreateSetupRegistrationOperationRequest":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SetupRegistrationAction"},"sourceKind":{"allOf":[{"$ref":"#/components/schemas/ImportSourceKind"},{"description":"Package source that produced the import payload"}]},"source":{"allOf":[{"$ref":"#/components/schemas/ImportSource"}],"nullable":true},"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":512},"cloudFormation":{"$ref":"#/components/schemas/SetupRegistrationCloudFormationTarget"}},"required":["action","sourceKind"],"additionalProperties":false},"SetupRegistrationCloudFormationTarget":{"type":"object","nullable":true,"properties":{"stackId":{"type":"string","minLength":1},"requestId":{"type":"string","minLength":1},"logicalResourceId":{"type":"string","minLength":1},"responseUrl":{"type":"string","format":"uri"},"physicalResourceId":{"type":"string","nullable":true,"minLength":1},"serviceTimeoutSeconds":{"type":"integer","minimum":60,"maximum":7200,"default":3300}},"required":["stackId","requestId","logicalResourceId","responseUrl"],"additionalProperties":false},"DeleteDeploymentResponse":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]},"message":{"type":"string"}},"required":["action","message"]},"DeleteDeploymentRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cleanup","detach","forget"]}},"required":["action"]},"PinReleaseRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Release ID to pin the deployment to. Set to null to unpin and use active release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for pinning/unpinning deployment release"},"DeploymentInputsResponse":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"values":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StackInputValueRequest"},"description":"Current non-secret input values. Secret values are never returned."},"providedInputIds":{"type":"array","items":{"type":"string"},"description":"Input IDs that currently have a value, including redacted secrets."}},"required":["inputs","values","providedInputIds"]},"UpdateDeploymentInputsResponse":{"allOf":[{"$ref":"#/components/schemas/DeploymentInputsResponse"},{"type":"object","properties":{"runtimeUpdateRequested":{"type":"boolean"}},"required":["runtimeUpdateRequested"]}]},"UpdateDeploymentInputsRequest":{"type":"object","properties":{"inputValues":{"$ref":"#/components/schemas/StackInputValuesRequest"},"clearInputIds":{"type":"array","items":{"type":"string"},"default":[]}},"additionalProperties":false},"UpdateDeploymentEnvironmentVariablesRequest":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"type":{"type":"string","enum":["plain","secret"],"description":"Variable type"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources)"}},"required":["name","value","type"]},"description":"Environment variables for the deployment"}},"required":["variables"],"additionalProperties":false,"description":"Request schema for updating deployment environment variables"},"CreateDeploymentTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"The generated deployment token (only shown once)"},"deploymentId":{"type":"string","description":"The deployment ID that this token is scoped to"}},"required":["token","deploymentId"]},"CreateDeploymentTokenRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128,"description":"Optional description for the deployment token"},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiration date for the deployment token"}},"required":["description"]},"CreateManagerResponse":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["pending"]},"setupToken":{"type":"string"},"setupTokenId":{"type":"string"},"deploymentLink":{"type":"string"},"setupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"inputValues":{"$ref":"#/components/schemas/EncryptedStackInputValues"},"publicSubdomain":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","description":"Operator-pinned deployment subdomain for this setup token."},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["plain","secret"]},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["name","type","targetResources"]}}},"required":["metadata","policy","environmentVariables"]},"setup":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["cloudformation"]},"deploymentPortalUrl":{"type":"string"},"launchUrl":{"type":"string"},"templateUrl":{"type":"string"},"stackName":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","launchUrl","templateUrl","stackName","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["google-oauth"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"oauthStartUrl":{"type":"string"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","oauthStartUrl","region","stackSettings"]},{"type":"object","properties":{"method":{"type":"string","enum":["terraform"]},"deploymentPortalUrl":{"type":"string"},"managerUrl":{"type":"string"},"providerSource":{"type":"string"},"moduleSource":{"type":"string"},"moduleVersion":{"type":"string"},"moduleInputs":{"type":"object","additionalProperties":{"type":"string"}},"mainTf":{"type":"string"},"tfvars":{"type":"string"},"commands":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["method","deploymentPortalUrl","managerUrl","providerSource","moduleSource","moduleInputs","mainTf","tfvars","commands","stackSettings"]}]}},"required":["managerId","setupStatus","setupToken","setupTokenId","deploymentLink","setupConfig","setup"]},"NewManagerRequest":{"type":"object","properties":{"name":{"type":"string"},"cloud":{"$ref":"#/components/schemas/PrivateManagerCloud"},"region":{"type":"string","minLength":1,"maxLength":64,"description":"Cloud region for the manager."},"setupMethod":{"$ref":"#/components/schemas/PrivateManagerSetupMethod"},"network":{"type":"string","enum":["create","default"],"description":"Optional network mode for the private-manager setup. Defaults to create for production isolation; default uses the provider default network for faster dev/test setup."},"otlpConfig":{"type":"object","properties":{"logsEndpoint":{"type":"string","format":"uri","description":"External OTLP logs endpoint (e.g. https://api.axiom.co/v1/logs)"},"logsAuthHeader":{"type":"string","description":"Auth header in 'key=value,...' format (e.g. 'authorization=Bearer ,x-axiom-dataset=')"}},"required":["logsEndpoint","logsAuthHeader"],"description":"Optional external OTLP config for forwarding logs to Axiom, Datadog, etc. Falls back to built-in DeepStore when not set."}},"required":["name","cloud","region"]},"PrivateManagerCloud":{"type":"string","enum":["aws","gcp","azure"],"description":"Cloud where the private manager will be deployed."},"PrivateManagerSetupMethod":{"type":"string","enum":["cloudformation","google-oauth","terraform"],"description":"Optional setup method. Defaults to cloudformation for AWS, google-oauth for GCP, and terraform for Azure."},"ManagerRetryResponse":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/CreateManagerResponse"},{"type":"object","properties":{"mode":{"type":"string","enum":["setup"]}},"required":["mode"]}]},{"$ref":"#/components/schemas/ManagerRetryDeploymentResponse"}]},"ManagerRetryDeploymentResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["deployment"]},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"setupStatus":{"type":"string","enum":["provisioning"]},"deploymentId":{"type":"string"},"message":{"type":"string"}},"required":["mode","managerId","setupStatus","deploymentId","message"]},"Manager":{"type":"object","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for the manager"}]},"name":{"type":"string","description":"Display name of the manager"},"targets":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms this manager can handle"},"cloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where this private manager is deployed"},"region":{"type":"string","nullable":true,"description":"Cloud region selected for this private manager"},"setupStatus":{"type":"string","nullable":true,"enum":["pending","provisioning","active","failed","deleting","deleted",null],"description":"Private manager setup lifecycle status"},"url":{"type":"string","nullable":true,"format":"uri","description":"Manager URL (self-reported via heartbeat). DeepStore endpoints are exposed through this URL (e.g., {url}/v1/logs)"},"managementConfigs":{"$ref":"#/components/schemas/ManagerManagementConfigs"},"isSystem":{"type":"boolean","description":"Whether this is a system manager (Alien-hosted)"},"workspaceId":{"type":"string","description":"The workspace ID (for system managers, this is ALIEN_WORKSPACE_ID)"},"status":{"$ref":"#/components/schemas/ManagerStatus"},"version":{"type":"string","nullable":true,"description":"Manager version (self-reported via heartbeat)"},"metrics":{"type":"object","nullable":true,"properties":{"activeDeployments":{"type":"number","description":"Number of active deployments"},"pendingDeployments":{"type":"number","description":"Number of pending deployments"},"memoryUsageMb":{"type":"number","description":"Memory usage in megabytes"},"cpuUsagePercent":{"type":"number","description":"CPU usage percentage"}},"description":"Runtime metrics (self-reported via heartbeat)"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the manager"},"logsDatabaseId":{"type":"string","nullable":true,"description":"ID of the logs database associated with this manager"},"managedDeploymentCount":{"type":"integer","minimum":0,"description":"Number of deployments currently being managed by this manager"},"defaultProjectCount":{"type":"integer","minimum":0,"description":"Number of projects that select this manager as a default manager"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the manager was created"}},"required":["id","name","targets","managementConfigs","isSystem","workspaceId","status","managedDeploymentCount","defaultProjectCount","createdAt"],"description":"Manager schema"},"ManagerManagementConfigs":{"type":"object","properties":{"aws":{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"},"platform":{"type":"string","enum":["aws"]}},"required":["managingRoleArn","platform"]},"gcp":{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"},"platform":{"type":"string","enum":["gcp"]}},"required":["serviceAccountEmail","platform"]},"azure":{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."},"platform":{"type":"string","enum":["azure"]}},"required":["managingTenantId","oidcIssuer","oidcSubject","platform"]},"kubernetes":{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}},"description":"Per-platform management configurations for cross-account access (self-reported via heartbeat)"},"ManagerStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"],"description":"Current health status"},"ManagerDomainBindingResponse":{"type":"object","properties":{"managerDomainBinding":{"$ref":"#/components/schemas/DomainEndpoint"}},"required":["managerDomainBinding"]},"UpdateManagerDomainBinding":{"type":"object","properties":{"domainId":{"type":"string","nullable":true,"pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"}},"additionalProperties":false},"UpdateManagerRequest":{"type":"object","properties":{"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Optional release ID to update to. If not provided, the active release will be chosen","example":"rel_WbhQgksrawSKIpEN0NAssHX9"}},"additionalProperties":false,"description":"Request schema for updating a manager to a new release"},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"deploymentId":{"type":"string","nullable":true,"pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"releaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"debugSessionId":{"type":"string","nullable":true,"pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"data":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["LoadingConfiguration"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["Finished"]}},"required":["type"]},{"type":"object","properties":{"stack":{"type":"string","description":"Name of the stack being built"},"type":{"type":"string","enum":["BuildingStack"]}},"required":["stack","type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform being targeted"},"stack":{"type":"string","description":"Name of the stack being checked"},"type":{"type":"string","enum":["RunningPreflights"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"targetTriple":{"type":"string","description":"Target triple for the runtime"},"type":{"type":"string","enum":["DownloadingAlienRuntime"]},"url":{"type":"string","description":"URL being downloaded from"}},"required":["targetTriple","type","url"]},{"type":"object","properties":{"relatedResources":{"type":"array","items":{"type":"string"},"description":"All resource names sharing this build (for deduped container groups)"},"resourceName":{"type":"string","description":"Name of the resource being built"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["BuildingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being built"},"type":{"type":"string","enum":["BuildingImage"]}},"required":["image","type"]},{"type":"object","properties":{"image":{"type":"string","description":"Name of the image being pushed"},"progress":{"oneOf":[{"type":"object","properties":{"bytesUploaded":{"type":"integer","minimum":0,"description":"Bytes uploaded so far"},"layersUploaded":{"type":"integer","minimum":0,"description":"Number of layers uploaded so far"},"operation":{"type":"string","description":"Current operation being performed"},"totalBytes":{"type":"integer","minimum":0,"description":"Total bytes to upload"},"totalLayers":{"type":"integer","minimum":0,"description":"Total number of layers to upload"}},"required":["bytesUploaded","layersUploaded","operation","totalBytes","totalLayers"],"description":"Progress information for image push operations"},{"nullable":true}]},"type":{"type":"string","enum":["PushingImage"]}},"required":["image","type"]},{"type":"object","properties":{"destination":{"type":"string","nullable":true,"description":"Human-readable destination for pushed images"},"platform":{"type":"string","description":"Target platform"},"stack":{"type":"string","description":"Name of the stack being pushed"},"type":{"type":"string","enum":["PushingStack"]}},"required":["platform","stack","type"]},{"type":"object","properties":{"resourceName":{"type":"string","description":"Name of the resource being pushed"},"resourceType":{"type":"string","description":"Type of the resource: \"worker\", \"container\""},"type":{"type":"string","enum":["PushingResource"]}},"required":["resourceName","resourceType","type"]},{"type":"object","properties":{"project":{"type":"string","description":"Project name"},"type":{"type":"string","enum":["CreatingRelease"]}},"required":["project","type"]},{"type":"object","properties":{"language":{"type":"string","description":"Language being compiled (rust, typescript, etc.)"},"progress":{"type":"string","nullable":true,"description":"Current progress/status line from the build output"},"type":{"type":"string","enum":["CompilingCode"]}},"required":["language","type"]},{"type":"object","properties":{"nextState":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},"suggestedDelayMs":{"type":"integer","nullable":true,"minimum":0,"description":"An suggested duration to wait before executing the next step."},"type":{"type":"string","enum":["StackStep"]}},"required":["nextState","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["GeneratingCloudFormationTemplate"]}},"required":["type"]},{"type":"object","properties":{"platform":{"type":"string","description":"Platform for which the template is being generated"},"type":{"type":"string","enum":["GeneratingTemplate"]}},"required":["platform","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being provisioned"},"releaseId":{"type":"string","description":"ID of the release being deployed to the agent"},"type":{"type":"string","enum":["ProvisioningAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being updated"},"releaseId":{"type":"string","description":"ID of the new release being deployed to the agent"},"type":{"type":"string","enum":["UpdatingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being deleted"},"releaseId":{"type":"string","description":"ID of the release that was running on the agent"},"type":{"type":"string","enum":["DeletingAgent"]}},"required":["agentId","releaseId","type"]},{"type":"object","properties":{"agentId":{"type":"string","description":"ID of the agent being debugged"},"debugSessionId":{"type":"string","description":"ID of the debug session"},"type":{"type":"string","enum":["DebuggingAgent"]}},"required":["agentId","debugSessionId","type"]},{"type":"object","properties":{"strategyName":{"type":"string","description":"Name of the deployment strategy being used"},"type":{"type":"string","enum":["PreparingEnvironment"]}},"required":["strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being deployed"},"type":{"type":"string","enum":["DeployingStack"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being tested"},"type":{"type":"string","enum":["RunningTestWorker"]}},"required":["stackName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpStack"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"stackName":{"type":"string","description":"Name of the stack being cleaned up"},"strategyName":{"type":"string","description":"Name of the deployment strategy being used for cleanup"},"type":{"type":"string","enum":["CleaningUpEnvironment"]}},"required":["stackName","strategyName","type"]},{"type":"object","properties":{"platformName":{"type":"string","description":"Name of the platform (e.g., \"AWS\", \"GCP\")"},"type":{"type":"string","enum":["SettingUpPlatformContext"]}},"required":["platformName","type"]},{"type":"object","properties":{"repositoryName":{"type":"string","description":"Name of the docker repository"},"type":{"type":"string","enum":["EnsuringDockerRepository"]}},"required":["repositoryName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeployingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"roleArn":{"type":"string","description":"ARN of the role to assume"},"type":{"type":"string","enum":["AssumingRole"]}},"required":["roleArn","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"type":{"type":"string","enum":["ImportingStackStateFromCloudFormation"]}},"required":["cfnStackName","type"]},{"type":"object","properties":{"cfnStackName":{"type":"string","description":"Name of the CloudFormation stack"},"currentStatus":{"type":"string","description":"Current stack status"},"type":{"type":"string","enum":["DeletingCloudFormationStack"]}},"required":["cfnStackName","currentStatus","type"]},{"type":"object","properties":{"bucketNames":{"type":"array","items":{"type":"string"},"description":"Names of the S3 buckets being emptied"},"type":{"type":"string","enum":["EmptyingBuckets"]}},"required":["bucketNames","type"]},{"type":"object","properties":{"deploymentGroupId":{"type":"string","description":"ID of the deployment group this slot belongs to"},"deploymentId":{"type":"string","description":"ID of the deployment that was created"},"releaseId":{"type":"string","nullable":true,"description":"Initial release the slot was created with, if any"},"type":{"type":"string","enum":["DeploymentCreated"]}},"required":["deploymentGroupId","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousReleaseId":{"type":"string","nullable":true,"description":"ID of the release that was previously live, if any"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentReleased"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release the platform was trying to deploy, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"phase":{"type":"string","enum":["preflights","provisioning","updating","deleting"],"description":"Phase of a deployment at which a failure occurred.\n\nDerived from the source deployment status: `preflights-failed` →\n`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →\n`Updating`, `delete-failed` → `Deleting`.\n`refresh-failed` is modelled separately via `DeploymentDegraded`."},"type":{"type":"string","enum":["DeploymentFailed"]}},"required":["deploymentId","error","phase","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"error":{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},"type":{"type":"string","enum":["DeploymentDegraded"]}},"required":["deploymentId","error","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release that is now live"},"type":{"type":"string","enum":["DeploymentRecovered"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment that was deleted"},"type":{"type":"string","enum":["DeploymentDeleted"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"attemptedReleaseId":{"type":"string","nullable":true,"description":"ID of the release that the failed attempt was targeting, if known"},"deploymentId":{"type":"string","description":"ID of the deployment"},"previousError":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"type":{"type":"string","enum":["DeploymentRetryRequested"]}},"required":["deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"releaseId":{"type":"string","description":"ID of the release being redeployed"},"type":{"type":"string","enum":["DeploymentRedeployRequested"]}},"required":["deploymentId","releaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"pinnedReleaseId":{"type":"string","description":"ID of the release that is now pinned"},"previousPinnedReleaseId":{"type":"string","nullable":true,"description":"ID of the previously pinned release, if any"},"type":{"type":"string","enum":["DeploymentReleasePinned"]}},"required":["deploymentId","pinnedReleaseId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"previousPinnedReleaseId":{"type":"string","description":"ID of the release that was previously pinned"},"type":{"type":"string","enum":["DeploymentReleaseUnpinned"]}},"required":["deploymentId","previousPinnedReleaseId","type"]},{"type":"object","properties":{"actor":{"oneOf":[{"type":"object","properties":{"email":{"type":"string","nullable":true,"description":"User email when the principal is a user."},"id":{"type":"string","description":"Stable user or service-account identifier."},"kind":{"type":"string","enum":["user","serviceAccount"],"description":"Type of authenticated principal that requested an event."}},"required":["id","kind"],"description":"Authenticated principal that requested a deployment intent event."},{"nullable":true}]},"changedKeys":{"type":"array","items":{"type":"string"},"description":"Names of the environment variables that changed (added, removed, or modified)"},"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentEnvironmentUpdated"]}},"required":["changedKeys","deploymentId","type"]},{"type":"object","properties":{"deploymentId":{"type":"string","description":"ID of the deployment"},"type":{"type":"string","enum":["DeploymentDeletionRequested"]}},"required":["deploymentId","type"]}]},"state":{"oneOf":[{"type":"object","properties":{"failed":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]}},"description":"Event failed with an error"}},"required":["failed"]},{"type":"string","enum":["none"]},{"type":"string","enum":["started"]},{"type":"string","enum":["success"]}],"description":"Represents the state of an event"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"createdAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","data","state","projectId","createdAt","workspaceId"]},"GenerateManagerTokenResponse":{"type":"object","properties":{"accessToken":{"type":"string","description":"Platform JWT for authenticating with the manager"},"expiresIn":{"type":"number","nullable":true,"description":"Token lifetime in seconds"},"tokenType":{"type":"string","enum":["Bearer"]},"managerUrl":{"type":"string","description":"Manager URL for direct access"},"databaseId":{"type":"string","nullable":true,"description":"Log database ID (null if logs not configured)"},"controlPlaneUrl":{"type":"string","nullable":true,"description":"Log control plane URL (null if logs not configured)"}},"required":["accessToken","expiresIn","tokenType","managerUrl","databaseId","controlPlaneUrl"]},"GenerateManagerTokenRequest":{"type":"object","properties":{"project":{"type":"string","minLength":1,"maxLength":100,"description":"Project ID or name to scope token access to."}},"required":["project"],"additionalProperties":false},"GenerateManagerBindingTokenRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Exact deployment whose remote bindings may be resolved.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"GenerateManagerCommandTokenRequest":{"type":"object","properties":{"commandId":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Exact command whose encrypted payload may be read.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"}},"required":["commandId"],"additionalProperties":false},"ResolveManagerGcpOAuthProviderResponse":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["alien-managed"]}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["custom"]},"clientId":{"$ref":"#/components/schemas/GcpOAuthClientId"},"clientSecret":{"$ref":"#/components/schemas/GcpOAuthClientSecret"}},"required":["mode","clientId","clientSecret"]}]},"ResolveManagerGcpOAuthProviderRequest":{"type":"object","properties":{"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group bearer token whose project-level OAuth provider should be resolved."},"returnOrigin":{"type":"string","format":"uri","description":"Browser origin that will receive the Google OAuth callback result. Must be a first-party dashboard origin or the active portal origin for the deployment group's project."}},"required":["deploymentGroupToken"]},"ManagerHeartbeatResponse":{"type":"object","properties":{"acknowledged":{"type":"boolean"},"timestamp":{"type":"string"}},"required":["acknowledged","timestamp"]},"ManagerHeartbeatRequest":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Current health status"},"version":{"type":"string","description":"Manager version"},"url":{"type":"string","format":"uri","description":"Manager public URL (for accessing DeepStore endpoints)"},"managementConfigs":{"allOf":[{"$ref":"#/components/schemas/ManagerManagementConfigs"},{"description":"Per-platform management configurations for cross-account access"}]},"metrics":{"type":"object","properties":{"activeDeployments":{"type":"number"},"pendingDeployments":{"type":"number"},"memoryUsageMb":{"type":"number"},"cpuUsagePercent":{"type":"number"}},"description":"Optional runtime metrics"}},"required":["status","url","managementConfigs"]},"ManagerDeployment":{"type":"object","properties":{"platform":{"type":"string","description":"Platform of the internal deployment"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status of the internal deployment"},"deploymentId":{"type":"string","description":"Internal deployment ID"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Currently deployed private manager release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"Target private manager release for an in-progress update","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"error":{"nullable":true,"description":"Latest provision / upgrade / delete error"},"resources":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string","description":"Resource type"},"status":{"type":"string","description":"Resource status"},"outputs":{"type":"object","additionalProperties":{"nullable":true},"description":"Resource outputs"}},"required":["type","status"]},"description":"Simplified stack state resources"},"environmentInfo":{"nullable":true,"description":"Manager environment info"}},"required":["platform","status","deploymentId","resources"]},"PrepareOperatorManifestPackageResponse":{"type":"object","properties":{"package":{"$ref":"#/components/schemas/Package"}},"required":["package"]},"PrepareOperatorManifestPackageRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}},"required":["project"],"additionalProperties":false},"RenderOperatorManifestResponse":{"type":"object","properties":{"manifest":{"type":"string","description":"Rendered multi-document Kubernetes manifest"},"applyCommand":{"type":"string","description":"kubectl command for applying the manifest from a file"},"filename":{"type":"string","description":"Suggested local filename"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL embedded in the manifest"},"imagePending":{"type":"boolean","description":"True when the operator image is still building. The manifest contains a placeholder image () and must not be applied yet — re-render once the operator-image package is ready to get the real image."}},"required":["manifest","applyCommand","filename","managerUrl","imagePending"]},"RenderOperatorManifestRequest":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"format":{"type":"string","enum":["raw","helm"],"default":"raw","description":"raw: a kubectl-applyable manifest for one cluster. helm: a paste-into-your-chart template whose namespace and environment name come from Helm at install time."},"environmentName":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Per-environment identity. Required for raw output, ignored for helm.","example":"my-app"},"namespace":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$","description":"Namespace to observe and install into. Omit for helm to use the release namespace."},"scope":{"type":"string","enum":["namespace","cluster"],"default":"namespace","description":"namespace: a namespaced Role that manages the install namespace. cluster: a ClusterRole that manages every namespace."},"labelSelector":{"type":"string","minLength":1,"maxLength":256,"description":"Optional Kubernetes label selector narrowing what is managed, applied within the scope."},"permission":{"type":"string","enum":["observe"],"default":"observe","description":"Operator permission tier"},"operatorImagePackageId":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Ready operator-image package to use for the Operator image. If omitted, the latest ready operator-image package for the project is used.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"deploymentGroupToken":{"type":"string","minLength":1,"description":"Deployment-group token embedded in the operator Secret"},"logCollector":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"description":"Enable the node log collector DaemonSet for raw pod logs."}},"required":["project","deploymentGroupToken"],"additionalProperties":false},"APIKey":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true}},"required":["id","email","image"],"description":"User information associated with the API key"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig","createdByUser"],"description":"API key information"},"APIKeyDeploymentSetupConfig":{"type":"object","nullable":true,"properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDeploymentSetupEnvironmentVariable"}}},"required":["metadata","policy","environmentVariables"]},"APIKeyDeploymentSetupEnvironmentVariable":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]},"CreateAPIKeyResponse":{"type":"object","properties":{"apiKey":{"type":"string","description":"The generated API key value (only shown once)"},"keyInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"description":{"type":"string","nullable":true},"keyPrefix":{"type":"string"},"type":{"type":"string","enum":["workspace","project","deployment","deployment-group","manager"]},"role":{"type":"string"},"workspaceId":{"type":"string"},"projectId":{"type":"string","nullable":true},"deploymentId":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"managerId":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"revokedAt":{"type":"string","nullable":true,"format":"date-time"},"deploymentSetupConfig":{"$ref":"#/components/schemas/APIKeyDeploymentSetupConfig"}},"required":["id","description","keyPrefix","type","role","workspaceId","projectId","deploymentId","deploymentGroupId","managerId","enabled","createdAt","expiresAt","lastUsedAt","revokedAt","deploymentSetupConfig"]}},"required":["apiKey","keyInfo"],"description":"Response containing the new API key and its metadata"},"CreateAPIKeyRequest":{"type":"object","properties":{"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"scope":{"$ref":"#/components/schemas/Scope"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"required":["description","scope","expiresAt"],"description":"Request schema for creating a new API key"},"Scope":{"oneOf":[{"$ref":"#/components/schemas/WorkspaceScope"},{"$ref":"#/components/schemas/ProjectScope"},{"$ref":"#/components/schemas/DeploymentScope"},{"$ref":"#/components/schemas/DeploymentGroupScope"},{"$ref":"#/components/schemas/ManagerScope"}],"discriminator":{"propertyName":"type","mapping":{"workspace":"#/components/schemas/WorkspaceScope","project":"#/components/schemas/ProjectScope","deployment":"#/components/schemas/DeploymentScope","deployment-group":"#/components/schemas/DeploymentGroupScope","manager":"#/components/schemas/ManagerScope"}},"description":"Scope and role configuration for service accounts"},"WorkspaceScope":{"type":"object","properties":{"type":{"type":"string","enum":["workspace"]},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["type","role"],"description":"Workspace-scoped configuration"},"ProjectScope":{"type":"object","properties":{"type":{"type":"string","enum":["project"]},"projectId":{"type":"string","description":"ID of the project this is scoped to"},"role":{"$ref":"#/components/schemas/ProjectRole"}},"required":["type","projectId","role"],"description":"Project-scoped configuration"},"DeploymentScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment"]},"deploymentId":{"type":"string","description":"ID of the deployment this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment belongs to"},"role":{"$ref":"#/components/schemas/DeploymentRole"}},"required":["type","deploymentId","projectId","role"],"description":"Deployment-scoped configuration"},"DeploymentGroupScope":{"type":"object","properties":{"type":{"type":"string","enum":["deployment-group"]},"deploymentGroupId":{"type":"string","description":"ID of the deployment group this is scoped to"},"projectId":{"type":"string","description":"ID of the project this deployment group belongs to"},"role":{"$ref":"#/components/schemas/DeploymentGroupRole"}},"required":["type","deploymentGroupId","projectId","role"],"description":"Deployment group-scoped configuration"},"ManagerScope":{"type":"object","properties":{"type":{"type":"string","enum":["manager"]},"managerId":{"type":"string","description":"ID of the manager this is scoped to"},"role":{"$ref":"#/components/schemas/ManagerRole"}},"required":["type","managerId","role"],"description":"Manager-scoped configuration"},"UpdateAPIKeyRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"description":{"type":"string","nullable":true,"minLength":3,"maxLength":128},"deploymentSetupConfig":{"$ref":"#/components/schemas/UpdateDeploymentSetupPolicy"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","description":"Optional expiration date for the API key"}},"description":"Request schema for updating an API key"},"UpdateDeploymentSetupPolicy":{"type":"object","properties":{"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"}},"required":["policy"],"description":"Editable part of a deployment link's setup config. Locked env vars and input values are preserved."},"DeleteAPIKeysRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"minItems":1}},"required":["ids"]},"DomainWithUsage":{"allOf":[{"$ref":"#/components/schemas/Domain"},{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/DomainEndpoint"}},"usage":{"type":"object","properties":{"deploymentUrlProjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"portalBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true},"hostname":{"type":"string"}},"required":["id","projectId","projectName","hostname"]}},"packageDomains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]}},"managerBindings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"managerId":{"type":"string"},"managerName":{"type":"string"},"hostname":{"type":"string"}},"required":["id","managerId","managerName","hostname"]}}},"required":["deploymentUrlProjects","portalBindings","packageDomains","managerBindings"]}},"required":["endpoints","usage"]}]},"Domain":{"type":"object","properties":{"id":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"domain":{"type":"string"},"isSystem":{"type":"boolean"},"claimToken":{"type":"string"},"hostedZoneId":{"type":"string","nullable":true},"nameServers":{"type":"array","nullable":true,"items":{"type":"string"}},"status":{"type":"string","enum":["pending-zone-creation","pending-verification","verified","lost-verification","failed","deleting"]},"error":{"nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"verifiedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","workspaceId","domain","isSystem","claimToken","status","createdAt","updatedAt"]},"EventListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"releaseCreatedAt":{"type":"string","format":"date-time","description":"createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used"}}}]},"ListMachinesJoinTokensResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"}}},"required":["tokens"]},"MachinesJoinTokenSummary":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string"},"createdBy":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"maxJoins":{"type":"integer","nullable":true},"joinCount":{"type":"integer"},"lastUsedAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true}},"required":["id","createdAt","createdBy","joinCount"]},"CreateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RotateMachinesJoinTokenResponse":{"type":"object","properties":{"joinToken":{"type":"string"},"controlPlaneUrl":{"type":"string","format":"uri"},"clusterId":{"type":"string"},"token":{"$ref":"#/components/schemas/MachinesJoinTokenSummary"},"cliInstallScriptUrl":{"type":"string","nullable":true,"format":"uri","description":"Deploy CLI install script URL, or null when no ready CLI package exists."},"cliCommandName":{"type":"string","nullable":true,"description":"CLI command name to use in join instructions."}},"required":["joinToken","controlPlaneUrl","clusterId","token","cliInstallScriptUrl","cliCommandName"]},"RevokeMachinesJoinTokenResponse":{"type":"object","properties":{"tokenId":{"type":"string"},"revoked":{"type":"boolean"}},"required":["tokenId","revoked"]},"ListMachinesInventoryResponse":{"type":"object","properties":{"machines":{"type":"array","items":{"$ref":"#/components/schemas/MachinesInventoryItem"}}},"required":["machines"]},"MachinesInventoryItem":{"type":"object","properties":{"machineId":{"type":"string"},"status":{"type":"string"},"capacityGroup":{"type":"string"},"zone":{"type":"string"},"cpu":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"memory":{"$ref":"#/components/schemas/MachinesCapacityMetric"},"storage":{"allOf":[{"$ref":"#/components/schemas/MachinesCapacityMetric"}],"nullable":true},"drainBlockers":{"type":"array","items":{"$ref":"#/components/schemas/MachinesDrainBlocker"}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"overlayIp":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"horizondVersion":{"type":"string","nullable":true},"localOverrides":{"type":"array","items":{"$ref":"#/components/schemas/MachinesLocalOverrideObservation"}},"localOverridesObservedAt":{"type":"string","nullable":true},"replicaCount":{"type":"integer"}},"required":["machineId","status","capacityGroup","zone","cpu","memory","drainBlockers","drainForce","lastHeartbeat","localOverrides","replicaCount"]},"MachinesCapacityMetric":{"type":"object","properties":{"allocated":{"type":"number"},"systemReserve":{"type":"number"},"total":{"type":"number"}},"required":["allocated","systemReserve","total"]},"MachinesDrainBlocker":{"type":"object","properties":{"reason":{"type":"string"},"workloadId":{"type":"string","nullable":true},"workloadName":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true},"schedulingMode":{"type":"string","nullable":true},"state":{"type":"string","nullable":true}},"required":["reason"]},"MachinesLocalOverrideObservation":{"type":"object","properties":{"activeDigest":{"type":"string","nullable":true},"actor":{"type":"string","nullable":true},"baseAssignmentHash":{"type":"string"},"baseDigest":{"type":"string","nullable":true},"candidateDigest":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"failureCategory":{"type":"string","nullable":true},"fallbackDigest":{"type":"string","nullable":true},"forcedStop":{"type":"boolean","nullable":true},"healthySince":{"type":"string","nullable":true},"incidentId":{"type":"string","nullable":true},"lifecycle":{"type":"string"},"phaseStartedAt":{"type":"string","nullable":true},"replicaId":{"type":"string"},"workloadName":{"type":"string"}},"required":["baseAssignmentHash","lifecycle","replicaId","workloadName"]},"CancelMachinesMachineDrainResponse":{"type":"object","properties":{"machineId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["machineId","cancelled"]},"DrainMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"requested":{"type":"boolean"}},"required":["machineId","requested"]},"DrainMachinesMachineRequest":{"type":"object","properties":{"deadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"force":{"type":"boolean"}}},"RemoveMachinesMachineResponse":{"type":"object","properties":{"machineId":{"type":"string"},"removed":{"type":"boolean"}},"required":["machineId","removed"]},"CommandListItemResponse":{"allOf":[{"$ref":"#/components/schemas/Command"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/CommandDeploymentInfo"},"project":{"$ref":"#/components/schemas/CommandProjectInfo"}}}]},"CommandDeploymentInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"$ref":"#/components/schemas/CommandDeploymentGroupInfo"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"},"managerId":{"type":"string","description":"Manager ID for obtaining access tokens"},"managerUrl":{"type":"string","nullable":true,"format":"uri","description":"URL of the manager for direct payload access"},"managerName":{"type":"string","nullable":true,"description":"Human-readable name of the manager"},"managerIsSystem":{"type":"boolean","nullable":true,"description":"Whether the manager is Alien-hosted (system)"}},"required":["id","name","managerId"]},"CommandDeploymentGroupInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CommandProjectInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"name":{"type":"string"}},"required":["id","name"]},"Command":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"name":{"type":"string","description":"Command name (e.g., 'analyze-repository', 'sync-data')"},"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Command states in the Commands protocol lifecycle"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Delivery mode for this command (push/pull), derived from the target at creation time"},"target":{"type":"object","nullable":true,"properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to; null on commands created before target routing"},"attempt":{"type":"number","nullable":true,"description":"Current attempt number"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","nullable":true,"description":"Size of command params in bytes"},"responseSizeBytes":{"type":"number","nullable":true,"description":"Size of command response in bytes"},"createdAt":{"type":"string","format":"date-time","description":"When the command was created"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command was dispatched to the deployment"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When the command completed"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if command failed"},"result":{"nullable":true,"description":"Decoded command result when available"}},"required":["id","deploymentId","projectId","workspaceId","name","state","deploymentModel","target","attempt","deadline","requestSizeBytes","responseSizeBytes","createdAt","dispatchedAt","completedAt","error"]},"ListCommandNamesResponse":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ListCommandDeploymentsResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name"]}}},"required":["deployments"]},"CreateCommandResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"projectId":{"type":"string","description":"Project ID (for manager to use in routing)"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"How to dispatch the command"},"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Resource the command is addressed to"},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How the command is delivered to its target"}},"required":["id","projectId","deploymentModel","target","deliveryMode"]},"CreateCommandRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Target deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Command name (e.g., 'analyze-repository')"},"params":{"nullable":true,"description":"Command parameters for public invocation"},"target":{"type":"string","maxLength":255,"description":"Resource id the command is addressed to. Required when the deployment has more than one command-capable resource."},"initialState":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Initial state (PENDING_UPLOAD if params require upload, PENDING if inline)"},"deadline":{"type":"string","nullable":true,"format":"date-time","description":"Optional deadline for command execution"},"requestSizeBytes":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Size of command params in bytes"}},"required":["deploymentId","name"]},"ResolvedCommandTarget":{"type":"object","properties":{"target":{"type":"object","properties":{"resourceId":{"type":"string","description":"The resource ID within the deployment's stack (e.g. a Worker/Container/Daemon id)."},"resourceType":{"type":"string","enum":["worker","container","daemon"],"description":"The kind of command-capable resource a command targets."}},"required":["resourceId","resourceType"],"description":"Identifies the specific resource a command is addressed to."},"deliveryMode":{"type":"string","enum":["push","pull"],"description":"How a command is delivered to its target resource.\n\nThis is a Commands-protocol-specific concept and is intentionally distinct\nfrom `DeploymentModel` (see `stack_settings.rs`), which governs the\ninfrastructure-level push/pull wiring for a deployment. Serialized\nlowercase for consistency with `CommandTargetType`."}},"required":["target","deliveryMode"]},"UpdateCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"New command state"},"attempt":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Current attempt number"},"dispatchedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command was dispatched"},"completedAt":{"type":"string","nullable":true,"format":"date-time","description":"When command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}}},"DispatchCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"DispatchCommandRequest":{"type":"object","properties":{"dispatchedAt":{"type":"string","format":"date-time","description":"When the command was dispatched"}},"required":["dispatchedAt"]},"CompleteCommandResponse":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the command transitioned; false if it was already terminal"}},"required":["updated"]},"CompleteCommandRequest":{"type":"object","properties":{"state":{"type":"string","enum":["SUCCEEDED","FAILED","EXPIRED"],"description":"Terminal state to transition to"},"completedAt":{"type":"string","format":"date-time","description":"When the command completed"},"responseSizeBytes":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Size of response in bytes"},"error":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Error details if failed"}},"required":["state","completedAt"]},"IncrementCommandAttemptResponse":{"type":"object","properties":{"attempt":{"type":"integer","description":"The attempt number after the increment"}},"required":["attempt"]},"DebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"DebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"owner":{"type":"string","nullable":true,"maxLength":320},"state":{"$ref":"#/components/schemas/DebugSessionState"},"mode":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"provider":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"presignedUrls":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DebugPackagePresignedURLs"}},"error":{"$ref":"#/components/schemas/DebugSessionPublicError"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"deployment":{"$ref":"#/components/schemas/DebugSessionDeployment"},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"}},"required":["id","state","mode","presignedUrls","createdAt","expiresAt","deploymentId","deployment","projectId","workspaceId"]},"DebugSessionState":{"type":"string","enum":["pending","running","stopping","stopped","expired","failed"]},"DebugPackagePresignedURLs":{"type":"object","properties":{"readUrl":{"type":"string","maxLength":2048,"format":"uri"},"writeUrl":{"type":"string","maxLength":2048,"format":"uri"}},"required":["readUrl","writeUrl"]},"DebugSessionPublicError":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128},"context":{"$ref":"#/components/schemas/DebugSessionPublicErrorContext"},"hint":{"type":"string","nullable":true},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599},"internal":{"type":"boolean","enum":[false]},"message":{"type":"string","maxLength":16384},"retryable":{"type":"boolean"},"source":{"$ref":"#/components/schemas/DebugSessionPublicErrorCause"}},"required":["code","internal","message","retryable"]},"DebugSessionPublicErrorContext":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]}}]},"DebugSessionPublicErrorCause":{"type":"object","properties":{"code":{"type":"string","maxLength":128},"context":{"$ref":"#/components/schemas/DebugSessionPublicErrorContext"},"hint":{"type":"string","nullable":true},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599},"internal":{"type":"boolean","enum":[false]},"message":{"type":"string","maxLength":16384},"retryable":{"type":"boolean"}},"required":["code","internal","message","retryable"]},"DebugSessionDeployment":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string"},"deploymentGroup":{"type":"object","nullable":true,"properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"}},"required":["id","name"]},"platform":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Represents the target cloud platform."},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Platform-specific environment information"}},"required":["id","name"]},"ManagerActiveDebugSessionListResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ManagerActiveDebugSession"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"},"ManagerActiveDebugSession":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"state":{"$ref":"#/components/schemas/DebugSessionState"},"expiresAt":{"type":"string","format":"date-time"},"backendTargetId":{"type":"string","nullable":true,"maxLength":512}},"required":["id","deploymentId","state","expiresAt"]},"CreateDebugSessionRequest":{"type":"object","properties":{"id":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Override the generated id. Manager passes the registry session id so logs correlate.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"owner":{"type":"string","minLength":1,"maxLength":320,"description":"Original actor label attested by the assigned manager."},"expiresAt":{"type":"string","format":"date-time"},"backendTargetId":{"type":"string","minLength":1,"maxLength":512,"description":"Provider-owned target used for exact restart reconciliation."}},"required":["deploymentId","owner","expiresAt"]},"UpdateDebugSessionRequest":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/DebugSessionState"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."}}},"DeploymentInfo":{"type":"object","properties":{"tokenType":{"type":"string","enum":["deployment","deployment-group"],"description":"Type of token used to authenticate this request"},"deployment":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}},"required":["name","platform"],"description":"Deployment details (present when using a deployment-scoped token)"},"deploymentGroup":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"pinnedSubdomain":{"type":"string","nullable":true}},"required":["id","name","pinnedSubdomain"],"description":"Deployment group details (present when using a deployment-group token)"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatarUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["id","name"]},"project":{"type":"object","properties":{"name":{"type":"string"},"portal":{"type":"object","properties":{"appearance":{"$ref":"#/components/schemas/DeploymentPortalAppearance"}},"required":["appearance"]},"stackSummary":{"type":"object","nullable":true,"properties":{"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms supported by the active release"},"requiresNetwork":{"type":"boolean","description":"Whether the stack contains resources that require cloud VPC networking"},"resourceCounts":{"type":"object","properties":{"workers":{"type":"integer","minimum":0},"containers":{"type":"integer","minimum":0},"publicHttpsEndpoints":{"type":"integer","minimum":0,"description":"Resources that declare managed public HTTPS endpoint setup"},"externalInfra":{"type":"integer","minimum":0,"description":"Storage, queue, KV, vault, database, or cache resources that Kubernetes needs Terraform to provision"},"total":{"type":"integer","minimum":0}},"required":["workers","containers","publicHttpsEndpoints","externalInfra","total"]},"publicEndpoints":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"endpointName":{"type":"string"},"hostLabel":{"type":"string"},"wildcardSubdomains":{"type":"boolean"}},"required":["resourceId","endpointName","hostLabel","wildcardSubdomains"]},"description":"Public endpoints declared by the active release stack"}},"required":["platforms","requiresNetwork","resourceCounts","publicEndpoints"]},"generatedDomain":{"type":"object","nullable":true,"properties":{"domain":{"type":"string"},"isSystem":{"type":"boolean"}},"required":["domain","isSystem"],"description":"Parent domain for generated deployment URLs. Chosen public subdomains are only allowed when isSystem is false."}},"required":["name","portal"]},"packages":{"type":"object","properties":{"ready":{"type":"boolean","description":"True if all enabled packages are ready for deployment"},"cli":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"commandName":{"type":"string","description":"CLI command name to use in install instructions"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"binaries":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA256 checksum"},"size":{"type":"integer","minimum":0,"description":"File size in bytes"},"url":{"type":"string","description":"Download URL for the binary"}},"required":["sha256","size","url"],"description":"Information about a single binary artifact"},"description":"Binary information for each target platform"},"buildInfo":{"type":"object","properties":{"alienSha":{"type":"string","description":"Alien source commit used to build the source CLI and agent binaries."},"horizonSha":{"type":"string","description":"Compute backend source revision used by optional package extensions, if applicable."},"machineBundleManifestUrl":{"type":"string","nullable":true,"description":"Machine runtime release manifest embedded into the generated CLI."},"platformSha":{"type":"string","description":"Source revision used to build the package service and optional extensions."},"sourceAgentBinarySha256":{"type":"string","nullable":true,"description":"SHA256 checksum of the source runtime helper binary shipped with the CLI package, when present."},"sourceCliBinarySha256":{"type":"string","description":"SHA256 checksum of the source deploy CLI binary before white-label config is appended."}},"required":["alienSha","horizonSha","platformSha","sourceCliBinarySha256"],"description":"Source provenance for a generated CLI package."}},"required":["binaries","buildInfo"],"description":"Outputs from a CLI package build"},"error":{"nullable":true},"installScripts":{"type":"object","properties":{"windows":{"type":"string","format":"uri"},"mac":{"type":"string","format":"uri"},"linux":{"type":"string","format":"uri"}},"required":["windows","mac","linux"],"description":"Install script URLs for each OS"}},"required":["status","commandName","installScripts"]},"cloudformation":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"targets":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"launchStackUrl":{"type":"string","description":"AWS Console quick-launch URL"},"sha256":{"type":"string","description":"SHA256 checksum of the template"},"size":{"type":"integer","minimum":0,"description":"Template size in bytes"},"stackPolicyUrl":{"type":"string","description":"S3 URL to the CloudFormation stack policy"},"target":{"type":"string","description":"CloudFormation target (aws, eks)"},"templateUrl":{"type":"string","description":"S3 URL to the CloudFormation template"}},"required":["launchStackUrl","sha256","size","stackPolicyUrl","target","templateUrl"],"description":"Information about a single CloudFormation template package for one target."},"description":"Template artifacts by CloudFormation target."}},"required":["targets"],"description":"Outputs from a CloudFormation package build."},"error":{"nullable":true},"mode":{"type":"string","enum":["auto","outputs"]},"launchUrl":{"type":"string","format":"uri","description":"CloudFormation launch URL"},"outputsSchema":{"nullable":true}},"required":["status","mode","launchUrl"]},"terraform":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"modules":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the module archive"},"filename":{"type":"string","description":"Filename of the module archive"},"shasum":{"type":"string","description":"SHA256 checksum of the archive"},"size":{"type":"integer","minimum":0,"description":"Size of the archive in bytes"},"source":{"type":"string","description":"Terraform module source (hostname/namespace/name/provider, without scheme)"},"target":{"type":"string","description":"Terraform module target (aws, gcp, azure, eks, gke, aks)"},"variables":{"type":"array","items":{"type":"string"},"description":"Terraform input variables exposed by this module."}},"required":["downloadUrl","filename","shasum","size","source","target"],"description":"Information about a single Terraform module package for one target."},"description":"Module registry artifacts by Terraform target."},"provider":{"type":"object","properties":{"gpgPublicKey":{"type":"object","properties":{"asciiArmor":{"type":"string","description":"ASCII-armored public key"},"keyId":{"type":"string","description":"GPG key ID"}},"required":["asciiArmor","keyId"],"description":"GPG public key for Terraform provider signature verification"},"platforms":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Download URL for the provider zip"},"filename":{"type":"string","description":"Filename of the provider zip"},"shasum":{"type":"string","description":"SHA256 checksum of the zip file"},"shasumsSignatureUrl":{"type":"string","description":"URL to the shasums signature file"},"shasumsUrl":{"type":"string","description":"URL to the shasums file"},"size":{"type":"integer","minimum":0,"description":"Size of the zip file in bytes"}},"required":["downloadUrl","filename","shasum","shasumsSignatureUrl","shasumsUrl","size"],"description":"Information about a single Terraform provider package for a specific platform"},"description":"Provider packages for each target platform"},"source":{"type":"string","description":"Terraform provider source (hostname/namespace/type, without scheme)"}},"required":["gpgPublicKey","platforms","source"],"description":"Terraform provider registry outputs."}},"required":["modules","provider"],"description":"Outputs from a Terraform package build."},"error":{"nullable":true},"providerSource":{"type":"string","description":"Terraform provider source (without https://)"},"moduleSources":{"type":"object","additionalProperties":{"type":"string"},"description":"Terraform module sources by target"},"moduleVersion":{"type":"string"},"managerUrls":{"type":"object","additionalProperties":{"type":"string"},"description":"Manager URLs by Terraform target"}},"required":["status","providerSource","moduleSources","managerUrls"]},"helm":{"type":"object","properties":{"status":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Status of a package build"},"version":{"type":"string"},"outputs":{"type":"object","properties":{"chart":{"type":"string","description":"OCI chart reference (e.g., \"oci://public.ecr.aws/acme/charts/project-id\")"},"version":{"type":"string","description":"Chart version (e.g., \"1.2.3\")"}},"required":["chart","version"],"description":"Outputs from a Helm chart package build"},"error":{"nullable":true},"chartRef":{"type":"string","description":"OCI chart reference"},"managerFetchExample":{"type":"string"},"localImportExample":{"type":"string"}},"required":["status","chartRef"]}},"required":["ready"]},"installContext":{"type":"object","properties":{"targets":{"type":"object","additionalProperties":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managerUrl":{"type":"string","format":"uri"},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"awsManagingAccountId":{"type":"string"}},"required":["platform","managerUrl"]},"description":"Deployment-session install context by Terraform/installer target"}},"required":["targets"]},"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"},"setupConfig":{"$ref":"#/components/schemas/DeploymentInfoSetupConfig"},"readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ready","notReady","unknown"]},"checks":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["passed","failed","warning","unknown"]},"message":{"type":"string"},"checkedAt":{"type":"string"}},"required":["code","status","message","checkedAt"]}}},"required":["status","checks"]}},"required":["tokenType","workspace","project","packages","installContext","supportedRegions"]},"DeploymentPortalAppearance":{"type":"object","properties":{"avatarUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional project-specific avatar override for the deployment portal."},"preset":{"$ref":"#/components/schemas/DeploymentPortalAppearancePreset"},"accentColor":{"$ref":"#/components/schemas/DeploymentPortalAccentColor"},"title":{"type":"string","nullable":true,"maxLength":80,"description":"Optional portal title. Defaults to the project name."},"subtitle":{"type":"string","nullable":true,"maxLength":160,"description":"Optional customer-facing subtitle."},"supportUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional support or contact URL."},"docsUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri","description":"Optional documentation URL."},"density":{"$ref":"#/components/schemas/DeploymentPortalDensity"}}},"SupportedCloudRegions":{"type":"object","properties":{"aws":{"type":"array","items":{"type":"string"},"description":"AWS regions supported by this Alien environment."},"gcp":{"type":"array","items":{"type":"string"},"description":"GCP regions supported by this Alien environment."},"azure":{"type":"array","items":{"type":"string"},"description":"Azure locations supported by this Alien environment."}},"required":["aws","gcp","azure"]},"DeploymentInfoSetupConfig":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DeploymentSetupMetadata"},"policy":{"$ref":"#/components/schemas/DeploymentSetupPolicy"},"environmentVariables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Z_][A-Z0-9_]*$","description":"Variable name"},"type":{"$ref":"#/components/schemas/EnvironmentVariableType"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string","pattern":"^[a-zA-Z0-9_-]+(\\*)?$"},"description":"Target resource patterns (null = all resources, array = wildcard patterns)"}},"required":["name","type","targetResources"]}},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."}},"inputValues":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedStackInputSummary"}}},"required":["metadata","policy","environmentVariables"]},"ResolvedStackInputSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"]}},"required":{"type":"boolean"},"secret":{"type":"boolean"},"provided":{"type":"boolean"}},"required":["id","label","providedBy","required","secret","provided"]},"DeploymentComputePlan":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"poolId":{"type":"string"},"workloads":{"type":"array","items":{"type":"string"}},"requirements":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"scale":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["fixed"]},"machines":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","machines"]},{"type":"object","properties":{"type":{"type":"string","enum":["autoscale"]},"min":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]},"max":{"type":"object","properties":{"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"default":{"type":"integer","minimum":0}},"required":["min","max","default"]}},"required":["type","min","max"]}]},"selected":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"recommended":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"machines":{"type":"array","items":{"type":"object","properties":{"machine":{"type":"string"},"profile":{"type":"object","properties":{"cpu":{"type":"string"},"memoryBytes":{"type":"integer","minimum":0},"ephemeralStorageBytes":{"type":"integer","minimum":0},"architecture":{"type":"string","nullable":true,"enum":["arm64","x86_64",null]},"gpu":{"type":"object","nullable":true,"properties":{"type":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["type","count"]}},"required":["cpu","memoryBytes","ephemeralStorageBytes"]},"recommended":{"type":"boolean"}},"required":["machine","profile","recommended"]}},"errors":{"type":"array","items":{"type":"string"}}},"required":["poolId","workloads","requirements","scale","selected","recommended","machines"]}}},"required":["pools"]},"PreparedDeploymentStack":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"setup":{"$ref":"#/components/schemas/SetupFingerprintInfo"}},"required":["platform","stack","setup"]},"SlackInstallUrlResponse":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"SlackIntegrationStatus":{"type":"object","properties":{"connected":{"type":"boolean"},"slackTeamId":{"type":"string","nullable":true},"slackTeamName":{"type":"string","nullable":true},"installedByUserId":{"type":"string","nullable":true},"installedAt":{"type":"string","nullable":true},"notificationChannelId":{"type":"string","nullable":true}},"required":["connected","slackTeamId","slackTeamName","installedByUserId","installedAt","notificationChannelId"]},"SlackChannelsResponse":{"type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}}},"required":["channels"]},"SlackChannel":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isMember":{"type":"boolean"}},"required":["id","name","isMember"]},"SlackNotificationChannelResponse":{"type":"object","properties":{"notificationChannelId":{"type":"string","nullable":true},"warning":{"type":"string","nullable":true}},"required":["notificationChannelId","warning"]},"SlackNotificationChannelRequest":{"type":"object","properties":{"channelId":{"type":"string","nullable":true}},"required":["channelId"]},"AgentSessionListResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionListItem"}}},"required":["sessions"]},"AgentSessionListItem":{"type":"object","properties":{"id":{"type":"string"},"triggerType":{"type":"string"},"subjectId":{"type":"string"},"subject":{"$ref":"#/components/schemas/AgentSessionSubject"},"status":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","triggerType","subjectId","subject","status","createdAt","updatedAt"]},"AgentSessionSubject":{"type":"object","properties":{"deploymentName":{"type":"string","nullable":true},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"releaseId":{"type":"string","nullable":true},"releaseCommitMessage":{"type":"string","nullable":true},"releaseCommitRef":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"projectName":{"type":"string","nullable":true}},"required":["deploymentName","deploymentGroupId","deploymentGroupName","releaseId","releaseCommitMessage","releaseCommitRef","projectId","projectName"]},"AgentSessionDetail":{"allOf":[{"$ref":"#/components/schemas/AgentSessionListItem"},{"type":"object","properties":{"resultText":{"type":"string","nullable":true},"toolNames":{"type":"array","nullable":true,"items":{"type":"string"}},"error":{"type":"string","nullable":true},"pendingApproval":{"type":"object","nullable":true,"properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["resultText","toolNames","error","pendingApproval"]}]},"AgentSessionEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AgentSessionEvent"}},"latestSeq":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["events","latestSeq","hasMore"]},"AgentSessionEvent":{"oneOf":[{"$ref":"#/components/schemas/AgentSessionStatusEvent"},{"$ref":"#/components/schemas/AgentSessionStepEvent"},{"$ref":"#/components/schemas/AgentSessionToolCallEvent"},{"$ref":"#/components/schemas/AgentSessionToolResultEvent"},{"$ref":"#/components/schemas/AgentSessionMarkdownEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalRequestedEvent"},{"$ref":"#/components/schemas/AgentSessionApprovalGrantedEvent"},{"$ref":"#/components/schemas/AgentSessionRestartedEvent"},{"$ref":"#/components/schemas/AgentSessionEventsTruncatedEvent"}],"discriminator":{"propertyName":"type","mapping":{"status":"#/components/schemas/AgentSessionStatusEvent","step":"#/components/schemas/AgentSessionStepEvent","tool_call":"#/components/schemas/AgentSessionToolCallEvent","tool_result":"#/components/schemas/AgentSessionToolResultEvent","markdown":"#/components/schemas/AgentSessionMarkdownEvent","approval_requested":"#/components/schemas/AgentSessionApprovalRequestedEvent","approval_granted":"#/components/schemas/AgentSessionApprovalGrantedEvent","session_restarted":"#/components/schemas/AgentSessionRestartedEvent","events_truncated":"#/components/schemas/AgentSessionEventsTruncatedEvent"}}},"AgentSessionStatusEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["status"]},"payload":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionStepEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["step"]},"payload":{"type":"object","properties":{"stepId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["in_progress","complete","error"]}},"required":["stepId","title","status"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolCallEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionToolResultEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["tool_result"]},"payload":{"type":"object","properties":{"toolCallId":{"type":"string","nullable":true},"toolName":{"type":"string","nullable":true},"ok":{"type":"boolean"},"output":{"nullable":true}},"required":["toolCallId","toolName","ok"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionMarkdownEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["markdown"]},"payload":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalRequestedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_requested"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"toolCallId":{"type":"string"},"toolName":{"type":"string"},"input":{"nullable":true}},"required":["approvalId","toolCallId","toolName"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApprovalGrantedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["approval_granted"]},"payload":{"type":"object","properties":{"approvalId":{"type":"string"},"approvedByUserId":{"type":"string"},"approvedByName":{"type":"string","nullable":true},"source":{"type":"string","enum":["dashboard","slack"]}},"required":["approvalId","approvedByUserId","approvedByName","source"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionRestartedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["session_restarted"]},"payload":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionEventsTruncatedEvent":{"type":"object","properties":{"seq":{"type":"number"},"createdAt":{"type":"string"},"type":{"type":"string","enum":["events_truncated"]},"payload":{"type":"object","properties":{"limit":{"type":"number"}},"required":["limit"]}},"required":["seq","createdAt","type","payload"]},"AgentSessionApproveResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"resumed":{"type":"boolean"}},"required":["jobId","status","resumed"]},"AgentSessionStopResponse":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string"},"canceled":{"type":"boolean"}},"required":["jobId","status","canceled"]},"SyncListResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"name":{"type":"string","minLength":2,"maxLength":100,"pattern":"^(?!ag[-_])[a-z0-9](-?[a-z0-9])*$","description":"Deployment name.","example":"acme-prod"},"publicSubdomain":{"type":"string","nullable":true,"minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$","description":"Public subdomain for auto-generated domains"},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"projectId":{"type":"string","pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform for the deployment"},"basePlatform":{"type":"string","nullable":true,"enum":["aws","gcp","azure",null],"description":"Underlying cloud platform for Kubernetes deployments."},"region":{"type":"string","nullable":true,"description":"Cloud region or location for the deployment."},"deploymentProtocolVersion":{"$ref":"#/components/schemas/DeploymentProtocolVersion"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"ID of deployment group this deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}],"description":"Cloud environment information"},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-provided configuration (network, deployment model, approvals)"},"stackState":{"type":"object","nullable":true,"properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"State of infrastructure components managed by this deployment"},"runtimeMetadata":{"type":"object","nullable":true,"properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment state persistence"},"currentReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the currently deployed release (actual state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"desiredReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the desired release for deployment/update (desired state)","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"pinnedReleaseId":{"type":"string","nullable":true,"pattern":"rel_[0-9a-zA-Z]{28}$","description":"ID of the pinned release","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"importSource":{"type":"string","nullable":true,"enum":["cloudformation","terraform","helm",null],"description":"Setup source that imported this deployment"},"setupMethod":{"type":"string","nullable":true,"enum":["cloudformation","google-oauth","terraform","helm","cli","manual",null],"description":"Setup method that created the deployment record and owns setup-time resources."},"setupMetadata":{"type":"object","nullable":true,"additionalProperties":{"nullable":true},"description":"Setup method metadata needed to guide privileged teardown."},"setupTarget":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup target for compatibility checks"},"setupFingerprint":{"type":"string","nullable":true,"minLength":1,"description":"Imported setup compatibility fingerprint"},"setupFingerprintVersion":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true,"description":"Imported setup fingerprint algorithm version"},"operatorScope":{"type":"string","nullable":true,"description":"Display-only scope reported by the Operator manifest"},"operatorPermission":{"type":"string","nullable":true,"description":"Display-only permission tier reported by the Operator manifest"},"operatorVersion":{"type":"string","nullable":true,"description":"Version reported by the Operator"},"capabilities":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Capability state reported by the Operator"},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment"},"lastHeartbeatAt":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last received heartbeat from the deployment"},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Latest error information if the deployment is in a failed state"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"ID of the manager responsible for this deployment"}]},"workspaceId":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"userEnvironmentVariables":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/EnvironmentVariableConfig"}},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."},"deploymentToken":{"type":"string","nullable":true},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","name","status","projectId","platform","deploymentProtocolVersion","deploymentGroupId","stackSettings","retryRequested","createdAt","updatedAt","managerId","workspaceId","userEnvironmentVariables"]}}},"required":["deployments"],"description":"Full deployment records for manager operation"},"SyncListRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. Manager-scoped tokens are always constrained to their own manager ID."}]},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to include"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment status"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by deployment platform"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Filter by deployment group ID","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"limit":{"type":"integer","minimum":1,"maximum":500,"description":"Maximum records to return"}},"additionalProperties":false,"description":"Request to list full operational deployments"},"SyncAcquireResponseDeployment":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"deploymentGroupId":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Deployment group ID the deployment belongs to","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Setup method recorded on the deployment when it has a setup-owned path."}]},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state (includes releases)"},"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration"}},"required":["deploymentId","projectId","deploymentGroupId","current","config"]},"SyncContextRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the context. Manager-scoped tokens are constrained to their own manager ID."}]},"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"}},"required":["deploymentId"],"additionalProperties":false},"SyncAcquireResponse":{"type":"object","properties":{"deployments":{"type":"array","items":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"},"description":"List of acquired deployments with deployment context"},"failures":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"ID of the deployment that failed","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"projectId":{"type":"string","description":"Project ID the deployment belongs to"},"error":{"allOf":[{"$ref":"#/components/schemas/APIError"},{"description":"Error that occurred during context building"}]}},"required":["deploymentId","projectId","error"]},"description":"List of deployments that failed during context building (locks already released)"}},"required":["deployments","failures"],"description":"Acquired deployments and failures"},"SyncAcquireRequest":{"type":"object","properties":{"managerId":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Manager requesting the deployments. If omitted, resolved from each deployment's managerId column."}]},"session":{"type":"string","description":"Unique session identifier for lock tracking"},"deploymentIds":{"type":"array","items":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"description":"Specific deployment IDs to lock (for Pull model sync)"},"statuses":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter by deployment statuses (default: all deployment statuses)"},"platforms":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter by platforms (default: all platforms the Manager supports)"},"setupMethod":{"allOf":[{"$ref":"#/components/schemas/DeploymentSetupMethod"},{"description":"Filter by setup method for setup-owned acquisition paths"}]},"acquireMode":{"type":"string","enum":["runtime","setup-run","setup-teardown"],"description":"Phase ownership mode for deployment acquisition"},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model from stackSettings.deploymentModel."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of deployments to acquire (default: 10)"}},"required":["session","deploymentModel"],"additionalProperties":false,"description":"Request to acquire deployments for processing"},"SyncReconcileResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the state was reconciled"},"current":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Current deployment state after reconciliation"},"target":{"type":"object","properties":{"config":{"type":"object","properties":{"allowFrozenChanges":{"type":"boolean","description":"Allow frozen resource changes during updates\nWhen true, skips the frozen resources compatibility check.\nThis requires running with elevated cloud credentials."},"basePlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"computeBackend":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusters":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"clusterId":{"type":"string","description":"Cluster ID (deterministic: workspace/project/deployment/resourceid)"},"managementToken":{"type":"string","description":"Management token for API access (hm_...)\nUsed by alien-deployment controllers to create/update containers"}},"required":["clusterId","managementToken"],"description":"Configuration for a single container worker cluster.\n\nContains the cluster ID and management token needed to interact with\nthe managed container control plane API for container operations."},"description":"Cluster configurations (one per ComputeCluster resource)\nKey: ComputeCluster resource ID from stack\nValue: Cluster ID and management token for that cluster"},"horizonMachineImage":{"oneOf":[{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"amis":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"AMI IDs by architecture, then AWS region."}},"required":["amis"],"description":"AWS Horizon machine image catalog."},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"imageVersionId":{"type":"string","description":"Azure Compute Gallery image version ID."}},"required":["imageVersionId"],"description":"Azure Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"Azure Horizon machine image catalog."},{"nullable":true}]},"baseImage":{"type":"object","properties":{"name":{"type":"string","description":"Base OS image name."},"version":{"type":"string","description":"Base OS image version or channel."}},"required":["name","version"],"description":"Base image metadata for the Horizon machine image."},"channel":{"type":"string","description":"Logical image channel, such as prod, staging, or canary."},"createdAt":{"type":"string","description":"Image manifest creation timestamp."},"gcp":{"oneOf":[{"type":"object","properties":{"images":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sourceImage":{"type":"string","description":"Source image self link or image-family URL."}},"required":["sourceImage"],"description":"GCP Horizon machine image entry."},"description":"Images by architecture."}},"required":["images"],"description":"GCP Horizon machine image catalog."},{"nullable":true}]},"gitSha":{"type":"string","description":"Git commit SHA used to build the image."},"horizondArtifacts":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"sha256":{"type":"string","description":"SHA-256 digest for the artifact payload."},"url":{"type":"string","description":"HTTPS URL for the artifact."}},"required":["sha256","url"],"description":"Download artifact for one horizond release platform."},"description":"Per-architecture horizond artifacts by release-platform key."},"horizondVersion":{"type":"string","description":"horizond daemon version baked into the image."},"machineImageVersion":{"type":"string","description":"Published immutable machine image version."}},"required":["baseImage","channel","createdAt","gitSha","horizondArtifacts","horizondVersion","machineImageVersion"],"description":"Horizon machine image catalog.\n\nPlatform resolves concrete provider images from this catalog during rollout."},{"nullable":true}]},"url":{"type":"string","description":"Horizon control-plane API base URL."}},"required":["clusters","url"],"description":"Horizon control-plane configuration for container orchestration.\n\nContains all the information needed for Alien to interact with managed\ncontainer clusters during deployment. Each ComputeCluster resource gets its own\nentry in the clusters map."},{"type":"object","properties":{"type":{"type":"string","enum":["horizon"]}},"required":["type"]}],"description":"Compute backend for Container and Worker resources.\n\nDetermines how compute workloads are orchestrated on cloud platforms.\nWhen None, the platform default is used for cloud platforms."},{"nullable":true}]},"deploymentName":{"type":"string","nullable":true,"description":"Human-readable deployment name for cloud console metadata.\n\nThis is separate from the physical resource prefix in StackState. It is\nused only for display text such as IAM role descriptions, service\naccount descriptions, and custom role titles."},"deploymentToken":{"type":"string","nullable":true,"description":"Deployment token for pull authentication with the manager's registry.\n\nUsed by controllers to configure registry credentials so cloud platforms\nand K8s can pull images from the manager's `/v2/` endpoint."},"domainMetadata":{"oneOf":[{"type":"object","properties":{"baseDomain":{"type":"string","description":"Base domain for auto-generated domains (e.g., \"vpc.direct\")."},"hostedZoneId":{"type":"string","description":"Hosted zone ID for DNS records."},"publicSubdomain":{"type":"string","description":"Deployment public subdomain (e.g., \"k8f2j3\")."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Additional managed hostnames for the resource."},"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"endpoints":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"certificateChain":{"type":"string","nullable":true,"description":"Full PEM certificate chain (only present if status is \"issued\")."},"certificateId":{"type":"string","description":"Certificate ID (for tracking/logging)."},"certificateStatus":{"type":"string","enum":["pending","issued","renewing","renewal-failed","failed","deleting"],"description":"Certificate status in the certificate lifecycle"},"dnsError":{"type":"string","nullable":true,"description":"Last DNS error message. Present when DNS previously failed, even if status\nwas reset to pending for retry. Used to surface actionable error context\nin WaitingForDns failure messages."},"dnsStatus":{"type":"string","enum":["pending","active","updating","deleting","failed"],"description":"DNS record status in the DNS lifecycle"},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a managed hostname.\n\nIncludes decrypted certificate data for issued certificates.\nPrivate keys are deployment-scoped secrets (like environment variables)."},"description":"Endpoint-scoped metadata keyed by endpoint name."},"fqdn":{"type":"string","description":"Fully qualified domain name."},"issuedAt":{"type":"string","nullable":true,"description":"ISO 8601 timestamp when certificate was issued (for renewal detection)."},"privateKey":{"type":"string","nullable":true,"description":"Decrypted private key (only present if status is \"issued\")."}},"required":["certificateId","certificateStatus","dnsStatus","fqdn"],"description":"Certificate and DNS metadata for a public resource.\n\nThe direct fields describe the primary endpoint hostname. `endpoints`\ncontains endpoint-scoped metadata keyed by endpoint name. `aliases` contains\nadditional managed hostnames that route directly to the primary endpoint."},"description":"Metadata per resource ID."}},"required":["baseDomain","hostedZoneId","publicSubdomain","resources"],"description":"Domain metadata for auto-managed public resources (no private keys)."},{"nullable":true}]},"environmentVariables":{"type":"object","properties":{"createdAt":{"type":"string","description":"ISO 8601 timestamp when snapshot was created"},"hash":{"type":"string","description":"Deterministic hash of all variables (for change detection)"},"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource patterns (null = all resources, Some = wildcard patterns)"},"type":{"type":"string","enum":["plain","secret"],"description":"Type of environment variable"},"value":{"type":"string","description":"Variable value (decrypted - deployment has access to decryption keys)"}},"required":["name","type","value"],"description":"Environment variable for deployment"},"description":"Environment variables in the snapshot"}},"required":["createdAt","hash","variables"],"description":"Snapshot of environment variables at a point in time"},"externalBindings":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS S3 storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["s3"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"containerName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Blob Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["blob"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"bucketName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Cloud Storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gcs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"storagePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local filesystem storage binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-storage"]}},"required":["service"]}]}],"description":"Service-type based storage binding that supports multiple storage providers"},{"type":"object","properties":{"type":{"type":"string","enum":["storage"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"queueUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SQS queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["sqs"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"subscription":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"topic":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Pub/Sub parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["pubsub"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"queueName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Service Bus parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["servicebus"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"queuePath":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local queue parameters"},{"type":"object","properties":{"service":{"type":"string","enum":["local-queue"]}},"required":["service"]}]}],"description":"Binding parameters for Queue at runtime or in templates."},{"type":"object","properties":{"type":{"type":"string","enum":["queue"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"endpointUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"region":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS DynamoDB KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["dynamodb"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"collectionName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"databaseId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"projectId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Firestore KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["firestore"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"accountName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"tableName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Table Storage KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["tablestorage"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"connectionUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Redis KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["redis"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"keyPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Local development KV binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["local-kv"]}},"required":["service"]}]}],"description":"Represents a KV binding for key-value storage across platforms"},{"type":"object","properties":{"type":{"type":"string","enum":["kv"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushRoleArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS ECR (Elastic Container Registry) binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["ecr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"registryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"repositoryPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Container Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["acr"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"pullServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"pushServiceAccountEmail":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]},"repositoryName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Google Artifact Registry binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["gar"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"type":"string"},{"nullable":true},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"registryUrl":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Local container registry binding configuration.\n\nThe local registry runs on localhost only and does not require authentication.\nSecurity boundary is the OS process isolation on the customer's machine.\nExternal image access is secured by the manager's registry proxy (deployment tokens)."},{"type":"object","properties":{"service":{"type":"string","enum":["local"]}},"required":["service"]}]}],"description":"Service-type based artifact registry binding that supports multiple registry providers"},{"type":"object","properties":{"type":{"type":"string","enum":["artifact_registry"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS SSM Parameter Store vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["parameter-store"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Secret Manager vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["secret-manager"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"vaultName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Key Vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["key-vault"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultPrefix":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Kubernetes Secrets vault binding configuration"},{"type":"object","properties":{"service":{"type":"string","enum":["kubernetes-secret"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"dataDir":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"vaultName":{"type":"string","description":"The vault name for local storage"}},"required":["vaultName"],"description":"Local development vault binding (for testing/development)"},{"type":"object","properties":{"service":{"type":"string","enum":["local-vault"]}},"required":["service"]}]}],"description":"Represents a vault binding for secure secret management"},{"type":"object","properties":{"type":{"type":"string","enum":["vault"]}},"required":["type"]}]},{"allOf":[{"type":"object","properties":{"defaultDomain":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"environmentName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceGroupName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"resourceId":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"staticIp":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]},{"nullable":true}]}},"description":"Binding configuration for a pre-existing Azure Container Apps Environment.\n\nUsed when deploying to an existing environment instead of having Alien provision one.\nThis is useful for shared environments (e.g., test infrastructure) or enterprise\nsetups where environments are managed by a separate team."},{"type":"object","properties":{"type":{"type":"string","enum":["container_apps_environment"]}},"required":["type"]}]},{"allOf":[{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterEndpoint":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretArn":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"AWS Aurora Serverless v2 binding."},{"type":"object","properties":{"service":{"type":"string","enum":["aurora"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretName":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"GCP Cloud SQL binding."},{"type":"object","properties":{"service":{"type":"string","enum":["cloud-sql"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"passwordSecretUri":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"description":"Azure Flexible Server binding."},{"type":"object","properties":{"service":{"type":"string","enum":["flexible-server"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string","description":"Connection password as a concrete value, never an unresolved `SecretRef`: the platform\nmaterializes the Kubernetes secret into the pod env. The cloud variants carry a secret\nlocator instead."},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Operator-provided / BYO database binding."},{"type":"object","properties":{"service":{"type":"string","enum":["external"]}},"required":["service"]}]},{"allOf":[{"type":"object","properties":{"database":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"host":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"password":{"type":"string"},"port":{"oneOf":[{"type":"integer"},{"nullable":true},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"},"username":{"oneOf":[{"nullable":true},{"type":"string"},{"type":"object","properties":{"secretRef":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"description":"Reference to a Kubernetes Secret"}},"required":["secretRef"]}],"description":"Represents a value that can be either a concrete value, a template expression,\nor a reference to a Kubernetes Secret"}},"required":["password"],"description":"Local embedded Postgres binding."},{"type":"object","properties":{"service":{"type":"string","enum":["local-postgres"]}},"required":["service"]}]}],"description":"Connection details for a Postgres database, one variant per backend."},{"type":"object","properties":{"type":{"type":"string","enum":["postgres"]}},"required":["type"]}]}],"description":"Represents a binding to pre-existing infrastructure.\n\nThe binding type must match the resource type it's applied to.\nValidated at runtime by the executor."},"description":"Map from resource ID to external binding.\n\nValidated at runtime: binding type must match resource type."},"inputValues":{"type":"object","properties":{},"additionalProperties":{"nullable":true},"description":"Deployer-provided stack input values, keyed by input id. A resource\ngated with `.enabled(input)` and a Live lifecycle follows these\nvalues; a missing key falls back to the input's declared boolean\ndefault. Suppliers must not place secret-kind input values here:\nthis map serializes and debug-prints unredacted."},"labelDomain":{"type":"string","nullable":true,"description":"DNS-style label domain used for Kubernetes resource ownership labels.\n\nDefaults to `alien.dev` when absent. Whitelabeled Operator builds set this\nso generated workloads and optional log collectors share the same label\nnamespace."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]},{"nullable":true}]},"managerUrl":{"type":"string","nullable":true,"description":"Manager base URL (e.g., \"https://manager.alien.dev\").\n\nThe manager IS the container registry — its `/v2/` endpoint serves as\nthe OCI Distribution API. Controllers derive the proxy host from this\nto configure pull auth (RegistryCredentials, imagePullSecrets).\n\nWhen None (e.g., `alien dev`), controllers use image URIs as-is."},"monitoring":{"oneOf":[{"type":"object","properties":{"logsAuthHeader":{"type":"string","description":"Auth header value in \"key=value,...\" format.\nExample: \"authorization=Bearer \""},"logsEndpoint":{"type":"string","description":"Full OTLP logs endpoint URL.\nExample: \"https:///v1/logs\""},"metricsAuthHeader":{"type":"string","nullable":true,"description":"Auth header value for the metrics endpoint in \"key=value,...\" format (optional).\n\nWhen absent, `logs_auth_header` is reused for metrics -- suitable when the same\ncredential covers both signals. When present (e.g. Axiom with separate datasets),\nthis value is used exclusively for metrics.\n\nExample: \"authorization=Bearer ,x-axiom-dataset=\""},"metricsEndpoint":{"type":"string","nullable":true,"description":"Full OTLP metrics endpoint URL (optional).\nWhen set, the worker runtime exports its own VM/container orchestration metrics here.\nExample: \"https://api.axiom.co/v1/metrics\""},"resourceAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Resource attributes attached to every OTLP signal emitted for this deployment.\n\nPlatform managers use this for stable identity such as `alien.workspace_id`,\n`alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`.\nRuntime-specific resource attributes such as `service.name` remain owned by\nthe runtime/exporter."}},"required":["logsAuthHeader","logsEndpoint"],"description":"OTLP log export configuration for a deployment.\n\nWhen set, injected compute runtimes export captured application logs\nthrough the given endpoint via OTLP/HTTP; which resources are injected\nis platform-dependent. Workers read auth headers from a runtime-only\nsecret. Runtime-less Containers and Daemons receive standard OTEL auth\nvariables only at the final hosting boundary: Local passes them directly\nto the process and Kubernetes projects them from a per-workload Secret."},{"nullable":true}]},"nativeImageHost":{"type":"string","nullable":true,"description":"Native image registry host+prefix for platforms that require it.\n\nLambda (ECR) and Cloud Run (GAR) require native registry URIs. Other\nruntimes, including Azure Container Apps, pull through the manager's\nregistry proxy.\n\nDerived by the manager from the artifact registry binding:\n- ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}`\n- GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}`"},"observeAllNamespaces":{"type":"boolean","description":"When true the observe pass reports raw resources across every namespace\n(cluster scope); otherwise it stays within the operator's own namespace.\nThe label selector, if any, still filters within whichever scope applies.\nIgnored by cloud observers."},"observeLabelSelector":{"type":"string","nullable":true,"description":"Kubernetes label selector that narrows which raw resources the observe\npass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes\neverything in the namespace. Ignored by cloud observers."},"publicEndpoints":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Public endpoint URLs for exposed resources (optional override).\n\nUse this only when a caller already knows the public URL. Managed public\nendpoint flows should prefer `domain_metadata` plus controller-reported\nload balancer outputs so DNS, certificate renewal, and route readiness\nstay tied to the resource state.\n\nIf not set, platforms determine public endpoint URLs from other sources:\n- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS\n- Local: `http://localhost:{allocated_port}`\n- Custom or disabled exposure: no public endpoint URL unless a controller reports one\n\nOuter key: resource ID. Inner key: endpoint name. Value: public URL."},"stackSettings":{"type":"object","properties":{"compute":{"oneOf":[{"type":"object","properties":{"pools":{"type":"object","properties":{},"additionalProperties":{"oneOf":[{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"machines":{"type":"integer","minimum":0,"description":"Number of machines to run."},"mode":{"type":"string","enum":["fixed"]}},"required":["machines","mode"]},{"type":"object","properties":{"failure_domains":{"oneOf":[{"type":"object","properties":{"selectedFailureDomains":{"type":"array","items":{"type":"string"},"description":"Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation."},"spread":{"type":"integer","minimum":0,"description":"Number of distinct failure domains across which new stateful replicas may be spread."}},"required":["spread"],"description":"Failure-domain policy selected for a compute pool."},{"nullable":true}]},"machine":{"type":"string","nullable":true,"description":"Provider machine type selected for this deployment."},"max":{"type":"integer","minimum":0,"description":"Maximum machine count."},"min":{"type":"integer","minimum":0,"description":"Minimum machine count."},"mode":{"type":"string","enum":["autoscale"]}},"required":["max","min","mode"]}],"description":"User-selected deployment settings for one compute pool."},"description":"Selected compute choices keyed by pool ID."}},"description":"Deployment-time compute choices for Alien-managed compute pools.\n\nApplication source declares portable pool requirements. This settings\nobject stores the concrete choices made for one deployment, such as the\nprovider machine type and selected machine counts."},{"nullable":true}]},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}},"description":"User-customizable deployment settings specified at deploy time.\n\nThese settings are provided by the customer via CloudFormation parameters,\nTerraform attributes, CLI flags, or Helm values. They customize how the\ndeployment runs and what capabilities are enabled.\n\n**Key distinction**: StackSettings is user-customizable, while ManagementConfig\nis platform-derived (from the Manager's ServiceAccount)."}},"required":["environmentVariables"],"description":"Deployment configuration\n\nConfiguration for how to perform the deployment.\nNote: Credentials (ClientConfig) are passed separately to step() function."},"releaseInfo":{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."}},"required":["config","releaseInfo"],"description":"Target deployment if update is needed"}},"required":["success","current"],"description":"State reconciliation result with optional target"},"SyncReconcileRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to reconcile state for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Lock session (push model only) - verifies lock ownership"},"state":{"type":"object","properties":{"currentRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]},"environmentInfo":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string","description":"AWS account ID"},"region":{"type":"string","description":"AWS region"}},"required":["accountId","region"],"description":"AWS-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"projectId":{"type":"string","description":"GCP project ID (e.g., \"my-project\")"},"projectNumber":{"type":"string","description":"GCP project number (e.g., \"123456789012\")"},"region":{"type":"string","description":"GCP region"}},"required":["projectId","projectNumber","region"],"description":"GCP-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string","description":"Azure location/region"},"subscriptionId":{"type":"string","description":"Azure subscription ID"},"tenantId":{"type":"string","description":"Azure tenant ID"}},"required":["location","subscriptionId","tenantId"],"description":"Azure-specific environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"arch":{"type":"string","description":"Architecture (e.g., \"x86_64\", \"aarch64\")"},"hostname":{"type":"string","description":"Hostname of the machine running the deployment"},"os":{"type":"string","description":"Operating system (e.g., \"linux\", \"macos\", \"windows\")"}},"required":["arch","hostname","os"],"description":"Local platform environment information"},{"type":"object","properties":{"platform":{"type":"string","enum":["local"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"testId":{"type":"string","description":"Test identifier for this environment"}},"required":["testId"],"description":"Test platform environment information (mock)"},{"type":"object","properties":{"platform":{"type":"string","enum":["test"]}},"required":["platform"]}]},{"nullable":true}]},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"protocolVersion":{"type":"integer","minimum":0,"description":"Protocol version for cross-actor compatibility.\nAll actors (manager, push client, agent) check this before stepping.\nMismatched versions produce a clear error instead of silent corruption.\nSee docs/02-manager/10-deployment-protocol.md."},"retryRequested":{"type":"boolean","description":"Whether a retry has been requested for a failed deployment\nWhen true and status is a failed state, the deployment system will retry failed resources"},"runtimeMetadata":{"oneOf":[{"type":"object","properties":{"lastSyncedEnvVarsHash":{"type":"string","nullable":true,"description":"Hash of the environment variables snapshot that was last synced to the vault\nUsed to avoid redundant sync operations during incremental deployment"},"lastSyncedSecretNames":{"type":"array","items":{"type":"string"},"description":"Exact vault keys owned by the deployment secret synchronizer. This\ninventory lets a later snapshot delete removed keys without listing or\ntouching unrelated values in the same vault."},"pendingPreparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"preparedStack":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},{"nullable":true}]},"registryAccessGranted":{"type":"boolean","description":"Whether cross-account registry access has been successfully granted.\nSet to true after the manager successfully sets the ECR/GAR repo policy\nfor this deployment's target account. Prevents redundant API calls on\nevery reconcile tick."},"setupUpdateAuthorization":{"oneOf":[{"type":"object","properties":{"baselineFrozenDigest":{"type":"string","description":"Frozen resource projection from the last successful deployment."},"nonce":{"type":"string","description":"Unique revision used by persistence layers for compare-and-swap updates."},"releaseId":{"type":"string","description":"Release whose stack was prepared by setup."},"setupFingerprint":{"type":"string","description":"Exact setup artifact revision that authored this authority."},"setupFingerprintVersion":{"type":"integer","minimum":0,"description":"Setup fingerprint contract version."},"setupTarget":{"type":"string","description":"Stable setup target recorded on the imported deployment."},"targetFrozenDigest":{"type":"string","description":"Frozen resource projection prepared by the setup re-import."}},"required":["baselineFrozenDigest","nonce","releaseId","setupFingerprint","setupFingerprintVersion","setupTarget","targetFrozenDigest"],"description":"One-shot authority for a setup re-import to replace setup-owned resources."},{"nullable":true}]}},"description":"Runtime metadata for deployment\n\nStores deployment state that needs to persist across step calls."},{"nullable":true}]},"stackState":{"oneOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"resourcePrefix":{"type":"string","description":"A prefix used for resource naming to ensure uniqueness across deployments."},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"_internal":{"nullable":true,"description":"The platform-specific resource controller that manages this resource's lifecycle.\nThis is None when the resource status is Pending.\nStored as JSON to make the struct serializable and movable to alien-core."},"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"controllerPlatform":{"oneOf":[{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},{"nullable":true}]},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Complete list of dependencies for this resource, including infrastructure dependencies.\nThis preserves the full dependency information from the stack definition."},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","maxLength":128,"description":"A unique identifier for the type of error.\n\nThis should be a short, machine-readable string that can be used\nby clients to programmatically handle different error types.\nExamples: \"NOT_FOUND\", \"VALIDATION_ERROR\", \"TIMEOUT\""},"context":{"nullable":true,"description":"Additional diagnostic information about the error context.\n\nThis optional field can contain structured data providing more details\nabout the error, such as validation errors, request parameters that\ncaused the issue, or other relevant context information."},"hint":{"type":"string","nullable":true,"description":"Optional human-facing remediation hint."},"httpStatusCode":{"type":"integer","nullable":true,"minimum":100,"maximum":599,"description":"HTTP status code for this error.\n\nUsed when converting the error to an HTTP response. If None, falls back to\nthe error type's default status code or 500."},"internal":{"type":"boolean","description":"Indicates if this is an internal error that should not be exposed to users.\n\nWhen `true`, this error contains sensitive information or implementation\ndetails that should not be shown to end-users. Such errors should be\nlogged for debugging but replaced with generic error messages in responses."},"message":{"type":"string","maxLength":16384,"description":"Human-readable error message.\n\nThis message should be clear and actionable for developers or end-users,\nproviding context about what went wrong and potentially how to fix it."},"retryable":{"type":"boolean","default":false,"description":"Indicates whether the operation that caused the error should be retried.\n\nWhen `true`, the error is transient and the operation might succeed\nif attempted again. When `false`, retrying the same operation is\nunlikely to succeed without changes."},"source":{"nullable":true,"description":"The underlying error that caused this error, creating an error chain.\n\nThis allows for proper error propagation and debugging by maintaining\nthe full context of how an error occurred through multiple layers\nof an application."}},"required":["code","internal","message"],"description":"Canonical error container that provides a structured way to represent errors\nwith rich metadata including error codes, human-readable messages, context,\nand chaining capabilities for error propagation.\n\nThis struct is designed to be both machine-readable and user-friendly,\nsupporting serialization for API responses and detailed error reporting\nin distributed systems."},{"nullable":true}]},"lastFailedState":{"nullable":true,"description":"Stores the controller state that failed, used for manual retry operations.\nThis allows resuming from the exact point where the failure occurred.\nStored as JSON to make the struct serializable and movable to alien-core."},"lifecycle":{"oneOf":[{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},{"nullable":true}]},"outputs":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["type"],"additionalProperties":{"nullable":true},"description":"Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties."},{"nullable":true}]},"previousConfig":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},{"nullable":true}]},"remoteBindingParams":{"nullable":true,"description":"Binding parameters for remote access.\nOnly populated when the resource has `remote_access: true` in its ResourceEntry.\nThis is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).\nPopulated by controllers during provisioning using get_binding_params()."},"retryAttempt":{"type":"integer","minimum":0,"description":"Tracks consecutive retry attempts for the current state transition."},"status":{"type":"string","enum":["pending","provisioning","provision-failed","running","updating","update-failed","deleting","delete-failed","teardown-required","deleted","refresh-failed"],"description":"Represents the high-level status of a resource during its lifecycle."},"type":{"type":"string","description":"The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE)."}},"required":["config","status","type"],"description":"Represents the state of a single resource within the stack for a specific platform."},"description":"The state of individual resources, keyed by resource ID."}},"required":["platform","resourcePrefix","resources"],"description":"Represents the collective state of all resources in a stack, including platform and pending actions."},{"nullable":true}]},"status":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"targetRelease":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true,"description":"Short description of the release"},"releaseId":{"type":"string","nullable":true,"description":"Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no\nAlien-assigned release — the platform resolves a release from `version`."},"stack":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the stack"},"inputs":{"type":"array","items":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["string"]},"value":{"type":"string","description":"String default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["number"]},"value":{"type":"string","description":"Number default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["boolean"]},"value":{"type":"boolean","description":"Boolean default."}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["stringList"]},"value":{"type":"array","items":{"type":"string"},"description":"String list default."}},"required":["type","value"]},{"nullable":true}]},"description":{"type":"string","description":"Human-facing helper text."},"env":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Environment variable name."},"targetResources":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Target resource IDs or patterns. None means every env-capable resource."},"type":{"oneOf":[{"type":"string","enum":["plain","secret"],"description":"Environment variable handling for a stack input mapping."},{"nullable":true}]}},"required":["name"],"description":"How a resolved stack input is injected into runtime environment variables."},"description":"Runtime env-var mappings for v1 input resolution."},"id":{"type":"string","description":"Stable input ID used by CLI/API calls."},"kind":{"type":"string","enum":["string","secret","number","integer","boolean","enum","stringList"],"description":"Primitive stack input kind."},"label":{"type":"string","description":"Human-facing field label."},"placeholder":{"type":"string","nullable":true,"description":"Example placeholder shown in UI."},"platforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Platforms where this input applies."},"providedBy":{"type":"array","items":{"type":"string","enum":["developer","deployer"],"description":"Who can provide a stack input value."},"description":"Who can provide this value."},"required":{"type":"boolean","description":"Whether a resolved value is required before deployment can proceed."},"validation":{"oneOf":[{"type":"object","properties":{"format":{"type":"string","nullable":true,"description":"Semantic format hint such as url."},"max":{"type":"string","nullable":true,"description":"Maximum number."},"maxItems":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string-list items."},"maxLength":{"type":"integer","nullable":true,"minimum":0,"description":"Maximum string length."},"min":{"type":"string","nullable":true,"description":"Minimum number."},"minItems":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string-list items."},"minLength":{"type":"integer","nullable":true,"minimum":0,"description":"Minimum string length."},"pattern":{"type":"string","nullable":true,"description":"Portable whole-value regex pattern."},"values":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Allowed string enum values."}},"description":"Portable stack input validation constraints."},{"nullable":true}]}},"required":["description","id","kind","label","providedBy","required"],"description":"Stack input definition serialized into a release stack."},"description":"Input definitions required before setup or deployment can proceed."},"permissions":{"type":"object","properties":{"management":{"oneOf":[{"type":"object","properties":{"extend":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["extend"]},{"type":"object","properties":{"override":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"}},"required":["override"]},{"type":"string","enum":["auto"]}],"description":"Management permissions configuration for stack management access"},"profiles":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"description":{"type":"string","description":"Human-readable description of what this permission set allows"},"id":{"type":"string","description":"Unique identifier for the permission set (e.g., \"storage/data-read\")"},"platforms":{"type":"object","properties":{"aws":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"description":"Optional condition for additional filtering (rare)"},"resources":{"type":"array","items":{"type":"string"},"description":"Resource ARNs to bind to"}},"required":["resources"],"description":"AWS-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"effect":{"type":"string","enum":["Allow","Deny"],"description":"IAM effect. Defaults to Allow."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"AWS-specific platform permission configuration"},"description":"AWS permission configurations"},"azure":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"},"stack":{"type":"object","properties":{"scope":{"type":"string","description":"Scope (subscription/resource group/resource level)"}},"required":["scope"],"description":"Azure-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"Azure-specific platform permission configuration"},"description":"Azure permission configurations"},"gcp":{"type":"array","nullable":true,"items":{"type":"object","properties":{"binding":{"type":"object","properties":{"resource":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"},"stack":{"type":"object","properties":{"condition":{"oneOf":[{"type":"object","properties":{"expression":{"type":"string"},"title":{"type":"string"}},"required":["expression","title"],"description":"GCP IAM condition"},{"nullable":true}]},"scope":{"type":"string","description":"Scope (project/resource level)"}},"required":["scope"],"description":"GCP-specific binding specification"}},"description":"Generic binding configuration for permissions"},"description":{"type":"string","nullable":true,"description":"Short admin-facing description of why this entry exists."},"grant":{"type":"object","properties":{"actions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"AWS IAM actions (only for AWS)"},"dataActions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Azure actions (only for Azure)"},"permissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP permissions that require an exact residual custom role."},"predefinedRoles":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Provider predefined roles to bind directly."},"residualPermissions":{"type":"array","nullable":true,"items":{"type":"string"},"description":"GCP residual custom permissions to pair with predefined roles."}},"description":"Grant permissions for a specific cloud platform"},"label":{"type":"string","nullable":true,"description":"Stable admin-facing label for this permission entry."}},"required":["binding","grant"],"description":"GCP-specific platform permission configuration"},"description":"GCP permission configurations"}},"description":"Platform-specific permission configurations"}},"required":["description","id","platforms"],"description":"A permission set that can be applied across different cloud platforms"},{"type":"string"}],"description":"Reference to a permission set - either by name or inline definition"}},"description":"Permission profile that maps resources to permission sets\nKey can be \"*\" for all resources or resource name for specific resource"},"description":"Permission profiles that define access control for compute services\nKey is the profile name, value is the permission configuration"}},"required":["profiles"],"description":"Combined permissions configuration that contains both profiles and management"},"resources":{"type":"object","properties":{},"additionalProperties":{"type":"object","properties":{"config":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters."},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"additionalProperties":{"nullable":true},"description":"Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["id","type"],"description":"Reference to a resource by its stable id and resource type."},"description":"Additional dependencies for this resource beyond those defined in the resource itself.\nThe total dependencies are: resource.get_dependencies() + this list"},"enabledWhen":{"type":"string","nullable":true,"description":"Id of the boolean stack input that decides whether this resource is\ncreated at all. `None` means always create it.\n\nSet by `.enabled(input)` in the SDK. Setup emitters render the resource\nconditionally on the matching template variable, so a deployer who says no\nnever gets the resource, its outputs, or anything derived from it."},"lifecycle":{"type":"string","enum":["frozen","live"],"description":"Describes the lifecycle of a resource within a stack, determining how it's managed and deployed."},"remoteAccess":{"type":"boolean","description":"Enable remote bindings for this resource (BYOB use case).\nWhen true, binding params are synced to StackState's `remote_binding_params`.\nDefault: false (prevents sensitive data in synced state)."}},"required":["config","dependencies","lifecycle"]},"description":"Map of resource IDs to their configurations and lifecycle settings"},"supportedPlatforms":{"type":"array","nullable":true,"items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Which platforms this stack supports. When None, all platforms are supported."}},"required":["id","resources"],"description":"A bag of resources, unaware of any cloud."},"version":{"type":"string","nullable":true,"description":"Version string (e.g., 2.1.0)"}},"required":["stack"],"description":"Release metadata\n\nIdentifies a specific release version and includes the stack definition.\nThe deployment engine uses this to track which release is currently deployed\nand which is the target."},{"nullable":true}]}},"required":["platform","protocolVersion","status"],"description":"Complete deployment state after step() execution"},"updateHeartbeat":{"type":"boolean","description":"Update heartbeat timestamp (for successful health checks)"},"suggestedDelayMs":{"type":"integer","minimum":0,"description":"Delay before this deployment should be acquired again."},"resourceHeartbeats":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"description":"Latest typed resource heartbeats collected during this step."},"observedInventoryBatches":{"type":"array","items":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"],"description":"Backend whose observer produced this snapshot."},"complete":{"type":"boolean","description":"Whether this batch is a complete replacement for the scope. Complete\nbatches tombstone previously observed rows in the same scope when they\nare absent from `resources`."},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"inventoryScope":{"type":"string","description":"Stable scope for the provider list operation that produced this batch."},"observedAt":{"type":"string","format":"date-time","description":"Time the inventory scope was observed."},"resources":{"type":"array","items":{"type":"object","properties":{"alienResourceId":{"type":"string","nullable":true},"attributes":{"type":"object","properties":{},"additionalProperties":{"nullable":true}},"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"counts":{"oneOf":[{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},{"nullable":true}]},"deploymentId":{"type":"string","nullable":true},"displayName":{"type":"string"},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerKind":{"type":"string","description":"Provider-native kind, such as `apps/v1/Deployment`,\n`AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure\nresource type."},"providerStale":{"type":"boolean"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"rawIdentity":{"type":"string","description":"Provider-native stable identity: Kubernetes object identity, cloud ARN,\nGCP full resource name, Azure resource id, etc."},"region":{"type":"string","nullable":true},"resourceTypeHint":{"oneOf":[{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."},{"nullable":true}]},"scope":{"type":"string","nullable":true},"version":{"type":"string","nullable":true,"description":"Release/version identity observed from the provider resource, when available."}},"required":["displayName","health","lifecycle","partial","providerKind","providerStale","rawIdentity"]}},"sourceKind":{"type":"string","description":"Writer/source for this inventory pass, such as `operator` or\n`manager-observer`."}},"required":["backend","complete","controllerPlatform","inventoryScope","observedAt","resources","sourceKind"]},"description":"Observed raw-resource inventory batches read during this step."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/OperatorCapabilityReport"},"description":"Operator-reported runtime capabilities."},"operatorVersion":{"type":"string","minLength":1,"maxLength":128,"description":"Operator binary version reported by the runtime."}},"required":["deploymentId","state"],"additionalProperties":false,"description":"Request to reconcile deployment state"},"SyncReleaseRequest":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment ID to release","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"session":{"type":"string","description":"Session identifier to release"}},"required":["deploymentId","session"],"additionalProperties":false,"description":"Request to release deployment lock"},"ResolveResponse":{"type":"object","properties":{"managerId":{"type":"string","description":"Manager ID"},"managerName":{"type":"string","description":"Manager display name"},"managerUrl":{"type":"string","format":"uri","description":"Manager URL"},"managerIsSystem":{"type":"boolean","description":"Whether the manager is Alien-hosted"},"managerCloud":{"type":"string","nullable":true,"enum":["aws","gcp","azure","kubernetes","machines","local","test",null],"description":"Cloud where the private manager is hosted. Null for Alien-hosted managers."},"projectId":{"type":"string","description":"Resolved project ID"},"installContext":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"managementConfig":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}},"required":["platform","managementConfig"],"description":"Target install context derived from platform-managed manager metadata. Present for cloud push platforms."}},"required":["managerId","managerName","managerUrl","managerIsSystem","projectId"]},"CloudRegionsResponse":{"type":"object","properties":{"supportedRegions":{"$ref":"#/components/schemas/SupportedCloudRegions"}},"required":["supportedRegions"]},"BillingAuditLogRow":{"type":"object","properties":{"id":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"action":{"type":"string"},"payload":{"nullable":true},"createdAt":{"type":"string"}},"required":["id","workspaceId","action","createdAt"]},"WorkspaceBillingEntitlements":{"type":"object","properties":{"planId":{"$ref":"#/components/schemas/PlanId"},"planStatus":{"$ref":"#/components/schemas/BillingPlanStatus"},"features":{"$ref":"#/components/schemas/BillingFeatureFlags"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"syncedAt":{"type":"string","nullable":true,"format":"date-time"},"stale":{"type":"boolean"}},"required":["planId","planStatus","features","limits","syncedAt","stale"]},"PlanId":{"type":"string","enum":["starter","pro","pro_annual","enterprise"]},"BillingPlanStatus":{"type":"string","enum":["active","trialing","past_due","canceled","none"]},"BillingFeatureFlags":{"type":"object","properties":{"custom_domains":{"type":"boolean"},"private_managers":{"type":"boolean"},"sso_saml":{"type":"boolean"},"audit_logs":{"type":"boolean"},"airgapped":{"type":"boolean"}},"required":["custom_domains","private_managers","sso_saml","audit_logs","airgapped"]},"BillingLimits":{"type":"object","properties":{"maxDeployments":{"type":"number","nullable":true},"maxProjects":{"type":"number","nullable":true},"maxSeats":{"type":"number","nullable":true},"maxCustomDomains":{"type":"number","nullable":true},"creditUsd":{"type":"number","nullable":true},"seatsIncluded":{"type":"number","nullable":true}},"required":["maxDeployments","maxProjects","maxSeats","maxCustomDomains","creditUsd","seatsIncluded"]}},"parameters":{}},"paths":{"/v1/invitations/{token}":{"get":{"operationId":"getWorkspaceInvitationPreview","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitationPreview"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/memberships":{"get":{"operationId":"listMemberships","description":"List all workspaces the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listMemberships","responses":{"200":{"description":"List of user's workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile":{"get":{"operationId":"getUserProfile","description":"Get the current user's profile and user-scoped onboarding state.","x-speakeasy-group":"user","x-speakeasy-name-override":"getProfile","responses":{"200":{"description":"User profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateUserProfile","description":"Update the current user's profile (display name).","x-speakeasy-group":"user","x-speakeasy-name-override":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Display name"}}}}}},"responses":{"200":{"description":"Profile updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/profile/setup":{"post":{"operationId":"completeUserProfileSetup","description":"Complete the required beta intake and profile setup dialog.","x-speakeasy-group":"user","x-speakeasy-name-override":"completeProfileSetup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileSetupRequest"}}}},"responses":{"200":{"description":"Profile setup completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/workspaces":{"post":{"operationId":"createWorkspace","description":"Create a new workspace. The current user will be automatically added as an admin.","x-speakeasy-group":"user","x-speakeasy-name-override":"createWorkspace","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name"},"logoUrl":{"type":"string","format":"uri","description":"Optional workspace logo URL"}},"required":["name"]}}}},"responses":{"201":{"description":"Created workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Bad request - invalid workspace name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Workspace name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces":{"get":{"operationId":"listGitNamespaces","description":"List all git namespaces (GitHub installations) the current user has access to.","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaces","parameters":[{"schema":{"type":"string","enum":["github"],"default":"github"},"required":false,"name":"provider","in":"query"}],"responses":{"200":{"description":"List of user's git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/sync":{"post":{"operationId":"syncGitNamespaces","description":"Sync git namespaces from the provider. For GitHub, this fetches all app installations accessible to the user.","x-speakeasy-group":"user","x-speakeasy-name-override":"syncGitNamespaces","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"description":"Git provider to sync"}},"required":["provider"]}}}},"responses":{"200":{"description":"Synced git namespaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitNamespace"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/git-namespaces/{id}/repositories":{"get":{"operationId":"listGitNamespaceRepositories","description":"List repositories accessible through a git namespace (GitHub installation).","x-speakeasy-group":"user","x-speakeasy-name-override":"listGitNamespaceRepositories","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","description":"Search query to filter repositories by name"},"required":false,"description":"Search query to filter repositories by name","name":"search","in":"query"}],"responses":{"200":{"description":"List of repositories.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GitRepository"}}},"required":["items"]}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Git namespace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/user/invitations/{token}/accept":{"post":{"operationId":"acceptWorkspaceInvitation","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Invitation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptWorkspaceInvitationResponse"}}}},"404":{"description":"Invitation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/whoami":{"get":{"operationId":"whoami","description":"Get the current authenticated principal (user or service account). Works with both session cookies and API keys.","x-speakeasy-group":"auth","x-speakeasy-name-override":"whoami","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","example":"my-workspace"},"required":false,"description":"Workspace to resolve the principal in. Required for user credentials because a user's role is per-workspace. Service accounts carry their workspace in the credential and may omit it.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Current authenticated principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subject"}}}},"400":{"description":"Missing required workspace for user credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Unauthorized - no valid authentication provided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces":{"get":{"operationId":"listWorkspaces","description":"Retrieve all workspaces.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search workspaces by name"},"required":false,"description":"Search workspaces by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved workspaces.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}":{"get":{"operationId":"getWorkspace","description":"Retrieve a workspace by ID.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspace","description":"Update a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string","nullable":true,"maxLength":2048,"format":"uri"}}}}}},"responses":{"200":{"description":"Workspace updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteWorkspace","description":"Delete a workspace. The workspace must have no projects.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Workspace deleted successfully."},"400":{"description":"Workspace still has projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members":{"get":{"operationId":"listWorkspaceMembers","description":"List all members of a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"listMembers","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"List of workspace members.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"addWorkspaceMember","description":"Add a member to a workspace by email. The user must already have an account.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"addMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of the user to add"},"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"Role to assign"}]}},"required":["email","role"]}}}},"responses":{"201":{"description":"Member added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"404":{"description":"Workspace or user not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"User is already a member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMember","description":"Update a workspace member's role.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/WorkspaceRole"},{"description":"New role to assign"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Member role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceMember"}}}},"400":{"description":"Cannot remove last admin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"removeWorkspaceMember","description":"Remove a member from a workspace.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"removeMember","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Member removed successfully."},"400":{"description":"Cannot remove last admin or self.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace or member not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/dismiss-onboarding":{"post":{"operationId":"dismissWorkspaceOnboarding","description":"Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"dismissOnboarding","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace with onboardingDismissedAt populated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/settings":{"get":{"operationId":"getWorkspaceSettings","description":"Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them.","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"getSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateWorkspaceSettings","description":"Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).","x-speakeasy-group":"workspaces","x-speakeasy-name-override":"updateSettings","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}}},"responses":{"200":{"description":"Updated ai-agent settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSettings"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations":{"get":{"operationId":"listWorkspaceInvitations","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Pending invitations.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvitation"}}},"required":["items"]}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["email","role"]}}}},"responses":{"201":{"description":"Invitation created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"403":{"description":"Seat limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Invitation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}/resend":{"post":{"operationId":"resendWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Invitation email sent again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvitation"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invitations/{invitationId}":{"delete":{"operationId":"revokeWorkspaceInvitation","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invitation revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/workspaces/{id}/invite-link":{"get":{"operationId":"getWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Active invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"createWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"required":["role"]}}}},"responses":{"200":{"description":"Invite link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInviteLink"}}}},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeWorkspaceInviteLink","parameters":[{"schema":{"type":"string","pattern":"ws_[0-9a-zA-Z]{24}$","description":"Unique identifier for the workspace.","example":"ws_It13CUaGEhLLAB87simX0"},"required":true,"description":"Unique identifier for the workspace.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Invite link revoked."},"404":{"description":"Workspace not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","description":"Retrieve all projects.","x-speakeasy-group":"projects","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Search projects by name"},"required":false,"description":"Search projects by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deploymentCount","latestRelease"]},"description":"Optional fields to include: deploymentCount, latestRelease"},"required":false,"description":"Optional fields to include: deploymentCount, latestRelease","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved projects.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createProject","description":"Create a new project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"gitRepository":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["github"],"description":"The Git Provider of the repository","example":"github"},"repo":{"type":"string","maxLength":128,"description":"The name of the git repository","example":"alien/my-agent"}},"required":["type","repo"],"additionalProperties":false,"description":"Verified source repository connected to the project. Alien uses this for GitHub Actions setup and source-aware features; releases are still created explicitly by CI or `alien release`."},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name"]}}}},"responses":{"201":{"description":"Project created successfully.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"}}}]}}}},"400":{"description":"Invalid request or GitHub repository connection failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"401":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}":{"get":{"operationId":"getProject","description":"Retrieve a project by ID or name.","x-speakeasy-group":"projects","x-speakeasy-name-override":"get","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateProject","description":"Update a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"update","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProject"}}}},"responses":{"200":{"description":"Project updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteProject","description":"Delete a project. The project must have no deployments.","x-speakeasy-group":"projects","x-speakeasy-name-override":"delete","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Project deleted successfully."},"400":{"description":"Project still has deployments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/gcp-oauth-provider":{"get":{"operationId":"getProjectGcpOAuthProvider","description":"Retrieve redacted project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateProjectGcpOAuthProvider","description":"Update project-level Google Cloud OAuth provider settings.","x-speakeasy-group":"projects","x-speakeasy-name-override":"updateGcpOAuthProvider","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectGcpOAuthProvider"}}}},"responses":{"200":{"description":"Google Cloud OAuth provider settings updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectGcpOAuthProvider"}}}},"400":{"description":"Invalid provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-portal-domain":{"get":{"operationId":"getProjectDeploymentPortalDomain","description":"Get the deployment portal domain binding for a project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentPortalDomain","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved deployment portal domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPortalDomainResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/import-template":{"post":{"operationId":"createProjectFromTemplate","description":"Create a project by forking alienplatform/alien into your namespace, then configuring GitHub Actions.","x-speakeasy-group":"projects","x-speakeasy-name-override":"createFromTemplate","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!prj[-_])[a-z0-9](-?[a-z0-9])*$","description":"Project name.","example":"my-app"},"targetNamespace":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9-]+$","description":"GitHub owner namespace (user or organization) that will receive the fork"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"rootDirectory":{"type":"string","nullable":true,"maxLength":256,"description":"The name of a directory or relative path to the source code of your project. When null is used it will default to the project root"},"packagesConfig":{"type":"object","nullable":true,"properties":{"cli":{"type":"object","nullable":true,"properties":{"binaryTargets":{"type":"array","items":{"type":"string","enum":["windows-x64","linux-x64","linux-arm64","darwin-arm64"],"description":"Target OS and architecture for compiled binaries.\n\nUsed as keys in package output maps (CLI binaries, Terraform providers, etc.)\nand for cross-compilation target selection during builds."},"description":"Binary targets required by this package's setup consumer.\n\nOlder package rows omit this field and retain the historical all-target\nbehavior. Callers creating new packages should state their target set."},"displayName":{"type":"string","description":"Human-friendly display name for help banners and about text"},"name":{"type":"string","description":"Binary name displayed in help and usage (e.g., \"acmectl\")"},"enabled":{"type":"boolean","description":"Whether CLI package generation is enabled"}},"required":["displayName","name","enabled"],"description":"CLI package configuration. If null, CLI packages will not be generated."},"cloudformation":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether CloudFormation package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"CloudFormation package configuration. If null, CloudFormation packages will not be generated."},"operatorImage":{"type":"object","nullable":true,"properties":{"brand":{"type":"string","nullable":true,"description":"Short brand slug used for generated resource names."},"displayName":{"type":"string","description":"Human-friendly display name for logs and startup messages"},"envPrefix":{"type":"string","nullable":true,"description":"Branded environment variable prefix (e.g., \"ACME\")."},"labelDomain":{"type":"string","nullable":true,"description":"Branded Kubernetes/cloud label domain (e.g., \"acme.dev\")."},"name":{"type":"string","description":"Image name (e.g., \"acme-operator\")"},"enabled":{"type":"boolean","description":"Whether Operator image package generation is enabled"}},"required":["displayName","name","enabled"],"description":"Operator image package configuration. Required when Helm is enabled. If null, Operator image packages will not be generated."},"helm":{"type":"object","nullable":true,"properties":{"chartName":{"type":"string","description":"Chart name (e.g., \"acme-operator\")"},"description":{"type":"string","description":"Human-friendly description of the chart"},"enabled":{"type":"boolean","description":"Whether Helm chart package generation is enabled"}},"required":["chartName","description","enabled"],"description":"Helm chart package configuration. If null, Helm packages will not be generated."},"terraform":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean","description":"Whether Terraform package generation is enabled"},"displayName":{"type":"string","nullable":true,"description":"Human-friendly application name shown in generated install artifacts"}},"required":["enabled"],"description":"Terraform package configuration. If null, Terraform packages will not be generated."}},"description":"Configuration for embedded packages (CLI, CloudFormation, Helm, Terraform)"}},"required":["name","targetNamespace","templatePath"]}}}},"responses":{"201":{"description":"Project created successfully from template.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"githubSetup":{"type":"object","properties":{"pullRequestUrl":{"type":"string","format":"uri","description":"URL to the pull request with the Alien build workflow"},"workflowUrl":{"type":"string","format":"uri","description":"URL to the GitHub Actions workflow"}},"required":["pullRequestUrl","workflowUrl"]},"gitRepositoryWarning":{"$ref":"#/components/schemas/APIError"},"template":{"type":"object","properties":{"sourceRepository":{"type":"string","enum":["alienplatform/alien"]},"forkRepository":{"type":"string","description":"Fork repository in / format"},"templatePath":{"type":"string","enum":["examples/remote-worker-ts","examples/github-agent/packages/remote-agent","examples/endpoint-agent","examples/byoc-database"],"description":"Template root directory inside alienplatform/alien"},"resolvedRootDirectory":{"type":"string"}},"required":["sourceRepository","forkRepository","templatePath","resolvedRootDirectory"]}},"required":["template"]}]}}}},"400":{"description":"Bad request or GitHub integration not installed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Project name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Fork exists but is not ready yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/template-urls":{"get":{"operationId":"getProjectTemplateUrls","description":"Get template URLs for deploying setup stacks in this project.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getTemplateUrls","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Template URLs retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"aws":{"type":"object","nullable":true,"properties":{"templateUrl":{"type":"string","format":"uri","description":"URL to download the CloudFormation template"},"launchStackUrl":{"type":"string","format":"uri","description":"URL to launch the template in the AWS CloudFormation console"}},"required":["templateUrl","launchStackUrl"],"description":"Template URLs for deploying an AWS setup stack"}}}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/deployment-link-setup":{"get":{"operationId":"getProjectDeploymentLinkSetup","description":"Get the active release stack and portal-visible setup availability for deployment-link configuration.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getDeploymentLinkSetup","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment-link setup retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLinkSetupResponse"}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/projects/{idOrName}/active-release":{"get":{"operationId":"getProjectActiveRelease","description":"Get the active release for this project. Returns the latest release, or the pinned release if deploymentId is provided and that deployment has a pinned release.","x-speakeasy-group":"projects","x-speakeasy-name-override":"getActiveRelease","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNamePathParam"},"required":true,"description":"Project ID or name.","name":"idOrName","in":"path","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","description":"Optional deployment ID to check for pinned release"},"required":false,"description":"Optional deployment ID to check for pinned release","name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Active release retrieved successfully.","content":{"application/json":{"schema":{"nullable":true}}}},"404":{"description":"Project or active release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups":{"post":{"operationId":"createDeploymentGroup","tags":["deployment-groups"],"summary":"Create a new deployment group","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group with this name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listDeploymentGroups","tags":["deployment-groups"],"summary":"List deployment groups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of deployment groups","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"}}}]},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/by-name":{"put":{"operationId":"ensureDeploymentGroupByName","tags":["deployment-groups"],"summary":"Get or create a deployment group by project and name","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureDeploymentGroupByNameRequest"}}}},"responses":{"200":{"description":"Deployment group returned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}":{"get":{"operationId":"getDeploymentGroup","tags":["deployment-groups"],"summary":"Get deployment group details","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project"]},"description":"Optional fields to include: project"},"required":false,"description":"Optional fields to include: project","name":"include","in":"query"}],"responses":{"200":{"description":"Deployment group details","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentGroup"},{"type":"object","properties":{"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","description":"Project name"}},"required":["id","name"],"description":"Project info, included when ?include=project is used"},"deploymentCount":{"type":"integer","description":"Current number of deployments in this deployment group"}},"required":["deploymentCount"]}]}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentGroup","tags":["deployment-groups"],"summary":"Update deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentGroupRequest"}}}},"responses":{"200":{"description":"Deployment group updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentGroup"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment group name already exists in the project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDeploymentGroup","tags":["deployment-groups"],"summary":"Delete deployment group","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Deployment group deleted successfully"},"400":{"description":"Cannot delete deployment group that has deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/tokens":{"post":{"operationId":"createDeploymentGroupToken","tags":["deployment-groups"],"summary":"Create deployment group token","description":"Creates a deployment-group scoped API key and returns both the token and formatted deployment link","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenRequest"}}}},"responses":{"200":{"description":"Deployment group token created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentGroupTokenResponse"}}}},"400":{"description":"Deployment setup configuration is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-groups/{id}/first-party-session":{"post":{"operationId":"createFirstPartyDeploymentSession","tags":["deployment-groups"],"summary":"Create first-party deployment session","description":"Mints a short-lived deployment-group token with the recommended self-deploy policy for the authenticated developer.","parameters":[{"schema":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"required":true,"description":"Unique identifier for the deployment group.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"First-party deployment session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFirstPartyDeploymentSessionResponse"}}}},"404":{"description":"Deployment group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages":{"get":{"operationId":"listPackages","description":"List packages with optional filters. Returns packages ordered by creation date (newest first).","x-speakeasy-group":"packages","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","enum":["cli","cloudformation","helm","operator-image","terraform"],"description":"Filter by package type"},"required":false,"description":"Filter by package type","name":"type","in":"query"},{"schema":{"type":"string","enum":["pending","building","ready","failed","canceled"],"description":"Filter by package status"},"required":false,"description":"Filter by package status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search packages by type or version"},"required":false,"description":"Search packages by type or version","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"List of packages.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}":{"get":{"operationId":"getPackage","description":"Get details of a specific package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/rebuild":{"post":{"operationId":"rebuildPackages","description":"Rebuild packages for a project. This will cancel any pending packages and create new ones with auto-incremented versions.","x-speakeasy-group":"packages","x-speakeasy-name-override":"rebuild","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"project":{"type":"string","maxLength":100,"description":"Project ID or name to rebuild packages for"}},"required":["project"]}}}},"responses":{"200":{"description":"Packages rebuilt successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"packagesCreated":{"type":"integer","description":"Number of packages created"}},"required":["packagesCreated"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/packages/{id}/cancel":{"post":{"operationId":"cancelPackage","description":"Cancel a pending or building package.","x-speakeasy-group":"packages","x-speakeasy-name-override":"cancel","parameters":[{"schema":{"type":"string","pattern":"pkg_[0-9a-z]{28}$","description":"Unique identifier for the package.","example":"pkg_jebo2o5jmm7raefl2m1pe3cz"},"required":true,"description":"Unique identifier for the package.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Package canceled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Package cannot be canceled (not in pending or building status).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Package not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases":{"get":{"operationId":"listReleases","description":"Retrieve all releases.","x-speakeasy-group":"releases","x-speakeasy-name-override":"list","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search releases by commit message, branch, SHA, or release ID"},"required":false,"description":"Search releases by commit message, branch, SHA, or release ID","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by git branch (commitRef)"},"required":false,"description":"Filter by git branch (commitRef)","name":"branch","in":"query"},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Filter by commit author login or name"},"required":false,"description":"Filter by commit author login or name","name":"author","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created after this date (ISO 8601)"},"required":false,"description":"Filter releases created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter releases created before this date (ISO 8601)"},"required":false,"description":"Filter releases created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved releases.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createRelease","description":"Create a new release.","x-speakeasy-group":"releases","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseRequest"}}}},"responses":{"201":{"description":"Release created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/branches":{"get":{"operationId":"listReleaseBranches","description":"List distinct git branches across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listBranches","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search branches by name (case-insensitive contains)"},"required":false,"description":"Search branches by name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of branches to return"},"required":false,"description":"Maximum number of branches to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct branches.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/authors":{"get":{"operationId":"listReleaseAuthors","description":"List distinct commit authors across releases. Used for filter dropdowns.","x-speakeasy-group":"releases","x-speakeasy-name-override":"listAuthors","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"}],"nullable":true},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search authors by login or name (case-insensitive contains)"},"required":false,"description":"Search authors by login or name (case-insensitive contains)","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Maximum number of authors to return"},"required":false,"description":"Maximum number of authors to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved distinct authors.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAuthorFilterItem"}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/releases/{id}":{"get":{"operationId":"getRelease","description":"Retrieve a release by ID.","x-speakeasy-group":"releases","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"rel_[0-9a-zA-Z]{28}$","description":"Unique identifier for the release.","example":"rel_WbhQgksrawSKIpEN0NAssHX9"},"required":true,"description":"Unique identifier for the release.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["project","rollout"]},"description":"Optional fields to include: project, rollout"},"required":false,"description":"Optional fields to include: project, rollout","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseListItemResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments":{"get":{"operationId":"listDeployments","description":"Retrieve all deployments.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"list","parameters":[{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Filter by exact deployment name. Must be used with deploymentGroup."},"required":false,"description":"Filter by exact deployment name. Must be used with deploymentGroup.","name":"name","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name, public subdomain, or deployment group name"},"required":false,"description":"Search deployments by name, public subdomain, or deployment group name","name":"search","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved deployments.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"400":{"description":"Invalid deployment list filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDeployment","description":"Create a new deployment. Deployment group tokens automatically use their group. Workspace/project tokens must provide deploymentGroupId.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeploymentRequest"}}}},"responses":{"200":{"description":"Existing deployment returned for idempotent deployment-group registration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"201":{"description":"Deployment created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentResponse"}}}},"400":{"description":"Bad request - deployment group has reached max deployments limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Forbidden - insufficient permissions to create deployments in this context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project or deployment group not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/stats":{"get":{"operationId":"getDeploymentStats","description":"Get aggregated deployment statistics. Returns total count and breakdown by status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getStats","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter by deployment group ID or name"},"required":false,"description":"Filter by deployment group ID or name","name":"deploymentGroup","in":"query"},{"schema":{"type":"string","description":"Filter by manager ID"},"required":false,"description":"Filter by manager ID","name":"managerId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"description":"Filter deployments by effective environment"},"required":false,"description":"Filter deployments by effective environment","name":"environment","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","preflights-failed","initial-setup","initial-setup-failed","provisioning","waiting-for-machines","provisioning-failed","running","refresh-failed","update-pending","updating","update-failed","delete-pending","deleting","delete-failed","teardown-required","teardown-failed","deleted","error"],"description":"Deployment status in the deployment lifecycle.\n\nFor observe-only deployments with no release or stack state, `Running`\nmeans the Operator is attached. Connectivity comes from `lastHeartbeatAt`;\nresource health comes from inventory and resource heartbeat data."},"description":"Filter deployments by status"},"required":false,"description":"Filter deployments by status","name":"status","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search deployments by name or deployment group name"},"required":false,"description":"Search deployments by name or deployment group name","name":"search","in":"query"}],"responses":{"200":{"description":"Deployment statistics retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStats"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-environments":{"get":{"operationId":"listDeploymentFilterEnvironments","description":"List distinct effective environments used by deployments. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterEnvironments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Distinct environments retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/filter-deployment-groups":{"get":{"operationId":"listDeploymentFilterDeploymentGroups","description":"List deployment groups with deployment counts. Used for filter dropdowns.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"listFilterDeploymentGroups","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","nullable":true,"maxLength":256,"description":"Search deployment groups by name"},"required":false,"description":"Search deployment groups by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return"},"required":false,"description":"Maximum number of items to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Deployment groups for filter retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"dg_[0-9a-z]{28}$","description":"Unique identifier for the deployment group.","example":"dg_r27ict8c7vcgsumpj90ackf7b"},"name":{"type":"string"},"deploymentCount":{"type":"number"},"runningCount":{"type":"number","description":"Number of deployments in 'running' status"},"failedCount":{"type":"number","description":"Number of deployments in a failed status"},"inProgressCount":{"type":"number","description":"Number of deployments in an in-progress status (provisioning, updating, etc.)"}},"required":["id","name","deploymentCount","runningCount","failedCount","inProgressCount"]}}},"required":["items"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeployment","description":"Retrieve a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["release","deploymentGroup","project"]},"description":"Optional fields to include: release, deploymentGroup, project"},"required":false,"description":"Optional fields to include: release, deploymentGroup, project","name":"include","in":"query"}],"responses":{"200":{"description":"Retrieved deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetailResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/info":{"get":{"operationId":"getDeploymentConnectionInfo","description":"Get deployment connection information including command endpoint and resource URLs.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment connection information.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentConnectionInfo"}}}},"400":{"description":"Deployment not ready (no manager assigned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/import":{"post":{"operationId":"importDeployment","description":"Import a deployment from resolved setup infrastructure such as CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"import","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDeploymentRequest"}}}},"responses":{"200":{"description":"Deployment import was idempotent and returned an existing deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"201":{"description":"Deployment imported and created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"Deployment with the specified ID already exists, or a deployment with the same name already exists in the deployment group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/first-party-inputs":{"put":{"operationId":"setFirstPartyDeploymentInputs","description":"Store operator-provided input values on a first-party deployment session token so CLI/local deploys apply them.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"setFirstPartyDeploymentInputs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Input values stored on the session token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFirstPartyDeploymentInputsResponse"}}}},"400":{"description":"A deployment-group token scope is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"The token is not a first-party deployment session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to store input values.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations":{"post":{"operationId":"createSetupRegistrationOperation","description":"Start a durable setup registration operation for CloudFormation, Terraform, or Helm.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createSetupRegistrationOperation","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSetupRegistrationOperationRequest"}}}},"responses":{"202":{"description":"Setup registration operation accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"400":{"description":"Invalid setup registration operation request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed before callback acceptance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/setup-registration-operations/{id}":{"get":{"operationId":"getSetupRegistrationOperation","description":"Get setup registration operation status.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getSetupRegistrationOperation","parameters":[{"schema":{"type":"string","pattern":"setupop_[0-9a-z]{28}$","description":"Unique identifier for the setup registration operation.","example":"setupop_y41lqnfosxuwqkzmiax7"},"required":true,"description":"Unique identifier for the setup registration operation.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Setup registration operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRegistrationOperationResponse"}}}},"404":{"description":"Setup registration operation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/delete":{"post":{"operationId":"deleteDeployment","description":"Delete, detach, or forget a deployment by ID.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentRequest"}}}},"responses":{"202":{"description":"Deployment deletion request accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteDeploymentResponse"}}}},"400":{"description":"Cannot delete the deployment in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"redeployDeployment","description":"Redeploy a running deployment with the same release and fresh environment variables. Sets status to update-pending.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"redeploy","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment redeployment triggered successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot redeploy - deployment must be running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/pin-release":{"post":{"operationId":"pinDeploymentRelease","description":"Pin or unpin a running or runtime-failed deployment. Running deployments start an update; failed deployments retry toward the selected release.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"pinRelease","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinReleaseRequest"}}}},"responses":{"202":{"description":"Release pin updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot pin release from the deployment's current lifecycle state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/retry":{"post":{"operationId":"retryDeployment","description":"Retry a failed deployment operation. Uses alien-infra's retry mechanisms to resume from exact failure point.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"retry","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Deployment retry enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Deployment is not in a failed state that can be retried.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/inputs":{"get":{"operationId":"getDeploymentInputs","description":"Get the active input definitions and current non-secret values for a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"getInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Deployment inputs returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInputsResponse"}}}},"403":{"description":"Insufficient permission to read deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateDeploymentInputs","description":"Update runtime stack inputs, rebuild their environment-variable mappings, and request a deployment update when runtime configuration changes.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateInputs","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsRequest"}}}},"responses":{"200":{"description":"Deployment inputs saved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentInputsResponse"}}}},"400":{"description":"Input values are invalid for the deployment release.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update deployment inputs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, project, or release not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/environment-variables":{"patch":{"operationId":"updateDeploymentEnvironmentVariables","description":"Update a deployment's environment variables. If the deployment is running and not locked, the status will be changed to update-pending to trigger a deployment.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"updateEnvironmentVariables","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeploymentEnvironmentVariablesRequest"}}}},"responses":{"202":{"description":"Environment variables updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Environment variables are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permission to update environment variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployments/{id}/token":{"post":{"operationId":"createDeploymentToken","description":"Create a deployment token (deployment-scoped API key). The deployment must exist before creating a token.","x-speakeasy-group":"deployments","x-speakeasy-name-override":"createToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenRequest"}}}},"responses":{"201":{"description":"Deployment token created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentTokenResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers":{"post":{"operationId":"createManager","description":"Create a new manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewManagerRequest"}}}},"responses":{"201":{"description":"Manager created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Invalid private manager setup method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"A manager for this target already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"listManagers","description":"Retrieve all managers.","x-speakeasy-group":"managers","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search managers by name"},"required":false,"description":"Search managers by name","name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of managers to return"},"required":false,"description":"Maximum number of managers to return","name":"limit","in":"query"}],"responses":{"200":{"description":"Retrieved managers.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manager"}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/setup-token":{"post":{"operationId":"retryManagerSetup","description":"Revoke previous private-manager setup tokens and issue a fresh setup token/config.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retrySetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"201":{"description":"Fresh manager setup token generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManagerResponse"}}}},"400":{"description":"Manager setup cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or setup config not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/retry":{"post":{"operationId":"retryManager","description":"Retry private-manager setup. Returns a fresh setup action before the internal deployment exists, or requests retry for the internal deployment after it exists.","x-speakeasy-group":"managers","x-speakeasy-name-override":"retry","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager retry handled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerRetryResponse"}}}},"400":{"description":"Manager cannot be retried in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or internal deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/cancel-setup":{"post":{"operationId":"cancelManagerSetup","description":"Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record.","x-speakeasy-group":"managers","x-speakeasy-name-override":"cancelSetup","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager setup canceled successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Manager setup cannot be canceled in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}":{"get":{"operationId":"getManager","description":"Retrieve a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"get","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manager"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteManager","description":"Delete a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"delete","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager deletion enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot delete the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Internal deployment already has a conflicting delete request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/domain-binding":{"get":{"operationId":"getManagerDomainBinding","description":"Get the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved manager domain binding.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"put":{"operationId":"updateManagerDomainBinding","description":"Create, update, or remove the custom domain binding for a private manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"updateDomainBinding","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerDomainBinding"}}}},"responses":{"200":{"description":"Manager domain binding updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDomainBindingResponse"}}}},"400":{"description":"Invalid domain binding request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager or domain not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/management-config":{"get":{"operationId":"getManagerManagementConfig","description":"Get the management configuration for a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"getManagementConfig","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":true,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Management config retrieved successfully.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"managingRoleArn":{"type":"string","description":"The managing AWS IAM role ARN that can assume cross-account roles"}},"required":["managingRoleArn"],"description":"AWS management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["aws"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"serviceAccountEmail":{"type":"string","description":"Service account email for management roles"}},"required":["serviceAccountEmail"],"description":"GCP management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["gcp"]}},"required":["platform"]}]},{"allOf":[{"type":"object","properties":{"managingTenantId":{"type":"string","description":"The managing Azure Tenant ID for cross-tenant access"},"oidcIssuer":{"type":"string","description":"OIDC issuer URL trusted by the target-side managed identity."},"oidcSubject":{"type":"string","description":"OIDC subject claim trusted by the target-side managed identity."}},"required":["managingTenantId","oidcIssuer","oidcSubject"],"description":"Azure management configuration extracted from stack settings"},{"type":"object","properties":{"platform":{"type":"string","enum":["azure"]}},"required":["platform"]}]},{"type":"object","properties":{"platform":{"type":"string","enum":["kubernetes"]}},"required":["platform"]}],"description":"Management configuration for different cloud platforms.\n\nPlatform-derived configuration for cross-account/cross-tenant access.\nThis is NOT user-specified - it's derived from the Manager's ServiceAccount."}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/provision":{"post":{"operationId":"provisionManager","description":"Enqueue provisioning for a manager by ID.","x-speakeasy-group":"managers","x-speakeasy-name-override":"provision","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"202":{"description":"Manager provisioning enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot provision the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/update":{"post":{"operationId":"updateManager","description":"Update a manager to a specific release ID or active release.","x-speakeasy-group":"managers","x-speakeasy-name-override":"update","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManagerRequest"}}}},"responses":{"202":{"description":"Manager update enqueued successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"400":{"description":"Cannot update the manager in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/events":{"get":{"operationId":"listManagerEvents","description":"Retrieve all events of a manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"listEvents","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}},"required":["items"]}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/token":{"post":{"operationId":"generateManagerToken","description":"Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/binding-token":{"post":{"operationId":"generateManagerBindingToken","description":"Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerBindingToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerBindingTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/command-token":{"post":{"operationId":"generateManagerCommandToken","description":"Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API.","x-speakeasy-group":"managers","x-speakeasy-name-override":"generateManagerCommandToken","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerCommandTokenRequest"}}}},"responses":{"200":{"description":"Manager access token and connection info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateManagerTokenResponse"}}}},"403":{"description":"The caller cannot access the requested manager, project, deployment, or command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, project, deployment, or command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Invalid token scope request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The manager is not ready to accept requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/gcp-oauth-provider/resolve":{"post":{"operationId":"resolveManagerGcpOAuthProvider","description":"Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap.","x-speakeasy-group":"managers","x-speakeasy-name-override":"resolveGcpOAuthProvider","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderRequest"}}}},"responses":{"200":{"description":"Resolved Google Cloud OAuth provider settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveManagerGcpOAuthProviderResponse"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Manager cannot resolve this deployment group's project settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Manager, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/heartbeat":{"post":{"operationId":"reportManagerHeartbeat","description":"Report Manager health status and metrics.","x-speakeasy-group":"managers","x-speakeasy-name-override":"reportHeartbeat","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatRequest"}}}},"responses":{"200":{"description":"Heartbeat acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerHeartbeatResponse"}}}},"404":{"description":"Manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/managers/{id}/deployment":{"get":{"operationId":"getManagerDeployment","description":"Get deployment details for a private manager (internal deployment platform, status, resources).","x-speakeasy-group":"managers","x-speakeasy-name-override":"getDeployment","parameters":[{"schema":{"allOf":[{"$ref":"#/components/schemas/ManagerID"},{"description":"Unique identifier for a manager."}]},"required":true,"description":"Unique identifier for a manager.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Manager deployment details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerDeployment"}}}},"404":{"description":"Manager not found or has no internal deployment (alien-hosted managers don't have deployment info).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Operation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/prepare":{"post":{"operationId":"prepareOperatorManifestPackage","tags":["operator-manifests"],"summary":"Prepare the white-labeled Operator image for an Operate install","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageRequest"}}}},"responses":{"200":{"description":"Operator image package created or reused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareOperatorManifestPackageResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/operator-manifests/render":{"post":{"operationId":"renderOperatorManifest","tags":["operator-manifests"],"summary":"Render a Kubernetes Operator manifest","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestRequest"}}}},"responses":{"200":{"description":"Operator manifest rendered successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderOperatorManifestResponse"}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Operator image package is not ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Invalid platform or manager configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys":{"get":{"operationId":"listAPIKeys","description":"Retrieve all API keys for the current workspace.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved API keys.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/APIKey"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createAPIKey","description":"Create a new API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"API key created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"403":{"description":"Insufficient permissions to create API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/{id}":{"get":{"operationId":"getAPIKey","description":"Retrieve a specific API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"patch":{"operationId":"updateAPIKey","description":"Update an API key (enable/disable, change description).","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAPIKeyRequest"}}}},"responses":{"200":{"description":"API key updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKey"}}}},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"revokeAPIKey","description":"Revoke (soft delete) an API key.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"revoke","parameters":[{"schema":{"type":"string","pattern":"apikey_[0-9a-z]{28}$","description":"Unique identifier for the api key.","example":"apikey_ye96yxs1tjnrrwulp8frh"},"required":true,"description":"Unique identifier for the api key.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"API key revoked successfully."},"404":{"description":"API key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/api-keys/batch-delete":{"post":{"operationId":"deleteAPIKeys","description":"Permanently delete multiple API keys.","x-speakeasy-group":"apiKeys","x-speakeasy-name-override":"deleteMultiple","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAPIKeysRequest"}}}},"responses":{"200":{"description":"API keys deleted successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"deletedCount":{"type":"number"}},"required":["deletedCount"]}}}},"403":{"description":"Insufficient permissions to delete API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains":{"get":{"operationId":"listDomains","description":"List system domains and workspace domains.","x-speakeasy-group":"domains","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domains.","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainWithUsage"}}},"required":["domains"]}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDomain","description":"Create a workspace domain and optional initial endpoints.","x-speakeasy-group":"domains","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253},"setup":{"type":"object","properties":{"deploymentPortal":{"type":"boolean"},"packages":{"type":"boolean"},"deploymentUrlProjectId":{"type":"string","nullable":true,"pattern":"prj_[0-9a-z]{28}$","description":"Unique identifier for the project.","example":"prj_mcytp6z3j91f7tn5ryqsfwtr"},"managerIds":{"type":"array","items":{"type":"string"}}}}},"required":["domain"]}}}},"responses":{"200":{"description":"Returned an existing workspace domain claim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"201":{"description":"Created domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Domain is reserved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"403":{"description":"Insufficient permissions or plan limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/endpoints":{"post":{"operationId":"createDomainEndpoint","description":"Create an endpoint under a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"createEndpoint","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment_portal","workspace_packages","manager_api","deployment_url_base"]},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["workspace","project","manager"]},"id":{"type":"string"}},"required":["type","id"]}},"required":["kind"]}}}},"responses":{"201":{"description":"Created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Endpoint cleanup is still in progress.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomain","description":"Get domain by ID.","x-speakeasy-group":"domains","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved domain.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"delete":{"operationId":"deleteDomain","description":"Delete a workspace domain.","x-speakeasy-group":"domains","x-speakeasy-name-override":"delete","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain deletion requested.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Domain is in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/domains/{id}/refresh":{"post":{"operationId":"refreshDomain","description":"Refresh workspace domain verification.","x-speakeasy-group":"domains","x-speakeasy-name-override":"refresh","parameters":[{"schema":{"type":"string","pattern":"dom_[0-9a-z]{28}$","description":"Unique identifier for the domain.","example":"dom_469m0agk8luj4s16sakmmpdd"},"required":true,"description":"Unique identifier for the domain.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Domain verification refresh requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWithUsage"}}}},"403":{"description":"Forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events":{"get":{"operationId":"listEvents","description":"Retrieve all events.","x-speakeasy-group":"events","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","description":"Filter events to a single deployment."},"required":false,"description":"Filter events to a single deployment.","name":"deploymentId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["releaseCreatedAt"]},"description":"Optional fields to include: releaseCreatedAt"},"required":false,"description":"Optional fields to include: releaseCreatedAt","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved events.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/events/{id}":{"get":{"operationId":"getEvent","description":"Retrieve an event by ID.","x-speakeasy-group":"events","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"event_[0-9a-zA-Z]{28}$","description":"Unique identifier for the event.","example":"event_MtSA24M3pWuAkQYxgZxuRI"},"required":true,"description":"Unique identifier for the event.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved event.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens":{"get":{"operationId":"listMachinesJoinTokens","x-speakeasy-group":"machines","x-speakeasy-name-override":"listJoinTokens","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Join tokens for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesJoinTokensResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"createJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Newly minted Machines join token. Existing tokens keep working; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/rotate":{"post":{"operationId":"rotateMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"rotateJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Rotated Machines join token. Revokes all existing tokens, then mints a new one; the token value is returned only once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/join-tokens/{tokenId}":{"delete":{"operationId":"revokeMachinesJoinToken","x-speakeasy-group":"machines","x-speakeasy-name-override":"revokeJoinToken","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"tokenId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines join token revocation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeMachinesJoinTokenResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/inventory":{"get":{"operationId":"listMachinesInventory","x-speakeasy-group":"machines","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machine inventory for a Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMachinesInventoryResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}/drain":{"delete":{"operationId":"cancelMachinesMachineDrain","x-speakeasy-group":"machines","x-speakeasy-name-override":"cancelMachineDrain","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines drain cancellation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMachinesMachineDrainResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"drainMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"drainMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineRequest"}}}},"responses":{"200":{"description":"Machines drain request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrainMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/machines/deployments/{id}/machines/{machineId}":{"delete":{"operationId":"removeMachinesMachine","x-speakeasy-group":"machines","x-speakeasy-name-override":"removeMachine","parameters":[{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Unique identifier for the deployment.","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Unique identifier for the deployment.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"machineId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Machines remove request result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMachinesMachineResponse"}}}},"400":{"description":"Deployment is not a provisioned Machines deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands":{"get":{"operationId":"listCommands","description":"Retrieve commands. Use for dashboard analytics and command history.","x-speakeasy-group":"commands","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"type":"string","enum":["PENDING_UPLOAD","PENDING","DISPATCHED","SUCCEEDED","FAILED","EXPIRED"],"description":"Filter by command state"},"required":false,"description":"Filter by command state","name":"state","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Filter by command name"},"required":false,"description":"Filter by command name","name":"name","in":"query"},{"schema":{"type":"string","maxLength":256,"description":"Search commands by name"},"required":false,"description":"Search commands by name","name":"search","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created after this date (ISO 8601)"},"required":false,"description":"Filter commands created after this date (ISO 8601)","name":"createdAfter","in":"query"},{"schema":{"type":"string","nullable":true,"format":"date-time","description":"Filter commands created before this date (ISO 8601)"},"required":false,"description":"Filter commands created before this date (ISO 8601)","name":"createdBefore","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["deployment","project"]},"description":"Optional fields to include: deployment, project"},"required":false,"description":"Optional fields to include: deployment, project","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Retrieved commands.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommandListItemResponse"},"description":"Items in this page"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for the next page, null if last page"}},"required":["items","nextCursor"],"description":"Paginated response"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createCommand","description":"Create command metadata. Called by manager when processing commands. Returns project info for routing decisions.","x-speakeasy-group":"commands","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandRequest"}}}},"responses":{"201":{"description":"Command created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandResponse"}}}},"400":{"description":"Deployment is not ready or has no assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"The deployment manager is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/names":{"get":{"operationId":"listCommandNames","description":"List distinct command names. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listNames","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search command names (prefix match)"},"required":false,"description":"Search command names (prefix match)","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct command names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandNamesResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/deployments":{"get":{"operationId":"listCommandDeployments","description":"List distinct deployments that have commands, including deployment group info. Use for filter dropdowns in the dashboard.","x-speakeasy-group":"commands","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","maxLength":255,"description":"Search deployment or deployment group names"},"required":false,"description":"Search deployment or deployment group names","name":"search","in":"query"}],"responses":{"200":{"description":"Distinct deployments that have commands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCommandDeploymentsResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/target":{"get":{"operationId":"resolveCommandTarget","description":"Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named.","x-speakeasy-group":"commands","x-speakeasy-name-override":"resolveTarget","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Deployment to resolve the target for","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":true,"description":"Deployment to resolve the target for","name":"deploymentId","in":"query"},{"schema":{"type":"string","maxLength":255,"description":"Explicit resource id to resolve; must be a command-capable resource"},"required":false,"description":"Explicit resource id to resolve; must be a command-capable resource","name":"target","in":"query"}],"responses":{"200":{"description":"Resolved command target.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedCommandTarget"}}}},"404":{"description":"Deployment or target not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Multiple command-capable targets; an explicit target is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Deployment has no command-capable targets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}":{"patch":{"operationId":"updateCommand","description":"Update command state. Called by manager when command is dispatched or completes.","x-speakeasy-group":"commands","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommandRequest"}}}},"responses":{"200":{"description":"Command updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getCommand","description":"Retrieve a command by ID.","x-speakeasy-group":"commands","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved command.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/dispatch":{"post":{"operationId":"dispatchCommand","description":"Atomically mark a command DISPATCHED unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"dispatch","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandRequest"}}}},"responses":{"200":{"description":"Dispatch attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/complete":{"post":{"operationId":"completeCommand","description":"Atomically transition a command to a terminal state (SUCCEEDED, FAILED, or EXPIRED) unless it is already terminal. Returns whether the transition was applied.","x-speakeasy-group":"commands","x-speakeasy-name-override":"complete","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandRequest"}}}},"responses":{"200":{"description":"Completion attempt result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCommandResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/commands/{id}/increment-attempt":{"post":{"operationId":"incrementCommandAttempt","description":"Atomically increment the command's attempt counter and return the new value.","x-speakeasy-group":"commands","x-speakeasy-name-override":"incrementAttempt","parameters":[{"schema":{"type":"string","pattern":"cmd_[0-9a-zA-Z]{28}$","description":"Unique identifier for the command.","example":"cmd_2sxjXxvOYct7IohT3ukliAzf"},"required":true,"description":"Unique identifier for the command.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Attempt incremented.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementCommandAttemptResponse"}}}},"404":{"description":"Command not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions":{"get":{"operationId":"listDebugSessions","description":"Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":false,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string","pattern":"dep_[0-9a-z]{28}$","description":"Filter by deployment ID","example":"dep_0c29fq4a2yjb7kx3smwdgxlc"},"required":false,"description":"Filter by deployment ID","name":"deploymentId","in":"query"},{"schema":{"allOf":[{"$ref":"#/components/schemas/DebugSessionState"},{"description":"Filter by session state"}]},"required":false,"description":"Filter by session state","name":"state","in":"query"},{"schema":{"type":"string","enum":["push","pull"],"description":"Filter by deployment model (push/pull). Joins against the parent deployment."},"required":false,"description":"Filter by deployment model (push/pull). Joins against the parent deployment.","name":"mode","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Filter by cloud provider. Joins against the parent deployment."},"required":false,"description":"Filter by cloud provider. Joins against the parent deployment.","name":"provider","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated debug sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSessionListResponse"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"post":{"operationId":"createDebugSession","description":"Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"create","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}}},"responses":{"201":{"description":"Debug session created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"403":{"description":"Caller is not the deployment's assigned manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/internal/manager-active":{"get":{"operationId":"listActiveManagerDebugSessions","description":"List active debug sessions created by the calling manager so runtime reconciliation can resume after restart.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"listActiveForManager","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of items to return per page"},"required":false,"description":"Maximum number of items to return per page","name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination - omit for first page"},"required":false,"description":"Cursor for pagination - omit for first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"Paginated active debug sessions owned by the calling manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerActiveDebugSessionListResponse"}}}},"403":{"description":"Caller is not a manager runtime.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/debug-sessions/{id}":{"patch":{"operationId":"updateDebugSession","description":"Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"update","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDebugSessionRequest"}}}},"responses":{"200":{"description":"Debug session updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"403":{"description":"Caller is not the manager that created the audit row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Debug session not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"The lifecycle transition is stale or would reactivate a terminal session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"422":{"description":"Request validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}},"get":{"operationId":"getDebugSession","description":"Retrieve a debug session by ID.","x-speakeasy-group":"debugSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","pattern":"dbg_[0-9a-zA-Z]{28}$","description":"Unique identifier for the debug session.","example":"dbg_HOXmkmT9UPYlsnxqSNlEGoXL"},"required":true,"description":"Unique identifier for the debug session.","name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Retrieved debug session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugSession"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info":{"get":{"operationId":"getDeploymentInfo","description":"Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"getInfo","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"required":false,"description":"Represents the target cloud platform.","name":"platform","in":"query"}],"responses":{"200":{"description":"Deployment information retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"401":{"description":"Unauthorized — requires a deployment-scoped or deployment-group-scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment, deployment group, or project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/compute-plan":{"post":{"operationId":"planDeploymentCompute","description":"Plan deployment compute for the active release before stack preparation. The response contains recommended machine and scale choices for cloud compute pools.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"planCompute","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Compute plan returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentComputePlan"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/deployment-info/prepare-stack":{"post":{"operationId":"prepareDeploymentStack","description":"Prepare the active release stack for a deployment portal setup session. The response contains the generated stack shape plus setup compatibility metadata.","x-speakeasy-group":"deployment","x-speakeasy-name-override":"prepareStack","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["aws","gcp","azure"]},"setupMethod":{"$ref":"#/components/schemas/DeploymentSetupMethod"},"region":{"type":"string"},"stackSettings":{"type":"object","properties":{"compute":{"type":"object","properties":{"pools":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["fixed"]},"machines":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","machines"]},{"type":"object","properties":{"mode":{"type":"string","enum":["autoscale"]},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0},"machine":{"type":"string"}},"required":["mode","min","max"]}]},"default":{}}}},"deploymentModel":{"type":"string","enum":["push","pull"],"description":"Deployment model: how updates are delivered to the remote environment."},"domains":{"oneOf":[{"type":"object","properties":{"customDomains":{"type":"object","nullable":true,"properties":{},"additionalProperties":{"type":"object","properties":{"certificate":{"type":"object","properties":{"aws":{"oneOf":[{"type":"object","properties":{"certificateArn":{"type":"string"}},"required":["certificateArn"]},{"nullable":true}]},"azure":{"oneOf":[{"type":"object","properties":{"keyVaultCertificateId":{"type":"string"},"keyVaultResourceId":{"type":"string","nullable":true}},"required":["keyVaultCertificateId"]},{"nullable":true}]},"gcp":{"oneOf":[{"type":"object","properties":{"certificateName":{"type":"string"}},"required":["certificateName"]},{"nullable":true}]},"kubernetes":{"oneOf":[{"type":"object","properties":{"tlsSecretRef":{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."}},"required":["tlsSecretRef"]},{"nullable":true}]}},"description":"Platform-specific certificate references for custom domains."},"domain":{"type":"string","description":"Fully qualified domain name to use."}},"required":["certificate","domain"],"description":"Custom domain configuration for a single resource."},"description":"Custom domain configuration per resource ID."},"publicEndpointTarget":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["machineAddresses"]}},"required":["mode"]},{"type":"object","properties":{"cnameTarget":{"type":"string","description":"DNS name or URL for the external load balancer."},"mode":{"type":"string","enum":["loadBalancer"]}},"required":["cnameTarget","mode"]},{"nullable":true}]}},"description":"Domain configuration for the stack.\n\nWhen `custom_domains` is set, the specified resources use customer-provided\ndomains and certificates. Otherwise, Alien auto-generates domains."},{"nullable":true}]},"externalBindings":{"type":"object","nullable":true,"properties":{},"description":"External bindings for pre-existing infrastructure.\nAllows using existing resources (MinIO, Redis, shared Container Apps\nEnvironment, etc.) instead of having Alien provision them.\nRequired for Kubernetes platform, optional for cloud platforms."},"heartbeats":{"type":"string","enum":["off","on"],"description":"How heartbeat health checks are handled."},"kubernetes":{"oneOf":[{"type":"object","properties":{"cluster":{"oneOf":[{"type":"object","properties":{"cloud":{"oneOf":[{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"clusterId":{"type":"string","nullable":true},"clusterName":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"subscriptionId":{"type":"string","nullable":true}},"description":"Optional provider-specific identity for a cloud-backed Kubernetes cluster."},{"nullable":true}]},"namespace":{"type":"string","nullable":true,"description":"Namespace where the Alien chart and application resources run."},"ownership":{"type":"string","enum":["managed","existing","external"],"description":"Ownership model for the Kubernetes cluster."}},"required":["ownership"],"description":"Kubernetes cluster setup settings."},{"nullable":true}]},"exposure":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["disabled"]}},"required":["mode"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"mode":{"type":"string","enum":["generated"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","mode","route"]},{"type":"object","properties":{"certificate":{"oneOf":[{"allOf":[{"type":"object","properties":{"namespace":{"type":"string","nullable":true,"description":"Secret namespace. Defaults to the release namespace when omitted."},"secretName":{"type":"string","description":"Secret name."}},"required":["secretName"],"description":"Namespace-scoped Kubernetes TLS Secret reference."},{"type":"object","properties":{"mode":{"type":"string","enum":["tlsSecretRef"]}},"required":["mode"]}]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedAcmImport"]},"region":{"type":"string","nullable":true,"description":"ACM region. Defaults to the deployment region when omitted."},"tags":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Tags applied to runtime-imported ACM certificates."}},"required":["mode"]},{"type":"object","properties":{"certificateArn":{"type":"string","description":"Existing ACM certificate ARN."},"mode":{"type":"string","enum":["awsAcmArn"]}},"required":["certificateArn","mode"]},{"type":"object","properties":{"mode":{"type":"string","enum":["managedTlsSecret"]},"secretNameTemplate":{"type":"string","description":"Secret name template. Runtime may substitute resource/deployment tokens."}},"required":["mode","secretNameTemplate"]},{"type":"object","properties":{"mode":{"type":"string","enum":["none"]}},"required":["mode"]}],"description":"Certificate publication or reference mode for Kubernetes public endpoints."},"domain":{"type":"string","description":"Hostname routed by the Kubernetes public endpoint."},"mode":{"type":"string","enum":["custom"]},"route":{"oneOf":[{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example `eks.amazonaws.com/alb`."},"ingressClassName":{"type":"string","description":"`spec.ingressClassName` for generated Ingresses."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["ingressClassName"],"description":"Shared Ingress route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["ingress"]}},"required":["routeApi"]}]},{"allOf":[{"type":"object","properties":{"annotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Annotations applied to route objects."},"controller":{"type":"string","nullable":true,"description":"Route controller identifier, for example a cloud Gateway controller."},"gatewayClassName":{"type":"string","description":"GatewayClass selected for generated Gateways."},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Labels applied to route objects."},"listenerPort":{"type":"integer","minimum":0,"description":"Listener port, usually 443."},"provider":{"oneOf":[{"type":"object","properties":{"ipAddressType":{"type":"string","nullable":true,"description":"Optional ALB IP address type, such as `dualstack`."},"provider":{"type":"string","enum":["awsAlb"]},"scheme":{"type":"string","description":"Internet-facing or internal ALB scheme."},"subnetIds":{"type":"array","items":{"type":"string"},"description":"Explicit subnet IDs when the profile cannot rely on controller discovery."},"targetType":{"type":"string","description":"ALB target type, usually `ip`."}},"required":["provider","scheme","targetType"]},{"type":"object","properties":{"provider":{"type":"string","enum":["gkeGateway"]},"staticAddressName":{"type":"string","nullable":true,"description":"Optional static address name for the Gateway frontend."}},"required":["provider"]},{"type":"object","properties":{"albName":{"type":"string","nullable":true,"description":"Optional ALB name when using BYO Application Gateway resources."},"albNamespace":{"type":"string","nullable":true,"description":"Optional ALB namespace when using BYO Application Gateway resources."},"frontend":{"type":"string","description":"Public or internal frontend exposure."},"provider":{"type":"string","enum":["azureApplicationGatewayForContainers"]}},"required":["frontend","provider"]},{"nullable":true}]}},"required":["gatewayClassName","listenerPort"],"description":"Shared Gateway API route profile values."},{"type":"object","properties":{"routeApi":{"type":"string","enum":["gateway"]}},"required":["routeApi"]}]}],"description":"Kubernetes route API selected for public endpoints."}},"required":["certificate","domain","mode","route"]},{"nullable":true}]}},"description":"Kubernetes runtime substrate configuration.\n\nThis controls how setup chooses the cluster backing `Platform::Kubernetes`\ndeployments. When omitted, cloud-backed Kubernetes deployments default to a\nmanaged cluster and generic/on-prem Kubernetes defaults to an external\ncluster."},{"nullable":true}]},"network":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["use-default"]}},"required":["type"]},{"type":"object","properties":{"availability_zones":{"type":"integer","minimum":0,"description":"Number of availability zones (default: 2)."},"cidr":{"type":"string","nullable":true,"description":"VPC/VNet CIDR block. If not specified, auto-generated from stack ID\nto reduce conflicts (e.g., \"10.{hash}.0.0/16\")."},"type":{"type":"string","enum":["create"]}},"required":["type"]},{"type":"object","properties":{"private_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of private subnets"},"public_subnet_ids":{"type":"array","items":{"type":"string"},"description":"IDs of public subnets (required for public ingress)"},"security_group_ids":{"type":"array","items":{"type":"string"},"description":"Optional security group IDs to use"},"type":{"type":"string","enum":["byo-vpc-aws"]},"vpc_id":{"type":"string","description":"The ID of the existing VPC"}},"required":["private_subnet_ids","public_subnet_ids","type","vpc_id"]},{"type":"object","properties":{"network_name":{"type":"string","description":"The name of the existing VPC network"},"region":{"type":"string","description":"The region of the subnet"},"subnet_name":{"type":"string","description":"The name of the subnet to use"},"type":{"type":"string","enum":["byo-vpc-gcp"]}},"required":["network_name","region","subnet_name","type"]},{"type":"object","properties":{"application_gateway_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated classic Application Gateway subnet within the VNet."},"private_endpoint_subnet_name":{"type":"string","nullable":true,"description":"Name of the dedicated subnet that hosts Private Endpoints (e.g. for a\nPostgres Flexible Server). A Private Endpoint must not share the private\nsubnet, which is already claimed by the Container Apps environment's\n`infrastructure_subnet_id`. Required only when the stack contains a\nPostgres resource; otherwise unused."},"private_subnet_name":{"type":"string","description":"Name of the private subnet within the VNet"},"public_subnet_name":{"type":"string","description":"Name of the public subnet within the VNet"},"type":{"type":"string","enum":["byo-vnet-azure"]},"vnet_resource_id":{"type":"string","description":"The full resource ID of the existing VNet"}},"required":["private_subnet_name","public_subnet_name","type","vnet_resource_id"]},{"nullable":true}]},"telemetry":{"type":"string","enum":["off","auto","approval-required"],"description":"How telemetry (logs, metrics, traces) is handled."},"updates":{"type":"string","enum":["auto","approval-required"],"description":"How updates are delivered to the deployment."}}}},"required":["platform","setupMethod","stackSettings"]}}}},"responses":{"200":{"description":"Prepared stack returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedDeploymentStack"}}}},"401":{"description":"Unauthorized — requires a deployment-group scoped API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Deployment group, project, release, or manager not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/install-url":{"post":{"operationId":"slackIntegrationInstallUrl","description":"Generate the Slack OAuth consent URL for this workspace.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"installUrl","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"OAuth URL the dashboard should redirect the user to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallUrlResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/status":{"get":{"operationId":"slackIntegrationStatus","description":"Return the Slack install for this workspace (if any).","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"status","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationStatus"}}}}}}},"/v1/integrations/slack/channels":{"get":{"operationId":"slackIntegrationChannels","description":"List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"listChannels","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Public channels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelsResponse"}}}},"400":{"description":"Workspace not connected to Slack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/notification-channel":{"put":{"operationId":"slackIntegrationSetNotificationChannel","description":"Configure which Slack channel receives ai-agent monitor reports.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"setNotificationChannel","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelRequest"}}}},"responses":{"200":{"description":"Channel saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationChannelResponse"}}}},"400":{"description":"Not connected, or join failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/integrations/slack/installation":{"delete":{"operationId":"slackIntegrationUninstall","description":"Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row.","x-speakeasy-group":"slackIntegration","x-speakeasy-name-override":"uninstall","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"204":{"description":"Uninstalled."}}}},"/v1/agent-sessions":{"get":{"operationId":"listAgentSessions","description":"List ai-agent monitor sessions for this workspace. Newest first, capped at 50.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionListResponse"}}}}}}},"/v1/agent-sessions/{id}":{"get":{"operationId":"getAgentSession","description":"Retrieve one ai-agent monitor session by id.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/events":{"get":{"operationId":"listAgentSessionEvents","description":"Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"events","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Events after the cursor, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionEventsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/approve":{"post":{"operationId":"approveAgentSession","description":"Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"approve","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already resumed / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"202":{"description":"Approved; resume enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionApproveResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/agent-sessions/{id}/stop":{"post":{"operationId":"stopAgentSession","description":"Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op.","x-speakeasy-group":"agentSessions","x-speakeasy-name-override":"stop","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Already terminal / no-op.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"202":{"description":"Cancel accepted; session stopped.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionStopResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"AI agent service is not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/list":{"post":{"operationId":"syncList","description":"List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows.","x-speakeasy-group":"sync","x-speakeasy-name-override":"list","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListRequest"}}}},"responses":{"200":{"description":"Full deployment records returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncListResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/context":{"post":{"operationId":"syncContext","description":"Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock.","x-speakeasy-group":"sync","x-speakeasy-name-override":"context","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncContextRequest"}}}},"responses":{"200":{"description":"Computed deployment context returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponseDeployment"}}}},"404":{"description":"Deployment not found or not assigned to this manager.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Failed to build deployment context.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/acquire":{"post":{"operationId":"syncAcquire","description":"Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing.","x-speakeasy-group":"sync","x-speakeasy-name-override":"acquire","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireRequest"}}}},"responses":{"200":{"description":"Deployments acquired successfully (empty arrays if none available). Failures indicate deployments that were locked but failed during context building - their locks have been released.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncAcquireResponse"}}}},"400":{"description":"Bad request - invalid manager or filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/reconcile":{"post":{"operationId":"syncReconcile","description":"Reconcile deployment state. Push model requests that include a session verify lock ownership. Pull model state reports are accepted as authz-gated agent progress even when they carry an agent-sync session. Accepts full DeploymentState after step() execution.","x-speakeasy-group":"sync","x-speakeasy-name-override":"reconcile","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileRequest"}}}},"responses":{"200":{"description":"State reconciled successfully. If target is present, continue deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReconcileResponse"}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"409":{"description":"Deployment locked (pull) or session mismatch (push).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/sync/release":{"post":{"operationId":"syncRelease","description":"Release a deployment lock. Must be called after processing an acquired deployment, even if processing failed. This is critical to avoid deadlocks.","x-speakeasy-group":"sync","x-speakeasy-name-override":"release","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncReleaseRequest"}}}},"responses":{"200":{"description":"Lock released successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Deployment not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources":{"get":{"operationId":"listInventory","x-speakeasy-group":"resources","x-speakeasy-name-override":"listInventory","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Unified managed and observed resource inventory rows.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["managed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt","source","deploymentId","deploymentName"]},{"type":"object","properties":{"source":{"type":"string","enum":["observed"]},"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"rawKind":{"type":"string"},"alienResourceId":{"type":"string","nullable":true},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["source","deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","name","rawKind","alienResourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}":{"get":{"operationId":"listResourceOverview","x-speakeasy-group":"resources","x-speakeasy-name-override":"listOverview","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Compute resource overview rows from latest heartbeats.","content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"name":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"deploymentCount":{"type":"integer"},"attentionCount":{"type":"integer"},"lastObservedAt":{"type":"string","format":"date-time"}},"required":["resourceType","resourceId","name","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","deploymentCount","attentionCount","lastObservedAt"]}}},"required":["resources"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/{resourceId}/deployments":{"get":{"operationId":"listResourceDeployments","x-speakeasy-group":"resources","x-speakeasy-name-override":"listDeployments","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}},{"schema":{"type":"string"},"required":false,"name":"deploymentGroupId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deploymentId","in":"query"}],"responses":{"200":{"description":"Deployments where the resource is installed.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string"},"resourceId":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt"]}}},"required":["resourceType","resourceId","deployments"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resources/{area}/deployments/{deploymentId}/{resourceId}":{"get":{"operationId":"getResourceDeploymentDetail","x-speakeasy-group":"resources","x-speakeasy-name-override":"getDeploymentDetail","parameters":[{"schema":{"type":"string","enum":["container","worker","daemon"]},"required":true,"name":"area","in":"path"},{"schema":{"type":"string"},"required":true,"name":"deploymentId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"},{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"$ref":"#/components/schemas/ProjectIDOrNameQueryParam"},"required":true,"description":"Filter by project ID or name.","name":"project","in":"query","examples":{"projectName":{"value":"my-project"},"projectId":{"value":"prj_mcytp6z3j91f7tn5ryqsfwtr"}}}],"responses":{"200":{"description":"Latest heartbeat detail for one compute resource deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"object","properties":{"deploymentId":{"type":"string"},"deploymentName":{"type":"string"},"deploymentGroupId":{"type":"string","nullable":true},"deploymentGroupName":{"type":"string","nullable":true},"resourceType":{"type":"string"},"resourceId":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"health":{"type":"string"},"lifecycle":{"type":"string"},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"providerStale":{"type":"boolean"},"platformStale":{"type":"boolean"},"desiredCount":{"type":"integer","nullable":true},"currentCount":{"type":"integer","nullable":true},"readyCount":{"type":"integer","nullable":true},"observedAt":{"type":"string","format":"date-time"},"desiredImage":{"type":"string","nullable":true}},"required":["deploymentId","deploymentName","deploymentGroupId","deploymentGroupName","resourceType","resourceId","backend","controllerPlatform","health","lifecycle","message","partial","providerStale","platformStale","desiredCount","currentCount","readyCount","observedAt","desiredImage"]},"heartbeat":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","enum":["available"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"},"backend":{"type":"string"},"controllerPlatform":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"staleAt":{"type":"string","format":"date-time"},"platformStale":{"type":"boolean"},"heartbeat":{"type":"object","properties":{"backend":{"type":"string","enum":["aws","gcp","azure","kubernetes","local","managed","external","test"]},"controllerPlatform":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Represents the target cloud platform."},"data":{"oneOf":[{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"blockPublicAcls":{"type":"boolean","nullable":true},"blockPublicPolicy":{"type":"boolean","nullable":true},"bucketAclPresent":{"type":"boolean","nullable":true},"bucketLocation":{"type":"string","nullable":true},"bucketPolicyPresent":{"type":"boolean","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"encryptionEnabled":{"type":"boolean","nullable":true},"ignorePublicAcls":{"type":"boolean","nullable":true},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"publicAccessBlockPresent":{"type":"boolean"},"region":{"type":"string","nullable":true},"restrictPublicBuckets":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"versioningEnabled":{"type":"boolean","nullable":true},"versioningStatus":{"type":"string","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","publicAccessBlockPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsS3"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bucketId":{"type":"string","nullable":true},"defaultKmsKeyName":{"type":"string","nullable":true},"encryptionConfigPresent":{"type":"boolean"},"lifecyclePresent":{"type":"boolean"},"lifecycleRuleCount":{"type":"integer","nullable":true,"minimum":0},"location":{"type":"string","nullable":true},"locationType":{"type":"string","nullable":true},"name":{"type":"string"},"publicAccessPrevention":{"type":"string","nullable":true},"retentionPeriod":{"type":"string","nullable":true},"retentionPolicyEffectiveTime":{"type":"string","nullable":true},"retentionPolicyIsLocked":{"type":"boolean","nullable":true},"softDeleteEffectiveTime":{"type":"string","nullable":true},"softDeleteRetentionDurationSeconds":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageClass":{"type":"string","nullable":true},"uniformBucketLevelAccessEnabled":{"type":"boolean","nullable":true},"uniformBucketLevelAccessLockedTime":{"type":"string","nullable":true},"versioningEnabled":{"type":"boolean","nullable":true}},"required":["encryptionConfigPresent","lifecyclePresent","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudStorage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessTier":{"type":"string","nullable":true},"accountKind":{"type":"string","nullable":true},"allowBlobPublicAccess":{"type":"boolean","nullable":true},"blobDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"blobDeleteRetentionEnabled":{"type":"boolean","nullable":true},"blobEncryptionEnabled":{"type":"boolean","nullable":true},"blobVersioningEnabled":{"type":"boolean","nullable":true},"changeFeedEnabled":{"type":"boolean","nullable":true},"changeFeedRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionDays":{"type":"integer","nullable":true,"minimum":0},"containerDeleteRetentionEnabled":{"type":"boolean","nullable":true},"containerPublicAccess":{"type":"string","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"fileEncryptionEnabled":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"primaryLocation":{"type":"string","nullable":true},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"queueEncryptionEnabled":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"secondaryLocation":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"statusOfPrimary":{"type":"string","nullable":true},"statusOfSecondary":{"type":"string","nullable":true},"storageAccountName":{"type":"string","nullable":true},"tableEncryptionEnabled":{"type":"boolean","nullable":true}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureBlob"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["storage"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"codeSha256":{"type":"string","nullable":true},"functionName":{"type":"string"},"functionUrlAuthType":{"type":"string","nullable":true},"functionUrlCorsPresent":{"type":"boolean"},"lastModified":{"type":"string","nullable":true},"lastUpdateStatus":{"type":"string","nullable":true},"lastUpdateStatusReason":{"type":"string","nullable":true},"lastUpdateStatusReasonCode":{"type":"string","nullable":true},"layerCount":{"type":"integer","minimum":0},"memorySizeMb":{"type":"integer","nullable":true},"packageType":{"type":"string","nullable":true},"revisionId":{"type":"string","nullable":true},"runtime":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"stateReason":{"type":"string","nullable":true},"stateReasonCode":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutSeconds":{"type":"integer","nullable":true},"triggerCount":{"type":"integer","minimum":0},"version":{"type":"string","nullable":true}},"required":["functionName","functionUrlCorsPresent","layerCount","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsLambda"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"containerImage":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"generation":{"type":"integer","nullable":true},"latestCreatedRevision":{"type":"string","nullable":true},"latestReadyRevision":{"type":"string","nullable":true},"maxInstanceCount":{"type":"integer","nullable":true},"memoryLimit":{"type":"string","nullable":true},"minInstanceCount":{"type":"integer","nullable":true},"observedGeneration":{"type":"integer","nullable":true},"region":{"type":"string","nullable":true},"service":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trafficCount":{"type":"integer","minimum":0},"uri":{"type":"string","nullable":true},"urls":{"type":"array","items":{"type":"string"}}},"required":["service","status","trafficCount","urls"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudRun"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appName":{"type":"string"},"cpu":{"type":"number","nullable":true},"environmentName":{"type":"string","nullable":true},"ingressFqdn":{"type":"string","nullable":true},"maxReplicas":{"type":"integer","nullable":true},"memory":{"type":"string","nullable":true},"minReplicas":{"type":"integer","nullable":true},"provisioningState":{"type":"string","nullable":true},"revision":{"type":"string","nullable":true},"runningStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["appName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","triggerCount","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"imagePathPresent":{"type":"boolean"},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pid":{"type":"integer","nullable":true,"minimum":0},"process":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"readinessProbeOk":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"triggerCount":{"type":"integer","minimum":0}},"required":["commandSupported","events","imagePathPresent","status","triggerCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["worker"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"attentionCount":{"type":"integer","minimum":0},"containerId":{"type":"string"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"image":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"observedImage":{"type":"string","nullable":true},"replicaUnits":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"schedulingMode":{"type":"string","enum":["replicated","stateful","daemon"]},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["attentionCount","containerId","events","replicaUnits","replicas","schedulingMode","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["horizonPlatform"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]},"workloadKind":{"type":"string","enum":["deployment","statefulSet","daemonSet","replicaSet","pod"]}},"required":["events","name","namespace","pods","replicas","status","workloadKind"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"bindMountCount":{"type":"integer","minimum":0},"containerId":{"type":"string","nullable":true},"containerUnit":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"image":{"type":"string","nullable":true},"localUrl":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string","nullable":true},"portCount":{"type":"integer","minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeReachable":{"type":"boolean"},"runtimeStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["bindMountCount","events","portCount","runtimeReachable","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["container"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"assignedMachines":{"type":"integer","minimum":0},"capacityGroup":{"type":"string"},"commandSupported":{"type":"boolean"},"daemonInstances":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"ip":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"message":{"type":"string","nullable":true},"metricsHealthy":{"type":"boolean","nullable":true},"metricsLastUpdated":{"type":"string","nullable":true},"metricsStatus":{"type":"string","nullable":true},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"phase":{"type":"string","nullable":true},"ready":{"type":"boolean"},"reason":{"type":"string","nullable":true},"replicaId":{"type":"string"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"string","nullable":true},"terminatedReason":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ready","replicaId"]}},"daemonName":{"type":"string"},"desiredMachines":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"eventId":{"type":"string","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"details":{"oneOf":[{"nullable":true},{"nullable":true}]},"id":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"machineId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"replicaId":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"healthyInstances":{"type":"integer","minimum":0},"horizonClusterId":{"type":"string"},"horizonStatus":{"type":"string"},"horizonStatusMessage":{"type":"string","nullable":true},"horizonStatusReason":{"type":"string","nullable":true},"latestUpdateTimestamp":{"type":"string"},"observedImage":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"unavailableInstances":{"type":"integer","minimum":0}},"required":["assignedMachines","capacityGroup","commandSupported","daemonInstances","desiredMachines","events","healthyInstances","horizonClusterId","horizonStatus","latestUpdateTimestamp","status","unavailableInstances"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string"},"pods":{"type":"array","items":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodeName":{"type":"string","nullable":true},"ownerReferences":{"type":"array","items":{"type":"object","properties":{"controller":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["controller","kind","name","uid"]}},"phase":{"type":"string","nullable":true},"podIp":{"type":"string","nullable":true},"ready":{"type":"boolean"},"restartCount":{"type":"integer","minimum":0},"terminatedReason":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true},"waitingReason":{"type":"string","nullable":true}},"required":["name","ownerReferences","ready","restartCount"]}},"replicas":{"type":"object","properties":{"available":{"type":"integer","nullable":true,"minimum":0},"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"misscheduled":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0},"updated":{"type":"integer","nullable":true,"minimum":0}}},"restarts":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workload":{"oneOf":[{"type":"object","properties":{"availableReplicas":{"type":"integer","nullable":true,"minimum":0},"conditions":{"type":"array","items":{"type":"object","properties":{"lastTransitionTime":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"desiredGeneration":{"type":"integer","nullable":true},"desiredReplicas":{"type":"integer","nullable":true,"minimum":0},"observedGeneration":{"type":"integer","nullable":true},"readyReplicas":{"type":"integer","nullable":true,"minimum":0},"rolloutReason":{"type":"string","nullable":true},"updatedReplicas":{"type":"integer","nullable":true,"minimum":0}},"required":["conditions"]},{"nullable":true}]}},"required":["commandSupported","events","name","namespace","pods","replicas","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetes"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"commandSupported":{"type":"boolean"},"daemonInstance":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"kind":{"type":"string","enum":["container","process","daemon"]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"phase":{"type":"string","nullable":true},"pid":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"boolean"},"restartCount":{"type":"integer","nullable":true,"minimum":0},"unitId":{"type":"string"}},"required":["kind","name","ready","unitId"]},{"nullable":true}]},"daemonName":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"severity":{"type":"string","enum":["info","warning","error"]},"subject":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","nullable":true},"kind":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["kind"]},{"nullable":true}]},"timestamp":{"type":"string","format":"date-time"}},"required":["kind","message","severity","timestamp"]}},"exitReason":{"type":"string","nullable":true},"imagePathPresent":{"type":"boolean"},"pid":{"type":"integer","nullable":true,"minimum":0},"restartCount":{"type":"integer","nullable":true,"minimum":0},"runtimeId":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["commandSupported","events","imagePathPresent","runtimeId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["daemon"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aws"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcp"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"providerFleets":{"type":"array","items":{"type":"object","properties":{"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"groupId":{"type":"string"},"location":{"type":"string","nullable":true},"providerId":{"type":"string"}},"required":["currentMachines","desiredMachines","groupId","providerId"]}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","name","nodes","providerFleets","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azure"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"backendClusterId":{"type":"string","nullable":true},"capacityGroups":{"type":"array","items":{"type":"object","properties":{"capacityBlocker":{"oneOf":[{"type":"object","properties":{"category":{"type":"string","enum":["quota","capacity","allocation","other"]},"message":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"providerCode":{"type":"string","nullable":true},"providerReference":{"type":"string","nullable":true}},"required":["category","message","observedAt"]},{"nullable":true}]},"currentMachines":{"type":"integer","minimum":0},"desiredMachines":{"type":"integer","minimum":0},"drainProgress":{"oneOf":[{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"force":{"type":"boolean"},"machineId":{"type":"string"},"replicaCount":{"type":"integer"},"stalled":{"type":"boolean"},"status":{"type":"string","enum":["draining","drained","terminating"]}},"required":["force","machineId","replicaCount","stalled","status"]},{"nullable":true}]},"groupId":{"type":"string"},"instanceType":{"type":"string","nullable":true},"maxMachines":{"type":"integer","nullable":true,"minimum":0},"minMachines":{"type":"integer","nullable":true,"minimum":0},"recommendation":{"oneOf":[{"type":"object","properties":{"desiredMachines":{"type":"integer","minimum":0},"reason":{"type":"string","nullable":true},"unschedulableReplicas":{"type":"integer","nullable":true,"minimum":0},"utilization":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}},"required":["desiredMachines"]},{"nullable":true}]}},"required":["currentMachines","desiredMachines","groupId"]}},"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"machines":{"type":"array","items":{"type":"object","properties":{"capacityGroup":{"type":"string"},"cpuCores":{"type":"number","nullable":true},"drainBlockers":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"replicaId":{"type":"string"},"schedulingMode":{"type":"string"},"state":{"type":"string"},"workloadName":{"type":"string"}},"required":["reason","replicaId","schedulingMode","state","workloadName"]}},"drainDeadlineAt":{"type":"string","nullable":true},"drainForce":{"type":"boolean"},"drainRequestedAt":{"type":"string","nullable":true},"drainedAt":{"type":"string","nullable":true},"horizondVersion":{"type":"string","nullable":true},"lastHeartbeat":{"type":"string"},"machineId":{"type":"string"},"memoryBytes":{"type":"integer","nullable":true},"overlayIp":{"type":"string","nullable":true},"publicIp":{"type":"string","nullable":true},"replicaCount":{"type":"integer"},"status":{"type":"string"},"zone":{"type":"string"}},"required":["capacityGroup","drainForce","lastHeartbeat","machineId","replicaCount","status","zone"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["capacityGroups","machines","name","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["machines"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"dockerApiVersion":{"type":"string","nullable":true},"dockerArch":{"type":"string","nullable":true},"dockerAvailable":{"type":"boolean"},"dockerOs":{"type":"string","nullable":true},"dockerVersion":{"type":"string","nullable":true},"hostIdentifier":{"type":"string","nullable":true},"name":{"type":"string"},"networkAvailable":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"nodes":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"runningContainers":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"trackedContainers":{"type":"integer","nullable":true,"minimum":0}},"required":["dockerAvailable","name","networkAvailable","nodes","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["compute-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"name":{"type":"string"},"namespace":{"type":"string","nullable":true},"nodeCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"nodeStatuses":{"type":"array","items":{"type":"object","properties":{"allocatable":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"capacity":{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"pods":{"type":"integer","nullable":true,"minimum":0}}},"conditions":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"status":{"type":"string"},"type":{"type":"string"}},"required":["status","type"]}},"containerRuntimeVersion":{"type":"string","nullable":true},"kubeletVersion":{"type":"string","nullable":true},"labels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"ready":{"type":"boolean"},"roles":{"type":"array","items":{"type":"string"}},"uid":{"type":"string","nullable":true},"usage":{"oneOf":[{"type":"object","properties":{"cpu":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]},"memory":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["count","percent","bytes","cores","milliseconds","requests-per-second"]},"value":{"type":"number"}},"required":["unit","value"]},{"nullable":true}]}}},{"nullable":true}]}},"required":["allocatable","capacity","labels","name","ready","roles"]}},"podCounts":{"type":"object","properties":{"current":{"type":"integer","nullable":true,"minimum":0},"desired":{"type":"integer","nullable":true,"minimum":0},"ready":{"type":"integer","nullable":true,"minimum":0}}},"region":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["events","name","nodeCounts","podCounts","status"]},"resourceType":{"type":"string","enum":["kubernetes-cluster"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"approximateCounts":{"type":"boolean"},"approximateDelayedMessages":{"type":"integer","nullable":true,"minimum":0},"approximateInFlightMessages":{"type":"integer","nullable":true,"minimum":0},"approximateVisibleMessages":{"type":"integer","nullable":true,"minimum":0},"contentBasedDeduplication":{"type":"boolean","nullable":true},"deduplicationScope":{"type":"string","nullable":true},"delaySeconds":{"type":"integer","nullable":true,"minimum":0},"fifoQueue":{"type":"boolean","nullable":true},"fifoThroughputLimit":{"type":"string","nullable":true},"kmsDataKeyReusePeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"kmsMasterKeyId":{"type":"string","nullable":true},"maximumMessageSize":{"type":"integer","nullable":true,"minimum":0},"messageRetentionPeriodSeconds":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"queueArn":{"type":"string","nullable":true},"queueUrl":{"type":"string","nullable":true},"receiveMessageWaitTimeSeconds":{"type":"integer","nullable":true,"minimum":0},"redriveAllowPolicy":{"type":"string","nullable":true},"redrivePolicy":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"sqsManagedSseEnabled":{"type":"boolean","nullable":true},"sseEnabled":{"type":"boolean","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"visibilityTimeoutSeconds":{"type":"integer","nullable":true,"minimum":0}},"required":["approximateCounts","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsSqs"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"kmsKeyName":{"type":"string","nullable":true},"messageStorageAllowedPersistenceRegions":{"type":"array","items":{"type":"string"}},"messageStorageEnforceInTransit":{"type":"boolean","nullable":true},"projectId":{"type":"string","nullable":true},"schemaEncoding":{"type":"string","nullable":true},"schemaFirstRevisionId":{"type":"string","nullable":true},"schemaLastRevisionId":{"type":"string","nullable":true},"schemaName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subscriptionAckDeadlineSeconds":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterMaxDeliveryAttempts":{"type":"integer","nullable":true,"minimum":0},"subscriptionDeadLetterTopic":{"type":"string","nullable":true},"subscriptionDetached":{"type":"boolean","nullable":true},"subscriptionEnableMessageOrdering":{"type":"boolean","nullable":true},"subscriptionFilter":{"type":"string","nullable":true},"subscriptionFullName":{"type":"string","nullable":true},"subscriptionLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionMessageRetentionDuration":{"type":"string","nullable":true},"subscriptionName":{"type":"string","nullable":true},"subscriptionPushAttributes":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"subscriptionPushConfigPresent":{"type":"boolean","nullable":true},"subscriptionPushEndpoint":{"type":"string","nullable":true},"subscriptionPushNoWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionPushOidcAudience":{"type":"string","nullable":true},"subscriptionPushOidcServiceAccountEmail":{"type":"string","nullable":true},"subscriptionPushPubsubWrapperWriteMetadata":{"type":"boolean","nullable":true},"subscriptionRetainAckedMessages":{"type":"boolean","nullable":true},"subscriptionState":{"type":"string","nullable":true},"topicFullName":{"type":"string","nullable":true},"topicLabels":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"topicMessageRetentionDuration":{"type":"string","nullable":true},"topicName":{"type":"string"},"topicState":{"type":"string","nullable":true}},"required":["messageStorageAllowedPersistenceRegions","status","subscriptionLabels","subscriptionPushAttributes","topicLabels","topicName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpPubSub"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessedAt":{"type":"string","nullable":true},"activeMessageCount":{"type":"integer","nullable":true,"minimum":0},"autoDeleteOnIdle":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"deadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"deadLetteringOnMessageExpiration":{"type":"boolean","nullable":true},"defaultMessageTimeToLive":{"type":"string","nullable":true},"duplicateDetectionHistoryTimeWindow":{"type":"string","nullable":true},"enableBatchedOperations":{"type":"boolean","nullable":true},"enableExpress":{"type":"boolean","nullable":true},"enablePartitioning":{"type":"boolean","nullable":true},"endpoint":{"type":"string","nullable":true},"forwardDeadLetteredMessagesTo":{"type":"string","nullable":true},"forwardTo":{"type":"string","nullable":true},"lockDuration":{"type":"string","nullable":true},"maxDeliveryCount":{"type":"integer","nullable":true,"minimum":0},"maxMessageSizeInKilobytes":{"type":"integer","nullable":true,"minimum":0},"maxSizeInMegabytes":{"type":"integer","nullable":true,"minimum":0},"messageCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"namespaceName":{"type":"string"},"queueStatus":{"type":"string","nullable":true},"requiresDuplicateDetection":{"type":"boolean","nullable":true},"requiresSession":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"scheduledMessageCount":{"type":"integer","nullable":true,"minimum":0},"sizeInBytes":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"transferDeadLetterMessageCount":{"type":"integer","nullable":true,"minimum":0},"transferMessageCount":{"type":"integer","nullable":true,"minimum":0},"updatedAt":{"type":"string","nullable":true}},"required":["name","namespaceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureServiceBus"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","nullable":true},"serviceStatus":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["queue"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"billingMode":{"type":"string","nullable":true},"deletionProtectionEnabled":{"type":"boolean","nullable":true},"globalSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"itemCount":{"type":"integer","nullable":true,"minimum":0},"keySchema":{"type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string"},"keyType":{"type":"string"}},"required":["attributeName","keyType"]}},"localSecondaryIndexCount":{"type":"integer","nullable":true,"minimum":0},"name":{"type":"string"},"region":{"type":"string","nullable":true},"replicaCount":{"type":"integer","nullable":true,"minimum":0},"restoreInProgress":{"type":"boolean","nullable":true},"sseStatus":{"type":"string","nullable":true},"sseType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"streamEnabled":{"type":"boolean","nullable":true},"streamViewType":{"type":"string","nullable":true},"tableArn":{"type":"string","nullable":true},"tableClass":{"type":"string","nullable":true},"tableSizeBytes":{"type":"integer","nullable":true,"minimum":0},"tableStatus":{"type":"string","nullable":true},"ttlAttributeName":{"type":"string","nullable":true},"ttlStatus":{"type":"string","nullable":true}},"required":["keySchema","name","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsDynamoDb"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"appEngineIntegrationMode":{"type":"string","nullable":true},"cmekEnabled":{"type":"boolean"},"concurrencyMode":{"type":"string","nullable":true},"createTime":{"type":"string","nullable":true},"databaseEdition":{"type":"string","nullable":true},"databaseName":{"type":"string"},"databaseType":{"type":"string","nullable":true},"deleteProtectionState":{"type":"string","nullable":true},"deleteTime":{"type":"string","nullable":true},"earliestVersionTime":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true},"locationId":{"type":"string","nullable":true},"pointInTimeRecoveryEnablement":{"type":"string","nullable":true},"projectId":{"type":"string","nullable":true},"sourceInfoPresent":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true},"versionRetentionPeriod":{"type":"string","nullable":true}},"required":["cmekEnabled","databaseName","sourceInfoPresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpFirestore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"endpoint":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"signedIdentifierCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"storageAccountKind":{"type":"string","nullable":true},"storageAccountLocation":{"type":"string","nullable":true},"storageAccountName":{"type":"string"},"storageAccountPrimaryStatus":{"type":"string","nullable":true},"storageAccountProvisioningState":{"type":"string","nullable":true},"storageAccountResourceId":{"type":"string","nullable":true},"tableExists":{"type":"boolean"},"tableName":{"type":"string"}},"required":["status","storageAccountName","tableExists","tableName"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureTable"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cloudMetadataSupported":{"type":"boolean"},"isDirectory":{"type":"boolean","nullable":true},"name":{"type":"string"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["cloudMetadataSupported","name","path","pathExists","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["kv"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"clusterIdentifier":{"type":"string"},"endpoint":{"type":"string","nullable":true},"engineVersion":{"type":"string","nullable":true},"neverPauses":{"type":"boolean","description":"True when a `minCapacity: 0` instance has not reached 0 ACU over the observation\nwindow — it is silently paying always-on prices (auto-pause verification)."},"serverlessCapacity":{"type":"number","nullable":true,"description":"Latest sampled `ServerlessDatabaseCapacity` (ACU)."},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["clusterIdentifier","neverPauses","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["aurora"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"databaseVersion":{"type":"string","nullable":true},"instanceName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["instanceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["cloudSql"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"serverName":{"type":"string"},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string","nullable":true}},"required":["serverName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["flexibleServer"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"name":{"type":"string"},"port":{"type":"integer","nullable":true,"minimum":0},"processRunning":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"version":{"type":"string"}},"required":["name","processRunning","status","version"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["postgres"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"accountId":{"type":"string"},"hasMoreParameters":{"type":"boolean","nullable":true},"latestModifiedAt":{"type":"string","nullable":true,"format":"date-time"},"parameterMetadataSampled":{"type":"boolean"},"prefix":{"type":"string"},"region":{"type":"string"},"sampledAdvancedTierCount":{"type":"integer","nullable":true,"minimum":0},"sampledKmsKeyMetadataPresentCount":{"type":"integer","nullable":true,"minimum":0},"sampledParameterCount":{"type":"integer","nullable":true,"minimum":0},"sampledSecureStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringCount":{"type":"integer","nullable":true,"minimum":0},"sampledStringListCount":{"type":"integer","nullable":true,"minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["accountId","parameterMetadataSampled","prefix","region","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsParameterStore"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"location":{"type":"string"},"prefix":{"type":"string"},"projectId":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["location","prefix","projectId","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpSecretManager"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"accessPolicyCount":{"type":"integer","minimum":0},"location":{"type":"string","nullable":true},"name":{"type":"string"},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"purgeProtectionEnabled":{"type":"boolean","nullable":true},"rbacAuthorizationEnabled":{"type":"boolean"},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secretMetadataListed":{"type":"boolean"},"skuFamily":{"type":"string","nullable":true},"skuName":{"type":"string","nullable":true},"softDeleteEnabled":{"type":"boolean"},"softDeleteRetentionDays":{"type":"integer"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vaultUri":{"type":"string","nullable":true}},"required":["accessPolicyCount","name","privateEndpointConnectionCount","publicNetworkAccess","rbacAuthorizationEnabled","secretMetadataListed","softDeleteEnabled","softDeleteRetentionDays","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureKeyVault"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"prefix":{"type":"string"},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","prefix","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesSecret"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"isDirectory":{"type":"boolean","nullable":true},"modifiedAt":{"type":"string","nullable":true,"format":"date-time"},"path":{"type":"string"},"pathExists":{"type":"boolean"},"readonly":{"type":"boolean","nullable":true},"secretMetadataListed":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["path","pathExists","secretMetadataListed","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["vault"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"assumeRolePolicyPresent":{"type":"boolean"},"attachedPolicyCount":{"type":"integer","minimum":0},"attachedPolicyNames":{"type":"array","items":{"type":"string"}},"createDate":{"type":"string"},"description":{"type":"string","nullable":true},"inlinePolicyCount":{"type":"integer","minimum":0},"inlinePolicyNames":{"type":"array","items":{"type":"string"}},"lastUsedDate":{"type":"string","nullable":true},"lastUsedRegion":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"maxSessionDuration":{"type":"integer","nullable":true},"path":{"type":"string"},"permissionsBoundaryArn":{"type":"string","nullable":true},"permissionsBoundaryType":{"type":"string","nullable":true},"roleArn":{"type":"string"},"roleId":{"type":"string"},"roleName":{"type":"string"},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tagCount":{"type":"integer","minimum":0}},"required":["assumeRolePolicyPresent","attachedPolicyCount","attachedPolicyNames","createDate","inlinePolicyCount","inlinePolicyNames","managedTagCount","path","roleArn","roleId","roleName","stackPermissionsApplied","status","tagCount"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"description":{"type":"string","nullable":true},"disabled":{"type":"boolean","nullable":true},"displayName":{"type":"string","nullable":true},"email":{"type":"string"},"etag":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"oauth2ClientId":{"type":"string","nullable":true},"projectBindingCount":{"type":"integer","minimum":0},"projectId":{"type":"string","nullable":true},"projectRoles":{"type":"array","items":{"type":"string"}},"serviceAccountBindingCount":{"type":"integer","minimum":0},"serviceAccountRoles":{"type":"array","items":{"type":"string"}},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"uniqueId":{"type":"string","nullable":true}},"required":["email","projectBindingCount","projectRoles","serviceAccountBindingCount","serviceAccountRoles","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"clientId":{"type":"string","nullable":true},"customRoleDefinitionCount":{"type":"integer","minimum":0},"customRoleDefinitionIds":{"type":"array","items":{"type":"string"}},"isolationScope":{"type":"string","nullable":true},"location":{"type":"string"},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"principalId":{"type":"string","nullable":true},"resourceGroup":{"type":"string"},"resourceId":{"type":"string"},"roleAssignmentCount":{"type":"integer","minimum":0},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"stackPermissionsApplied":{"type":"boolean"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}},"required":["customRoleDefinitionCount","customRoleDefinitionIds","location","managedTagCount","name","resourceGroup","resourceId","roleAssignmentCount","roleAssignmentIds","stackPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"configured":{"type":"boolean"},"identity":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["configured","identity","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service-account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"availabilityZones":{"type":"array","items":{"type":"string"}},"cidrBlock":{"type":"string","nullable":true},"internetGatewayId":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"natGatewayId":{"type":"string","nullable":true},"privateSubnetIds":{"type":"array","items":{"type":"string"}},"publicSubnetIds":{"type":"array","items":{"type":"string"}},"routeTableCount":{"type":"integer","minimum":0},"securityGroupId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vpcId":{"type":"string","nullable":true},"vpcState":{"type":"string","nullable":true}},"required":["availabilityZones","isByoVpc","privateSubnetIds","publicSubnetIds","routeTableCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cidrBlock":{"type":"string","nullable":true},"cloudNatName":{"type":"string","nullable":true},"firewallName":{"type":"string","nullable":true},"isByoVpc":{"type":"boolean"},"networkName":{"type":"string","nullable":true},"networkSelfLink":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"routerName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"subnetworkName":{"type":"string","nullable":true},"subnetworkSelfLink":{"type":"string","nullable":true}},"required":["isByoVpc","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpVpc"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"applicationGatewaySubnetName":{"type":"string","nullable":true},"cidrBlock":{"type":"string","nullable":true},"isByoVnet":{"type":"boolean"},"lastByoVnetVerificationErrorCode":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"natGatewayId":{"type":"string","nullable":true},"nsgId":{"type":"string","nullable":true},"privateEndpointSubnetName":{"type":"string","nullable":true},"privateSubnetName":{"type":"string","nullable":true},"publicIpId":{"type":"string","nullable":true},"publicSubnetName":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"vnetName":{"type":"string","nullable":true},"vnetResourceId":{"type":"string","nullable":true}},"required":["isByoVnet","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureVnet"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["network"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"managementPermissionsApplied":{"type":"boolean"},"roleArn":{"type":"string","nullable":true},"roleName":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managementPermissionsApplied","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsIamRole"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"impersonationGranted":{"type":"boolean"},"roleBound":{"type":"boolean"},"serviceAccountEmail":{"type":"string","nullable":true},"serviceAccountUniqueId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["impersonationGranted","roleBound","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceAccount"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"ficName":{"type":"string","nullable":true},"roleAssignmentIds":{"type":"array","items":{"type":"string"}},"roleDefinitionId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"tenantId":{"type":"string","nullable":true},"uamiClientId":{"type":"string","nullable":true},"uamiPrincipalId":{"type":"string","nullable":true},"uamiResourceId":{"type":"string","nullable":true}},"required":["roleAssignmentIds","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureManagedIdentity"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["remote-stack-management"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"pullRoleArn":{"type":"string","nullable":true},"pushRoleArn":{"type":"string","nullable":true},"region":{"type":"string"},"registryId":{"type":"string"},"registryUri":{"type":"string"},"repositories":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"encryptionType":{"type":"string","nullable":true},"imageTagMutability":{"type":"string","nullable":true},"kmsKeyPresent":{"type":"boolean"},"registryId":{"type":"string"},"repositoryArn":{"type":"string"},"repositoryName":{"type":"string"},"repositoryUri":{"type":"string"},"scanOnPush":{"type":"boolean","nullable":true}},"required":["createdAt","kmsKeyPresent","registryId","repositoryArn","repositoryName","repositoryUri"]}},"repositoriesTruncated":{"type":"boolean"},"repositoryCount":{"type":"integer","minimum":0},"repositoryPrefix":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["region","registryId","registryUri","repositories","repositoriesTruncated","repositoryCount","repositoryPrefix","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsEcr"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"cleanupPolicyCount":{"type":"integer","minimum":0},"cleanupPolicyDryRun":{"type":"boolean","nullable":true},"createTime":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true},"iamBindingCount":{"type":"integer","minimum":0},"iamPolicyEtagPresent":{"type":"boolean"},"iamRoles":{"type":"array","items":{"type":"string"}},"kmsKeyNamePresent":{"type":"boolean"},"labelCount":{"type":"integer","minimum":0},"location":{"type":"string"},"mode":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"projectId":{"type":"string"},"pullServiceAccountEmail":{"type":"string","nullable":true},"pushServiceAccountEmail":{"type":"string","nullable":true},"repositoryId":{"type":"string"},"satisfiesPzs":{"type":"boolean","nullable":true},"sizeBytes":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updateTime":{"type":"string","nullable":true}},"required":["cleanupPolicyCount","iamBindingCount","iamPolicyEtagPresent","iamRoles","kmsKeyNamePresent","labelCount","location","projectId","repositoryId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpArtifactRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"adminUserEnabled":{"type":"boolean"},"anonymousPullEnabled":{"type":"boolean"},"creationDate":{"type":"string","nullable":true},"dataEndpointEnabled":{"type":"boolean","nullable":true},"dataEndpointHostNames":{"type":"array","items":{"type":"string"}},"encryptionKeyIdentifierPresent":{"type":"boolean"},"encryptionKeyVaultUriPresent":{"type":"boolean"},"encryptionStatus":{"type":"string","nullable":true},"ipRuleCount":{"type":"integer","minimum":0},"location":{"type":"string"},"loginServer":{"type":"string","nullable":true},"managedTagCount":{"type":"integer","minimum":0},"name":{"type":"string"},"networkRuleBypassOptions":{"type":"string"},"networkRuleDefaultAction":{"type":"string","nullable":true},"policiesPresent":{"type":"boolean"},"policyCount":{"type":"integer","minimum":0},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string"},"resourceGroup":{"type":"string"},"resourceId":{"type":"string","nullable":true},"skuName":{"type":"string"},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"type":{"type":"string","nullable":true},"zoneRedundancy":{"type":"string"}},"required":["adminUserEnabled","anonymousPullEnabled","dataEndpointHostNames","encryptionKeyIdentifierPresent","encryptionKeyVaultUriPresent","ipRuleCount","location","managedTagCount","name","networkRuleBypassOptions","policiesPresent","policyCount","privateEndpointConnectionCount","publicNetworkAccess","resourceGroup","skuName","status","zoneRedundancy"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerRegistry"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"reachable":{"type":"boolean"},"registryUrl":{"type":"string"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["reachable","registryUrl","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["local"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["artifact-registry"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"artifactsEncryptionDisabled":{"type":"boolean","nullable":true},"artifactsType":{"type":"string","nullable":true},"cloudWatchLogsStatus":{"type":"string","nullable":true},"computeType":{"type":"string","nullable":true},"created":{"type":"number","nullable":true},"description":{"type":"string","nullable":true},"encryptionKeyPresent":{"type":"boolean"},"environmentImage":{"type":"string","nullable":true},"environmentType":{"type":"string","nullable":true},"environmentVariableCount":{"type":"integer","minimum":0},"imagePullCredentialsType":{"type":"string","nullable":true},"lastModified":{"type":"number","nullable":true},"privilegedMode":{"type":"boolean","nullable":true},"projectArn":{"type":"string","nullable":true},"projectName":{"type":"string"},"queuedTimeoutInMinutes":{"type":"integer","nullable":true},"s3LogsStatus":{"type":"string","nullable":true},"serviceRolePresent":{"type":"boolean"},"sourceType":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"timeoutInMinutes":{"type":"integer","nullable":true}},"required":["encryptionKeyPresent","environmentVariableCount","projectName","serviceRolePresent","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["awsCodeBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"buildConfigId":{"type":"string"},"environmentVariableCount":{"type":"integer","minimum":0},"location":{"type":"string"},"projectId":{"type":"string"},"serviceAccount":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["buildConfigId","environmentVariableCount","location","projectId","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpCloudBuild"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"environmentVariableCount":{"type":"integer","minimum":0},"managedEnvironmentId":{"type":"string"},"managedIdentityId":{"type":"string","nullable":true},"resourceGroupName":{"type":"string"},"resourcePrefix":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["environmentVariableCount","managedEnvironmentId","resourceGroupName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureContainerApps"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"active":{"type":"integer","nullable":true},"completionTime":{"type":"string","nullable":true,"format":"date-time"},"conditionCount":{"type":"integer","minimum":0},"events":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","nullable":true},"eventTime":{"type":"string","nullable":true,"format":"date-time"},"firstTimestamp":{"type":"string","nullable":true,"format":"date-time"},"involvedObject":{"oneOf":[{"type":"object","properties":{"apiVersion":{"type":"string","nullable":true},"fieldPath":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"namespace":{"type":"string","nullable":true},"resourceVersion":{"type":"string","nullable":true},"uid":{"type":"string","nullable":true}}},{"nullable":true}]},"lastTimestamp":{"type":"string","nullable":true,"format":"date-time"},"message":{"type":"string"},"raw":{"oneOf":[{"nullable":true},{"nullable":true}]},"reason":{"type":"string"},"source":{"oneOf":[{"type":"object","properties":{"component":{"type":"string","nullable":true},"host":{"type":"string","nullable":true}}},{"nullable":true}]},"type":{"type":"string","nullable":true}},"required":["message","reason"]}},"failed":{"type":"integer","nullable":true},"imageDigest":{"type":"string","nullable":true},"jobName":{"type":"string"},"namespace":{"type":"string"},"startTime":{"type":"string","nullable":true,"format":"date-time"},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"succeeded":{"type":"integer","nullable":true}},"required":["conditionCount","events","jobName","namespace","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["kubernetesJob"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["build"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"oneOf":[{"allOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"lastOperationName":{"type":"string","nullable":true},"projectId":{"type":"string"},"serviceName":{"type":"string"},"serviceResourceName":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"title":{"type":"string","nullable":true}},"required":["enabled","projectId","serviceName","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["gcpServiceUsage"]}},"required":["backend"]}]},{"allOf":[{"type":"object","properties":{"namespace":{"type":"string"},"providerId":{"type":"string","nullable":true},"registered":{"type":"boolean"},"registrationPolicy":{"type":"string","nullable":true},"registrationState":{"type":"string","nullable":true},"resourceTypeCount":{"type":"integer","minimum":0},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["namespace","registered","resourceTypeCount","status"]},{"type":"object","properties":{"backend":{"type":"string","enum":["azureResourceProvider"]}},"required":["backend"]}]}]},"resourceType":{"type":"string","enum":["service_activation"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"location":{"type":"string","nullable":true},"managedTags":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]}},"required":["managedTags","name","status"]},"resourceType":{"type":"string","enum":["azure_resource_group"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"allowBlobPublicAccess":{"type":"boolean","nullable":true},"allowSharedKeyAccess":{"type":"boolean","nullable":true},"encryptionKeySource":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"networkBypass":{"type":"string","nullable":true},"networkDefaultAction":{"type":"string","nullable":true},"networkIpRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkResourceAccessRuleCount":{"type":"integer","nullable":true,"minimum":0},"networkVirtualNetworkRuleCount":{"type":"integer","nullable":true,"minimum":0},"primaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"requireInfrastructureEncryption":{"type":"boolean","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"secondaryEndpoints":{"type":"object","properties":{"blob":{"type":"string","nullable":true},"dfs":{"type":"string","nullable":true},"file":{"type":"string","nullable":true},"queue":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"web":{"type":"string","nullable":true}}},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"supportsHttpsTrafficOnly":{"type":"boolean","nullable":true}},"required":["name","primaryEndpoints","secondaryEndpoints","status"]},"resourceType":{"type":"string","enum":["azure_storage_account"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"customDomainVerificationId":{"type":"string","nullable":true},"defaultDomain":{"type":"string","nullable":true},"eventStreamEndpoint":{"type":"string","nullable":true},"infrastructureResourceGroup":{"type":"string","nullable":true},"kind":{"type":"string","nullable":true},"location":{"type":"string","nullable":true},"name":{"type":"string"},"provisioningState":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"staticIp":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"workloadProfileCount":{"type":"integer","minimum":0},"workloadProfiles":{"type":"array","items":{"type":"object","properties":{"maximumCount":{"type":"integer","nullable":true},"minimumCount":{"type":"integer","nullable":true},"name":{"type":"string"},"workloadProfileType":{"type":"string"}},"required":["name","workloadProfileType"]}},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","status","workloadProfileCount","workloadProfiles"]},"resourceType":{"type":"string","enum":["azure_container_apps_environment"]}},"required":["data","resourceType"]},{"type":"object","properties":{"data":{"type":"object","properties":{"createdAt":{"type":"string","nullable":true},"disableLocalAuth":{"type":"boolean","nullable":true},"location":{"type":"string","nullable":true},"metricId":{"type":"string","nullable":true},"minimumTlsVersion":{"type":"string","nullable":true},"name":{"type":"string"},"namespaceStatus":{"type":"string","nullable":true},"premiumMessagingPartitions":{"type":"integer","nullable":true},"privateEndpointConnectionCount":{"type":"integer","minimum":0},"provisioningState":{"type":"string","nullable":true},"publicNetworkAccess":{"type":"string","nullable":true},"resourceGroup":{"type":"string","nullable":true},"resourceId":{"type":"string","nullable":true},"serviceBusEndpoint":{"type":"string","nullable":true},"skuCapacity":{"type":"integer","nullable":true},"skuName":{"type":"string","nullable":true},"skuTier":{"type":"string","nullable":true},"status":{"type":"object","properties":{"collectionIssues":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"reason":{"type":"string","enum":["forbidden","not-installed","api-unavailable","collection-failed","timed-out"]},"severity":{"type":"string","enum":["info","warning","error"]},"source":{"type":"string"}},"required":["message","reason","severity","source"]}},"health":{"type":"string","enum":["unknown","healthy","degraded","unhealthy"]},"lifecycle":{"type":"string","enum":["unknown","creating","updating","running","scaling","stopping","stopped","deleting","deleted","failed"]},"message":{"type":"string","nullable":true},"partial":{"type":"boolean"},"stale":{"type":"boolean"}},"required":["collectionIssues","health","lifecycle","partial","stale"]},"updatedAt":{"type":"string","nullable":true},"zoneRedundant":{"type":"boolean","nullable":true}},"required":["name","privateEndpointConnectionCount","status"]},"resourceType":{"type":"string","enum":["azure_service_bus_namespace"]}},"required":["data","resourceType"]}]},"deploymentId":{"type":"string","nullable":true},"observedAt":{"type":"string","format":"date-time"},"raw":{"type":"array","items":{"type":"object","properties":{"body":{"type":"string"},"collectedAt":{"type":"string","format":"date-time"},"format":{"type":"string","enum":["json","yaml","text"]},"source":{"type":"string"},"truncated":{"type":"boolean"}},"required":["body","collectedAt","format","source","truncated"]}},"resourceId":{"type":"string","description":"Alien resource id, such as the `alien.Container` or `alien.Storage`\nresource id from the stack."},"resourceType":{"type":"string","description":"Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior."}},"required":["backend","controllerPlatform","data","observedAt","raw","resourceId","resourceType"]},"raw":{"type":"array","items":{"nullable":true}}},"required":["status","deploymentId","resourceId","resourceType","backend","controllerPlatform","observedAt","staleAt","platformStale","heartbeat","raw"]},{"type":"object","properties":{"status":{"type":"string","enum":["missing"]},"deploymentId":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string"}},"required":["status","deploymentId","resourceId","resourceType"]}]}},"required":["deployment","heartbeat"]}}}},"404":{"description":"Deployment or resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/resolve":{"get":{"operationId":"resolve","tags":["resolve"],"summary":"Resolve manager for a project and platform","description":"Returns the manager URL for a given project and platform. The project can be provided as a query parameter, or derived from the token's scope (project-scoped, deployment-group-scoped, or deployment-scoped tokens carry an implicit project). This is the single entry point for all CLI tools to discover which manager to talk to.","x-speakeasy-group":"resolve","x-speakeasy-name-override":"resolve","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"string","enum":["aws","gcp","azure","kubernetes","machines","local","test"],"description":"Target platform to resolve the manager for"},"required":true,"description":"Target platform to resolve the manager for","name":"platform","in":"query"},{"schema":{"type":"string","maxLength":100,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope)."},"required":false,"description":"Project ID or name. Required for user and workspace-scoped tokens. Optional for project/deployment-group/deployment-scoped tokens (derived from token scope).","name":"project","in":"query"}],"responses":{"200":{"description":"Manager resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"description":"Missing required project parameter for this token type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"404":{"description":"Project not found or no manager available for platform.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}},"503":{"description":"Manager not ready yet (no URL reported). Retry after a delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}},"/v1/cloud-regions":{"get":{"operationId":"getCloudRegions","description":"Get cloud regions supported by this Alien environment.","x-speakeasy-group":"cloudRegions","x-speakeasy-name-override":"get","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Supported cloud regions retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudRegionsResponse"}}}}}}},"/v1/billing/audit-log":{"get":{"operationId":"listBillingAuditLog","description":"List billing activity entries for the current workspace.","x-speakeasy-group":"billing","x-speakeasy-name-override":"listAuditLog","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor: id from the previous page."},"required":false,"description":"Cursor: id from the previous page.","name":"before","in":"query"}],"responses":{"200":{"description":"Audit-log rows newest-first.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingAuditLogRow"}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"]}}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"getWorkspaceBillingEntitlements","description":"Get the workspace billing entitlements used for product feature gates. Autumn is the source of truth; the response is served through the workspace billing read model with stale-cache fallback.","x-speakeasy-group":"billing","x-speakeasy-name-override":"getEntitlements","parameters":[{"schema":{"type":"string","minLength":4,"maxLength":100,"pattern":"^(?!ws[-_])[a-z0-9](-?[a-z0-9])*$","description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","example":"my-workspace"},"required":false,"description":"Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace.","name":"workspace","in":"query"}],"responses":{"200":{"description":"Workspace billing entitlements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBillingEntitlements"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}}}}}} \ No newline at end of file diff --git a/client-sdks/platform/typescript/.speakeasy/gen.lock b/client-sdks/platform/typescript/.speakeasy/gen.lock index 1257c7c52..95b625d47 100644 --- a/client-sdks/platform/typescript/.speakeasy/gen.lock +++ b/client-sdks/platform/typescript/.speakeasy/gen.lock @@ -1,16 +1,16 @@ lockVersion: 2.0.0 id: bc51eaa5-3f88-4290-b64f-cae16746dd5d management: - docChecksum: 00107cedc4334c3871e5d334c2b0a914 + docChecksum: fa83d7ffb20f780ca89929fdf51a778c docVersion: 1.0.0 speakeasyVersion: 1.680.11 generationVersion: 2.788.15 - releaseVersion: 1.14.3 - configChecksum: 63869a3d2a5d56230cef83f771a82d02 + releaseVersion: 2.1.6 + configChecksum: 6fdea7b3a89bccf84927d8d5812d85e5 persistentEdits: - generation_id: db6ac3e5-6bcc-4de5-a81f-eb659048385d - pristine_commit_hash: 13c44a72093f4387918cbb07b6c85d4fbfa92cc6 - pristine_tree_hash: b43f17ffd143169ed023f7826397d8886ee4459a + generation_id: 07c34e70-7bb3-45df-b613-d8e0d4dc38ad + pristine_commit_hash: d16da2567e9465fcaf2fd2fbc782ace660456370 + pristine_tree_hash: cac2f3f2179198abececf76687eb6671770a8a19 features: typescript: additionalDependencies: 0.1.0 @@ -56,20 +56,24 @@ trackedFiles: pristine_git_object: cf98a6bf092538eb10ff0edc915102682ce9a6e6 FUNCTIONS.md: id: 21b9df02aaeb - last_write_checksum: sha1:ab2b06c33898806991c52b65abe91e2646e37cbd - pristine_git_object: 2f62253f5bf4f2ea763bd876093cbfbddd1d1e82 + last_write_checksum: sha1:67cc398afb6ef4f884ed5057d3e077a483edcf33 + pristine_git_object: c7ad6a3f2985cfc73fc0853e4e0353a71956f7af RUNTIMES.md: id: 620c490847b6 last_write_checksum: sha1:e45b854f02c357cbcfdb8c3663000e8339e16505 pristine_git_object: 27731c3b5ace66bedc454ed5acbe15075aacd3dc USAGE.md: id: 3aed33ce6e6f - last_write_checksum: sha1:fe52152d4f3b3c1f28811e59dc980986f2b0d069 - pristine_git_object: 662dae6d1d60e71ad8179bdfbe4311d2548a01fd + last_write_checksum: sha1:d620c7e234c18bcdb50b903c73f1f23e8d665fd3 + pristine_git_object: 1ca44538383e0dd818935c480cbd164fb10bb63f docs/lib/utils/retryconfig.md: id: 0ce9707cb848 last_write_checksum: sha1:bc4454e196fcd219f5a78da690375a884f5ed07b pristine_git_object: 08f95f4552349360b2c0b01802aa71ec3a55d2c2 + docs/models/acceptworkspaceinvitationresponse.md: + id: b69abb0f6c16 + last_write_checksum: sha1:f6d5f3fff7349c7f09f26059eec2f46e93f02ec4 + pristine_git_object: bb8313c247bb6f03e77886491d32ff9c7e8ddf0d docs/models/acquiremode.md: id: 2da2ba33bf92 last_write_checksum: sha1:98645df55f0ce0c869d15b4da92bb5b6121e5bb4 @@ -78,14 +82,122 @@ trackedFiles: id: 8334265c22b7 last_write_checksum: sha1:ba9619bd55828ba54a5df057af093ebd804e9c87 pristine_git_object: 0c79a99c40f36b1af14cafb0772f94d03eda20a0 - docs/models/actor1.md: - last_write_checksum: sha1:bf623ff81028fd9d927beb267200936f7cededd3 - docs/models/actor2.md: - last_write_checksum: sha1:4839fe1be0a5fb30d846ae66359473a2fa1501c5 - docs/models/actorunion1.md: - last_write_checksum: sha1:766370184186d4162137336ff1ebd84640042df0 - docs/models/actorunion2.md: - last_write_checksum: sha1:1341324a1c15ff23f787ba2212475a072d2579b4 + docs/models/agentsessionapprovalgrantedevent.md: + id: 94a488c190c7 + last_write_checksum: sha1:7f3e0614c3d86f54e063bfa1533c60cb6d1bcdaa + pristine_git_object: 6d70e005aaa097fbb4f766e433627e3fcdcb9d94 + docs/models/agentsessionapprovalgrantedeventpayload.md: + id: a23fe5c45ce5 + last_write_checksum: sha1:445dff9c9533cbbb8f75e3c01d6307c9a6366fd1 + pristine_git_object: 66a9cbb9518af4c35f05ffca956800b8134e201e + docs/models/agentsessionapprovalrequestedevent.md: + id: 167c170c6acd + last_write_checksum: sha1:bf1baf83d369a6b7eb269b7f0eee65babe6ffc5f + pristine_git_object: dd49cd7c46fcc85a6fba2b4126927d4661a11455 + docs/models/agentsessionapprovalrequestedeventpayload.md: + id: a830c43ea619 + last_write_checksum: sha1:55a0197d3fe013946ff59d9c0be0905c492a9070 + pristine_git_object: aba8134dfc8e25a232026275d68d850d93eb2056 + docs/models/agentsessionapproveresponse.md: + id: e4565e48c7f4 + last_write_checksum: sha1:641557884e281688574b35a9a44dd83901c5f694 + pristine_git_object: 0ceb3fe6fedc83fc4755a66de7f97a43381fe66e + docs/models/agentsessiondetail.md: + id: d6ca25d82be3 + last_write_checksum: sha1:03049e62f4f00d63e68a0a7f358ffb5a28fdb414 + pristine_git_object: 1ab130c569ec3916055734e2f0485943460128eb + docs/models/agentsessionevent.md: + id: 74624d85369a + last_write_checksum: sha1:c307f967f50eb509ebdb020e30531f1df914de60 + pristine_git_object: bbc6f0eeca710c97614cd9103c84fc8e1a8c8240 + docs/models/agentsessioneventsresponse.md: + id: 8b29de9e01e5 + last_write_checksum: sha1:80050104519f37e39dd93e3fa9564c95e1d6fe09 + pristine_git_object: 8caafcfbc0ac81bbc92a6119baa14b4569318106 + docs/models/agentsessioneventstruncatedevent.md: + id: f5b36673fe4f + last_write_checksum: sha1:2b2a7b91b51a4ccd4e5e08eeb6f1ab068d4e5e21 + pristine_git_object: 94ed9cb7f6b155485215bb1f3ac43f560e003f50 + docs/models/agentsessioneventstruncatedeventpayload.md: + id: 9381bf4a6c57 + last_write_checksum: sha1:01e4826d7baf208c506fd29bc72e07b66df21480 + pristine_git_object: be3f07ef5b0b2678a6c43d827f837aa2fe5da3d2 + docs/models/agentsessionlistitem.md: + id: 0bca49a346b3 + last_write_checksum: sha1:12c8f7eb482cf584e38189437b1e249f4243198b + pristine_git_object: ff3feee8efb5660c9c50fddb0fa8838ef0e06ac1 + docs/models/agentsessionlistresponse.md: + id: ad9acccb37a8 + last_write_checksum: sha1:01adec9b321d97e5cfbb6e8c6fbb5902b6a619d7 + pristine_git_object: ea98e76c3a52a3aa0904caab40bd05cab6e6b13a + docs/models/agentsessionmarkdownevent.md: + id: 33e56256177a + last_write_checksum: sha1:01aaad731fe9d00cb777c237d1de9cb77a8c4512 + pristine_git_object: 2d7ce604ce1897e98398a09319852f2133b8c619 + docs/models/agentsessionmarkdowneventpayload.md: + id: 6c63fe06a1c8 + last_write_checksum: sha1:b41e9da1411a6d4bad09ea3ab6fcf131a8797f58 + pristine_git_object: a4207a7f6efd2306b6ff4d6c205b267dc35bbccb + docs/models/agentsessionrestartedevent.md: + id: 35c2e8a289d3 + last_write_checksum: sha1:735440ce80877e7e44dce35a01b1592a0301ba8c + pristine_git_object: 387820f486153c3d3568b714aa184cc233d914c7 + docs/models/agentsessionrestartedeventpayload.md: + id: 5db0e11b6fbf + last_write_checksum: sha1:01db84f0841c7b494b853079a09888e12843aadd + pristine_git_object: f7a257a4d526df103f36c108b14f347df093cd51 + docs/models/agentsessionstatusevent.md: + id: d5920109eef6 + last_write_checksum: sha1:a35aa20d74be6f06f4102215c9d9c13173f20834 + pristine_git_object: b05fe9454526d07ae2e84b7693cc1c7ebf16ae9b + docs/models/agentsessionstatuseventpayload.md: + id: d6d768aa518c + last_write_checksum: sha1:9a2c9ca3fb833458180f18330a7883a11b260671 + pristine_git_object: 70f8e5b7e72a8b4827f4bc9b4755496224419c20 + docs/models/agentsessionstepevent.md: + id: 7943f3a38ca5 + last_write_checksum: sha1:9bc89ed07dbbe8ab9479e503387145af5654d664 + pristine_git_object: cae0becaa573294522824b19902378fa8e54eb04 + docs/models/agentsessionstepeventpayload.md: + id: 7a2d327051df + last_write_checksum: sha1:0461c91c97657e5d5de804970e0f8c756a4dfdcc + pristine_git_object: f7896a579c2c774dbdf25a904e312a2bd457080e + docs/models/agentsessionstepeventstatus.md: + id: 8af7c439328d + last_write_checksum: sha1:2bfccd5713f1b45ac49a07aa2bf25a5ac975461c + pristine_git_object: c21dc6ae3c8cb317a02e9567b9e884a5af5037fe + docs/models/agentsessionstopresponse.md: + id: e01031cc4ab5 + last_write_checksum: sha1:e2a16a4baabb7c1c081c9c193b4d15c4bc3e6e85 + pristine_git_object: 4608ea91af9302ea7bc421fe4106ada7437bf2f9 + docs/models/agentsessionsubject.md: + id: ced80b3134a8 + last_write_checksum: sha1:3cc734a0d113e1d6eb6661eca62ed321c5efcb3b + pristine_git_object: 8f2b81dbc3745b8874cee779e0792f7526905abf + docs/models/agentsessiontoolcallevent.md: + id: a2499e1ba6c9 + last_write_checksum: sha1:96fbd75d87915809f6d9eb7d295750014f89572c + pristine_git_object: a3a8e42dd7e03d2afa1022b0bf2d1c2245431842 + docs/models/agentsessiontoolcalleventpayload.md: + id: 2c586ee8c6da + last_write_checksum: sha1:cc17c9fb475716a4e683119b7d000adc3c8fb7f5 + pristine_git_object: 8b705a476664b118a1738f2245751191150b3a02 + docs/models/agentsessiontoolresultevent.md: + id: 5642f5f6a784 + last_write_checksum: sha1:a733bd0d4e8575ee03ba5e702e3b55e67b38754e + pristine_git_object: 998b07933a3e3fe5d86f6afab87e1a0d18f7d1c9 + docs/models/agentsessiontoolresulteventpayload.md: + id: 92b5478ddb48 + last_write_checksum: sha1:d67d3f048d42c8024606dcdc2943fbd7153694fa + pristine_git_object: 868b957373353830e90e35520537ff3c935eb225 + docs/models/agentsettings.md: + id: f3fdbd4f30f7 + last_write_checksum: sha1:ce5de71907b72e60ac85e7cb9b26df83ae4da3f3 + pristine_git_object: 2394f0bd1b827476bfad2d8a5baf22cf4e3b9733 + docs/models/agentsettingsdebugpermissionmode.md: + id: 5755fb76d699 + last_write_checksum: sha1:ecea287ae4bd4eb85acf5a0d634a9465c481dfb7 + pristine_git_object: 8837d7766891c9d8d530717b5daff515a4598120 docs/models/allocatable.md: id: f5e4ed9861ea last_write_checksum: sha1:57e689252e391d47f3d94ef7e87c95c1f13cb24f @@ -132,12 +244,12 @@ trackedFiles: pristine_git_object: 384ee37f3879db1819d585ad6bb8702c8c3fb77d docs/models/apikey.md: id: 3cd1b4235d4f - last_write_checksum: sha1:1fd3969add312c09614f4f96e1cf62170780c204 - pristine_git_object: e81bb271ba1e9235dc56d3b78b0b636d1fb9063d + last_write_checksum: sha1:e666419dad56024769df2533e900ae371e695d55 + pristine_git_object: 74f07bc607af5b0d745f5ec51c40e47c7cae0138 docs/models/apikeydeploymentsetupconfig.md: id: 94e948d4277d - last_write_checksum: sha1:e6907825e541da0f67c0f237d6743bee58f5cf8e - pristine_git_object: 225b98c318b4a9c5c49506edfb4bf236e7852ef1 + last_write_checksum: sha1:cdc25c4b655512ed2e1660b8dbc4f7b8b93f697a + pristine_git_object: 0e8c086f60ff0e1b51266d627602c7dcc98f2065 docs/models/apikeydeploymentsetupenvironmentvariable.md: id: c70b47f3747b last_write_checksum: sha1:89f528544b787581513fca341123a65770fec18d @@ -187,7 +299,9 @@ trackedFiles: last_write_checksum: sha1:7e51bd175aea71babdaab475cf4dee5252533451 pristine_git_object: 63003c959639415571049440ac4064aa60ee8a2a docs/models/buildphase.md: + id: a6ca36688c39 last_write_checksum: sha1:e5e2e979bd69fa37e8dade60e41909ffc8e9f0f2 + pristine_git_object: 3033694d13c83732e75adb07977d03ae2e022b0c docs/models/cancelmachinesmachinedrainresponse.md: id: 0d40d8090a0f last_write_checksum: sha1:d92fe2d1b4ab038a644d23bc6d49e51e611e4874 @@ -427,7 +541,7 @@ trackedFiles: docs/models/configcli.md: id: f2a93fd8d093 last_write_checksum: sha1:85add425e5820b0ecbfa30193b9d72b4ae615ac2 - pristine_git_object: a976815812581a2566d13b05287d4eb50593d03f + pristine_git_object: 99264098bf9294c68c13005fed27ca32bde5b516 docs/models/configcloudformation.md: id: 0bc9db769bdb last_write_checksum: sha1:7cce7c1b5d8252706419931dab40cb516f02af2c @@ -710,8 +824,8 @@ trackedFiles: pristine_git_object: fb419607eddc72c62487fe371f773d47443cb0e2 docs/models/createapikeyresponse.md: id: 996065c0a0a7 - last_write_checksum: sha1:ebacec95b1644ee5623fadeeb247ae9f0bf16d6c - pristine_git_object: 33a675c3efc193380afc87185f83d0c8810cb914 + last_write_checksum: sha1:e713189646fe8467629624698145a7ceef76e100 + pristine_git_object: 7050f4c867a5bed1ec8183dfcbe5a8643ba28069 docs/models/createapikeyresponsetype.md: id: 4e3b885278af last_write_checksum: sha1:c6bd4dc595a507f10c9d285958c961298348d814 @@ -746,16 +860,16 @@ trackedFiles: pristine_git_object: 2e5660db72b58d3d3553084205334f9937d7f7cc docs/models/createdebugsessionrequest.md: id: dfe257db6196 - last_write_checksum: sha1:5ec05c11586f82eca99ed6918560e02112bc6771 - pristine_git_object: 5e650afd873b87c30698dc25391cf1b696bb25d6 + last_write_checksum: sha1:a67dc9f71ac76d087b812bb6482d5cbc08794571 + pristine_git_object: 0d36ddc9ed8ea35861cd41e76d2a965bce32bda4 docs/models/createdeploymentgrouprequest.md: id: c766039a815c last_write_checksum: sha1:2bc9cc02abd2b3f0addeb7abbb3ce0b6994697c1 pristine_git_object: d8c4c8a1a07fd40184460fca5dbfc23f4793005e docs/models/createdeploymentgrouptokenrequest.md: id: 6a628edd53de - last_write_checksum: sha1:eca2e9f66912f4ada328a7ebffbf972dced8911b - pristine_git_object: 0a0b12f140126dde52d3de6458f8795acc342097 + last_write_checksum: sha1:f61aa4fc0086cddcd8c440eb082ea42b8dfd3370 + pristine_git_object: d3a8ae89a98f9c84c489ce61318ec512f4ef9090 docs/models/createdeploymentgrouptokenresponse.md: id: eeac48f28c45 last_write_checksum: sha1:a90829fd19e6a1383c83c5a3fcede7e4295c7656 @@ -786,8 +900,8 @@ trackedFiles: pristine_git_object: a4f55cf55ca190a6cc661a37ed934bfbf26b2de4 docs/models/createmanagerresponse.md: id: 0a11154b47da - last_write_checksum: sha1:2e7f061ea5ce06b7f601c574b35e0128bb713072 - pristine_git_object: f87e7633ac6b6473514a59f63ecfc711ebbc90db + last_write_checksum: sha1:0b37d8b2adc41fe3ff147ae09fa661a27afc4e37 + pristine_git_object: 1248f1067f4093fdd74ea2b2374412be02281f43 docs/models/createmanagerresponseaws1.md: id: 5755836d97fd last_write_checksum: sha1:94cd7279402cb76472768bd18584fc9ad08e4f34 @@ -1204,6 +1318,54 @@ trackedFiles: id: 51df42a7ca56 last_write_checksum: sha1:5f8d3077353b97a38d90820cd751e73beafff70b pristine_git_object: bd665b6a1aa916b6d2129c86fd7c76d605b32405 + docs/models/createmanagerresponsefailuredomains1.md: + id: 41e201b7e25d + last_write_checksum: sha1:942f6ee4949b2a491fe472204075f284c9f31962 + pristine_git_object: b1ff658d8c045f9a7a45ef4f93747cbe401973d5 + docs/models/createmanagerresponsefailuredomains2.md: + id: e6c9ffd88232 + last_write_checksum: sha1:5ab6471cfab979ddb0f234e0caa37059f941bc57 + pristine_git_object: 4e8064e5cb632101d5f7792033ce324d95d0023a + docs/models/createmanagerresponsefailuredomains3.md: + id: 1ef04871958a + last_write_checksum: sha1:908fc54b5d0ad2db482ff260ea478d00f68bea5a + pristine_git_object: c0814d1822e6c48e7a08e83015ee7c2fc2f029f7 + docs/models/createmanagerresponsefailuredomains4.md: + id: f3afb197dded + last_write_checksum: sha1:dd794d26123b54f09433038718cbd2125d0573b8 + pristine_git_object: 3e7210033024a39d4cee34def8278c20286f8e17 + docs/models/createmanagerresponsefailuredomains5.md: + id: 61b1e8cb18eb + last_write_checksum: sha1:2512ae64739dcb4b5ae93bcbfa7f5765da1ee14e + pristine_git_object: 8d70aa541ff8fb3f677578160a70be73b51f57a0 + docs/models/createmanagerresponsefailuredomains6.md: + id: 5176124266f4 + last_write_checksum: sha1:75ae039b3d0eccdca27524b6e1fe3e35ab1c4605 + pristine_git_object: 8ac9014933fd7080046ca14ab9b8b406f1f40ef8 + docs/models/createmanagerresponsefailuredomainsunion1.md: + id: 0ca6075c6c04 + last_write_checksum: sha1:045e34f5da371ee4e1dca6a6dcaa0e1a350c3c26 + pristine_git_object: 7c2a18ba3a3152cc06cb13d353a155c548c4e451 + docs/models/createmanagerresponsefailuredomainsunion2.md: + id: 6ca4b426b2bb + last_write_checksum: sha1:cf01b5d87c5c18ad65f23b2360f23f7c9f6bd96e + pristine_git_object: 88bc9aed5e8735ae187bc99e07e203ded7b788d2 + docs/models/createmanagerresponsefailuredomainsunion3.md: + id: 461c0c91179b + last_write_checksum: sha1:9dfd64464ba2a1729f19d4022ed8bcb4ccc8403f + pristine_git_object: 32d31535b9f734cff450137510114b4747379d9d + docs/models/createmanagerresponsefailuredomainsunion4.md: + id: bc097921adec + last_write_checksum: sha1:3a32593d17c56759606bf988030e3bc9c5b76a96 + pristine_git_object: af9a8a8af4ef4528c138112cbb5700cb99d72867 + docs/models/createmanagerresponsefailuredomainsunion5.md: + id: 3ccedcc48bab + last_write_checksum: sha1:a14d3ed6725b0fde2b12b1ef51e4d7829487347b + pristine_git_object: 78efc0500319bd8760694716203542dcd0dc8301 + docs/models/createmanagerresponsefailuredomainsunion6.md: + id: 15ee78b5e23e + last_write_checksum: sha1:948dc4dbac53ff5b29a485d3378a846f40153e16 + pristine_git_object: cfc4261b6ae86292edefd52bf352c747f3a38296 docs/models/createmanagerresponsegcp1.md: id: eb22a80b3824 last_write_checksum: sha1:5eddafb4c9686069fbd0ba5dfd819a7cd0fe6542 @@ -1410,28 +1572,28 @@ trackedFiles: pristine_git_object: 14c78dedfe2c01baab18da282a00bef00e64f1f5 docs/models/createmanagerresponsepoolsautoscale1.md: id: 7e4b16fc9837 - last_write_checksum: sha1:b770a769f6a3e84feca0770a93e1d50ab78a8d81 - pristine_git_object: cb1ecb7c35583e407b93d96ca2dd56e9a5af33ba + last_write_checksum: sha1:cce919accaff4c80b69fdf6ffd14f8057427b3e8 + pristine_git_object: 6734d07087fa21383b17df3612a85ddf35367011 docs/models/createmanagerresponsepoolsautoscale2.md: id: 20092f13dd60 - last_write_checksum: sha1:6027be9498dfc61a66e86b79bdcf041b19b7606a - pristine_git_object: f7f0d20316e564ba550d0e8d810697cc643a25d0 + last_write_checksum: sha1:688b4f1acd9d19d2704f51acdb5d40c553569b9d + pristine_git_object: 7475249245cfb7acb1d92864899459a13156bb3f docs/models/createmanagerresponsepoolsautoscale3.md: id: 4e00d6a93c2e - last_write_checksum: sha1:bfa6a423fb59f448bcdcd1cf689fb334eea94b0c - pristine_git_object: 9d13dc814ad58814f61e6f96cc648319b3ef7095 + last_write_checksum: sha1:971ca80e0f88b7de5890500fbea9232272349be0 + pristine_git_object: dac6bfc8e42ce39d03073eefb8c5bc81cc323957 docs/models/createmanagerresponsepoolsfixed1.md: id: d3b9d57808b5 - last_write_checksum: sha1:2cfa5b67cc909ecf54604f0f852e9c192816c28d - pristine_git_object: 7dee6b6068177d4d7bec0ac84320802e04dc175b + last_write_checksum: sha1:dcb007210493358d9b8a5933900173282a34d19d + pristine_git_object: ca1c88a49a30ba7dd8df9ec04707cbd3a0e3a01f docs/models/createmanagerresponsepoolsfixed2.md: id: d2bee126027c - last_write_checksum: sha1:a944b25ecdf7cb39455120820d21a63a6ea9e307 - pristine_git_object: 1cc3557ea3f292eee18f0a2f4a134bf00399e53a + last_write_checksum: sha1:e6b37e77d740fa3019c9ab3c2f95683def2dc432 + pristine_git_object: bfd72a53b3e048935a8b508c30d5c82289a257d8 docs/models/createmanagerresponsepoolsfixed3.md: id: 2872c45be94c - last_write_checksum: sha1:ff2a8e81720fc00e6460766cc7270393d7fee429 - pristine_git_object: 5bf975c7b47fabf116540e2209fc908b33541701 + last_write_checksum: sha1:2569b40a439f8be34fa6c35c06d76cf0d0032a7b + pristine_git_object: 58df17d477eb55af7f97fb2c6b66ff93b2bcd5fc docs/models/createmanagerresponsepoolsunion1.md: id: f444c1fc8f6c last_write_checksum: sha1:ee5dae1db2cdc1d62e7cee42f4031c53536c8b5f @@ -1894,8 +2056,8 @@ trackedFiles: pristine_git_object: 9f27025d64b6f3997426a355d78e5710754a81b0 docs/models/createmanagerresponsesetupconfig.md: id: ae97736792ae - last_write_checksum: sha1:e88d54f00826da0d7955fad36197ccc32cf2a3f7 - pristine_git_object: 0f3a67f07ab314fe56f098349171b4229eeca7aa + last_write_checksum: sha1:614deb6a834c404f73a87d89f7a9ec9162699dc5 + pristine_git_object: 786fbbaf8cc22fa68bb64c3127821e3663f5b0ab docs/models/createmanagerresponsesetupgoogleoauth.md: id: 6f6f72183056 last_write_checksum: sha1:e6140dcf096b0bb85178d5b0e00a6e22ca9e9b7e @@ -2026,8 +2188,8 @@ trackedFiles: pristine_git_object: b26f05c7575e138c6953669e1b7f28d66fe8dcad docs/models/createsetupregistrationoperationrequest.md: id: 58e8c2d278b2 - last_write_checksum: sha1:1e0136b2ee4230d50f7c558760fcd8081e337389 - pristine_git_object: 5ef3701004068745aacee70691a00360803a6071 + last_write_checksum: sha1:cab60d4ee8c270faf1842850ec0d4f9058ad8ce4 + pristine_git_object: 3a5028e70cfb6d418b405b99b591311fd7fe3219 docs/models/createsetupregistrationoperationrequestaws.md: id: 417f099237fe last_write_checksum: sha1:9927dee1dd2e6188844b6e10b00e89768597aeb8 @@ -2164,6 +2326,22 @@ trackedFiles: id: e18d82512d65 last_write_checksum: sha1:10067605d8e26c5649ecd0b200f35a6b4d154fb9 pristine_git_object: 19ebf9a4ba59d6cafec88daa5db84167fd552b65 + docs/models/createsetupregistrationoperationrequestfailuredomains1.md: + id: 0af736e98fd1 + last_write_checksum: sha1:596f9b2eb05e52e45685bb9dc9f0a455aac63a33 + pristine_git_object: 0199ae1f386866cf727951f47cf2f9f7731a4040 + docs/models/createsetupregistrationoperationrequestfailuredomains2.md: + id: 6dbb1757c1c6 + last_write_checksum: sha1:bb9bed5006fdfd1fea666372e3a8441c3468b743 + pristine_git_object: fdeaf7e857c169ad27e11a488659a8e5e7aba638 + docs/models/createsetupregistrationoperationrequestfailuredomainsunion1.md: + id: 89c4ecb02193 + last_write_checksum: sha1:4b76e1e969d7665dc2bc2a80692938bafa7eb1ba + pristine_git_object: 18a02e257931d888a2e07174f8e8da1231dea969 + docs/models/createsetupregistrationoperationrequestfailuredomainsunion2.md: + id: 66476e9b70cc + last_write_checksum: sha1:b6f1d25b58d6371ae77eeaefed394ac5484c01ea + pristine_git_object: ced266c25f88985f75025997923221d0b3145628 docs/models/createsetupregistrationoperationrequestgcp.md: id: 5608a171b819 last_write_checksum: sha1:e644b7ffb9c43dbe3020276c06b900d35a90b712 @@ -2274,12 +2452,12 @@ trackedFiles: pristine_git_object: 867d5d25f129f32f5be1cba247d787306aad506e docs/models/createsetupregistrationoperationrequestpoolsautoscale.md: id: 85d445130720 - last_write_checksum: sha1:02f9cb3762dca82f9454546be34a98e6c2afd5cb - pristine_git_object: a3088980ff6eb64aae3352ee4127f1a121f0ee37 + last_write_checksum: sha1:c6d8193e387c129ee1aa786ccf1442d6549374d7 + pristine_git_object: 373309308a7b00823a4c96db415f75d1a3c46b08 docs/models/createsetupregistrationoperationrequestpoolsfixed.md: id: 0e3d85b24fbc - last_write_checksum: sha1:439f0ced83ee4dbc7e61c2617364da07828dff36 - pristine_git_object: e76d3e7c137a8d3fccd1cc0a15bf99c85baa0303 + last_write_checksum: sha1:73ade5ed71ec01fc81cad221c812ab042207df63 + pristine_git_object: d496ad7ae988dcaa37ac7731d9aaf6b01efc8ff8 docs/models/createsetupregistrationoperationrequestpoolsunion.md: id: d08fe90df826 last_write_checksum: sha1:1833e3049039298ca6a2721afbf6766227958500 @@ -2434,8 +2612,8 @@ trackedFiles: pristine_git_object: fb4db879451ee867285dc9a402994c587232e5b7 docs/models/createsetupregistrationoperationrequestsource.md: id: 7a84ffef345a - last_write_checksum: sha1:062d961d00efcbe71fc7d350fc51328ecd1306ed - pristine_git_object: 65b4a4a44824480a719d692db9eed1e88917dae9 + last_write_checksum: sha1:9972bcc563e7b5b7df87820de0dee89550f4d4a4 + pristine_git_object: aaf3c5a0cba7f15270c51f9df8dd6477dfa6df6f docs/models/createsetupregistrationoperationrequeststacksettings.md: id: 629acb1b8791 last_write_checksum: sha1:856eaa5fae241d106e3bed3f8095c7df78d65bd6 @@ -2652,18 +2830,14 @@ trackedFiles: id: 94e318c7b775 last_write_checksum: sha1:97fe78c24a26d8b5f5f4c09c68fc6caf0fcf1975 pristine_git_object: 401e9ba5215e2afef55f937a5f8ef22bc682cc3c - docs/models/dataassumingrole.md: - id: 7b72799ea2e0 - last_write_checksum: sha1:52e904ca5d50dd4d4ac2e86c6f0f7a4e400d1bb3 - pristine_git_object: 3b44fd7931f23f2fa791a171bfbb0aa4afb440c6 docs/models/dataaurora.md: id: ebef36103990 last_write_checksum: sha1:c1b40f15a57106074bfea1dff6e39e6f463e80ef pristine_git_object: 845576f5c988f4d81850364cc2fcfd7b2490fb3f docs/models/dataaws1.md: id: 4e43c89c248b - last_write_checksum: sha1:04a98ac4486942858abe56fb57f015bfb4464858 - pristine_git_object: e5001eef3ea912b3bc71573cf41ca340c20f9bb8 + last_write_checksum: sha1:4300e1cf2640bf7963f9c1f5c2320a341394659d + pristine_git_object: 5a5d60f34dc17c8b6551140adb30a04c6d5fa032 docs/models/dataaws2.md: id: 015288489f0e last_write_checksum: sha1:f916a73361fe97e7ff73458765cffd4305c97fe5 @@ -2710,8 +2884,8 @@ trackedFiles: pristine_git_object: db8341fa8e49e3275ff15ad96666cd9737fc922e docs/models/dataazure1.md: id: a79343db7624 - last_write_checksum: sha1:10536e750f58e86e8bf26c9dfcd0884a513a77f6 - pristine_git_object: 379971c487a7db8a568ea05b25f80e99f4027f54 + last_write_checksum: sha1:90e6b29dc47643118eb7d00c83d8b454c9431e75 + pristine_git_object: e33a746de82b600a05440bb55ecbe137a6689ed4 docs/models/dataazure2.md: id: ea5119b629e6 last_write_checksum: sha1:ad8a6555d99af7d6efc4137c38ec1a0c08154e1e @@ -2780,26 +2954,6 @@ trackedFiles: id: d7f02587b7be last_write_checksum: sha1:2b44a5c9c5e28c60b0715ed9d469ed91e8f2251b pristine_git_object: 76bcd3919cef5ca1cec3a2f8d4dddf877bfb0cb9 - docs/models/databuildingimage.md: - id: ae8ac7d1ab1d - last_write_checksum: sha1:0c4f0da59ae94502f69d2a73879ea9984212b5a5 - pristine_git_object: 8451bcb4751b76b0100b9d693c11a80952a9ac11 - docs/models/databuildingresource.md: - id: 4757a944e420 - last_write_checksum: sha1:97e9b8dac05f159725e16f0630e076c67352019c - pristine_git_object: 697efce49df9f6428bd8a3c15e0c50ed90a6fb06 - docs/models/databuildingstack.md: - id: b9439804fa81 - last_write_checksum: sha1:b5bbce5cf16c2a7c437dd80d6b71fb269c4887b9 - pristine_git_object: ebc60fb551f4672ce36a5dac3e82e1401ac0daea - docs/models/datacleaningupenvironment.md: - id: 3f58261956a8 - last_write_checksum: sha1:ad1219d8780108ae4c5bac6cd6ebc77ee8bf5cdd - pristine_git_object: 5ee56c6583beeca76940ceaa1c2a7c6ebcf45a55 - docs/models/datacleaningupstack.md: - id: bb58eaeffbe0 - last_write_checksum: sha1:635d10d83fbb65aa12ecbab5b75c03ca365d0726 - pristine_git_object: 8496daa1d6cc6017e58f9015254f5e3b936c46f7 docs/models/datacloudsql.md: id: 0f5d5326c164 last_write_checksum: sha1:a7d1b5ab03bc60e8c0e84c08d39036321bbfba63 @@ -3064,10 +3218,6 @@ trackedFiles: id: 7f8bfcd83914 last_write_checksum: sha1:b2a5c22b154043fb2ddb680627f0d2e01783bdce pristine_git_object: 0108650ac9d2be03f9ffb83382da0bc30b86d0fc - docs/models/datacompilingcode.md: - id: 46c0bff28614 - last_write_checksum: sha1:8db0540624f103ab8a9d936ae6c23aba1859e7db - pristine_git_object: 1a14afdd25edfaf67b5de2649899b92b4b53cf2b docs/models/datacomputecluster.md: id: 570b6ceef1ae last_write_checksum: sha1:ff774fbd839d36ac566a0ba1efef98dbb97375db @@ -3076,112 +3226,18 @@ trackedFiles: id: 268420ee4dd3 last_write_checksum: sha1:2542f9639629ff2460310cf1442f995b15cf1a72 pristine_git_object: 787120ac4682133d94cb12930a1c3fb021fc737c - docs/models/datacreatingrelease.md: - id: f07dd9072d78 - last_write_checksum: sha1:2bfb8184604223614f5c8bc744d55175ae741e30 - pristine_git_object: af2526d5a2aeacea6d41840868082d7a52d1af1a docs/models/datadaemon.md: id: 16b0ad709d6f last_write_checksum: sha1:7804059700a19b0512e05f2848598f015409edf7 pristine_git_object: a881640e344632797755924eef0546232f908d15 - docs/models/datadebuggingagent.md: - id: aba80ec1eb83 - last_write_checksum: sha1:489837d27293005887e915fcc13f91defe0d6ce2 - pristine_git_object: 595ffc79cc22a5175c6f28ccdeacb9b486130183 - docs/models/datadeletingagent.md: - id: bad29cbe37df - last_write_checksum: sha1:cb5156641758770a39a9f6c1ca9bd820735a25b7 - pristine_git_object: ea7feeb31c30b8da4350ad5efa4284f7bf97179f - docs/models/datadeletingcloudformationstack.md: - id: d4b93652f442 - last_write_checksum: sha1:21b6aecae715825ede871f1a0d6852df82bcfa9b - pristine_git_object: 93b4be6aab4eb13c07a2434209a04a6abba7287e - docs/models/datadeployingcloudformationstack.md: - id: 7e283b200ed2 - last_write_checksum: sha1:f02a370bfc0f83cabac75cf4a6f1e6ec573d2f2c - pristine_git_object: 1079d63322623ef5ad4980694b583d0adeb655fe - docs/models/datadeployingstack.md: - id: 535767541eeb - last_write_checksum: sha1:93c6f6ff7b429f4fd7d723c2780953fc287a60de - pristine_git_object: 49c811e65402371062533594cbf345a377e80006 - docs/models/datadeploymentcreated.md: - id: c92f8f571066 - last_write_checksum: sha1:8df1761b2c1d63ab2aa39bfbfc664bec21e73c50 - pristine_git_object: c13c03230d1c8ee221ddad3d9552ee3055c4150d - docs/models/datadeploymentdegraded.md: - id: 98daf5bd8a62 - last_write_checksum: sha1:1afd25a4df43d9070650a8c9668028678d29c716 - pristine_git_object: bc800471943e40b6ef68e066b2f47135af8118c2 - docs/models/datadeploymentdeleted.md: - id: d417d5815c96 - last_write_checksum: sha1:e76077f202ea70fb8b887e7cd3bafd78d8aed328 - pristine_git_object: 572373e0ffce1d11fb53e0a52cb233dd6009d9aa - docs/models/datadeploymentdeletionrequested.md: - id: 29b2dcc04f40 - last_write_checksum: sha1:880676ab8665922d49f58943335bebaeeafd38dc - pristine_git_object: 1382144047447077b25f1bee22e2a0aa1151ec8f - docs/models/datadeploymentenvironmentupdated.md: - id: 10f44b4d8678 - last_write_checksum: sha1:8a51455193787a89d194e4463aa60092e3a222e1 - pristine_git_object: b4e94540150e8d8a78a23b0fe78b73517d2f3897 - docs/models/datadeploymentfailed.md: - id: 5af8ee73d66f - last_write_checksum: sha1:2e842f281e33868b56c751b20acda39d013000f4 - pristine_git_object: c21788f88e9687016e49ca43dcf06bdf051d4d7d - docs/models/datadeploymentrecovered.md: - id: 39231634e572 - last_write_checksum: sha1:1e213f283636b1d999d542ff00c1af65369ea659 - pristine_git_object: 6833109bc0306881bf2dc4a1a7f33e6cd23e3220 - docs/models/datadeploymentredeployrequested.md: - id: 1f5ce29dbb2f - last_write_checksum: sha1:2abf5b064af370b1cc2160f120e59b651ea77dd4 - pristine_git_object: d3b46276d867b517682d59c03663792117d42a4c - docs/models/datadeploymentreleased.md: - id: 7c94572003bc - last_write_checksum: sha1:8106af7ace27180117079fb1428b43901f2dc9a3 - pristine_git_object: cf9ffeb9f7b0ca75b2b62db33fabe01c367fe645 - docs/models/datadeploymentreleasepinned.md: - id: e869ebf4e641 - last_write_checksum: sha1:d68b39c7d328900288d5d909b6f6d610740ed279 - pristine_git_object: 26abd58c4afbd9f43224cf3d7efa1b59013b5d0b - docs/models/datadeploymentreleaseunpinned.md: - id: 6129a292b662 - last_write_checksum: sha1:2eb3b32ce89a7b7530577c661e3a11b519153f06 - pristine_git_object: 5f9000befc4fba080419e704fc621ca7f52dce78 - docs/models/datadeploymentretryrequested.md: - id: ef7906ef5135 - last_write_checksum: sha1:43b309068048d924c373cf27c6e652cef6600512 - pristine_git_object: 034e56f22ba47377e4309b3895f09245faff2971 - docs/models/datadownloadingalienruntime.md: - last_write_checksum: sha1:9bf5130186142021d64e0f6dbea7dcec4bdb954e - docs/models/dataemptyingbuckets.md: - id: 48eb0000bfe6 - last_write_checksum: sha1:05b9d191726a460f68704e27767d525b1c369137 - pristine_git_object: 0c5dba194732657e1a5bbdad970f57a8873d3249 - docs/models/dataensuringdockerrepository.md: - id: f02f868523c3 - last_write_checksum: sha1:6a736b644bac91462025ca09f7abd7dcd3890e88 - pristine_git_object: d73067ba0e7b53b4791b1ad63cae382e7a556996 - docs/models/dataerror1.md: - id: 209fab812981 - last_write_checksum: sha1:d2077ef00eaeb7b17bdd65f9dcf9e09a21c28cc2 - pristine_git_object: 7a697b901bc77c6c7317c5853da1406e76ca0a84 - docs/models/dataerror2.md: - id: 10689a917b52 - last_write_checksum: sha1:5149a7bb1f2384f22e4e893fdab517b573b1ad2a - pristine_git_object: cd2c5cb5a1b23b6a140764ecce46f3a069a138ff - docs/models/datafinished.md: - id: 48d2627a55e1 - last_write_checksum: sha1:d83144245ccb53563e190f3eee9b1cb9e2b18c4a - pristine_git_object: 0669e0ef8c3f4844bb2947e20c0dbc266c62eb73 docs/models/dataflexibleserver.md: id: 2f1ebd3fc027 last_write_checksum: sha1:f57b3b72393468213e37109085e8cfd636778e71 pristine_git_object: 8d4c58d98f162d4dc6e84a0fe6d1e1c244fecc2e docs/models/datagcp1.md: id: 029d6b531c5b - last_write_checksum: sha1:69a378756bf79b9ad8b0bf859cf4b541bbd5c5b1 - pristine_git_object: ba5d59e1c74002d9116faf4906fe3e5f0195d638 + last_write_checksum: sha1:3f52adb7f03eb5ec6a4a23961d83fbf7f024fd03 + pristine_git_object: 1527ff9c77f134c40ea75027082a5b758bcecc66 docs/models/datagcp2.md: id: 0beeab4d9b37 last_write_checksum: sha1:9ed8e7fdbd23d797c9db71477c489c5e7b2b4579 @@ -3230,14 +3286,6 @@ trackedFiles: id: a48c8a2142d6 last_write_checksum: sha1:ecdfb55e973c1ac75ad75d57bf73f3d879ecf3e3 pristine_git_object: 35401801a2a8749983dfbae04150e4160c225b81 - docs/models/datageneratingcloudformationtemplate.md: - id: 381027571b71 - last_write_checksum: sha1:cc7ea1791525fb2c951f233740b244612fa27c58 - pristine_git_object: 13e9bd0e6d134440b233f91d6fbdcf8e0575db01 - docs/models/datageneratingtemplate.md: - id: 9660148684b7 - last_write_checksum: sha1:fbd83764982727ccd4cd5762cb74e04ed8778725 - pristine_git_object: e83d11e190c23a086c50f0ae058f3218e2900f94 docs/models/datahealth1.md: id: fe849c8ee783 last_write_checksum: sha1:8b5e543044f2156646339fbd4acf1bf869c125b9 @@ -3500,12 +3548,8 @@ trackedFiles: pristine_git_object: e32150dbf3450a07ebd7f519d011e9d1658aa8e5 docs/models/datahorizonplatform.md: id: 9ba5c768edf1 - last_write_checksum: sha1:4be8538e2201bb979d33ce6f5eb69e185492afd3 - pristine_git_object: ea5b52c3059ed0aa8ee5a333452c8f59e9735e05 - docs/models/dataimportingstackstatefromcloudformation.md: - id: e2a2623a21b3 - last_write_checksum: sha1:4802f7fbbd261e7dfd0497df378d1acdabead82f - pristine_git_object: 8320b3128898402c86039b2ad47279dd181d4fc9 + last_write_checksum: sha1:e5ce285da37bde7f34d9fd33369835b96bf65cb3 + pristine_git_object: 5bcb38d7ec92d2754646e28588011a56d6f35a1d docs/models/datakubernetes1.md: id: 74224d2bec4e last_write_checksum: sha1:9409ef3ab875afb3a6a3660b6aa2ddc4bed91244 @@ -3534,10 +3578,6 @@ trackedFiles: id: c1e906c7a015 last_write_checksum: sha1:f251a5d0789f3806cb2c8e693cb46281fd445602 pristine_git_object: 2d0d5fa63bae094fbfeeff37b4c71c1ba98acd76 - docs/models/dataloadingconfiguration.md: - id: cd0bd855dcb1 - last_write_checksum: sha1:1593a0d85b0f622686835d2b7205010672a35b6b - pristine_git_object: 5cb5148eed4f282d2d0ad480b789d1a0eee967f6 docs/models/datalocal1.md: id: 7ced19acc7a2 last_write_checksum: sha1:4018aaf6ad2c754b079102ffbecfe6df70bcbeb3 @@ -3584,8 +3624,8 @@ trackedFiles: pristine_git_object: 95c28cfa7a0c024d3e20f830a371c65ac328ca45 docs/models/datamachines1.md: id: 0d4e62962ae4 - last_write_checksum: sha1:bf2487328ce2ae511d71caa41eeb0a2af9892155 - pristine_git_object: b049d4b97a0f2cd8dd837a55a065702807991bf8 + last_write_checksum: sha1:0eab9da443767a65c5e7e33d01883b5db0f0630d + pristine_git_object: b419f874a468cb9bdaca01b5ec9528e520eb8ce8 docs/models/datamachines2.md: id: 9506c5dfe4a9 last_write_checksum: sha1:e37e1a346596028f3d3bf465d0e0081d785af155 @@ -3598,26 +3638,6 @@ trackedFiles: id: 47cb3abe0c8a last_write_checksum: sha1:245e7124e305834e85348890d9cdadae78d487b8 pristine_git_object: 5d3c81eee1887fa267a0dbaddb18f37d17d135f6 - docs/models/datapreparingenvironment.md: - id: 9f74baf1b294 - last_write_checksum: sha1:ed5f853e0366b7e54cfe9c71e86a82dd0983a662 - pristine_git_object: 52f8c8f3f79df5b64122d9923a8f7376e23f927f - docs/models/dataprovisioningagent.md: - id: a164fbc73c1f - last_write_checksum: sha1:8bbee5e755f52852f659a8d5c0a55d8ccab14802 - pristine_git_object: bc8856ca54fdecf85f7186407f158a48de2b9116 - docs/models/datapushingimage.md: - id: 460fa9e77dff - last_write_checksum: sha1:e1590b75673593645e1030b03a4f1b0417e18aea - pristine_git_object: 4fc451a2f4d025d3f5ea74c96c9fdb7c90c9d63e - docs/models/datapushingresource.md: - id: 14d57fff1132 - last_write_checksum: sha1:caf791154370880c6cc04b12a46c4f0e9a6e1b3d - pristine_git_object: 4e4a2078334dda0552fc8f035ee187942b896c1d - docs/models/datapushingstack.md: - id: 6e089c7a5290 - last_write_checksum: sha1:43955a7e9be76b480c2892530aaee28ebaa212c4 - pristine_git_object: b5da8bdc4cba98c405748d69dcfc11dd24cfb0a1 docs/models/dataqueue.md: id: 790fc933b7de last_write_checksum: sha1:9bf83f69c4de8bf38ac5e0dd2c9c31ede621fff5 @@ -3886,14 +3906,6 @@ trackedFiles: id: 609a6e0bfff8 last_write_checksum: sha1:82e9fcb6a5b809f2cd4afa4147202bc376d15ac9 pristine_git_object: 9701267344348b7faf2c5742e4c7023c99be0af6 - docs/models/datarunningpreflights.md: - id: 41eac019b13a - last_write_checksum: sha1:4e3bf9b38b895bf50be21e1a95fcc88c45205fed - pristine_git_object: aa2c9ddb41ad65534417e0385287d01e985c527b - docs/models/datarunningtestworker.md: - id: ddfb0531481f - last_write_checksum: sha1:bc8b5701c604189a87a56c63e9fe10965f44b4dc - pristine_git_object: 475f34733524d7028c57507daff8a69e53bf1866 docs/models/dataserviceaccount.md: id: 69ffe7d6e718 last_write_checksum: sha1:66e800a7ba64573502058cd7b3b178c96580aba9 @@ -3902,22 +3914,10 @@ trackedFiles: id: e5ef919f557f last_write_checksum: sha1:38519fda9d2a386654c3d8a8729d5123356ed599 pristine_git_object: 5a3ccc997dd95d12c1ec8a6bdb4e59a826cdb0d6 - docs/models/datasettingupplatformcontext.md: - id: 98e52999db7b - last_write_checksum: sha1:2a45c3e5feedf64265cbb4120358a0b7ac4f2f82 - pristine_git_object: 2caff39861d376bb188031d84ca6c31db80e4b37 - docs/models/datastackstep.md: - id: ce973b8e73af - last_write_checksum: sha1:67e508ac6679244ac8dcf9739f4d7468d6c72e62 - pristine_git_object: 30d528696aae56b2aaf9828ebcb47ed865c42bef docs/models/datastorage.md: id: d13f9e6843dc last_write_checksum: sha1:ea8cb906ec2196557cd1044ffe366d96c111f063 pristine_git_object: 84dba92a67d703038ab565b279e7a4c4fc47e0dd - docs/models/dataupdatingagent.md: - id: d6c56f7c9536 - last_write_checksum: sha1:b3ac2d86e27f7f20a0691c8d3cc3a4bba648f59a - pristine_git_object: 79e63e3fbb08a1f23b63f2f73cd395a4e5ce69a4 docs/models/datavault.md: id: f7188cc0add6 last_write_checksum: sha1:a93d55c9060f825ae857ce32ae4a3673a6cc062b @@ -3932,12 +3932,68 @@ trackedFiles: pristine_git_object: e18089bd392d385072052002de86a1d252ca8f58 docs/models/debugsession.md: id: 241dc1f237ca - last_write_checksum: sha1:5d84772fbb8b329dbb7e81f42a601c42a43e3a4a - pristine_git_object: 2feda37195f516783e15892412ae48bd78ce2ea9 + last_write_checksum: sha1:1d885108cfad8e46fa75e7eee2ffcd117ff1b433 + pristine_git_object: 106a2e08d5a305290fe7ca9eb8724453b0a50780 + docs/models/debugsessiondeployment.md: + id: 85e27b0baac6 + last_write_checksum: sha1:591d2daa3679a760b44ec91bd8180a2f5520089f + pristine_git_object: e7bcffbf479665da340f26dacf553394d3690536 + docs/models/debugsessiondeploymentdeploymentgroup.md: + id: 66600de25cae + last_write_checksum: sha1:0775c4e565ffa52512cfbfe8a3df4e17fc1c5154 + pristine_git_object: 79d7fb47ba7b8b71a5fe68ea85e0ba0500b68aeb + docs/models/debugsessiondeploymentenvironmentinfoaws.md: + id: 6bd3abc4f1f0 + last_write_checksum: sha1:ee6bfd10b428f35846fba54642d36e5a976207dc + pristine_git_object: 08b599aa9c9cc5d30c01d145a9679558e356006f + docs/models/debugsessiondeploymentenvironmentinfoazure.md: + id: 04549d7ef9f5 + last_write_checksum: sha1:483abe4baea29277a1eafeaf2441abbe12d3d2cf + pristine_git_object: 14b852a16ef1119c98dab7daeadd070904352ac5 + docs/models/debugsessiondeploymentenvironmentinfogcp.md: + id: 609fef59fc9b + last_write_checksum: sha1:dc3c4b71f99c21fa3d635dbee875ab9d66299918 + pristine_git_object: ddca935f84dc36a517def6a6bc4134fcc1e411a5 + docs/models/debugsessiondeploymentenvironmentinfolocal.md: + id: d4e8874bfc99 + last_write_checksum: sha1:cb1fefd2651491f857f5c3a3828d6606b43da1ea + pristine_git_object: 838a3b4c8312aae8a7f7f86c67f537251ec26185 + docs/models/debugsessiondeploymentenvironmentinfotest.md: + id: d9e7e111fc87 + last_write_checksum: sha1:13fa265d61ed08953b8a332063d249ff1911906e + pristine_git_object: 154366a72276785d52ed4d7cd97b975be18f50f5 + docs/models/debugsessiondeploymentenvironmentinfounion.md: + id: af6fd09c2325 + last_write_checksum: sha1:896a0fe07ef07b40510be8e399640c9057a55e9a + pristine_git_object: befabd41f4b28a60729c08ea302004fa333788a4 + docs/models/debugsessiondeploymentplatform.md: + id: 4df761efbd95 + last_write_checksum: sha1:d18b1efba85234502a8d13b605fa003a0cfb6f60 + pristine_git_object: 8700668959a6e98492ad843c85a984b7bb7ec5b1 + docs/models/debugsessiondeploymentplatformaws.md: + id: 42e709d9d2a5 + last_write_checksum: sha1:d7cf6d188142f0306f3d57edf2ff1c8fac657339 + pristine_git_object: c1b181ca70c59e7bcd5390e6940cc7fc924e084e + docs/models/debugsessiondeploymentplatformazure.md: + id: 849c4dd8fd34 + last_write_checksum: sha1:dceefc7b6a3e4d782cb0de4cdda4aa0ad2e9a35c + pristine_git_object: 8d516a1bf6f42f6e5438ba3da2334a0af8bdc4a2 + docs/models/debugsessiondeploymentplatformgcp.md: + id: f2568a49fe11 + last_write_checksum: sha1:d44e3e4dde1f909a4445d9dfcc5d90f390025843 + pristine_git_object: a3e66ca91369269a8da940025d4e811838c1bc58 + docs/models/debugsessiondeploymentplatformlocal.md: + id: b8206b1af855 + last_write_checksum: sha1:00730c0f5f9c52c177318f14e286aa8a89bcf1a5 + pristine_git_object: 44a313641b464caa1aa838ca89a20e0fe4268dac + docs/models/debugsessiondeploymentplatformtest.md: + id: a978815b31a5 + last_write_checksum: sha1:c704ac139306e64aea773ef3849e16fea7c75267 + pristine_git_object: b41dbfabe15956bad805109ed8c9f4c5f00ef946 docs/models/debugsessionlistresponse.md: id: df92027711f2 - last_write_checksum: sha1:fc5f51a563e8db70f3ed0a3bcf0908bbd0df081c - pristine_git_object: 3a7dfb77fa7df03d6a164b5babf194a9ed22e910 + last_write_checksum: sha1:06110385bc72775e796b0cf8c6373f42e72e8137 + pristine_git_object: 0de95ac66528933de24f49f9f1afe73d43d70d46 docs/models/debugsessionmode.md: id: e1fad9cc003a last_write_checksum: sha1:c52cfee7b24a2ce66dd56cb97902055097a6938a @@ -3946,6 +4002,42 @@ trackedFiles: id: d0fddee6fb91 last_write_checksum: sha1:58026b342a7ace55146ba65f58812dfd7fc6e1b3 pristine_git_object: 934399b6cce08010050b266e5b801d10c540adb5 + docs/models/debugsessionpublicerror.md: + id: 5378ac646b48 + last_write_checksum: sha1:5f94252ef2c2cb946f472ad4e037631c61fee155 + pristine_git_object: f5eb52c68d96718d6c21bcb2af3586af59b4d1ac + docs/models/debugsessionpublicerrorcause.md: + id: 42c6b1cc2e8e + last_write_checksum: sha1:cf4015fdcc062f2c500d80212a521722d8c22bdd + pristine_git_object: 79399ffe7f763bee883e22502abfb01a97943f0c + docs/models/debugsessionpublicerrorcontext.md: + id: 767d5e101eaa + last_write_checksum: sha1:b6b2ea9c87a42407f8767d02cced97f1bbf12065 + pristine_git_object: 9428b77b81608ec97c09f3970e77a7aa691098a9 + docs/models/debugsessionpublicerrorcontext1.md: + id: 7b439f9b470b + last_write_checksum: sha1:605bdc34eddeb1813a80324ee373f0b8dcd0d0ec + pristine_git_object: 5251580125b6a9a60ab1c4cdf6f95c82fa35015d + docs/models/debugsessionpublicerrorcontext2.md: + id: 95868233cd46 + last_write_checksum: sha1:f49e182f60fa175428053551e87df9a15efe0e94 + pristine_git_object: 04fc0ab534f8e477a98b497fba1fac9673bc1b62 + docs/models/debugsessionpublicerrorcontext3.md: + id: f1453a87c6cf + last_write_checksum: sha1:f0626420199edbe66613410e9c4c33287d020bf4 + pristine_git_object: f0490f584ced48c5439b976bb6a10c6d00e1505b + docs/models/debugsessionpublicerrorcontext4.md: + id: 6c34ad368400 + last_write_checksum: sha1:469ac67f1cb6be28c19ff8ac7f71715b7252785c + pristine_git_object: 484575a45d7b85d0cd19de231f39c4d336f703fe + docs/models/debugsessionpublicerrorcontext5.md: + id: 3a16d3b08083 + last_write_checksum: sha1:c4d8496a0b2eb3d8ef23b84e1fbd761953989d71 + pristine_git_object: 7037e9718b94c917a355b55b2051d7ea6bd43f5a + docs/models/debugsessionpublicerrorcontext6.md: + id: b0a343d90867 + last_write_checksum: sha1:21d1eea784326fac40a215c7584194baa9b36a96 + pristine_git_object: d4968faf0ba0e0a9b92dfa310b6518f0ec039007 docs/models/debugsessionstate.md: id: 8e574faf723c last_write_checksum: sha1:6415c0ea1a8b8780351c9318021ff47795389ea3 @@ -3990,6 +4082,10 @@ trackedFiles: id: 76db72e79688 last_write_checksum: sha1:dd991a07fe690c86f68b11cbf298a1717a7d3328 pristine_git_object: 3c2c58061fcc626b206dd478b4908772363536f5 + docs/models/deliverystatus.md: + id: 3c757a22293a + last_write_checksum: sha1:72ddcd0ece31d2d13f50c1149a878e6582d11205 + pristine_git_object: 043e72d42c199874d2b997636d2f80f348c2e8dd docs/models/deployment.md: id: e43ddcf597c5 last_write_checksum: sha1:c1a2d4b8b4c1fce5c26515dc3fe59ee9700a987c @@ -4126,34 +4222,14 @@ trackedFiles: id: 6c5375fdcca7 last_write_checksum: sha1:438405e75a2153c75735335283dc46c2e59f169e pristine_git_object: 1f9c56b24624364a3d58fdb01c06f2ee3db9ea21 - docs/models/deploymentdefaultboolean.md: - id: 6e2c86a3cb19 - last_write_checksum: sha1:b7359420caf29fb51a3d0a705ae1fd4a1fc16a21 - pristine_git_object: a3b912e0af87d379e6907e96502bf8e1778f6c65 - docs/models/deploymentdefaultnumber.md: - id: 6c52fdb6e322 - last_write_checksum: sha1:84217b4033261db2ce1caad7ba9ad6fc000352eb - pristine_git_object: 558b97aa896db2cd44ef10ff79711292f145ee83 - docs/models/deploymentdefaultstring.md: - id: 1a2d2fdc0cca - last_write_checksum: sha1:c656c7c2323a3007d4e0c1e829be45289f207a2e - pristine_git_object: 517a60fde979cc95ae5f03b06bced8b7685092a2 - docs/models/deploymentdefaultstringlist.md: - id: fa329743b031 - last_write_checksum: sha1:90284ba7e671151dd473c6a77f31d20711ffe0b2 - pristine_git_object: 54075985b0733a51eb44f81bf88f6f09816637de - docs/models/deploymentdefaultunion.md: - id: be82f3761caa - last_write_checksum: sha1:1ff690e5e7a3a8164befd44cea0889d4d1bcc4ff - pristine_git_object: d98673fadf6a336e4a15563496de50873cd162fe docs/models/deploymentdeploymentmodel.md: id: 81ff42dd9a74 last_write_checksum: sha1:ef84a8326e61973cd6d23b5f9e935d5efde5ba06 pristine_git_object: d493877a3400acbdbf8b9bbb6a36754fb60bb6f6 docs/models/deploymentdetailresponse.md: id: 712f7bbc8cc0 - last_write_checksum: sha1:007f2df1b7520e0a39a6d2df380624201fb1343e - pristine_git_object: 3edeebf1fc9f84d959a0c609e32588a548a5f00f + last_write_checksum: sha1:70443d12c5b39ea8c547e7327a85d18ab93b8ed4 + pristine_git_object: d2ae37ab64c44b9b6c9256e6a5303184602369c6 docs/models/deploymentdetailresponseaws.md: id: c1ab737c8113 last_write_checksum: sha1:43a494e9fd5f42bdb9ae4e4bbaf6d59b77e93cc7 @@ -4262,26 +4338,6 @@ trackedFiles: id: e25e09f5bd43 last_write_checksum: sha1:d0c8996c057c02f883e6fe74e629e2ce6aa972e9 pristine_git_object: 0f7fa5712fa8f95f5a0e6919f8501a9fc0045bb9 - docs/models/deploymentdetailresponsedefaultboolean.md: - id: 2b338c7a7e3f - last_write_checksum: sha1:23d99dfcc0e71f48651f2a7b2a5a2dbed8225be8 - pristine_git_object: a0c8820c988ff47c1b1c716d308aa7a28204b0c9 - docs/models/deploymentdetailresponsedefaultnumber.md: - id: fb6dba14e559 - last_write_checksum: sha1:0d0e8f76d50cb8c828cde7e0944838e744e09719 - pristine_git_object: 331a30acebd50de9f15150e8c4762fa1afebe134 - docs/models/deploymentdetailresponsedefaultstring.md: - id: c6f36efb3939 - last_write_checksum: sha1:54722a2d9745616b7485e9b0ceb8531a85548cc5 - pristine_git_object: 8f4e09e3c9177b3b1f9c2a1ce538172ce9f67c33 - docs/models/deploymentdetailresponsedefaultstringlist.md: - id: a916380b130a - last_write_checksum: sha1:c27328de49c0f357e3970521feeb6f00c1ecf008 - pristine_git_object: d3192be77be7f80574ba1d8b4d66400f068458c3 - docs/models/deploymentdetailresponsedefaultunion.md: - id: e3f8a73b48a7 - last_write_checksum: sha1:6e41e835db18cac644389bf5dc5a3b0f19436998 - pristine_git_object: 0f8867ec8e7df9918753c288ceadde53eb9e2b95 docs/models/deploymentdetailresponsedeploymentmodel.md: id: 097384e10aaa last_write_checksum: sha1:fd7640ca41318b398ef227ad66139cc299517c49 @@ -4306,10 +4362,6 @@ trackedFiles: id: 35daebcbeb2a last_write_checksum: sha1:dc96181a39de817923d83a236f1e22ae3ab8f574 pristine_git_object: 71f1bcb6ac36590615a19e189a6f1cea8bd97edf - docs/models/deploymentdetailresponseenv.md: - id: 422fc7af6a93 - last_write_checksum: sha1:fd56d5030baba40b51855c2e54c8eb9704e7dca0 - pristine_git_object: a4630e177b292adb274d5d1ec8cf47bbab2f0744 docs/models/deploymentdetailresponseenvironmentinfoaws.md: id: 12771a984be6 last_write_checksum: sha1:9dc4e9d3512dd115b2822c21279c1a9fd8802b8b @@ -4362,102 +4414,26 @@ trackedFiles: id: b87ce1c9b33d last_write_checksum: sha1:dd3f996efb1851a7f7b47dce785ae2c20fd11e26 pristine_git_object: 8b8f7280fa0e7b8ac8fbf8b210fe792a551a208a - docs/models/deploymentdetailresponseextend.md: - id: 9879f1df604e - last_write_checksum: sha1:70f28c8351be754be4582219fc94f4f214005d42 - pristine_git_object: c20cbbb0331f401106cfa4decb9f863501f84174 - docs/models/deploymentdetailresponseextendaw.md: - id: 490e6eab6db9 - last_write_checksum: sha1:dcf654670c5234104fc88d2fbfb3525ec731d239 - pristine_git_object: 695f927a7bd5cc11b36018fa06362e38c00ba8d8 - docs/models/deploymentdetailresponseextendawbinding.md: - id: 93114dd45b8c - last_write_checksum: sha1:b194b61fecb246998fc4ae1789493fb08da82b9d - pristine_git_object: fb65dafa1a4234c15815104248dadb1078cb4418 - docs/models/deploymentdetailresponseextendawgrant.md: - id: 861a9839b46c - last_write_checksum: sha1:05f3a8016ce0db103c24c3ce89309385bf445a45 - pristine_git_object: c321c42962b81e1fb31ab46f8a0f8e65ee02ddf1 - docs/models/deploymentdetailresponseextendawresource.md: - id: ba6b1b933dd1 - last_write_checksum: sha1:aca26434aa148197cf6fb251f696492484c33f49 - pristine_git_object: ac2278fe3bfa0f8acaef34f9823032a9e2e13404 - docs/models/deploymentdetailresponseextendawstack.md: - id: 255a3420ea70 - last_write_checksum: sha1:623a8208bb723557ab9ebc839a6bce983c52ce18 - pristine_git_object: d707ad91881268896d0f798434bd774f47eb1643 - docs/models/deploymentdetailresponseextendazure.md: - id: f290a27aa861 - last_write_checksum: sha1:f40a75a8c3d4d3b00d29072921ff78afd8834af5 - pristine_git_object: c9e06f22dd7bf0d237d23c93dff4403fb98e7700 - docs/models/deploymentdetailresponseextendazurebinding.md: - id: 4038fe245c63 - last_write_checksum: sha1:c0e65cd50162b4e33fc5dca119b6e9ec39578798 - pristine_git_object: 9d78cc1ce59746367c23fb49fe2ddbbf9ff2d15d - docs/models/deploymentdetailresponseextendazuregrant.md: - id: 4ab0b68e5b4b - last_write_checksum: sha1:2afeb0fe8ab228e2b51e7a6cd2ffc06cf9448276 - pristine_git_object: 9c7b01cabc782854f1d054fc1def3e2158733d88 - docs/models/deploymentdetailresponseextendazureresource.md: - id: "094925366348" - last_write_checksum: sha1:e103ff28dde61c101f4613fe51b3cce2f205e5e1 - pristine_git_object: 8c7f98216b629d4f37de4129a7a2b72e5bf87485 - docs/models/deploymentdetailresponseextendazurestack.md: - id: 9a2b41a40b36 - last_write_checksum: sha1:420c189702769cd329d71b07ef468999aabfbfae - pristine_git_object: 99cb94a373f6e1cd8d1a639a825a843e99ece7b4 - docs/models/deploymentdetailresponseextendconditionresource.md: - id: 7bdfbf891505 - last_write_checksum: sha1:7f3760b9b3185970d3b69128be050f7a201b8cf9 - pristine_git_object: 97c8752682e257a367a279e395e3a998b7b3d6ec - docs/models/deploymentdetailresponseextendconditionstack.md: - id: cf7c08b9363a - last_write_checksum: sha1:76b475d7703d5b3e68a9cdc8e7ac9d50bbaef8d3 - pristine_git_object: 2a688ff7cee6ad8ce920b1ea1d7470365f882a76 - docs/models/deploymentdetailresponseextendeffect.md: - id: 7a0a85c2e41e - last_write_checksum: sha1:359ed802f0f6bf61fd642ec6808b686b942efaa8 - pristine_git_object: e146007c329947d57e2619f2951686a79986aacf - docs/models/deploymentdetailresponseextendgcp.md: - id: 21cba32b3f3f - last_write_checksum: sha1:7d2b8236f138d5654b2566fd734e025096353f6e - pristine_git_object: 50fd114d1c31719fcab3ddc5bed0a05ae6bfb625 - docs/models/deploymentdetailresponseextendgcpbinding.md: - id: 08b7c2533865 - last_write_checksum: sha1:5776cfb79a22f41799942cda7884226be83b5ad5 - pristine_git_object: 565702231f91e318d458b2b8df483fde028ce79c - docs/models/deploymentdetailresponseextendgcpgrant.md: - id: cdb9bf0d22a6 - last_write_checksum: sha1:e01d3ff8442c2a97292db42cd253179e9658961e - pristine_git_object: 289010cbb37b280ef32bffd58a59a83e8f9428de - docs/models/deploymentdetailresponseextendgcpresource.md: - id: 24e68e0e3e61 - last_write_checksum: sha1:da54f299ef70a75e786a65c78bb331a8ad919487 - pristine_git_object: 8cad3f4121c60924b66a845931081e037e90e7df - docs/models/deploymentdetailresponseextendgcpstack.md: - id: 934c61c15278 - last_write_checksum: sha1:2e2c208660c0289689185dd69331d07118d9d896 - pristine_git_object: 6c15305bf1b1f30fc733672f029cd500f9cb5da0 - docs/models/deploymentdetailresponseextendplatforms.md: - id: ac38683843a6 - last_write_checksum: sha1:d361790f509460399ab4d9f7f9d995bb9e71a75b - pristine_git_object: a0473f156561f989be67e82e38e30c043757425d - docs/models/deploymentdetailresponseextendresourceconditionunion.md: - id: 93034b1a3f42 - last_write_checksum: sha1:c5df9e2f2de0636b4373cf66b9f470e1c0e99ec2 - pristine_git_object: 0b5e5216335df1a73eef2e65d294f92ef5bb2314 - docs/models/deploymentdetailresponseextendstackconditionunion.md: - id: 57934c6a1310 - last_write_checksum: sha1:bb7ef00bdce1a67dd3d916a889a0f026d30463f7 - pristine_git_object: 58883f707b4f235f46c54da1fa1cdb16a6194b2d - docs/models/deploymentdetailresponseextendunion.md: - id: edd8c0a8b87c - last_write_checksum: sha1:34110cf86f4cf48e80c30d1157311a53d8d8727e - pristine_git_object: fff71bf176eeeaa88ff206c1fd55af327e9349fc docs/models/deploymentdetailresponseexternalbindings.md: id: 9057d03ab118 last_write_checksum: sha1:449b20fdcdc6fd1c22b6de158b3ff07080533156 pristine_git_object: 95942807f971d672d5cdbfb2ac571d4c2f9e5223 + docs/models/deploymentdetailresponsefailuredomains1.md: + id: cf9598c1439f + last_write_checksum: sha1:6cba627d730d86c25304b9eb916d8d0123234fb0 + pristine_git_object: 0238742e4ba2ffa7e8c06e4f4dcf86703a349462 + docs/models/deploymentdetailresponsefailuredomains2.md: + id: 774bd555732e + last_write_checksum: sha1:a4137ae1d787e917c01fcee129bdb965ca1a5aa4 + pristine_git_object: ae7931048f9c38c211dfe795562da8516f01c5fa + docs/models/deploymentdetailresponsefailuredomainsunion1.md: + id: f234527f13a8 + last_write_checksum: sha1:33efec8133ed8bcf42f9c10c6ae915f4fd83b429 + pristine_git_object: 45932b2475c906ed5585a22eb90480200cfd60bc + docs/models/deploymentdetailresponsefailuredomainsunion2.md: + id: fd267228823c + last_write_checksum: sha1:58cc0146a8247ce9ccc2e629c03992c1aa57bf47 + pristine_git_object: f31ba3b2a27efbd19380cc793d895e6ef66a7bf6 docs/models/deploymentdetailresponsegcpstacksettings.md: id: feccced930d4 last_write_checksum: sha1:e35bdf553f2022767c7159ac29fe2ded1d937227 @@ -4474,14 +4450,6 @@ trackedFiles: id: ed69aa0792f8 last_write_checksum: sha1:b854e9c779eeffd6c5768e5bc3434b357cf76565 pristine_git_object: e3292701a6938b0048d314c640ded60d11b51611 - docs/models/deploymentdetailresponseinput.md: - id: 138c8d395567 - last_write_checksum: sha1:f772a0aef790d9c0db3bf228188b0966fd292a2f - pristine_git_object: 014b0801e7462b649c8ff2c00e4969351f408a52 - docs/models/deploymentdetailresponsekind.md: - id: a67606a4d660 - last_write_checksum: sha1:4aa62641d6ddf10b8b84c8eb72163ac0aab33758 - pristine_git_object: e183d12aa56e9e14193234232dd95f27de706429 docs/models/deploymentdetailresponsekubernetes.md: id: 5d8c298959ae last_write_checksum: sha1:436bbd071c9d3fe985add3300661717ffc8d2e0e @@ -4498,22 +4466,6 @@ trackedFiles: id: ef4f0f6ce5d3 last_write_checksum: sha1:c7cf034c1756258624e3d77d4ae1f86e3af53248 pristine_git_object: 5af2a020d9b55a492f6cc14e9e5311d67b27cbb0 - docs/models/deploymentdetailresponsemanagement1.md: - id: ce4103614205 - last_write_checksum: sha1:dd8ce120e703aa718968153d6e57f6a5abd43a9d - pristine_git_object: 7c2345b1be1ef528ede771593b3432179851db9a - docs/models/deploymentdetailresponsemanagement2.md: - id: a4661887a243 - last_write_checksum: sha1:9b6121f2cb035482f39bfe691f4a544cecfa3dc9 - pristine_git_object: ea22791df42fa08f94a6e2c7b12bb73034c8d2a8 - docs/models/deploymentdetailresponsemanagementenum.md: - id: 23b0a2562255 - last_write_checksum: sha1:09a04c00bb7ca6266b1931b590ecdcaad1506ba4 - pristine_git_object: a9c932982730d205c922098b2b85c3d3a238d735 - docs/models/deploymentdetailresponsemanagementunion.md: - id: 4253dc86062b - last_write_checksum: sha1:58422df96c19f6b12ef1ae34d46c1986a5835258 - pristine_git_object: 0bcce718754dbfe66cb81c4927f5a68e67061901 docs/models/deploymentdetailresponsemodecustom.md: id: 31a56006f52f last_write_checksum: sha1:3d96f63df506c7f9e60c254bbe0a767fe68b3bc2 @@ -4566,106 +4518,406 @@ trackedFiles: id: fd0cc6e279e3 last_write_checksum: sha1:8cd2db61b6063498a22d17a593707ddfe0db6b59 pristine_git_object: 288ba854f02521c0b8f3a4e63f8c390e999c0d01 - docs/models/deploymentdetailresponseoverride.md: - id: f336aa151b82 - last_write_checksum: sha1:9020ccc7d88be6e84b93b0cb6feeccd0d22ede02 - pristine_git_object: 071f7765e0638c13316983b5cfd49bfd0c3b92ce - docs/models/deploymentdetailresponseoverrideaw.md: - id: 5787561ddd12 - last_write_checksum: sha1:6891432c181741763966926c4559d3c53f8f11da - pristine_git_object: 700073994f7012d685c0f7e88890bc9ba4b89e4a - docs/models/deploymentdetailresponseoverrideawbinding.md: - id: 60a21e12947c - last_write_checksum: sha1:4e5f6baeb160dfd88e0b678ceb21d4acb52fbb31 - pristine_git_object: 04e0f75dc4de25fa46f9ff176482c1e6b02eda76 - docs/models/deploymentdetailresponseoverrideawgrant.md: - id: e756d201c593 - last_write_checksum: sha1:f1350fc32eb0e81f9e635308bfcacbd64c74673a - pristine_git_object: d6bfdf58506dfa6ad90d2d131c8b73053d39daec - docs/models/deploymentdetailresponseoverrideawresource.md: - id: 490f96801039 - last_write_checksum: sha1:b786f3ac04ea587385babcab4482cf862cb48972 - pristine_git_object: 819c0afc7a992aefe0ec94b363a376af781e386a - docs/models/deploymentdetailresponseoverrideawstack.md: - id: 6d038a087de5 - last_write_checksum: sha1:2efc4ee98255f0398f9daac402cd914469831f7a - pristine_git_object: 2afbef6a8d09030164f38e68232c8d1e7fe056d1 - docs/models/deploymentdetailresponseoverrideazure.md: - id: 97bf0e32c8e2 - last_write_checksum: sha1:a0ce55083d9ccc2907d037d67000380c4836a8bc - pristine_git_object: d754d5097b41f3d07bdde4ae364113449b5f589a - docs/models/deploymentdetailresponseoverrideazurebinding.md: - id: 8c92153786e6 - last_write_checksum: sha1:56dee61869e723ff56521fa1a09919b96b51d09c - pristine_git_object: 9563fad45d27b5f20413813b64f0a1068acf834d - docs/models/deploymentdetailresponseoverrideazuregrant.md: - id: 8baf5a0e7aec - last_write_checksum: sha1:2a4ff82e0623e80ddba891aa89ff9c5d6d5f39e5 - pristine_git_object: 83846b0aafd19f4aa35ff78e1a57b38e18d50918 - docs/models/deploymentdetailresponseoverrideazureresource.md: - id: 7f82421e1c26 - last_write_checksum: sha1:d7057d92fbad783956431909345055d838442fb2 - pristine_git_object: 0c30c43b06f839a35cab69b0d7f324c2d1ba853f - docs/models/deploymentdetailresponseoverrideazurestack.md: - id: f2224b5f7b64 - last_write_checksum: sha1:0e0bbfdac554523bd11d4cc5235bbc4868561509 - pristine_git_object: 7be375f03b6c2d4593daf74559405d569527aad3 - docs/models/deploymentdetailresponseoverrideconditionresource.md: - id: 083ae4c00bef - last_write_checksum: sha1:81a291d1685a003267f70a71ba1077b09a2ab968 - pristine_git_object: 7685ba33d2a8625ca64ba2e7e59a877bb6414057 - docs/models/deploymentdetailresponseoverrideconditionstack.md: - id: 57b2a6ebcbb3 - last_write_checksum: sha1:dade19477479c65edfe3db6d8ca2ac004d0d9b17 - pristine_git_object: d44f96a54484aff1cb5becdae20c235828f206c5 - docs/models/deploymentdetailresponseoverrideeffect.md: - id: 574ee0e6140e - last_write_checksum: sha1:620e0ed42cc523f3a78f06327f6798e7af439229 - pristine_git_object: bedb8d3a89d22e77fac2e42dbe8f042177ef554b - docs/models/deploymentdetailresponseoverridegcp.md: - id: 2676420d62cb - last_write_checksum: sha1:7bc657ac80c1136e7e416e97661fd79292f0f4d2 - pristine_git_object: 7e7e20fc319a326f93e1a75529a8d4c161d1a2b5 - docs/models/deploymentdetailresponseoverridegcpbinding.md: - id: 812f30c5a2f7 - last_write_checksum: sha1:b32940b7af435f7ebabfafd08b0881ae19ae95af - pristine_git_object: f96ea22549f735b1c8118785f077f53c55fcb8d4 - docs/models/deploymentdetailresponseoverridegcpgrant.md: - id: 4e1bbf920d10 - last_write_checksum: sha1:6782b2bc4ee6fd8a18307afb5d7178393aecce1f - pristine_git_object: ef844b1888ae71f499158c60486e0676af8fa689 - docs/models/deploymentdetailresponseoverridegcpresource.md: - id: 9b69d2487eab - last_write_checksum: sha1:9dbfcc999090360abc2dedd6fc6c4e17b6321e8d - pristine_git_object: 741e62b033b41e67ab4a7848a5a425903ad98387 - docs/models/deploymentdetailresponseoverridegcpstack.md: - id: 38d30040ab0f - last_write_checksum: sha1:0b41208742782373e750698f68d251effecd5ec5 - pristine_git_object: fb8511e55106863195d8dee7bfdd51443295ad21 - docs/models/deploymentdetailresponseoverrideplatforms.md: - id: b387235e66e0 - last_write_checksum: sha1:a65600769659e40de79f8d14e2c6bfa5858e94df - pristine_git_object: ccae4039390f9b810c61745a3a25a8ad78312ebe - docs/models/deploymentdetailresponseoverrideresourceconditionunion.md: - id: ff2ea980a63f - last_write_checksum: sha1:de6823833ebef8a820ea880bb9f27c7a207cc8ba - pristine_git_object: dc23b0b3f71883bd3127b0a704f3597cd5185075 - docs/models/deploymentdetailresponseoverridestackconditionunion.md: - id: 94686173ff64 - last_write_checksum: sha1:d724a64be6a2b53bf0de6e1a2d1b35d65e745a37 - pristine_git_object: 0b39721ed7e8951dc8d80def9bf508b2414cd1be - docs/models/deploymentdetailresponseoverrideunion.md: - id: f0e3e34ca27f - last_write_checksum: sha1:2f55e3b0667a85a2450c2da1504a6df197bc34c5 - pristine_git_object: 9f2a38d0ee7f51faed28e86e14ef365a0e7a18a0 docs/models/deploymentdetailresponseownership.md: id: cb03f50a4674 last_write_checksum: sha1:4ac16a50af2da6a506285606acf2edfebfe216c4 pristine_git_object: a5d81b7d1700dcc394656ea679e33e0470e3b176 - docs/models/deploymentdetailresponsepermissions.md: - id: 046b6d823240 - last_write_checksum: sha1:dc7f1737a60ca186c0ad1474716e51a17cca1928 - pristine_git_object: 095bee0cf5c70cbfec5053a201eee5601862ad5b + docs/models/deploymentdetailresponsependingpreparedstack.md: + id: c5675c00e95e + last_write_checksum: sha1:fda2d4a2b8a0650e7fe1dfda2497a44de79013a6 + pristine_git_object: 80c8e42160de805dd8cce1ebe69096b25468291d + docs/models/deploymentdetailresponsependingpreparedstackconfig.md: + id: a3b9257d7d67 + last_write_checksum: sha1:2a4d43aff18ae6a48ef09d473f5ca6c9d2b1ddda + pristine_git_object: 03fbfefe4f9a75a418187ac23bf604ce649cae39 + docs/models/deploymentdetailresponsependingpreparedstackdefaultboolean.md: + id: 9cd7a9c1d6ce + last_write_checksum: sha1:a2fb83f0ccf34a4017d3cbcc67e41f0fd705d0e6 + pristine_git_object: 990d94984f9c012939b7876351e771257a982fe1 + docs/models/deploymentdetailresponsependingpreparedstackdefaultnumber.md: + id: 8667a4e04884 + last_write_checksum: sha1:98517719bdf09f9b7eccda3c4bb1479aeb4db6b5 + pristine_git_object: 5b1f80a04e45cc934c4a0ce664700b7dbae93f16 + docs/models/deploymentdetailresponsependingpreparedstackdefaultstring.md: + id: c4d343937e30 + last_write_checksum: sha1:db3de4aa53dfb6f3c2859e47f29bae5eb51e1bf9 + pristine_git_object: f26ec2ce0d1e7545010409a2521c2b631f411905 + docs/models/deploymentdetailresponsependingpreparedstackdefaultstringlist.md: + id: 3a345a946303 + last_write_checksum: sha1:e3030dadb3ad39ad8e09060c5b12595f593895e0 + pristine_git_object: 4b9065406e4018b93589a7a276abfab5d69e8791 + docs/models/deploymentdetailresponsependingpreparedstackdefaultunion.md: + id: 604fcbf51410 + last_write_checksum: sha1:494a876db24e4fd6d80a160224e97b0d4c6ff9f0 + pristine_git_object: d0ffd66c3ec6a5df909538b24b158b7652d4d7be + docs/models/deploymentdetailresponsependingpreparedstackdependency.md: + id: 072e0bcd7a21 + last_write_checksum: sha1:a09f6580c57ab52c18dba4e28d0ff3af42eccc92 + pristine_git_object: 894698c794785f2846c9e4ccc1dc4134d6aa89cc + docs/models/deploymentdetailresponsependingpreparedstackenv.md: + id: f478d87019ca + last_write_checksum: sha1:b6bb23fe72ba5d0dd33c5932563e1e0abcac8a60 + pristine_git_object: 5f0c9847e7b6f75e12738caf001952361a75ee2a + docs/models/deploymentdetailresponsependingpreparedstackextend.md: + id: 5eabce8a2168 + last_write_checksum: sha1:8bd86d24a347314a9c8adb8958994b9e679578cd + pristine_git_object: 0ab2b0f5550e6aa3b8d933f4c82a6c0e67e11bd1 + docs/models/deploymentdetailresponsependingpreparedstackextendaw.md: + id: 8489c5f0c3d9 + last_write_checksum: sha1:2bf7045e6977db9ed628dfdd19091d63567b96c2 + pristine_git_object: e439a2dbe575b20475609b93976e1d68b743b3f8 + docs/models/deploymentdetailresponsependingpreparedstackextendawbinding.md: + id: 8b8e599d61ea + last_write_checksum: sha1:f4efde1aa3f728b83842009e02a9a5e5aeb1b000 + pristine_git_object: 6db00a02061e2559e84b5952529446e870344306 + docs/models/deploymentdetailresponsependingpreparedstackextendawgrant.md: + id: 02b8df797e78 + last_write_checksum: sha1:4ec51d6ce43cc453e06553b4811561aad7a39625 + pristine_git_object: 1917eb9c047aa04a7e10fc097b793d2b1d765f37 + docs/models/deploymentdetailresponsependingpreparedstackextendawresource.md: + id: e850851ad208 + last_write_checksum: sha1:976d8a6de22bb1f40e972506fca8c0190a81ff76 + pristine_git_object: e01d75207646f04b4980f9073ecedd50d8a36a25 + docs/models/deploymentdetailresponsependingpreparedstackextendawstack.md: + id: 01d15ae3a987 + last_write_checksum: sha1:35d31142c422b48cfa7e1242459c0ac6443ba356 + pristine_git_object: ad0e6dbf9f406bec10bd58bbe000f5953e125559 + docs/models/deploymentdetailresponsependingpreparedstackextendazure.md: + id: f5f431ab8556 + last_write_checksum: sha1:9e838d79f4f54abca2ea399c84adc397fbc1d9ac + pristine_git_object: 7565351b47ef7f2959227b4247dc7b2b03dd950f + docs/models/deploymentdetailresponsependingpreparedstackextendazurebinding.md: + id: 9483ed894c4f + last_write_checksum: sha1:4cb301b0e2cfb691a2c060e8ae51b732bccd2ea5 + pristine_git_object: d3b04821cda8f61791bfa2c2d850728891f6a459 + docs/models/deploymentdetailresponsependingpreparedstackextendazuregrant.md: + id: b770ebd74c93 + last_write_checksum: sha1:3138830eef7130cd6ef82f485d6e28e803d6e542 + pristine_git_object: 0dd79be074a3b3f68c931984d990e1e4aeeb17b3 + docs/models/deploymentdetailresponsependingpreparedstackextendazureresource.md: + id: 92dee13adab9 + last_write_checksum: sha1:95b0eb7deb14c2b6b05bd0b588ba141e109ec872 + pristine_git_object: 69ec940d2bcf404d9cfd2e684dd8075d3dc68703 + docs/models/deploymentdetailresponsependingpreparedstackextendazurestack.md: + id: fba65cad2ca3 + last_write_checksum: sha1:c0803d28c5104c278502b0d400ae58216ece358a + pristine_git_object: e3f74188f2bbb04bbe6f8d55bdf7a5b60ac85e39 + docs/models/deploymentdetailresponsependingpreparedstackextendconditionresource.md: + id: 004b30012d78 + last_write_checksum: sha1:1179f535fd1a2cc59ff03dedc6d2a3a1f81bc1e3 + pristine_git_object: 52584177d91be827dba45795ce8a932d3918fac1 + docs/models/deploymentdetailresponsependingpreparedstackextendconditionstack.md: + id: f2d11c2aec2f + last_write_checksum: sha1:b3af4e4a9a4c4ff62c93e3e22011059fa85b6827 + pristine_git_object: 52034d60c7d0ec3492bd7c873a58e0cca11f16ab + docs/models/deploymentdetailresponsependingpreparedstackextendeffect.md: + id: f70a3a2ef778 + last_write_checksum: sha1:be005c4be703f3a96ec799d54a4aec25f04cc83c + pristine_git_object: 1fe8e6f28126f2208892d185907610802320dd21 + docs/models/deploymentdetailresponsependingpreparedstackextendgcp.md: + id: 3397828afe37 + last_write_checksum: sha1:fc344e3fc90f033e7d2768f7167d4bdd00586acb + pristine_git_object: 58267fb1acfd15bc4f1ef4c638b1c004bcad5f5a + docs/models/deploymentdetailresponsependingpreparedstackextendgcpbinding.md: + id: 178a27727564 + last_write_checksum: sha1:6de2816618e08a13990d1b55176bcf53a020fbf3 + pristine_git_object: deddf95e4d5751373b4508481b72d559e5b4a84b + docs/models/deploymentdetailresponsependingpreparedstackextendgcpgrant.md: + id: e8dd63e1bb78 + last_write_checksum: sha1:dba5471486fc030dba78a0c237e8a5f2ec4f532c + pristine_git_object: 12e859713b4a2cf6523e772ff136d88c70daf17c + docs/models/deploymentdetailresponsependingpreparedstackextendgcpresource.md: + id: bcd2f2f55059 + last_write_checksum: sha1:ec0960f63203854672647afae0b9bf527d3e4586 + pristine_git_object: d15347582ec8cfe7d3ffa93ff52cf93ff58a287c + docs/models/deploymentdetailresponsependingpreparedstackextendgcpstack.md: + id: c4a947d6ffb2 + last_write_checksum: sha1:61d8708727d4b52e284346ed5363f09c22a86983 + pristine_git_object: b26a9d517f4d94fb4f9a9dc63e1386f5b33a20eb + docs/models/deploymentdetailresponsependingpreparedstackextendplatforms.md: + id: 4053abf08206 + last_write_checksum: sha1:51b57a3bd0532b2eb86b3210486464a9386c0239 + pristine_git_object: 739eaf4443af9b098cb76984c015a16c57caf528 + docs/models/deploymentdetailresponsependingpreparedstackextendresourceconditionunion.md: + id: 88b37717fbb5 + last_write_checksum: sha1:4445d5d870ed8ae048ef6c003e13e4113cf173c5 + pristine_git_object: ec359941bac2f47a9000a52511aa2f367ca2c8a2 + docs/models/deploymentdetailresponsependingpreparedstackextendstackconditionunion.md: + id: 3a6e9fc2b7fc + last_write_checksum: sha1:621491f6d024c5687c598e6975bf3bcf62d206be + pristine_git_object: cbcb78a960e0c5539ae49f31b0095b6ae0e293cb + docs/models/deploymentdetailresponsependingpreparedstackextendunion.md: + id: 401ff3f5b0fd + last_write_checksum: sha1:31e67a323527b4ec7ad8298206be5a5e40560c8e + pristine_git_object: 9c75c80bc7a36a1710e7d8ad6122637b46ab9ad1 + docs/models/deploymentdetailresponsependingpreparedstackinput.md: + id: ddbd4449e3f8 + last_write_checksum: sha1:78ff32ac46e64ea02e7ce782c0a0db27774e51d2 + pristine_git_object: 84294b8d3a4895c18137c9ad5b2c3af929f86726 + docs/models/deploymentdetailresponsependingpreparedstackkind.md: + id: d7c8607862c3 + last_write_checksum: sha1:1e1ce67b8572fe8babd40f57e753ff4381a100e5 + pristine_git_object: c3e519079c8658dce93f5d94d7d5fda95da2c7f3 + docs/models/deploymentdetailresponsependingpreparedstacklifecycle.md: + id: 5061e655e4ff + last_write_checksum: sha1:62999d3b2adc9d48cffe3359db26e1499f9183ec + pristine_git_object: d1979ae56e45e555e983a1240b975c2233e9a057 + docs/models/deploymentdetailresponsependingpreparedstackmanagement1.md: + id: dc75ff8fa1b5 + last_write_checksum: sha1:69df043a28e750231c1a9a923eeb9aa22533f2f3 + pristine_git_object: ef71fb0646091df0a965683303ffe9fc08717ed6 + docs/models/deploymentdetailresponsependingpreparedstackmanagement2.md: + id: 0f83a2fd6208 + last_write_checksum: sha1:0e76e62ea53f89e6f6421be1c9a608350ba9c2e7 + pristine_git_object: d92d2231ea28081bf83266c6d72ceaec86e23a72 + docs/models/deploymentdetailresponsependingpreparedstackmanagementenum.md: + id: a7acf01dfa71 + last_write_checksum: sha1:b7ffdd918e695b5fa56d8edf8c13712a978b41e6 + pristine_git_object: f123238cc5984f9e9d4aa34a3a065308eb0d4ee1 + docs/models/deploymentdetailresponsependingpreparedstackmanagementunion.md: + id: 4330cd085eaa + last_write_checksum: sha1:e998f8de635229730bd4a9c235cf72bbd1653acf + pristine_git_object: ad683568cedd485ea08c19c0ce1a03a24365bf46 + docs/models/deploymentdetailresponsependingpreparedstackoverride.md: + id: bdc910c86d7e + last_write_checksum: sha1:36828c81b3b53cc20aec88deb219a48b9a8706a7 + pristine_git_object: e68296489eb6223807fd4a03800ee609ae6807a3 + docs/models/deploymentdetailresponsependingpreparedstackoverrideaw.md: + id: 4be779ae5553 + last_write_checksum: sha1:8f8f81f3090673af5b88479b88661fe06ed140b2 + pristine_git_object: 28cf469b7e91beeed2d5a5500da2382dd10e0716 + docs/models/deploymentdetailresponsependingpreparedstackoverrideawbinding.md: + id: 233e32eaebae + last_write_checksum: sha1:e1ddcb7f845badd17f6a84d619e11be07ad3d8ac + pristine_git_object: dd235271c6ebbe6f3a83efeb9af53717a884a975 + docs/models/deploymentdetailresponsependingpreparedstackoverrideawgrant.md: + id: 60d6c054d833 + last_write_checksum: sha1:af74a5de38bc660ac0b95737d9987f0cd49ca1ba + pristine_git_object: b4ed3dfcb7c67fffae3c1c7b5e908450c97e852c + docs/models/deploymentdetailresponsependingpreparedstackoverrideawresource.md: + id: c86193edd3e1 + last_write_checksum: sha1:c20c46dbd17af00b042188dff02e037723719f80 + pristine_git_object: 3fc01b86dd84791c337c212728ed1c836e7dce26 + docs/models/deploymentdetailresponsependingpreparedstackoverrideawstack.md: + id: 4702faeec104 + last_write_checksum: sha1:cd471e5b2ad626b5044585324de2f056de1cb035 + pristine_git_object: 2e37b8c6e4b7a172326cf3f706392de56cc8d8dc + docs/models/deploymentdetailresponsependingpreparedstackoverrideazure.md: + id: ba7a834f22d4 + last_write_checksum: sha1:af742f0c43ef37745fcfb34363b5341632a44649 + pristine_git_object: 130447ebede5be146fbc81eef226255db3eac811 + docs/models/deploymentdetailresponsependingpreparedstackoverrideazurebinding.md: + id: c6bdcb8ffcea + last_write_checksum: sha1:d95024a3a37e9c19c223e2babd9c61db94a5b803 + pristine_git_object: ea9f62a0449f7a0ecd044bd8f31091bdf88900b0 + docs/models/deploymentdetailresponsependingpreparedstackoverrideazuregrant.md: + id: f7cac55cced8 + last_write_checksum: sha1:b7ae9a61929ffe2a327a2882f33fbc977b464d8e + pristine_git_object: c7e8e7f21ba94fef961cce12404fccbcbd5eb19e + docs/models/deploymentdetailresponsependingpreparedstackoverrideazureresource.md: + id: 6db550dfaf09 + last_write_checksum: sha1:83f712d7efb5a324f29967385f748ac843eaf008 + pristine_git_object: f1475b93b07fa020875ea0bece038f4d860587a8 + docs/models/deploymentdetailresponsependingpreparedstackoverrideazurestack.md: + id: e90a2fd16953 + last_write_checksum: sha1:eb84a87899b891c1d461dcd3adc1f861f0ad356d + pristine_git_object: df474623f09e91af8d312dbca7b149aa0682e7cf + docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionresource.md: + id: 2f6f436998cd + last_write_checksum: sha1:eee8e927cad10ee190f942809e6d0ef2e4e7f361 + pristine_git_object: 26b500207c19e40e6380ea8607e7dbdf323de902 + docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionstack.md: + id: 1d7f03916a6b + last_write_checksum: sha1:e693f43f55dd64bea1ac835f12d250cfd19c2ca3 + pristine_git_object: 53a6f4d9c37bb2401d2256bd38fcc185fb011d91 + docs/models/deploymentdetailresponsependingpreparedstackoverrideeffect.md: + id: 2d74941412ec + last_write_checksum: sha1:631a979428198bb0868596b0791499218448b91d + pristine_git_object: fc009bcf06647e08d0427f02f0a2bc48fa2c13d9 + docs/models/deploymentdetailresponsependingpreparedstackoverridegcp.md: + id: 09c8fa379606 + last_write_checksum: sha1:feb42a597a15b2b77fd2235f76c07cfb30c1d084 + pristine_git_object: 78c17b9a0c9777f6b894590f581fd962e5d0af68 + docs/models/deploymentdetailresponsependingpreparedstackoverridegcpbinding.md: + id: e4fa645ebdd7 + last_write_checksum: sha1:16949679862fb274feee6648d0ae08637a1c4f09 + pristine_git_object: 3cc70cd5893fe87037fe9ff32c73e71e426f8c16 + docs/models/deploymentdetailresponsependingpreparedstackoverridegcpgrant.md: + id: 512cf8c36974 + last_write_checksum: sha1:4c293efd3d1886f1e4a2a4035306caf3357276f6 + pristine_git_object: 7849d83b273aa3ed49eb21a877ac48b7929c4afa + docs/models/deploymentdetailresponsependingpreparedstackoverridegcpresource.md: + id: ffdef4e2dc3c + last_write_checksum: sha1:6ce7909e0a4cd13dbd9dedc865371ae527165947 + pristine_git_object: e8c44c95f8ee3d14922d2548447147c9f5dcdc49 + docs/models/deploymentdetailresponsependingpreparedstackoverridegcpstack.md: + id: 50edaafe34fe + last_write_checksum: sha1:9d637f8892951b19e22b85fc5fe614d6c86c7628 + pristine_git_object: 504c6dfcc96e01acb592daf0885fba0e7bef397e + docs/models/deploymentdetailresponsependingpreparedstackoverrideplatforms.md: + id: ad5a9020ea85 + last_write_checksum: sha1:f0eee048832ff4eebd237570cf10b54e9cd2d06e + pristine_git_object: 4ed80a275e00a827013bb5df50d3235e581358c1 + docs/models/deploymentdetailresponsependingpreparedstackoverrideresourceconditionunion.md: + id: 0be98f5922b0 + last_write_checksum: sha1:829b5253318b872aa80204506203f1431f04ff07 + pristine_git_object: d826687cb5080cbd803261a1a3a5e10a9f560bca + docs/models/deploymentdetailresponsependingpreparedstackoverridestackconditionunion.md: + id: 8fcd2b470f97 + last_write_checksum: sha1:03647201a4577b79e7c2c92b3ad2dbb01704831b + pristine_git_object: 29bed72190bb78981853896d68f0d2716819252a + docs/models/deploymentdetailresponsependingpreparedstackoverrideunion.md: + id: ec38224b875f + last_write_checksum: sha1:73d55af71ffd5d82411b82dca23d369695a2e65b + pristine_git_object: 6439d00c014e146174a479b410f2ec191b455c32 + docs/models/deploymentdetailresponsependingpreparedstackpermissions.md: + id: 30840be1f4e4 + last_write_checksum: sha1:f43dc402e5c43e144d545f6e9b22d53ddf492792 + pristine_git_object: f5099da5147d96161d4b07d737e261c178ebb005 + docs/models/deploymentdetailresponsependingpreparedstackplatform.md: + id: a40f6ec753b2 + last_write_checksum: sha1:52c6bdc30843f47f9d9a253693fef1a3305f2580 + pristine_git_object: 1f688a961c2ce3fc914112b56984d54e230e12b4 + docs/models/deploymentdetailresponsependingpreparedstackprofile.md: + id: 7ea4713a44f9 + last_write_checksum: sha1:37ab12ecb11d06f9e8fd9df93020816f71381340 + pristine_git_object: 32fcf38c29df09880a7bf07c5adee3247640be25 + docs/models/deploymentdetailresponsependingpreparedstackprofileaw.md: + id: 6f4269e4610c + last_write_checksum: sha1:3f99d83c19b166ac486f257c96e35bb612b136ad + pristine_git_object: 0f3bd2df493188e634a7a1888259829b6f3dfae4 + docs/models/deploymentdetailresponsependingpreparedstackprofileawbinding.md: + id: 1bebaec6f32e + last_write_checksum: sha1:7bbcb7e3313343a789e01ab77e6a31e7a314d2a6 + pristine_git_object: 438e251b548bd51b1c736721f21e071dd035c4f1 + docs/models/deploymentdetailresponsependingpreparedstackprofileawgrant.md: + id: b6156fc98c2d + last_write_checksum: sha1:14deb343cc395717d365ebdc596384fe1deb8f67 + pristine_git_object: ef9acd5b6b3eb53866c9610d7e9c13e6284d5542 + docs/models/deploymentdetailresponsependingpreparedstackprofileawresource.md: + id: 87d593a9ce54 + last_write_checksum: sha1:b55932e9e9254859347355486cf67fac8e43c494 + pristine_git_object: 1ce7173647802f756ff42b65edb65c87d0488ba3 + docs/models/deploymentdetailresponsependingpreparedstackprofileawstack.md: + id: 31862691cc8d + last_write_checksum: sha1:fb35993de2156acdf113a161fee4567afa40bd89 + pristine_git_object: 4599753a03844b55db1ba32fac7cb224d865d636 + docs/models/deploymentdetailresponsependingpreparedstackprofileazure.md: + id: 5590c0c11d48 + last_write_checksum: sha1:4ec838c1552e474c14e443780d8280f5a27c132f + pristine_git_object: 506cc5890b991b0548d69630ab3ecd53a36538be + docs/models/deploymentdetailresponsependingpreparedstackprofileazurebinding.md: + id: 5c7426fc1565 + last_write_checksum: sha1:45fda2c45513d3571504574007ec2a7b61f41b3b + pristine_git_object: a12a0e0b266817046021f6c6cc5956b0a7a817cd + docs/models/deploymentdetailresponsependingpreparedstackprofileazuregrant.md: + id: 46d68ff72f7e + last_write_checksum: sha1:8b0d4e26c5f3b4d2986f131b9a319f19f64bc223 + pristine_git_object: 87b4a051bca39d23554a398f392f79f7c60fd5d3 + docs/models/deploymentdetailresponsependingpreparedstackprofileazureresource.md: + id: 20b627f93456 + last_write_checksum: sha1:cf68674e4cc58b4f30be4854041e0030bbbb8a8c + pristine_git_object: 7aacb4dc1e18b4ca1bbeffd8ba656afd90674837 + docs/models/deploymentdetailresponsependingpreparedstackprofileazurestack.md: + id: 100724637cde + last_write_checksum: sha1:6b413e400da5f82683046efa15dce7ec03c39443 + pristine_git_object: 84b65980958039e07a442f657e9f89142b474abb + docs/models/deploymentdetailresponsependingpreparedstackprofileconditionresource.md: + id: 0694bbc8fd0a + last_write_checksum: sha1:44c272ba68681e1547677fdda2ef8253af44ee4a + pristine_git_object: cc7292ef83ff163b81c2826015303be4dd5f4d9f + docs/models/deploymentdetailresponsependingpreparedstackprofileconditionstack.md: + id: 4a8df0e885b4 + last_write_checksum: sha1:a54159c4a6adee143d24ee1e1eb253c09842f716 + pristine_git_object: 5352c19997f019f5f9afa0f531ca1b51d8a3df02 + docs/models/deploymentdetailresponsependingpreparedstackprofileeffect.md: + id: 23d08818d0e0 + last_write_checksum: sha1:b112e1442dc0e6766c973c0a69554238f1e36a30 + pristine_git_object: 0c26861119e4686c72cf28e5cbdcd88475990e8a + docs/models/deploymentdetailresponsependingpreparedstackprofilegcp.md: + id: a6ec5394590d + last_write_checksum: sha1:89b8a52fd123c174b26afa9795100a36029ee335 + pristine_git_object: 2c944cd903bea2423763ae538682191663da260d + docs/models/deploymentdetailresponsependingpreparedstackprofilegcpbinding.md: + id: 47a5a5f3373a + last_write_checksum: sha1:7bfb6fbc65b29f131b2b3424c73d35df2f626ef0 + pristine_git_object: 7cf76cdeaf49cc2834d21294cfa5dd18eb75d7ad + docs/models/deploymentdetailresponsependingpreparedstackprofilegcpgrant.md: + id: 1e1ca31f9258 + last_write_checksum: sha1:c54bfbc8142269dce04cbc9b20fff5125a6c0897 + pristine_git_object: 924ded4c716425fdcd6983a4fa3a0d3b0f387a7a + docs/models/deploymentdetailresponsependingpreparedstackprofilegcpresource.md: + id: c79b64d3766b + last_write_checksum: sha1:d01992f62584f6f63a51c3675f54a96717f5fa28 + pristine_git_object: 5d2e9123a547e70c5a2a3450d17cd2766ae9f659 + docs/models/deploymentdetailresponsependingpreparedstackprofilegcpstack.md: + id: 0e944afc068f + last_write_checksum: sha1:bb7b44f44ceca9d4714fbd2b1e22d165c1479ea3 + pristine_git_object: 56bb8e0b9fa25a6709c9f70359e296c111ee4a8c + docs/models/deploymentdetailresponsependingpreparedstackprofileplatforms.md: + id: 869ba64fdfb4 + last_write_checksum: sha1:927c39050435a0e44502e297514b31ccd88e677c + pristine_git_object: 36d9984c2a8f8c045bbf2abef572f89965770e70 + docs/models/deploymentdetailresponsependingpreparedstackprofileresourceconditionunion.md: + id: ca5ebf647ec5 + last_write_checksum: sha1:b860c122ef9ce5a40bbc482f2f45b458f720682c + pristine_git_object: 11a13118bd84668fc2aa9258bb46eda60ea8f553 + docs/models/deploymentdetailresponsependingpreparedstackprofilestackconditionunion.md: + id: 5c7f86eab88c + last_write_checksum: sha1:13ed3f7f5c3ce8cc321f690546407b668e10db27 + pristine_git_object: 4936d6767f2ab2960c432f863fd57b22e8502340 + docs/models/deploymentdetailresponsependingpreparedstackprofileunion.md: + id: 10318e79c2e6 + last_write_checksum: sha1:4f2f783d06c36596f55db61d2b5b9409db83b4fb + pristine_git_object: c4180e448c96eccee5565ddad792ad0eba49c70e + docs/models/deploymentdetailresponsependingpreparedstackprovidedby.md: + id: 3300b4e32542 + last_write_checksum: sha1:0f318bb1c5acd96d5d311be011fa44b41852f468 + pristine_git_object: c3f1a6b0e89c5b76a92453ed6edf57117dc9cbcd + docs/models/deploymentdetailresponsependingpreparedstackresources.md: + id: e28d69b09535 + last_write_checksum: sha1:644dfd45d5270e793e1cde60fe77e84ec29c57c7 + pristine_git_object: 8c265c517a2811da51ff9a0351795781eb3242dd + docs/models/deploymentdetailresponsependingpreparedstacksupportedplatform.md: + id: 2e2707ba0224 + last_write_checksum: sha1:047d3af9eadf213436a7ce2df8310f2f4c646782 + pristine_git_object: afcb3ce768c14371c4f93ca54141b46e133bb309 + docs/models/deploymentdetailresponsependingpreparedstacktypeboolean.md: + id: a3ca941b80c5 + last_write_checksum: sha1:c3fc69439b012ebd5dd53585564daebc75181333 + pristine_git_object: 280a9152a34c4ca15c6228a0a5d4d62b25c0bebf + docs/models/deploymentdetailresponsependingpreparedstacktypeenvenum.md: + id: d3b9a71fb037 + last_write_checksum: sha1:abcdd0afee7dd85b78d0d35f8866de66a2059494 + pristine_git_object: 3817fb2b77068e4a59cd02345bfc6bad152b843c + docs/models/deploymentdetailresponsependingpreparedstacktypenumber.md: + id: bb8152aee29e + last_write_checksum: sha1:388378d03622a2652eba0cfe6f5b4bd3b581d841 + pristine_git_object: 8c1081a4a420d2abc9039157a1315459a9cf7580 + docs/models/deploymentdetailresponsependingpreparedstacktypestring.md: + id: bb0f7c6fd37f + last_write_checksum: sha1:8f68fe2ed5003b251ff0c19be49e73143da9acf5 + pristine_git_object: 4a7d682efc9bbdc4cf560b6863b65c4a880def26 + docs/models/deploymentdetailresponsependingpreparedstacktypestringlist.md: + id: 55c7c287f643 + last_write_checksum: sha1:c952d2b8b6b3d6cd65ecbc057afb6e55268ea789 + pristine_git_object: b7ca831f53523b2fecdf291f47ccd37db3a97815 + docs/models/deploymentdetailresponsependingpreparedstacktypeunion.md: + id: 8a74135b6a1d + last_write_checksum: sha1:5eacf4724a4de1d94735e1c9841ae15f9bf90dc3 + pristine_git_object: 58ca2a7737571ec8fa736f5df4e4a0c582d65918 + docs/models/deploymentdetailresponsependingpreparedstackunion.md: + id: 273aa3c40662 + last_write_checksum: sha1:138388899caf6a94612074ae56906b58cfcf8f79 + pristine_git_object: aee9f6ab48d8ee056e771f2492d8f0cc1ed8ed98 + docs/models/deploymentdetailresponsependingpreparedstackvalidation.md: + id: d6070a4cf306 + last_write_checksum: sha1:37c0027ebc99734f3c40eebcfb25e663424151b8 + pristine_git_object: c324fb315de9067224a29b56f8797dd994e3f43a + docs/models/deploymentdetailresponsependingpreparedstackvalidationunion.md: + id: 1f7aff87620d + last_write_checksum: sha1:5ec675eae7dd3355a27edac99192efd8e787bb14 + pristine_git_object: 57d4544c9045f49d3954f9e7a5937df1e705ce25 docs/models/deploymentdetailresponseplatform.md: id: f3d24ab5d14f last_write_checksum: sha1:e2a01cf66281ab939b3f8f399b49340a1def5a19 @@ -4692,44 +4944,412 @@ trackedFiles: pristine_git_object: e38ed1e779eb21f12bfc0d494c61c99cb9f0cd7b docs/models/deploymentdetailresponsepoolsautoscale.md: id: bcad5af95501 - last_write_checksum: sha1:669696a6a22c37377bb861ba0c48c205e8f7f15a - pristine_git_object: c4488832fe874bcb0b96205a6ea8cb4f05cf2a8a + last_write_checksum: sha1:b078a1242f39551827283d70574bd04569846242 + pristine_git_object: 510efd331d6be1f3af5195ee89ec4c06577e34bd docs/models/deploymentdetailresponsepoolsfixed.md: id: c350e7dc47c7 - last_write_checksum: sha1:7b017fa07e6c77835481974dea788980cb314e86 - pristine_git_object: f978ffc1a2948ce31f336864133475b1f57287e4 + last_write_checksum: sha1:c93dd1c38b9cc58c973f1b181e2bc227b098646c + pristine_git_object: bb98ee5e436d8841faab32c08a737cc5d760729b docs/models/deploymentdetailresponsepoolsunion.md: id: cc2d38f56cbb last_write_checksum: sha1:f4e51de8a39342326579c65bda41d60bb88ca3f4 pristine_git_object: ff4b57534738d4c64824ac027692e96d87e9acec docs/models/deploymentdetailresponsepreparedstack.md: id: 4f5cd431a210 - last_write_checksum: sha1:670217e9538cb6cc30745fbd1f5d3b92cac3812f - pristine_git_object: 7dddc9ca8b47c9a097eedb6d7d84f6a8618d1d20 + last_write_checksum: sha1:6052031c4c6b80234fe20e8c98c1a7c13987fdf4 + pristine_git_object: 33a1961385805cdf82275f345a8f045d7325e4aa docs/models/deploymentdetailresponsepreparedstackconfig.md: id: 433a700da80f last_write_checksum: sha1:046d411d2a34537b764667eec2d726f1ca4bf525 pristine_git_object: bb173a2bfe987c82efcce9b3bff85c0545dab1c8 + docs/models/deploymentdetailresponsepreparedstackdefaultboolean.md: + id: 9ae9c17681cb + last_write_checksum: sha1:59e91f23d11bc204067806b84b0280f9f75b0917 + pristine_git_object: d90bffe0ae82ea3e16e7dd4cd2c59cc8385fdb54 + docs/models/deploymentdetailresponsepreparedstackdefaultnumber.md: + id: 3a9c00e00840 + last_write_checksum: sha1:288fa97a91a97a2d0b7dfefc8b88c7e4534f10fa + pristine_git_object: 9413fea49d38530491f40a90b8377319314cca5d + docs/models/deploymentdetailresponsepreparedstackdefaultstring.md: + id: 33c8f6044356 + last_write_checksum: sha1:c607b367a3dada96fa77a7adbe3e860a639bbf5d + pristine_git_object: 71be20bf00f1993f125b8745a9e28a58e0c52f66 + docs/models/deploymentdetailresponsepreparedstackdefaultstringlist.md: + id: 367b33f84e11 + last_write_checksum: sha1:8290647bd21848902336ff28c81cc1d626d5567f + pristine_git_object: 2b0f6ea199cb67b3a1755a771c6c9ecde9c6c945 + docs/models/deploymentdetailresponsepreparedstackdefaultunion.md: + id: 93c466c41159 + last_write_checksum: sha1:e837b869e9b7f9317acb71bb916565ae47f7f408 + pristine_git_object: b46ea7c094c845814af13f7b7f7d3a0dad194a60 docs/models/deploymentdetailresponsepreparedstackdependency.md: id: 2d2ee6fd9b98 last_write_checksum: sha1:8e722a4adf419a569957c56ae0fd43a7efca0f52 pristine_git_object: 4e3608892f75746b5b43549b5912da4b0a48171f + docs/models/deploymentdetailresponsepreparedstackenv.md: + id: 6e079fab2b6b + last_write_checksum: sha1:227c188e7fcddd8d0df2b66be00f46c519a0efc3 + pristine_git_object: 34ac4f50094a3868578a3d5818d0a94b363b5be6 + docs/models/deploymentdetailresponsepreparedstackextend.md: + id: 39fdffe38929 + last_write_checksum: sha1:6dfaee7224b9c4b97aaa2679a7dfd2f5c994d334 + pristine_git_object: 1dce427a03c70addea8d8e9ff9cd08537ef173cd + docs/models/deploymentdetailresponsepreparedstackextendaw.md: + id: 0ae3d9adbbd4 + last_write_checksum: sha1:a9e355b1a8223b86bac972d90712b3170bed6a42 + pristine_git_object: 3aec505f9f2c4b503221a72dc8b484ae42650e8c + docs/models/deploymentdetailresponsepreparedstackextendawbinding.md: + id: ecb116b91b26 + last_write_checksum: sha1:e6d03b9625494b7ff591783309347f7823cace3d + pristine_git_object: c2e46873bd295afb309f71f476773e58f9c5a754 + docs/models/deploymentdetailresponsepreparedstackextendawgrant.md: + id: a91b4557d0cc + last_write_checksum: sha1:ee27cb5054d77734a7f8789e022ff93ba6ed3a07 + pristine_git_object: cdbe2ba851b8418e35260f45b8294c9d73950c33 + docs/models/deploymentdetailresponsepreparedstackextendawresource.md: + id: 8228ad9983ed + last_write_checksum: sha1:6beadd0f755b2936e42144ea821c5b7c44b4ae97 + pristine_git_object: 88b667660a687f979d88b2220d532ce80f7fcd72 + docs/models/deploymentdetailresponsepreparedstackextendawstack.md: + id: ce25294e5458 + last_write_checksum: sha1:0c056de712a647067c8e59100412abe317b5a089 + pristine_git_object: 6ff2c04fad16765f4f29ac789a5c68023e4264ba + docs/models/deploymentdetailresponsepreparedstackextendazure.md: + id: d67844195b24 + last_write_checksum: sha1:1655073d2b026695611614145b060b80e89821bd + pristine_git_object: 89e4e8b76a9daf6b7e243956f24fc28d445952dd + docs/models/deploymentdetailresponsepreparedstackextendazurebinding.md: + id: e6848995d768 + last_write_checksum: sha1:91c526af8dd3bea2be95a7a8768c68595f7aca5a + pristine_git_object: 46f5c46d697c9d5a90861ce8f81e3ef0c23a8649 + docs/models/deploymentdetailresponsepreparedstackextendazuregrant.md: + id: 3537992706f0 + last_write_checksum: sha1:c32e109822c1baadceadf786f12f997385036d59 + pristine_git_object: ed27f464081d7de7eb422efb2f3a3f8ee0357fa1 + docs/models/deploymentdetailresponsepreparedstackextendazureresource.md: + id: 5fab8f67c0a3 + last_write_checksum: sha1:7bed1ec3c9bf1a2a93826d9fcce8dfd66fa60113 + pristine_git_object: 5949ed8c45b1b75110e9bbd270b646b630fcf1f9 + docs/models/deploymentdetailresponsepreparedstackextendazurestack.md: + id: c231ede3f41e + last_write_checksum: sha1:9613aea248aae976e2ffd80b517faf1a17b5e93a + pristine_git_object: d0c18d2a726073436068a413528e5d52b1ffbae9 + docs/models/deploymentdetailresponsepreparedstackextendconditionresource.md: + id: 90d66d543621 + last_write_checksum: sha1:ea63e0b6e625b71bf628efbd915ea943ae2a67f7 + pristine_git_object: d852fd9fc44781bbd1ebb64cc8f492e91b86bc94 + docs/models/deploymentdetailresponsepreparedstackextendconditionstack.md: + id: ba60d468d3bc + last_write_checksum: sha1:762e94a8f5db707cf7eedb2d739da4829e4d374b + pristine_git_object: 82d44907e13a5f8986eab6bfb7cd1f3753e721ad + docs/models/deploymentdetailresponsepreparedstackextendeffect.md: + id: 1ea440a4ba8b + last_write_checksum: sha1:93ecbc749447ce7123a602c2f347da68a714b582 + pristine_git_object: aa205c2f24c34339af8636271a2e70e892442c04 + docs/models/deploymentdetailresponsepreparedstackextendgcp.md: + id: fa303c60987d + last_write_checksum: sha1:1162b9761fec8ce1507b081fc200258b233e57cd + pristine_git_object: bb5ccd9ae8fbd5e0cb01c942f10df6eae10e2d64 + docs/models/deploymentdetailresponsepreparedstackextendgcpbinding.md: + id: 8946c09e1922 + last_write_checksum: sha1:ffb3276c9d29d54c45371967f7a26dfc5a19685f + pristine_git_object: ca2d7bd1e4516436a256fbcc2eceea2a531b8f56 + docs/models/deploymentdetailresponsepreparedstackextendgcpgrant.md: + id: 5e858ffb56d8 + last_write_checksum: sha1:8694f490c185dbd131a063353670ffd715792525 + pristine_git_object: 68fa05bee097662c52f093b4a6d02444cacc06b7 + docs/models/deploymentdetailresponsepreparedstackextendgcpresource.md: + id: bd46943be596 + last_write_checksum: sha1:61c18755931afd067edb0cfda786a97b9e4e206a + pristine_git_object: c82dfcf0f01e750b2df059964c380a71468e055b + docs/models/deploymentdetailresponsepreparedstackextendgcpstack.md: + id: d314cc7a0a5d + last_write_checksum: sha1:5269834a284e9cb3111fb859e6a71311adf2498f + pristine_git_object: b99edf0b077e08d2701e11eaf127b6a2830955aa + docs/models/deploymentdetailresponsepreparedstackextendplatforms.md: + id: a52a25184b63 + last_write_checksum: sha1:850e163f50152fab244e226741062ed7eef61750 + pristine_git_object: b96ee68f6a58f9c3b6091c3c48e2a3a858b247dc + docs/models/deploymentdetailresponsepreparedstackextendresourceconditionunion.md: + id: 00dd6ae9727c + last_write_checksum: sha1:6dd49b00ea5ade884f7eec184edde2e57a0a989d + pristine_git_object: bd14e9fb69b0197f3bc8de5c4b92301cc7b20031 + docs/models/deploymentdetailresponsepreparedstackextendstackconditionunion.md: + id: 9f5b7bbe23f4 + last_write_checksum: sha1:c5469d6f3dd5ed84342d6500fea07d79661403b1 + pristine_git_object: ca206a5599eb2b8df00e32f5658625eb50321aab + docs/models/deploymentdetailresponsepreparedstackextendunion.md: + id: 10b386ace09e + last_write_checksum: sha1:2d52f207725788eba41d4fb01c850d2274cacf90 + pristine_git_object: 086d78944393ac8fec075fe5a97c873811e7dcbe + docs/models/deploymentdetailresponsepreparedstackinput.md: + id: 9e258abd1c58 + last_write_checksum: sha1:3154818f36fff8b8d249dcc35010dc2f53efeef9 + pristine_git_object: 27aaeac2e02eaeaa5d60653c57ce336fc76eeba8 + docs/models/deploymentdetailresponsepreparedstackkind.md: + id: 9b3bc3e3abb0 + last_write_checksum: sha1:382a41664767c1327b521fcfe9522496532b9f75 + pristine_git_object: 8b474144823307cf8fa50a707535c6d7f5378eee docs/models/deploymentdetailresponsepreparedstacklifecycle.md: id: dee4bcc11412 last_write_checksum: sha1:ab59d01238c849caecd585cd1c4849439fa82e1c pristine_git_object: 6aff0d010d87cadde14795b88dda4508f9d249ed + docs/models/deploymentdetailresponsepreparedstackmanagement1.md: + id: 0cf19b73c0a3 + last_write_checksum: sha1:10cd78d06ac7bbf965acee1ed9c6e618db92fba3 + pristine_git_object: 90fa6e480714e6db525f0ee70c4222edbf1e7079 + docs/models/deploymentdetailresponsepreparedstackmanagement2.md: + id: 3daedc19cdf5 + last_write_checksum: sha1:033b1a3fad0d1fa6a91d4e8f13684ca2b36038ae + pristine_git_object: 0c44ed07831b49b9055d8a8aaf0f2412d1afb21e + docs/models/deploymentdetailresponsepreparedstackmanagementenum.md: + id: 07348e7c16c6 + last_write_checksum: sha1:cae660f6b81006edddf1c2c5d394c895c5e6d258 + pristine_git_object: 045ff57a09f6c5aa8ca1ffbd6c2cc313eae29156 + docs/models/deploymentdetailresponsepreparedstackmanagementunion.md: + id: 3e70e3da3897 + last_write_checksum: sha1:4a45863e0709dfd5ac2b5eb6bd9a7fb97f232a97 + pristine_git_object: eaf1208a6d21ceac65dfbe2e4d48328574a5a09f + docs/models/deploymentdetailresponsepreparedstackoverride.md: + id: 340ac7ce2508 + last_write_checksum: sha1:0ad579017cfd2db32b3485a698580e59956e4a18 + pristine_git_object: 5cb305a7bb6c1e7040ccc05990ae5a5b74b2e42d + docs/models/deploymentdetailresponsepreparedstackoverrideaw.md: + id: 0d15da7262c1 + last_write_checksum: sha1:2969445df7e5e74c5a0624347d015c986d232864 + pristine_git_object: f5455792a676e9366f4cfcd1486aa22726dd236b + docs/models/deploymentdetailresponsepreparedstackoverrideawbinding.md: + id: af5352216b32 + last_write_checksum: sha1:15a0ddc8748ea8faf06f190d4954436ba2c292bc + pristine_git_object: 5731db8c2103ca8de8f35edf14f49c73b0427f8f + docs/models/deploymentdetailresponsepreparedstackoverrideawgrant.md: + id: 5bcec7da14d4 + last_write_checksum: sha1:9b97bd586667dd2f4b0a213de55810ef64e5351d + pristine_git_object: e3957414c361dbdd44dbcbdc0dc030985629c343 + docs/models/deploymentdetailresponsepreparedstackoverrideawresource.md: + id: 17d7fa7915e6 + last_write_checksum: sha1:2aaf6814bb19d44e6cd60d676288eea8d980134f + pristine_git_object: 7f024ef215af13513f7432166e286bd498d761bb + docs/models/deploymentdetailresponsepreparedstackoverrideawstack.md: + id: fbc871f69e32 + last_write_checksum: sha1:48f54076d54fce3805e7ac04c6b56b56e23e2fa0 + pristine_git_object: 0c377e4acc65795c7d35cd21c8c1f89e49dd8c47 + docs/models/deploymentdetailresponsepreparedstackoverrideazure.md: + id: df776b9f6fd6 + last_write_checksum: sha1:8daada5db6828ba4703ecd56a040cc8dd9c9c555 + pristine_git_object: 4b0009b60c64355c6e6cc2f298fa36bb17408689 + docs/models/deploymentdetailresponsepreparedstackoverrideazurebinding.md: + id: e2cdab8a9bcd + last_write_checksum: sha1:92e3b46cf1e9837335cd93b3e56aa1437b7f4194 + pristine_git_object: 44b8a3edf7ee5a27e0a4a32cf8af4714e949fa38 + docs/models/deploymentdetailresponsepreparedstackoverrideazuregrant.md: + id: fa8238b9adf1 + last_write_checksum: sha1:e697ee60404d2d4798a554358e24958dbe293621 + pristine_git_object: b33d02a2f0d467d27797d99fc3fb681a05d2290d + docs/models/deploymentdetailresponsepreparedstackoverrideazureresource.md: + id: 8d38952d1fb4 + last_write_checksum: sha1:72c6894cdf0484c1766b63a098486f2a39f73cb7 + pristine_git_object: d14f60d0083d3e407533a0f8b37ba5d1dc620d03 + docs/models/deploymentdetailresponsepreparedstackoverrideazurestack.md: + id: 6741c7c5a253 + last_write_checksum: sha1:e53d2d6e2890336e1b180c2643e054bf57e38de9 + pristine_git_object: 67acb1d100fc5284891d9c5dc48bc64ec896bd00 + docs/models/deploymentdetailresponsepreparedstackoverrideconditionresource.md: + id: f60e587e73eb + last_write_checksum: sha1:57cfce2a41e837f69a478aed46057f5641492928 + pristine_git_object: 2b3bd41b66b4733c290352ef3e56680f75d1d0df + docs/models/deploymentdetailresponsepreparedstackoverrideconditionstack.md: + id: 46a046a7264b + last_write_checksum: sha1:3405d9bd60885e03b1c86e0a0ea22fc2acdd7a97 + pristine_git_object: 115be1ff4dc98b88166edfb309c91e1dd83781ad + docs/models/deploymentdetailresponsepreparedstackoverrideeffect.md: + id: cd75f204b615 + last_write_checksum: sha1:0d0f21d9234e3bb2a6ce96b73b62991b39a46822 + pristine_git_object: 8ed1a3dce9329101862a3fe0a6beb15786d7eb5e + docs/models/deploymentdetailresponsepreparedstackoverridegcp.md: + id: cfc8ea1de279 + last_write_checksum: sha1:433d4f9b5336f6a98bec338a21283610dd10fe1c + pristine_git_object: 68f5738092001f08219e4f4c128592bfc1c759e5 + docs/models/deploymentdetailresponsepreparedstackoverridegcpbinding.md: + id: 13c1071fa98e + last_write_checksum: sha1:e919c32352af3078b8540b70069c380959fef36c + pristine_git_object: 31e35ad4bf9f3fafc5fb6590664feebd2fcbacbb + docs/models/deploymentdetailresponsepreparedstackoverridegcpgrant.md: + id: 0d727cf225c7 + last_write_checksum: sha1:8b3aebac8541e9ce96cc90c0b396fc8f4b6824a4 + pristine_git_object: bb78f507767ba032ff19266e07b443610243f8ac + docs/models/deploymentdetailresponsepreparedstackoverridegcpresource.md: + id: 44c501a58bd3 + last_write_checksum: sha1:7ecfbfcc303713e6534d551440ccfa73a55920d1 + pristine_git_object: bfba90745d1c0dfb3525f48ea13c4cdf746bb3d3 + docs/models/deploymentdetailresponsepreparedstackoverridegcpstack.md: + id: 517db9fd88f6 + last_write_checksum: sha1:2d0d915054bef23911b58403b451caa9cc6d5c15 + pristine_git_object: 82ef8182db88a823f7fca402d5fd93829640faa8 + docs/models/deploymentdetailresponsepreparedstackoverrideplatforms.md: + id: a774302fd3dd + last_write_checksum: sha1:52a2a9c990101f320bd0a6c770774edb74bbea18 + pristine_git_object: 07d701644ad1edb7f03e104f9e0d0198c819a94c + docs/models/deploymentdetailresponsepreparedstackoverrideresourceconditionunion.md: + id: ee1b1cc48dcf + last_write_checksum: sha1:05cccfd98974cef068ed6534dc2efabd24c8e80e + pristine_git_object: b15975996564c1588921acac10b0bfaa25b54a37 + docs/models/deploymentdetailresponsepreparedstackoverridestackconditionunion.md: + id: 252d214d4a46 + last_write_checksum: sha1:decc8d0579ea470f980f6a276760787ee0db3867 + pristine_git_object: 86edee39cef7b8c7216161a8f86bc8c062db53ba + docs/models/deploymentdetailresponsepreparedstackoverrideunion.md: + id: 5725e2a307f7 + last_write_checksum: sha1:c8c7ba09f139427aec1b005dae631db86d86b4f7 + pristine_git_object: 362aa8d999362beb835c2b75dcf00c27ff40d60a + docs/models/deploymentdetailresponsepreparedstackpermissions.md: + id: eae2a10c127a + last_write_checksum: sha1:594dd6bb064e44aa01ae3b768db0d75b17553878 + pristine_git_object: 09cf2461a54c4600fa7ed335a10725913630ede1 docs/models/deploymentdetailresponsepreparedstackplatform.md: id: 853d0259f05a last_write_checksum: sha1:ce9a5948fac337143ce691d22582712f2acd3070 pristine_git_object: 053564e5c3c3e29ee6ccbdd73c902c53a1720753 + docs/models/deploymentdetailresponsepreparedstackprofile.md: + id: 3a69b52067e7 + last_write_checksum: sha1:f89e87c2275fe899ced73ef95317c3e9fc21098f + pristine_git_object: 6eaff449c8c056d8f2ca7a0dab1f35500aa050cb + docs/models/deploymentdetailresponsepreparedstackprofileaw.md: + id: 5e2082c6e800 + last_write_checksum: sha1:a0f5848d4a9e7dd78b4eabdef1bf305f23c2cf91 + pristine_git_object: b57c493e77a884956626d0ddf5eea112b7e6a8d9 + docs/models/deploymentdetailresponsepreparedstackprofileawbinding.md: + id: e87ac87d3c1b + last_write_checksum: sha1:41f799c3c30c7f99783a7a60d38e1268ba4605a7 + pristine_git_object: 7978c9e0684f7a6741551c6439120e3a1952ae47 + docs/models/deploymentdetailresponsepreparedstackprofileawgrant.md: + id: 74225bc3bea6 + last_write_checksum: sha1:7f693dd69cb298cda91eb5f1e40a4fd0978a885b + pristine_git_object: 883789c34453ba0161036d12327060c10bd4034a + docs/models/deploymentdetailresponsepreparedstackprofileawresource.md: + id: 2a660e45665b + last_write_checksum: sha1:97ebeb86bfb4df89a814cc8a51925ef50ed81613 + pristine_git_object: 6f2bbdeb81bdd23d1c4b0785ecb9de17f9459c38 + docs/models/deploymentdetailresponsepreparedstackprofileawstack.md: + id: ab4ac8517c52 + last_write_checksum: sha1:6cee5b7f7cecb638c1ca4578f5a0cb9537dc9280 + pristine_git_object: 1a230eefdfc791ca432040aa1e19af1d96a9adf6 + docs/models/deploymentdetailresponsepreparedstackprofileazure.md: + id: 47fbcd4616b3 + last_write_checksum: sha1:1367ab4133853482480af149e907f64e5606dacd + pristine_git_object: 3b07cf87441abda2dc9fce6540c345b70cde23ea + docs/models/deploymentdetailresponsepreparedstackprofileazurebinding.md: + id: 09a4c5b95017 + last_write_checksum: sha1:5702f54eacbce3fe92e151c92917dcb5f2511cf5 + pristine_git_object: f023f98e2ee45573fc7ec7d2cd4f5d2b841f8845 + docs/models/deploymentdetailresponsepreparedstackprofileazuregrant.md: + id: ea59839a4428 + last_write_checksum: sha1:8d71386ad71f4559ede774c4d648c92dd3c92532 + pristine_git_object: 16774ed3a907433514ae01037059603e0783fcbe + docs/models/deploymentdetailresponsepreparedstackprofileazureresource.md: + id: 3a997eb4c31d + last_write_checksum: sha1:55bb157741324f44633a37004c074d98cd32d40e + pristine_git_object: 827775088ecd6fae54c7ca57571fe1e3379f68de + docs/models/deploymentdetailresponsepreparedstackprofileazurestack.md: + id: c3902dfd0dc0 + last_write_checksum: sha1:a2a349d2151bfc5345d2a9d0fe55538962524b01 + pristine_git_object: 539a4e56f12db9685189489cd05d7c4913ae5ed3 + docs/models/deploymentdetailresponsepreparedstackprofileconditionresource.md: + id: 96fea8356a79 + last_write_checksum: sha1:5e8b1aa61859db3a77317227f341c0de5e44d10b + pristine_git_object: f3e27b3ec82e6bed14765dc4d427415df01faf85 + docs/models/deploymentdetailresponsepreparedstackprofileconditionstack.md: + id: e80dedba4e88 + last_write_checksum: sha1:441ff357b6b591b62c9f63b9a610dbc80c759565 + pristine_git_object: ac73de7813d2a1b3a26ef92ca1044667c7cb6582 + docs/models/deploymentdetailresponsepreparedstackprofileeffect.md: + id: c8767aaaa343 + last_write_checksum: sha1:adb2f74e7785dd19df629b90b803512d24ddb207 + pristine_git_object: 2c534b17576aec44fef2d2e4e3b8f56231b9f85b + docs/models/deploymentdetailresponsepreparedstackprofilegcp.md: + id: f0a0daf52f6f + last_write_checksum: sha1:756ffa97a98563effa5680c15294115d411bc69d + pristine_git_object: 148709068487ed512c8c1addf4bebe1b9e9696b6 + docs/models/deploymentdetailresponsepreparedstackprofilegcpbinding.md: + id: ed8cd372c857 + last_write_checksum: sha1:03dc953799c6fc7cd5e7fd72026be1825847ffd3 + pristine_git_object: 0e29873a9414340bfebb2a9b1d3772c59e3d5e0e + docs/models/deploymentdetailresponsepreparedstackprofilegcpgrant.md: + id: add158028895 + last_write_checksum: sha1:29c01f42d6d1a7e1f08f658c74d43505ea8a843f + pristine_git_object: 2109f9699934257490e7a25379fc8910f684bbb8 + docs/models/deploymentdetailresponsepreparedstackprofilegcpresource.md: + id: 22a698354718 + last_write_checksum: sha1:a7709b97fd51d0deb62bfcfd998284f535164844 + pristine_git_object: b1864599d6adb9b283ae3eb17a0168ecc4a41b29 + docs/models/deploymentdetailresponsepreparedstackprofilegcpstack.md: + id: e6b82f1d9219 + last_write_checksum: sha1:dd6e27f57747bb21b0c6cc98c57c9b752a29d04d + pristine_git_object: b840f71f8abc1617830de9409edf52d616a031f1 + docs/models/deploymentdetailresponsepreparedstackprofileplatforms.md: + id: 2e0ad5b6cc84 + last_write_checksum: sha1:26f1270b4629591e0794cd8655f8f345eed6b407 + pristine_git_object: 30cab8f58712390c8d988206bcf61304b6a6052a + docs/models/deploymentdetailresponsepreparedstackprofileresourceconditionunion.md: + id: 1a35f942a9e8 + last_write_checksum: sha1:fc782bbb16c616861080da6a704fcce810efe98e + pristine_git_object: 8234a69455d7cc3e72268468b69448435b899745 + docs/models/deploymentdetailresponsepreparedstackprofilestackconditionunion.md: + id: b3de01b3698c + last_write_checksum: sha1:aba984359191757bd750d2a378c2fd81ea53667a + pristine_git_object: e609207c5556ede6902e34235970c7c97c5ab97e + docs/models/deploymentdetailresponsepreparedstackprofileunion.md: + id: aac08dd7f563 + last_write_checksum: sha1:1744c2f46dc6b76455bffa24030565739c368ee3 + pristine_git_object: 10902d177e47aa06a3304168d10e4e216f49021e + docs/models/deploymentdetailresponsepreparedstackprovidedby.md: + id: 82a3d9b20a5b + last_write_checksum: sha1:1e1113f9a49c82ef25f7f284edcfa25b9dcc4332 + pristine_git_object: 77f81d407fcdf0b7139cde8ed3919237db02c28c docs/models/deploymentdetailresponsepreparedstackresources.md: id: 029bdce1ddff - last_write_checksum: sha1:f7324014eaefef6ba063cae20b3c183db5026d9a - pristine_git_object: d935c4eb330c1a302a9fca950889111669e06fbe + last_write_checksum: sha1:cf85b319e25fbf9ed032fae1f6b4e7c3c819a2b3 + pristine_git_object: 6bf4ba75e392a4bc3b8dd01b1a5de5ea754af9da + docs/models/deploymentdetailresponsepreparedstacksupportedplatform.md: + id: 46bdc42d9ca4 + last_write_checksum: sha1:44e04bf448e9fad0ccba6b056ac85077c4d314f7 + pristine_git_object: 059bc1fa47d428fba627fa5d3dcb97b7493fa41f + docs/models/deploymentdetailresponsepreparedstacktypeboolean.md: + id: 12af919e7c0c + last_write_checksum: sha1:ee5a577f1d4718effaeed26bc49a34ab1f92a799 + pristine_git_object: 4c572f55d35c6240906fde79680a33dae038e417 + docs/models/deploymentdetailresponsepreparedstacktypeenvenum.md: + id: 2ffba01eee7a + last_write_checksum: sha1:25be1b5471e4d33ddca224634610d948ce7342d7 + pristine_git_object: 325d9182cbe808d6e4dbf00ef2b16077c79c3291 + docs/models/deploymentdetailresponsepreparedstacktypenumber.md: + id: 4176cb0d816c + last_write_checksum: sha1:f3351f34343db41fb5cdbfcc66609db94f8a72bf + pristine_git_object: 3306e7f274ad895273ab6c73faf4bfedfaf263ff + docs/models/deploymentdetailresponsepreparedstacktypestring.md: + id: 5d64a8a1a2b6 + last_write_checksum: sha1:50563ec3473440b668161e35ec46e78d51a7a15d + pristine_git_object: bfe97bf0fe450ae4fa1373960764454862a6205b + docs/models/deploymentdetailresponsepreparedstacktypestringlist.md: + id: 6bc0d25dad09 + last_write_checksum: sha1:abb985a225aac2043b7665af481361dfc2098e11 + pristine_git_object: 932f5d3c4fa64998a6478d6a71634b3f6a76828a + docs/models/deploymentdetailresponsepreparedstacktypeunion.md: + id: f775d825d16f + last_write_checksum: sha1:60ef05d39318ead1cb1f3065aa95a29deeaf2b44 + pristine_git_object: 952fa573eb86e05c34a56a83b22168216b891f26 docs/models/deploymentdetailresponsepreparedstackunion.md: id: 52e1da15130a last_write_checksum: sha1:4d67a02c771917d812c818d79fb479b01e5dd612 pristine_git_object: fc16b8cb1ef13515bae6a293301d8c1c71cab8e1 + docs/models/deploymentdetailresponsepreparedstackvalidation.md: + id: 7a76cf84f879 + last_write_checksum: sha1:114c56333848f061e4fe566e4ed79080c294898c + pristine_git_object: 6cf60af5c18f8e012cd8815992d514f7948e5392 + docs/models/deploymentdetailresponsepreparedstackvalidationunion.md: + id: 8fe6e0e72aed + last_write_checksum: sha1:8582f1ca6efdac888fd95ff3736b8450bd42c282 + pristine_git_object: 7fda6eb05b546185ee1fd467a143ea7044f2e57e docs/models/deploymentdetailresponsepreviousconfig.md: id: f69f69f15286 last_write_checksum: sha1:d6300e5a49569630a4728715b9cb7d2a62ffa800 @@ -4738,102 +5358,6 @@ trackedFiles: id: "429325394931" last_write_checksum: sha1:74e0b05fae2eab2c8640a069e7959d860d41aa80 pristine_git_object: 3de62c9201c62bae5c88da7282b5d82ce8f50f43 - docs/models/deploymentdetailresponseprofile.md: - id: e5dd409e53e7 - last_write_checksum: sha1:48a26515119d2abf56135c399dd6a6249e7283b9 - pristine_git_object: 8c37cb01efe537db22bb36e5af954af1af372af1 - docs/models/deploymentdetailresponseprofileaw.md: - id: ab6b650e8f07 - last_write_checksum: sha1:9d38e6617f57b24d9465db1f43fa775d7478f26e - pristine_git_object: 066acad94ee62399915647b05407a29d3fffc39e - docs/models/deploymentdetailresponseprofileawbinding.md: - id: e4ab0c200bb9 - last_write_checksum: sha1:0c355b180990f8c42e9c5db41a0826f30e12fe72 - pristine_git_object: c51fbe38e3a8a98aae56324208e10419ae8e57b7 - docs/models/deploymentdetailresponseprofileawgrant.md: - id: 1c5ef7af15d7 - last_write_checksum: sha1:4040bc1eb360b9cda7e79f2a6ec6936f539654cf - pristine_git_object: 3e45a26dd0860eba15202663333d73becf5a75a9 - docs/models/deploymentdetailresponseprofileawresource.md: - id: b042ceb27810 - last_write_checksum: sha1:0ba32d5ece244b0f3a620190558e34fee2089241 - pristine_git_object: cf04e1ff82af11392ee0b200bbf31ba403b58f0b - docs/models/deploymentdetailresponseprofileawstack.md: - id: 4564261882db - last_write_checksum: sha1:7db71e772db84a372073cc66e25b2458f2863b10 - pristine_git_object: ccaaa7b84490b744d11fce7510ae27c6449d7728 - docs/models/deploymentdetailresponseprofileazure.md: - id: 87865cd51db0 - last_write_checksum: sha1:150606fefa1d66ed706d35903ce659defaeef16e - pristine_git_object: 35c0493b602263a2c2f02d77482d6f1d813b9948 - docs/models/deploymentdetailresponseprofileazurebinding.md: - id: f42dfe31133e - last_write_checksum: sha1:bf263dd8b005f4b0e9e75364d9580489878b233d - pristine_git_object: 1b0b2d979df5677d6928dc773fab71de1a249efa - docs/models/deploymentdetailresponseprofileazuregrant.md: - id: 96f626723e8c - last_write_checksum: sha1:8ef213e3baf1d1c2b53ccf0fae062cfe7c4fb496 - pristine_git_object: 6352c4086855bb551144b687cc6a0009fc1fd07c - docs/models/deploymentdetailresponseprofileazureresource.md: - id: fae14c0bf128 - last_write_checksum: sha1:c0c183e74412ed843f326807216f36d291502184 - pristine_git_object: b11e6f90a4a98d596bd657291237922a959b2326 - docs/models/deploymentdetailresponseprofileazurestack.md: - id: bc4e4b15b802 - last_write_checksum: sha1:00f6f9128b3309f7312b00340680602160fd19be - pristine_git_object: e472bfc129b99bc2f62b0e0dead9b6cb41625375 - docs/models/deploymentdetailresponseprofileconditionresource.md: - id: 0e8005fc1d68 - last_write_checksum: sha1:9a381b974f8797a8f4a2f08ca0fbf0df2ac7feb7 - pristine_git_object: eb2c19d968f9e551a5dcbd9a98a6d7412d6bd703 - docs/models/deploymentdetailresponseprofileconditionstack.md: - id: 2eb913d8986a - last_write_checksum: sha1:8b6af234070930c7b3ee3c4083f9b71a4a0f094a - pristine_git_object: c73efb071305cee21d603f0ba437f0b1bf8f6b16 - docs/models/deploymentdetailresponseprofileeffect.md: - id: d77814ce595a - last_write_checksum: sha1:c88c8121b9654599e0b9cc6806e1c503819ba81d - pristine_git_object: d62e2054439ddce9c59201cd8d290e8cd306859f - docs/models/deploymentdetailresponseprofilegcp.md: - id: d91f432ebe8e - last_write_checksum: sha1:56109adf753524f5108497411dfb1aa533164478 - pristine_git_object: d3266af628706381d0657836fc70f2fbf05a3743 - docs/models/deploymentdetailresponseprofilegcpbinding.md: - id: bb7d1307ad83 - last_write_checksum: sha1:e04e12f61e7f2fc791c169e8e210b93d7641479a - pristine_git_object: 654cad612a766e191fe017a2b7c315068ef15f9b - docs/models/deploymentdetailresponseprofilegcpgrant.md: - id: 646bb01ea4e6 - last_write_checksum: sha1:3f83b68fc5ed8e52ad00da29de9a870f3154d5bf - pristine_git_object: 038fa473a8348b417b4b6ee04813db51848f2816 - docs/models/deploymentdetailresponseprofilegcpresource.md: - id: 6c241a05d8c8 - last_write_checksum: sha1:873dea4593fc069edb050cf2d0c8f0b347d9190b - pristine_git_object: c2a1a98289eb5c802c0714201ec43b51f1f11d1c - docs/models/deploymentdetailresponseprofilegcpstack.md: - id: 19ea359174b2 - last_write_checksum: sha1:f5fea67b0b4b536f6d0f7d83566dbbe16f7d18fa - pristine_git_object: 94f57e2f98f281940c9ba50f436419e55050852f - docs/models/deploymentdetailresponseprofileplatforms.md: - id: 225dbe0c1c95 - last_write_checksum: sha1:25e634e42765c7adc4720a1636fd8f65e2240917 - pristine_git_object: 770e063140e8be6087ef030f9c8c034527441561 - docs/models/deploymentdetailresponseprofileresourceconditionunion.md: - id: e187981a7821 - last_write_checksum: sha1:e06a0ee737abde891c76ff10162ba3f2d0cf341e - pristine_git_object: 1bf66e67c68f80e732be3a3dce56d5841f253c84 - docs/models/deploymentdetailresponseprofilestackconditionunion.md: - id: 74aef4924612 - last_write_checksum: sha1:ea3c79da78b936334e816e167e65cf9b473e8081 - pristine_git_object: 2c37ebe625e7ce7e582be67c9cf47918175df86e - docs/models/deploymentdetailresponseprofileunion.md: - id: 89c642ad18cc - last_write_checksum: sha1:3c546d4fb2d6d694655305bd75f61cae38e3932e - pristine_git_object: ca58c6f7699dd1868fc47a7bb0dab14bba4fea7c - docs/models/deploymentdetailresponseprovidedby.md: - id: b4a4498bbc3b - last_write_checksum: sha1:73c81444eb4edb2f5e221f294371b188e06a0eaa - pristine_git_object: 7c64aad2e8475025c67880b6fdfd746b13af4da5 docs/models/deploymentdetailresponseproviderawsalb1.md: id: dd250307a56b last_write_checksum: sha1:86e042ca23f1ab51fbeed85c0ff2b99c776ca749 @@ -4984,12 +5508,20 @@ trackedFiles: pristine_git_object: a55f7d0a49d51b89f2558f3be439bbc0667b47ed docs/models/deploymentdetailresponseruntimemetadata.md: id: 99c9d501c0f3 - last_write_checksum: sha1:6b13a8bd7a8778fcfc26812f955eb84106f5b569 - pristine_git_object: 347272d4b0617a1aeb7a6c90f2928ba0c052d901 + last_write_checksum: sha1:9cfa8b88f2d30c9f5e2af19f000722f446f14d5f + pristine_git_object: 76f9b440560df8b859303dc654c25f9f25eea643 docs/models/deploymentdetailresponsesetupmethod.md: id: a90909a89d17 last_write_checksum: sha1:c74703e20e65675919264821235c021350413c42 pristine_git_object: ec70e745a87da01df69850bd0f9f53020ede715a + docs/models/deploymentdetailresponsesetupupdateauthorization.md: + id: bdaea0f9677f + last_write_checksum: sha1:f8ee6041e0df8484516b5fee4ba831bef8be8322 + pristine_git_object: 7c177d2555b1b6568702d8cb633be7ae413b8301 + docs/models/deploymentdetailresponsesetupupdateauthorizationunion.md: + id: 8a6fdec76dba + last_write_checksum: sha1:40bda9d82d3ff20dc48453203bb984cf4c803646 + pristine_git_object: 38d4ae8f5e5d2443921fed19c7d779db9d1ae920 docs/models/deploymentdetailresponsestacksettings.md: id: 422d0568beeb last_write_checksum: sha1:6edb7a84c86e9686b29436df854299bb75fbda21 @@ -5005,7 +5537,7 @@ trackedFiles: docs/models/deploymentdetailresponsestackstatedependency.md: id: 966684e302eb last_write_checksum: sha1:2b7d8e3ddd89160ac5b581b0fdaa1b5a8891631e - pristine_git_object: 58fe38359495ee0febc104eaeb2ee38d883f6d3f + pristine_git_object: c950166b4d975ad6fa59fe2da89f63200bd92871 docs/models/deploymentdetailresponsestackstateplatform.md: id: 9c5482ad50d2 last_write_checksum: sha1:17a5e0fcbbe49a7c7ca21ab2c9feaad73f969b09 @@ -5022,10 +5554,6 @@ trackedFiles: id: 91903655c7ae last_write_checksum: sha1:c20d9f59ae7a340fc31f2bbc6401649f023b4343 pristine_git_object: 447b5e29eb2c75e2909e2e8ef8002e5a95933b22 - docs/models/deploymentdetailresponsesupportedplatform.md: - id: 21cffbfc08d6 - last_write_checksum: sha1:a712ca6d8a7ebd81a48e03caa23baa14f7876eb8 - pristine_git_object: 2fe773d2dec95899d89dec47943e36e059cc730c docs/models/deploymentdetailresponsetargetenvironmentvariables.md: id: 9dadea580a7b last_write_checksum: sha1:efc790cb92e71bd32b58d14baeb7c7a72c2a7d80 @@ -5038,10 +5566,6 @@ trackedFiles: id: 5fc74e4f4bf8 last_write_checksum: sha1:6758d6a073b3bb61fd83b58c2355c8a0ee346fac pristine_git_object: 35b3358a450f4f55db41bc913ff77a49aacfaff2 - docs/models/deploymentdetailresponsetypeboolean.md: - id: 2e0d5e3c42d2 - last_write_checksum: sha1:1e17a7c159acf40ee5f37126e90900839717c515 - pristine_git_object: 46ac28ffe4941028a3a1e48a76a05a21fb938c3d docs/models/deploymentdetailresponsetypebyovnetazure.md: id: 6f11adc68a0b last_write_checksum: sha1:7cf79ba5475c183eb87d1315506aa6e401f6f64a @@ -5058,26 +5582,6 @@ trackedFiles: id: 2e1a559f7278 last_write_checksum: sha1:2d2cdacd8b3e45f62ea4bf44ac5ccee6897bd636 pristine_git_object: 0a85a08aaefd1d7a7d1251dcba1fe73b0497c9fc - docs/models/deploymentdetailresponsetypeenvenum.md: - id: f412c6b61edc - last_write_checksum: sha1:a7ad3c1085b158453fbc4a726004b91e6f6f63e6 - pristine_git_object: 53138fbd969d6065963d7f37cb1a0b3fae53c90d - docs/models/deploymentdetailresponsetypenumber.md: - id: 572ff40fbe2f - last_write_checksum: sha1:8ad799536dc703c60377648e5ed566fdb993e025 - pristine_git_object: 0d5ae771f1160cb1a30a1287abae7f6890565797 - docs/models/deploymentdetailresponsetypestring.md: - id: c79e7339d63d - last_write_checksum: sha1:c31c89e5bf715c31c246d4033a21aa0fee58b087 - pristine_git_object: 4524a579acba8c98312359986dac65ebf3f2c918 - docs/models/deploymentdetailresponsetypestringlist.md: - id: 29f200cd5798 - last_write_checksum: sha1:999924704d31816f9f6c1e1d23da2da9d07e365d - pristine_git_object: 76ddbc00f77ab7b999174be35e2e2fb03a146a56 - docs/models/deploymentdetailresponsetypeunion.md: - id: b0f6d137b329 - last_write_checksum: sha1:387772255a0821ed26763d81589a0312e89119a9 - pristine_git_object: c14562901e7075e8ef11af25f32b2f6aab35962a docs/models/deploymentdetailresponsetypeusedefault.md: id: b0467ca20a5a last_write_checksum: sha1:e748ed426894bb169ea320402d1e5378958fcc77 @@ -5086,14 +5590,6 @@ trackedFiles: id: 54a867c88294 last_write_checksum: sha1:7539ce7935405fddcbf68a32418bd1384e5e9d02 pristine_git_object: a84ec2040058e4e6b6d83b37bf670b41a04c0f9d - docs/models/deploymentdetailresponsevalidation.md: - id: e75c53ccea4f - last_write_checksum: sha1:a3923d64a36da5dc2cf7d8282db0bce89cfbc3b4 - pristine_git_object: 8c8c0dbb198866f575a71b6a8695fd5a49ea366d - docs/models/deploymentdetailresponsevalidationunion.md: - id: 3aac83a07b23 - last_write_checksum: sha1:8d6019d842ae0a9aaa6902533077db02e3a43895 - pristine_git_object: 2c875f9416bfe14733bee2252c59eb7b46847a82 docs/models/deploymentdomains.md: id: 63c2670028c7 last_write_checksum: sha1:f882e0eb77139ec38a7715f14ea852c268eea518 @@ -5114,10 +5610,6 @@ trackedFiles: id: 980d093742d6 last_write_checksum: sha1:07655d3e1803c4e40f6f9e08338329fdf8045f5c pristine_git_object: b438fdccbe1953f9e70b85beac44b73ea6f977e8 - docs/models/deploymentenv.md: - id: e0d7bf442b5a - last_write_checksum: sha1:562bb0f6e32cd2fc68d1a406b47801c371a0903d - pristine_git_object: f1c85e427185d8423f38fcecdb31ec9c201fef9d docs/models/deploymentenvironmentinfoaws.md: id: c4a19924beac last_write_checksum: sha1:4e828a535bb2b41f0a34352fcbc2db509224565c @@ -5170,102 +5662,26 @@ trackedFiles: id: 05b0600a7c0b last_write_checksum: sha1:e00e885f8cf252e379a9a5663479bb1892f42658 pristine_git_object: 3f68f258f3c1f866c5cb8c297173ab63d39e5287 - docs/models/deploymentextend.md: - id: 7c245adf2775 - last_write_checksum: sha1:7763c5ad1d49423796eb35995824728e8b047de0 - pristine_git_object: f9014b6d2baa1dcc25a758dbe38cf04355a616f2 - docs/models/deploymentextendaw.md: - id: 51b8f9961f1d - last_write_checksum: sha1:5e8aba8bf5c712b372ad58e4e1dc0f5d8e9d1442 - pristine_git_object: 7b9300f5e3fcaa35e3db6c8ef1fae8db9885e077 - docs/models/deploymentextendawbinding.md: - id: b97b9236c36e - last_write_checksum: sha1:249db585c81b9e591dfc6ed1a648e59107babebc - pristine_git_object: 38b60b6636d00e6eb0d704694c885a7737ffb242 - docs/models/deploymentextendawgrant.md: - id: 43e746d8098c - last_write_checksum: sha1:d4943e7a2d5fc66bc8a0aa048264af29e2702152 - pristine_git_object: 25175ec5ae9fba4b02a0823f543009b9a73ec236 - docs/models/deploymentextendawresource.md: - id: 6416d06a9b71 - last_write_checksum: sha1:33c497f4c309f14dac7920ac8cadda017be3f304 - pristine_git_object: 5648a927faf55dc8339c170ae9404fa09f80814d - docs/models/deploymentextendawstack.md: - id: 28da8109d9d6 - last_write_checksum: sha1:89613d2e88f25b0aa40193e79c451453bdfde379 - pristine_git_object: 7e368cbd7aac75d966301142cdcf0546d6bfcc6b - docs/models/deploymentextendazure.md: - id: 901cc35c350a - last_write_checksum: sha1:863758fdab67cc55751cf7e8a4215663bbff8183 - pristine_git_object: 876ffc5575e7309c9798daa1980e3348c7470fea - docs/models/deploymentextendazurebinding.md: - id: 73fa7cae9923 - last_write_checksum: sha1:38b5de6a72da326833a3f2de99e0213aedc767b6 - pristine_git_object: e28f5419c00327f232ea55004b9dd5ea4e6917f2 - docs/models/deploymentextendazuregrant.md: - id: 5463e5af1c75 - last_write_checksum: sha1:051e7575055fbce0464544775b666bdb9d1b2646 - pristine_git_object: db53152bc732e83e6f542baaea885841db52a89a - docs/models/deploymentextendazureresource.md: - id: 12e7a50dc241 - last_write_checksum: sha1:7d9916cc33f5a04e7a58c8e42ade52c597b5b264 - pristine_git_object: 15ea38b688eebf835f938f7f71e0bc7ebe1da424 - docs/models/deploymentextendazurestack.md: - id: 57b789896de8 - last_write_checksum: sha1:66e1d2dc350f3aa90097042d4cc873b433f80ef5 - pristine_git_object: 3e9f66f01d54dcbbef2ca71927c589d55d9954ab - docs/models/deploymentextendconditionresource.md: - id: "753689327360" - last_write_checksum: sha1:cc298320f61cb1b70d61a9e3c4b6409468a4062e - pristine_git_object: 9872c5706067663cadd3a3b39e25da762ebf61f4 - docs/models/deploymentextendconditionstack.md: - id: 006051df5d24 - last_write_checksum: sha1:f7a27dc4181856962a11cc4f7485ab96a81f9463 - pristine_git_object: 1c796cef728e3e5681f178ee0a022b6c092e1555 - docs/models/deploymentextendeffect.md: - id: 57e7d8e12cf9 - last_write_checksum: sha1:a576f44794d31e8dd1f89c48d7eaec32a26da400 - pristine_git_object: 8e1264c9d0e2fa12374292bdea41549febdbb988 - docs/models/deploymentextendgcp.md: - id: 222c98ffefc2 - last_write_checksum: sha1:a9f062353b42cf859cf4b8616b4a50b2e4b71737 - pristine_git_object: d00b92983653403351be59577b8b0edc35e7b10f - docs/models/deploymentextendgcpbinding.md: - id: 0f6a096d8dd6 - last_write_checksum: sha1:ba066aa355b7e6944298654fb5771b42b900c26d - pristine_git_object: f4d4bdc9296e35e8ebd27792ca8328b4045685ee - docs/models/deploymentextendgcpgrant.md: - id: 964e950633c2 - last_write_checksum: sha1:a57e24f0e18a63d122a1644438a6d3137cc17950 - pristine_git_object: 4db5da902f1b3894edc570e181821eb15e642782 - docs/models/deploymentextendgcpresource.md: - id: 5c70ba1f3865 - last_write_checksum: sha1:ea74b57b86a28002fda983ca5dac554b23db35b7 - pristine_git_object: 0fd3a8bf87fbdae893ae4383b74e14488df8e85b - docs/models/deploymentextendgcpstack.md: - id: e4315264bd63 - last_write_checksum: sha1:7097bb30b982be2072f1f79db154e288fc742ff0 - pristine_git_object: 00d11ec22f28eb5a7626fa0a5df6030eba3e1f38 - docs/models/deploymentextendplatforms.md: - id: abbf957b90cf - last_write_checksum: sha1:70f6b0235d4209c0e3cedccdd68ae0051cccdfa1 - pristine_git_object: 8aac8606bf570b782cd6a9d480fac72177a9df39 - docs/models/deploymentextendresourceconditionunion.md: - id: 2f582984ac2c - last_write_checksum: sha1:9e26716d0abb4aebf7f2da14194f8222d828117a - pristine_git_object: 61e6d0a0463529d03da5b6d6d7002d17ca6e35a7 - docs/models/deploymentextendstackconditionunion.md: - id: 89b77df73437 - last_write_checksum: sha1:b4edd2959137aa0a69b869d7ececf598113fc909 - pristine_git_object: 6d62bbceb3c7a2ea4e2e268179b600b6fec0b56d - docs/models/deploymentextendunion.md: - id: bb85ab8a0ccc - last_write_checksum: sha1:c750917d15e01ce52fc79ae07a8ec9d7287b0a80 - pristine_git_object: 6cfe6e132bb4d2a4803ff035da3b76f02982262d docs/models/deploymentexternalbindings.md: id: 1c9d6ad23641 last_write_checksum: sha1:172f3fd7bfe9c8117f875a502fe06cc6dd51fd80 pristine_git_object: 13a0a3eed55c6ac1697f627b0892d4ff385647ca + docs/models/deploymentfailuredomains1.md: + id: db299636641e + last_write_checksum: sha1:115f51a465ddf5523f28b6781affd065b44c86f6 + pristine_git_object: 3ce3b1bbb8d378dda90bc6d31cd5e9e305e7fb09 + docs/models/deploymentfailuredomains2.md: + id: 9687f55b02a6 + last_write_checksum: sha1:0077ac8a3ccad10858e158fee4a9f2d94bc32924 + pristine_git_object: 694f8fb55e4eee420af71abd75095feda31df988 + docs/models/deploymentfailuredomainsunion1.md: + id: e547f8de1d4c + last_write_checksum: sha1:c5fa1def22f5c41ee617965952016dc591f4d137 + pristine_git_object: e5280586da2006dbd8c25b55d3ad2c137a830f44 + docs/models/deploymentfailuredomainsunion2.md: + id: 06931e28265f + last_write_checksum: sha1:6b250c8b21757453da7e7370be23d6b2a75b7175 + pristine_git_object: ef4e101b738b0c172b83986b3f844be4d19f0d94 docs/models/deploymentgcpstacksettings.md: id: 72b66396ab2c last_write_checksum: sha1:af725aec5971563a7db1bf2698616dbb3fc5c050 @@ -5384,8 +5800,8 @@ trackedFiles: pristine_git_object: 21f73a916e8e48e727ffffd0f946cf827b59a50f docs/models/deploymentinfosetupconfig.md: id: 370e54adcc80 - last_write_checksum: sha1:437d56966c5a65a30836e821fd9a72285adf5a0a - pristine_git_object: f871422032f1e8615d079128016b05319a3313a9 + last_write_checksum: sha1:1224d4b06456b19f145e5ef7793d7246e4f44343 + pristine_git_object: 1554f867f1cd8b5bfb867d9b9c53acc6c02c7a73 docs/models/deploymentinfosetupconfigdefaultboolean.md: id: 38e24f35f91c last_write_checksum: sha1:977f56187d889cd1b0b3b3ce5e5743d38a718950 @@ -5474,10 +5890,6 @@ trackedFiles: id: 26f32ced3fb0 last_write_checksum: sha1:06385c85e232595f57eb5f9b5df6de676bbc9798 pristine_git_object: f07bea1452287201f77aee9961bab4aaee12db3d - docs/models/deploymentinput.md: - id: bb3a00f035d5 - last_write_checksum: sha1:f16dd7034e6ac35c2944afdfd0df01003677ec0a - pristine_git_object: f7bb6e136e78c89268285138ebfc86948b0d46a3 docs/models/deploymentinputsresponse.md: id: 78b427121785 last_write_checksum: sha1:91e52094054a9c348d018474e07cdb444c575df6 @@ -5554,10 +5966,6 @@ trackedFiles: id: ec24470e1cc4 last_write_checksum: sha1:0982595396dcce66dba2cad85d68171636e5c4ed pristine_git_object: 599665b560a2786c5a2779849c82e43573ecf481 - docs/models/deploymentkind.md: - id: 27343b972b36 - last_write_checksum: sha1:4af7e6cd8bad282e27c85253ad0b4ef5ce5949eb - pristine_git_object: 8f015661a58d38eea92df1a6c83e1cedb22c68e2 docs/models/deploymentkubernetes.md: id: 60cf1a6ad569 last_write_checksum: sha1:a3f0b3ee70f45173b7f2e2e8f1b93b6a7e773f66 @@ -5580,8 +5988,8 @@ trackedFiles: pristine_git_object: 1beae0860466ff51345094ba9113c8836aa31214 docs/models/deploymentlistitemresponse.md: id: d8baf621fe6e - last_write_checksum: sha1:c3956d62aaeac1fa7bf05447674abafb6d99083f - pristine_git_object: 27b34315d5486530bfcbd3460776ffddf923d243 + last_write_checksum: sha1:9646e32dde08a8d75424826d558291981f74409d + pristine_git_object: bc3af30b7815eb8f94b76e487857f9265d8e5f88 docs/models/deploymentlistitemresponseenvironmentinfoaws.md: id: 5916867664ec last_write_checksum: sha1:67a5d4961e52203950354bbe7e76749e0d908663 @@ -5646,22 +6054,6 @@ trackedFiles: id: 794e171667be last_write_checksum: sha1:811832bd6e64fa56014b085accafba59ba14d372 pristine_git_object: 5d72b72794c1c4a7b0df763600618a6d93016c7a - docs/models/deploymentmanagement1.md: - id: 3e2980f652e2 - last_write_checksum: sha1:f68ceae958715acf50b0a11ce498021922dc0faa - pristine_git_object: 4982ac804877fbcf6dfd0731cf0ffdddd70b9031 - docs/models/deploymentmanagement2.md: - id: 4cab8fd1ed91 - last_write_checksum: sha1:3f5dabaca4c05866c04dd453e407aba6d3e9267f - pristine_git_object: e576c40e5a6ce9bc34a95cb8a96a0b3795b93aa8 - docs/models/deploymentmanagementenum.md: - id: 409f44f8c0b8 - last_write_checksum: sha1:f1ba1df5a2cf22200e8b27fa29c70fb79a432ac5 - pristine_git_object: 66d8610aed45cd9cc136a0bdd49fce53f924c232 - docs/models/deploymentmanagementunion.md: - id: 78f7339f69a7 - last_write_checksum: sha1:035dcee5512b425bb5f7e957735dc312aa60e5b8 - pristine_git_object: 5d208e6c22d287e90a8f160d319a86fdb1ba2050 docs/models/deploymentmodecustom.md: id: 298985923d84 last_write_checksum: sha1:e996cd05d4e84a1f35c174deb252dc48062076eb @@ -5714,106 +6106,406 @@ trackedFiles: id: d4ae7af6e6df last_write_checksum: sha1:0db779fd495ef3c0dfc3b1b8dd379a0dd90a54a5 pristine_git_object: a9b2acae458271f209b3f884756ef4d413f695a3 - docs/models/deploymentoverride.md: - id: 9356ff497c9d - last_write_checksum: sha1:2fb83978665b4cdef0a0383c71c54c24af4fe5c9 - pristine_git_object: e6b372d44f870c22c31b81d49f08dad031a5c18e - docs/models/deploymentoverrideaw.md: - id: c73167ed9ea6 - last_write_checksum: sha1:c43ba67de804f7d5d00a6265f762230c62d0b74f - pristine_git_object: 4d2e2153ade099f973316195b0a1df49f9dc5c83 - docs/models/deploymentoverrideawbinding.md: - id: 9447aa240138 - last_write_checksum: sha1:5d435b9fc8e8dcb33c71f31366db515071cd4ce7 - pristine_git_object: 0d3e9d40662bc06a45cf0df3478172a6865de854 - docs/models/deploymentoverrideawgrant.md: - id: 05d2d07fe911 - last_write_checksum: sha1:8ad1357ae77932118fef8d843e354f8e19d8dc28 - pristine_git_object: 8246edd30b70467191a5ddaf8f73e90fa2b6c3a4 - docs/models/deploymentoverrideawresource.md: - id: 915da3c8692e - last_write_checksum: sha1:7eab926cde4a4b3e5170e442269dd095cf1635b3 - pristine_git_object: d55b19deda4b22676f28ea52daa22a91b6f2d19c - docs/models/deploymentoverrideawstack.md: - id: a9dde2f7cf54 - last_write_checksum: sha1:4ab57a79a0b66c38a67c74a6436704144c19bb19 - pristine_git_object: 0ced95dcd4ec44493330fce8b63eec9f567e7692 - docs/models/deploymentoverrideazure.md: - id: a27e70d38938 - last_write_checksum: sha1:91d792c2a3f5e5cae382f72ddd08de90d28cef12 - pristine_git_object: aa43ffedfa3c7949e6ae551fb57daf12cc6ec7f8 - docs/models/deploymentoverrideazurebinding.md: - id: 52910d952959 - last_write_checksum: sha1:f99fd1db8c5e53edcb92e5da305f8d129c5584e5 - pristine_git_object: 2be51019d4a80fbd01e358d635016abb4af9ff2c - docs/models/deploymentoverrideazuregrant.md: - id: 50744bfe6597 - last_write_checksum: sha1:719dedcc4b3ace12289c7ca2f1780b42ce6738da - pristine_git_object: 9935256825cd2109726fe4f4f8b08c95a9f9e275 - docs/models/deploymentoverrideazureresource.md: - id: a8ab252d99df - last_write_checksum: sha1:ad32f446718828a21e455dbd201c2b0a977490ec - pristine_git_object: 13355c19c0940680fe7f9231cee900f220be0711 - docs/models/deploymentoverrideazurestack.md: - id: 237c376b6421 - last_write_checksum: sha1:ebf7a20c1449e402b476bbe9703933027bee7622 - pristine_git_object: 229de554b2cc1eba7cfb0c0a846f58b891628bd2 - docs/models/deploymentoverrideconditionresource.md: - id: 7802e3f556ba - last_write_checksum: sha1:96fc2db553cbb9725cd1ddb5ba72ca02e81788fb - pristine_git_object: cc755e3385ba8c651877540df45a5f14e6b52419 - docs/models/deploymentoverrideconditionstack.md: - id: 966537e4d4ed - last_write_checksum: sha1:b766ca33f6f9073f962d484989fa31039f2f3173 - pristine_git_object: 0c15c4ee739a62c3e0a82b1885ea0bff967c012f - docs/models/deploymentoverrideeffect.md: - id: 2dd070c0e163 - last_write_checksum: sha1:96e36d62d3c51167a7a1d63294087a6205c84eaf - pristine_git_object: a73e20edd1443a6666963010151614ff110e866e - docs/models/deploymentoverridegcp.md: - id: 44f31f89ec60 - last_write_checksum: sha1:9da45b5c7d920dcc638a32558519c178659440a4 - pristine_git_object: 29b3d394920b864329f8df789045610c648f266b - docs/models/deploymentoverridegcpbinding.md: - id: 195ab8fe096d - last_write_checksum: sha1:16cad8e25037d45aef35d1e99778759b6d8d5275 - pristine_git_object: 1753dd590cbd25b3fa35354debba5c0aa7d44d3c - docs/models/deploymentoverridegcpgrant.md: - id: fb4b64b67fba - last_write_checksum: sha1:d81dd87459421f4c0a39e290f8555bcf902d36e2 - pristine_git_object: 24b44010110e3877c93f43c0e9ee008b90c70cd8 - docs/models/deploymentoverridegcpresource.md: - id: 4d0f3899ba9d - last_write_checksum: sha1:82c7791635c0ad2593a658c5cd805758e4e851c6 - pristine_git_object: 130490517293981a2894e2c741ad4600c602e706 - docs/models/deploymentoverridegcpstack.md: - id: 17f91dd499fe - last_write_checksum: sha1:7cf91fb7d8e8cb2d87b48109795946292d265a45 - pristine_git_object: 68e988182bb0e1eb92ab8432d34bb569aa80ab46 - docs/models/deploymentoverrideplatforms.md: - id: ab8fdf944626 - last_write_checksum: sha1:2f9f9cbb6219acd4f0cd61d556a77b6ec9d9f695 - pristine_git_object: 255b50186d83f0db7940c563f460b7fc185d3eed - docs/models/deploymentoverrideresourceconditionunion.md: - id: 6669c82fa2fd - last_write_checksum: sha1:634297301268c6a50f910227b45825ce1a617305 - pristine_git_object: 0b79f4d2651d243e9f5c218de516eebfdf3a5129 - docs/models/deploymentoverridestackconditionunion.md: - id: 9440985f38df - last_write_checksum: sha1:1d81804141aea91679ed0b8f637fa319d1eaf62b - pristine_git_object: ece774ad733f7c4cce94b2142cc3bf3dfb89b6af - docs/models/deploymentoverrideunion.md: - id: 983e4d674fa8 - last_write_checksum: sha1:ec90ae6fedc92374c7d642f4ec34a3d50786fb07 - pristine_git_object: b640d8a0af290383c6475ea8b155ee79e0c7603c docs/models/deploymentownership.md: id: 8b306a671106 last_write_checksum: sha1:075acefff25957d497a4bbe55572f2565d2b3f68 pristine_git_object: 62464392b14bedd8df522a2b3f60309adbec448f - docs/models/deploymentpermissions.md: - id: 97756d6e5e03 - last_write_checksum: sha1:99cdd53c445bd8cbee9bca2f99ca3bd9776151c6 - pristine_git_object: 1ac3bfd8841fdea0dac439d83adf451b8b5a6026 + docs/models/deploymentpendingpreparedstack.md: + id: 8d7bd0980e5b + last_write_checksum: sha1:031e1c5741c5483d34b6abb4a6efcf4133b97716 + pristine_git_object: 8dff1a719caf878b8523b3dce56931103d34a65a + docs/models/deploymentpendingpreparedstackconfig.md: + id: 36ed74a1d095 + last_write_checksum: sha1:69779eec1bb8330c90b65177b5a5c929511dafca + pristine_git_object: 8b6773e1cd005305b8522d62999bb223b9b86f2d + docs/models/deploymentpendingpreparedstackdefaultboolean.md: + id: 0248145fd598 + last_write_checksum: sha1:f7a4c42ebd7992bb2d074748871640536331508d + pristine_git_object: 9c675614690dce0c78b6d51c57357458f57fc3e2 + docs/models/deploymentpendingpreparedstackdefaultnumber.md: + id: ecc062ac2096 + last_write_checksum: sha1:eefe9f9d8a737c4d1e03165f7633c8a40cfdbbb5 + pristine_git_object: 1636c29264d25ff104596ae54b6e38b7a8f42455 + docs/models/deploymentpendingpreparedstackdefaultstring.md: + id: 3b63310cefc7 + last_write_checksum: sha1:1eb1089a0e93b2c2523c10c96b6f04724afde18f + pristine_git_object: dd7ed8738d7d578cbac9ec2e15a56878c792e6ef + docs/models/deploymentpendingpreparedstackdefaultstringlist.md: + id: 9e55964d6cd4 + last_write_checksum: sha1:cef235bc68e1c2e5b44cb7b34604c9d51a20cdb8 + pristine_git_object: 1e45a414ae9fcef661a3317cced7686f3847e59e + docs/models/deploymentpendingpreparedstackdefaultunion.md: + id: 3adb2c08b649 + last_write_checksum: sha1:d159ffe5a799fecd7770c3bc9d9cf042bb9653c2 + pristine_git_object: aad8e89e4d86f127290402f79eb6e2c6e4da2cd3 + docs/models/deploymentpendingpreparedstackdependency.md: + id: 3b0eed46f5c3 + last_write_checksum: sha1:9be5bc2057f224353cd2c088a8dbcbb367587d8f + pristine_git_object: ba4c239982d80d38aade80aabed57dbc0ff3ff4e + docs/models/deploymentpendingpreparedstackenv.md: + id: 36554253e11d + last_write_checksum: sha1:8703c84191f2fe8b3b217eb2508df53d009f0b4c + pristine_git_object: acc388fc3cd5c642067c698fae2f17091051b340 + docs/models/deploymentpendingpreparedstackextend.md: + id: 8447cf03d404 + last_write_checksum: sha1:8f04ed2dfba87714c22eeef43b400275b8002511 + pristine_git_object: d682faf69a6784f4dc9d9d94185c46199f6d65e0 + docs/models/deploymentpendingpreparedstackextendaw.md: + id: b66fe305e6a3 + last_write_checksum: sha1:a3960e7144ddf192f5831c7e6afb1eeb4a6ec849 + pristine_git_object: eff567df84ae1c6ecc40c8acb99d19b079c8814a + docs/models/deploymentpendingpreparedstackextendawbinding.md: + id: f20e3bcd192b + last_write_checksum: sha1:7954e38f1de2d65bd3b077505094b04db44f818c + pristine_git_object: c942f466db8a59935cca346f66e38a9b7a09ed94 + docs/models/deploymentpendingpreparedstackextendawgrant.md: + id: 386f4729563d + last_write_checksum: sha1:ab3d9dd654540650026fcf559641b2400dbfa5d8 + pristine_git_object: 9d6e4fc8f0251a708eb5e59d37fa52560bf0a677 + docs/models/deploymentpendingpreparedstackextendawresource.md: + id: b1356f6286ba + last_write_checksum: sha1:b96c7bf9e631572e880e637f543c7476310fb48a + pristine_git_object: f054cdd2858fb8d46d060889a8ad02aeefa4da35 + docs/models/deploymentpendingpreparedstackextendawstack.md: + id: 0c46e43ba538 + last_write_checksum: sha1:64e078c8c1161abb9a3750f61737dfbd53b1ff00 + pristine_git_object: bf4236f56a20134f096b2d912aacdad2712ef7cc + docs/models/deploymentpendingpreparedstackextendazure.md: + id: 6e615dde13b1 + last_write_checksum: sha1:eb8e660fe5fdf7b1372f7e1ab821d0cd407c6f4b + pristine_git_object: 305419d66fb45b80060216de889d861f9751d0b8 + docs/models/deploymentpendingpreparedstackextendazurebinding.md: + id: 5cd3ac997ea9 + last_write_checksum: sha1:50df3f94e43a7f569f342eab037e446d8f27d10c + pristine_git_object: 779ec9412024620b5e85b570829f8425ccc3f05b + docs/models/deploymentpendingpreparedstackextendazuregrant.md: + id: 2b2fc3536e41 + last_write_checksum: sha1:288409d367b6880d0392e6691386bdea83975c00 + pristine_git_object: 3ae3a5b551966cf16fde703b55445acbb91a34b3 + docs/models/deploymentpendingpreparedstackextendazureresource.md: + id: ffff4f076c00 + last_write_checksum: sha1:fc65ef445d9984ddcb4e90cc5ae090891293dd96 + pristine_git_object: d012c4ae861942a421743696d94981a1e87e8491 + docs/models/deploymentpendingpreparedstackextendazurestack.md: + id: "312369400747" + last_write_checksum: sha1:c9f5af6bde7436241d47793a77b72e8b65b7e5c9 + pristine_git_object: 851ea1027c758151d85202a59c120aa300ce461b + docs/models/deploymentpendingpreparedstackextendconditionresource.md: + id: b80f51f5d87a + last_write_checksum: sha1:2af5ac39b0c5588b971ef436e3873333ac8469b2 + pristine_git_object: b7a0ae69cde121bc4c78820ee384650c508249e6 + docs/models/deploymentpendingpreparedstackextendconditionstack.md: + id: d5085809ace1 + last_write_checksum: sha1:894665ac10995d762ab1fcf21895f51b2e3d7121 + pristine_git_object: 26609b8bfcb74bc01b1c80e7575bbdfcc25f0928 + docs/models/deploymentpendingpreparedstackextendeffect.md: + id: 9eda13f34bef + last_write_checksum: sha1:5d7a14690f20bc96f5467e39202bf59322455b47 + pristine_git_object: 147cbc5fc2436d8176b2bb61bc7cc699f8d61a0c + docs/models/deploymentpendingpreparedstackextendgcp.md: + id: 35be032d58e7 + last_write_checksum: sha1:79a7b51328e549d094846aacf93da99718a5c815 + pristine_git_object: 767c096805afd4f77480c713d6af9d3d7d87ef58 + docs/models/deploymentpendingpreparedstackextendgcpbinding.md: + id: 1a8da5372d62 + last_write_checksum: sha1:35140f019f953b9daf5e88fbee27ecca2e2e49db + pristine_git_object: 4fb57d7d7bebfaaa4c9e065a7ad3b071e4f23319 + docs/models/deploymentpendingpreparedstackextendgcpgrant.md: + id: 908af85387b3 + last_write_checksum: sha1:efc2afdf48bd16b4556dde861c333dd833f4c86e + pristine_git_object: 32dd9e6ab19ae5ab901eb9ce65979e043dbed005 + docs/models/deploymentpendingpreparedstackextendgcpresource.md: + id: e0dbc0246201 + last_write_checksum: sha1:adf6ccee1f5cc8c72e9fe45e4834754b35cdb837 + pristine_git_object: 1094933f31fa5badc21690f8b6c8764a79af9eb8 + docs/models/deploymentpendingpreparedstackextendgcpstack.md: + id: d8c6331b2816 + last_write_checksum: sha1:ccda2bd034dc32d8fbb651c93daa7a04cd9c446f + pristine_git_object: 7a8ef00e3ad6d5d5f0a15b85d01702cf2ff7e649 + docs/models/deploymentpendingpreparedstackextendplatforms.md: + id: 915ce0c7115a + last_write_checksum: sha1:8ac2406b05c29abd700be9e6b3ce28196a9a9341 + pristine_git_object: f5959ad5119ed2ef473ec0b17764874ad525de84 + docs/models/deploymentpendingpreparedstackextendresourceconditionunion.md: + id: 0f74e927fdc0 + last_write_checksum: sha1:e6565cb5fd26ff8e4cc33e601296cc126a7246f8 + pristine_git_object: 861f21c994e77b01474c43664a3ad56e70391fd1 + docs/models/deploymentpendingpreparedstackextendstackconditionunion.md: + id: 63701a178157 + last_write_checksum: sha1:14a29b6bfff13aa97dd9b2baeb8ccfa838e579ac + pristine_git_object: 2dcb0dca76adbe48a91dbff038f05ef4f3b1eef3 + docs/models/deploymentpendingpreparedstackextendunion.md: + id: 4ff55d99e6c9 + last_write_checksum: sha1:8003791f3acac2e39a8a4c39acf4266495ff6032 + pristine_git_object: 08e56ab8803715106fcba6a64800af87c33597a7 + docs/models/deploymentpendingpreparedstackinput.md: + id: dea3e57f5f4b + last_write_checksum: sha1:52a978f23aa0b728401d78efd41b723f6a3daa55 + pristine_git_object: 7e12265ed17a4ae4141ec68a367836b49eaa5c87 + docs/models/deploymentpendingpreparedstackkind.md: + id: a10aa1c069cb + last_write_checksum: sha1:ab06677391212b9ac92853653e7afdbf7f65bf74 + pristine_git_object: 7e5879b6e879358e670e89c89110c43af83a2118 + docs/models/deploymentpendingpreparedstacklifecycle.md: + id: 6e250a52f294 + last_write_checksum: sha1:311d880c07c52ec6b86d1faaa1d4d601bee058a0 + pristine_git_object: 29692b4309d99d89be2095c2f2f12684bbd7a14c + docs/models/deploymentpendingpreparedstackmanagement1.md: + id: e00f830e0dea + last_write_checksum: sha1:eb6a5b2d8e1a6bb02b50e0960230ac1b58eca3ee + pristine_git_object: 11b89856a15226a45370eaad0f781623c0e20be4 + docs/models/deploymentpendingpreparedstackmanagement2.md: + id: c702ed870857 + last_write_checksum: sha1:18881b8792b944ff8546dd1a418efe74a84127c1 + pristine_git_object: 442d3e6fead859123add20e736c1f5392e8582c5 + docs/models/deploymentpendingpreparedstackmanagementenum.md: + id: 2f3f0441bd9a + last_write_checksum: sha1:978f73aa08ee842dc4e607554b3a69812b52ecc7 + pristine_git_object: 63fedb2ed0a2eb8a29c25e2afc569caf71ed7333 + docs/models/deploymentpendingpreparedstackmanagementunion.md: + id: 7793618cf2cb + last_write_checksum: sha1:468e0a8389f73b8d01ad22e6cc23aad76e4f6413 + pristine_git_object: 06bd63d48b3b94242de77204da06de37470bedfd + docs/models/deploymentpendingpreparedstackoverride.md: + id: 0956e2780335 + last_write_checksum: sha1:880f9b3e778a1f8ba256bf9397cd3b3b3c04986d + pristine_git_object: 74c8c40c1eb06ec83464143b20ba48eea037ce5d + docs/models/deploymentpendingpreparedstackoverrideaw.md: + id: 74bf94f5f50c + last_write_checksum: sha1:b863e40b8d386362e199a557a3dd03067e11f145 + pristine_git_object: f6b1f8d93c2d08c3db2ade71a846a0b60b137a8f + docs/models/deploymentpendingpreparedstackoverrideawbinding.md: + id: 6871fcd82b7d + last_write_checksum: sha1:501ec1532170e8c5f6a061f1aca8e91d6cd2ee8e + pristine_git_object: 1b3c442a48bda875bad4d514f96e718dc3ab7c49 + docs/models/deploymentpendingpreparedstackoverrideawgrant.md: + id: 1e661e57f304 + last_write_checksum: sha1:5df21d35df34ac395d7c6fac657bc7661e39a3a9 + pristine_git_object: 019b9665ce4b4bb2d96063efdabeba670c18fbbd + docs/models/deploymentpendingpreparedstackoverrideawresource.md: + id: d8306781ac95 + last_write_checksum: sha1:e3ddffc391aaf79bf6c84b20898a96929b2dd15e + pristine_git_object: e7344aa078bd35e74e9029bc1ebe5da9736c0120 + docs/models/deploymentpendingpreparedstackoverrideawstack.md: + id: 9db90a7cea86 + last_write_checksum: sha1:6f4d50b83fa008726e1484cb4f96bab45a2f857b + pristine_git_object: 1db2d362f9a88bad942b2b9d5134cd6185acc303 + docs/models/deploymentpendingpreparedstackoverrideazure.md: + id: c51f1cb653bf + last_write_checksum: sha1:e350068f06cceb424932b511b513ee1fd802820f + pristine_git_object: dfd57c600e69315400f455fa7812ebfec4f4e48e + docs/models/deploymentpendingpreparedstackoverrideazurebinding.md: + id: e7dd2bb81730 + last_write_checksum: sha1:fd187812bb121da268ee965ac8259f4d35641ec5 + pristine_git_object: ccf686d01ec0a822e8d79f70a488a387e2db6422 + docs/models/deploymentpendingpreparedstackoverrideazuregrant.md: + id: c35687643e61 + last_write_checksum: sha1:155c62924c26e73199b322de90531c78a21f34b2 + pristine_git_object: 3860a1261c57d730c6684df6d054caba75250bfe + docs/models/deploymentpendingpreparedstackoverrideazureresource.md: + id: cefa367d4336 + last_write_checksum: sha1:618882a9ce3b9c8449f0aac3d2ed065ed5916a18 + pristine_git_object: 258ea0e2e7786b9c75531d0317bc99b2ab703d3f + docs/models/deploymentpendingpreparedstackoverrideazurestack.md: + id: 76e467b0b672 + last_write_checksum: sha1:997070c8091916a32baab0ac78d551f0ec0ae366 + pristine_git_object: 0e6825a24545dab9cd9829c34abcaaafd253eae4 + docs/models/deploymentpendingpreparedstackoverrideconditionresource.md: + id: 90156f525db9 + last_write_checksum: sha1:79372e888250bc964ea77cec7670b38fdef23bb9 + pristine_git_object: 0032fd993079fb8aabd46e19861d4dfb215d8a7c + docs/models/deploymentpendingpreparedstackoverrideconditionstack.md: + id: 6a137a2620bf + last_write_checksum: sha1:374265c927cb993f4742e48b851f65733c4c17b9 + pristine_git_object: 0b2475ff4ea8226e8e49c9fd525dabd5e3b81d73 + docs/models/deploymentpendingpreparedstackoverrideeffect.md: + id: ad3355d75176 + last_write_checksum: sha1:ffd1625b83914ae1ba53d4629b9c3609ac58b619 + pristine_git_object: 7cf4103d19eac218614d16524294d38e7ecdc077 + docs/models/deploymentpendingpreparedstackoverridegcp.md: + id: c1f658ead8d3 + last_write_checksum: sha1:0b5b1a5e03c56aad3e82e87aabeecd043a92b304 + pristine_git_object: bbac3d114f5387696ac9737d2ebd20f6c12ce840 + docs/models/deploymentpendingpreparedstackoverridegcpbinding.md: + id: 0a9be199d123 + last_write_checksum: sha1:7d7524aca499b96bc3b469d214e8bfff039b3cdc + pristine_git_object: 0a5425e1fd534444af5f5b057a46328d7b286073 + docs/models/deploymentpendingpreparedstackoverridegcpgrant.md: + id: e8a6801fa32c + last_write_checksum: sha1:90f0e7b4a610dbd105197c78d0076ec6fbed55e0 + pristine_git_object: e6a5ae762a11feec1f5a87e01813a2d3ef3fab58 + docs/models/deploymentpendingpreparedstackoverridegcpresource.md: + id: ec2228848165 + last_write_checksum: sha1:8ea5b57ee9217f04ab7488bd7c8a470e3425266f + pristine_git_object: 0e8312950ba3f708117764979fe054e8664efba1 + docs/models/deploymentpendingpreparedstackoverridegcpstack.md: + id: 9b7e429f5322 + last_write_checksum: sha1:d9f2052cc3cabf65f7ecd46ad7b06b5137ef605b + pristine_git_object: 38e4aaa0a4be4d06b0bbe6df37242e54b1017b24 + docs/models/deploymentpendingpreparedstackoverrideplatforms.md: + id: 6ee1ff6d432e + last_write_checksum: sha1:c27de63a6b98ec8e9f2759aeac1813478fe04b82 + pristine_git_object: a5f36f343beebd93ef92ce814e7cc541c5aefd74 + docs/models/deploymentpendingpreparedstackoverrideresourceconditionunion.md: + id: b7ef14211ec8 + last_write_checksum: sha1:5295d8ab3218c517a2faaee399adf97afe167d89 + pristine_git_object: f53000d482436684b5c4e835c51a73e7852fec56 + docs/models/deploymentpendingpreparedstackoverridestackconditionunion.md: + id: fd75d16b8686 + last_write_checksum: sha1:9f0c6f990ce0ce162a6028a3fb172afa1fae4ce8 + pristine_git_object: c3e4f4d2ce654e135a878f59e57820cd6fe9e388 + docs/models/deploymentpendingpreparedstackoverrideunion.md: + id: 3585ad59b8bd + last_write_checksum: sha1:37233dbeaa9d67703f3d93538fe777cc9dfff1e3 + pristine_git_object: 3c017dbfb01218f675c11a45719b265b2d8fb2f8 + docs/models/deploymentpendingpreparedstackpermissions.md: + id: 1b3e3b1aef85 + last_write_checksum: sha1:09d628291968252d4067b5e128d12f652e250f32 + pristine_git_object: 3bcc790b65719e38e94de662dd08e732ecf5a186 + docs/models/deploymentpendingpreparedstackplatform.md: + id: 322b4139e89f + last_write_checksum: sha1:1efed42e562a93d5defc5253d81bb8a708db58b1 + pristine_git_object: dceff1fc28c27547ccca8d5149ed12b0e2103eb3 + docs/models/deploymentpendingpreparedstackprofile.md: + id: 8a10aebfaddd + last_write_checksum: sha1:c9c33fb19adfdd1be89c4866b744b4596eec4411 + pristine_git_object: 7a34245e9e580cf524c66eb47929374465e5b748 + docs/models/deploymentpendingpreparedstackprofileaw.md: + id: a4006697ce19 + last_write_checksum: sha1:ab10ff694b7cb8d53d2a6aff20fab7656e39befa + pristine_git_object: 94e6695d5dfb2603ab0dbd93ea526d51f113965e + docs/models/deploymentpendingpreparedstackprofileawbinding.md: + id: d7bb693ead58 + last_write_checksum: sha1:32db27c3b4fe7b55605f107c4e02fd78124dce6c + pristine_git_object: ff0663c63b9c9f599e3ce31caa930ca77955e8e8 + docs/models/deploymentpendingpreparedstackprofileawgrant.md: + id: 7650a42de8f8 + last_write_checksum: sha1:153385421f8776880b0c252affa1b41b7ee34767 + pristine_git_object: 51d10adba81f929a3f781fb654bda34547b676d4 + docs/models/deploymentpendingpreparedstackprofileawresource.md: + id: 354e94b2a42e + last_write_checksum: sha1:62f510b282df3269e39199bcfa19cb81a0341047 + pristine_git_object: 62fb866d6a50e4e001b84cbfc5b756eee187f053 + docs/models/deploymentpendingpreparedstackprofileawstack.md: + id: 6f16ca839535 + last_write_checksum: sha1:17f782143eaa6c481dac3e203c310946a552f6dd + pristine_git_object: 888d1c4d0373c14bf562b6a059974058262318e9 + docs/models/deploymentpendingpreparedstackprofileazure.md: + id: 2c3e235aaa37 + last_write_checksum: sha1:515989f44983af7e1f403bfd224595afbb873f96 + pristine_git_object: f1d36fc1c298e6293f6aca72ade2f2731ed364a4 + docs/models/deploymentpendingpreparedstackprofileazurebinding.md: + id: a7d865c1445e + last_write_checksum: sha1:3d533c72d64dd0ff1f9299f5f0bb72181240f5b0 + pristine_git_object: 944eacf0e31fc570ea543c6e90c4716ef69c24a2 + docs/models/deploymentpendingpreparedstackprofileazuregrant.md: + id: 8b78c8b552c3 + last_write_checksum: sha1:ad14d9e2d6c17820787b3549253610a7302e1abf + pristine_git_object: 85c3bc1dd36cd8d72b753693363fbd909abfdb0b + docs/models/deploymentpendingpreparedstackprofileazureresource.md: + id: 4f56a5b254c0 + last_write_checksum: sha1:8e99e8eaedabf487c67505a0885b560528eb0fa7 + pristine_git_object: 025f5781b1bfdede095e520afe9843187406c750 + docs/models/deploymentpendingpreparedstackprofileazurestack.md: + id: c5c656123a4d + last_write_checksum: sha1:71745dc0d77f0ed57c31a98c7b67a0898fd9c6d7 + pristine_git_object: 231b63a9a2c1c859b31395d1a8e2f31e09a7c5a4 + docs/models/deploymentpendingpreparedstackprofileconditionresource.md: + id: 741dd10aa724 + last_write_checksum: sha1:4164dbca121e77aa867c8f1bb3d6c17a1df19b89 + pristine_git_object: fb5ce52f085bcc53da5b0847701b23c7a9499493 + docs/models/deploymentpendingpreparedstackprofileconditionstack.md: + id: 0c81f060ff7d + last_write_checksum: sha1:2d18cdce169a4c7226d18144c8c7f7869603302d + pristine_git_object: 38f7ad928303add99c87df0aa04e781cc3f4b9b0 + docs/models/deploymentpendingpreparedstackprofileeffect.md: + id: 5aa6a4d59ba5 + last_write_checksum: sha1:2bfff86a613856aacbf69abbcd20840c3b4d8a17 + pristine_git_object: 76b878016bfd8a8168aed54a3263efe47bd623b8 + docs/models/deploymentpendingpreparedstackprofilegcp.md: + id: a6e101241b35 + last_write_checksum: sha1:4086348e526ed9bcc6d87b3f29ea5a6d09d4b88f + pristine_git_object: 3ddbf97c720dd9c77591b991bc8ffc1036aac2f6 + docs/models/deploymentpendingpreparedstackprofilegcpbinding.md: + id: b65f19d61aa6 + last_write_checksum: sha1:362df3d85f9f672e3c45f50285e29822766075fb + pristine_git_object: 6b7354d2fed9853d16058afb00c12b231cd20d54 + docs/models/deploymentpendingpreparedstackprofilegcpgrant.md: + id: 757398b82918 + last_write_checksum: sha1:d8ffc772d7cc34c9c922fe8e59071e8c19061147 + pristine_git_object: 65b3a3d74869a35611e843a31711afc0e00048a2 + docs/models/deploymentpendingpreparedstackprofilegcpresource.md: + id: f1d1c7bd4c26 + last_write_checksum: sha1:4eac0b1b09d7be27dc21a610980eed1520f333d2 + pristine_git_object: 76854bdb35c2527ecb1faab59a8f19d946cf5f82 + docs/models/deploymentpendingpreparedstackprofilegcpstack.md: + id: 2a997378c061 + last_write_checksum: sha1:e6e7997e7009e44aa705ecc97487f730b37e06a8 + pristine_git_object: f57adc334108155dad51ac57a7bef34a21f4a454 + docs/models/deploymentpendingpreparedstackprofileplatforms.md: + id: e9ef3735a7da + last_write_checksum: sha1:47d445c763f34ebfc667a3bca599ef45843fde43 + pristine_git_object: 2fbb8828d6fb9c39ec1b6c7904bda2300dc17a29 + docs/models/deploymentpendingpreparedstackprofileresourceconditionunion.md: + id: 660ab9d2aeb1 + last_write_checksum: sha1:8b7b015508be3c436f7f90039d446aeb61247320 + pristine_git_object: b6bb44d8c5fa4a33c6710ad4e8edcca4ac3d3c20 + docs/models/deploymentpendingpreparedstackprofilestackconditionunion.md: + id: d0c24fe70b69 + last_write_checksum: sha1:2526a0c6e98eae69b4260fc72e1f36e7b67ae785 + pristine_git_object: fa1d2d5d277295f861a4a9e0c203f1fc483c5e83 + docs/models/deploymentpendingpreparedstackprofileunion.md: + id: 90de14f2ebe8 + last_write_checksum: sha1:9d8f1fdcf37fe388638593573e0d3578b1cd1349 + pristine_git_object: 469fdcf440d0e893c20fd517ced7a1154bce2ce6 + docs/models/deploymentpendingpreparedstackprovidedby.md: + id: 37372de57060 + last_write_checksum: sha1:ba588a8a70bd84f89ee419701d890b7ede2e1b91 + pristine_git_object: c5c6a05e4187dd19b1202aca20e01f7feba2853c + docs/models/deploymentpendingpreparedstackresources.md: + id: 743b776ad1b3 + last_write_checksum: sha1:4d091b47c19e08b5582f494570b1d1281242ddae + pristine_git_object: 4328fc13d533cbc1193f480f66fe27ce40cbb8c5 + docs/models/deploymentpendingpreparedstacksupportedplatform.md: + id: 9547a996c9de + last_write_checksum: sha1:e90905d2f79e6a15c4928990068b8ecae7e936e8 + pristine_git_object: 04e8ed42214b28b17639c501e617d6c6267a65d6 + docs/models/deploymentpendingpreparedstacktypeboolean.md: + id: 4765de39a94f + last_write_checksum: sha1:3988cddf820a4cbe701e5cc44e908c2580034a2b + pristine_git_object: 3c673c93330d07a657155ba9626b5d2cf51aba8a + docs/models/deploymentpendingpreparedstacktypeenvenum.md: + id: 0dec1371ca8c + last_write_checksum: sha1:428b152711604a6490ee9e5f7d50c40dfaf5f403 + pristine_git_object: 6ea939e46c4099a25150bd1951db2acec0434689 + docs/models/deploymentpendingpreparedstacktypenumber.md: + id: bcb2144d529f + last_write_checksum: sha1:3d05b8ab09a7ae4c3db548c25e461f052813da51 + pristine_git_object: 5292c9e9893ae763b3422c4edd3400cfa3910d6c + docs/models/deploymentpendingpreparedstacktypestring.md: + id: 6888850422ff + last_write_checksum: sha1:c18de3b424349e326bd97d93745ee7ff2d857356 + pristine_git_object: 0dd1618e4db2d2246f29a83a5131c1addc3b1b8f + docs/models/deploymentpendingpreparedstacktypestringlist.md: + id: b8b1f222d2a0 + last_write_checksum: sha1:8d1ba6c10cc01a225162da533d787a17cd39428e + pristine_git_object: 12b25763bdc3ba7f3dd51d6add46788e37140cc9 + docs/models/deploymentpendingpreparedstacktypeunion.md: + id: 96487a153322 + last_write_checksum: sha1:70809cfa2acadfd857b118e6ad130746f116e637 + pristine_git_object: ccd9605b309b7781a9630febd0554a1b9a8d4766 + docs/models/deploymentpendingpreparedstackunion.md: + id: a86f5196ea59 + last_write_checksum: sha1:6d2c999b5cc9a8eb1598bedce46fcaf6dda2be32 + pristine_git_object: 2b3f1c43151810232b2cbe63b03616ebfd73c839 + docs/models/deploymentpendingpreparedstackvalidation.md: + id: a6d825259697 + last_write_checksum: sha1:bb4dbe9665d5ce0cae5950fb3dba396041b35b04 + pristine_git_object: cd220e7ea98603c58c54abfbf9e5a46659924e38 + docs/models/deploymentpendingpreparedstackvalidationunion.md: + id: cf8b0e7efc40 + last_write_checksum: sha1:1450286e6f32fff63c7833c9586566bd62158093 + pristine_git_object: 6f2d49e60acadcfbb663ac703709222b5685294f docs/models/deploymentplatform.md: id: 5242b74d1dce last_write_checksum: sha1:b4966ffe6412669c0d71239a160d5511af8eca9e @@ -5840,12 +6532,12 @@ trackedFiles: pristine_git_object: e3f8a1b94213f7c9f24eb11d256d0911aa3bcb75 docs/models/deploymentpoolsautoscale.md: id: 0d416acee1c0 - last_write_checksum: sha1:f7517713e1598ba6e0e66dd072b5036711b2a4a4 - pristine_git_object: 409f808bf6db27d97b6eaf7eb1b190acb76bf7a9 + last_write_checksum: sha1:eef6b93090b30680d9fef50e9c4d08d8bb6c6478 + pristine_git_object: 5f318bd4fd01527414646ba39be65ba7a24577c4 docs/models/deploymentpoolsfixed.md: id: ce79ac4bfbfb - last_write_checksum: sha1:4a5ea051eb0bd4e0e46a799052692050c1b17690 - pristine_git_object: fea8c3d58e0236a0af4d73a63c5af718be054fb7 + last_write_checksum: sha1:a87a6f3b1ec7cb9e2c1fba55e3ef48449035c0b6 + pristine_git_object: 943e677cfb3854694f083ccafbbc3fc4c90d67da docs/models/deploymentpoolsunion.md: id: 9ee235cfa730 last_write_checksum: sha1:c5233ae7a86d68ee63117d7b6e294bf1b5d3433f @@ -5876,32 +6568,400 @@ trackedFiles: pristine_git_object: 73a19ea51d500c1901316099a386152614a99727 docs/models/deploymentpreparedstack.md: id: bd6ed6d020ff - last_write_checksum: sha1:b61b6e1b864c103c096b5179652d0a7ec7ee291e - pristine_git_object: a9c286790b55ed80b805adcc515e18a6fc6522a9 + last_write_checksum: sha1:513561f7aee5056e3367a32be8095f48e945c655 + pristine_git_object: 0bead43bf8fdc5da881fdfa4005f1e1ffbf16e7c docs/models/deploymentpreparedstackconfig.md: id: 587f5b9d7c5a last_write_checksum: sha1:7bdd3637202fe0d76db316c3926a011dd11915aa pristine_git_object: 3664317ebab22dac5408c16273ea651db0265775 + docs/models/deploymentpreparedstackdefaultboolean.md: + id: 626bf590768d + last_write_checksum: sha1:feaf6467cb81474666e2e2295418fad09ff25b71 + pristine_git_object: 58c03e58a35bf9c1d1527d38787cd346abc9a7bb + docs/models/deploymentpreparedstackdefaultnumber.md: + id: c3382110acb2 + last_write_checksum: sha1:edb28dd4b567b395bdae047e4de5fac59d43a4c6 + pristine_git_object: 33fa896009273efc4cc656946575b08a5c82b3bd + docs/models/deploymentpreparedstackdefaultstring.md: + id: 72f5b5b37ce3 + last_write_checksum: sha1:a447eb500d94916ba7e9379b57eb8acbed9ad4f3 + pristine_git_object: f89d7416f4318351664be0400dfc8320af018a50 + docs/models/deploymentpreparedstackdefaultstringlist.md: + id: 67e61c4b8745 + last_write_checksum: sha1:7e36c1239f3e6dd71a5b2bf425ec55ee5f957cec + pristine_git_object: 5f047e1803bc2c0bc5c60444da03576e70df358b + docs/models/deploymentpreparedstackdefaultunion.md: + id: e9981dcc0b06 + last_write_checksum: sha1:7fca087fbea852b7c8053aee6c9a5acf03a057f9 + pristine_git_object: cdc08360ecd40667c14a09e1bccf73b25a43d3e0 docs/models/deploymentpreparedstackdependency.md: id: bfdde345332f last_write_checksum: sha1:79bafc0b1b442ba71f76f0fb9d9bb9fda0324775 pristine_git_object: 4dd159d8a799ce31d2f153880ed64368661bcd9e + docs/models/deploymentpreparedstackenv.md: + id: cbf357b8f538 + last_write_checksum: sha1:8f9aadc68bb223326f4f38ce15b05c394e300bde + pristine_git_object: 19adc9b89d88998bf0c0452638c84535dc6c05fe + docs/models/deploymentpreparedstackextend.md: + id: e67eeb6e75d8 + last_write_checksum: sha1:3f27fb536a0c6b3e9ce1b160624b76538c9af98c + pristine_git_object: 24d8f6bf12907a9b6b4c18e37fc6db502ef6d0e0 + docs/models/deploymentpreparedstackextendaw.md: + id: 249743c7ec08 + last_write_checksum: sha1:939449d6754c6331a5a7bc7d83d5417d6ed84691 + pristine_git_object: 5c20599895acdc801b8e5abb01fa0d91263dd231 + docs/models/deploymentpreparedstackextendawbinding.md: + id: 72030dee5f95 + last_write_checksum: sha1:1c470a9a47e539dd52e9211419828b36a46b1980 + pristine_git_object: 8507c4d96f95f9acf614d1122066ae5763d7406b + docs/models/deploymentpreparedstackextendawgrant.md: + id: ee430348cdb2 + last_write_checksum: sha1:2fd97f6def7299d726a7b5a1e9420162c426d6b8 + pristine_git_object: f3aa6d7e8a445e024119338bddbcb414df30a623 + docs/models/deploymentpreparedstackextendawresource.md: + id: 4e3e570df04e + last_write_checksum: sha1:c127a0cb99e165b51333be43c383920b288860a3 + pristine_git_object: c5935437fffba7c3ddb02562c24188b8dfff41c0 + docs/models/deploymentpreparedstackextendawstack.md: + id: f69b1a2a47fb + last_write_checksum: sha1:ce57b052f6ed1d481d3b9091a84dbe912277255f + pristine_git_object: bef6875dc23a32cf49e279bd532cb3d19e7e51f2 + docs/models/deploymentpreparedstackextendazure.md: + id: c440a323b701 + last_write_checksum: sha1:07979c7ab367b87ecd8bed0669473bc2df622463 + pristine_git_object: dde1550711c595fb616b421a8bcba6f45703c569 + docs/models/deploymentpreparedstackextendazurebinding.md: + id: e95a3daee1d9 + last_write_checksum: sha1:90c01f65a9290c1d5fa9a96d5beeaf03cf0efc3a + pristine_git_object: 2ef4cefe67328455c067788ea2f106beaef0f24b + docs/models/deploymentpreparedstackextendazuregrant.md: + id: fd796cb1b34b + last_write_checksum: sha1:5ef5c57d8176970fe84560e42055aa5358d37a96 + pristine_git_object: 8d25039551845c100b37629a877e1dd9673190db + docs/models/deploymentpreparedstackextendazureresource.md: + id: ffe7b4df45b9 + last_write_checksum: sha1:eec5c61218704de251ed99b27ce04110cd1762d8 + pristine_git_object: 17834cabff41c1f75c2f85f3c8501ef418641a20 + docs/models/deploymentpreparedstackextendazurestack.md: + id: 29b3dc18efe1 + last_write_checksum: sha1:a23a4e0b6c514d93d89eab6c5ba12cb9d86534b7 + pristine_git_object: f9fe64024f359bd5780e4a024dc21ab809679b5a + docs/models/deploymentpreparedstackextendconditionresource.md: + id: 9d2a123e62c5 + last_write_checksum: sha1:5978a257c210536682825641c6a56cd508bdd2bc + pristine_git_object: ca4fb97cd32e47624df5f81d31a0f99a29475149 + docs/models/deploymentpreparedstackextendconditionstack.md: + id: d4abc8a490f6 + last_write_checksum: sha1:f1956cde460f62667383f8db72fecf8fc09f7f39 + pristine_git_object: e6e9a685f49b834b82b8a585121048c1a3dbf4f4 + docs/models/deploymentpreparedstackextendeffect.md: + id: fa6328e5a174 + last_write_checksum: sha1:2368e8bef7e8c6cf3d5f6db9a8e4286ed39efca4 + pristine_git_object: bda4e8319f891f02cf5fd4825e0b3a4866059273 + docs/models/deploymentpreparedstackextendgcp.md: + id: 1a8878c637b9 + last_write_checksum: sha1:0269157cef635f7943a879c079ca420ed1ef8e44 + pristine_git_object: 938828db378350d985d14e5ecda98e9b3e466d88 + docs/models/deploymentpreparedstackextendgcpbinding.md: + id: b3bae41e30af + last_write_checksum: sha1:236d071f1d2804ed865aeb238e25929ae1fdb455 + pristine_git_object: f403896b7c8dc266f31e6fc5352af1d7e72ecece + docs/models/deploymentpreparedstackextendgcpgrant.md: + id: 39fb07d2dc2d + last_write_checksum: sha1:17b4d6cfdb17c86ed185160f8231f556ebfce65c + pristine_git_object: 0e0545a4c16e0dbabb9bd61ce02a97454e4e2c05 + docs/models/deploymentpreparedstackextendgcpresource.md: + id: b81638d4d551 + last_write_checksum: sha1:5cd38e5e2a73b986f602622d2eea9e482bed335c + pristine_git_object: cee74aa6c66f63d2e695bec656ee3ba6165fc47c + docs/models/deploymentpreparedstackextendgcpstack.md: + id: 135c6f669b58 + last_write_checksum: sha1:ba7931b0df0c6ce2ebd11a7d0593fd2491a46de7 + pristine_git_object: b59c07eb2da3b65ebcdc4250a661e57aa631095c + docs/models/deploymentpreparedstackextendplatforms.md: + id: 05d9b50834e8 + last_write_checksum: sha1:5c5b12eba952bda92ffc79017b5b25622fe48a79 + pristine_git_object: 21dc25c054b6b206da3855c6257f7d3641e400a5 + docs/models/deploymentpreparedstackextendresourceconditionunion.md: + id: 6335ce9389f9 + last_write_checksum: sha1:5f5c6a1adb19c51640a4a5de9bed2ac53811e049 + pristine_git_object: ff6909e98e749c8806e5b1f9ba0aab5012bb11bd + docs/models/deploymentpreparedstackextendstackconditionunion.md: + id: 9c46db65bea7 + last_write_checksum: sha1:d3d416bf87984c909f5a82be257bcfe2128658c9 + pristine_git_object: da60c1a50dba9ce3819a26085cdeca26fdfbf307 + docs/models/deploymentpreparedstackextendunion.md: + id: b96635181460 + last_write_checksum: sha1:ad796d9cc87909e1c006aa6812b75b3e18073545 + pristine_git_object: 9037be26c726b4c1d752b71c0425b9c9bab6f7d5 + docs/models/deploymentpreparedstackinput.md: + id: ed98e42ea086 + last_write_checksum: sha1:d1a0ec44571f3626c081e9b9a96b8bd55b7c1564 + pristine_git_object: b7f4ccd1f90dbe4fdbaaba8f02f7db4b91ec75ea + docs/models/deploymentpreparedstackkind.md: + id: ef67b9d62afd + last_write_checksum: sha1:54a1d60bbc4d80765eb3d35be2ee40bb87be3f75 + pristine_git_object: 9fcd2454babfe6396533362ecc527bf3446b14e0 docs/models/deploymentpreparedstacklifecycle.md: id: ff0f724944aa last_write_checksum: sha1:42d17e2edb84269f36140be39eecb7475c3992fd pristine_git_object: 76c7e6c249245e88c35876aee4c67d3af2375f9d + docs/models/deploymentpreparedstackmanagement1.md: + id: 2012baa8bee9 + last_write_checksum: sha1:ce2017ef7ee4415c014b322bb91f45b667a8dbe9 + pristine_git_object: 2c857a27821b8747bae483f489e9fe5827944b88 + docs/models/deploymentpreparedstackmanagement2.md: + id: 99cc1c2b5075 + last_write_checksum: sha1:80f946ea6b9ba4dbe16ab14a66eaca71ea89c91d + pristine_git_object: a14e6ffce8628bfee99c35d2344a4de47bbd846d + docs/models/deploymentpreparedstackmanagementenum.md: + id: 53abb44a9743 + last_write_checksum: sha1:8969f84b6e1f6ed508d23b4267c44b7d34acfdcb + pristine_git_object: cf690861f332eb7a2e3e71e210c4205bf8a3967a + docs/models/deploymentpreparedstackmanagementunion.md: + id: 57e3476f1899 + last_write_checksum: sha1:57b77d5ae8498981755dd44bdfa478a2d3c0e67c + pristine_git_object: a2a73dd952954746893dfc6316fb0131450bd521 + docs/models/deploymentpreparedstackoverride.md: + id: 242ab5364454 + last_write_checksum: sha1:46d979e0e9f98a77d9f84106b968c9ac16b3a3c3 + pristine_git_object: e005708690c212e5cab841c9da07e105ad5dedad + docs/models/deploymentpreparedstackoverrideaw.md: + id: 64e27834ce9f + last_write_checksum: sha1:8fda3c6b3e76ef42c503bd0d382c0c8a4b7db036 + pristine_git_object: 041f4958c718e93eeae9efc7ec4e3684c6d3e325 + docs/models/deploymentpreparedstackoverrideawbinding.md: + id: 1fd122cb49be + last_write_checksum: sha1:100386e555c0a5bcd4d399ce9b24286213ab9c38 + pristine_git_object: 6d80bc381300ec8cd71fa301ece24fa55085ac95 + docs/models/deploymentpreparedstackoverrideawgrant.md: + id: 5d8dd101b091 + last_write_checksum: sha1:19c7da1f8e0314e392f94d9606fef501d4a399d8 + pristine_git_object: 3654279ace6504529ca8e49ce52fdd26ef13e444 + docs/models/deploymentpreparedstackoverrideawresource.md: + id: a222127c0263 + last_write_checksum: sha1:f49949a2bda2484f8afc627583bb31d3beb29f24 + pristine_git_object: ac31597501e7568d3ac808faa1146dac591de70c + docs/models/deploymentpreparedstackoverrideawstack.md: + id: db655a4257df + last_write_checksum: sha1:47e3ff43ea426047759474584532496789ec2365 + pristine_git_object: fda89b6057f8d61a9850645fe02de4ba5f391243 + docs/models/deploymentpreparedstackoverrideazure.md: + id: c7db27ce6690 + last_write_checksum: sha1:246ec061ef52953958c12fa877e0439b890080d2 + pristine_git_object: fcff871731fc0a523134841e228372fd23f89aeb + docs/models/deploymentpreparedstackoverrideazurebinding.md: + id: 269613be0a4b + last_write_checksum: sha1:b47d0c5563fcebe2988aaca17788239b540016c1 + pristine_git_object: 388a059140678ce3d7cade2efb492413a36332f0 + docs/models/deploymentpreparedstackoverrideazuregrant.md: + id: 0e89b7845338 + last_write_checksum: sha1:bc6e1381214a7ea0185c93a93ca7e9fbbc8cd873 + pristine_git_object: 870503e41a28ee63386d83f92d29e711e0581b05 + docs/models/deploymentpreparedstackoverrideazureresource.md: + id: 23b9bf5fc360 + last_write_checksum: sha1:4be28f53a49c722d101045d48c67098eeb72d3be + pristine_git_object: 59701380b8cb4188096d6ae1d104f77d453afd1a + docs/models/deploymentpreparedstackoverrideazurestack.md: + id: 0634e70d91b4 + last_write_checksum: sha1:720bc2593fb17b3aaad506117a10bd2b33d2bc01 + pristine_git_object: 7d0c7a44fb4c133a06b753180939f40413139fb8 + docs/models/deploymentpreparedstackoverrideconditionresource.md: + id: 8473ca3689a4 + last_write_checksum: sha1:289ba607789e2103250ee19def6d381f156a470d + pristine_git_object: 1623a010197f2ae428a2485562911037fa8c24cc + docs/models/deploymentpreparedstackoverrideconditionstack.md: + id: 2b3b29d140f8 + last_write_checksum: sha1:658e7454d1ffd440551ff8c5c4ddb1a7e0bc68bd + pristine_git_object: 1c27c7987d993cd76c39f3bb5f8c4f440e07b6eb + docs/models/deploymentpreparedstackoverrideeffect.md: + id: cdd9c86cf059 + last_write_checksum: sha1:2315dc48d3f2f0083bb115c14b543f7513dfc0b9 + pristine_git_object: b1b078d25e270ee1e9ea7f14d6ee87cf4d756c51 + docs/models/deploymentpreparedstackoverridegcp.md: + id: 4fb271a338ab + last_write_checksum: sha1:d807b21c1a6085163af7ec4eb94abffc5b030bf2 + pristine_git_object: 743704c24be5557fc06b7d61ea1998bccb893a68 + docs/models/deploymentpreparedstackoverridegcpbinding.md: + id: 502c03b22896 + last_write_checksum: sha1:67d3d38cc71194d90840ff3ea30d42ed9862d960 + pristine_git_object: e0ca9b2cd0a6a5b2c13e4aa31227dc12eb659fbe + docs/models/deploymentpreparedstackoverridegcpgrant.md: + id: 254e8d480481 + last_write_checksum: sha1:ec38dbf4b9f115febc43ffceb768071e64ecbce2 + pristine_git_object: 92a6051c8a081ea9864945cf8b6867abfc4f5037 + docs/models/deploymentpreparedstackoverridegcpresource.md: + id: c6dc738b1aff + last_write_checksum: sha1:7d84c561e74e2ad7a9b8a8db5434e0fc6b2a07b1 + pristine_git_object: 2964ee8f3c4c2087359175503e47801e3f81eb8c + docs/models/deploymentpreparedstackoverridegcpstack.md: + id: 768d6d262a03 + last_write_checksum: sha1:96c181160e2f051b6ce649d3d4bee03e88105d0a + pristine_git_object: 5cf8c9a85face4f3b26f77571ae5c4240a1707df + docs/models/deploymentpreparedstackoverrideplatforms.md: + id: fafb38c5808e + last_write_checksum: sha1:773826217d858ad47d08e5d3077e8d04e78fd2d9 + pristine_git_object: bea70484ddbb7d10f0722799f597178acfbca85c + docs/models/deploymentpreparedstackoverrideresourceconditionunion.md: + id: 92382c496c20 + last_write_checksum: sha1:76453b9a403db044919f4a9ec56a41125ccb69e2 + pristine_git_object: 707b1f625edc96d8a5ee3a5bb2df8c1b801b92de + docs/models/deploymentpreparedstackoverridestackconditionunion.md: + id: 26cfd062369b + last_write_checksum: sha1:edb47b68d5c9f800a7d89fdc2cc38dfda4b31f3f + pristine_git_object: 704c1014a178f76274d523efee3d0c4cf4f5282c + docs/models/deploymentpreparedstackoverrideunion.md: + id: becae8238682 + last_write_checksum: sha1:37296c3ed1d0fad186cc62c111879ef9d39fc859 + pristine_git_object: 7f2699113c894439b66d98163f178716c7c1d62a + docs/models/deploymentpreparedstackpermissions.md: + id: 304816d050c6 + last_write_checksum: sha1:7c9389c023ee4d3753a1fd595f3731ccbadcf982 + pristine_git_object: e99b08086670771b143723e6a1bb64918c890c44 docs/models/deploymentpreparedstackplatform.md: id: 7281e9eca758 last_write_checksum: sha1:81525fdd225b4b584a9824a7c6b3d062dc0e3810 pristine_git_object: 62f0db880cb4f8e722c20a91d7cd1b53f7843047 + docs/models/deploymentpreparedstackprofile.md: + id: beb0f059e8b8 + last_write_checksum: sha1:833d08b39576786ae90032ba111903ea4cdd8d31 + pristine_git_object: 0d4f6af26ad69b36f3876f970af4eea51b78e0f1 + docs/models/deploymentpreparedstackprofileaw.md: + id: e94076c47f38 + last_write_checksum: sha1:c733cd799985424b36b90012e5dff250f28a892f + pristine_git_object: 3acf63df84650059faf38a22139e1687dfcbea1a + docs/models/deploymentpreparedstackprofileawbinding.md: + id: 58af318babd6 + last_write_checksum: sha1:f39661f08692a64c875f5e752fa63f30fde2de16 + pristine_git_object: 7e2d2694c2b318c8142c4c7eb7c51b01650d2845 + docs/models/deploymentpreparedstackprofileawgrant.md: + id: a8db398f19c0 + last_write_checksum: sha1:eef57148eb29e843006dd6f321d79f33d4e82293 + pristine_git_object: 28a1151444511509817c85e2740fcb9d8b63007a + docs/models/deploymentpreparedstackprofileawresource.md: + id: 3a87d5e100f7 + last_write_checksum: sha1:ae4d2f0c15589581e90929888330eb8cc2bde771 + pristine_git_object: 463bfa6e491fa390f8dd6321ab64cd8df0f0e295 + docs/models/deploymentpreparedstackprofileawstack.md: + id: 755a914946a8 + last_write_checksum: sha1:cf76ebd37407dbbe07cc572b1542d005c51743e4 + pristine_git_object: be3e8a9e8ef1b67c5c92bafdcc910e3116513a49 + docs/models/deploymentpreparedstackprofileazure.md: + id: 687397de2c80 + last_write_checksum: sha1:fea152f3f2c6bb9928d0e4f993cc650a660f25c7 + pristine_git_object: 4df7f8abc795207f65851f74561ff0e9fd7a5d32 + docs/models/deploymentpreparedstackprofileazurebinding.md: + id: ef2c832f5b4f + last_write_checksum: sha1:18d045af5270f6623a623b6526a0269c3110650b + pristine_git_object: b42e7f914f3966388fc0de3a6dacfbb09482ef59 + docs/models/deploymentpreparedstackprofileazuregrant.md: + id: 4cbd8b7ee1e2 + last_write_checksum: sha1:f2e388a48748e8b73c6f7789bf8a8ccded1031b1 + pristine_git_object: ed38aa97d15e10a8e13e026519911759730d6f62 + docs/models/deploymentpreparedstackprofileazureresource.md: + id: 1cc9706b8018 + last_write_checksum: sha1:cc17f46c2f4abd4f14453432004a6ad222b3c312 + pristine_git_object: 5d9d7ca16a7b7e7f25b92fab08fa1a5f042bca91 + docs/models/deploymentpreparedstackprofileazurestack.md: + id: 896ca234af67 + last_write_checksum: sha1:550272b29a605e2c15ec03448457b949d01525a1 + pristine_git_object: 6a47e683b166d683d2a80842b47ffbb5fabbf924 + docs/models/deploymentpreparedstackprofileconditionresource.md: + id: 23c4bdb17257 + last_write_checksum: sha1:e2eb7f171927030c1d6c6c2202436eec15a25640 + pristine_git_object: 23dec5a1ad9f5fb44a0bc61b81c35e58de85069c + docs/models/deploymentpreparedstackprofileconditionstack.md: + id: ff0abc525e2b + last_write_checksum: sha1:995116e1be78adf9cb9c6add5ddfc2592bd0d1e4 + pristine_git_object: 1d1821b4d9220e9ebbd5a412aaba050d7b3d9e7b + docs/models/deploymentpreparedstackprofileeffect.md: + id: c57bdf7beb17 + last_write_checksum: sha1:6c2d5d7f8ee819464404cce67aab809b365a32d5 + pristine_git_object: ab1e42c0ef16142b69728be4ec5b21fdc2ad3c24 + docs/models/deploymentpreparedstackprofilegcp.md: + id: 2df5a39b4394 + last_write_checksum: sha1:388ca92a439bd9d071fd74efed09bc4555171e88 + pristine_git_object: b23ec4028a911398956510e236868cce47bb2285 + docs/models/deploymentpreparedstackprofilegcpbinding.md: + id: 9b10a6d4c60e + last_write_checksum: sha1:93653e44c32b3ce82ed501445653b5689f37c044 + pristine_git_object: dcc7c6e24ff058ececfe04c5e2fc3f09ccc5d89c + docs/models/deploymentpreparedstackprofilegcpgrant.md: + id: 61f4d473515e + last_write_checksum: sha1:bd248f41b281c279001b127c57b7531f3bd084e3 + pristine_git_object: 3a92f77f2f7b8f79e050ad19bee41a26e919e41b + docs/models/deploymentpreparedstackprofilegcpresource.md: + id: f382be899210 + last_write_checksum: sha1:0ccf8206257451f83d7b642ad0d5ccfa46519b24 + pristine_git_object: eba519313abea338e3302d85bc0cbb6dae4a44b6 + docs/models/deploymentpreparedstackprofilegcpstack.md: + id: d982b0a69500 + last_write_checksum: sha1:cb5f660846ed96d037bcc45ee1d39d86d41594ed + pristine_git_object: f6943941598e0bde57d74a8015e93cf8217dbe9a + docs/models/deploymentpreparedstackprofileplatforms.md: + id: 77156532c607 + last_write_checksum: sha1:bbb635522789cb8f88d908096cff195196de9de4 + pristine_git_object: 00992d1f6c186cd2b254b98a50d220b2d538cbc7 + docs/models/deploymentpreparedstackprofileresourceconditionunion.md: + id: 1caff5031c93 + last_write_checksum: sha1:2d8bd478a49acba8843bd27738a7730e7d1f3e86 + pristine_git_object: f5e2bdf69c81ebce62325caeb073e067506e9f17 + docs/models/deploymentpreparedstackprofilestackconditionunion.md: + id: d6e7f12b6837 + last_write_checksum: sha1:dab6e6a9a9acaacf298f052c411bc3505ba7217d + pristine_git_object: a301e7d1fb4b0d462eda130a0a53978726160bc8 + docs/models/deploymentpreparedstackprofileunion.md: + id: 72e3c0786d35 + last_write_checksum: sha1:eb934b6f84beda9091c79cd8b15cf440bfede532 + pristine_git_object: 4cdb53b0aa2fb3df4192c15bda27b9f776a0ce5b + docs/models/deploymentpreparedstackprovidedby.md: + id: fb99e68ef23a + last_write_checksum: sha1:2d34c5e2d1e059fb8002a820834b527ed5194b88 + pristine_git_object: 1fba716a26b1565b73677cae5695e0fcd6169974 docs/models/deploymentpreparedstackresources.md: id: 3fd12e8af72d - last_write_checksum: sha1:7563638e099e29b1483feab0254c66a5529525e6 - pristine_git_object: 51c0abc722410b04f32db300d071a0a38bc49d92 + last_write_checksum: sha1:5b22191ca01906272dd9aa7c8391823ad9ac98a2 + pristine_git_object: 38a42b82ceb8e2db7ef30c90484491fc0dd59608 + docs/models/deploymentpreparedstacksupportedplatform.md: + id: e92e0b267207 + last_write_checksum: sha1:4d2e5dc6f9295643aa8bf508290cb8b459d071d3 + pristine_git_object: 5f1b54743f844bba448361e33744849a6dfc769d + docs/models/deploymentpreparedstacktypeboolean.md: + id: 0cfe3c4cf348 + last_write_checksum: sha1:4eb35ef917b059e9b82a9c911e4034b7e7edb2b0 + pristine_git_object: 69fa7cff02d48e75f9a93f424a953b94b761d241 + docs/models/deploymentpreparedstacktypeenvenum.md: + id: ca2416df3c1e + last_write_checksum: sha1:3351153279d83bdf2d57bdcd5b6c09fcca0a91d1 + pristine_git_object: 639ac47d3dcec2e10ef7c5792f17966b7d6cd42c + docs/models/deploymentpreparedstacktypenumber.md: + id: 3da99f3521e5 + last_write_checksum: sha1:3b28dbac73c1d3d98884ac42383bb07f368844d3 + pristine_git_object: 1b7af4b806f523d647b352d3c940a17b2fb3eb95 + docs/models/deploymentpreparedstacktypestring.md: + id: 68ffe0726653 + last_write_checksum: sha1:3bba8609e791c0564246427a123956f4b5680ee4 + pristine_git_object: 7d328260aac40be73bd49595d623ab1d798a51e9 + docs/models/deploymentpreparedstacktypestringlist.md: + id: 8cb6eaf48f72 + last_write_checksum: sha1:0516e0b7d0fad9af4b7b4b34de03a6c0647eb724 + pristine_git_object: d84c021233fa92e39b945301d69c7921c1e4f3d4 + docs/models/deploymentpreparedstacktypeunion.md: + id: 991445824d3d + last_write_checksum: sha1:27803a5db44313d998db695ad44fe08d48573b1e + pristine_git_object: 958a123f7e80bd996b8cbf9335ce4b1c1412431d docs/models/deploymentpreparedstackunion.md: id: ee964e497218 last_write_checksum: sha1:8eeb0f210426b25372aba24d50f6be7640a69fe0 pristine_git_object: 85b3892b543f5de4ffa8fc77f7b9a47646dead35 + docs/models/deploymentpreparedstackvalidation.md: + id: 05d170155172 + last_write_checksum: sha1:971b288990b9cce5c93e688ea4325cd3c2f7c9ee + pristine_git_object: 20e4aa90865babe45267fe92e35e4c51dbb61dc5 + docs/models/deploymentpreparedstackvalidationunion.md: + id: eb637b6550e8 + last_write_checksum: sha1:a98de9f5a46a81fc05a9b9f55bc727345e97c464 + pristine_git_object: bd5c40fe7a58feba7678229cc565a5e1e27ebaad docs/models/deploymentpreviousconfig.md: id: ff8387105270 last_write_checksum: sha1:d14e2d5e90d42b62d4ee523902a522a28dd3ffa8 @@ -5910,106 +6970,10 @@ trackedFiles: id: 0d65faf71ccb last_write_checksum: sha1:96898ee12344edc1eb5d721c2113378643729cc0 pristine_git_object: 8660d73fe5b837ead4a5bfae054d2985af2f5174 - docs/models/deploymentprofile.md: - id: 858e1ba29b3c - last_write_checksum: sha1:39336a45ba1ab332c4a2e599d68ec91fd687bc37 - pristine_git_object: c5e7249db174fc55eceb2eae30f627aad1a904e4 - docs/models/deploymentprofileaw.md: - id: 104038f20c50 - last_write_checksum: sha1:7cf55c6bff9b4c15f46118607ed7325a01277b40 - pristine_git_object: 297636daa9e05d20b5809d6bef8fb401cc2f7070 - docs/models/deploymentprofileawbinding.md: - id: 02d699b6a446 - last_write_checksum: sha1:f61816dc028d4d328f290b14114502cde4243984 - pristine_git_object: d1d6c7e72e7ca28d00965a68b11f17d544b735b5 - docs/models/deploymentprofileawgrant.md: - id: b491ce32db5b - last_write_checksum: sha1:555b9cd21964904847407c94589626cafb39b835 - pristine_git_object: 817d6abbaa87f0c0760f05d7c66e329fb456d6a1 - docs/models/deploymentprofileawresource.md: - id: 2b6d3ff320e0 - last_write_checksum: sha1:499bd9e70e1d600f2f393602474f2c9e98f7a703 - pristine_git_object: 3cb8ca1b49e9e72819828b933e09fda5d4154174 - docs/models/deploymentprofileawstack.md: - id: 8a0e3473951f - last_write_checksum: sha1:cdb3b868e5dd1f8db4172d91ea263c52902e2f25 - pristine_git_object: 20186ebade7d330af00bcb2d353e34354f59336b - docs/models/deploymentprofileazure.md: - id: 2bb2b2bd2fec - last_write_checksum: sha1:69e55c30619afcd231cfc57656a728943abcdb1d - pristine_git_object: f3b706a2e701a6f3874dbc3f47663f81667940f4 - docs/models/deploymentprofileazurebinding.md: - id: 3613a66f0171 - last_write_checksum: sha1:860c0c9a377759a43cb6144d96d2d605a0913339 - pristine_git_object: 2cf6bb8ac3a8dbbd380719e9228ea506f712b00c - docs/models/deploymentprofileazuregrant.md: - id: 3d439e36a7d0 - last_write_checksum: sha1:28c3f31fff61c10dd74d6c82b6f7c5263ccd6db2 - pristine_git_object: cdab8b12aba9fe59f0a268f869997477c6b3bc48 - docs/models/deploymentprofileazureresource.md: - id: 4821d0291fdd - last_write_checksum: sha1:65de798a2a50014828d33c2498ecd82af5ecc238 - pristine_git_object: 9bbea435ee0fbd884ba88fa08538a74cd10db982 - docs/models/deploymentprofileazurestack.md: - id: 54b50442883d - last_write_checksum: sha1:3a33fe7f6146024e5320a721cf2a241ea2117995 - pristine_git_object: 764297ef295adf8703b2d6d2ec8a486f07f96ffd - docs/models/deploymentprofileconditionresource.md: - id: 5c9fb8831f02 - last_write_checksum: sha1:0357f00915d5c05c85e114b9ebc09c1a10e381dc - pristine_git_object: d3c6cec62615b99cc10c2c1547b82fb96cb34854 - docs/models/deploymentprofileconditionstack.md: - id: ad8753b33b93 - last_write_checksum: sha1:664e99440ec5fc6cf56cb9cea86f113b877aa284 - pristine_git_object: 3a682d7476869cdae73771fc51292d498b2a82a9 - docs/models/deploymentprofileeffect.md: - id: 380c685841eb - last_write_checksum: sha1:34bde51b6a97683cf6212f749734ce68b20a03dd - pristine_git_object: a5d8f9645f676077396ab19c9c1ec079712c7ad4 - docs/models/deploymentprofilegcp.md: - id: 8a8f32fe1910 - last_write_checksum: sha1:c4fa82f83aaee0f068d1294b25211a9a9dbb7ae0 - pristine_git_object: 080c0b7a5132084506905a5399a62ea36880a3a5 - docs/models/deploymentprofilegcpbinding.md: - id: 643c7975a2eb - last_write_checksum: sha1:790c82fc92598527fb744a1665d5cd65b7de9e6c - pristine_git_object: a33c8944e696d98d844e0c41cd611f84bce6b549 - docs/models/deploymentprofilegcpgrant.md: - id: 971191f88fcb - last_write_checksum: sha1:6290bffe528571de1ae12031c36a91ff1aafdada - pristine_git_object: b7e351845e6c4c22df4c1812ac11784b918c7932 - docs/models/deploymentprofilegcpresource.md: - id: f9a3ce7d1fb9 - last_write_checksum: sha1:e3df0da65e0c4e4b39cb67098d778420e5025c85 - pristine_git_object: ac93f41fadf9a2ca8f48caadc59d54582022a0f7 - docs/models/deploymentprofilegcpstack.md: - id: 1d0068cdacba - last_write_checksum: sha1:fbf92172747a16c6b954a321f1b1e31cc130da04 - pristine_git_object: b161e0f69b7db953c88cd2e60b3be122fa658299 - docs/models/deploymentprofileplatforms.md: - id: 1e07f7107019 - last_write_checksum: sha1:51977fd34405732d7e5e2ed17bf9a63175a45fd9 - pristine_git_object: 30082868f8e7966a3bb11c64896a6126fb93d7b5 - docs/models/deploymentprofileresourceconditionunion.md: - id: 3804c7190544 - last_write_checksum: sha1:3d087dedb7c931a8f822c13b6aa5e6d1f8714db8 - pristine_git_object: 4cc57c5b4f8b8a48c0640c410b71e13b1ae8ea75 - docs/models/deploymentprofilestackconditionunion.md: - id: aae5ec7a0947 - last_write_checksum: sha1:d11a31cdf2af5ea1009d2c4e751cd3495d0e7c6d - pristine_git_object: a972b2b84fd27662058bbbc18d181c20c5f1e34b - docs/models/deploymentprofileunion.md: - id: 46dae6114556 - last_write_checksum: sha1:fdeec0e6d83f0e03c9e34a203f405e3aa097deef - pristine_git_object: 3145219a26006a20347ecb172fe65b4118b1c576 docs/models/deploymentprojectinfo.md: id: acfaebd38bb9 last_write_checksum: sha1:ead0a3af886e8d9547c04e0e388db98526f6d42a pristine_git_object: cccd32759618bfaa0da5ff26f47819384d04f3c7 - docs/models/deploymentprovidedby.md: - id: 6c6d0f94fdac - last_write_checksum: sha1:5f0c38ce39a3743fa3a517317f7dd5541e27b4b7 - pristine_git_object: 1daba96f3886c492a252f673a845fefa5b3f4abc docs/models/deploymentproviderawsalb1.md: id: c4264ed261a4 last_write_checksum: sha1:81b5d16acea1cadb02dfe9228317dd675a958c83 @@ -6168,16 +7132,16 @@ trackedFiles: pristine_git_object: 0bd70ae00587aae14d707b77759f40d645ba845c docs/models/deploymentruntimemetadata.md: id: fe994367ec66 - last_write_checksum: sha1:dcf02e40dc7c3e24d42cd1964be20a12c9be667e - pristine_git_object: 8313fe7e61e35070d7eae3351d56566f8de2a802 + last_write_checksum: sha1:2f475e6ef4f5c94d877c5bf2debf7877ee0f15fc + pristine_git_object: 41975998c40700b8a58451cf8734df1452cc5442 docs/models/deploymentscope.md: id: 0fcde4ae9c17 last_write_checksum: sha1:e410197a2cb2aa755823d657547262d76cbbdb6c pristine_git_object: 4e20f3d152be7e16520480d37f2c6d3537cc0c85 docs/models/deploymentsetupconfig.md: id: eac9af2e4f7a - last_write_checksum: sha1:7ac47d209050a97f449eca7c87147ccd81061e32 - pristine_git_object: 660afbdc9fb4d1c20370ad02424548b9bc8244c1 + last_write_checksum: sha1:776ad454dc84e18a8cb17dc529cbecf442da83eb + pristine_git_object: 54246750bc7ac9215dec4738613958f10396aa2f docs/models/deploymentsetupmethod.md: id: 046d10120cce last_write_checksum: sha1:ca519671f635c4b82fbfe0841943faddeb9d3f39 @@ -6330,6 +7294,22 @@ trackedFiles: id: e2e37126bd84 last_write_checksum: sha1:25e4b1f2483bcf5cf61ae062e3eb16827d95960e pristine_git_object: f143fb3e766241151d0e2cf447f7f28cdcc16f16 + docs/models/deploymentsetupstacksettingspolicyfailuredomains1.md: + id: d4f9e561ae0d + last_write_checksum: sha1:a699670ce2368b60a651323b7a2d98919d240854 + pristine_git_object: 0e830678e5f4edf485f9ca4e44589e6afded3eda + docs/models/deploymentsetupstacksettingspolicyfailuredomains2.md: + id: 03728408c729 + last_write_checksum: sha1:c9b91e53cc885fb08cb14e96693826b9343a141b + pristine_git_object: bc9e6a1ceb8a5b66bc83eb700833c3c40c5e9974 + docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion1.md: + id: 09a9fbaa3069 + last_write_checksum: sha1:0bc1330f136193656d5deb442e0472cb3814d54a + pristine_git_object: 01030413f18db508fc5003f475e30394d8b9da42 + docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion2.md: + id: a542d4e43123 + last_write_checksum: sha1:4fee4b924ca1fd5c62da504d54218974a905490c + pristine_git_object: 34e077b20f74ecb5232468cfce4621a12f106816 docs/models/deploymentsetupstacksettingspolicygcp.md: id: 466e99ebd9d7 last_write_checksum: sha1:8a2871ba2979e54f71b85f65a509921ac2399932 @@ -6400,12 +7380,12 @@ trackedFiles: pristine_git_object: a61a2e06b22b4a729b3cbe51844d079999a675e6 docs/models/deploymentsetupstacksettingspolicypoolsautoscale.md: id: eb35c5478db4 - last_write_checksum: sha1:522cb32da4ba2d49c89cc3a1d213e374ffaa74f5 - pristine_git_object: 92a0235a6e8796cff0c364498dc1a7ded944d1ab + last_write_checksum: sha1:96961918b4a1a02fb97a327357b7738aefe17580 + pristine_git_object: 4757e01e474873c927059d3c42a440ac3e441564 docs/models/deploymentsetupstacksettingspolicypoolsfixed.md: id: 4771dc71782c - last_write_checksum: sha1:713aa29160a1b2e391df66f23efd204386d1e97e - pristine_git_object: b259684b47992403bcd4fc246fcf2c1ea59a99ef + last_write_checksum: sha1:e7164c1d8371bff8755ff68d476175503fbb6bc4 + pristine_git_object: 503782d9277b8c7d6bf074de172626b7ee9819f6 docs/models/deploymentsetupstacksettingspolicypoolsunion.md: id: 20182635222b last_write_checksum: sha1:abaae9cf68e182f60531dd0ca3976f1e123840e7 @@ -6590,6 +7570,14 @@ trackedFiles: id: 6f3dd0748a45 last_write_checksum: sha1:31869828936572679c7025fbfd02ea4a60695466 pristine_git_object: 58e04aaf08f9af599ddbd329940cedddd5fbb126 + docs/models/deploymentsetupupdateauthorization.md: + id: 98ecb2993b6a + last_write_checksum: sha1:bdbf5947923c7f2e3953d59fcb185d447405f0f3 + pristine_git_object: 0dcd578a06257d01168f1c25588b4ad52d02bd54 + docs/models/deploymentsetupupdateauthorizationunion.md: + id: e0f0bcb80075 + last_write_checksum: sha1:784a762382b8b12dacf949cdd56394a96dfe96d0 + pristine_git_object: 364858d99421bf90ebc0eed6c370394b4476647f docs/models/deploymentstacksettings.md: id: 3adb06a59207 last_write_checksum: sha1:6071842f37c010c3d26af0f96c8f6bd2b87c0b82 @@ -6605,7 +7593,7 @@ trackedFiles: docs/models/deploymentstackstatedependency.md: id: b43c29112dad last_write_checksum: sha1:bd2ac86a50f0b979dfde3891e419b96dc9e824d3 - pristine_git_object: d444bb29b8de5a7b9d0635e58cdbebcca973af3d + pristine_git_object: 2c6f2c24ff2473b6a3179e07a3e84bb53096c8df docs/models/deploymentstackstateplatform.md: id: 12b6b77812eb last_write_checksum: sha1:cda207b34ab1b1cddaa4b3b506f74cd85ceb244e @@ -6626,10 +7614,6 @@ trackedFiles: id: b039895c72a9 last_write_checksum: sha1:bbcd15cf34c085d78c55e70f2334395b073c977d pristine_git_object: 0df89008f32c7c4266a829f8df4d06e6cb7dba74 - docs/models/deploymentsupportedplatform.md: - id: ee0c8fd79005 - last_write_checksum: sha1:4bad683e75aea9bd5236b02e7e9fb262f4d419e2 - pristine_git_object: 543070b1e26420c3a15413e0ee8e882db067e17f docs/models/deploymenttargetenvironmentvariables.md: id: de09b362a5d0 last_write_checksum: sha1:9c045c6d06c6903b6df2628aa4400ca84c316ab1 @@ -6642,10 +7626,6 @@ trackedFiles: id: 0cadd0a8df1e last_write_checksum: sha1:476a64bb8351b162a9ecb62f3afd19c696408ac7 pristine_git_object: 94bc7ad046367af8bcaed97b04cf47af17c9d9bc - docs/models/deploymenttypeboolean.md: - id: 70c1cf6d42b8 - last_write_checksum: sha1:c8cfb0b557d67286d84ad9e93fe7d317b63c1eab - pristine_git_object: 6e6f5f621794edb21434cca9eab0e002ae863fbb docs/models/deploymenttypebyovnetazure.md: id: ea9a2c28dce3 last_write_checksum: sha1:867b3d0bfc3506ed06430e883ba0609c19eb8789 @@ -6662,26 +7642,6 @@ trackedFiles: id: 9b97614cc4f8 last_write_checksum: sha1:a97a2c733e00363230a10bc108110dd8ba76b3e3 pristine_git_object: 128acdc80f5ffcdd045148631908d6cd3c0f4d92 - docs/models/deploymenttypeenvenum.md: - id: 799628553dad - last_write_checksum: sha1:7a4631ee91c04df3e67d8376a5dae7c10ea29170 - pristine_git_object: 869a7e55995a510e88fea8857fed395c5c332cc2 - docs/models/deploymenttypenumber.md: - id: c2626a138026 - last_write_checksum: sha1:e2e2e09a51cf527fc335da9f87d8aff8d0b81bca - pristine_git_object: a8d7c7a21af9040ccbab0073eef1608d9bd1dc3b - docs/models/deploymenttypestring.md: - id: 960d0924e44d - last_write_checksum: sha1:284f14176fef53558270eeb9969fcccf883b3ce7 - pristine_git_object: e6b2e43610b5b07f68c4444c9b3227ada60f6abf - docs/models/deploymenttypestringlist.md: - id: 301c18a6e97e - last_write_checksum: sha1:2a3e8bd9d7d4f4489acbc9a538c0cddea07bb355 - pristine_git_object: e72dc90782b098e9638b53ba1dd61f1e49e1b344 - docs/models/deploymenttypeunion.md: - id: a76ea9eea032 - last_write_checksum: sha1:d9643e7842d55367fd998c41e022e5ce35b430cf - pristine_git_object: 0a42e1a12459d05bdc8ef888a0cc67d89ae5c156 docs/models/deploymenttypeusedefault.md: id: ea52cb0f4b72 last_write_checksum: sha1:00d9d2a6574a8a44675a971a1bb09deade944867 @@ -6694,14 +7654,6 @@ trackedFiles: id: e9c391a7a1e8 last_write_checksum: sha1:4692cd26cac03e786ddc06befd7785473ca7b6d0 pristine_git_object: 0a631c64bcd366170b8f3f7ca75bcafbb13d2d3d - docs/models/deploymentvalidation.md: - id: 78b63a46e09e - last_write_checksum: sha1:b07ccc2cddd1ce194bbfe75a425b9651ad443bff - pristine_git_object: 00e5951130d3a97ff8ad9f70c903bea04c0d0379 - docs/models/deploymentvalidationunion.md: - id: 88d83ec748e3 - last_write_checksum: sha1:ba8057139bace57f61d1b2ce82aa27e1cee3ba31 - pristine_git_object: 583bedc8fb525813d63de3aa16c89213955f3cf1 docs/models/dispatchcommandrequest.md: id: b7ff4aeafd55 last_write_checksum: sha1:8f64ca126a48b932876b14c76d6f6b3110da8578 @@ -6830,22 +7782,30 @@ trackedFiles: id: f8f0907c6906 last_write_checksum: sha1:043bcede96337ffc27ee75bccd4b8b46241f87e0 pristine_git_object: 5d3a934d19f7f5d6676549477a8d149dc35473f0 - docs/models/errorfailed.md: - id: bca9dab46c94 - last_write_checksum: sha1:3a6ff5a27ee817f52c6e3809a0ab82272a2b8eff - pristine_git_object: 3975b4dccdf46d7afc10210cf02ecdf4d7fb63e0 - docs/models/errornextstate.md: - id: 3d9d89513e0f - last_write_checksum: sha1:35f1f8b31d201817a383e4c34a35006289afa74e - pristine_git_object: 27b4d6de190255f90534896822d20cec2fbeb8b3 docs/models/errors/apierror.md: id: df4a0e23247e last_write_checksum: sha1:b9241801fa5ddb3575921ba48dd27c3fd6b5f786 pristine_git_object: 9fa1f23a2a013d2d8bf4674df7703f6edb544f9d docs/models/event.md: id: 311c22a8574a - last_write_checksum: sha1:2d710b10d08524e5538c616ae8576a3611c07d4a - pristine_git_object: 4088af26db7a48fa6f0b18906384eb1643e1d297 + last_write_checksum: sha1:549b328a7ddd2cb36fae217fb48f067bf2310292 + pristine_git_object: 89ae37c6c6a2e9d773a061bebc079f5a664d01bd + docs/models/eventactor1.md: + id: 5b1114574da8 + last_write_checksum: sha1:b0bffa277cc3cc5cddedd79433da3d159e9c54d4 + pristine_git_object: 4d21e224a69773a4d3befdbc0b1c134f26080a8c + docs/models/eventactor2.md: + id: 3d4585d79f87 + last_write_checksum: sha1:b4b5b79354b88f985fb67b7f7b78b58d18e468a4 + pristine_git_object: 356fb43e3f633521affc81c19f5f1f97b2777f5b + docs/models/eventactorunion1.md: + id: c89905044273 + last_write_checksum: sha1:2faa553a63fec228b405ac453e18ee11319621e6 + pristine_git_object: b87ed6f7e88c621ccd32518676e3562669e5441f + docs/models/eventactorunion2.md: + id: e246ccd1008e + last_write_checksum: sha1:06839c612e2af6cddaf2229e0dc3bfff52b2abe3 + pristine_git_object: d1658651c66b6ce66a3fa2165803863bc9c60076 docs/models/eventconfig.md: id: a812f6f1c32b last_write_checksum: sha1:2cedd8d01fbed51336dc1f5878161263832eb1c0 @@ -6858,18 +7818,218 @@ trackedFiles: id: f9f13e960056 last_write_checksum: sha1:e38a6a836fe1487b57ab3925df9f203f5e20f6f3 pristine_git_object: 1013223491ee42ff9eaf960e15aa0a5c211b519c + docs/models/eventdataassumingrole.md: + id: aff078fbf208 + last_write_checksum: sha1:4bc143febc853ba1a9b47412fbda74e1ac5499b1 + pristine_git_object: 16a7aa1f4eaa86bf38759156ffd7d8d982441df9 + docs/models/eventdatabuildingimage.md: + id: 1d98bcc86388 + last_write_checksum: sha1:b8ca75333ea970d93fd9cb209d5b1c614de26522 + pristine_git_object: 03a4f104dbacca68f923b50c1b93333d1a49e544 + docs/models/eventdatabuildingresource.md: + id: 3c3493aca54e + last_write_checksum: sha1:79f471531b3b29b26ac452a2117afdfc1b826e22 + pristine_git_object: b0ee2c9b1afbb8d781bbe53df821b64f5bdb6457 + docs/models/eventdatabuildingstack.md: + id: f78e1bdf7aec + last_write_checksum: sha1:cd305687e58df1489bf3702f99784c9cf366e235 + pristine_git_object: 8074deb65b6346073f2d86d3f4b46d4a1c547461 + docs/models/eventdatacleaningupenvironment.md: + id: 4dcf84aa1cff + last_write_checksum: sha1:92c1ee56ffd28c75652cbfe3f5f3bdda704427d2 + pristine_git_object: 96b4047741f2d9133ca2885ca74c3d51ee91de73 + docs/models/eventdatacleaningupstack.md: + id: 5fe0ffc1f1dd + last_write_checksum: sha1:1f17258ba9ea153017c3032553c77a8005c89a29 + pristine_git_object: c4d8ed587dbc888cbdd4b2cd697f427ff931fb8d + docs/models/eventdatacompilingcode.md: + id: 114e58a4b053 + last_write_checksum: sha1:7c0f6c1eb092faa6ab7af73a117a355f0df4ae38 + pristine_git_object: 425357d667ee70dce0aab340d8ba808e2e75b5f4 + docs/models/eventdatacreatingrelease.md: + id: 7e43a135db0f + last_write_checksum: sha1:8abfcd4147ea9f64c9ccb57b8f8f3995bb421852 + pristine_git_object: 40e18444d58bcbca2f33873766f448a810ebb271 + docs/models/eventdatadebuggingagent.md: + id: ca44d5252bd2 + last_write_checksum: sha1:6677e95f8d71f8850d0c8742f7034cf6ec683a07 + pristine_git_object: 78f5a64de9015daf3b13e3ac91da9422475838f8 + docs/models/eventdatadeletingagent.md: + id: 9f93dd9e6a9d + last_write_checksum: sha1:94b4f26c6353023aa01788b7e4df035117dd13a8 + pristine_git_object: d569607ee498217d86de178835c78d4ffbab77ab + docs/models/eventdatadeletingcloudformationstack.md: + id: 81678f62f91a + last_write_checksum: sha1:3405a24cc65d54c52696570b294520b06193c0bc + pristine_git_object: 084a1c6609fc217f659ca5192f547762788e634b + docs/models/eventdatadeployingcloudformationstack.md: + id: 3e0dbaec233e + last_write_checksum: sha1:9390c4f0b7f7369e34ac5748e05917696e83aa01 + pristine_git_object: 79300896eac111b3a620bbf3357272652bbe9335 + docs/models/eventdatadeployingstack.md: + id: 4449041faa36 + last_write_checksum: sha1:a92cb6119aed821f7169f2bcf52b7d3f1cea9fed + pristine_git_object: d099adce16379912f28187e1bbfe4ff8efb9caf5 + docs/models/eventdatadeploymentcreated.md: + id: ae58bb3d6606 + last_write_checksum: sha1:7c36de7a2ad4f39d5b0ac6e746b4ddda222002b3 + pristine_git_object: 9ee8f080c3c5809bd333908fca554dcc86cc83b7 + docs/models/eventdatadeploymentdegraded.md: + id: 636bc5aff63e + last_write_checksum: sha1:309155c26092d7656e2fa20ff563b0140647d585 + pristine_git_object: c38b5efe4b2f32cbc281417facf8ab829782c59b + docs/models/eventdatadeploymentdeleted.md: + id: a0f4a8636b38 + last_write_checksum: sha1:5db53cb6de34666814ee72dc1025a15ebe56a83d + pristine_git_object: 7951b513c041cc540e76079fdae3a07fa538551a + docs/models/eventdatadeploymentdeletionrequested.md: + id: b1946f768f8d + last_write_checksum: sha1:fa0e7020426356266a3e414bb755691bb83177b4 + pristine_git_object: 6011b67f801c7b7820653d7e002064d4f66f62e2 + docs/models/eventdatadeploymentenvironmentupdated.md: + id: d31e4f229887 + last_write_checksum: sha1:b24c0f2c0302dea8f63a5e318aea430299405d8b + pristine_git_object: 47504797a1b61ac986f16baed9aa2b064b2aee21 + docs/models/eventdatadeploymentfailed.md: + id: 5d7d9f397881 + last_write_checksum: sha1:f7e757b2d932c13663d4436496933079c703e15d + pristine_git_object: 223c0a33feeb646420c41b10f5bd668b3ab4ba1e + docs/models/eventdatadeploymentrecovered.md: + id: d02a6eaefb56 + last_write_checksum: sha1:52d7a543610ad18d1e9c65a6d20a525b84648333 + pristine_git_object: 8c201ca96934e4c992c08feef5fd307e8d511e2d + docs/models/eventdatadeploymentredeployrequested.md: + id: 618dda9fff8d + last_write_checksum: sha1:9a7d45e0977f8b8088ad4ddfa9bc1c69042ef7c6 + pristine_git_object: a1dcb6c7196561c7e0f74148d32ee52aa37be652 + docs/models/eventdatadeploymentreleased.md: + id: 6437aeae1c84 + last_write_checksum: sha1:f07bb1dea2214570877e437a951ab9b613dddcf5 + pristine_git_object: 20ad1936443eaa332722207be86ab6550a54116c + docs/models/eventdatadeploymentreleasepinned.md: + id: 0c8009771734 + last_write_checksum: sha1:73f40aa3faf4f5dd896f3a597a8001cd5b1ec249 + pristine_git_object: c0c2a83442aadc37caa19c15ad2cff38b8511e1b + docs/models/eventdatadeploymentreleaseunpinned.md: + id: 1e2638f4e413 + last_write_checksum: sha1:baddfa5d8de21449afd49cbfed0c9aa1dbf051b5 + pristine_git_object: 25e6eaaadef6a083218f2167a6da1b39f7b8ec46 + docs/models/eventdatadeploymentretryrequested.md: + id: 4f89731b648c + last_write_checksum: sha1:c5fc2103818924d94cf459d07177dd5d544a2927 + pristine_git_object: cb69adb6347ca07c3969d2f58c35b43f911bfc29 + docs/models/eventdatadownloadingalienruntime.md: + id: 791327976e0f + last_write_checksum: sha1:a3807f8f26603c29121e6ed0684371d3b42f5cdc + pristine_git_object: 46987095ca09fe85c2f71fb375904787624e933f + docs/models/eventdataemptyingbuckets.md: + id: 0ee96f6147eb + last_write_checksum: sha1:100316023995fdf184f60a41dbeb997b3809bf07 + pristine_git_object: 962bdfebc4b6d90acb065613bef257b3b950f607 + docs/models/eventdataensuringdockerrepository.md: + id: 6f843e345bac + last_write_checksum: sha1:38a9deeb9d9d5e7dafe0b8b9be20aa2c992cd5e6 + pristine_git_object: 275727f8c765411c00e1af90689c019b74faf40a + docs/models/eventdataerror1.md: + id: c67cd6c5423d + last_write_checksum: sha1:a45e37db3d4d210ca4c7433659a0ee8567f3ed4c + pristine_git_object: 6bd953eb33da99f0ee59aca10600968193940fc0 + docs/models/eventdataerror2.md: + id: 30a33c4ddf91 + last_write_checksum: sha1:f78fcde892ff72a3e0f4b2c693599585a244dda8 + pristine_git_object: f4a9b28f322b6011227e3263e6c6dc722ff5eb05 + docs/models/eventdatafinished.md: + id: 0269eeff6be2 + last_write_checksum: sha1:8706939c9b6e4a2c1d1486d183830bc6cbe6e5b6 + pristine_git_object: d174c525738b5a78f7dd886d4ccbb103005cd17d + docs/models/eventdatageneratingcloudformationtemplate.md: + id: 2ea71d967a7c + last_write_checksum: sha1:9dff0f7ae6ee2faa3de7ae4a5e567ebebc0f675e + pristine_git_object: cd6fd644d3092915a59e3da5ec4c836b7389731a + docs/models/eventdatageneratingtemplate.md: + id: 3e4637e6cbbc + last_write_checksum: sha1:77b772c605c7fdb48a2da2f883c2aedfe3da5aea + pristine_git_object: e194242c1dca914168fedc158a56907fbb90079b + docs/models/eventdataimportingstackstatefromcloudformation.md: + id: 49596b2ae06a + last_write_checksum: sha1:42d323cfdfd84e29c6a34691ac9b43ee6ae285ed + pristine_git_object: 2b1e3b4c588747c4cd975e7702f71db61632b30a + docs/models/eventdataloadingconfiguration.md: + id: f8cf5d09ec86 + last_write_checksum: sha1:01f334d82f42ddb6b062e320271b078479e29c5f + pristine_git_object: 289d88c65d6c542308a97afcd2ce11a19382e3db + docs/models/eventdatapreparingenvironment.md: + id: eeb50567793a + last_write_checksum: sha1:28e1f6591e18645560728fb6ab0b4b77283a4651 + pristine_git_object: b7b521c6170f86094a4e67db3ca3a8ad1af73e35 + docs/models/eventdataprovisioningagent.md: + id: 851c8285277c + last_write_checksum: sha1:4c1ab8bcdc7531ba5fc48d40b4350dc7b65db2a6 + pristine_git_object: 6cd71da18c37e8c9e8b3f25d1b42d93af06dbd78 + docs/models/eventdatapushingimage.md: + id: 3d8c48252ef4 + last_write_checksum: sha1:fb251817aae52ca3124624b25e61fe2178912cc5 + pristine_git_object: 2e99f97d3136d2ce35c118c16f3f2b25f5723f86 + docs/models/eventdatapushingresource.md: + id: 5ef37302d512 + last_write_checksum: sha1:8de2966a3a6d9a64b131b3511d2efe0c15b64108 + pristine_git_object: f35abfaa16d21b3d6a3b0e8b8700a9e7f12f5e27 + docs/models/eventdatapushingstack.md: + id: 0d402cb2eae0 + last_write_checksum: sha1:3c6874c24d05e57804d08de96094403dd7f2f236 + pristine_git_object: fbdb1e1245fc03c48d1be4fa7d147b0fd24ea9cd + docs/models/eventdatarunningpreflights.md: + id: b336f54db8fb + last_write_checksum: sha1:9b09ca6cb207ec77f55eae345fd56b140ba3b62f + pristine_git_object: db703239c3e25325352b41ac705a3a8f41285ff4 + docs/models/eventdatarunningtestworker.md: + id: b4c034464a02 + last_write_checksum: sha1:e5bac38b98974e46dfa922d6c62193ac623d3c7a + pristine_git_object: 61524d4309d57a14acf18330337c99a892c16187 + docs/models/eventdatasettingupplatformcontext.md: + id: 7a6fffc2a4dc + last_write_checksum: sha1:83429cdf6240fe0a5529f287481ea29155a11ac5 + pristine_git_object: 0ddfb3275ab4f60bed78a6d216e45266899c96c8 + docs/models/eventdatastackstep.md: + id: 17661a00294c + last_write_checksum: sha1:6d7a42c240cf7d45ed8af9cf1a0200c3990640f3 + pristine_git_object: 079d643a145a61ff9e487ccea337e0441bae5506 docs/models/eventdataunion.md: id: 5af073344910 - last_write_checksum: sha1:cba36fabfff539fc14600022191bac1609b992a9 - pristine_git_object: fc796097eb5c99354b56af0166a7734799f10d2a + last_write_checksum: sha1:ef74a534c0130f7bbabc5ec431a2b053115fbbe7 + pristine_git_object: 27cc903dc1aff0a0e04814cbc75f3fa08e0e41a5 + docs/models/eventdataupdatingagent.md: + id: 603a4314ffcf + last_write_checksum: sha1:1634075996f239e337a7fa502aae99f59746465e + pristine_git_object: bf216a78a08c52393434f1081f5838efb62707c5 docs/models/eventdependency.md: id: 8b54666b2bdb last_write_checksum: sha1:99707895c4e521f7f47cce37ee6dc12394445bb5 - pristine_git_object: 8284bcb45e2596dfea6a928356719bf612cd59bd + pristine_git_object: 7c297e7514e9915d2616a8a4343c18055d507d27 + docs/models/eventerrorfailed.md: + id: 1e0f14b22694 + last_write_checksum: sha1:7bf0d7ff7c89b47d58171f94e4292116bc53f3ed + pristine_git_object: f76ad1c2ebc598174e6a20ae4da05c91f185cfdc + docs/models/eventerrornextstate.md: + id: a27027d0dbda + last_write_checksum: sha1:e4c18edf6915e9b633b0c27d0a3d6b17e12c0314 + pristine_git_object: 97c6adc09b6954ca9b06a7031cc1bfda0d42b619 + docs/models/eventfailed.md: + id: 53715cf86a9a + last_write_checksum: sha1:4fe5c68a03cc14bf50a38b87bcc09295af8b6463 + pristine_git_object: 12c70fa043e273eb23967757c4f00ad1a80f308e + docs/models/eventfailederrorunion.md: + id: 749f6db25f35 + last_write_checksum: sha1:a2cebe792ad7657c4b8fbabba44c7d56f7ae6937 + pristine_git_object: 11fadf5ab7a8d3fd7818f681ea09602d1df497d2 docs/models/eventkind1.md: + id: d61d3c615b64 last_write_checksum: sha1:18fbb87844cf845b4d2204438bcd9b0672a2f670 + pristine_git_object: b360581a391fe9f8a80178a8deafc23546e25afc docs/models/eventkind2.md: + id: a14a7566d5ec last_write_checksum: sha1:9f859c72c06d1e0a52d244d02bdb0ee0b509faf0 + pristine_git_object: c52979b288a57ba91d6f27eed9a5466a530b8e9e docs/models/eventlifecycleenum.md: id: 731d608bd042 last_write_checksum: sha1:b98f8f01488cce84c55365a26c722a064077e6ee @@ -6878,6 +8038,342 @@ trackedFiles: id: dbc4c6930fa8 last_write_checksum: sha1:75d3faf6d44d1438f84f546c7a26c375f100ce89 pristine_git_object: 7716c4e839cc25b3d223f207f11d80387f71acdf + docs/models/eventlistitemresponse.md: + id: cf817f195c78 + last_write_checksum: sha1:cfb6a56d697732c3842007b3672e0d60676149fe + pristine_git_object: 2142448451c06a9b6a9b1331ad98a8703489c6c4 + docs/models/eventlistitemresponseactor1.md: + id: 7c9bdc05daa0 + last_write_checksum: sha1:01cf57ccd4016ef73f915ec783f8ac6f6fd7ecf0 + pristine_git_object: a7cc50c8f7ead7e81e707643bf17049a6d29fc21 + docs/models/eventlistitemresponseactor2.md: + id: 2a108abdc76b + last_write_checksum: sha1:7870aa5fa1d22607a585828d4078f0c899551c6a + pristine_git_object: 463a82867e9fdb30a560d5dfd84e9a92c187cbe0 + docs/models/eventlistitemresponseactorunion1.md: + id: b2678a1d445d + last_write_checksum: sha1:fd2388cb7d464b252eb075cd70bc7c890530d728 + pristine_git_object: 987f866dd9a5e03edd893878e9c9f403548ae4d4 + docs/models/eventlistitemresponseactorunion2.md: + id: db07dba9a65c + last_write_checksum: sha1:ca9d285921c8a82a77980331cf1070c0e554afa1 + pristine_git_object: bed7485515f1aadd089a8a8cfd5f520843f1eb05 + docs/models/eventlistitemresponseconfig.md: + id: 99a2785dd417 + last_write_checksum: sha1:0602df8c4fb09267b6b79db5bc6e4dff50c4a418 + pristine_git_object: 9aa450b5e2d96f6c8ed213067cc503c28fd50d96 + docs/models/eventlistitemresponsecontrollerplatformenum.md: + id: ef8f33bb1488 + last_write_checksum: sha1:72679707af66acca226320eebbe9a940f73e9654 + pristine_git_object: ce99cfac0f76a9a05124e37b625d53849e239155 + docs/models/eventlistitemresponsecontrollerplatformunion.md: + id: 7121f0b53904 + last_write_checksum: sha1:0f3f5c22ab1564a53ce4cf35b482e46205a45607 + pristine_git_object: b6bc629f164be9b057299d1a89d913bfeed2f35f + docs/models/eventlistitemresponsedataassumingrole.md: + id: 4d2d79817589 + last_write_checksum: sha1:bad514957fce4e8f529a26d4a11efb48ec4b5cae + pristine_git_object: 40affb5721fb57dba37fee8576679f670e5b1382 + docs/models/eventlistitemresponsedatabuildingimage.md: + id: df1ecef85791 + last_write_checksum: sha1:850975c18d0edeeda93f92ec05dabf5d70eceb02 + pristine_git_object: c8c7508945b445b597073022c3aaf12a6782bf29 + docs/models/eventlistitemresponsedatabuildingresource.md: + id: 95087cdb70f3 + last_write_checksum: sha1:aab88bfb688b91cbd9c505140320031f6e8d2396 + pristine_git_object: 30d81f6b0993e8314e2888a104086348a352e3d6 + docs/models/eventlistitemresponsedatabuildingstack.md: + id: 4a2fba2916ed + last_write_checksum: sha1:6a8963290f4e339a031c5560d0ffc12b9268ea5e + pristine_git_object: 804429e3acb8723449ff11142b2ad3bbbed86e72 + docs/models/eventlistitemresponsedatacleaningupenvironment.md: + id: 140e354c8a4f + last_write_checksum: sha1:135494165d78fc964a07408cb27cbbe3328b35f1 + pristine_git_object: ab6d16b2b5cd5aad3856299802fbe43dd6735907 + docs/models/eventlistitemresponsedatacleaningupstack.md: + id: e06de84fdd7d + last_write_checksum: sha1:48635cd80ec9b7c27d8e7a603a36ec478cdcef35 + pristine_git_object: 1ed8457ab8d52f5f31b571e60575250b0b34609a + docs/models/eventlistitemresponsedatacompilingcode.md: + id: 72f5ced99eb1 + last_write_checksum: sha1:98d2ad47147a7e9e2bc36121c09c2fec33ced97f + pristine_git_object: c859b5d3b4bb637cfb0ee3f66d286332f922ea2f + docs/models/eventlistitemresponsedatacreatingrelease.md: + id: e4a3af42c40e + last_write_checksum: sha1:095a1cb239fa5adb574db0dbaf83462e621f7f1a + pristine_git_object: 94c55327bfc941ee6c69bfc46373bf5a0194608b + docs/models/eventlistitemresponsedatadebuggingagent.md: + id: a2a8d0218d9a + last_write_checksum: sha1:57a1ee2876ab94e7fdf1f29c60f4d1c9a64b48f0 + pristine_git_object: c6979eb72032837d9624be724cda778648c4b91d + docs/models/eventlistitemresponsedatadeletingagent.md: + id: 164b4ac2aa5c + last_write_checksum: sha1:f367f1f9a32c6ca400ea0d40536d263a1d11f1f6 + pristine_git_object: 80a0cd099484f95eb836222fcaa92be42f00cce3 + docs/models/eventlistitemresponsedatadeletingcloudformationstack.md: + id: e53ea6d05878 + last_write_checksum: sha1:766d785ed212de339b3eccfb1d6e2dd7ac0ecbac + pristine_git_object: 8c567e4cf61db3468d69ec2e42b92281dd72a5c9 + docs/models/eventlistitemresponsedatadeployingcloudformationstack.md: + id: 542a1509ebaa + last_write_checksum: sha1:8927fc2e3d64f1cf05769116420806e15464ceec + pristine_git_object: 7f08c8f6684ab6aa9262bcb2bcb62cb3384ef9c3 + docs/models/eventlistitemresponsedatadeployingstack.md: + id: 56f048daba44 + last_write_checksum: sha1:1ba886f7b44e1a3972d3884fa7eb767cd6831494 + pristine_git_object: a2f5efa34c8340cf84b8df80b2dbe42dcfbfe4a7 + docs/models/eventlistitemresponsedatadeploymentcreated.md: + id: 67d29da3444e + last_write_checksum: sha1:5e2f125e0bb379c0feada68cd77b37845485afa5 + pristine_git_object: f09a60e6e831128570d98e5edab285cdf6981a57 + docs/models/eventlistitemresponsedatadeploymentdegraded.md: + id: 18d26acc4dc0 + last_write_checksum: sha1:8126ce44b27aaba9ad6a37df0a3ff0d7631f2c56 + pristine_git_object: 0246308ea1495548f418502bb827824020642c6e + docs/models/eventlistitemresponsedatadeploymentdeleted.md: + id: fbfc59698397 + last_write_checksum: sha1:77e72d0a5ca491b427f21e21d3476991c28fcff0 + pristine_git_object: 1b7c74a69010757d7ce99aa1d09f8f82d5ac5d9d + docs/models/eventlistitemresponsedatadeploymentdeletionrequested.md: + id: 814605d21ae8 + last_write_checksum: sha1:ac66b376aec25d6da16bc4c6a6f729dd1ce92972 + pristine_git_object: a2ff0a5ca81f860ff37a209a8e8ea657634758a6 + docs/models/eventlistitemresponsedatadeploymentenvironmentupdated.md: + id: 2306dd20647b + last_write_checksum: sha1:3e7ff15a9c36abdcf861015b663f47af1de6844f + pristine_git_object: 004e5898a8444e19115aa9cf93ad82e842964fae + docs/models/eventlistitemresponsedatadeploymentfailed.md: + id: 325e393dd154 + last_write_checksum: sha1:ca75c4203a4fb5d0a0fd1cdc10b8bc9034c84cb1 + pristine_git_object: 5b6b1ce881d63e05ece37c88592882edc4206b66 + docs/models/eventlistitemresponsedatadeploymentrecovered.md: + id: 4784a5c584ea + last_write_checksum: sha1:4ad45f6f4fb67d34c349332ea2de1aa3db2fa9b4 + pristine_git_object: c3e2a378809656145cd51ddd791d8b2b987f8b6b + docs/models/eventlistitemresponsedatadeploymentredeployrequested.md: + id: 5f4dff6b9e14 + last_write_checksum: sha1:6218b79c8eabd09b0daf6c76c40dd57f29baa5d9 + pristine_git_object: b8dc0062f9f279ed9ff66592f0270d53b9f7fa8d + docs/models/eventlistitemresponsedatadeploymentreleased.md: + id: e37ed65405ee + last_write_checksum: sha1:6a02a3895e786f0c7dfd6026384e79d1a2fc4602 + pristine_git_object: 8901ab392ea50a7cdb517703bb287ec74b2da11a + docs/models/eventlistitemresponsedatadeploymentreleasepinned.md: + id: 0dde198a248f + last_write_checksum: sha1:8d9ef1f307710d65cc9fedec263d4cd701192f35 + pristine_git_object: 5e3b839eb14592682bcaaf2d272467f510d961e8 + docs/models/eventlistitemresponsedatadeploymentreleaseunpinned.md: + id: 3579ef607591 + last_write_checksum: sha1:6ba41b8baf4400aa84ece4416caaae0bcf9c5998 + pristine_git_object: a0733c6f2464469a19f55286536740c735f82c12 + docs/models/eventlistitemresponsedatadeploymentretryrequested.md: + id: 184511c5dff3 + last_write_checksum: sha1:a32a749b50e6f8a34eca1d186f6d3275d626706f + pristine_git_object: fa3042043e645fed5c9fb011cb25685480051828 + docs/models/eventlistitemresponsedatadownloadingalienruntime.md: + id: 61e95d593642 + last_write_checksum: sha1:5607287d7c0c679f63b26fe77c4e1db52d3bb56e + pristine_git_object: eeefaf3957b2ae6df0162ee4d0db236bc0cc2d19 + docs/models/eventlistitemresponsedataemptyingbuckets.md: + id: 98057367b1fa + last_write_checksum: sha1:48a5897795a83a237883f575a63262e3a2898e4e + pristine_git_object: 2b2abc855afd872dfce34556e6b72325079649bc + docs/models/eventlistitemresponsedataensuringdockerrepository.md: + id: 60f71a8dd411 + last_write_checksum: sha1:8126fff4e1a44f100f6ac31f2fd9531aa2b96c44 + pristine_git_object: 18793368c52bb686f5be57a1023a8fda55307c6c + docs/models/eventlistitemresponsedataerror1.md: + id: 462a5e263991 + last_write_checksum: sha1:b988506c92a35468f292250a1ef74654d359c735 + pristine_git_object: 44efefcb8b633e053b6d44f7f0f19c4cd7367366 + docs/models/eventlistitemresponsedataerror2.md: + id: b905c7d51277 + last_write_checksum: sha1:7f5ffba8fdb491d1194c794f7e9c4dceaf4d57f7 + pristine_git_object: 7596b6afc534b56e1889541da31070dceb16c5a2 + docs/models/eventlistitemresponsedatafinished.md: + id: e08c4ea50340 + last_write_checksum: sha1:39531880a72dbc1b8d87265acbaa78963ae3dadf + pristine_git_object: 7d4b191e463c4e1a12218e78188415562a602773 + docs/models/eventlistitemresponsedatageneratingcloudformationtemplate.md: + id: 20ddace52144 + last_write_checksum: sha1:a8ff0e4ef14796c14f841a865fcca0658277cfe1 + pristine_git_object: 93ebce9938a354590b9d63438eecc2d24b3eaf5d + docs/models/eventlistitemresponsedatageneratingtemplate.md: + id: e31791ff8461 + last_write_checksum: sha1:1e8f1f6171acae58fd3a6408b842df6b475f6ab0 + pristine_git_object: 055cd35865552cb98f12f5011773bd3350c40926 + docs/models/eventlistitemresponsedataimportingstackstatefromcloudformation.md: + id: b67e40d7f1ba + last_write_checksum: sha1:85b2ec4ff171fe7b3a65de66b97dbc56c1aaddf6 + pristine_git_object: 7c3b9d494227518d147814bba86efadf0c6fff44 + docs/models/eventlistitemresponsedataloadingconfiguration.md: + id: 1b6ead012639 + last_write_checksum: sha1:1807e2c5153c8faa08bbb6931e1fb457bbc5c6db + pristine_git_object: d5954dce6b7e10a6c5a3d6a5f021a7be6a3fe606 + docs/models/eventlistitemresponsedatapreparingenvironment.md: + id: 855f5bf5900e + last_write_checksum: sha1:26290cbcccdf5c96251c2c3877c5dbc81f58f465 + pristine_git_object: 43a1ae61751cac673b317e0534526a7a75766712 + docs/models/eventlistitemresponsedataprovisioningagent.md: + id: 42bfc2e21fbe + last_write_checksum: sha1:16feba293c8d97e6b805c58b511aa9862e5140b6 + pristine_git_object: 7af45e41461a8787640d766a6de42e2be9c376ea + docs/models/eventlistitemresponsedatapushingimage.md: + id: 87b93d3356a4 + last_write_checksum: sha1:75b649c1be629b52306e63bbeb51135ec0168c8d + pristine_git_object: e9512e609cf5f21634618bc1e8527e6a10ffeab9 + docs/models/eventlistitemresponsedatapushingresource.md: + id: 4abfe2a34bb1 + last_write_checksum: sha1:f6dfc74614f04b342a1369e9b21f82d263dc4495 + pristine_git_object: 6104d924ef63994e6cc55950560a6f24747143da + docs/models/eventlistitemresponsedatapushingstack.md: + id: dfe5db17bb47 + last_write_checksum: sha1:8f285e992fce96066408ef5a718f0cffef4fb15f + pristine_git_object: c09faa21f00e34008797030cf897951e7fb6e1df + docs/models/eventlistitemresponsedatarunningpreflights.md: + id: 85942d05bfa7 + last_write_checksum: sha1:898594e5e1b7b1202bcf7f7c647ea5d6f04f6041 + pristine_git_object: 3d76794617780a716a5e19edda4fc705b49338e2 + docs/models/eventlistitemresponsedatarunningtestworker.md: + id: d4216ee83766 + last_write_checksum: sha1:0a8b31cb1d3372cacc549f09aebcf684cfea0d09 + pristine_git_object: a0f839b76d62338d6aade0ea7c428d8e220b7658 + docs/models/eventlistitemresponsedatasettingupplatformcontext.md: + id: ed1e63c7ea3a + last_write_checksum: sha1:325a2feb929c3f01470c3e7a89f8aa4aa43002e4 + pristine_git_object: 4836daec1b149aadd4b22480c008287fabe1a3f2 + docs/models/eventlistitemresponsedatastackstep.md: + id: c199a0c42ee1 + last_write_checksum: sha1:6b25a63e446f383758d808c81ca35777a671ae03 + pristine_git_object: 9691979c32b1f5756aab8c5adc22150bb28d1e8f + docs/models/eventlistitemresponsedataunion.md: + id: 2b611527f280 + last_write_checksum: sha1:88087a4d26dff564aa1aed2a7098e3d6ddd90ab9 + pristine_git_object: 8ff1fcb8b37bb60fee9b45f7f7c89569278b13fe + docs/models/eventlistitemresponsedataupdatingagent.md: + id: b1fd6ee57b63 + last_write_checksum: sha1:0be6e7a524020a9b5d85a9dca30b6725cbec0883 + pristine_git_object: a5dc75ab6ae3530073778761004ca5d47becd694 + docs/models/eventlistitemresponsedependency.md: + id: 789344857ce6 + last_write_checksum: sha1:db31807738557c6012f358d9dbca29759de7b520 + pristine_git_object: bdd81494330f8600c0c2a3d4cf6410ae5ddf64bd + docs/models/eventlistitemresponseerrorfailed.md: + id: 8113c5ea4fab + last_write_checksum: sha1:40116575045ed251ca00b391ea78b1780ac15599 + pristine_git_object: dc415d817b38782fa3ddca638ef2b867db7f7b2f + docs/models/eventlistitemresponseerrornextstate.md: + id: 69d00e680f4d + last_write_checksum: sha1:4eca9da3b89bc3b7f2cf053932d5a15db966551e + pristine_git_object: 7c401153372e80925723aa84109880b92b8310b2 + docs/models/eventlistitemresponsefailed.md: + id: efbf23417d08 + last_write_checksum: sha1:0cf6c42e4c7a3b604dac53f50c6bff36cb388e04 + pristine_git_object: 17e2c48391adfc9b1e57d8bb32d845ff55d590e5 + docs/models/eventlistitemresponsefailederrorunion.md: + id: 17d8fe6d1c10 + last_write_checksum: sha1:53e7d2c00efcb47f7cfdf82e1d8df390720e014d + pristine_git_object: 99a296ce1a2ee3fda637e1bbe21578c9b75bfd95 + docs/models/eventlistitemresponsekind1.md: + id: d7cf45056aff + last_write_checksum: sha1:b5d2b76bb24597e479095c2fef59f85fab14b21b + pristine_git_object: 3803468d8a73c5c16dcdbc04d9ebe7fb9b39be13 + docs/models/eventlistitemresponsekind2.md: + id: c3f596925f8d + last_write_checksum: sha1:94e667f38339448c7a2196e62bec68e3801f9207 + pristine_git_object: baf3a55b35bfadb21ee45de885f7d81f5b70087b + docs/models/eventlistitemresponselifecycleenum.md: + id: a661661b5aeb + last_write_checksum: sha1:38046635579dc6dce8036d7c0478ab2ca991d89e + pristine_git_object: b3d19969dc7f94826ce76b1c9c8ec3230560686a + docs/models/eventlistitemresponselifecycleunion.md: + id: 48c365d5d911 + last_write_checksum: sha1:135a4c1395d93b6c027005e8ec7fdc75d885d713 + pristine_git_object: 51ac6a20d6f6e6b18b6a49058e5fa3db933aa419 + docs/models/eventlistitemresponsenextstate.md: + id: 1fa952210f52 + last_write_checksum: sha1:627b2a793f1c75bfaf20d93700f098b7e50623c2 + pristine_git_object: f75b08b8890fcc48b37b9980867168ebeed43655 + docs/models/eventlistitemresponsenextstateerrorunion.md: + id: e709c9d2abf9 + last_write_checksum: sha1:5d7b9aa6a13695c0e9ff2ecaa8f9b7dc501c61bf + pristine_git_object: 3ffbad53b6f704c3612c1a265378927e5ffd3582 + docs/models/eventlistitemresponseoutputs.md: + id: 27c317a7d3ed + last_write_checksum: sha1:8d52ca5acc8b4fd93ec69741931dcfe9aac44df6 + pristine_git_object: 103a36ad9aef90551f56a9b2c19ae7bc98052cad + docs/models/eventlistitemresponseoutputsunion.md: + id: 2bee0a7297dc + last_write_checksum: sha1:3c59e86fc66f3d7240625801c324394caaa6bc7b + pristine_git_object: 03b507ef4a71478cd5159835a5414e6fdbb183e7 + docs/models/eventlistitemresponsephase.md: + id: 439f9e49b9a1 + last_write_checksum: sha1:13b1a01848f8efbbfd6e84cce88b0ca88ad6afee + pristine_git_object: 36f415deaaaebdbdd0fe5666ed9f3a6aab742e78 + docs/models/eventlistitemresponseplatform.md: + id: "213147418518" + last_write_checksum: sha1:1592a66337f9c87e598fb34585ca4a765f53f5ac + pristine_git_object: 854e000fe61b1fa90e8e33869dfe2e11dff09ee1 + docs/models/eventlistitemresponsepreviousconfig.md: + id: bd4ae2e59026 + last_write_checksum: sha1:8792353d8c640ecd1232aba55578527f97763f49 + pristine_git_object: 14ca5d4210992bec24bdfd870f70638181cf0e40 + docs/models/eventlistitemresponsepreviousconfigunion.md: + id: 9238df410e7c + last_write_checksum: sha1:af6ba5be7c9373a8a207a01bebbd32d41f903d90 + pristine_git_object: e35d43cc2b5e0d3e2eb01ea19f0f5b9c2ac249a9 + docs/models/eventlistitemresponsepreviouserror.md: + id: a7a491543b2e + last_write_checksum: sha1:6631a048530d1773b1206d26eb44b8b0c66c379e + pristine_git_object: 138d9a1bfc1082382a7615b631a49f6606e497ea + docs/models/eventlistitemresponsepreviouserrorunion.md: + id: fc497d6cb8cc + last_write_checksum: sha1:2fe66d3ac0e9bd2ae0c2ca769606ec9d1bd925fa + pristine_git_object: 45cd9e3e659507c3286eba5335260dd7cb0856ce + docs/models/eventlistitemresponseprogress.md: + id: 56bb4dc6d63f + last_write_checksum: sha1:b7069eed55ff23bb100ad3599d689815aabd9188 + pristine_git_object: c9fa81e9278388a2a38fe6e7333400188805a73b + docs/models/eventlistitemresponseprogressunion.md: + id: c1d2aff9b86f + last_write_checksum: sha1:75470db5f19beb3b309a5386d3e35479b2894a7c + pristine_git_object: aa2f3e8c51b74e843a5e61479b3988357a1029a8 + docs/models/eventlistitemresponseresources.md: + id: 0a795f152e1e + last_write_checksum: sha1:4b9e88449977bf5598ac12ae729e845f4d30a41e + pristine_git_object: 197207d32ae1b6131357f001a8fda2e3593b6857 + docs/models/eventlistitemresponsestate.md: + id: 870d6a97e5d3 + last_write_checksum: sha1:c62036be79fb4cc9ab84713831c9ab7c291ddec5 + pristine_git_object: 8516abc05319c0e150f4937a80864dad4dc06127 + docs/models/eventlistitemresponsestatenone.md: + id: ca9acef1210f + last_write_checksum: sha1:27a1d8ab8485dca444c1bd30b45c8dc5c74cd742 + pristine_git_object: 6a3dd455e0c9a97a4a0039d07581f8b171dd1cd7 + docs/models/eventlistitemresponsestatestarted.md: + id: b57ccec5f6a2 + last_write_checksum: sha1:4be0545cc94391968f9fc5add12b6f36678efed5 + pristine_git_object: 8bdb77b11ccc1cfbaade82b52b12198f8c7c56ec + docs/models/eventlistitemresponsestatesuccess.md: + id: 49d2350e8e91 + last_write_checksum: sha1:3feec479fed60d81664655887aeff37c8e455172 + pristine_git_object: 4080d2048a3000b8a75b8f83136b7c25dec174b6 + docs/models/eventlistitemresponsestateunion.md: + id: 23898eaa4dff + last_write_checksum: sha1:57d610183a3ebc0bc545c1e461dff245fcc9ace0 + pristine_git_object: 02cf50afadc1f3079a1a2081944bdc8f2be9f29d + docs/models/eventlistitemresponsestatus.md: + id: 67341d4f1a46 + last_write_checksum: sha1:77b94249508cd34735fc35e69d3e165826eabe82 + pristine_git_object: 94c4a605a298d6f42d6d2ca0b12949aced5c99cc + docs/models/eventnextstate.md: + id: e556491ca69d + last_write_checksum: sha1:04302dc4569f7d9c67b37f56d9bd21dd983cb0a7 + pristine_git_object: 0f2d6d0455c284c4c76c1b13c8f1c11741649c3c + docs/models/eventnextstateerrorunion.md: + id: 9ad0bea8f63c + last_write_checksum: sha1:a6a46cf0ba9dd2153c02a6d87856eccdf271a2fd + pristine_git_object: bdf972bfebf5ea7a1e9910f73af3dd2f0cbab190 docs/models/eventoutputs.md: id: 144262e477cd last_write_checksum: sha1:c3b8caf3933fb98801c3b38db45b11b645041f60 @@ -6886,6 +8382,10 @@ trackedFiles: id: 83c923c6f7b9 last_write_checksum: sha1:4525841766e8530ea2c67c86da54a6a720105fc2 pristine_git_object: a50a659f5c95f0cf91bcb3a44758405f218d68f6 + docs/models/eventphase.md: + id: 5050227db10e + last_write_checksum: sha1:96a29aa16ee1f8016e15f92bfa29469319adc52f + pristine_git_object: 6f3ad6b22f024c28ee1d0a6f6ddf3bd8749ea651 docs/models/eventplatform.md: id: d90a73aee944 last_write_checksum: sha1:a39efdb2cd84c3a0ba4ff4ae4804cd426ec95a34 @@ -6898,10 +8398,26 @@ trackedFiles: id: 2352a4457665 last_write_checksum: sha1:5e4e052a4eeec49a55d80c5b42b336a41628c6a9 pristine_git_object: d5a119649539a17d2dd1b2f52f2e55e76d04c666 + docs/models/eventpreviouserror.md: + id: f6b9e288583a + last_write_checksum: sha1:5280e25ab1d52a1852779853a29c12d6bbe05f00 + pristine_git_object: 1876179e685cb830e8a916180a60c38cc3fe21ce + docs/models/eventpreviouserrorunion.md: + id: 82da92611949 + last_write_checksum: sha1:9f3ea06de13fa7d5d174ce203885e08437666836 + pristine_git_object: 8234959f0c0d8b9e6cfac1903ec007313e663133 + docs/models/eventprogress.md: + id: e27dbebfa058 + last_write_checksum: sha1:5aee489d79e0ed270d6b8b00ad8bd63fa4963c21 + pristine_git_object: c0ac3064a621ab87736565da583fb05c4f54ce67 + docs/models/eventprogressunion.md: + id: 2006e084c9fe + last_write_checksum: sha1:4d84ac9dce69fbb590a2ca977bd5e22fca34e1d4 + pristine_git_object: 6bbaf2d02396669dc88c23f016bc59f278dec9aa docs/models/eventresources.md: id: 7050a908473f - last_write_checksum: sha1:f5aba6889882c23c01dc10e8af07575fa8d437f1 - pristine_git_object: 3abda94018b40ac51333d0eda8f3e8da162dfb0d + last_write_checksum: sha1:2c3ff057a5625b47391a1ece56a6bda6fe9fa1d4 + pristine_git_object: 5c604f1a08b3357866cf98f37dd226845447fbcf docs/models/eventseverity1.md: id: 6b13b8c3529b last_write_checksum: sha1:2871e294ee138a1eaac7e1d8c187b0107df6e7c4 @@ -6916,8 +8432,24 @@ trackedFiles: pristine_git_object: 3385f3555f987d8c6ab284de8b1b23f6db239ebe docs/models/eventstate.md: id: 9750637b2abc - last_write_checksum: sha1:5904601f83550737a968d06cb1b39f3d7c9ce2c5 - pristine_git_object: 9bd2f980f6fbdb2e21276f99f49ed75e86121fb7 + last_write_checksum: sha1:cfe269ba4cd63c9424b411722d85e8025b69d361 + pristine_git_object: 2cb58aa373883fa3f6d6464a83c45f9c66aff9f5 + docs/models/eventstatenone.md: + id: bb761ddf7592 + last_write_checksum: sha1:75d35c698cc00e73096aef7af0dec3ee3d7279ff + pristine_git_object: 07983eefc1c30b21dcd0a93f33adc9679403f6fb + docs/models/eventstatestarted.md: + id: 43fb383c9ce0 + last_write_checksum: sha1:9ca5b83cc6812ca546598191c3208de5eaee65c7 + pristine_git_object: 42994ff52ef72cb513a388b713e490f657de9abc + docs/models/eventstatesuccess.md: + id: a4aa75bc89b9 + last_write_checksum: sha1:a15b0fab22178601a714af955ad4f8c9e66bf73d + pristine_git_object: 0b297296aadae95d534d5bce82011f185f3e7b42 + docs/models/eventstateunion.md: + id: e5cb7d034d55 + last_write_checksum: sha1:77fb4587c55281677e5f3ab1c930716bc0752f58 + pristine_git_object: 53b2706790376f6b703707d33b8211e1e073f102 docs/models/eventstatus.md: id: 0848b1e061a2 last_write_checksum: sha1:fc2c28aa4d6b070f9ad32bbc7dd2a74cff8a7837 @@ -7010,22 +8542,14 @@ trackedFiles: id: 29f8588f12fa last_write_checksum: sha1:a1cd3421d85c592c3c55c6b60f3aa94e3753cba0 pristine_git_object: 04c45ae6ee2081b9d4c6a3add4cde3d5cf73728e - docs/models/failed.md: - id: 1a81e7fa1ca5 - last_write_checksum: sha1:c6f11baec19bee51d910e31683ad88c85654549c - pristine_git_object: 44e94835829d4a9eb4782ad37991a905b599c49a - docs/models/failederrorunion.md: - id: f5252a79145b - last_write_checksum: sha1:ef88281c359917f031b1b85e445718170fd9450c - pristine_git_object: 92d60bd095f3eeb55c262f72533712b9b2f43514 docs/models/failure.md: id: 3f79c7d64eac last_write_checksum: sha1:e737dfe23a9232b67b4f1b202d7601b64a846fff pristine_git_object: 27f95ef9cd6741328345705811a2747981c6d80a docs/models/forwardimportrequest.md: id: "652670843092" - last_write_checksum: sha1:187b6fa79a4e7b4bc58bedf7c42bd06f7046ac40 - pristine_git_object: 7e5bd6b51b1e2f2d675e79fcfb5e70912df88de1 + last_write_checksum: sha1:8e23c736957a89c41d3c064de7508873053aaf7b + pristine_git_object: a70452286b068633fefcf04756c3435360c0e6f8 docs/models/forwardimportrequestmode.md: id: 2f86df92c3e5 last_write_checksum: sha1:c8f1b5fa8cee0661d048c98fbb08ccb6c335076e @@ -7038,10 +8562,18 @@ trackedFiles: id: e6a62e536d1b last_write_checksum: sha1:f8da06e308b916defb96835cdc797b7825c5cec8 pristine_git_object: 202d2d1aff78648b8722b94902903be382929789 + docs/models/generatemanagerbindingtokenrequest.md: + id: 75b29226aa8d + last_write_checksum: sha1:dcab6bf63c3c815b0378b96674007025e79d0b18 + pristine_git_object: 9570fe9395d87a79a2376ee247de456068767a2b + docs/models/generatemanagercommandtokenrequest.md: + id: 2cf83de9bea0 + last_write_checksum: sha1:358bb7835252088cf8ba6dacf7e94dfb7baad30e + pristine_git_object: b5646dfaca60db2f71a1d5794ccf324bdf989825 docs/models/generatemanagertokenrequest.md: id: 8390570078a9 - last_write_checksum: sha1:465cf7721d9a092c9a96029b57143dfb770b5f6a - pristine_git_object: 95fd3c5f182ae9a47116fd3da279175b39d0fb74 + last_write_checksum: sha1:5d78df140ab34e9972161d2f0588b806aa86ce9f + pristine_git_object: 3b93b14eadf64d1e4b6f29ad0aba3ab42f6ea73e docs/models/generatemanagertokenresponse.md: id: 4e2794042c0c last_write_checksum: sha1:b40f8609d89e4e48c56080c1811a675097622ec5 @@ -7116,16 +8648,16 @@ trackedFiles: pristine_git_object: aa891e7058f90e6a511b235657a54fb66449a8fb docs/models/importdeploymentrequest.md: id: 6dd014230199 - last_write_checksum: sha1:1c0bbc21d8d324e59bee12a0578549f67663e5ec - pristine_git_object: a15c4351176918405c5afdf0a6caf525e1a66089 + last_write_checksum: sha1:5afcb20399e51edacd07d90d0b6a46287e61e4e0 + pristine_git_object: e506826b282320c376c0613d810f3a158fda864a docs/models/importedresource.md: id: 03878e5a9d0e last_write_checksum: sha1:9f40ac5ddb5c931569a5f76f3c3cb7e0fb18c308 pristine_git_object: c673c8ec6db5c2ce71448e5dbe8da4ac6623f162 docs/models/importsource.md: id: ba92656fe7f9 - last_write_checksum: sha1:8042363416165371aabfb031cd92166a8a422fb4 - pristine_git_object: 83fddd6adbb2ddc243f204afc73b733682592eac + last_write_checksum: sha1:16570d2fd462f34ac7cde9139c57860fb0c611f4 + pristine_git_object: 392277c861b968d238ad29ac711d1e7432c04bfd docs/models/importsourceaws.md: id: 7da17ec3e88a last_write_checksum: sha1:713304497a87f4b94e91cc30f28a05d7778c3dbf @@ -7262,6 +8794,22 @@ trackedFiles: id: e9ac23929cca last_write_checksum: sha1:b800b7f1ecfe9cf94300b245230f7ed136336f30 pristine_git_object: e9f81700c83c75f0a26f3d2a4ba879b3971b8931 + docs/models/importsourcefailuredomains1.md: + id: e9edefd1c536 + last_write_checksum: sha1:493bb3b04d5d13d5eaf211a25722379f5fa2102b + pristine_git_object: b41f76498a574491ddcfceb51fb185376e0b97b5 + docs/models/importsourcefailuredomains2.md: + id: 41ac9ec7b72f + last_write_checksum: sha1:18fd9d2934d2d6dfe13fb9e015936e0025dc65aa + pristine_git_object: 069518bdfca0c1bdd6d4e60b96683aaf8b1b5412 + docs/models/importsourcefailuredomainsunion1.md: + id: 2452493b9340 + last_write_checksum: sha1:e613c69cd922e97fbd53a9554d3ec04b146ab97b + pristine_git_object: 5f0347fcb2edf4a4b05d7980b6d5ef7bf07d47d6 + docs/models/importsourcefailuredomainsunion2.md: + id: 9a423817fb1a + last_write_checksum: sha1:1091e434a5695892f47a9d3b0a66d5e56c9fbf56 + pristine_git_object: 52960a6c6dcecffdcb8b70d41ad7dff88702662b docs/models/importsourcegcp.md: id: 5cf2b91c12a2 last_write_checksum: sha1:fd434db85fd517107bf3e27a267af56afb9d48a2 @@ -7376,12 +8924,12 @@ trackedFiles: pristine_git_object: b7a6c664a91b2c281ace7537cf0d5222ecf68eef docs/models/importsourcepoolsautoscale.md: id: d23175c0acbe - last_write_checksum: sha1:59f11a93f33881b9ac17a501773cc8b691892cde - pristine_git_object: ee2cca309d34992641d8c4bb2e472135b91eb4e8 + last_write_checksum: sha1:41d5fb24eaa3a8d12862d1a93f92e11461189c64 + pristine_git_object: 8d6d8ce570f40e89793cb5810908efa6bc6b186c docs/models/importsourcepoolsfixed.md: id: 261100a7326c - last_write_checksum: sha1:a51eed069bca00573ac347ba51663f3bee4956bb - pristine_git_object: add5ba47823d0cbcbdbd79d02898310142b12901 + last_write_checksum: sha1:4d773bd62a1857033818edd567c452dd8079344b + pristine_git_object: e2764f745518acf4a1b8b40b8f4fbcfebcce9ef9 docs/models/importsourcepoolsunion.md: id: 9bd7562cb44d last_write_checksum: sha1:84a5ed7673727cd622b877c0afada8deda0c4509 @@ -7590,6 +9138,10 @@ trackedFiles: id: abc76bb1b172 last_write_checksum: sha1:20e0355859569bbb11e7a89efb0b4ef07c10b19f pristine_git_object: f4e1a92aad5be751dfa757425678a2eb4ae8f971 + docs/models/inviter.md: + id: d047642e72f8 + last_write_checksum: sha1:beb150682b7f483ba0c8b35b33f474a48ac8feaa + pristine_git_object: 30ca4fb4fbde836f091417152ffaef724d3937b9 docs/models/involvedobject1.md: id: 6946ea66c33b last_write_checksum: sha1:49931b98fa3e1ad066fee5c5185804dac57d0cf3 @@ -7672,8 +9224,8 @@ trackedFiles: pristine_git_object: 9396c3183c975ef39f37a6ef55c05c492dc163d8 docs/models/keyinfo.md: id: 861bee65e06b - last_write_checksum: sha1:aef7310cd3e82d209a7453b2b94bcf4b219a8769 - pristine_git_object: 764a6aa110ff857b65d527d1f5d8859f3387dcf3 + last_write_checksum: sha1:efab48d045aa4208d60632a7c359cdee8a4f2b1a + pristine_git_object: 1618766c01e406601c8124cbd707c75fa83597fb docs/models/keyschema.md: id: dbf5c167e65b last_write_checksum: sha1:3c4dfc7987791c77b8723d9e6ec2909e62ab66be @@ -7705,7 +9257,7 @@ trackedFiles: docs/models/listmachinesinventoryresponse.md: id: f20f758faa1e last_write_checksum: sha1:58518c714b2a861a16fcbab850aa5b8ea5124ae9 - pristine_git_object: 1e68e29aca38923e8eb20c379ebb03e240cdc7b6 + pristine_git_object: eb0f3e7382d27e738eea443d377e33c96770e339 docs/models/listmachinesjointokensresponse.md: id: b5136a55304f last_write_checksum: sha1:68fd7183c7e27d55d8d019059c811b2313bb976d @@ -7729,13 +9281,15 @@ trackedFiles: docs/models/machinesinventoryitem.md: id: 23991903f5b6 last_write_checksum: sha1:2c32c76142a97791f2ee07773294c584d5f88613 - pristine_git_object: 8eee0e360fa1e1446001fce9799d7989a36cca10 + pristine_git_object: 2db862ea979717c90c1bc3b86ddf6b197c9321bd docs/models/machinesjointokensummary.md: id: 1ce0f70e2c21 last_write_checksum: sha1:dcab6df04c0e6e7a4311d4f982eb7418012eb15f pristine_git_object: fb408d99cdec92388f82625cd4ac0079a85d5763 docs/models/machineslocaloverrideobservation.md: + id: 73dafbd702c7 last_write_checksum: sha1:5c4e295d8a1b3618cd93d35d78755c2e3f46076c + pristine_git_object: 2c4280de0123ebed40f1f8826d1ca921a5a0661a docs/models/managementreleaseinfo1.md: id: b83eae863191 last_write_checksum: sha1:90f6f9258336bcde64a81c7e09370a6212d311bb @@ -7752,6 +9306,14 @@ trackedFiles: id: 475dd5a54e8a last_write_checksum: sha1:f79f1b3f71660664601896427ecfd5b69749c819 pristine_git_object: 951218ef2061ca1267289c70bafefe219ca6ddd1 + docs/models/manageractivedebugsession.md: + id: 52822a0a4907 + last_write_checksum: sha1:9cccbc1ca53184c9b84e9e7318483003635910eb + pristine_git_object: 54a3f16a929016c5361049deec4fa453fb607f5c + docs/models/manageractivedebugsessionlistresponse.md: + id: edeba014ada6 + last_write_checksum: sha1:9378eb83d1baeafb5fb4b39dbc351b7516b75519 + pristine_git_object: 5ce12702f103dc5ec1b9f2d530404f48cc23174d docs/models/managerbinding.md: id: ba2165aa769d last_write_checksum: sha1:bf7233b4abf5ab307dc1b788af91e37bebe0d986 @@ -7842,8 +9404,8 @@ trackedFiles: pristine_git_object: b9a41730a57329e4c8d0e4d9fe4fa1706474e487 docs/models/managerretryresponse.md: id: 2ca53c0a95e2 - last_write_checksum: sha1:202cfac51abb3c0295e94e55e23d29755648a001 - pristine_git_object: 49ba6256a45a015b219c00df252c5d714ebc0ce9 + last_write_checksum: sha1:24d315e349e044117303ee9b91fb301e82ff40d5 + pristine_git_object: e39422fc49252a4ec283fd4b9e55a5a48a077883 docs/models/managerretryresponseaws1.md: id: 9bfa57761df5 last_write_checksum: sha1:3ad3397567211cdefa8528f1ab15fda604f0dea3 @@ -8260,6 +9822,54 @@ trackedFiles: id: 95569ea21b12 last_write_checksum: sha1:5b6aa39fba060ec129db6536578a8420bc7c6702 pristine_git_object: 7c6226da1b7e3f7d1f9cb554b93dbd5e507cfa08 + docs/models/managerretryresponsefailuredomains1.md: + id: 3ffdb80974c2 + last_write_checksum: sha1:95cb8c1a7b82f46c7d5f6b62cf48ca29e49130ff + pristine_git_object: d4fa8204a408ddec9ea2f6e19070d90c2e9997eb + docs/models/managerretryresponsefailuredomains2.md: + id: e6f73976185a + last_write_checksum: sha1:7debdf86122eca782452cd3ffc8abd001cd46c9e + pristine_git_object: 779ff4d67e69d6f9d803de60147197f2f3bca968 + docs/models/managerretryresponsefailuredomains3.md: + id: 9a2bdc827610 + last_write_checksum: sha1:2f653a887950e37cc3de7b3df6a14cbace963173 + pristine_git_object: beb5e9262a19b1ad6fcf1f6972e4405249bbc58a + docs/models/managerretryresponsefailuredomains4.md: + id: ebe92fdf6451 + last_write_checksum: sha1:0280dc71ff9c4ee0254112e7a7c69d17ae524da0 + pristine_git_object: ba10d5799f01cbc8b6d783ac008011ea19cfb1d4 + docs/models/managerretryresponsefailuredomains5.md: + id: 1760a1983fbc + last_write_checksum: sha1:fce08dc429d98326f886c72ea1ffc588f4fe5c4c + pristine_git_object: 13f1e27845bb9e56ca4e796a0df9dbd9fbbe72ef + docs/models/managerretryresponsefailuredomains6.md: + id: 0615556cef35 + last_write_checksum: sha1:7297839e1338402fde089774104c0b4b0b47764d + pristine_git_object: f69ea324b80b3d622f2922724cda14536a0871ab + docs/models/managerretryresponsefailuredomainsunion1.md: + id: 7e43fad33519 + last_write_checksum: sha1:5da1e69bdaa9250d181a399a473fb897d6955933 + pristine_git_object: c419eda356e400792da94014a24f65b99e914775 + docs/models/managerretryresponsefailuredomainsunion2.md: + id: 814e1fa58f20 + last_write_checksum: sha1:67daaa672a04de62620ccc86c132b551baa4a09c + pristine_git_object: 4b580ed9125f2a62e23076ebfe0d79fa078e5813 + docs/models/managerretryresponsefailuredomainsunion3.md: + id: 82c09287bde2 + last_write_checksum: sha1:dbeeece48c8e941ece05e19c2ab3aa9709838645 + pristine_git_object: d96d1e22e8c0bf8e2b971327290fbcb6071c16c2 + docs/models/managerretryresponsefailuredomainsunion4.md: + id: a7254e94e071 + last_write_checksum: sha1:9d29aabc6ae1498dfcd3425cf319ad780a80bc8b + pristine_git_object: 136d024a92d52b3eac0a55ed209c93e04c130777 + docs/models/managerretryresponsefailuredomainsunion5.md: + id: 0cf9c1e5f46a + last_write_checksum: sha1:662a9207341fa197a3f9b62271a2ab35dcd2fb73 + pristine_git_object: 82fdd418d6f35d9f762d7f2b39892379b630510f + docs/models/managerretryresponsefailuredomainsunion6.md: + id: 440efe2ab2af + last_write_checksum: sha1:2a113c134a2b7c4cc47cda20235597c587a53d4f + pristine_git_object: 129de7c36efd9f2eb3aff197e757497d46956d1c docs/models/managerretryresponsegcp1.md: id: 50aa70abd7f9 last_write_checksum: sha1:5750a06e445f81cd4f0fcdc756d1f83c61f99497 @@ -8466,28 +10076,28 @@ trackedFiles: pristine_git_object: 7a509442fcc0c4ba828bfab3a69d03f6bef6cf66 docs/models/managerretryresponsepoolsautoscale1.md: id: 5188fad3b76f - last_write_checksum: sha1:d14c52fce90bbf25f54879693a1492d713b68524 - pristine_git_object: c432650a97b10a4156212b1c23deca3149bbb148 + last_write_checksum: sha1:e8cc10417202887406e2bae9fe9be87ce99d2ca7 + pristine_git_object: 07c80b4e68a3259c6b037dc65a33bf9b77d7bba3 docs/models/managerretryresponsepoolsautoscale2.md: id: 8dec6888ed6a - last_write_checksum: sha1:50bb8ff3cbff479a88009c2ccb84726cbc2eff9d - pristine_git_object: bd9625b80bf37e8443c6ff61ef707f559fd2102d + last_write_checksum: sha1:4b7e0ed75196d80dc209abff91e98d429bee6ed4 + pristine_git_object: ff57d5c4b334ab0193b1a2fb6acb880645eca858 docs/models/managerretryresponsepoolsautoscale3.md: id: 1d4e3af52045 - last_write_checksum: sha1:ef742205d6ab7f1cd5bb0826b5d21bb68adc9542 - pristine_git_object: 3d044fa2c0dc4ccdf813fe073f14f4686860b2d6 + last_write_checksum: sha1:4b6ea3e7598645cb208e41940cf0643ff83ccaf5 + pristine_git_object: 7744c72ca0bf5639b65de29186f252973a2a6de5 docs/models/managerretryresponsepoolsfixed1.md: id: fdd2e78517d5 - last_write_checksum: sha1:be241761dce4fdccff1eca2c44490a10f2ebd78f - pristine_git_object: c76493d07a01d206d589669d34770eae9b876235 + last_write_checksum: sha1:ca4c0d797b0362f00db873aae2bbf9dc61e81bf2 + pristine_git_object: 757191d58b02a6bc57354650f2e363da8604d2ae docs/models/managerretryresponsepoolsfixed2.md: id: 44efff08ad92 - last_write_checksum: sha1:bfd47abaa476c0f9b12e6207f56146ae6063f9a9 - pristine_git_object: 747038f9011a76d46114f12c0cf15b9d29dfd72b + last_write_checksum: sha1:34d50e525345481b68568cc60953cfb62d7bb2d3 + pristine_git_object: ba265fcad1c95231374959402b3b1991ec74d2c5 docs/models/managerretryresponsepoolsfixed3.md: id: 46437af278ef - last_write_checksum: sha1:1de21eb6312756c5a1ee1cef2f7a46582723c2ee - pristine_git_object: b6f323ea63262a5d648507de6c11c8f87432f4cb + last_write_checksum: sha1:4aac441957ed771812af65c3d0079ab45eee5253 + pristine_git_object: 80dd416836a2837e3605b5ea837ebfe17613fe4b docs/models/managerretryresponsepoolsunion1.md: id: 89128921fbbe last_write_checksum: sha1:4d962bdba2b3ceaffdcfce805513e555fdfe692f @@ -8946,16 +10556,16 @@ trackedFiles: pristine_git_object: c68331bee603e86465fa9f8ded028174580abf6c docs/models/managerretryresponsesetup.md: id: 62030e7f1593 - last_write_checksum: sha1:a3bb7e6a15da61cd2d1a35ec6153a95585524080 - pristine_git_object: 3ce743642a23e810da056adeb8a1bc3e1f0b4747 + last_write_checksum: sha1:fc2e32270c9124eb9809308dc292850b945f6046 + pristine_git_object: 7ac15d711cc0d68daa201d73a25dfca09b223c64 docs/models/managerretryresponsesetupcloudformation.md: id: b0d16782154d last_write_checksum: sha1:5e34dcb0baf35f86ee59ef4c088d383dfd7ec753 pristine_git_object: 0d0c47bead12553400c3574bcc3164d241e579a1 docs/models/managerretryresponsesetupconfig.md: id: d4566dbcec9a - last_write_checksum: sha1:cf6409ac16d8941a198d303361204832d6d6e017 - pristine_git_object: 839c2dcb9b2b91d4b231edf795d0f92ba6cf4583 + last_write_checksum: sha1:f656e23d9c53098db536d1bc1af2e74283aecea1 + pristine_git_object: b7cfffe529e5927b527348b70aa1080768ba4e8e docs/models/managerretryresponsesetupgoogleoauth.md: id: 7cbca3c893ab last_write_checksum: sha1:d81810e87d100e5e682a2b6efd1b90e94e4f1ba2 @@ -9492,6 +11102,22 @@ trackedFiles: id: c21d21a1003b last_write_checksum: sha1:d026f9bccf478a222ca3e3fed173e346f9e6b307 pristine_git_object: 5b42e18b3062c270ad5bf3a115a5eb7649825b77 + docs/models/newdeploymentrequestfailuredomains1.md: + id: f7177e5ecfeb + last_write_checksum: sha1:97daa7006f519fe9116feb0833fde92d2dab5763 + pristine_git_object: 943e4d5a97206cf3e02645f05da59610ffb53d75 + docs/models/newdeploymentrequestfailuredomains2.md: + id: 1276853b9b90 + last_write_checksum: sha1:a27bbeb960507cecd69a0b61f86dd7346953008e + pristine_git_object: 83cac103d15523513da5b2f0241444c63a794cb1 + docs/models/newdeploymentrequestfailuredomainsunion1.md: + id: 27067c7e3b7c + last_write_checksum: sha1:3bf9d2e49422815dc61f90a58aeed5d18e03bc31 + pristine_git_object: 300827cb1f76088329ddba306e49e6767b7280b2 + docs/models/newdeploymentrequestfailuredomainsunion2.md: + id: ff5814bca604 + last_write_checksum: sha1:cb874232bdb9b7b1d4616a18e7dd461d1af86248 + pristine_git_object: 51e6bc74ea36205739685d83a3598f636bf5c998 docs/models/newdeploymentrequestgcp.md: id: f4d74bf2e61c last_write_checksum: sha1:7221cb11d1b400a9bfd1588ee44950819a37af6d @@ -9586,12 +11212,12 @@ trackedFiles: pristine_git_object: 475db364a049954ab8b117c56e0ff1633f0d9d51 docs/models/newdeploymentrequestpoolsautoscale.md: id: 2532be14903f - last_write_checksum: sha1:1095a12cec9b39ab96223c61038790a326c83041 - pristine_git_object: 36ca20e5e7761cb8c7eeecaf03a840cf386a90c0 + last_write_checksum: sha1:24663e8690f3e0c8fffed3934a6895859a18152c + pristine_git_object: be9824d53572c661245cf236d428080b00541bdc docs/models/newdeploymentrequestpoolsfixed.md: id: c83f39bdb9b8 - last_write_checksum: sha1:ba9b4776b749afe1946303009b102bb08de9a00d - pristine_git_object: a6bc6a7e460f58d6678123d76962beaa53b127b8 + last_write_checksum: sha1:81c7a944ef946a764afb4a2996236417e6552a3b + pristine_git_object: 4e58fa11a91d1a94e145b1d48cb2d2e3fecff6fb docs/models/newdeploymentrequestpoolsunion.md: id: 9615aca40124 last_write_checksum: sha1:957644d5ceb064bb82f7ce8dee77e3dff7cde43a @@ -9784,14 +11410,6 @@ trackedFiles: id: 9eb0ea873e80 last_write_checksum: sha1:1fe40a47dca32273d7c397841c3882459d1519ef pristine_git_object: 25bdd3f1e03164d4148df1298ea138b984427a1e - docs/models/nextstate.md: - id: d4a4b873c6aa - last_write_checksum: sha1:c73618e125b53dd07c7961b2db7f55976cbd9ab3 - pristine_git_object: be86d9277c4deb5e245bb247563b1b6a7f3d97ef - docs/models/nextstateerrorunion.md: - id: daf2007e4486 - last_write_checksum: sha1:eaca175581f3bdcfb3d5d7820ba67f34a21f53fb - pristine_git_object: 08a254372b574c68f6b4bd7ec6fdd46b569b1d51 docs/models/nodecounts.md: id: 74a189e7c9ff last_write_checksum: sha1:17c2a6067a9d114a323a3b55fb48fbb79b856a6a @@ -9840,6 +11458,10 @@ trackedFiles: id: b2753c1128e7 last_write_checksum: sha1:472f05c11b6355a027fea586e79069f31a2f23dc pristine_git_object: f66ab26107ac7d6c39014ffc96f61a90f0fa0732 + docs/models/operations/acceptworkspaceinvitationrequest.md: + id: "365098746728" + last_write_checksum: sha1:7302986e31038a820778303bc119aea6f31d9bd1 + pristine_git_object: 10c4e00b082c3f66549874683f30d529b444a536 docs/models/operations/addworkspacememberrequest.md: id: a35dc9e3f811 last_write_checksum: sha1:09bbfce0416534af4325c2ef080464493aea3c5b @@ -9860,6 +11482,10 @@ trackedFiles: id: 19ad9c7ecd8f last_write_checksum: sha1:c09bc5c2caaae0c85e9165883a9d292c830e45ba pristine_git_object: 66b5b9f2ec1235b91465da6da1f9ab99aff46bc1 + docs/models/operations/approveagentsessionrequest.md: + id: 36fdb9b3355d + last_write_checksum: sha1:5c90b5dea1a630e2045b2592c041c2c451236f0d + pristine_git_object: a6626c680e269821a5c2a08c2347d6cc1659ff15 docs/models/operations/backendenum.md: id: 10b6d15a7784 last_write_checksum: sha1:db5d7a4ab59d5801d68f4cb54cce8bf175935ba9 @@ -10813,17 +12439,21 @@ trackedFiles: last_write_checksum: sha1:6351871e5ffaf492b8279ba025a641e546d83763 pristine_git_object: 722cc0efc98a7fd1dc334d522fdc351e9fcbc331 docs/models/operations/createprojectbinarytargetrequest.md: + id: 203c5066b99e last_write_checksum: sha1:73554bbccdb59c734538182c464e864b8eab8cbc + pristine_git_object: e879ffd8564bd5da356baf83e05e6ecc5e124404 docs/models/operations/createprojectbinarytargetresponse.md: + id: 5a2bd850af9c last_write_checksum: sha1:d0cabb3d908e9b769d57ed1e979a38c1aeb4eac6 + pristine_git_object: 55b99f07e42e6670a773930363255d43d908f089 docs/models/operations/createprojectclirequest.md: id: 1765dce7c10a last_write_checksum: sha1:88014d10a5d5f22c3fd4c31ec7726df34388e51d - pristine_git_object: 34dbe4a8f3827fdee129fc144aecb2f19ba1f99f + pristine_git_object: 653cdc2c1df6bd3bd9f6e0188ea94699d34dd3e5 docs/models/operations/createprojectcliresponse.md: id: 23f5cf44ba45 last_write_checksum: sha1:3516a8089b367c0d0a5fa42ad889187d89a89245 - pristine_git_object: 0a4094886a1f3976ea2aebf4028eb96b096bc972 + pristine_git_object: 4e71f634acce19e89ae9251011d7bbc901089533 docs/models/operations/createprojectcloudformationrequest.md: id: bc13f08e99c4 last_write_checksum: sha1:736a75fd86cf1a7718948b987131f5eac29aad1e @@ -10841,17 +12471,21 @@ trackedFiles: last_write_checksum: sha1:323ae32164c4dc0f39431aa8c92aa1f4de03d1c9 pristine_git_object: 7fa670a8c65ab8cb45eafe4a557a8911c2c04040 docs/models/operations/createprojectfromtemplatebinarytargetrequest.md: + id: b4f36f88031e last_write_checksum: sha1:bcc8fe1c1d0ec65160ee239c15fd6bfd6498e597 + pristine_git_object: e33ae728c9d94bab7a6a8479d5cfe6847dad5620 docs/models/operations/createprojectfromtemplatebinarytargetresponse.md: + id: 41ff7512292a last_write_checksum: sha1:a9e9b508aee15ab7d82d46685819400508e6d544 + pristine_git_object: 68d3ea8b809b14529523616afb4ec64b26f54fcd docs/models/operations/createprojectfromtemplateclirequest.md: id: 9737f89b8aae last_write_checksum: sha1:f93af539787e7699d2445bb2ab68e5a595b63165 - pristine_git_object: 2cf2c3784c604dca8dfe24bf56481b86b20f40dc + pristine_git_object: ee5fb131940eda9abd69b58ba8ca76598c83bbc9 docs/models/operations/createprojectfromtemplatecliresponse.md: id: a4718aa3f0c1 last_write_checksum: sha1:ce77a98fe9f9c4d65c38321f563b072929b68c3f - pristine_git_object: 0d2dd7ff9cfd2b98a4e0490182c86f849cc22e4a + pristine_git_object: 7922a9d679734fb27efb932d4320c7c227d77161 docs/models/operations/createprojectfromtemplatecloudformationrequest.md: id: edf3cca72bd7 last_write_checksum: sha1:a89a8e6f3436d799aa8be21e77e5a0715a792c07 @@ -10992,6 +12626,22 @@ trackedFiles: id: ed4344ab19bb last_write_checksum: sha1:57fe259f2a17a5b056434a25dd9791386a174343 pristine_git_object: 0870d489310d2c11a743f8ca161128c270b4476f + docs/models/operations/createworkspaceinvitationrequest.md: + id: 9449af52aeae + last_write_checksum: sha1:c7c3c9cbf8f728302f2742bfa247e86eaabb53f5 + pristine_git_object: ebe50a0a388ec8ab95167d14206f3041a9957846 + docs/models/operations/createworkspaceinvitationrequestbody.md: + id: 75caab682ab9 + last_write_checksum: sha1:b21f141be389f8f6f8c755871acec9bfade33568 + pristine_git_object: f72dc59f5b5934925b01390ea532dc9cc662146f + docs/models/operations/createworkspaceinvitelinkrequest.md: + id: 8458f328c4ca + last_write_checksum: sha1:099a54af859e41da8adf790eee888188d2281207 + pristine_git_object: 9a94496265529a352ff8488a1b2afd305a14bb5d + docs/models/operations/createworkspaceinvitelinkrequestbody.md: + id: 0543b124d851 + last_write_checksum: sha1:3cada0bb438aeffe247dc2c92d3e181e2c81a28d + pristine_git_object: 6bccdb3d85514263fb148d0c4f51c97b826c082f docs/models/operations/createworkspacerequest.md: id: 6ca823e26416 last_write_checksum: sha1:809488e20e7ed61dde31f043f747375161ffc4f4 @@ -11110,8 +12760,8 @@ trackedFiles: pristine_git_object: 714a55fe0552012d5a03cdfbfc93c0f1ea4b8321 docs/models/operations/dataaws1.md: id: 665e28ed6bb4 - last_write_checksum: sha1:066d6466e933017856bab5ca25fa5f6587e28e0a - pristine_git_object: 79c1407f73ed7d080411d9862bc015fe0e7acb83 + last_write_checksum: sha1:679157707fd48314d22376a3619e117b5b73b6e5 + pristine_git_object: 26ac3ca369cfa3dc1997189f02a0b2f448cdc58c docs/models/operations/dataaws2.md: id: 36c55a31d434 last_write_checksum: sha1:8dc84e51c777d578b51c17641272a8e3cdd73954 @@ -11158,8 +12808,8 @@ trackedFiles: pristine_git_object: 03bb4a2fd277973f4ef91e3eb47bbc1876d77325 docs/models/operations/dataazure1.md: id: 4a945facdc1a - last_write_checksum: sha1:90939a167635d191c0779eff18c80c2ef8894b97 - pristine_git_object: 15708477e9aad7cb0db95df8a7431183e5c3fc98 + last_write_checksum: sha1:dc89a702d241d5fc94a969995db8af6cceb46e30 + pristine_git_object: 73f949fef2190d8da9939aef96666c4ac9c6f33e docs/models/operations/dataazure2.md: id: b176f4c4164b last_write_checksum: sha1:cd80ed6d63fdc3beef4a63349b2987299c0ebcb7 @@ -11250,8 +12900,8 @@ trackedFiles: pristine_git_object: c750a3ef93dc6b7f47b3ddc23dbeab6546cd6491 docs/models/operations/datagcp1.md: id: 28c75e77beb6 - last_write_checksum: sha1:52f1edf5b89eecf2cad4cf33e79ebc8846a98a91 - pristine_git_object: 75ffc8836cccc29af60b85b158376de78d5ff931 + last_write_checksum: sha1:79e1d56d8560905a478c35ebfaa425a4f539162e + pristine_git_object: 79c694ac871fe133241df49316499422d463d4a4 docs/models/operations/datagcp2.md: id: ebb8d1e40d34 last_write_checksum: sha1:b1cb175a6c2035a179a7ff76abc54509bb98b813 @@ -11302,8 +12952,8 @@ trackedFiles: pristine_git_object: dd0590999cb48fcaf1e83260e7f9ed024231a850 docs/models/operations/datahorizonplatform.md: id: 73864a53e169 - last_write_checksum: sha1:63faf991b18a4e1b22ef5012a06c665c06a531ea - pristine_git_object: 186b242f3fb2b7f2a2fff9630b15aa4850ea63e2 + last_write_checksum: sha1:607c125ea164f9295c784255569fa9b357bcc529 + pristine_git_object: 2bfd82206f5386979bbe2ac2c47212fa4e005872 docs/models/operations/datakubernetes1.md: id: 096f85d155a3 last_write_checksum: sha1:c75901e14dcc822e5b67866580ef22b044ad0300 @@ -11378,8 +13028,8 @@ trackedFiles: pristine_git_object: 7333c4bffc0f870ed82d0c86e67cfc3bacf69622 docs/models/operations/datamachines1.md: id: 2a8216e30ca0 - last_write_checksum: sha1:e41479fcf5391ca425501eda0f812ae884a90773 - pristine_git_object: 8763f73b01fe22290ad2af61bc0df5fd9752b2f1 + last_write_checksum: sha1:18aae42d79822ef6bcccaa87e50382a4cfd969b1 + pristine_git_object: ab57952bd1a2d3b73a540842db60de0586f3b8e9 docs/models/operations/datamachines2.md: id: 7db9cbfb7962 last_write_checksum: sha1:89b18b9abdc82a5b0d6400c9d223a06123f5a2d6 @@ -11779,7 +13429,7 @@ trackedFiles: docs/models/operations/deleteprojectrequest.md: id: 48b7d1a72221 last_write_checksum: sha1:b9635053635eb82578a0d70bcc53f85a14c0d14c - pristine_git_object: 03dcda06b20f95a6c694efe2dee62be41dd42a76 + pristine_git_object: a0e54e37bf028912ddbdd1312baf0e6e9c5214db docs/models/operations/deleteworkspacerequest.md: id: c3a6fd8ac219 last_write_checksum: sha1:52cf255a6ab8ccc998e1659748a726aefc951d25 @@ -11920,10 +13570,22 @@ trackedFiles: id: 4c6808d8bb23 last_write_checksum: sha1:4fe8bdfbec7f94270209a37d96214e4a4f640fbd pristine_git_object: b6c455f245ab6f9e89c2f2e196743eaf8824db80 + docs/models/operations/generatemanagerbindingtokenrequest.md: + id: 4d850d94a306 + last_write_checksum: sha1:ad9375fcfe688b7ea457cecf9145e786c2eec4c0 + pristine_git_object: ca07e287682d28746b558060b235ecd0b91615e2 + docs/models/operations/generatemanagercommandtokenrequest.md: + id: 1b648033c3ca + last_write_checksum: sha1:c77adb166ea8a4de2346a1f6eb2e5f0b72139ca8 + pristine_git_object: e1e6ad0f1f732d770bc639570dfe1ff97b7b4b25 docs/models/operations/generatemanagertokenrequest.md: id: 27531272409f - last_write_checksum: sha1:12980b45d4d2d1afe7146f3beb06d80dcb8f6a49 - pristine_git_object: 9bed74c2196d6b03288a003f48bbe83788dd2758 + last_write_checksum: sha1:db5198495fff11cfed198326457937f837fd3915 + pristine_git_object: d6ed7a53ab835672f934973f1296e779e3d6ae84 + docs/models/operations/getagentsessionrequest.md: + id: 00406d7ca377 + last_write_checksum: sha1:d26fdaa306c6a5a562199d068bf30059e01ef019 + pristine_git_object: b36bab2b83b3d61037741505b38222d12c3aaeb0 docs/models/operations/getapikeyrequest.md: id: 2ee5609f22a3 last_write_checksum: sha1:20fc5c6da0dfa9260ee890c577d06266be55afab @@ -11987,7 +13649,7 @@ trackedFiles: docs/models/operations/getdeploymentstatsrequest.md: id: 034555bbd656 last_write_checksum: sha1:4b3877275fc83038c918e5cc6f9c5c12f5c13e2c - pristine_git_object: 05e11221ed4935e995b87c0f81ada8952ad6a851 + pristine_git_object: 459f63669e6231aa22219117ad565607b69c520b docs/models/operations/getdeploymentstatsstatus.md: id: 1eaf0af49a7a last_write_checksum: sha1:50250986901211528336eac54e8a829a013202b6 @@ -12047,23 +13709,23 @@ trackedFiles: docs/models/operations/getprojectactivereleaserequest.md: id: 0a329eadfcdb last_write_checksum: sha1:cc97fa336ca8c7d4c5fcf0574e077ea105fbc26a - pristine_git_object: 7394426b348f7cbc481d569af548a06a2bb17eb3 + pristine_git_object: 9eddec1d9bda661a42d16ece08e3539919bef3ba docs/models/operations/getprojectdeploymentlinksetuprequest.md: id: 1956481b3f80 last_write_checksum: sha1:517741b7d1bf0d01c645c09ce9d97b9482d13883 - pristine_git_object: ede0c6046fefe0190842f48338e79ba657be4e8c + pristine_git_object: db0ddb08a70394a3a478e7bedfe510cd18c39d83 docs/models/operations/getprojectdeploymentportaldomainrequest.md: id: b9babbda355e last_write_checksum: sha1:331d1a8cb948ac50ce38cd0dbcbb4091b4221bcb - pristine_git_object: fb6e1258cee8e65edecbfbc9692579b50d89a239 + pristine_git_object: f419fab60d02eeeda8c46e6dca792ad4b00d6a4b docs/models/operations/getprojectgcpoauthproviderrequest.md: id: "683776069141" last_write_checksum: sha1:a0ca6eb2d82c9fa35d7269c47ce007e453496e16 - pristine_git_object: 0b2f1505a775822e562ab65d98ff748d1e6aae9b + pristine_git_object: 01dc2fc123c5059ff482b8b750dca3ae74f34885 docs/models/operations/getprojectrequest.md: id: c8b582ab72a0 last_write_checksum: sha1:e73dfda66377dd7c355d0a549c09e830d9092ef2 - pristine_git_object: b725d77f1b34e50770bf8c935a0663618208042f + pristine_git_object: f9bb913fc8b966676115af720b34c61acf515aeb docs/models/operations/getprojecttemplateurlsaws.md: id: de9aa6dbb151 last_write_checksum: sha1:f05d52a3601389ff2909b3b47daf7072fc7558f8 @@ -12071,19 +13733,19 @@ trackedFiles: docs/models/operations/getprojecttemplateurlsrequest.md: id: 16cd605e973a last_write_checksum: sha1:f2f4cf4b415207eda9b77e18348b7b045cce1ad2 - pristine_git_object: 3c7b4569637bbc3cd71bddff00453224c31ad235 + pristine_git_object: 27505200ca6234ce2f43a254445de2575a601153 docs/models/operations/getprojecttemplateurlsresponse.md: id: 35c5b937ae36 last_write_checksum: sha1:b20878857f0429280c21998e25097a0951611ecf pristine_git_object: 0bd3de9019d1257e4763f3b39207e23df1e3abfa docs/models/operations/getreleaseinclude.md: id: ee689a40e3b1 - last_write_checksum: sha1:eb87134702e620f511aa3366ea8ccd96171ee48f - pristine_git_object: e05e38f81d0720ab8d858dfe00e420bfd9d973b1 + last_write_checksum: sha1:2015323c13338795a46f1b883d144a8799320e9a + pristine_git_object: 74551ce07d7caf4a6c9c411ed19df3a39094581e docs/models/operations/getreleaserequest.md: id: 4f0017cc5670 - last_write_checksum: sha1:3fe87f491706d9a1878ca7f3fa90309d92ffc531 - pristine_git_object: c52e712492dc8df72376010422ab1206b94c5483 + last_write_checksum: sha1:f596a96ebb6a743302d195c85acfed7d680b74ef + pristine_git_object: 826f3b6b83134a6f503d013170dc0b02a9d5a002 docs/models/operations/getresourcedeploymentdetailarea.md: id: d300ab6d6854 last_write_checksum: sha1:8f25418f2535a2276013197abd0b58896a483807 @@ -12091,15 +13753,15 @@ trackedFiles: docs/models/operations/getresourcedeploymentdetaildeployment.md: id: 7598d8a42676 last_write_checksum: sha1:c1e86334cc51ea5af44faa6cd66d10911cb3cbe5 - pristine_git_object: 16efd5c03b836344bf57f5798d3f90597a993f2a + pristine_git_object: fd03ad88687a48081f8ef3e1f9c0b15e3365d07a docs/models/operations/getresourcedeploymentdetailrequest.md: id: d2e5d03fbf7d last_write_checksum: sha1:0a1d7ae05d089005a4dacd3d8e4569b62551a8ca - pristine_git_object: 71e01fff5e4dbdeedfa05d562f031a285e5e9a6f + pristine_git_object: d09fda5d74f2fba0a95493bd9d9c30fbf8b7f09f docs/models/operations/getresourcedeploymentdetailresponse.md: id: e5b08a917f2b last_write_checksum: sha1:4f3ba727c6cf39e927989d81acc7d31188a4d1cd - pristine_git_object: b2e25d5385275f12923f3e26318ea7f52c535145 + pristine_git_object: 887ccf3f7025438a10ad1a8fa7d6c3b82a32d4d5 docs/models/operations/getresourcedeploymentdetailsource1.md: id: b08fdc05513b last_write_checksum: sha1:bce2deb72b47b3ec654c0189902d64d2a139afab @@ -12148,10 +13810,22 @@ trackedFiles: id: 8672ae2824a5 last_write_checksum: sha1:50521ee526720bd9bf86c51b9ceaa2926098498e pristine_git_object: 788f7fe91a849b7e995956be783fdeaf6e73fd75 + docs/models/operations/getworkspaceinvitationpreviewrequest.md: + id: 8c17bb6936e8 + last_write_checksum: sha1:5e80028d1fd67c69a5babf7b5bc92d5c74da1371 + pristine_git_object: d12cac9b1ced39073132521af2a5b21623697c1d + docs/models/operations/getworkspaceinvitelinkrequest.md: + id: 5091ead4addc + last_write_checksum: sha1:ab2b54d1d462878a3d34ae8b1f5d14021f75c88d + pristine_git_object: 542af6410b7124a1390add55ca8db40408f65c83 docs/models/operations/getworkspacerequest.md: id: 2d440111adab last_write_checksum: sha1:9bd48eee245a346140a13d18da26586f755da90d pristine_git_object: d28b181ae80b64e1bfc5cf0be088f2fbc4ec4177 + docs/models/operations/getworkspacesettingsrequest.md: + id: 072182ee4e82 + last_write_checksum: sha1:f32c8adae9bd71364148e01014226e460714a75d + pristine_git_object: b9c19ac64324c722272ae0f5e8174ec3df2fef14 docs/models/operations/gitrepositoryrequest.md: id: 8ae0958449e1 last_write_checksum: sha1:f0b82ba5289ebdc6107d5e2f223b8cd7624e5370 @@ -12784,14 +14458,26 @@ trackedFiles: id: 1fe62361c2b2 last_write_checksum: sha1:3f19ec169301fed8ff1539cfea84dec952370d8a pristine_git_object: b9b0d6b23c2b2d173e89282c7915e249bf030e0f + docs/models/operations/listactivemanagerdebugsessionsrequest.md: + id: 556dd6ba17ae + last_write_checksum: sha1:b99cd549274a378aa0ba346aff003ae903385a36 + pristine_git_object: 4a6f37ab227367e85cbbec5f7910fc47060026a2 + docs/models/operations/listagentsessioneventsrequest.md: + id: 8052b3680b0a + last_write_checksum: sha1:4ad8d35d94aa1d0af30a18b8523e869c23a1d294 + pristine_git_object: 59f028d458d951e9eaef8558768899c35fbc1aaa + docs/models/operations/listagentsessionsrequest.md: + id: 1edd513c745a + last_write_checksum: sha1:cd1ae458491f3e22e1d8ed0d5482f6c34f272c7c + pristine_git_object: 817bdf79dbcfc9b02ee36507d27030cd96e6454f docs/models/operations/listapikeysrequest.md: id: d184dc4cdcab last_write_checksum: sha1:a6be74f445f2498004114364628f31c9b5768480 - pristine_git_object: 9cb5b7260776bdc0e09a42e8be6bb42e33b3e4a5 + pristine_git_object: 84230917ba3df806f6a4a3195016feb38caa5365 docs/models/operations/listapikeysresponse.md: id: feed1d8bc9c0 - last_write_checksum: sha1:c448c41b1d380583f8c6d9eea8dd2481969c0589 - pristine_git_object: 7b707e1f2c4f66d98066c60c585a4c042e4fcd6a + last_write_checksum: sha1:a01ab00409e20fc19fd21b36bbd12564cf713b65 + pristine_git_object: c0343efc928218c27ef6914e030b8585cf5c97ff docs/models/operations/listbillingauditlogrequest.md: id: f07e072e247b last_write_checksum: sha1:8002d4f0186f4d2c6db450a4947f211a71efa288 @@ -12803,11 +14489,11 @@ trackedFiles: docs/models/operations/listcommanddeploymentsrequest.md: id: 11aedc766e42 last_write_checksum: sha1:a1f0d195c4d0b768cdcc01fb6d83b711ec2fe8ac - pristine_git_object: fdcf8290df50e2081d2d325ee425edad0d517753 + pristine_git_object: 9cc4685bd20d7a10389211b16ae608d45fd89657 docs/models/operations/listcommandnamesrequest.md: id: 4d4817aff7b4 last_write_checksum: sha1:96dd2bea4cf230aa3bf04a7d31e73a955039038a - pristine_git_object: 8e73e1f870a14400df1b8d94da2ad0ecba0b987b + pristine_git_object: 13a0e5c5de4a62443542d7e1f4a761c0139b3d3a docs/models/operations/listcommandsinclude.md: id: c2685f20e71f last_write_checksum: sha1:ffb51ade7f9fa18ee1c51f2a56db59b126b33d94 @@ -12815,7 +14501,7 @@ trackedFiles: docs/models/operations/listcommandsrequest.md: id: 3cc236e8a7a3 last_write_checksum: sha1:6e7189bd0c23b9d3b4276fcdc3a9235d17401b4b - pristine_git_object: 59b6fbb5ae3ffdf022ea407cc8b255802deb4651 + pristine_git_object: c7868f0d9d0ef41bed433352c41319a5acdab098 docs/models/operations/listcommandsresponse.md: id: 0f1c06183015 last_write_checksum: sha1:4d10175088ee8eec6e9a4afa92d949901e4ac81f @@ -12831,7 +14517,7 @@ trackedFiles: docs/models/operations/listdebugsessionsrequest.md: id: 7fe38f95bc7d last_write_checksum: sha1:c447a343d0480986a2b7f80cbddddc2562c25903 - pristine_git_object: f7eb891727d3899b2f383dc510be735e8b024b9c + pristine_git_object: 6431a714b21d092e5fd2121d67a9716cd6f6613f docs/models/operations/listdeploymentfilterdeploymentgroupsitem.md: id: 2bfe92db3ace last_write_checksum: sha1:95f01deead0b3445683d543d679b1afb845e93c7 @@ -12839,7 +14525,7 @@ trackedFiles: docs/models/operations/listdeploymentfilterdeploymentgroupsrequest.md: id: 961dd8047c04 last_write_checksum: sha1:8c9a4458f8b99fff64f420cc142e000085e3ab23 - pristine_git_object: 2ff755670ac3325aba614c16dd43753475da29f5 + pristine_git_object: 8dec29db71080b1939310351800b22bef8347f54 docs/models/operations/listdeploymentfilterdeploymentgroupsresponse.md: id: f84ac956fa62 last_write_checksum: sha1:3bc3e18bc196bc0e8f37859acbf459a0ec2d8257 @@ -12851,7 +14537,7 @@ trackedFiles: docs/models/operations/listdeploymentfilterenvironmentsrequest.md: id: 653ec6b5d3de last_write_checksum: sha1:ffea8bc841a4d52231433bb741577712285348d5 - pristine_git_object: 4f0e478800d82a850a4dfac00448b18f9310ec25 + pristine_git_object: 4fae9603d8c8ea3663bc40237893dc322443f663 docs/models/operations/listdeploymentfilterenvironmentsresponse.md: id: bf4be3523974 last_write_checksum: sha1:d1a17b7a134d326dd21e218bfaa46135e8dd189f @@ -12871,7 +14557,7 @@ trackedFiles: docs/models/operations/listdeploymentgroupsrequest.md: id: 046f58f925f8 last_write_checksum: sha1:71e767d6113d789f020f732dcc0a4727aa6e1a9d - pristine_git_object: 905ecb6a2489345fa2800c3502085699cbb651dd + pristine_git_object: f00a7b3387454a3cbf04c56bd0416851b52e78af docs/models/operations/listdeploymentgroupsresponse.md: id: 5e579afb744e last_write_checksum: sha1:db9accccf1cee07e6b919ddade9dd9cb36a54a4a @@ -12887,11 +14573,11 @@ trackedFiles: docs/models/operations/listdeploymentsrequest.md: id: 854523666c28 last_write_checksum: sha1:58c3f203994bbdd033f54b65834ecd8f925d3765 - pristine_git_object: 44fe69b8a24ebeac6bc6c7e62ecfae357be40780 + pristine_git_object: 7cce7874415adabb71e333605ee504c9d31c26ee docs/models/operations/listdeploymentsresponse.md: id: b3b1e4f8a3b8 - last_write_checksum: sha1:7391b547d30c28179a52e820714f6cc130f3610f - pristine_git_object: f97f2cb4d91bf889f51e9889538e02317ece4722 + last_write_checksum: sha1:de5c6eff42467a26d938d197a9b484063aceb809 + pristine_git_object: 0cfa5115f9e923ccdeb3a194383b9dd1fb626de3 docs/models/operations/listdeploymentsstatus.md: id: c99e64ef8b2f last_write_checksum: sha1:578010c2dfffd6c7890fa4475af576c6dbbdf18e @@ -12904,14 +14590,18 @@ trackedFiles: id: c04f9fccf81e last_write_checksum: sha1:57d6b1c574992c157cab6717391909c37ac0aed9 pristine_git_object: 86d53e2967c889ab89b3722f63fc0bc1a906207c + docs/models/operations/listeventsinclude.md: + id: 4b2bcf4f067a + last_write_checksum: sha1:867c4163d882b5bdb47b342c16c14baf8004620b + pristine_git_object: e11f6c41ffa989757b40733cf3855482aec98719 docs/models/operations/listeventsrequest.md: id: 4c63e4d672e2 - last_write_checksum: sha1:b22ccc8fe7beafa01c56c56b19975ba2ee384bb6 - pristine_git_object: 73dfec390e1140b6b3b5c5714bd98402fa2ce4ad + last_write_checksum: sha1:38e6427e8c12b00d4b66339ff2bdb6b12be730f5 + pristine_git_object: e123aa76725d24e0cd12a4f70fd45c6226827d32 docs/models/operations/listeventsresponse.md: id: 4ce22aaeca78 - last_write_checksum: sha1:6099b79c8d28f6a4aa0a4db3db921d8afedbd769 - pristine_git_object: 5d6a640d1971fb079d0017e1e400fb00e7870dd1 + last_write_checksum: sha1:0fc224f7cac46bc350e09129bb0804abb086a055 + pristine_git_object: a1d60709bc39215f0dbe876f5eb5a3dbe9953939 docs/models/operations/listgitnamespacerepositoriesrequest.md: id: 4c50cbd5efd9 last_write_checksum: sha1:38f7f9175f7f4cd9d4abd7d63a3ddb9da751d43c @@ -12935,7 +14625,7 @@ trackedFiles: docs/models/operations/listinventoryrequest.md: id: 0a145ea5a74a last_write_checksum: sha1:b2856109c6af1d15acbb614dddb5745f33d8dd69 - pristine_git_object: 077d610764a97ed8d309c3e103a3cef88a927594 + pristine_git_object: 4d575190fca7ffefbff95cdabc3b5427ee281219 docs/models/operations/listinventoryresponse.md: id: bda0e373c6bd last_write_checksum: sha1:37eab613ddeb2e9a33dc4b665156a960f1f00d8e @@ -12967,7 +14657,7 @@ trackedFiles: docs/models/operations/listpackagesrequest.md: id: 2a8e5e099f9a last_write_checksum: sha1:5c4291b9bf6ea75deec756367e4fd07549703256 - pristine_git_object: 226c29e1c86bc3f5d617d8f7a0f270f8117bf48e + pristine_git_object: d5fefa9b6777ed797d9359750a7e6ac6b548d4ce docs/models/operations/listpackagesresponse.md: id: f0805ea4f3ac last_write_checksum: sha1:d64aeacce1591365551b25b9829289ee60b342e3 @@ -12995,7 +14685,7 @@ trackedFiles: docs/models/operations/listreleaseauthorsrequest.md: id: da2003a8e133 last_write_checksum: sha1:868d00f3f8f6e47074a2120547b89707adfda76c - pristine_git_object: 0e93ce2c5258dd8a7c23992b3b0fdc4711fcb45b + pristine_git_object: 29cc8a696227cf56f6d600a3c2cc43c2db312485 docs/models/operations/listreleaseauthorsresponse.md: id: 44c53579b082 last_write_checksum: sha1:910faf2c1ca0e09e4d6c69625c5b801128f409af @@ -13003,19 +14693,19 @@ trackedFiles: docs/models/operations/listreleasebranchesrequest.md: id: 95e3ba8f993c last_write_checksum: sha1:3ac92aa0baa1c2993dc052928949443d33e0e4bd - pristine_git_object: d667f3dc3a0068e304f3ede31aea84a598c7a195 + pristine_git_object: 2ab64f5922083af7908223cc7cbaa1714a69ec57 docs/models/operations/listreleasebranchesresponse.md: id: f2ac65d89a63 last_write_checksum: sha1:cefe9d0dd13ac0f2e75e7207a377fa44199fb1fa pristine_git_object: 1d4f0f171642367ca9c6f1a75112ee62b3deb954 docs/models/operations/listreleasesinclude.md: id: 475e33ee8488 - last_write_checksum: sha1:9837861fbbae2140f52efa5a39a7aaf8b99ed6ca - pristine_git_object: 1f958a0e30d63f146477ccccf8ee73727706ae89 + last_write_checksum: sha1:ba12eda0c94cd477953c4b0951a2bbacfa6249ed + pristine_git_object: 2ed62047223785960835fe093646cebecc5ab151 docs/models/operations/listreleasesrequest.md: id: 5055faa42f8c - last_write_checksum: sha1:b2c6d9bc1c03f1cdc1a75d046b0b83d0f3996845 - pristine_git_object: 6e361a453e2aceb49431157936d13fe88cd552db + last_write_checksum: sha1:c41a61c4b560e0a1b648c78db5cc262d25dcabb1 + pristine_git_object: 96e68b055ae05c2c3e370640f250662fe5423921 docs/models/operations/listreleasesresponse.md: id: fe20d3e71b3f last_write_checksum: sha1:b0bb82743f5997998a1daced5f44e387cfc96cd4 @@ -13031,7 +14721,7 @@ trackedFiles: docs/models/operations/listresourcedeploymentsrequest.md: id: b1f4b0e060d8 last_write_checksum: sha1:6b6c13eb54938c2cce7a27c3e58741b181b8ef0c - pristine_git_object: 5ae1639f46ec4e92f0eeb1f684c7060369b33b40 + pristine_git_object: 79f3a00640fe2e4f9faa67431cf81cf7f51257d6 docs/models/operations/listresourcedeploymentsresponse.md: id: 0c93efaed40a last_write_checksum: sha1:9fea239d4eda85e6b668607c3e5fb599058edaa0 @@ -13043,7 +14733,7 @@ trackedFiles: docs/models/operations/listresourceoverviewrequest.md: id: 97eb9730d0ef last_write_checksum: sha1:97f9ce02ce27b23856adb0bc313e29ed422e22c5 - pristine_git_object: 27dca352e694d0447251b21831b8755d24951d2c + pristine_git_object: f10bc14ff03092d7b18ff2ab211a79a9473e6482 docs/models/operations/listresourceoverviewresource.md: id: 0ffd3a0fed80 last_write_checksum: sha1:ebbb75d312c258874085c0f6a0f009c8829a684c @@ -13052,6 +14742,14 @@ trackedFiles: id: d18e327878ea last_write_checksum: sha1:70cb520a5f4fda88aed9d51591bc31aa08a32fcd pristine_git_object: b2aee4fd68a57f2019a31ed229845ace43a75551 + docs/models/operations/listworkspaceinvitationsrequest.md: + id: 36393df1d2f6 + last_write_checksum: sha1:474ac28b6c8bd0a9b04f19f74441eef6051d9aba + pristine_git_object: bd9e452c64ab4bca76cb0adac7cb4fc672bdca6e + docs/models/operations/listworkspaceinvitationsresponse.md: + id: fb3d6c506306 + last_write_checksum: sha1:4a0470371029ec8ec212d5667e7d431b8b9cca88 + pristine_git_object: dbe65a46a6a0b1a4a14c68e876a138476fc816c7 docs/models/operations/listworkspacemembersrequest.md: id: 33e06e7b1cea last_write_checksum: sha1:c980628a414de1cc0ae5ca7ee2053beee840b7db @@ -14628,6 +16326,10 @@ trackedFiles: id: c280336b6706 last_write_checksum: sha1:abc2769164220bbe3232adaa68b0d8b1ba99be26 pristine_git_object: cde06c8ba0b2f94da89be8bfde00a2693935f1d9 + docs/models/operations/resendworkspaceinvitationrequest.md: + id: 9da47a3dae42 + last_write_checksum: sha1:6dbde74ba86fd80d83ed3147442799efcaa6501d + pristine_git_object: 51b06f6a74958faa90d79c6a91804d77957596a5 docs/models/operations/resolvecommandtargetrequest.md: id: b14da21efb26 last_write_checksum: sha1:f268ca3c0db0b5857a2e57710dd70d1f13fc850f @@ -14680,6 +16382,14 @@ trackedFiles: id: 6481a25bd281 last_write_checksum: sha1:b1a370bd5100affd314ba83d02a919edead445d8 pristine_git_object: 577ef680977e6c0bdf1e25e0489135e4d437153e + docs/models/operations/revokeworkspaceinvitationrequest.md: + id: f2df5b8d5151 + last_write_checksum: sha1:c0795c9c7ebe47a58a0bb886eb333aaa8afe389a + pristine_git_object: e37def30bb2b548dd07bbf37d0a550a0cf1d442d + docs/models/operations/revokeworkspaceinvitelinkrequest.md: + id: 638f05cd8d2c + last_write_checksum: sha1:7bfcb214f49b439ebbbb54bfc228458a72e7bea9 + pristine_git_object: 43e333f7ca03ed40daf5af7dd43c875ab4c2692b docs/models/operations/rotatemachinesjointokenrequest.md: id: 495662a04757 last_write_checksum: sha1:c04e0434e9401ba26be9c0aa8ce7be735db7cfc7 @@ -14696,6 +16406,26 @@ trackedFiles: id: f1a9d176014b last_write_checksum: sha1:7ad92e358e31ec51bbaa3c6cb757b915bd997e0a pristine_git_object: dfe63c2ba7bcb02cf6e83d24dab612cbbf6b85ff + docs/models/operations/slackintegrationchannelsrequest.md: + id: 50e1165b1d9b + last_write_checksum: sha1:7d6bed7fd0424bd3d96cbc2ac4a58223200c888c + pristine_git_object: cbd325da0585c01ffd29d39ad43cc0aea018da9c + docs/models/operations/slackintegrationinstallurlrequest.md: + id: 14967c779109 + last_write_checksum: sha1:1fc24d5317fa54197b18781211f76bf1646fb5c9 + pristine_git_object: 7d7b85128986770f0f8a167b330c21317b8dd4fd + docs/models/operations/slackintegrationsetnotificationchannelrequest.md: + id: 173cf03829a0 + last_write_checksum: sha1:061c22b947cab472de415a8a4ee67adc546b2c68 + pristine_git_object: 2d2750fa44263c763d1d7d7f6bdbf58891ec90f9 + docs/models/operations/slackintegrationstatusrequest.md: + id: efe7702ef108 + last_write_checksum: sha1:61ff6e556aaf8a704d4864f4dea880d68763c99e + pristine_git_object: e58c7a7aa70dda63ef6f3d62d1972df27363c41a + docs/models/operations/slackintegrationuninstallrequest.md: + id: ba10311e6884 + last_write_checksum: sha1:cd71e2f5ae50fc171b2b0b1e643c3e16d4380a7c + pristine_git_object: 9937d431398961137d191696a0e821a55ddb96bf docs/models/operations/sourcerepository.md: id: c73e63b96389 last_write_checksum: sha1:ea35fd540877eed44bf5dccd6c7fe1878324c3b1 @@ -14744,6 +16474,10 @@ trackedFiles: id: c0cd319b1611 last_write_checksum: sha1:90b5f0bac37cd520c0b8a72471da2d0439f9477b pristine_git_object: 32f441444d78c38f3b6ba2cfcc189668e684ec2c + docs/models/operations/stopagentsessionrequest.md: + id: fd14a1688d4c + last_write_checksum: sha1:88861ee38504a4824ffaa0dec83de445d4aa52fa + pristine_git_object: 6aad1ca54844630cf74237bfc10d57e9aba0890d docs/models/operations/subject1.md: id: 89eba340e4c4 last_write_checksum: sha1:8f3113f79c632d00d904d92dac7ac3622f4e75fe @@ -14859,11 +16593,11 @@ trackedFiles: docs/models/operations/updateprojectgcpoauthproviderrequest.md: id: 1b4c3f5addcc last_write_checksum: sha1:bb79cae88ba48e631864d34b5fd71a201b017126 - pristine_git_object: 339c12f8fe86d9f2f23ce607cbcf887e2885b769 + pristine_git_object: 7b1efd78e831689e5d2df34f526a820f1c037f8c docs/models/operations/updateprojectrequest.md: id: c8277360927c last_write_checksum: sha1:e1c4a668825b76cae7f976f3dd35900d6281cec8 - pristine_git_object: 844f5b16f44e11e397c874a897852aef1e5a8c0b + pristine_git_object: 8f4202ee3a0689a9693bdcdf6131ee49fe21fe53 docs/models/operations/updateuserprofilerequest.md: id: 1e59616c750f last_write_checksum: sha1:e95584ac79cde7d2e7a870c38e18c3c7a3bc4ff8 @@ -14884,6 +16618,10 @@ trackedFiles: id: 71110f76d84d last_write_checksum: sha1:dca3de5b9583e33468374c90bdd83f1c77d35b5c pristine_git_object: 1ee9a8397354f6a73a960e0ba2bb548e9ce40a58 + docs/models/operations/updateworkspacesettingsrequest.md: + id: 0dfb9a22ca76 + last_write_checksum: sha1:4fa039dfe0f24fe1e29ec7768a5291bfbb4877ad + pristine_git_object: c47a9394dbf76da5b3e6bde3f10a82000c7b5ec8 docs/models/operations/usage.md: id: 735448cf5655 last_write_checksum: sha1:38c2282c3dcfd3e0e290400eec06cde9229c53ad @@ -15028,6 +16766,10 @@ trackedFiles: id: 99b5d3b1e39f last_write_checksum: sha1:18a57ed5a7087d8e323eb07f408c297424d10ebd pristine_git_object: cbfaa38fa310d1fef68907a8791a784a5f0587c3 + docs/models/outcome.md: + id: d2cdc42ab7d3 + last_write_checksum: sha1:4bc523ebbb02d3ca2f765177adc72ee4f3a1610b + pristine_git_object: b8695f435a2437861f853edd6a898c0e47f5a5e4 docs/models/outputscli.md: id: 3a5790fb0c70 last_write_checksum: sha1:e67b37bb3e5b7f7ef5e71089e0e45a554edd13d7 @@ -15171,13 +16913,15 @@ trackedFiles: docs/models/package.md: id: 7b09da6a8154 last_write_checksum: sha1:1ad2d936d112ad29ea3930b8554077450f0e89a5 - pristine_git_object: 48e584bd20a3217d010b16f31f21078c26ca797f + pristine_git_object: 788f1fa1bb442b7a163146bcfd7f71e1d6aeef3a docs/models/packagebinaries.md: id: 61b1eb966f94 last_write_checksum: sha1:a3ee68d12251d08142c8fe3e47dbb29458c9465a pristine_git_object: 72f22a3a21832b7f879c08f04bd5400dcb2a56f4 docs/models/packagebinarytarget.md: + id: e3ffae520849 last_write_checksum: sha1:0f5a942e6d0c91e9ea309d846ede9d6e14c0e2f1 + pristine_git_object: 50b46d49f7a97be1f9963f93953ced8b9c70f1a7 docs/models/packagebuildinfo.md: id: 4eecc7d04187 last_write_checksum: sha1:1832ab6374f65dbd852ead9e22da3461e1748f88 @@ -15222,14 +16966,110 @@ trackedFiles: id: 42a02954e632 last_write_checksum: sha1:51e4c7011b9aac5c9379b7c2db16ba7c8ed4c268 pristine_git_object: 7a364fa28b6981d928fd272e920caa53dfded6b2 + docs/models/pendingapproval.md: + id: 60a7a4618bd9 + last_write_checksum: sha1:7c325bea999c38c22a2d6eae41a265deb7ecc74c + pristine_git_object: 2011b66309d48ffcd8f259d4af307269cc550d06 + docs/models/pendingpreparedstackextendconditionstateresource.md: + id: 8c9bbe05273e + last_write_checksum: sha1:313ac3aecfa02d60230759a120f2b234cc0f7474 + pristine_git_object: 10e029922d4a11546a97634f37cd5f10924eeaf8 + docs/models/pendingpreparedstackextendconditionstatestack.md: + id: e5944753c723 + last_write_checksum: sha1:c615ae462eb3c7810a3c66a42090e19e1ff0cc31 + pristine_git_object: 630ff0986b53e2055b4bf0b578e5d2fd47fd1792 + docs/models/pendingpreparedstackextendstateawresource.md: + id: 0c742028f7ea + last_write_checksum: sha1:8daaaae5ab8986e73a5d0db080f00fba205ca5c8 + pristine_git_object: 2a12f644503369e48896006bb409ab70985af6a7 + docs/models/pendingpreparedstackextendstateazureresource.md: + id: 37f266474510 + last_write_checksum: sha1:001aa577bf051ba9db69f18239c070f237eb69eb + pristine_git_object: 3289ff5dfffc2097c8f97c97c290c64ca53f3b6d + docs/models/pendingpreparedstackextendstategcpresource.md: + id: 08a5f7fb1eaa + last_write_checksum: sha1:9d51d3414ebe28a32ab6f28b953ac91945998ab5 + pristine_git_object: 8e86598b67cf938939d25b3c64c624a50f859fe0 + docs/models/pendingpreparedstackextendstateresourceconditionunion.md: + id: a15e7f568268 + last_write_checksum: sha1:734cab2fc3562262f2b0cb5b781519a37e7f421f + pristine_git_object: 63ac397d3845506e52bcadc89adeaa5f42defca6 + docs/models/pendingpreparedstackextendstatestackconditionunion.md: + id: 57862f5a6d17 + last_write_checksum: sha1:3cbe65eb16710f50b4f71ea975912e12a0814b56 + pristine_git_object: bbafb83636ec0e2331ae92ad0dfa6ae61f60881f + docs/models/pendingpreparedstackoverrideconditionstateresource.md: + id: f56f3ab5d23c + last_write_checksum: sha1:7be8fd02d63b4887d1a4590915317540a74ed8d7 + pristine_git_object: 073fba400e24688cdef18035851f71f7f982cebb + docs/models/pendingpreparedstackoverrideconditionstatestack.md: + id: 35392b6340df + last_write_checksum: sha1:dbf41214b1f345e3ea3c404675e488c60c5ed6ba + pristine_git_object: 955a7efd30851437a7e85134bcfde5e770434d37 + docs/models/pendingpreparedstackoverridestateawresource.md: + id: d214dfeeaeb4 + last_write_checksum: sha1:63577656d48d7a833cda1ac07adb4457b3222b8d + pristine_git_object: 64bc61274252ca4271b14f282a2c94a0b1613a51 + docs/models/pendingpreparedstackoverridestateazureresource.md: + id: 954e3cfec552 + last_write_checksum: sha1:9fd9c1b4f99114eff228cc614a3d798f8fe205f4 + pristine_git_object: 21e6180a6ac68b1ce95b0dbffdb81063f9c7821a + docs/models/pendingpreparedstackoverridestategcpresource.md: + id: ab7e0ad68dfd + last_write_checksum: sha1:359686e9ecfa5b32c8b8e2571ab4469ff847bea6 + pristine_git_object: 5fd820e16f54fb28db73ec4bd9ca99ccc1776c81 + docs/models/pendingpreparedstackoverridestateresourceconditionunion.md: + id: 875d95e1206f + last_write_checksum: sha1:ee7b65d3926f46aa8b17e724f43ac757026c5fc9 + pristine_git_object: e0c3d988b94c5925e2b0a4525ea7f876b321cc23 + docs/models/pendingpreparedstackoverridestatestackconditionunion.md: + id: c2878b7ca7c7 + last_write_checksum: sha1:0df42378de89cb155948ed15fdf21b69f9b4a349 + pristine_git_object: 2eb529e506ad05379235e4f3768d96c92340e274 + docs/models/pendingpreparedstackprofileconditionstateresource.md: + id: 1d48a26ca863 + last_write_checksum: sha1:c391b75e6c41f4e62992041d985ba4dc69942ac6 + pristine_git_object: 9c2ab0d7a0199e223618ef10e459a5ed250e0622 + docs/models/pendingpreparedstackprofileconditionstatestack.md: + id: cf455ec698a3 + last_write_checksum: sha1:876cb2251315cc7d08941c37140e4c648168e27d + pristine_git_object: 3c1587ce3900f73513bb3b7ed83443e8c8847fb6 + docs/models/pendingpreparedstackprofilestateawresource.md: + id: 501f02fc823e + last_write_checksum: sha1:734acc53f7e88f87bd5077079f8f43863d51e640 + pristine_git_object: d7f059a8d406d80f1a122e61000e6b42a26953f2 + docs/models/pendingpreparedstackprofilestateazureresource.md: + id: 2cf6d806a065 + last_write_checksum: sha1:fe99693dc802226d766846614683de8c34d32b76 + pristine_git_object: 9fdf67fb3963bae27dfe38c083ca213cc0fd8c28 + docs/models/pendingpreparedstackprofilestategcpresource.md: + id: 9e30556fddcb + last_write_checksum: sha1:6f9316fd9e918af3c002018472edefd43749f33d + pristine_git_object: bf960ab33fe9c1e1288550e9832c17287b79573a + docs/models/pendingpreparedstackprofilestateresourceconditionunion.md: + id: 05825c39e1ff + last_write_checksum: sha1:f009ea358fcce9092ca45af5cbae76753bd98fcd + pristine_git_object: f227fed3f3a396c78e512af1a488327f508f719f + docs/models/pendingpreparedstackprofilestatestackconditionunion.md: + id: 316cc29a747a + last_write_checksum: sha1:5a5882290107fbab4057228deea302442b4f5bc2 + pristine_git_object: 64d8080b87dcfd6f8d9509a3587593d4c128b55c + docs/models/pendingpreparedstackstatekind.md: + id: 6f93522102a9 + last_write_checksum: sha1:2347da52c6c1d9db424b28c9becff558801a8b26 + pristine_git_object: c6a09aa2fab28fcd16b7ea55dd86f84b531b101c + docs/models/pendingpreparedstackstatelifecycle.md: + id: c343fc5b0730 + last_write_checksum: sha1:67affcec1d01aaca91ffb063357812b4c9bc94a1 + pristine_git_object: 970005b5b768456237670de85ce24feea565c63b docs/models/permission.md: id: 2e72d664ef50 last_write_checksum: sha1:8d33edaed95aef37cea86679d61b9d1efd8e5d88 pristine_git_object: a546c21cd91233953ff37669d97f19c490961ee4 docs/models/persistimporteddeploymentrequest.md: id: 71d4e97f3983 - last_write_checksum: sha1:c7b52f363c965446456cbc68315df2e986bdcc05 - pristine_git_object: 44116d127132c235e810c2251614d9501ca4274d + last_write_checksum: sha1:6b55e557035099eb5bd53ccfe9ddad9eeb0f8745 + pristine_git_object: 79a23a9370cb6feefe6a8d3f75afb933b5197658 docs/models/persistimporteddeploymentrequestaws.md: id: 71c80e790189 last_write_checksum: sha1:d75665f80470ea30092b0427303742160dea05f6 @@ -15318,38 +17158,10 @@ trackedFiles: id: cd06cef0209b last_write_checksum: sha1:368b7638fb1643c013c947962ec8514b18a2f6c1 pristine_git_object: ce8e1970212bc3a71c329a2c0b56aaf79aa05376 - docs/models/persistimporteddeploymentrequestconfig.md: - id: 0520c72c9a8d - last_write_checksum: sha1:b76565dfc5125c4b9a23a4da4597eb2d011152c4 - pristine_git_object: ad6d68fbad0cdf1955272359fc7c4e0884f3a137 docs/models/persistimporteddeploymentrequestcustomdomains.md: id: 13d3fb599bee last_write_checksum: sha1:ed469b64206fe9913dc40ad7dd996124272022e5 pristine_git_object: 0b1950e841369e76d3ab6ab608ca9ec8cb575a46 - docs/models/persistimporteddeploymentrequestdefaultboolean.md: - id: d71cd49ccb59 - last_write_checksum: sha1:0ba6650e8d587290bc7a961796652278fb2ce2ae - pristine_git_object: a911a6b611ce8d903d9c8ddbda607eb40106bcaf - docs/models/persistimporteddeploymentrequestdefaultnumber.md: - id: 79afb67714e0 - last_write_checksum: sha1:12568014e02153c3522c21b684aa4591894d146b - pristine_git_object: e6282255759f89721f7c0e98387e98fa29e46743 - docs/models/persistimporteddeploymentrequestdefaultstring.md: - id: 3e96b6ffe3e0 - last_write_checksum: sha1:f5ff4eb20f7b6e3dd3711edcc94f78176afab85e - pristine_git_object: 767a64737f342e8c3b6053c0a6b31466b51f8ddb - docs/models/persistimporteddeploymentrequestdefaultstringlist.md: - id: 1732f8375318 - last_write_checksum: sha1:206b36e16d13e320a96884231acb5ef3861e1725 - pristine_git_object: 423e67a11d9f972883addd15225e79b32da40206 - docs/models/persistimporteddeploymentrequestdefaultunion.md: - id: 04a6f4e20a1f - last_write_checksum: sha1:4e6ed2e94430172e013a15490dbde6b604dffd46 - pristine_git_object: f5662ffa3d37a0ad99f0dc1a6daf588e36fdaa5a - docs/models/persistimporteddeploymentrequestdependency.md: - id: 84e00b45fea3 - last_write_checksum: sha1:843fac1c4555415858e6de01cb237c9c91d77524 - pristine_git_object: b644227c268a5307fb90134d38bb535888f99998 docs/models/persistimporteddeploymentrequestdeploymentmodel.md: id: "506639470138" last_write_checksum: sha1:3692109e4b52d40dedf308e80c1f5b8af9524886 @@ -15374,10 +17186,6 @@ trackedFiles: id: e0453842ec22 last_write_checksum: sha1:194717353f87e3d20afa542a5af3ad6589ffd3b4 pristine_git_object: f5c46ce17fbcd15d3d4947e0da28da3ed1e59965 - docs/models/persistimporteddeploymentrequestenv.md: - id: d2f835add57d - last_write_checksum: sha1:0faea75ea69e1ca659021a25962532623345d814 - pristine_git_object: ac5a49202ab2ad2f0dd06d08d20964a080655d18 docs/models/persistimporteddeploymentrequestenvironmentinfoaws.md: id: 89df8c93ad43 last_write_checksum: sha1:26d54fce34bdd4485d8feb1aad5da6e91811ea1d @@ -15430,102 +17238,26 @@ trackedFiles: id: 186860638b50 last_write_checksum: sha1:603d70dc2aaa51335bdb0ca6ddc5c7b125e8bae2 pristine_git_object: bbff9e288b06cb17224ccf1baab4e207b0dbc857 - docs/models/persistimporteddeploymentrequestextend.md: - id: 85b39ba06dd9 - last_write_checksum: sha1:1f3cce99401ce5ad63dc066f320027e8b256b898 - pristine_git_object: 870ab796df40bbb62a469f453d99b3784c73fcc1 - docs/models/persistimporteddeploymentrequestextendaw.md: - id: 271e55a5f045 - last_write_checksum: sha1:eb7d5b12a6b83f7d4f4ffe948f499a123eb28676 - pristine_git_object: 7179310b6f24934592ae39befd7834674490159a - docs/models/persistimporteddeploymentrequestextendawbinding.md: - id: a18f04948930 - last_write_checksum: sha1:3ba1b98d0deac149da06899ad484bb0c8b146f15 - pristine_git_object: b67a528297e2d187f5290c150d36073d1b89b6fb - docs/models/persistimporteddeploymentrequestextendawgrant.md: - id: 7fc51119feec - last_write_checksum: sha1:1f7d41285080cbcb6b131123070c080875cb173e - pristine_git_object: bdabd105d648a12c1b1fb35123e74b5e3b0f1d7e - docs/models/persistimporteddeploymentrequestextendawresource.md: - id: 73456214f8fe - last_write_checksum: sha1:a1130927fa29f39c79dcf7d8d6a2fc8f1ef22f0d - pristine_git_object: c40021c9e6d445f45653035af2922d37c892864f - docs/models/persistimporteddeploymentrequestextendawstack.md: - id: 0f309771957b - last_write_checksum: sha1:9842b302fd5a0dbe976aeba166304c95c3b26b7b - pristine_git_object: 785a29ec037072adc33c2a02a3768fe220f7a419 - docs/models/persistimporteddeploymentrequestextendazure.md: - id: d6963429361d - last_write_checksum: sha1:98155f8750fb6979af405abdb464fd2d498b1670 - pristine_git_object: b5242d32ae2d20d2652622561c409c1a48042d01 - docs/models/persistimporteddeploymentrequestextendazurebinding.md: - id: b8c321d67dde - last_write_checksum: sha1:42fcbac97269db25b0d7372414ed411807237f4d - pristine_git_object: 72a5c791547462596a3256f2b2cfb676f71cbcda - docs/models/persistimporteddeploymentrequestextendazuregrant.md: - id: ca979db0aadf - last_write_checksum: sha1:506c1803337bf436a587ed78205b5d0c5ca236c5 - pristine_git_object: a7168ff4b3391195c6fd58f0fafa5b5fbc24fe72 - docs/models/persistimporteddeploymentrequestextendazureresource.md: - id: 41b8969ee5d9 - last_write_checksum: sha1:a0493e83f2d9097a550282ebd8920b1ac9ff237c - pristine_git_object: f5e15a8bf143f905dfb3d260787776e4711d709a - docs/models/persistimporteddeploymentrequestextendazurestack.md: - id: 9ee48160d542 - last_write_checksum: sha1:3deef2dea5aa5a4da5e54dc6c2272c76a5b12b5f - pristine_git_object: 01f13db62961d36e795991c975d8f8d1a8ec04a2 - docs/models/persistimporteddeploymentrequestextendconditionresource.md: - id: f8e2812167d0 - last_write_checksum: sha1:a76d07c177e0e5eef591b6f388bf4b46a753adbf - pristine_git_object: e032fa38868884e2758abe2633cb67fbaac7db70 - docs/models/persistimporteddeploymentrequestextendconditionstack.md: - id: f29a35212807 - last_write_checksum: sha1:d0f4459ddd0db2ffe51f738df5ebfc8b7a2f4126 - pristine_git_object: 4b46d24b90d221afef3717860064b718223b7960 - docs/models/persistimporteddeploymentrequestextendeffect.md: - id: c156fa433cbd - last_write_checksum: sha1:9165d79f7f7c3f7c7d534e4203eb66eb8c167755 - pristine_git_object: acdf5248fd689b84e9da83b18df5c1c40b89ab4f - docs/models/persistimporteddeploymentrequestextendgcp.md: - id: 8113716e13fc - last_write_checksum: sha1:c9d50c1c0c10a9690c70561f8d81b8bf479ff94a - pristine_git_object: b82b3e8e3037eb2a999800b1c36bbe91d2c4020a - docs/models/persistimporteddeploymentrequestextendgcpbinding.md: - id: 2e7b1040c4e6 - last_write_checksum: sha1:b33ba23b8873a894a97666d93586e6a39e140f54 - pristine_git_object: dcc67721863548f74bc8f6267491298e1ee3cc88 - docs/models/persistimporteddeploymentrequestextendgcpgrant.md: - id: 49972082d0e8 - last_write_checksum: sha1:18a5da61755d48d3a55c361700da753c529c12ea - pristine_git_object: 867fa606125c7ec3bd5cb822944b2f14da8b4b6a - docs/models/persistimporteddeploymentrequestextendgcpresource.md: - id: dba500cdc83a - last_write_checksum: sha1:2d3e4ea956a0e138d784c55bf5795ccc45fddb7e - pristine_git_object: 641941fe3af33920227be423c5225822654140b4 - docs/models/persistimporteddeploymentrequestextendgcpstack.md: - id: f7624ebc5346 - last_write_checksum: sha1:4216dd8d973071db7adb736b38278f27f4d69c32 - pristine_git_object: 2ba40cf333407c4479bb90f70842df83ba3c94c9 - docs/models/persistimporteddeploymentrequestextendplatforms.md: - id: 9f887def2431 - last_write_checksum: sha1:82f456b1d3d1ed9a11a59f844ae5a8b52a441cea - pristine_git_object: 62ac2d6521b9133ba47f95ad42ab0e84c6a8b5cb - docs/models/persistimporteddeploymentrequestextendresourceconditionunion.md: - id: aa0745ec313c - last_write_checksum: sha1:a0920cfd32b36c9ea66cdd02a5b15ab7787046d3 - pristine_git_object: ca29722205abc8282eced9629251517ed476129e - docs/models/persistimporteddeploymentrequestextendstackconditionunion.md: - id: 0b2045123583 - last_write_checksum: sha1:ea317371568b3c4459276f3d6872a079ff170c4b - pristine_git_object: 6afac15ea3605dac60f4f87f67912098d0d0552a - docs/models/persistimporteddeploymentrequestextendunion.md: - id: 93226f0852c0 - last_write_checksum: sha1:577724dced49176970a52e0e15cedd1f2a03239b - pristine_git_object: e958dade5a9717cc94e2d6a40c719f75e6e5ac40 docs/models/persistimporteddeploymentrequestexternalbindings.md: id: 2b49e9ddfb71 last_write_checksum: sha1:dba457e382e9f5f9c78305556feb75944b6896b3 pristine_git_object: 0feba2548224165d15388ad0b2c5dcf2a9143400 + docs/models/persistimporteddeploymentrequestfailuredomains1.md: + id: 71f77cbe7790 + last_write_checksum: sha1:b3a30a74ecac6c3e3323c8b3076a30d7afba795d + pristine_git_object: 67b37c2ccb67ccee083eba80ca838b98c31e9e02 + docs/models/persistimporteddeploymentrequestfailuredomains2.md: + id: 783574512cdd + last_write_checksum: sha1:c274f5283c99000ee507c6ae7086e720e6904893 + pristine_git_object: 297768c222be2a54c5084cde017be6c889bab602 + docs/models/persistimporteddeploymentrequestfailuredomainsunion1.md: + id: 929714c5f10b + last_write_checksum: sha1:6f1e69235bf348450d5b82d2abac83d3f88c3fea + pristine_git_object: 919c56f5f353bef4db65b5ab581ebd9336c63110 + docs/models/persistimporteddeploymentrequestfailuredomainsunion2.md: + id: 2459298b7caf + last_write_checksum: sha1:a83dd3bdeba22b523705b6908e916053a1809c72 + pristine_git_object: b6c20a24cee57ed37ced141e865964c82bde7baa docs/models/persistimporteddeploymentrequestgcpstacksettings.md: id: 34a186561707 last_write_checksum: sha1:21647325fed401d162086e681ff78ba99d6b274e @@ -15538,14 +17270,6 @@ trackedFiles: id: c2c0b32243ab last_write_checksum: sha1:d8da47a15f9fa9d1be6fb7a9920e94f8eb839db2 pristine_git_object: fd9de276977a10f05f5f675269b5ca5884ef196d - docs/models/persistimporteddeploymentrequestinput.md: - id: 7fcc326e5f23 - last_write_checksum: sha1:cb5545ea04386d5de33f43b8372327d5eb17a88a - pristine_git_object: 8c9d385289defe0aaccb71d333d20cb31fb5ec77 - docs/models/persistimporteddeploymentrequestkind.md: - id: 7282fe9e004f - last_write_checksum: sha1:933efc140e770af5352bd9fbe94a8982e9356355 - pristine_git_object: d4e8d9aef8d81d706fd99dbf748073bf594311c1 docs/models/persistimporteddeploymentrequestkubernetes.md: id: 496fe1441170 last_write_checksum: sha1:2a3951c0b426af06e473266d38db28309edb2f71 @@ -15554,18 +17278,6 @@ trackedFiles: id: 92b2149f48f2 last_write_checksum: sha1:a00c510a2e1ca2a44d016d8de9326eac57d7471b pristine_git_object: 8cf9d02a82a5a06985288eb6212490505540b7c3 - docs/models/persistimporteddeploymentrequestlifecycle.md: - id: c181450e112c - last_write_checksum: sha1:007ea9aec23c0178820da6580a1954e1f5028001 - pristine_git_object: 69b05588132164af2936aefb41b214b5dbddb137 - docs/models/persistimporteddeploymentrequestmanagement1.md: - id: cd94c8469ca3 - last_write_checksum: sha1:697ea1501659c71bf845f785562080a056e1b712 - pristine_git_object: a2c2316734d08a5169a39de6a9981bef6c7be5eb - docs/models/persistimporteddeploymentrequestmanagement2.md: - id: 8815bfa283e9 - last_write_checksum: sha1:3124ec90273d8094bc38771adb93c51daf2d8cae - pristine_git_object: fe1ef2b9d580a928695f1e8d008c386c3d511fda docs/models/persistimporteddeploymentrequestmanagementconfigaws.md: id: 2f6af38b391b last_write_checksum: sha1:a0ea6f83e56467f87c3a5bc5d9e5046e2e4fd9c1 @@ -15586,14 +17298,6 @@ trackedFiles: id: f6bcbd686dec last_write_checksum: sha1:11e2d0bdf52553bcda7b05ca1a212b61aee16e33 pristine_git_object: f52ecc0cf72c10c97abba43965dbaf41aa493b41 - docs/models/persistimporteddeploymentrequestmanagementenum.md: - id: f4c6e32fc7b0 - last_write_checksum: sha1:c1129020fa75574ddf0a12820fd070e016ab84b1 - pristine_git_object: 790734b2a47338a92f1d882de094e4b8b83f9b66 - docs/models/persistimporteddeploymentrequestmanagementunion.md: - id: 3514fea233be - last_write_checksum: sha1:b2461de1a4af8d934693b7f3992f9ca867699cee - pristine_git_object: a3e942d6d5d7d4b17e84299ebca1e4c9c98d9be1 docs/models/persistimporteddeploymentrequestmodecustom.md: id: ceec0ac9602d last_write_checksum: sha1:d7e4931fbb73fb57a91ef160b63f78997bde4068 @@ -15638,106 +17342,406 @@ trackedFiles: id: bfb991d00fe8 last_write_checksum: sha1:059a464a62db796d951c30dce7f1d7be674f8fcd pristine_git_object: 95d10f66981fc7fc451a48f065e5e4d4352db919 - docs/models/persistimporteddeploymentrequestoverride.md: - id: 801619e9a993 - last_write_checksum: sha1:699338edba3a6ba474826e80f81b0f6d4913d163 - pristine_git_object: bd8c9ae0c755b5ff2a33409b67bb329e4833abd8 - docs/models/persistimporteddeploymentrequestoverrideaw.md: - id: 7bf302b56512 - last_write_checksum: sha1:2cfc344d009e84cbb8a67bcf9983f42a97cf9f80 - pristine_git_object: 8933a5830e1d8b177929459ecda12be0d93842a6 - docs/models/persistimporteddeploymentrequestoverrideawbinding.md: - id: 403153c57b75 - last_write_checksum: sha1:30eb0adfbfb8fef53f300f0054f44ef720bb406e - pristine_git_object: 6f784ad5cedd56bd0ce4f4b1bffc75759962bec2 - docs/models/persistimporteddeploymentrequestoverrideawgrant.md: - id: 390b2d1211f9 - last_write_checksum: sha1:2e349eb962adffd97b23e45dee2bd93f09c60205 - pristine_git_object: 190763a27f94aabb1500d91cb6210998cd3f993d - docs/models/persistimporteddeploymentrequestoverrideawresource.md: - id: f5fda334b25c - last_write_checksum: sha1:ce831215f4cd2bf3940da1799117fb39bacf742a - pristine_git_object: 7125413eb4da984eb851d26bdbcde292f11701f7 - docs/models/persistimporteddeploymentrequestoverrideawstack.md: - id: ac132112a127 - last_write_checksum: sha1:4aa656411f9ab99d1c2633c07076fbf0e3e79ad2 - pristine_git_object: 5be49766d695ae9ffb013a552216c6114b076749 - docs/models/persistimporteddeploymentrequestoverrideazure.md: - id: 609e299f7ec9 - last_write_checksum: sha1:8c45c814fac9788a370de9bcc369a95c2ab0c2eb - pristine_git_object: db0b731e405ca52d7efecc453560906792fa8456 - docs/models/persistimporteddeploymentrequestoverrideazurebinding.md: - id: 879a7a5a229f - last_write_checksum: sha1:ae7448b7b4c71cfba1734a295cc8d9f4193f3bdd - pristine_git_object: 6e4b52f753bf862ee3ca98de15563aec8a0bdf61 - docs/models/persistimporteddeploymentrequestoverrideazuregrant.md: - id: 80c55fdce0ac - last_write_checksum: sha1:6489311564a2ad2e8c925f473f400b6606cb8e3f - pristine_git_object: 0b99662dde9ea2edf4cd152c2b75bc8d9877f4fd - docs/models/persistimporteddeploymentrequestoverrideazureresource.md: - id: bea58a5b9997 - last_write_checksum: sha1:519bbc1d684b5bd5c1a9e4b53597b89daf553857 - pristine_git_object: 80d38612dad9f1bd1f26b15e038922e6d9f0a99d - docs/models/persistimporteddeploymentrequestoverrideazurestack.md: - id: 69f0e9e83ac9 - last_write_checksum: sha1:b884c988e8e2e27a3f84752fe7e75f110eb79252 - pristine_git_object: e09031a6016679528c18e91483ba8ad371b963af - docs/models/persistimporteddeploymentrequestoverrideconditionresource.md: - id: 689041e87a5e - last_write_checksum: sha1:962f2742586c341b7d6606deca6574c319ecfabb - pristine_git_object: 691df761619483d918c080b99a1bbea881a55f26 - docs/models/persistimporteddeploymentrequestoverrideconditionstack.md: - id: 9cdb998e6d4e - last_write_checksum: sha1:cd39d709412896d3e6f3b2839d64a8138aa087be - pristine_git_object: 5faf319e0474343ca110e47fc29e1745f17d4080 - docs/models/persistimporteddeploymentrequestoverrideeffect.md: - id: b62c595cf147 - last_write_checksum: sha1:47474d7f6a4b85468a2ae6b45e05800df008a667 - pristine_git_object: 529c586f0ff67d7614e7206afeb53df3a6e2b2b6 - docs/models/persistimporteddeploymentrequestoverridegcp.md: - id: 43c302b576c7 - last_write_checksum: sha1:f7b4c8975a0a4181ba18d8d395fbfe11a814586e - pristine_git_object: af12cc00c1bab960c2c686dd32a1b87b8e7f4a9f - docs/models/persistimporteddeploymentrequestoverridegcpbinding.md: - id: a6064a8de451 - last_write_checksum: sha1:88818544551d40334e13fc7ec9a05d2e5277f862 - pristine_git_object: a2522180095bf943eef733ee682158581813764a - docs/models/persistimporteddeploymentrequestoverridegcpgrant.md: - id: d6535cef5dfa - last_write_checksum: sha1:fcfd62eadab70148e5c8ea1a61e34ea7d0115750 - pristine_git_object: ab85d1295ed9ef53ab84e92a7cbc90533f586d68 - docs/models/persistimporteddeploymentrequestoverridegcpresource.md: - id: bdc0a88f7b38 - last_write_checksum: sha1:b3d74fc0a0f9d8cdcd99f952f310f3e75ab4cc82 - pristine_git_object: 4e7a03ae7737bb6c497e5b5c1049200da7e1ba29 - docs/models/persistimporteddeploymentrequestoverridegcpstack.md: - id: 2b0ba8d1e020 - last_write_checksum: sha1:1f45ec36e8fadbc0e801494a36fd3704ab0de5df - pristine_git_object: 36c31a9d38bd0ca8ea0026235dd6448ec788d60e - docs/models/persistimporteddeploymentrequestoverrideplatforms.md: - id: 2d4e11b2e54a - last_write_checksum: sha1:04671f3788a2d8e81e2143193742484c35de3c01 - pristine_git_object: ec39dabd21b55e7f8bc63679a8e774d32f54efae - docs/models/persistimporteddeploymentrequestoverrideresourceconditionunion.md: - id: 7ddec4dd2de1 - last_write_checksum: sha1:fe8c8818a39d850c55fe2b8e73aa15c7d746cb35 - pristine_git_object: d0d7be87ffb195074319442e28cdbc089d5b2a9d - docs/models/persistimporteddeploymentrequestoverridestackconditionunion.md: - id: 631602ee62b5 - last_write_checksum: sha1:15800f353f26f3a25e28c0b32819db3bf8884a6a - pristine_git_object: 79c50048dea69a5faae385be51e403b31ca60c12 - docs/models/persistimporteddeploymentrequestoverrideunion.md: - id: 32fcdb85e31d - last_write_checksum: sha1:f5b4a2b90307257a38045841f0a42abf9d313851 - pristine_git_object: 39140970f4f8410aac12dcac59a9b5fe5ccb6d1a docs/models/persistimporteddeploymentrequestownership.md: id: fb60a9d2a7b0 last_write_checksum: sha1:c41fdda61ec64b843ef93fada0db60a99c897f6f pristine_git_object: c7b6c6c4fbc054b5df4891bdb8c8a1bb1bd3a480 - docs/models/persistimporteddeploymentrequestpermissions.md: - id: c28928c25df3 - last_write_checksum: sha1:f69e40d623a22d4d46f492ccf237d801957a1c84 - pristine_git_object: 070756002cad6dcb2aab2fae992375a73eac81ec + docs/models/persistimporteddeploymentrequestpendingpreparedstack.md: + id: 1aafcb601f98 + last_write_checksum: sha1:357e380fde81eb0a75c7a73a498a85b602f92440 + pristine_git_object: cad128d4678a357d778c1979192479ef787b3c8d + docs/models/persistimporteddeploymentrequestpendingpreparedstackconfig.md: + id: 427dffd272e4 + last_write_checksum: sha1:55d6f23268eff372f15da4997d6f0991a92201f0 + pristine_git_object: f3664dfe6a9d8621a4ab5a8ed1a94528930ffd16 + docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultboolean.md: + id: d6872e01c9f7 + last_write_checksum: sha1:fdec68b0e26cb05636b3ff82a3dab0ae6400498e + pristine_git_object: 731bce0b7be79d1dd1b7d330d6f2e8dc8587f9e3 + docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultnumber.md: + id: 5ae20e89d722 + last_write_checksum: sha1:6cc529ef181484d7afa95427ffca54474f8f25a5 + pristine_git_object: 8083ad70c407ecce135fe9e6913e794b8f0b138a + docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstring.md: + id: 00a6dabecc22 + last_write_checksum: sha1:b13f1de51453fda9c0f272b740c660de7e9dc59e + pristine_git_object: b20bbf28d7d90e83f36e7668019231ac049d3ea7 + docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstringlist.md: + id: 421c03d3d0fe + last_write_checksum: sha1:c606bbca7f2d05c0926654713df21ddbaacd0792 + pristine_git_object: 5d4b7b0a9098421b93ea65df20dcc48abf46857a + docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultunion.md: + id: 9865a11ace7b + last_write_checksum: sha1:62138838ce47e5e9b4a89257c87560c448608cbb + pristine_git_object: fa9b283e07de1c475374f115e1f7f73efad4bb0e + docs/models/persistimporteddeploymentrequestpendingpreparedstackdependency.md: + id: 989cfc5aa3ac + last_write_checksum: sha1:1fc70c6c6012361069b85f7ea2a197782744f5f3 + pristine_git_object: 44b34409247d745d985ef630096b119528a0c9db + docs/models/persistimporteddeploymentrequestpendingpreparedstackenv.md: + id: 9e5e011c932a + last_write_checksum: sha1:cb06b8a9aa6d6bdeaee656ab9cd888f7ff2ff036 + pristine_git_object: 22a481dad965d515a50975093a5c5cd31732de9e + docs/models/persistimporteddeploymentrequestpendingpreparedstackextend.md: + id: 8429e6f665bf + last_write_checksum: sha1:40b8a8f41558662d58e626f0c601cca44f2a16e8 + pristine_git_object: ad60f7348b3afe7c26cc71ff20988cd74738ccb9 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendaw.md: + id: 6b44b1daf6a5 + last_write_checksum: sha1:7d727438ccc51470231b1fa85a936569a5ca82d0 + pristine_git_object: 2a2e1ee32673a19a3eee4048a5f93a222a969c06 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawbinding.md: + id: 3243cf6f03ed + last_write_checksum: sha1:b8349bd2bfd6d9fbb35b4529dc795fd11eab9ba9 + pristine_git_object: c5c7546cf21e1c1d79658435c12dab5d70303193 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawgrant.md: + id: 9957e13e0276 + last_write_checksum: sha1:9e93d565539384f823d4ea10bcbc6dcb32db4aeb + pristine_git_object: 586d11267b5973c37ea928d5213582d4b249835f + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawresource.md: + id: d411472be79f + last_write_checksum: sha1:1e62caefcbd6cbb798bdf91f8d34f154af3e9d8b + pristine_git_object: caacf7946a4588b5e20fac019ee9768b86700557 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawstack.md: + id: 66dece7005f8 + last_write_checksum: sha1:0dc8ddd324aad8c261fc7a76080950dee10c73a2 + pristine_git_object: 609ef9cc5c0ab4fb3deaa59c7fedc885add3e8d6 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazure.md: + id: c77d780fa0f0 + last_write_checksum: sha1:8ce7e691eed14358bd8e4c70cbe41a2c2a95ac23 + pristine_git_object: cc6e794ed84c538c5fc4c49c3c39c2ffd5646b63 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurebinding.md: + id: 839e4fb0bd34 + last_write_checksum: sha1:0e106e4acf3b03f2a89409e25e30675306fc04b9 + pristine_git_object: 0dd3c90efb3b06c131947d675ab0623725854151 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazuregrant.md: + id: 0dd2f01d8652 + last_write_checksum: sha1:9d30b24bb6fc4e189e5facd1f661f57e738394a3 + pristine_git_object: 3de59e1f7c01cb59f5f8dc9552b7450e63cdc853 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazureresource.md: + id: e927c78a50fa + last_write_checksum: sha1:3de9e8787b30396e91b340581f09a5ba0c6ef908 + pristine_git_object: b276f82d68975948af76d59f3a3df355e09b26f4 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurestack.md: + id: 826da6110dd7 + last_write_checksum: sha1:1dde28d9a0859905ceaeb43eed221e18d5e63862 + pristine_git_object: b7c96fd77b71d01da78c78942ed00de407573b8b + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionresource.md: + id: af745a0ba707 + last_write_checksum: sha1:59f153b6f8fa527c78e6b0b84aa4247911179b5b + pristine_git_object: 944a4f3499eb3a736897490839ddca1d20d3d93a + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionstack.md: + id: abfb950129de + last_write_checksum: sha1:75f937f135d26ea31a3a87308cf815d38e133526 + pristine_git_object: 1ceced10b089ff2bacc7bffe426e8def507d8c7b + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendeffect.md: + id: 6895683eef5a + last_write_checksum: sha1:046abed463c9f7995240fd12731b466ebdcfef2e + pristine_git_object: baca2ced6ea8d7afa78ed368b927118a2b671042 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcp.md: + id: fe5d6917aa23 + last_write_checksum: sha1:30874abfc49a8c3fbe8e57e5677254c3e6917917 + pristine_git_object: 7bb1995339cb36ea331ef9b707149d1f5e9f8c7f + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpbinding.md: + id: 801fe9b7e053 + last_write_checksum: sha1:e7d5c009a7d55db45222ccd3d0df47b11c0920ca + pristine_git_object: ae958b564f33a2131d31fd29d47348b9763fd8a6 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpgrant.md: + id: 5df20521b7c1 + last_write_checksum: sha1:3b27015e49052166f5edde5c6ab15f28badad1cd + pristine_git_object: aa7f8ee50d0549387b3326d7e34276f2f5a145ef + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpresource.md: + id: bc37455417ce + last_write_checksum: sha1:d532ed7cbfd0a15325eecc6ea7ea26929d8cbd52 + pristine_git_object: 2108ad85d8a01fd3328e26a4c9234c5bcba3c5be + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpstack.md: + id: 92f377f02218 + last_write_checksum: sha1:88e1ad1df9450757ff1fd847be7748c1b68884fe + pristine_git_object: 4165a2fa624485522a13bb1ac9d14a4cf9900cab + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendplatforms.md: + id: 345b86e2af97 + last_write_checksum: sha1:a1796f2ea2895dbd9ce0850996303fe4ef9671a7 + pristine_git_object: c42be50f66154394c30778d51d0c34a47c71741e + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendresourceconditionunion.md: + id: 67ae6e2cd397 + last_write_checksum: sha1:1464e65b84cd1d67ce0792ccb29e12fd80702fa3 + pristine_git_object: 592623dd36ee3349508469694a94cc59f7fc7e52 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendstackconditionunion.md: + id: 7708971d9107 + last_write_checksum: sha1:06a2f9570768410bea4c55880d316dc12177bcc1 + pristine_git_object: 498448ee2dd39a0a723e814fdd86455796a57708 + docs/models/persistimporteddeploymentrequestpendingpreparedstackextendunion.md: + id: 5e9ea8e87713 + last_write_checksum: sha1:bdf6efa5b8d721674a423bff2c4059357aaf2ef5 + pristine_git_object: 75c2dc1ab13943842337db6b96524e81e07e3b73 + docs/models/persistimporteddeploymentrequestpendingpreparedstackinput.md: + id: 40fadc4c9350 + last_write_checksum: sha1:619aedc7caf9b48e4578222ef982bb02878cd003 + pristine_git_object: 2d3fcd2dc5f75e901b10c43a9ab46323a7ad3159 + docs/models/persistimporteddeploymentrequestpendingpreparedstackkind.md: + id: 7823ff972566 + last_write_checksum: sha1:0bed6f0ddb95f96340de28ab8fa2e11d635cff71 + pristine_git_object: d3408c909aed4dfa3f9e742ccbec82b9fedd9939 + docs/models/persistimporteddeploymentrequestpendingpreparedstacklifecycle.md: + id: 05653d685951 + last_write_checksum: sha1:a7dbef874824bb6df34e719be5c26c08555efaae + pristine_git_object: 7d237a0fd7996c4b7555c1c33f6cd56547acd3cf + docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement1.md: + id: b5ff7b015ecc + last_write_checksum: sha1:7a61cdfe432b5c35fb76ec7692b3d0454aadae99 + pristine_git_object: 334d4ef1a05f74f91b85a6aa3c345b391062fbc5 + docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement2.md: + id: a121010628bd + last_write_checksum: sha1:54046a40fa807af0ddbb0af44f12a1964885fd3c + pristine_git_object: a0d0bdb7fa70b6c2ee979d0b18b3fa0c9909d742 + docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementenum.md: + id: "448311581429" + last_write_checksum: sha1:d4ba052ef7518137918c0b34a9e988e9f8f725c6 + pristine_git_object: c8e184b23c2389a3185dc4938c383811bbf2fe39 + docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementunion.md: + id: 882ea0351b97 + last_write_checksum: sha1:21ce0863fa3ee61a5c3f6ffcde69ecc76b5800a1 + pristine_git_object: 89c876e0ceb8b90846fc4d3f889e35ac27f6e5a8 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverride.md: + id: 96d45d6236ba + last_write_checksum: sha1:35e1a38ef4d6f2f841c0a914204810e4cbeee372 + pristine_git_object: 1ef760e0667b9f347230d4ec3626607a0a98a07a + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideaw.md: + id: 953a24d5ace9 + last_write_checksum: sha1:70d42369908a0b2a43dc759e96cd52a02498f3b4 + pristine_git_object: 37385f0ca0925d110ccb12218b60d097e00ff75b + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawbinding.md: + id: ed908a0221ec + last_write_checksum: sha1:4218ee2fd511891cd7d57c45f7aa0346608eb99b + pristine_git_object: cdbebac1cb4c9a6509d59e7c3efb189f4aee24b2 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawgrant.md: + id: eeb946172939 + last_write_checksum: sha1:71b2f1ec9654d914b6f198d2b48cdfd3430f9960 + pristine_git_object: 98f15af14e1774ad778174e4218a8cd0f044521e + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawresource.md: + id: 1b8c233675ad + last_write_checksum: sha1:0d57609a2a87e8632f03b27e7a368748b6100149 + pristine_git_object: f0c6583aca0bba0fbaed97842022b9fe05093520 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawstack.md: + id: 193f8a6518f7 + last_write_checksum: sha1:8c24aaba7fa4bd8bc03539c22166b6ecc8994875 + pristine_git_object: e0bf2eaf9f93f10627942d027d312f51852ec469 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazure.md: + id: a8ccda0d7c3f + last_write_checksum: sha1:ea2154de1cf1706764918c9935b33acb9dfd6449 + pristine_git_object: 0778f91d0f072cfc877db06194baa94dd2e7cc07 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurebinding.md: + id: c5361cc1a7df + last_write_checksum: sha1:244c6b84682da919f8a4524639b866a29f53e556 + pristine_git_object: 13dbe361e9f493fe1daa80c627729f3c44982818 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazuregrant.md: + id: 6abc50484c14 + last_write_checksum: sha1:14a6b0217ad0e8e2c3389ca66337018da6e06992 + pristine_git_object: feb45ca0d3f14656b76831342284a89fc5c9aa5a + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazureresource.md: + id: 67a15cd197cc + last_write_checksum: sha1:d51adff6b38079e69bbeac2820f9c4c70f05cb56 + pristine_git_object: acb0ef5703bcb0873be260bf97adb9362a7b7aa0 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurestack.md: + id: 7a5a180059e3 + last_write_checksum: sha1:54ad9643d071649704a80f1d37ecd1b2bc2ee8bf + pristine_git_object: 8f458f7331e6a762cfe9717f7ff88f63717081df + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionresource.md: + id: 818b9b414f83 + last_write_checksum: sha1:0c93688770b7665f7a302b4229de0a48d5c3b25f + pristine_git_object: 53660ffe45db08c2353c21302f29753784de452e + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionstack.md: + id: 8b5769fb2ce0 + last_write_checksum: sha1:0e3daedd6620672659a8de9478322f0676aee3fc + pristine_git_object: 27c16109c3c83fb25227f89006c6d06828ea82e8 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideeffect.md: + id: 181825cb52e9 + last_write_checksum: sha1:1cc510828917bf6fd810d779239528e9b39d5ec0 + pristine_git_object: 305f2c99ff34033611eb900e91d0e2d7c7552eff + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcp.md: + id: b571bdd409b7 + last_write_checksum: sha1:1d7a19793bd8e1db0e5919b930a9ed3b3ab2c361 + pristine_git_object: 21a2c899cc4be9c0b4f09b44144d3f5307b4e2be + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpbinding.md: + id: 1b8bde3d9726 + last_write_checksum: sha1:cdadf09dd2bef54d967ed258e534df461006fac5 + pristine_git_object: feea64311ea9037617638baffeb707b847248e49 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpgrant.md: + id: c4af23c335ad + last_write_checksum: sha1:c1259ed32f7cacfee720980efe789083969103dd + pristine_git_object: 810a7806af4b853aaaa0d21446a4f01c23bee1d7 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpresource.md: + id: 3e0f22430fae + last_write_checksum: sha1:cae706592e29c61317345c18ad5598b4aa2d2209 + pristine_git_object: 7fe11e5ef13f8bd99ba90c62ff47381c680610b5 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpstack.md: + id: fb861c9206c1 + last_write_checksum: sha1:5eb874c548a9e85018f5457a6384e0c38346faa2 + pristine_git_object: e9ea21d6ea1a3de8b87a80fb5b72309378c2de82 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideplatforms.md: + id: efc57f45f4eb + last_write_checksum: sha1:1922a2d1b67ecfc09ece1a02b155bc0bd79f240a + pristine_git_object: 6c52fa9eb5fdc9b889e8a27616fb874085561171 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideresourceconditionunion.md: + id: cfa17580c25b + last_write_checksum: sha1:4d551e308979260e86fcf4bc41f466d3f0613e45 + pristine_git_object: af49562f61c062d35d0bea90663fd3e5b1f4a418 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridestackconditionunion.md: + id: ec374c7190f5 + last_write_checksum: sha1:9c104a96fca7aee42aa32e29b37f8a1362b3adff + pristine_git_object: 1f908326a4643c87bdcc5e38978c678e9f213593 + docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideunion.md: + id: b93cebc95f4d + last_write_checksum: sha1:8779fc7a080c2d200ae0c738b06734b2330d1cee + pristine_git_object: 0af78c620295571bbcf6d96b9c26506604a2df7c + docs/models/persistimporteddeploymentrequestpendingpreparedstackpermissions.md: + id: edadc6d41f75 + last_write_checksum: sha1:8fa7330812a10a5dadfe89da797c8f5c60c65c23 + pristine_git_object: 3a383141de7ce11c8bbf79f5be83b9e84b96faeb + docs/models/persistimporteddeploymentrequestpendingpreparedstackplatform.md: + id: a63aa0d3eca5 + last_write_checksum: sha1:623df1463bcc332e75e23e28ab9c82c498ffe684 + pristine_git_object: 45aa904e310f7c2c832c1786b7c0d1f1e465db3b + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofile.md: + id: da9738bc8850 + last_write_checksum: sha1:d5a4419fcd992e101fc0f88a94612ba5966eb768 + pristine_git_object: ba814890b2e5bb263ca96c63b32c2eb3c3cd64e8 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileaw.md: + id: ec5553a66e41 + last_write_checksum: sha1:23155d937e4836529c0bb29172faf9ea0d56215a + pristine_git_object: 558b226d45acbd46a16ecdaf91793187708e6ac8 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawbinding.md: + id: f87b95b27425 + last_write_checksum: sha1:659a0282bb908ed0e1118fa5fccd8f4539c1d056 + pristine_git_object: 13344673956de9d10c7273574c600fec5af91042 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawgrant.md: + id: 78a54bdaf09b + last_write_checksum: sha1:89eba79faeed7cbf5815f5822919658230f17ede + pristine_git_object: 5673802b73808e5853ce1598c6ff317b2912deee + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawresource.md: + id: 23a83505cb35 + last_write_checksum: sha1:04283ac2c60243af632692cb0363cec49283a200 + pristine_git_object: 8a4bdf7ba80526687f0e383f21445e35e3e69967 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawstack.md: + id: d84435f1f210 + last_write_checksum: sha1:efc32ad0bfa7471851d1c938b6603fd5ec0cd926 + pristine_git_object: 58fcf85b9c7fc044193a06aa6c86d33de9bf867a + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazure.md: + id: a8b0846c09b6 + last_write_checksum: sha1:9eb10fd24ba0542d1e0c1c8176d5d382dfcb859e + pristine_git_object: a72a307b5a3a0cbeaee339069288ef6baedc4b77 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurebinding.md: + id: bb05cb69c6fc + last_write_checksum: sha1:d3fc2f0603fff86ad0caf887fe2c730393ce03ff + pristine_git_object: dd62be85d342a14dc2de1488756b494377717260 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazuregrant.md: + id: c8156aafb2c5 + last_write_checksum: sha1:f2ed19806c8bd46973e2ad498febccfd6ed3db76 + pristine_git_object: df85bbb93fe5abe2d6d58e929d43ddf6c9987320 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazureresource.md: + id: ba1264800712 + last_write_checksum: sha1:e7668fb70e6e626fc037d3ef93a636f140dd18cf + pristine_git_object: 104e61973ee3ca71558826a17ac2f5d074265525 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurestack.md: + id: 1bc55e9b0b2c + last_write_checksum: sha1:18141663694eb829667dd3a7fed5eadc7b84321e + pristine_git_object: 451d60044a52f76294e2fbfbb58e1d9937ee8996 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionresource.md: + id: 5574e14920f9 + last_write_checksum: sha1:723227898cd8c27a1836ba0752b7471926a27fb0 + pristine_git_object: a39f5364bc43a035439ff82a686786460e0ec950 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionstack.md: + id: 53525f82bf47 + last_write_checksum: sha1:48e0ae0fc94094e19983c564c863d8e2898b9f2c + pristine_git_object: 15426bf924df8817116227b98ef4055425d7834d + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileeffect.md: + id: 20925b7abe3e + last_write_checksum: sha1:519c84911e0db8bd93b0c4295b2e98bdad04ffb3 + pristine_git_object: 0b0d9d4a85fdf6cb12a0f016b6a6db8549740357 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcp.md: + id: f70d66769ca1 + last_write_checksum: sha1:1d143618e8ea6568e60c0b88c04e76df086a4cec + pristine_git_object: 883acf68f175bfbc2999fd9167e2457970e6014e + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpbinding.md: + id: c30e72ce8812 + last_write_checksum: sha1:d78e542b03a9362451d0ecf332e88fd116df21f7 + pristine_git_object: d9bd8b03e75a4a31ed55b6a351cf9ed814991216 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpgrant.md: + id: 9297f0fe6477 + last_write_checksum: sha1:42af8821a2ea7788b96c9fc4c808d2709b7f764c + pristine_git_object: 32377cd15c0b25bf7f5a0491f7ea30a31bcff6ed + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpresource.md: + id: e5c49a54c072 + last_write_checksum: sha1:563e3bca91541dcbd4bbffbd3c6de93258cb6200 + pristine_git_object: 8789a90065ca2cff063072459ab2e9cb33a3bb2e + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpstack.md: + id: c2a8419b2964 + last_write_checksum: sha1:611349c801af9332895ae54b6c87dd95f1b8c297 + pristine_git_object: 219f225c9db6a6a8592e1173e008a139be20ece4 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileplatforms.md: + id: 21f0ac546953 + last_write_checksum: sha1:5881078b45daaae1565df199847c0cf5de68cbf2 + pristine_git_object: 770cb8968963ba592bfb9f5b835037b8fadfd0d3 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileresourceconditionunion.md: + id: 781a185f278c + last_write_checksum: sha1:7a8c66aec76a76310a91e780a4c91d217cec3838 + pristine_git_object: 5b6b31db0da3498ad5a4b212acd355831269bbf5 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilestackconditionunion.md: + id: 4a2b9f80591f + last_write_checksum: sha1:4777a06bbb751af5021ebbb381df10e15a53b2c6 + pristine_git_object: 0ff89c706157d8819bdc24094c0672fdff114f5a + docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileunion.md: + id: e7a42aec3aa1 + last_write_checksum: sha1:6eab999a6f51fc64c5496027c3e1952f6e3c7bdb + pristine_git_object: b2d06c0f6d67d2296ad99a090a5ae10de2ee7d09 + docs/models/persistimporteddeploymentrequestpendingpreparedstackprovidedby.md: + id: 8374140284ea + last_write_checksum: sha1:73eecb810d3f2e4ba86dc5411d6b040607f9948f + pristine_git_object: 13ba81f0c90cf68baaceb10c3b309889272c3403 + docs/models/persistimporteddeploymentrequestpendingpreparedstackresources.md: + id: 436717a58220 + last_write_checksum: sha1:b2cf749736fe1017a18fe7ff8dd8a08ca33e8b7c + pristine_git_object: 2015d4e813419d0730669ce28a672e0d800afc2a + docs/models/persistimporteddeploymentrequestpendingpreparedstacksupportedplatform.md: + id: b6593edcb588 + last_write_checksum: sha1:9ec83476683080124287c1fecb32286c3eb84b85 + pristine_git_object: 36cfc1927645e61a884d48a14b329649ec09af66 + docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeboolean.md: + id: 7890488baa62 + last_write_checksum: sha1:8192998b400882deafe9434c24dbbd031147f39c + pristine_git_object: 22514880f372080383531a8b3b8b65efb40ab738 + docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeenvenum.md: + id: 9c0196a9a4ae + last_write_checksum: sha1:a3e2127e72d70629808d5661a6d3c53b5b5b66ec + pristine_git_object: e3b484082bf98f7a9a908d5a93e808fe78e66837 + docs/models/persistimporteddeploymentrequestpendingpreparedstacktypenumber.md: + id: 438d140e1c3f + last_write_checksum: sha1:ea90ea256f327c78b54bb8c0ed94a4818add6951 + pristine_git_object: dbe34a7a57adb48108c9b7a816dc561e9b7b5808 + docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestring.md: + id: 4dd718d938b2 + last_write_checksum: sha1:b41ba21cb3acc4cd2ff4efab8f9e72380b0603f2 + pristine_git_object: b0c07da5508b6d6d6b282e4807dd83c63ea977e0 + docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestringlist.md: + id: 9940bf19e19c + last_write_checksum: sha1:a2acffedf6edd79fd7856f1d99cf99b8e47bed81 + pristine_git_object: 102e7b5f8749017f9f94e07334fef7e7a1709dbe + docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeunion.md: + id: ee2cba8d1745 + last_write_checksum: sha1:899b02efa75c505424471a46f676574234e9fde6 + pristine_git_object: 15f77519a9b8742befec5fbeaf2af4d210f4f388 + docs/models/persistimporteddeploymentrequestpendingpreparedstackunion.md: + id: d91b9a4ad2a5 + last_write_checksum: sha1:af74e6054ff366be676af844d3c14c3d05dff90d + pristine_git_object: 060305af2d2297c15581e1646d5702db9a5943c9 + docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidation.md: + id: 7a464c228842 + last_write_checksum: sha1:caf41bdedeb8047d8d40f893204891428976124f + pristine_git_object: ceced57c0875776fe6b48956e13e46445e672750 + docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidationunion.md: + id: a31bbe91ccb7 + last_write_checksum: sha1:04f39bb14a9515a65498ce275872cdb8defaed89 + pristine_git_object: bff15ec4f6760dd2dec21a42a00ce99759c00cc6 docs/models/persistimporteddeploymentrequestplatformenum.md: id: a70f044e63dd last_write_checksum: sha1:41a9716a2c1cbbdb732072589eb8a3480ece86fa @@ -15752,124 +17756,412 @@ trackedFiles: pristine_git_object: 9542eae0c6948b19385eb04a3366e3084f741609 docs/models/persistimporteddeploymentrequestpoolsautoscale.md: id: 8e3b6da030d5 - last_write_checksum: sha1:67fec27414e5bdc720bd381bd401a25007b17da4 - pristine_git_object: 661e9e98d8c993ba27067f0c5e6f9556b7977ec0 + last_write_checksum: sha1:5722fbb0c2b36103966fef2e98ced664ebdce32e + pristine_git_object: acacda68baf4c98ce23239e0b031517e220ac23c docs/models/persistimporteddeploymentrequestpoolsfixed.md: id: e6ca97c1cad7 - last_write_checksum: sha1:9f3ec1c66d30a8833ae7dada4634f16d98cb38f0 - pristine_git_object: 689af226dcc3eda21543e6034eb5ed284bbb187b + last_write_checksum: sha1:8588e1f65755af1c951b6817e6b73887b3072705 + pristine_git_object: 11c2806c265302cb27d5238ce132db5575dfa4dd docs/models/persistimporteddeploymentrequestpoolsunion.md: id: 1ea42666a9f4 last_write_checksum: sha1:1ef6b4bccf9a81e6473aaa9ad39eb5634d122b77 pristine_git_object: 4f7817ca8d016231da67c8dc200d3907ce6f399c docs/models/persistimporteddeploymentrequestpreparedstack.md: id: 5683f131a072 - last_write_checksum: sha1:6db0465062b652f3da3bb65e90ca30fc4e477b0c - pristine_git_object: c6800e43d3831bfc90a5a92e42012c7b182dc457 + last_write_checksum: sha1:9640b8af28e1b6fbe0c65cf59ff872d77adea27d + pristine_git_object: fc0a9d33d1049dcdb9f1ab509e2c5584b8f26d6d + docs/models/persistimporteddeploymentrequestpreparedstackconfig.md: + id: f4273d81aaa0 + last_write_checksum: sha1:2532bb484fdb4a1719906fccbc8767328d73c63a + pristine_git_object: 2a831534cff2c0271863abcd3962c05585a4fb57 + docs/models/persistimporteddeploymentrequestpreparedstackdefaultboolean.md: + id: ebed436a23a3 + last_write_checksum: sha1:23e3fbd76555648f601ddcb99e91509a90581a72 + pristine_git_object: b622c9b3aca42c1d3a68d87064cd4a11186f9d2c + docs/models/persistimporteddeploymentrequestpreparedstackdefaultnumber.md: + id: dde91d83d190 + last_write_checksum: sha1:4e91b52e2d9cd12639374d3a9d1fe96e432ff9b7 + pristine_git_object: c414da2517f4517b067fafcb511decae989ca5fe + docs/models/persistimporteddeploymentrequestpreparedstackdefaultstring.md: + id: 47c7ed237762 + last_write_checksum: sha1:2f13c2a349a285bc5cd4fc90918fe84fd3a3d61b + pristine_git_object: a9b57b052633648e387a19aad021da612c3585e8 + docs/models/persistimporteddeploymentrequestpreparedstackdefaultstringlist.md: + id: 4f64449793d4 + last_write_checksum: sha1:5c914b70ffadd250de02770e0f81a4cb034a7c56 + pristine_git_object: a1ba1a79ebcea44c1a52640d58e44593152b24d8 + docs/models/persistimporteddeploymentrequestpreparedstackdefaultunion.md: + id: 3511085f2581 + last_write_checksum: sha1:aae0b596c2b632fa667593168b7ca8a36f97ee6a + pristine_git_object: 4a9a706740ac85b7494b4cdb334c07f31f3b5dfe + docs/models/persistimporteddeploymentrequestpreparedstackdependency.md: + id: 05e87375826a + last_write_checksum: sha1:84b97d7db5f4d80e69f3d063362964ea45deac7a + pristine_git_object: d2b0dc02b62cb8afb23005447d466249c15167d2 + docs/models/persistimporteddeploymentrequestpreparedstackenv.md: + id: 1ba0f968dffe + last_write_checksum: sha1:c69d9aa87852b39f8d930e157d2fff940de4cce3 + pristine_git_object: f53889e776c07d7765a664eaf294771753e7c542 + docs/models/persistimporteddeploymentrequestpreparedstackextend.md: + id: 7c419ebca343 + last_write_checksum: sha1:daf3b4b4364f5058ce6ab209a6bfb40937d6ee50 + pristine_git_object: 68bfbf429bb77add1a82f628e0f7e2d10547f55c + docs/models/persistimporteddeploymentrequestpreparedstackextendaw.md: + id: 414402f79266 + last_write_checksum: sha1:dcc871c7b1075909552fd35cc67cb99afe44ae8e + pristine_git_object: c9e5fb1a50689787a4b21e39cae3c954bf5a7cf6 + docs/models/persistimporteddeploymentrequestpreparedstackextendawbinding.md: + id: e08ad104168d + last_write_checksum: sha1:beb6bfe06781a21d76db1b65dad1a93b7adaf614 + pristine_git_object: e720f76b0c12b9a751c08e78f5e2ddaa7ecf6b53 + docs/models/persistimporteddeploymentrequestpreparedstackextendawgrant.md: + id: 9531f8619251 + last_write_checksum: sha1:ae3208e37ca2e2344ca02ae3b73bffbcfb3d8c16 + pristine_git_object: defbe2d32dfc7de22514a04b3acf47dc549f3174 + docs/models/persistimporteddeploymentrequestpreparedstackextendawresource.md: + id: 195bca1e682e + last_write_checksum: sha1:0a91200180c18ffc3eb4115abccbca8990455f71 + pristine_git_object: cda2255f73ab9ccadb16427af81329ec2588fd34 + docs/models/persistimporteddeploymentrequestpreparedstackextendawstack.md: + id: d81c7b3b72db + last_write_checksum: sha1:7d31eb8c2c0860de91f8b7cc021a08d3e2c3ae71 + pristine_git_object: 71e1448e780dd3ec317e17dca4ebfe780350ccc8 + docs/models/persistimporteddeploymentrequestpreparedstackextendazure.md: + id: 9ec403664ddf + last_write_checksum: sha1:7b0210fcf6a7b52642ac361a802301ea715db40e + pristine_git_object: 7c7d99b931d844c6e4bc3d180700e222a7047b3f + docs/models/persistimporteddeploymentrequestpreparedstackextendazurebinding.md: + id: 792283642fa8 + last_write_checksum: sha1:e1444afc9a52f82aed9502598a7743eb962f1c58 + pristine_git_object: 297ebc7125b7b12ca416dba483cd13951cdffdac + docs/models/persistimporteddeploymentrequestpreparedstackextendazuregrant.md: + id: a5d783985e0f + last_write_checksum: sha1:ba79ece269c40922e2f5451fbc46f72b64b9e0d6 + pristine_git_object: 539ae10278244849740e098687faa0d50aa84bd0 + docs/models/persistimporteddeploymentrequestpreparedstackextendazureresource.md: + id: a6cfb559bb91 + last_write_checksum: sha1:4cda5f00be16362f7ef5168f5a884011cbb85c3f + pristine_git_object: e138d1f0ae716b51638a67eda72162f97521ecc7 + docs/models/persistimporteddeploymentrequestpreparedstackextendazurestack.md: + id: 35b27507430b + last_write_checksum: sha1:1f6b1e1c4b40e79b97bf316f30fb145c7a2df680 + pristine_git_object: 16b8eb53263da528ee4bbd1545a6e8c67f9ffe18 + docs/models/persistimporteddeploymentrequestpreparedstackextendconditionresource.md: + id: 6f41e974363a + last_write_checksum: sha1:3ac39a22678fb7c09b58f77e08dfd5950b7257fc + pristine_git_object: 4f6fa6b2e166b202a6820cf58c9158b22c7236ff + docs/models/persistimporteddeploymentrequestpreparedstackextendconditionstack.md: + id: 1a9f22883b4e + last_write_checksum: sha1:18758791613f4e76e04b6e8c86fcbb44a89fe45f + pristine_git_object: 4e5452e6f964184b7755038a3cbeba17b5f90177 + docs/models/persistimporteddeploymentrequestpreparedstackextendeffect.md: + id: 227e787e1904 + last_write_checksum: sha1:c2c7d6df8cc2ef479ee6ff1830c15932d8607d6c + pristine_git_object: 27e20a3397793a10d65add491f4c1cba5a6e3ec0 + docs/models/persistimporteddeploymentrequestpreparedstackextendgcp.md: + id: 25d8481df146 + last_write_checksum: sha1:61af59949d3a5475b67c4669b0b81b184054cbe2 + pristine_git_object: 4a363d606ac46b45b8b20e0a27ff1bcd256ac041 + docs/models/persistimporteddeploymentrequestpreparedstackextendgcpbinding.md: + id: 815c8512ffc0 + last_write_checksum: sha1:e52bcced9534ea40e7b8def20f0b8ad53fd26156 + pristine_git_object: 36f09882bf47288b52d120236522c6a1297ce570 + docs/models/persistimporteddeploymentrequestpreparedstackextendgcpgrant.md: + id: 751e80893463 + last_write_checksum: sha1:8f28d43fe0acd323b7468c75e6a4ac5a03b51cae + pristine_git_object: fa9ea6f1a45930b4892e8d7d650b5cf2c9ceba15 + docs/models/persistimporteddeploymentrequestpreparedstackextendgcpresource.md: + id: ea972161c948 + last_write_checksum: sha1:90543fe5b7fd13d4cff00d34527dd9fd0f6b2f6a + pristine_git_object: ebe6eeda2218fbcf6a66ff398464d24ca94356b4 + docs/models/persistimporteddeploymentrequestpreparedstackextendgcpstack.md: + id: 57d1a2f6f376 + last_write_checksum: sha1:d7d5351b7468c036a0147ca6b4b6046a85c9ed18 + pristine_git_object: 41ec3303a3a0cacd1b7514a5345525552fd3ac3e + docs/models/persistimporteddeploymentrequestpreparedstackextendplatforms.md: + id: fce442df76de + last_write_checksum: sha1:faa1330098d5dcd95c9389a08c8823539c203c90 + pristine_git_object: fba304c70393a463952761bf97d0ceabcf3af2e5 + docs/models/persistimporteddeploymentrequestpreparedstackextendresourceconditionunion.md: + id: 8728ddbf9e82 + last_write_checksum: sha1:44acfa06e01cd61ddbc72e032fd604043c8c8125 + pristine_git_object: a4c06a5f99a88c267de3b0b375bc68b0c2fbb16d + docs/models/persistimporteddeploymentrequestpreparedstackextendstackconditionunion.md: + id: 574f017ba8a6 + last_write_checksum: sha1:53dd16fa28904699dcc3eea19819117dd5eb5814 + pristine_git_object: 37da6a1026942fa346ca157bd29ca1344dab0018 + docs/models/persistimporteddeploymentrequestpreparedstackextendunion.md: + id: e2c8eba322e8 + last_write_checksum: sha1:43fcd25bf9be6c51ccd0dc9148932b82816557bf + pristine_git_object: 4a285581c9f444ccb49dd872e606cef6d9008e21 + docs/models/persistimporteddeploymentrequestpreparedstackinput.md: + id: 71c04818ab4c + last_write_checksum: sha1:bef27882772b2ad0cf6ae26505af6e84d1d278ca + pristine_git_object: 14be2d5b01f4fbc64c61398ba8469ea960a579f5 + docs/models/persistimporteddeploymentrequestpreparedstackkind.md: + id: 478199eac813 + last_write_checksum: sha1:0738822620ca2dc979b0e1acd093cb02b600c1e3 + pristine_git_object: cf3cfa7ba74bd9aff8dd10b882ef68d08baac02c + docs/models/persistimporteddeploymentrequestpreparedstacklifecycle.md: + id: 82a622da4c50 + last_write_checksum: sha1:94b7ea4f79e270247f629fcb148f031e4880d67a + pristine_git_object: baaf0fb795adc7e78620c278f44b316cde1aae0d + docs/models/persistimporteddeploymentrequestpreparedstackmanagement1.md: + id: 23b962a52748 + last_write_checksum: sha1:25078d174f6f1293784f76181e9d9abb08c5174f + pristine_git_object: 3dc2270120f8736a9dcdaa0e471d67798e481a2c + docs/models/persistimporteddeploymentrequestpreparedstackmanagement2.md: + id: 80cd5fda274b + last_write_checksum: sha1:a1c9050c60d689af7c5102ca54018935f9d40494 + pristine_git_object: 18c640a7fd0cc05718c301491dfe63735d46922f + docs/models/persistimporteddeploymentrequestpreparedstackmanagementenum.md: + id: b0f03af7990e + last_write_checksum: sha1:fbb38c497855d95508bd80e3dc98c44e4639f1e6 + pristine_git_object: 0761fb8c05b00f6134aaf1b220bdae04da76c15f + docs/models/persistimporteddeploymentrequestpreparedstackmanagementunion.md: + id: dccd310256a0 + last_write_checksum: sha1:ff7c03bc5f2e6ab368ccf54f4a94813e7ae52e48 + pristine_git_object: 0ba0d28e30207fda52e8c981d914de8b383f6e42 + docs/models/persistimporteddeploymentrequestpreparedstackoverride.md: + id: 8f03e0a915b4 + last_write_checksum: sha1:b40a5c53e2c8c144626acba8f3f08ac6436693e8 + pristine_git_object: 0fdddc1d365341a099b0942d3ca23c6345b4873f + docs/models/persistimporteddeploymentrequestpreparedstackoverrideaw.md: + id: da7a82c254a1 + last_write_checksum: sha1:d6427b64386a5a7288b88330595f5fe7592b3666 + pristine_git_object: 778a55219924d32b35bddbde8b1860626018f3b6 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideawbinding.md: + id: 2eb5336bde94 + last_write_checksum: sha1:059cf49389e09781fed35c8cc4dfc94cd6cf71c3 + pristine_git_object: c5eadd528427f73f232da582870e94ae56bba3b8 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideawgrant.md: + id: 6eca0fad45f7 + last_write_checksum: sha1:41f6ab8b1e368fd2ba3593e6d972f17e24ba11ac + pristine_git_object: 8d832fcd464bcd07d81d5200835a774e65a37df4 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideawresource.md: + id: 003e9e26d6c3 + last_write_checksum: sha1:507beacdf808ff5bd57d7adf2cdaa199e234d09b + pristine_git_object: 3eaa217ffcdd53bca0482e7767dade08942ab613 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideawstack.md: + id: 356704f4e484 + last_write_checksum: sha1:93d5b5c1f6f741f9c4a04cf7091e192ded40b7f7 + pristine_git_object: dac540c167f263eb726d8b2eb13ce3fe55e09c2b + docs/models/persistimporteddeploymentrequestpreparedstackoverrideazure.md: + id: 4ae178ff56a0 + last_write_checksum: sha1:5635368a0926afd1191ad7e95a83c720930cc7fe + pristine_git_object: a766b2eb44474d1bc498e707c2729a4b0947cbda + docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurebinding.md: + id: dcecd208f96e + last_write_checksum: sha1:27921453ba33255079c7d8a53379a2f854b71bcb + pristine_git_object: 8d687c3d213adacacd251eac2e8e97d9a3ffa976 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideazuregrant.md: + id: 6e2c13e396d3 + last_write_checksum: sha1:438b14b2e9a68740fccc5ae04359c900c124266a + pristine_git_object: 756ecae839096260b92285d61c5b1c729efdd356 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideazureresource.md: + id: 1ae78993c7c2 + last_write_checksum: sha1:844f8d8b854fa658a27d4769e309be890b5de2e8 + pristine_git_object: 769b9df1516f4461cfdcb74e0269bf95e0608798 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurestack.md: + id: 5d835cc44520 + last_write_checksum: sha1:9029baf02fcfcc780b8ad36559685d7608daf080 + pristine_git_object: 37152361fb60fbb8edef6947dece8d68f3f2b425 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionresource.md: + id: c2a644e14f27 + last_write_checksum: sha1:71c0e90faa3c0dab187e11569f8d3635546464fd + pristine_git_object: abac9d743a823941b2e22431baa84c5a4dbd3024 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionstack.md: + id: ec08d393d4d8 + last_write_checksum: sha1:6d3d7ad1cf322844dd1912ba5f602b1b8de5a275 + pristine_git_object: 56597ff21715b58f00b9443ecb25e3a89f0cd9ff + docs/models/persistimporteddeploymentrequestpreparedstackoverrideeffect.md: + id: 96518f89ddf6 + last_write_checksum: sha1:634b530d9a67966694b1a35c25f81e48c3bc82c5 + pristine_git_object: b86aa0709653cbeddb03ef3b2040c632d7bc1495 + docs/models/persistimporteddeploymentrequestpreparedstackoverridegcp.md: + id: 995b2a6ebe0f + last_write_checksum: sha1:7f2318f8bfe07c16d80617088065afea5522a2cb + pristine_git_object: 7877d5ec39d17384c9b1ffd9ad0e8f76070f5bbe + docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpbinding.md: + id: 5c363ec28dda + last_write_checksum: sha1:471ba3c9fa9f4a3e6b87166557546df1c8f6a1ed + pristine_git_object: 897593b28aa119dfe90904465b404c2b72ca33f8 + docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpgrant.md: + id: 816cc36e4426 + last_write_checksum: sha1:05fcf3be3c3bbe4dc7035d8ef21d189e74423f2f + pristine_git_object: b936ee071e9682fcfcdc875580390634d877be31 + docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpresource.md: + id: a7714a61dc96 + last_write_checksum: sha1:d0cee408373f158c8659954a3dc53b28557e96d6 + pristine_git_object: e8477494df4bdb852e1594676b0a9292b4260753 + docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpstack.md: + id: 2436520c4e1f + last_write_checksum: sha1:37fbeb256d320492493b27f154404d170da05924 + pristine_git_object: df38a6a43b97bef3bc45f8fccbfedb32e0f99836 + docs/models/persistimporteddeploymentrequestpreparedstackoverrideplatforms.md: + id: d6a226071216 + last_write_checksum: sha1:9d36d7c3a060df10b4f52c289ba46d24f1679914 + pristine_git_object: 91dba094778d4eed6a6b0b26dd19d178ea9f24cb + docs/models/persistimporteddeploymentrequestpreparedstackoverrideresourceconditionunion.md: + id: 1ff5f2c7fc35 + last_write_checksum: sha1:60c08f223a807dc1fa900cf3c1d65674127235b4 + pristine_git_object: 421133ab06c2219d5a2475b8179f5ab618c15b43 + docs/models/persistimporteddeploymentrequestpreparedstackoverridestackconditionunion.md: + id: 0c227017b81d + last_write_checksum: sha1:2bf26448a259fafd8ff340422d20e6b4cee3a13b + pristine_git_object: c08a2577385cf50a49441ac55390a0e0886b468b + docs/models/persistimporteddeploymentrequestpreparedstackoverrideunion.md: + id: 012b69feb0f2 + last_write_checksum: sha1:17363aee4e2cf61539518219c0f0a8840353a25b + pristine_git_object: 8a9f79b72b6db57a55cb927404e0895bf308b273 + docs/models/persistimporteddeploymentrequestpreparedstackpermissions.md: + id: e9dee7c2d88a + last_write_checksum: sha1:fe859af4d3ce4d361cc44721cee53075759f4254 + pristine_git_object: 53a07b01f4807dbffb7c01b0348ed28ca4ea466e docs/models/persistimporteddeploymentrequestpreparedstackplatform.md: id: 182f277d4d69 last_write_checksum: sha1:bed04810f78023134ccef567f83adc6c83eeb541 pristine_git_object: f888a96bee0d23eea2378e1ae4c0f38d316a4e35 + docs/models/persistimporteddeploymentrequestpreparedstackprofile.md: + id: ec5df58d9b4d + last_write_checksum: sha1:1e4492ecb38f876cf44e221cedcd40c1e685f6bc + pristine_git_object: 03be245f4e79625c62c443b459744c1e7b7e50ec + docs/models/persistimporteddeploymentrequestpreparedstackprofileaw.md: + id: c2f3eb78373e + last_write_checksum: sha1:10052b87c5f949ea53ba1eac610645373caca92e + pristine_git_object: 6c815b0d3f6c6ac7bfbccbfe258534490e8f1450 + docs/models/persistimporteddeploymentrequestpreparedstackprofileawbinding.md: + id: 695142f941ae + last_write_checksum: sha1:c2767ca1c7d062565da3f98a5915be3c419523ba + pristine_git_object: 9792dd6e3c9c318eba5ef4aa65784f86b19d3fd3 + docs/models/persistimporteddeploymentrequestpreparedstackprofileawgrant.md: + id: 1b413be7c9dd + last_write_checksum: sha1:5e63be25db93b20e26029001b0c4af5f331b20bd + pristine_git_object: e002786a3b87d4b8688c528b24d4365a3e25ea4c + docs/models/persistimporteddeploymentrequestpreparedstackprofileawresource.md: + id: fcdd5dea10ae + last_write_checksum: sha1:0821f6f86a32ac9479bf4277c25be3ccaf6ee996 + pristine_git_object: 9d1c4ed8e0d18f1a457a27738b202460740969c7 + docs/models/persistimporteddeploymentrequestpreparedstackprofileawstack.md: + id: f785531c0020 + last_write_checksum: sha1:9e706a61e92a40792b37841f5adf85efceff2100 + pristine_git_object: 0903e655311e57675b6d76db4e9010a2e7e430fc + docs/models/persistimporteddeploymentrequestpreparedstackprofileazure.md: + id: e8ae38eeb5bf + last_write_checksum: sha1:5a4ea8facc97e0cdf5867575bf6ef325c86bb055 + pristine_git_object: 6d8d25a904767c76d4cfd6aeb828843912f93390 + docs/models/persistimporteddeploymentrequestpreparedstackprofileazurebinding.md: + id: ac259fff7161 + last_write_checksum: sha1:38c8eabff9fc2677e03e9c0f9d9b588c83ac8726 + pristine_git_object: d15332c99a272e7250baf1978bf2b1bf9c850353 + docs/models/persistimporteddeploymentrequestpreparedstackprofileazuregrant.md: + id: 2cf9ba443f39 + last_write_checksum: sha1:f5e4cce7374b4355563e2cd22c001db2917fa96c + pristine_git_object: 4ef74a8677ce5ea76c682b673192c338b06741ff + docs/models/persistimporteddeploymentrequestpreparedstackprofileazureresource.md: + id: 7e88d31c9fce + last_write_checksum: sha1:971bb451bbc4a6c416d73ae4c81051ceb254c934 + pristine_git_object: 98b967c1ba44eecf2b31be6de5e951ca38591594 + docs/models/persistimporteddeploymentrequestpreparedstackprofileazurestack.md: + id: 7cfcfb870695 + last_write_checksum: sha1:26496236b4a8d03965ceb9e8e329318e5b6af97d + pristine_git_object: 4b2c3c071f69f44a6857aeb0b81074d764d4be7b + docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionresource.md: + id: 84860365ec81 + last_write_checksum: sha1:55536b19d2d627d6a34dc551cd2be6fe73939028 + pristine_git_object: 8dbd9493590c912710312b121fd0280151e0e713 + docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionstack.md: + id: 2a010aaa3918 + last_write_checksum: sha1:c085aa6ab6e0bbff2a48ff4839c9e6cdb18f647f + pristine_git_object: 867bff5044e529bd28c7bc93701c32ddd4c529e5 + docs/models/persistimporteddeploymentrequestpreparedstackprofileeffect.md: + id: faae9d6ddd26 + last_write_checksum: sha1:731632216d14005f93baa3a1ea9e1026d388fb49 + pristine_git_object: 5394270e677e9329d4c67fd66a819d8950064e5d + docs/models/persistimporteddeploymentrequestpreparedstackprofilegcp.md: + id: a5ca767769b6 + last_write_checksum: sha1:a13602b60c323a76557d85b3b164e8a881bf790c + pristine_git_object: 1c437791398381462a4b7fcff148b529d0461741 + docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpbinding.md: + id: 1c171bee6930 + last_write_checksum: sha1:84f1c92b477864d6b624c2b5b316de30784e9ffc + pristine_git_object: dc32e36db941bb8eb8fa3dcff1ee737ea20314ed + docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpgrant.md: + id: 92af83493f05 + last_write_checksum: sha1:6bc4e7775c80702254ab18c95ceaf08fa6bdc821 + pristine_git_object: 2467c1d97c2d7e939a9a017e2095573a956e7b5d + docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpresource.md: + id: fdf5d3a5a441 + last_write_checksum: sha1:c987769832640d64b675bf7cd9c771217b2093ac + pristine_git_object: dc0ec6f927160b1c14a6963979b073796cc6e33f + docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpstack.md: + id: ee2281d2db4e + last_write_checksum: sha1:f9d44c1acd0118c44eb597f86835daf7e976d6b5 + pristine_git_object: 6457f7d7d340f10ab69846f6e05f5b8df7a2a964 + docs/models/persistimporteddeploymentrequestpreparedstackprofileplatforms.md: + id: f3980771ede5 + last_write_checksum: sha1:e4d1cb65c086d23b88220c4936880da484367a82 + pristine_git_object: 9470540bdec8680b1ea31680bf37fd1e098fd2ed + docs/models/persistimporteddeploymentrequestpreparedstackprofileresourceconditionunion.md: + id: 71f0aa2f3c5b + last_write_checksum: sha1:4323f0383abfe83ad1b7edc4349a6ff286036db5 + pristine_git_object: 887253d130a7f4cffaf21323c92104a4e99f3e03 + docs/models/persistimporteddeploymentrequestpreparedstackprofilestackconditionunion.md: + id: 6bfcaa63053a + last_write_checksum: sha1:df9f399ab074c6ca3cfee4ef6818f3802a8f53de + pristine_git_object: 832012a472bc79fd443524b38b39d82fe3fc83ad + docs/models/persistimporteddeploymentrequestpreparedstackprofileunion.md: + id: 4aa08af15332 + last_write_checksum: sha1:b0c2a0d7607df96075b706ea86e58156336968ca + pristine_git_object: 3086935c45c83546b3173eafa719f53389d43a34 + docs/models/persistimporteddeploymentrequestpreparedstackprovidedby.md: + id: 892a9e6bcacb + last_write_checksum: sha1:8bbf48824c5616a05d82479c57bf8fcdb44f274f + pristine_git_object: 4e969715573ca9c37ed0779d7047cf67fbb2ea29 + docs/models/persistimporteddeploymentrequestpreparedstackresources.md: + id: 85a78e92c661 + last_write_checksum: sha1:332bcd9082f8e2e893cfb2be8b96c92fef42030c + pristine_git_object: 3920442baf6558e3d57b77a25677bef15f0824cc + docs/models/persistimporteddeploymentrequestpreparedstacksupportedplatform.md: + id: fbb477225f6f + last_write_checksum: sha1:c5b0de3c0d5214e2e4f5028232c32d8f3e324179 + pristine_git_object: 679563653d3766e444f271ffa40cb8ceceefa729 + docs/models/persistimporteddeploymentrequestpreparedstacktypeboolean.md: + id: bb9c85417a7a + last_write_checksum: sha1:7fa884befcb80ab6a86d7b76c53c6bbdf6e726d3 + pristine_git_object: b81f8fa2d9d6ce20c39b1690a71e506c46864455 + docs/models/persistimporteddeploymentrequestpreparedstacktypeenvenum.md: + id: b3e67fad5f2b + last_write_checksum: sha1:2d519b79a1d22246e6f4aa689ad859cebe7ac5fd + pristine_git_object: 4bf2651793741f40253600b9da20097f4750fee1 + docs/models/persistimporteddeploymentrequestpreparedstacktypenumber.md: + id: 112603f7de3e + last_write_checksum: sha1:16edf75a7ce838699ea0bedebcd59d62fe8fd860 + pristine_git_object: 260fc237941ea80bbd07b086c659b6a305c3e7ef + docs/models/persistimporteddeploymentrequestpreparedstacktypestring.md: + id: "053783706420" + last_write_checksum: sha1:e78a4b2d630f55670c0b0c4d765b8f2d4781335f + pristine_git_object: 53d2c471b17e87ad49e74f2277a74e448985814d + docs/models/persistimporteddeploymentrequestpreparedstacktypestringlist.md: + id: 9bd5fbaf0ef6 + last_write_checksum: sha1:35947ad80ee4aa03ba2976be8a330abba60df9d6 + pristine_git_object: baf1abac862aa01bf46b6310b62643dc1beef9b2 + docs/models/persistimporteddeploymentrequestpreparedstacktypeunion.md: + id: 0e9e301b9266 + last_write_checksum: sha1:fd1109f31390d19d193d167411c3fa13fad845f3 + pristine_git_object: a5eef3892c553a5dc8a3469677e83010ba9bb8e6 docs/models/persistimporteddeploymentrequestpreparedstackunion.md: id: 319acd3de763 last_write_checksum: sha1:8fa3d73337908e943376aa9a11f0f98c9075f8c5 pristine_git_object: 06ad04b880cd88fa4a308b853400177221623552 - docs/models/persistimporteddeploymentrequestprofile.md: - id: 6d7c858c6697 - last_write_checksum: sha1:b153aaa052e5f3eb46c17af3c37096a14db3c968 - pristine_git_object: d92201c67c36f52167241d8e33e38655d87d659d - docs/models/persistimporteddeploymentrequestprofileaw.md: - id: 580d92ae4b44 - last_write_checksum: sha1:a99c1a3ee55bd6dd2a8e74fe91c7caed03f8e0e2 - pristine_git_object: e4249add5d0f0131cd35f9690943a6544d676341 - docs/models/persistimporteddeploymentrequestprofileawbinding.md: - id: d3b002b07398 - last_write_checksum: sha1:4d69a783423978a0845d5476ad3963683285f9e2 - pristine_git_object: a9cd6412dd7c4b8faeb8d8b619d6a67c8fc1c15f - docs/models/persistimporteddeploymentrequestprofileawgrant.md: - id: 7f63e86083ba - last_write_checksum: sha1:4b809efd3f9e3bf8fbe370e9a646f22742c06267 - pristine_git_object: 642a146e5719e0e5cca4e796050b4260fd995c93 - docs/models/persistimporteddeploymentrequestprofileawresource.md: - id: 70821d2c46f8 - last_write_checksum: sha1:c227ba6ca055c410039ae205cde86e36d6546e9f - pristine_git_object: 2ee6bbf416e9099a72ea856786c0ad401c331b2d - docs/models/persistimporteddeploymentrequestprofileawstack.md: - id: e1ba011141f4 - last_write_checksum: sha1:5d032209afdaef2bbd4b8d166a2988150e70a446 - pristine_git_object: c73801e67cb032e9ab16019f7ebecf3f43f695c8 - docs/models/persistimporteddeploymentrequestprofileazure.md: - id: 040303b7a380 - last_write_checksum: sha1:8c7fc3a3e028b57fdaa93ec26b6477680798304c - pristine_git_object: 417ba3aa825ec48736d5b060ee431b1171cea7f0 - docs/models/persistimporteddeploymentrequestprofileazurebinding.md: - id: 39b5972b2ec6 - last_write_checksum: sha1:b7538879b7345b2ed9c0f217ce6c98a812acf450 - pristine_git_object: 8cd58321e67feb8797c64269101d69617aec7abd - docs/models/persistimporteddeploymentrequestprofileazuregrant.md: - id: b46b2b69ac2c - last_write_checksum: sha1:1eb3e5c448da959575528a156a5e4f1299ad7898 - pristine_git_object: ab25de34e5d121943bf494227da0887be014b1c5 - docs/models/persistimporteddeploymentrequestprofileazureresource.md: - id: 13e6309501e8 - last_write_checksum: sha1:3ca56279e03eaa5bb0cdd10633ad69cdff9903f5 - pristine_git_object: 914a35b94b8713bebf7cc5121dc02fcd73253066 - docs/models/persistimporteddeploymentrequestprofileazurestack.md: - id: 07e1ff833e99 - last_write_checksum: sha1:21c8272e9abbde3f057400474e78c0307e37b542 - pristine_git_object: a9529269db1539f289665f6f4da9a1735500e9af - docs/models/persistimporteddeploymentrequestprofileconditionresource.md: - id: f9fc90d90b26 - last_write_checksum: sha1:ec4095bc5924e464e7beb3ceef56d1b0da51c65e - pristine_git_object: 44b8d62c0646ac11c7f4597295be9ec81e6d2455 - docs/models/persistimporteddeploymentrequestprofileconditionstack.md: - id: 894157db641e - last_write_checksum: sha1:db2bccb115514155280b49df5a73b28984b3062a - pristine_git_object: fa3672366d8cd85ff15f8f3ad852ba8c69981dd3 - docs/models/persistimporteddeploymentrequestprofileeffect.md: - id: 8c3f202db0c3 - last_write_checksum: sha1:bc8b62f48763da565e4ea65913d7e3ffdac146be - pristine_git_object: 1605c1b908150b5e4c61efe24ede4644321b0155 - docs/models/persistimporteddeploymentrequestprofilegcp.md: - id: e817948d1773 - last_write_checksum: sha1:4b7cd5c66f1bf7d6598d8447c352300b2b9a5076 - pristine_git_object: 5b7ac714503ecec7dcd82a73d0446d46617d64b1 - docs/models/persistimporteddeploymentrequestprofilegcpbinding.md: - id: 739abfd21d18 - last_write_checksum: sha1:7fc9c4be13ca71fa128773cf1f072cec33cee7e7 - pristine_git_object: b1634d5eb01589cd1c4978414479ea6427bc17cb - docs/models/persistimporteddeploymentrequestprofilegcpgrant.md: - id: a5238b2e40fe - last_write_checksum: sha1:512ba77f9c4f9250f61e7494c2ebf0d0397f1ad0 - pristine_git_object: 1d04fed318bd3354d1baf589c828471e91d2b5e6 - docs/models/persistimporteddeploymentrequestprofilegcpresource.md: - id: 548856989c91 - last_write_checksum: sha1:8dad7682659ebee60efd683c511a56e780d44402 - pristine_git_object: 6b611daef5ab87f71a0ec020c5776120c5ab2280 - docs/models/persistimporteddeploymentrequestprofilegcpstack.md: - id: 0c5f1dd32d73 - last_write_checksum: sha1:754f54898a65c34bdec6ab1a397b10970c8201df - pristine_git_object: c415a4ab0956e77bdbace8d4e8d52e280b013812 - docs/models/persistimporteddeploymentrequestprofileplatforms.md: - id: 005729a7ec34 - last_write_checksum: sha1:c7865486546471ea5d073d49f75e966f28c9f224 - pristine_git_object: df4bf146c489974d92287a55ff16d99e25fb3568 - docs/models/persistimporteddeploymentrequestprofileresourceconditionunion.md: - id: b12cacb6d52f - last_write_checksum: sha1:8bcec062f84086862ac96c7fcb8fcf173e2b3a65 - pristine_git_object: 313dd4d812ff8c9737b62ed86de925b042edee67 - docs/models/persistimporteddeploymentrequestprofilestackconditionunion.md: - id: 96fb7368d54e - last_write_checksum: sha1:6f5903390411c201a8d27a12b1f43217212f5615 - pristine_git_object: b81e87545b32a3ae1cb0f53178c9ec24b3ae86e3 - docs/models/persistimporteddeploymentrequestprofileunion.md: - id: f38cbfebbb29 - last_write_checksum: sha1:3f5a036f81af79d0347371a1abea8506d6ea467a - pristine_git_object: 7a556fb6436afa23ddb691fb3d9bc5de267bf860 - docs/models/persistimporteddeploymentrequestprovidedby.md: - id: 4c0e5a8d56e5 - last_write_checksum: sha1:7bbbc2e0acc35a0c3655af7e57838b582db34c8c - pristine_git_object: 7c2ad6a3b05fe0b03a5b83df3fce4cfb22df2964 + docs/models/persistimporteddeploymentrequestpreparedstackvalidation.md: + id: 1b5001a18dc1 + last_write_checksum: sha1:f931d6f3cbfabc13a88b8dd2334a27ab69cececd + pristine_git_object: 9b3ca47e87d4638c3df6902ea746d9d1795604fe + docs/models/persistimporteddeploymentrequestpreparedstackvalidationunion.md: + id: f9e0f69908ce + last_write_checksum: sha1:9d6b6a67524dcf4c55703492263475f5c96156cc + pristine_git_object: a7536432601f9d5864ec46733938ae35705baf6d docs/models/persistimporteddeploymentrequestproviderawsalb1.md: id: ac2a1abf8ef9 last_write_checksum: sha1:864d06d80edf70c95a72bf47b9c65874e2a5b0af @@ -15994,10 +18286,6 @@ trackedFiles: id: 8f6963f2ce7d last_write_checksum: sha1:3974c2fe57a0585ba54ef48ca3cfcfd0cb75c0e2 pristine_git_object: 7d1da653145c68c7f8276b4d6176791f994ef84a - docs/models/persistimporteddeploymentrequestresources.md: - id: 1f4298d037de - last_write_checksum: sha1:39a9ba93e1a3f5465194850cc1e6ecdbb066c7ab - pristine_git_object: fc307719c9610ec26fc7fdc2610eb8de0585b730 docs/models/persistimporteddeploymentrequestroutegateway1.md: id: fa7011cb1fc0 last_write_checksum: sha1:0e008a40bd3aeff1453afd0e5fe16d4bfea58547 @@ -16024,8 +18312,16 @@ trackedFiles: pristine_git_object: 9685a1d6c51f1cf7e5db1462c46432daa2bc6337 docs/models/persistimporteddeploymentrequestruntimemetadata.md: id: b2a76c122682 - last_write_checksum: sha1:78ba962f544eb243075c3d4b0913d714203a5d1f - pristine_git_object: 4c6bb6a03f1304594aa760fc1d760e63e4256625 + last_write_checksum: sha1:bc5e0ea7b9a2fcd26a547fdfad7a6757d232ce82 + pristine_git_object: 739b9804ee16f558f05b9f501907823579cef52b + docs/models/persistimporteddeploymentrequestsetupupdateauthorization.md: + id: 06d9bd383759 + last_write_checksum: sha1:5cf781714ebb8a721df7719ab9265ea2e94de520 + pristine_git_object: 631635f1cf4e7a1749a558e4aa5f25882b829c47 + docs/models/persistimporteddeploymentrequestsetupupdateauthorizationunion.md: + id: 0cc0d3a2ba52 + last_write_checksum: sha1:f05436b2c3dfea01a5c255bf132cbd496464295e + pristine_git_object: 80a1d1a2ac64526518ec95f630ea47ac3b3795bd docs/models/persistimporteddeploymentrequeststacksettings.md: id: 740658d835cf last_write_checksum: sha1:4f548fda60bd7578509a0c3c9bcf3a1f67e5d676 @@ -16034,10 +18330,6 @@ trackedFiles: id: 2f0c7dab95fb last_write_checksum: sha1:ff2d35aadcd98a3dbc49b3e79da70f42553dc2fe pristine_git_object: 12a8920ef1f674d6a4b8fe414a3bb9c35b0a27bf - docs/models/persistimporteddeploymentrequestsupportedplatform.md: - id: 8641611c89d3 - last_write_checksum: sha1:5a34a83a353001d212862fe7bd863de3d06194b2 - pristine_git_object: 6238b2055046f249447e886fa3dd98ca51cedff9 docs/models/persistimporteddeploymentrequesttelemetry.md: id: 8765b0bc1f92 last_write_checksum: sha1:1ceb8b4fb4160a11ea77dc91e25828cff50a5f2d @@ -16046,10 +18338,6 @@ trackedFiles: id: 94b042838293 last_write_checksum: sha1:696f4cd252973859e27b7e1f989949b04b1a02c6 pristine_git_object: 5321d3cb4d2e6e5cd56dcee6f6904ed559c2c874 - docs/models/persistimporteddeploymentrequesttypeboolean.md: - id: 2deafcf884d9 - last_write_checksum: sha1:991cbc8dc0e195f6e0f0b8849558eb6483334975 - pristine_git_object: ef3e931afbe77fa99b5b549559742bed130a4ccc docs/models/persistimporteddeploymentrequesttypebyovnetazure.md: id: 97078ce0e281 last_write_checksum: sha1:ab902c9560b0c6c86a907af6c5843fd8045e3292 @@ -16066,26 +18354,6 @@ trackedFiles: id: 32ea9b3d9f39 last_write_checksum: sha1:7fe81ec664cba237117206b8e45e2423fb43fb3e pristine_git_object: e9c0e421a605e8f77e48272fe6eace70666e8d16 - docs/models/persistimporteddeploymentrequesttypeenvenum.md: - id: 410b0c0bf0cf - last_write_checksum: sha1:9f01b189dc92785aa58a3137c268fa27c5dc3573 - pristine_git_object: 70d455d2bd14a0b1120617b98584c56929a2fb8a - docs/models/persistimporteddeploymentrequesttypenumber.md: - id: 74a0187af026 - last_write_checksum: sha1:48fba64722f95001383bcc7b091674e342a254de - pristine_git_object: fde8c46c3a3f3c3bb45c4c4c60dd55aec213cc9a - docs/models/persistimporteddeploymentrequesttypestring.md: - id: c5cabf69b26f - last_write_checksum: sha1:a66142ffee3184197c4869447aa4b822fe161005 - pristine_git_object: a606b8512a16fd39ee3c5ee7f3cdbf3fe6d049d4 - docs/models/persistimporteddeploymentrequesttypestringlist.md: - id: f04522279d68 - last_write_checksum: sha1:45b12cca050ec458b19a0bcb523362ac657e3cf9 - pristine_git_object: 762b46a2c89c5d74ee8605c647a3aa53fb5abe3a - docs/models/persistimporteddeploymentrequesttypeunion.md: - id: 44eefdd43edd - last_write_checksum: sha1:39263879e8180fd6e0a20606ad09746f4e09c84e - pristine_git_object: a616336e6ad2f76929f927d6193ddd84fe8dbf38 docs/models/persistimporteddeploymentrequesttypeusedefault.md: id: 7daeacc64f7e last_write_checksum: sha1:5fecf3f2ba13887f19dd0737b9b0e4e1ca8e7351 @@ -16094,18 +18362,6 @@ trackedFiles: id: dbf5c7f3215f last_write_checksum: sha1:1471a5ae62860ccb6e947dcb1a64893070c29cf8 pristine_git_object: 7afefe31cb1809f3cb82ac2f60811115d5369d21 - docs/models/persistimporteddeploymentrequestvalidation.md: - id: f32d25d287a7 - last_write_checksum: sha1:3ec97a615fec38774bb474f6d8c4b9a0cc4faf52 - pristine_git_object: c2b37f2b0e62cd0ef8dd1b70e9c8b738c3e6e3e2 - docs/models/persistimporteddeploymentrequestvalidationunion.md: - id: 4dea19cc996b - last_write_checksum: sha1:915e7a1f137eb3195c6c52357fe672fbb6776ca5 - pristine_git_object: cfb9c1e062969ca5c63fc31472765e86afd1bf9f - docs/models/phase.md: - id: a2d01dc13e35 - last_write_checksum: sha1:4ec2b9eca39f33ae037a33dbdd8d17df33df52d9 - pristine_git_object: 99ecbaa49a43274e706cfa8b33deeaa4976ab38e docs/models/pinreleaserequest.md: id: 84944e6117dd last_write_checksum: sha1:3599a75c86258fcb178ae16be077c1374e4582cd @@ -16197,7 +18453,7 @@ trackedFiles: docs/models/prepareddeploymentstackdependency.md: id: cb1bd307808a last_write_checksum: sha1:41c54283ddbb0ec4d73782ba7c289d4dd6085087 - pristine_git_object: b7607916f6369d233cd01a7d4f076e9f19d89de7 + pristine_git_object: 24833e959367d7d1c1cfa7af96adf18aafe89b0c docs/models/prepareddeploymentstackenv.md: id: ef1aa2ce7a64 last_write_checksum: sha1:325942d4ae481fba4938b1ee55c295c057d9b7b0 @@ -16520,8 +18776,8 @@ trackedFiles: pristine_git_object: 2b091ee01a69fff226c6f14f8990d2489a3f09d3 docs/models/prepareddeploymentstackresources.md: id: 423b75e9cd22 - last_write_checksum: sha1:37cf8914fdb762a27f84ed70b1167cf5c6f31db2 - pristine_git_object: 71ecffac96b95188b08e85cbcc8ad495830ee139 + last_write_checksum: sha1:85b5222c4f7400d346640a4d184b803139ed1241 + pristine_git_object: bca4536a618b1b807f95f2b0e2705aa8ec9ce935 docs/models/prepareddeploymentstackstack.md: id: 21bf9a3768e6 last_write_checksum: sha1:4c61cf2a1fb4b87a7f5eed43542ba4c2e4447a67 @@ -16661,19 +18917,11 @@ trackedFiles: docs/models/prepareoperatormanifestpackagerequest.md: id: 04bb11736ecd last_write_checksum: sha1:daf2ab9d90399f45acb4638052a22b5ff0b0c25d - pristine_git_object: 16df9186a55623cb2cae05753589e976b18c37cd + pristine_git_object: 71d81c30c68bbd5b6097b27b19317efc2572fd24 docs/models/prepareoperatormanifestpackageresponse.md: id: 59c211527900 last_write_checksum: sha1:e349f00c476c4f6c2e90e60e618458187cbae3ee pristine_git_object: 41bec7d514947736292b3abfb2f218fe2c0d1c45 - docs/models/previouserror.md: - id: 1d09c227d4b7 - last_write_checksum: sha1:d06633e2ead0e111e07be42d84a5cc670da8faea - pristine_git_object: b1c7ad2e3e52c62fdafdd7338452d82d39d4830c - docs/models/previouserrorunion.md: - id: 221153d44ade - last_write_checksum: sha1:e09013ab062923e403ecf0b35aa5284401ee1b62 - pristine_git_object: b911c916f7fe86c552d5caceec76e16c9b14c503 docs/models/primaryendpoints.md: id: 926317c5ebb3 last_write_checksum: sha1:79f758bea6580fc5534b78d6c08e5e2a8b22ef07 @@ -16818,24 +19066,18 @@ trackedFiles: id: b08c53bad0f3 last_write_checksum: sha1:f8fba3e6939f16b0ea0b26709ae751bd99b24a13 pristine_git_object: 633fa2a5ea0ca3fdc014845bf90f83af27ed0307 - docs/models/progress.md: - id: ee7665226310 - last_write_checksum: sha1:c517c9b92bd45e3fa22794c66a88816d2f183b50 - pristine_git_object: 9bb04cac649b16265eda5e554f45b39acb6af69b - docs/models/progressunion.md: - id: 64b68c77b264 - last_write_checksum: sha1:7d896143a832e93b48b8246e14dbdec5777ab3e7 - pristine_git_object: 37877eca58f93403cc5e5266bc3c02d511c3c0de docs/models/project.md: id: 90bdd121a0a9 last_write_checksum: sha1:787151be1dca8cb6094b180c2c220d5352478bf4 pristine_git_object: 8d2be9fdcf24e018ee89ec179544f84cf03960d1 docs/models/projectbinarytarget.md: + id: 39255a5ec207 last_write_checksum: sha1:a06ab3911701ff6e612ea69e05d61879e13f6ca1 + pristine_git_object: 66b1717c1d36b55170372d9e6e2bc5f91aaca458 docs/models/projectcli.md: id: d287fd97b3da last_write_checksum: sha1:b3276f1ae97367ae429d088ec0fc64329e7fe6db - pristine_git_object: 9b74c0b197441cfb658b211883b9dfad50dc5cb0 + pristine_git_object: 504df333643daa41b1e5d4711d9cb2bbe1eea9c5 docs/models/projectcloudformation.md: id: ceb28f9b7f14 last_write_checksum: sha1:fd32f4c69a11cd854ae2b234107d57aef02b0fd4 @@ -16873,11 +19115,13 @@ trackedFiles: last_write_checksum: sha1:42f6338c43eb0c750b63a02578ff59c77d50737d pristine_git_object: 7269adbd3afaee4490905d13fd13353f040ad708 docs/models/projectlistitemresponsebinarytarget.md: + id: ef858508202a last_write_checksum: sha1:461c7e0db036e93c71c04f48058ab91989fe078b + pristine_git_object: da0aa9cce9758ee73a1e5442da33e7278e067bbf docs/models/projectlistitemresponsecli.md: id: c55037e94e3e last_write_checksum: sha1:39c8c4bb1c951935d95917f4fac9dfcc170a6dac - pristine_git_object: 53e0fe3577f4a76b85145d3d73251e2bf93ddc5e + pristine_git_object: c1bfe0ac7ecc7a0cfd9ce00240e0c6a067c1ba6a docs/models/projectlistitemresponsecloudformation.md: id: 81926910a850 last_write_checksum: sha1:71993c582e0a66ff5004a76dc55ae3dbf9dfead1 @@ -16942,6 +19186,10 @@ trackedFiles: id: 35ac72587990 last_write_checksum: sha1:4ccea069dc0ca7314acc4ed0281af33505913628 pristine_git_object: efa13004e8cb471d054fdccb8d60146a8a1ff74e + docs/models/protocol.md: + id: 8174c2e84624 + last_write_checksum: sha1:b0eebd04140a599535d006d3fd80ae0336aca818 + pristine_git_object: cb54c439a7e44a020be2f2c589b193a050e3a939 docs/models/providerfleet1.md: id: c908582edb12 last_write_checksum: sha1:bf7763b43cc794c7f84e2ef7ed82168bd3d1358a @@ -16960,8 +19208,8 @@ trackedFiles: pristine_git_object: 086659a382d234ab92a7666e0e37b7a24889edac docs/models/publicendpoints.md: id: 2c1bf38da05e - last_write_checksum: sha1:51d98a8ffa04dc330e1b5f3e1ae0c8ce6448863c - pristine_git_object: 083f54ec43b6704478a9a0c3086fdf7d61a340ea + last_write_checksum: sha1:23b2ff9438188f73762c907713328d641d86f162 + pristine_git_object: 798da37023c72efb05c6de4ae4b768f83b347651 docs/models/readiness.md: id: 02e426d5c584 last_write_checksum: sha1:f1ee51f7f369111916ea80d09cb0c84914473b06 @@ -17084,8 +19332,8 @@ trackedFiles: pristine_git_object: 96fb02c2c12ee98a567bdd1bdfb1dc71d8da424f docs/models/releaseinforesources.md: id: 260bc06b35e5 - last_write_checksum: sha1:3b963350e84a9869a23f26145acc772ce2b46942 - pristine_git_object: 1900a98eaeadbb4a5222e2d986b7e795d351386a + last_write_checksum: sha1:4a62ba7fc8e6c908a0133e72fc910feca2b47a5d + pristine_git_object: 843e62345713ed780e0ba890f64ec20694efef57 docs/models/releaseinfostack.md: id: 10c40edb5f91 last_write_checksum: sha1:cf7a5486e6e7a03099a4457b854bf9ee1c2b62c0 @@ -17120,8 +19368,8 @@ trackedFiles: pristine_git_object: 301b35550a2df1f54e7a53fc95bf37d7220c7f02 docs/models/releaselistitemresponse.md: id: 7f388514097d - last_write_checksum: sha1:38dfb68647526e40bc33f8529cd17f4ce7611a41 - pristine_git_object: 80358d755425f1132195d8978f5c9bce21858329 + last_write_checksum: sha1:d74e9b30eea526f6721a898b27213f87df95b8f9 + pristine_git_object: f4e812a82125f82f8b429c8bdd7027a716745ce7 docs/models/releaselistitemresponseproject.md: id: 8dfa7e006fb6 last_write_checksum: sha1:598514d0fc0c16a26f3bd8d435edba0f3d0574f2 @@ -17133,7 +19381,7 @@ trackedFiles: docs/models/renderoperatormanifestrequest.md: id: 4e0c2e089734 last_write_checksum: sha1:a9965505d4ffd40b9f1b658823a8487ec05566b5 - pristine_git_object: 9ef744ee5c8459d598f8eaff0a44870ea11d35d8 + pristine_git_object: 93d74398f371f4bdf991c320ff629d9fe3b42a1d docs/models/renderoperatormanifestrequestformat.md: id: c22db87cc442 last_write_checksum: sha1:aced69ad79aa7d638bb9f63b9f59ee227cd88e1b @@ -17582,6 +19830,10 @@ trackedFiles: id: b694540a5b1e last_write_checksum: sha1:4deeed125274abfa9367d7d61f57f29dfa74419b pristine_git_object: a76fd3bfe053e4ad29383da8c6c9367b7b4f39f4 + docs/models/rollout.md: + id: 630112fd6d17 + last_write_checksum: sha1:e2605a66cc3ec09a081016b0d0aa6bb3b0ac4f76 + pristine_git_object: 3e3c394b00219626ee89ab59157a566b32b79ae3 docs/models/rotatemachinesjointokenresponse.md: id: d800ce073c45 last_write_checksum: sha1:89dabb23ddc2b27af8f6ee2cd29cb6db5e389d7a @@ -17674,6 +19926,34 @@ trackedFiles: id: 23333520d3a5 last_write_checksum: sha1:3853181f20ffed79c829deab9533f070aed897a5 pristine_git_object: a00f4edb4f20cc01d88d67d3a8492bad924a4303 + docs/models/slackchannel.md: + id: 6d3f1bcc2b4d + last_write_checksum: sha1:797e2b09fcf3c7ab977c3af065b43f25af40e26a + pristine_git_object: af601c815b69a9710d3e511c2e7685c8005dc05d + docs/models/slackchannelsresponse.md: + id: 6c4d52067d4e + last_write_checksum: sha1:a389c04b0e797704bb9c8d3756cac158438de887 + pristine_git_object: b1896b6db1fa35a2682fb77ef4e67c4ccb6b672b + docs/models/slackinstallurlresponse.md: + id: fb5495b455ef + last_write_checksum: sha1:6963615df4d7485dfe6f6f219a88208d966f2a01 + pristine_git_object: a6063ada8b6f92d151a0bd14dacff6aa508394b1 + docs/models/slackintegrationstatus.md: + id: 00749f2fd969 + last_write_checksum: sha1:3c257972430d847d56dd5574867ac16d1c25eb25 + pristine_git_object: 57d92af7b6a0cc8c7ccea5fbdbf868f1c8a74c00 + docs/models/slacknotificationchannelrequest.md: + id: ba29b211ec63 + last_write_checksum: sha1:cd3bb3368c33246aa28768e241bcac7cf5056f38 + pristine_git_object: 73b136ece329281f35ad855f5b5c0f4103984480 + docs/models/slacknotificationchannelresponse.md: + id: 5b9ab63147a8 + last_write_checksum: sha1:86bfb21a7f473dc514dc990f68ff442c805306f9 + pristine_git_object: 1dace8dee86f79b3d0fb0d8bd585bd7ffab32ce8 + docs/models/sourceenum.md: + id: 27e3ed293e57 + last_write_checksum: sha1:c9bec451b77d6044cbf54822633519d15e64734a + pristine_git_object: 0e9df5fbe0cd1693913aedb4be5049a79c983eb8 docs/models/sourceunion1.md: id: 5289348df52e last_write_checksum: sha1:d88a109dd97148c0cea14f64c22a1ec57ce6517e @@ -17738,10 +20018,6 @@ trackedFiles: id: a799bafc606a last_write_checksum: sha1:28e787cc4b2a647dfbcb13c6df52cd2d6d3f3bcf pristine_git_object: 88302ffb365f34342ae471eda0e6d959f1a8c6ea - docs/models/state.md: - id: e560b4e72643 - last_write_checksum: sha1:5500e126bf19ac9cf3990bab0a10854f74b5f330 - pristine_git_object: fcc9aa55ce9a0f630229442fed7a587e693d7c75 docs/models/statecontrollerplatformunion.md: id: 3eea951f9f9b last_write_checksum: sha1:1964295cccdaeae4e9772541ebf54174e8199b2c @@ -17750,22 +20026,10 @@ trackedFiles: id: 8bc95bf5b520 last_write_checksum: sha1:4e81c95c16216fbb8a1e315047f5538b1fe3fe83 pristine_git_object: 31f42c790502373c7c8f0ea10eccf006df0fa88a - docs/models/statenone.md: - id: 05e45f13d6e1 - last_write_checksum: sha1:3c8ac3f936e66424e6a5ec66e5c59f3f31c5883a - pristine_git_object: e7e45caf93bd4dd9afc36dce00482d5493eea7e3 - docs/models/statestarted.md: - id: fec1a2278f50 - last_write_checksum: sha1:d1ade0741064c77eec180dc2b46ac18a3ab7bbc1 - pristine_git_object: a6710e86010e829f4efae0e46acea149d471b8b5 docs/models/statestatus.md: id: 372c2a63a34c last_write_checksum: sha1:6429ce0d511b481e310685f6885411f6ca29eab9 pristine_git_object: 7f87bb467983f46232076ac62137317dba8fe7a2 - docs/models/statesuccess.md: - id: a822d40f6fc8 - last_write_checksum: sha1:76322911b9e5b5a15aa0a2e91e6c4661238d45f9 - pristine_git_object: 3e7d24302f73e88061d9ea95123ed82e438b907e docs/models/statuslifecycle1.md: id: 728712de33e0 last_write_checksum: sha1:0cf5c3815519f3757a798ff0bf3c68467f20249b @@ -18548,8 +20812,8 @@ trackedFiles: pristine_git_object: fa6432708270918873f074b001fb1532d499e198 docs/models/syncacquireresponsedeploymentconfig.md: id: 5cbd7f841434 - last_write_checksum: sha1:626f9fd4f0f250053ff6ded8e2de51b1ce493734 - pristine_git_object: d066f47b69d7c8fafc1a582c3aba483b591da20d + last_write_checksum: sha1:1090246c2bd69d33b08eb643ffeed410e353a427 + pristine_git_object: 97348cf5e9f7293c8c2d7d5564cca6742eeb5baf docs/models/syncacquireresponsedeploymentconfigplatformaws.md: id: b2f3d73e22de last_write_checksum: sha1:5e253c434ded6606a90262a87ee647c3434e00ca @@ -18968,8 +21232,8 @@ trackedFiles: pristine_git_object: 23a18b5efdf933c48a4343cbcd82c92dbad6806d docs/models/syncacquireresponsedeploymentcurrentreleaseresources.md: id: 3124bfd3d9c7 - last_write_checksum: sha1:dd4962de51471f8005a03335a305993d3fb13a44 - pristine_git_object: c0617126bcf8f0a949b2f1a1db2b3d9c8c358f3d + last_write_checksum: sha1:fbda9240adfed4d8fcbcd27a0ff3a0ddc1be8000 + pristine_git_object: 8604a695f5234d79add0b54ce042f33644d9925f docs/models/syncacquireresponsedeploymentcurrentreleasestack.md: id: c4bf0e3c02b3 last_write_checksum: sha1:77fcdef7a8f3d0888d5daef152339aedd83c6e6a @@ -19410,6 +21674,22 @@ trackedFiles: id: 96f11507979d last_write_checksum: sha1:079907009dcb0dbb55e2d658483f323e3ce6c6bd pristine_git_object: 96cafb548b0f97c37cc09a343be6de0da7e1158a + docs/models/syncacquireresponsedeploymentfailuredomains1.md: + id: 1d914ead389f + last_write_checksum: sha1:e7ef879cd0f0633a847ba09054807ba415bd9267 + pristine_git_object: f61781d616850e8131e6cf40d1c201a254644a68 + docs/models/syncacquireresponsedeploymentfailuredomains2.md: + id: 84de7a5fbed6 + last_write_checksum: sha1:2ae86bff4c95024c372aa3799d51fcb71f5d66f5 + pristine_git_object: f98035a9a0153dd41dc690a5fde09bad7c1eb575 + docs/models/syncacquireresponsedeploymentfailuredomainsunion1.md: + id: 3396be314fdb + last_write_checksum: sha1:630b6702bdf25a03dc6568584a92c09fdfdade38 + pristine_git_object: b634d6ffc4599b852293721e9fc6d9e0f2ef0a91 + docs/models/syncacquireresponsedeploymentfailuredomainsunion2.md: + id: 86b18a66ea91 + last_write_checksum: sha1:ce686adcc77c5ba2655069e7e26e980f025c1767 + pristine_git_object: cb3c7ccbae1f747c86aa99034b5d2f5afc51ff4b docs/models/syncacquireresponsedeploymentgcpimages.md: id: 4fb941b8c65b last_write_checksum: sha1:95c6dda778fd9399fb4641de91181d3ff3030dc4 @@ -19678,6 +21958,402 @@ trackedFiles: id: 03f44b43fa65 last_write_checksum: sha1:c7c7fce692db4672f21334e1c487f0e0aba931a0 pristine_git_object: 660b4be6886aef5ca04ef2cef64c3ef7989a99b7 + docs/models/syncacquireresponsedeploymentpendingpreparedstack.md: + id: 34019da76163 + last_write_checksum: sha1:62c4c4b896e7e06ae6f870e71a54194382082ef9 + pristine_git_object: f01d067f057ed6af4ec000420a22c5d9b71da33e + docs/models/syncacquireresponsedeploymentpendingpreparedstackconfig.md: + id: e4a2b7ee6c95 + last_write_checksum: sha1:7c13bf2e2faa3a2cb9ae0dcab9365e7ad1ba1065 + pristine_git_object: df6d3037213ba695b18bb4884b680cbd4d3c10f8 + docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultboolean.md: + id: c8c20d8bd775 + last_write_checksum: sha1:ab9e2ea2d2e16084de84609501fe99704dee3494 + pristine_git_object: d5c540e64358d7209efdc05f8c4690e8b0800e59 + docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultnumber.md: + id: b52c9f68cdc5 + last_write_checksum: sha1:5ab73dbcae86b29016a80ecdd8d23ef0b19472fd + pristine_git_object: 805b6ecf364a3fbffa048be241611c788ec66dd8 + docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstring.md: + id: e81755457f28 + last_write_checksum: sha1:635d761b523faba0002eaeedd5c187254edeccf0 + pristine_git_object: f9c7708e8dabd0c797ee7d8cfdd4873e017359e7 + docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstringlist.md: + id: 84cf039f0fa6 + last_write_checksum: sha1:33d201bda4f18f6c93773b76e073249ac7e9fa2b + pristine_git_object: c23d3b45157315cea03a324ed6b33b1a199e0a55 + docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultunion.md: + id: 27ae8bbad740 + last_write_checksum: sha1:1cfead6076c8674fcb2ac4b36338e3a4b4931619 + pristine_git_object: cec34e9776e37d47b066cfe9a2bd430d11515397 + docs/models/syncacquireresponsedeploymentpendingpreparedstackdependency.md: + id: 03d2d4f590df + last_write_checksum: sha1:199589986e9d28e1a5c69d22742e90eb5850039c + pristine_git_object: 658f36ff11add42ee7ff039057d227bfe6e41105 + docs/models/syncacquireresponsedeploymentpendingpreparedstackenv.md: + id: 4810f73eeded + last_write_checksum: sha1:42f49c511295a76e3b1c1a1eb30b2c14299bc477 + pristine_git_object: a9366c5d9da65933b41ab8a2f4474325a3ad20ea + docs/models/syncacquireresponsedeploymentpendingpreparedstackextend.md: + id: 00627c799a01 + last_write_checksum: sha1:ea60ef3954f541a3b66cffbeb30645affde36780 + pristine_git_object: 724e8e5e97397c2ee9c457fafbe810e181717306 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendaw.md: + id: 1f1b5451c822 + last_write_checksum: sha1:0dc0b3a150eaa177c04db726ad40b64e8e27b9d3 + pristine_git_object: 65c3ae6af959f3696baf32d20827e9bed63c2a2d + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawbinding.md: + id: 5a4bcf6c64c2 + last_write_checksum: sha1:ef0f209c7b3ad1a44caa2e00da044261d43b4b45 + pristine_git_object: e1a2a2cd91269cc6b26c5ef80af46164a03d8cbe + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawgrant.md: + id: 68727d3251ea + last_write_checksum: sha1:9113f91b3dcf93259ec1aad061a1d10a66b86d78 + pristine_git_object: fb03113751a9ed2a63dc817ad1a882f61ef940ed + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawresource.md: + id: 29a7fba3bac8 + last_write_checksum: sha1:103e696b4afcedd304ab1bd39a4f5d979d05d1b0 + pristine_git_object: b5309fd5f8236308062cfa8867f8058c60c841f4 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawstack.md: + id: 33c804d9a835 + last_write_checksum: sha1:6c5ec123cab163e28aca1c22dbeff050667bc780 + pristine_git_object: 430fe8b6ac8537165e927c4555a7d49ff249c2dc + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazure.md: + id: 4b74929e728a + last_write_checksum: sha1:0d762cca24fd458dad518f484cee9991525e3586 + pristine_git_object: 02cf609abd28a12aceb12df440bbe2a6f82cc43c + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurebinding.md: + id: 6e0708d7b8b9 + last_write_checksum: sha1:54859304e40e987efc73a5785d5c8ea7feb98ad7 + pristine_git_object: 87429a9717f778ad1b25e56dda55307959f94487 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazuregrant.md: + id: 41c8c1af3a2a + last_write_checksum: sha1:334840ce5cbc5730ef1e881334ed03d2c9d0e016 + pristine_git_object: 13c15d18b437f5a7d8fb9bceb1eb7f9deba2a37f + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazureresource.md: + id: 415aac6a8146 + last_write_checksum: sha1:00ca4d2139ceae90d10402e3bae9305f33946d73 + pristine_git_object: 584ab22f922f3ad49f0b2ebd1a14941031cb28a4 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurestack.md: + id: 16b2632336ce + last_write_checksum: sha1:c78ba9f9cdb1bca5c449a6dce9b94b07bf875397 + pristine_git_object: 77155e6f3b3e92b1a104b263fd38b84229effb71 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionresource.md: + id: 835b0eba45d3 + last_write_checksum: sha1:9b4977ac16fc5ad5d7d3ca485f47c53e5a430b95 + pristine_git_object: de6b8b838549870b0cc2961ed6c7f8f760b877f8 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionstack.md: + id: 7a62f6c7c359 + last_write_checksum: sha1:4f582c9395b7cb84fe2ab345c8b69cf7e303e0a1 + pristine_git_object: 40d899171dc9925baa2b29f5e08a2c8ae099aa06 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendeffect.md: + id: 513b1913a6b9 + last_write_checksum: sha1:4dafbd6035c26285a7a4f11a4a8ede93424ebd70 + pristine_git_object: f7f345630e08c99c87de5bc1a605932d9876bd47 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcp.md: + id: f952409b1381 + last_write_checksum: sha1:eccb9f2fbbdd8d57e867b1fc723ca4227863baa8 + pristine_git_object: e53effdba9e51d5a8f699d731e0aa5f6a8ff9e34 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpbinding.md: + id: d9d9f48faa80 + last_write_checksum: sha1:61612dc2b9798d91f0b748525e3d00ad819bf231 + pristine_git_object: f634f6a7eb6543abcfb9e3872223da46421498d7 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpgrant.md: + id: da0aef5082e2 + last_write_checksum: sha1:ef71af227217591459f9f85544d57d5d4d66ac72 + pristine_git_object: 37280c34f897b70b0d7ba80d91b4f6c19315bd6f + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpresource.md: + id: 49ae8d74eeb9 + last_write_checksum: sha1:9166f97fd966a968389b17342687ef5644f10e6e + pristine_git_object: d57cf9f1af825df394bdfc1c9e35576834e8456f + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpstack.md: + id: de178095e489 + last_write_checksum: sha1:920d1eb91992cfb15fe720bf30c5a89b7e410753 + pristine_git_object: e67b5b667b86367d522facd000bde5501b298708 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendplatforms.md: + id: e52ce47c38f0 + last_write_checksum: sha1:c0f41e5dd650d6e08877b7f089344951bd4f1fca + pristine_git_object: d228a4e360174f5288aea93cb13e0de2da6de538 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendresourceconditionunion.md: + id: 6a7b0edddc2b + last_write_checksum: sha1:cdbc70b1eb55096cc075c4dbebd1b8b8f7ae7542 + pristine_git_object: 189c37bcde6c21f032321259afb8ec2468993a44 + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendstackconditionunion.md: + id: c0e0bda6eb0d + last_write_checksum: sha1:febf0738a492267b5651f3798461b771118617a9 + pristine_git_object: 6fab8f500ed76631dff87901c96b7770396c4d0f + docs/models/syncacquireresponsedeploymentpendingpreparedstackextendunion.md: + id: 0e533e726552 + last_write_checksum: sha1:0e387c6967e7d506ce291bd7c4561c0f514c967d + pristine_git_object: ca63af894225e219197f6afc33b5a3b291d5bb68 + docs/models/syncacquireresponsedeploymentpendingpreparedstackinput.md: + id: a5e091451de2 + last_write_checksum: sha1:a53cb2a5c565c2852599b015c1c7dbb852417f62 + pristine_git_object: d7dd10a2163959da119a2d71be3f11b0da87cf43 + docs/models/syncacquireresponsedeploymentpendingpreparedstackkind.md: + id: 434facc7e916 + last_write_checksum: sha1:b62b83916a884c7a2ad218d1be07168fb0dd2ec3 + pristine_git_object: a426a8944c1a43d4c941a4a7d44eadf356f517a4 + docs/models/syncacquireresponsedeploymentpendingpreparedstacklifecycle.md: + id: 9824c250560a + last_write_checksum: sha1:4d38bd2c8d237e282cf498a29c2450e775525ba3 + pristine_git_object: b3373e261ff197e547bd5457d672277e8641b3e5 + docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement1.md: + id: 04dc573567c3 + last_write_checksum: sha1:cfd7d309f5e66c42114e06766abc80d709fb5e03 + pristine_git_object: 03ce0bad674acb85e5bd7dba67eb37c3e8fe0e21 + docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement2.md: + id: 3c681b113409 + last_write_checksum: sha1:fff2afc2d8bb2ff2d601cdb378a747ebd52ca6bc + pristine_git_object: f8756a82f304f6cd9af1684e3e35a45fff24a68d + docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementenum.md: + id: dce296db1360 + last_write_checksum: sha1:91bf255266d2672d127f6a0b5d4d69c24f200203 + pristine_git_object: 2285cf43700568fd2a68951716628a14eb410843 + docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementunion.md: + id: eba815314b20 + last_write_checksum: sha1:6b5221acd8c942649269692bd5ce11fa0297fdc6 + pristine_git_object: fa5a5a4c616f78d5fde7a764400225cc9de1e250 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverride.md: + id: d60cf9bb68aa + last_write_checksum: sha1:6b0c69dbd2ec182897a1820ae90d63eb9c18c928 + pristine_git_object: 2dcb06a65334163c89b5a172f160cd06cf3227be + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideaw.md: + id: 814f32cab5ff + last_write_checksum: sha1:286f1bba137b6e2500e12e8966968a29266acd25 + pristine_git_object: c14cb2cf8a34d164efc1975f811f44c8575569fa + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawbinding.md: + id: eb461bfd7d06 + last_write_checksum: sha1:9095e9bfe04a80f902bc4330c9ab976fc22c2177 + pristine_git_object: 24f2c41ef6993e41b5d397944a6dac063b3f5e51 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawgrant.md: + id: f4b32a3eb665 + last_write_checksum: sha1:51eac5b21db0d6eb4eb1a37fd646891b0781a697 + pristine_git_object: 9c48aae28db809d728edd0f35cbdd041d1e2a210 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawresource.md: + id: 3f547526266f + last_write_checksum: sha1:63115cf08fa2ea1e35466f2a8f0964ad617511df + pristine_git_object: 6fcb3254d6b945815f7c4d577fb75fa7aff8da30 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawstack.md: + id: b0d6bb3c2cbd + last_write_checksum: sha1:554218c187392c1e8728cb12e058aea1c6016fd1 + pristine_git_object: a79731f2015430d2b5e01453565693989abae86b + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazure.md: + id: cfa7adfdaab4 + last_write_checksum: sha1:0f20d308a4e4a7f91612a71ea2599780109d2bef + pristine_git_object: 34568f7041d9f4d8a7f9f0d170e38b575ded935b + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurebinding.md: + id: e30d9f40f3ba + last_write_checksum: sha1:770899c62adbc20b04f9c6421377ab969dc9a969 + pristine_git_object: f068dc5a32576bca655b1c6664c0260388b2c8b1 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazuregrant.md: + id: c1d9dd601516 + last_write_checksum: sha1:73aafa8627cf2620f13060e1de3a655105d9fd6a + pristine_git_object: cac69513192949a51279594c1bea4b0b5293a7ee + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazureresource.md: + id: 756ca8cb205e + last_write_checksum: sha1:c96485b874932cb618d9d3ac7e1351933110e385 + pristine_git_object: 92076646769fdf592b76904084448de1da796d45 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurestack.md: + id: 32475b2a1ec8 + last_write_checksum: sha1:6938f4e924727c0ae6a4b613d690735b1c2e7a22 + pristine_git_object: afd7d50cff7025a85cebfbddef8f4396558980c6 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionresource.md: + id: ea3e4fd98c58 + last_write_checksum: sha1:f0d4ba3a4f09a23396c7a215653b8509a8b43691 + pristine_git_object: b74e2ed64ea80e42d02352b63a4c2bfc1b55448c + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionstack.md: + id: 63a1347df193 + last_write_checksum: sha1:02632c91220a94cc06bbea118257807880247503 + pristine_git_object: d5d2a66a831e20fa60a364fa33c2d99b3b7d5e0c + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideeffect.md: + id: 9cbb685e4657 + last_write_checksum: sha1:18221d46f06154a4e5aa2dac884087bd402c3b08 + pristine_git_object: 09b9c210263192026dc1a11082d2724b059353fe + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcp.md: + id: c4e0ecfa7ae6 + last_write_checksum: sha1:2ac992e17ed728146aba3f0736c72e54b547ae19 + pristine_git_object: a2e226b775cf62d519892ff55a0b6014c4dd1df1 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpbinding.md: + id: 915e056dca83 + last_write_checksum: sha1:a51802bcccba6d96fca742be576b9502989ea26f + pristine_git_object: 64b2edfb0101f336df86eb5ed8ef1cb7483c7207 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpgrant.md: + id: 2918184b9f08 + last_write_checksum: sha1:4c9cff1ac6d47d62989f7699b3e63aebe50bf107 + pristine_git_object: bea28b4fc7e404233224917c5c3e5343f23caac7 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpresource.md: + id: 18b30b074262 + last_write_checksum: sha1:fe3561fc03b2736cc9e7e7192e571886deeb7e25 + pristine_git_object: b2379d1fc67be163b0da256ad2c48bdd94ae9aed + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpstack.md: + id: 996080bd3d0a + last_write_checksum: sha1:5dedbf65ed8e6361bdf39b0d17cf2ac09ab284c7 + pristine_git_object: f7d18fd14aaf534ad969855bddb444bd5ef22f5a + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideplatforms.md: + id: 5ed802682982 + last_write_checksum: sha1:f03091a18e366d7a425b5a2fb7aa923d8430328c + pristine_git_object: e7d2edebc0039f858c63d45a716211f4d85e8e98 + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideresourceconditionunion.md: + id: 71e628ce1da3 + last_write_checksum: sha1:df29a490cdd3080067078e809ebb52ebf97f8065 + pristine_git_object: 7759bbd41364cfe835b3940861f56dd030f3d89f + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridestackconditionunion.md: + id: 39997b93b94f + last_write_checksum: sha1:042514bce24defe550374b961cf77bf3d46177c5 + pristine_git_object: 8c143b29da0fa161ea62d4914d1622459c8329fa + docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideunion.md: + id: 505aa6fbdf97 + last_write_checksum: sha1:868a56c0fff52d4bb78dc36a86da4b3630369555 + pristine_git_object: eca3f27f368038120e2b10701bcf5a854d0f5c93 + docs/models/syncacquireresponsedeploymentpendingpreparedstackpermissions.md: + id: 4c6256ffdd36 + last_write_checksum: sha1:48fef78c3591a18dec7b70385176d332e5532bdf + pristine_git_object: 786a4bfc6809b5d2377417ac1bcd08360d223ef3 + docs/models/syncacquireresponsedeploymentpendingpreparedstackplatform.md: + id: ccbb749f620d + last_write_checksum: sha1:206f3a73dc6c30e52e2be683f4b6bbe86ca5da79 + pristine_git_object: e8b0e6b013f81cc89440a4e9802d8e19b9f82826 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofile.md: + id: f5333aca84d1 + last_write_checksum: sha1:3a304d5fa0b5c76f2f35dad29beae106c189db39 + pristine_git_object: aec8fe97a4508e9d9f02173125dc93f444574d82 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileaw.md: + id: 99474c553dd7 + last_write_checksum: sha1:de47b629c20a3294eb0b01f412e9ba834c498c9d + pristine_git_object: 442a3a9be83f88d4d6330b552a9907ac22c62d09 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawbinding.md: + id: d22bdfd47a01 + last_write_checksum: sha1:88ba16da67bd462089f0ea5bdbea445e4d0cedcd + pristine_git_object: 19afee4509eb39b9c82b6bed3239ae8a4cf76a34 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawgrant.md: + id: 37b385d874a9 + last_write_checksum: sha1:66b5cc719d2c8ccd53bfc7851cc7ce9cffca7841 + pristine_git_object: 154626eb683fdaa2e4dd78b10520f5878bc366df + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawresource.md: + id: 4be34ac65ca3 + last_write_checksum: sha1:d97711cf52d0b8884e148f2babfcd23c4ea3c471 + pristine_git_object: 4adfbcfe18680028ee6d64eab862518ec98ac5c2 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawstack.md: + id: 35f3f8858590 + last_write_checksum: sha1:8f82efe38dfccc393b2a5086ae5d1e322d44682d + pristine_git_object: ce36d5eee3820ef161c64db6b5466c94dd48c75b + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazure.md: + id: "553753023273" + last_write_checksum: sha1:cf863ac96cac55233386dcf51a6847b073ec7752 + pristine_git_object: 26f7431cfc38aa3d93ea4f12bf6a46038958f93c + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurebinding.md: + id: e83dc018b917 + last_write_checksum: sha1:32ff87cbf896a323b9bf9d6306a068e9051a5213 + pristine_git_object: f9b36da88a3afd2acbcb4c33e58cec800414e486 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazuregrant.md: + id: 06977ce660da + last_write_checksum: sha1:842aa04bbf51adc026629a9dd04f0cbcbe2fbfe7 + pristine_git_object: 6c87680780628e7586f04776e8f8d600a13cfd7c + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazureresource.md: + id: b6e09fe388e6 + last_write_checksum: sha1:ee73be7bf817eb4c2cb3a197960e03f519e06be2 + pristine_git_object: 25a56113eaaa74504aa5c4974195444a01be1016 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurestack.md: + id: 68bbc15879c6 + last_write_checksum: sha1:e1416f8c408a93126d382c8997afc61c2e1aa766 + pristine_git_object: 17ae80be00c5a0bd64dd140e790734bcf1470059 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionresource.md: + id: ad09c79c7f31 + last_write_checksum: sha1:4577c0f0ab65eb508641e0774771f37c9cf14e00 + pristine_git_object: 811019e5ea5a35d3e78768da7029a5fa5a530e57 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionstack.md: + id: 2204add711ed + last_write_checksum: sha1:b3e3938cb51a1c19629473a207ac63a992446458 + pristine_git_object: 0106c8d2da78c4ab965f3717f431e0f63a83e729 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileeffect.md: + id: 97823b4c8a86 + last_write_checksum: sha1:ba49a3ce6ccd45ab1e4079b5675f1ae73c705665 + pristine_git_object: 928bd6387f705c5545d820d661f31d3df0ded00c + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcp.md: + id: 0a9efce5bba9 + last_write_checksum: sha1:556131cdd24e78fe180a55252b0ee7493675133d + pristine_git_object: 9d8d642db14fda2f79602d32027df37bc7fbbd19 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpbinding.md: + id: 560d3a5c853b + last_write_checksum: sha1:bb629ae92150556549ce28fb782e7a96ce3dc9b9 + pristine_git_object: 74c40fb5de19f9d3c088d552840d893ca9258d44 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpgrant.md: + id: 8960161ee220 + last_write_checksum: sha1:07e51def84252f28267369fa3f947ef4fde1526d + pristine_git_object: 8c5566433c3cd73ce1319b554c3c5a66155940b7 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpresource.md: + id: 96ea63a8c579 + last_write_checksum: sha1:272a59d1dd84d951113df276439ce4221041a4ce + pristine_git_object: 30fa849bc406aa985b2e2afc08f355e3e5239f24 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpstack.md: + id: 232c90e6d074 + last_write_checksum: sha1:647b5a5b282682756b2681f160ebbac0da0a812a + pristine_git_object: 0e5b61c36ca3036195900c9a7b7152dd5513c475 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileplatforms.md: + id: 4ef92cdb9588 + last_write_checksum: sha1:e5195d5db2285dc81ad1349de96f38f493421b37 + pristine_git_object: c545e26f19123e81bb749ab31836dc619d655208 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileresourceconditionunion.md: + id: c30b79ec46f4 + last_write_checksum: sha1:5ab17c767f8b3acab540afc0f4acaf0abfcd7787 + pristine_git_object: 2a1da79d077324769502da2c2822fd959fa2a577 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilestackconditionunion.md: + id: c78e641787dc + last_write_checksum: sha1:4fb532e1da7f03d221de0cfd0f9afe24d400317e + pristine_git_object: 52c641e7ae30df3a661a1f9ebd8b12e5d34a9350 + docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileunion.md: + id: 20aa4a850cd9 + last_write_checksum: sha1:568ec8500ea00e4b2f20dbddbda467748807ff62 + pristine_git_object: 73b4c19a3df9491bfbc37e73c7dc495abca38afb + docs/models/syncacquireresponsedeploymentpendingpreparedstackprovidedby.md: + id: f94d6e5943f5 + last_write_checksum: sha1:88d6136cda292f4bd28834269f7f2956c35cfbb9 + pristine_git_object: 62b12f9f34da57ed3730b56d4898eb053b559067 + docs/models/syncacquireresponsedeploymentpendingpreparedstackresources.md: + id: 1f9c38133a5b + last_write_checksum: sha1:55a0b3ec38dca83a90548909e6e8b0a1dc511ca1 + pristine_git_object: 4840b5a5406190617c5ad52555302ee97e150f57 + docs/models/syncacquireresponsedeploymentpendingpreparedstacksupportedplatform.md: + id: 1f43137e21e8 + last_write_checksum: sha1:f2abbcc83339a4f0c49c535acb0e4a7f313d5a28 + pristine_git_object: 3d1488859f201833c6b0219193b56a3d857911c8 + docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeboolean.md: + id: a0f5c6af9a77 + last_write_checksum: sha1:04b89e45e02104b3ae9f94d7a68b196d51bfdb30 + pristine_git_object: 47fa48a3db9753eb873435023b65e44a8910b809 + docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeenvenum.md: + id: 336df01c2fd8 + last_write_checksum: sha1:edb90792fc3321388c85910ad95f97848af5451e + pristine_git_object: c860aa65cac54ed932a2e7992b557373026e282c + docs/models/syncacquireresponsedeploymentpendingpreparedstacktypenumber.md: + id: f78e889bf0c9 + last_write_checksum: sha1:88ef3ad7e40aed77df7a9d848dbf16b89c244738 + pristine_git_object: 0fde7811c36c3c9b321e4745680739715481ec56 + docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestring.md: + id: af394a98d888 + last_write_checksum: sha1:fa080013f6f689235d7d38f7dbe578dc159a0091 + pristine_git_object: 3ab83069f85704cda29dea8a3743e882a008a315 + docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestringlist.md: + id: eeaaf4f4d395 + last_write_checksum: sha1:d689bb45ce2e06075f84f0359f12821bd2b1fc0e + pristine_git_object: e6c68728641e90f33ded3695fd4777d49f1be3b3 + docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeunion.md: + id: 058951a235de + last_write_checksum: sha1:b06bdbd93210c2c90b68ba1e46afe77c35e22917 + pristine_git_object: cb01790796f96f6a92eade45a55d6eccd50c2c68 + docs/models/syncacquireresponsedeploymentpendingpreparedstackunion.md: + id: fc8309591201 + last_write_checksum: sha1:3285fb29c444cf9467b3f02c66db3f59def291ee + pristine_git_object: 2116b56330736b80f29283ef25b5b2b9e97dd192 + docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidation.md: + id: 5f2abf128e10 + last_write_checksum: sha1:21639897aff95c513462d500112ecbbf3ce029ed + pristine_git_object: d02465f7730c98e7dd4ff1a6fc597554de8bf52c + docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidationunion.md: + id: 43cd89b2c5a5 + last_write_checksum: sha1:357fad6c2d181515492800b4c6ad5c6b22fd97b7 + pristine_git_object: 606bac443d708896cab631f7d332706b2f32243e docs/models/syncacquireresponsedeploymentplatformkubernetes.md: id: f0861dfe0f54 last_write_checksum: sha1:e26415c5007cbfeac61af9ed72aadd2ce3656faa @@ -19692,12 +22368,12 @@ trackedFiles: pristine_git_object: 22b64e6e41c6d3507cab6179ee6c7fd046bb920f docs/models/syncacquireresponsedeploymentpoolsautoscale.md: id: 98a651c04c5c - last_write_checksum: sha1:2fa00c99a5eb65c22396349f0e2bc0fe15a042cd - pristine_git_object: 7e2e5214d1c743be9cb549d7e9034be058bd72d6 + last_write_checksum: sha1:2e57b3b748531dbeb829dd28031c8ade9c80572e + pristine_git_object: e0e90e0c3a60c573691ff33a90a3a94a7cd498f3 docs/models/syncacquireresponsedeploymentpoolsfixed.md: id: b6d3e243ea78 - last_write_checksum: sha1:165c97a967d08d5bb53c6f09355fd33ac7afce00 - pristine_git_object: dcbf4ac1512493156f6bd56bbcbaa688876ea030 + last_write_checksum: sha1:f19ddcf0b66b54db0093445e47214475b41de691 + pristine_git_object: 0b98eb2d91f1dd184d3d93740a1da6c9e615dbfe docs/models/syncacquireresponsedeploymentpoolsunion.md: id: a67ed1c4e997 last_write_checksum: sha1:fdeaf2e5e0efa2fcc4e8bd92b529e459983ef62c @@ -20116,8 +22792,8 @@ trackedFiles: pristine_git_object: 2436d8c74b7c64aa297304ea1a67b4c6a5a1cc93 docs/models/syncacquireresponsedeploymentpreparedstackresources.md: id: d7c61cb46db5 - last_write_checksum: sha1:e01609219005d03977beadb5dfb76ecc3b4d4b77 - pristine_git_object: 68a040394f248b2ca508b09eb9778c8c5ec0dc66 + last_write_checksum: sha1:c1c5c684e7566d507dbce12bc743d002f2588cd6 + pristine_git_object: a64457d55bc9065b220c911877d637ef12eae695 docs/models/syncacquireresponsedeploymentpreparedstacksupportedplatform.md: id: 1a6680852cb6 last_write_checksum: sha1:6a8fdcf3c689a5e7fd4647709540e52df2d96510 @@ -20512,12 +23188,20 @@ trackedFiles: pristine_git_object: 557d8d6e9d46e585a2a7d6d465b92e674f1dfa6a docs/models/syncacquireresponsedeploymentruntimemetadata.md: id: bc02f64dd801 - last_write_checksum: sha1:7dcf92b43a238894a6c35c686018b023c5a7d190 - pristine_git_object: b010fd0d7111901a1d59741b54cf2fbfc7b46100 + last_write_checksum: sha1:9e2e2be0dfa641b0afba6e262c913c635d361f0a + pristine_git_object: 70940139da69a0d988d9a2bc1a7e9d951dca29b7 docs/models/syncacquireresponsedeploymentruntimemetadataunion.md: id: dc95f572d991 last_write_checksum: sha1:e79683ef7808ec0a76eca643681dfb3b8df21163 pristine_git_object: 72a5d1095ee8a126da0d67c82851cbb096d689ae + docs/models/syncacquireresponsedeploymentsetupupdateauthorization.md: + id: 96d2995b0746 + last_write_checksum: sha1:492ee4c2a78edc0d4e1f03c17dc3f1eafc315c72 + pristine_git_object: b9f3209e8601adf638578d85075b78d13bd8f754 + docs/models/syncacquireresponsedeploymentsetupupdateauthorizationunion.md: + id: ce9ec27704ba + last_write_checksum: sha1:fd059bd6d6633461ca1c53122b39cf33d7a0bc74 + pristine_git_object: da7123629a6b6784f521646852dc75e687541c5e docs/models/syncacquireresponsedeploymentstacksettings.md: id: f9634456a469 last_write_checksum: sha1:3866fb12d5e5decaaf598478c15a7153c329c4f1 @@ -20992,8 +23676,8 @@ trackedFiles: pristine_git_object: 796cd544ac997f2356bd9823cb0a57afe2ca46dd docs/models/syncacquireresponsedeploymenttargetreleaseresources.md: id: a307c72910ed - last_write_checksum: sha1:51824ff80e66c60692b2d3507fb7a10b6af0496b - pristine_git_object: 81c49f55420685bfe31e85e1c8ecd8229387fc92 + last_write_checksum: sha1:db2f1736f089d2dd210fe6b424a29437d41069f2 + pristine_git_object: 9bd00622a3de52466cbac43f2029d4c6f87aecd1 docs/models/syncacquireresponsedeploymenttargetreleasestack.md: id: f3451686d876 last_write_checksum: sha1:c649b0683d4c1b6b203411ddc088e566e37d6d00 @@ -21430,26 +24114,6 @@ trackedFiles: id: 0e0153f2e9c1 last_write_checksum: sha1:90aca003dc9a88163cec6a9a58ad2f75e33ef725 pristine_git_object: 6e0f32ddc269a2b4807324214e6e96ef6ad10e29 - docs/models/synclistresponsedefaultboolean.md: - id: 822059219c75 - last_write_checksum: sha1:b3bdc87f3b7c5b42008a16a3165fe522902c1eea - pristine_git_object: b2a0889bd31f756f6727ea35212068023c42b996 - docs/models/synclistresponsedefaultnumber.md: - id: 037f1adf12a1 - last_write_checksum: sha1:9ab2d85c6ad3d69d41971c42f40b162f128b1787 - pristine_git_object: d6dd25184524c79b9fe97548bd8f7e42bc65df52 - docs/models/synclistresponsedefaultstring.md: - id: eb70840becff - last_write_checksum: sha1:20e70b175a012040869e9605787de5b80dc0ed7a - pristine_git_object: 25b1dc755cacf11e12704819a0bf38104b4e4d73 - docs/models/synclistresponsedefaultstringlist.md: - id: 9e871381b316 - last_write_checksum: sha1:b17b007ff44c20da89b188a61cfad9e9277cbdd0 - pristine_git_object: 951d4a07aa781956da3a268e528748b00481ad26 - docs/models/synclistresponsedefaultunion.md: - id: d86eb365ddd1 - last_write_checksum: sha1:dea922dc50803c81426ecf6c0fa489391f5e2f32 - pristine_git_object: 0047656f46cc24ded8e80e851d5cad76892f7eec docs/models/synclistresponsedeployment.md: id: d74bef4848ee last_write_checksum: sha1:28a664acae50420baa5da4431cdda9ee9aca5cdd @@ -21478,10 +24142,6 @@ trackedFiles: id: 6ff9db0826e5 last_write_checksum: sha1:07331d25c8384c919e51326649b61628a895326d pristine_git_object: 2f2b79aa42a433fc031fe2b660d80b2992ebb7fa - docs/models/synclistresponseenv.md: - id: caf19ddd744a - last_write_checksum: sha1:9c8a4e180dbd4d484ff1b6e7330a0b2d9cd168b8 - pristine_git_object: f0e44e69e8f49742ee1071a081efd1704f7230fa docs/models/synclistresponseenvironmentinfoaws.md: id: 2499d212136d last_write_checksum: sha1:baac5b94b17fc77fbe1f7d7d76c11c2cc828dbde @@ -21546,102 +24206,26 @@ trackedFiles: id: 0e5d6992c8f5 last_write_checksum: sha1:26bfb4af1066c3d8798e38dd7d9ff13fddadc263 pristine_git_object: 1973534f30eac549c684531102cee2332210144a - docs/models/synclistresponseextend.md: - id: ec41d1721466 - last_write_checksum: sha1:04ccc58e3f516f0a1046850abf864c9a1f11d5b7 - pristine_git_object: 743a86a47b988d42d9b6c600272c19ba60905e72 - docs/models/synclistresponseextendaw.md: - id: 521b9831f963 - last_write_checksum: sha1:dcd5abc9aeee9c16e38e229b8b767a0b93faafde - pristine_git_object: 3f7936debb5adba2834409055dcff894e50e0cef - docs/models/synclistresponseextendawbinding.md: - id: ad99c8de1c12 - last_write_checksum: sha1:37d9a80a0ea6a8920ef4462aa88491e546b85ac0 - pristine_git_object: 51ea4792d7d02150fc6705ad5d092852b23ce5d9 - docs/models/synclistresponseextendawgrant.md: - id: 797c8aaefd73 - last_write_checksum: sha1:5782a220c63eec5a36d28c164a63eedd8c21ffe9 - pristine_git_object: 2bb849031c01f8775fa0ad59e5e336b73c98aeab - docs/models/synclistresponseextendawresource.md: - id: 467964c7e633 - last_write_checksum: sha1:274d4bf935f130b8c33757f5eeea8453a7554a1d - pristine_git_object: b2be0d1fbd22770578428981877546fc95abf331 - docs/models/synclistresponseextendawstack.md: - id: de34b0c7752a - last_write_checksum: sha1:c44f923829faa0767c9c53ee8ab70a916f58fabf - pristine_git_object: d3b13a9f287ca2d02115178f93027f225ce6cd38 - docs/models/synclistresponseextendazure.md: - id: 62c4511d269a - last_write_checksum: sha1:6a8d47f05cf955961d5ce14b147f774d5baff76f - pristine_git_object: af9ef502251948344f7febb58e84eaf29e26c13e - docs/models/synclistresponseextendazurebinding.md: - id: a981c5248a73 - last_write_checksum: sha1:c5aa851b058383779373740743c9035e1a6eb17e - pristine_git_object: d29956fb251181891470e43d5805fd090ab5ab37 - docs/models/synclistresponseextendazuregrant.md: - id: 672877fbb2d9 - last_write_checksum: sha1:4533786316d5a77fd6590bba16d5dd85611a76b0 - pristine_git_object: e1826ffb84284ab423ba662f3e279cc27bad46c0 - docs/models/synclistresponseextendazureresource.md: - id: 32788246d7e1 - last_write_checksum: sha1:b4ef4596d2356fbbb2d2b87d258615b9c8eae003 - pristine_git_object: 2a7d635e413a885950c21514be30279294f91331 - docs/models/synclistresponseextendazurestack.md: - id: c98ae1928b55 - last_write_checksum: sha1:d3a16c9996857b5a27a7d4c8a9e0d15b2ca02afa - pristine_git_object: 8e95ca2d215927369a983fd59a14154e3fa725a9 - docs/models/synclistresponseextendconditionresource.md: - id: 97fccb5c1473 - last_write_checksum: sha1:fedddeac8a4c5fcef64538bc8d7c91dde9237a9b - pristine_git_object: b2506c3f67e64a2d3e7f49abda6e093eb2f8666c - docs/models/synclistresponseextendconditionstack.md: - id: e17f26576ee5 - last_write_checksum: sha1:6b49017006eba873da3856744e9abe3c06aaf532 - pristine_git_object: bcec1de1714691af85ccf8bf1f60fa515ab09b99 - docs/models/synclistresponseextendeffect.md: - id: 07ce4262bed4 - last_write_checksum: sha1:d2d528ecfb860b427b18913e7f419ee66e4e683a - pristine_git_object: 8d02d1aaf0dcd70f922f61485612387119b62d41 - docs/models/synclistresponseextendgcp.md: - id: c8f2e8693b7c - last_write_checksum: sha1:b20cb492a1d9653ef6ee1885d18afd0d26b167a0 - pristine_git_object: 91b9a24edb5a265912fb09e879a982c1eefb9da5 - docs/models/synclistresponseextendgcpbinding.md: - id: b71658d749ef - last_write_checksum: sha1:81b70f96c3a2f28a40beee3f1000e303eefe72ff - pristine_git_object: 4cca2543014a8b3a823bfdfea09d67e8893fbf6f - docs/models/synclistresponseextendgcpgrant.md: - id: 5303e54aeb25 - last_write_checksum: sha1:0b6155a53398a6347be41a940a5aef067c5bc989 - pristine_git_object: 3cf7795c7cde1e5499972d561b789e6673ae46ab - docs/models/synclistresponseextendgcpresource.md: - id: 9e0a1826489a - last_write_checksum: sha1:ba967b3852c35e7e40fd863ed2927807f505af29 - pristine_git_object: 2145e1ee8db052aee0703de46c7499c774f9ffd5 - docs/models/synclistresponseextendgcpstack.md: - id: 3d9c6099b42f - last_write_checksum: sha1:ad924c29216870fa96ad0e00d9a37405cb7fbff1 - pristine_git_object: 30d72bc2bd82c4ba66b476194ad3fd58d6c5907f - docs/models/synclistresponseextendplatforms.md: - id: 4d9853ade46d - last_write_checksum: sha1:014eeebd0373fbd1e7e954da49892b2efffdad74 - pristine_git_object: 71b73ebe53b9c6efd4d35af85a71ab002768cc71 - docs/models/synclistresponseextendresourceconditionunion.md: - id: c56195160a53 - last_write_checksum: sha1:47a446706cddc4a79a7190d7b236206650286725 - pristine_git_object: 4ffbc3802a821841544b694845ff537375848294 - docs/models/synclistresponseextendstackconditionunion.md: - id: 9b0ff7221b0a - last_write_checksum: sha1:21950c676b91f5c554f2c041d0d52941ef747330 - pristine_git_object: ce110ef1b253b06f18070b2bfb3209a65de1c9ea - docs/models/synclistresponseextendunion.md: - id: d9eb15ff2550 - last_write_checksum: sha1:4f610cf860cb6d1fdde36c6f064ce5d402ad918d - pristine_git_object: 4cf0f217d6e7adee76bdc19bbceea75896c8fe33 docs/models/synclistresponseexternalbindings.md: id: a059a18e26ee last_write_checksum: sha1:2e0e8ab1a05c2f7e90f0e951aa168bc27d66165f pristine_git_object: 8884cd7b0b63c4b7fd537aee018202932ac1756a + docs/models/synclistresponsefailuredomains1.md: + id: edc76e55b0e2 + last_write_checksum: sha1:ad74dbb82ec616e75994a18ae66cfd64cf84ce4d + pristine_git_object: bef0bf12694ec2ba8873e13f6faa0cfecd1818d6 + docs/models/synclistresponsefailuredomains2.md: + id: 003fec210fec + last_write_checksum: sha1:78651d6bec111f9c6d4843283366e064f5765535 + pristine_git_object: edae2752205af6f87fe8fbbc15d325d4eb746bb6 + docs/models/synclistresponsefailuredomainsunion1.md: + id: d39e9339e946 + last_write_checksum: sha1:e1cdd1331bc2ab50ed5306d71b807df69dc073c7 + pristine_git_object: a310cef4b42c0e5e058a8ef7f2f38302934b609e + docs/models/synclistresponsefailuredomainsunion2.md: + id: 5cb2474ee419 + last_write_checksum: sha1:d3203f908e4ae82fd2e4850615c10fdd1c918c08 + pristine_git_object: fe23a834806dc8cc5ada754a371b787b832e04fb docs/models/synclistresponsegcpstacksettings.md: id: 842fe13129b0 last_write_checksum: sha1:9785635122d85bc24368297f24fe8bc41b034072 @@ -21658,14 +24242,6 @@ trackedFiles: id: 7ee088b95bf2 last_write_checksum: sha1:a0feafa332b76bc4045ae607bf09f629939823c5 pristine_git_object: e2aec9a5a2e66731787ce10c8e385c357b8916aa - docs/models/synclistresponseinput.md: - id: 0a214055b56e - last_write_checksum: sha1:510317100844e1f91bcb368d3854a34a3bebbaa2 - pristine_git_object: 4eb827ea61377b87f65218e8afe5b06e2d54631b - docs/models/synclistresponsekind.md: - id: 657447ff68eb - last_write_checksum: sha1:e9760fcb1220f079d116feead798e9c96161624f - pristine_git_object: 69657de70a2dbf8d99aeac77007d5421d336f7b6 docs/models/synclistresponsekubernetes.md: id: 4f8f2108f0d5 last_write_checksum: sha1:6e22784b63b587b70c516a45a60f300f3871c139 @@ -21682,14 +24258,6 @@ trackedFiles: id: d0048c09424e last_write_checksum: sha1:71efaed4c1a4c3bcc33f7618f07d5820d6f6f4e7 pristine_git_object: a5ecaf8307c91449cf32fded0a2f124ab4dd62ae - docs/models/synclistresponsemanagement1.md: - id: f7ee33449bcd - last_write_checksum: sha1:99124ec883350a38e9f996f772b7d304ca4638b5 - pristine_git_object: 0c9b0ed5f5a7d44b2e920ce44a51f854ed1f2cee - docs/models/synclistresponsemanagement2.md: - id: 7d06daee21be - last_write_checksum: sha1:734aa5d49751db3defc0e4ee6feff0de3c62dab8 - pristine_git_object: 4c1f3e19063d6b2860005411b129d255e140d861 docs/models/synclistresponsemanagementconfigaws.md: id: 448ce09dbbc5 last_write_checksum: sha1:009a044e9ec569f27f546695ab6cdef4752b7f68 @@ -21722,14 +24290,6 @@ trackedFiles: id: c4072bc5de70 last_write_checksum: sha1:98aac677805a5019a4a14bfc1052bcdc9f2e2471 pristine_git_object: 3bd8c52c8afde88c1f7ac64afaffd4979838769f - docs/models/synclistresponsemanagementenum.md: - id: 9d25c79bd2a5 - last_write_checksum: sha1:53970bf05297a69bfbc3ccaacaec02e9bb880d1c - pristine_git_object: 8f3de0fa0e38ff4875ebe5618e644d8500352222 - docs/models/synclistresponsemanagementunion.md: - id: 571fb54372e5 - last_write_checksum: sha1:c298871d2e689006c2934bfe6c4ff3f820c00c99 - pristine_git_object: 580b016ea76436d96a60e4c819c9c18a5dad195d docs/models/synclistresponsemodecustom.md: id: 9b66a267c7da last_write_checksum: sha1:b6caa21872b496d9f71d017afb43b4ac707c05b0 @@ -21782,106 +24342,406 @@ trackedFiles: id: f646aff7eb10 last_write_checksum: sha1:2bcced092c44e968901f12fad1abb6d0d313014e pristine_git_object: a2403ad0914d634b73f0e36e43520734f6ecfd7e - docs/models/synclistresponseoverride.md: - id: 3f0da1f08094 - last_write_checksum: sha1:98b26fe325f1f057d911a53efcbe027e5d818a08 - pristine_git_object: bdc4c6734af50e6d2ae3cf5d38f47b327a15b148 - docs/models/synclistresponseoverrideaw.md: - id: efb41d92a690 - last_write_checksum: sha1:aa682ad0dcba100cd0d5bf74352326b8a0e9fcc3 - pristine_git_object: 0f48bc470a618de66a4d500b980560f4728e64bb - docs/models/synclistresponseoverrideawbinding.md: - id: 49d5db55aacf - last_write_checksum: sha1:1b7cc70d6b7dcee86938b246caa4f9e7514b009b - pristine_git_object: 6211e89c59b6ab124029fa2dae86992a21cc1e86 - docs/models/synclistresponseoverrideawgrant.md: - id: c1b22bef4b45 - last_write_checksum: sha1:2c5f5d4360f34c27f9f1f4f16aaba80207d28d9a - pristine_git_object: ddffe3050a64a9bb82d8359fba16c9dacb7b13ae - docs/models/synclistresponseoverrideawresource.md: - id: d8cc7c3399ff - last_write_checksum: sha1:d34b0f19216f0e1e5c1c989254c06389f9ce5b2e - pristine_git_object: 006538549213820b939d630016faed334d0dee76 - docs/models/synclistresponseoverrideawstack.md: - id: ef97dd7c25a6 - last_write_checksum: sha1:3aca45ad3d94484d63d2c638e5cca73aec5e1f9b - pristine_git_object: 420e6009091252497022053639b2708efb969f6e - docs/models/synclistresponseoverrideazure.md: - id: ffc68c262483 - last_write_checksum: sha1:a7bae6fc30da70aa6f0f78f1112682e52b1abd1d - pristine_git_object: 2eff38ca8fa2adb40ff4151571393b21bfe626c9 - docs/models/synclistresponseoverrideazurebinding.md: - id: e0b764e982bf - last_write_checksum: sha1:68165667da9500a4f99b58bc24716e8844190282 - pristine_git_object: 3cb01c11bd25469375fac44c1524922a5f0c4411 - docs/models/synclistresponseoverrideazuregrant.md: - id: 0def5bb57ac9 - last_write_checksum: sha1:64e48e9974a0673896f7d4ba526873d7f671bb19 - pristine_git_object: c14ac3a8335cdc472985ca9e9cb3e04683ac2218 - docs/models/synclistresponseoverrideazureresource.md: - id: de744c5bf0fd - last_write_checksum: sha1:858e1fa590b18ce7cfdeafd82a6d0ecd85c4ed40 - pristine_git_object: 6d01fc344df7bc2f240c8c5eae73dd0de672dfe4 - docs/models/synclistresponseoverrideazurestack.md: - id: 1e56d4be85ed - last_write_checksum: sha1:3ca65891b617da5536a54820d9f84899c1c42e7e - pristine_git_object: 30fc35b6966cb93d02e02d41447c7fe09fcc9752 - docs/models/synclistresponseoverrideconditionresource.md: - id: 0fd50ad01822 - last_write_checksum: sha1:18d75000f784f91df96085d00e54020718b15269 - pristine_git_object: a511107caf3afa96d4708aa5b25215d9e85910f0 - docs/models/synclistresponseoverrideconditionstack.md: - id: 8c7c720d7e16 - last_write_checksum: sha1:6f61af5fddd5945dc6dbc74c63298f10ee1c59fd - pristine_git_object: aaa5905d1766882da26523f449aaab018ce83852 - docs/models/synclistresponseoverrideeffect.md: - id: 421ea92dac7c - last_write_checksum: sha1:dfb984887a567bea66949dd12ff858b763c2232b - pristine_git_object: 0dbcfb1e3097d1820d1d9331aec5b9d6ada13f5b - docs/models/synclistresponseoverridegcp.md: - id: 86acfc9b6447 - last_write_checksum: sha1:c07ba2af9e438a4e21d1a8ba618e7a104c6808eb - pristine_git_object: b7123593a8ed928108bb18f58998378107891e12 - docs/models/synclistresponseoverridegcpbinding.md: - id: b8a51c17b25e - last_write_checksum: sha1:0e336e6c77ede0f32d101555ccc136a18180a3d6 - pristine_git_object: 4da41718502202ece76c54251b3cd2a422b3ec86 - docs/models/synclistresponseoverridegcpgrant.md: - id: 93764d41dca0 - last_write_checksum: sha1:9dc155ee47b73580f980956eadb1efd6cde07081 - pristine_git_object: 35780b4979e5339c64eb9864d9a0f285a3cfa9e3 - docs/models/synclistresponseoverridegcpresource.md: - id: 0a40d6bf5bb8 - last_write_checksum: sha1:98b7b347eb93d4e2dbc2c1ca4e8f981e5e1b4ea2 - pristine_git_object: 41a7e7ab2cfa16acc6e1634c6c7ced073faf6175 - docs/models/synclistresponseoverridegcpstack.md: - id: fa2b988514ab - last_write_checksum: sha1:5f0a0346f1ff62d588eebfaae2aabec7a7358d03 - pristine_git_object: 2a4a5f5dbc1133dd2e83abe9fc984b343b42db3b - docs/models/synclistresponseoverrideplatforms.md: - id: 5dd711e2d6be - last_write_checksum: sha1:ee90a9f9b4a86df0fd26bf739e7b162b80440d99 - pristine_git_object: 4012fdb164358d13c9fd026d94b659382e2a03ff - docs/models/synclistresponseoverrideresourceconditionunion.md: - id: 1eec8b1e1023 - last_write_checksum: sha1:a0d4e22eab6431804460556edb69eec6e66615a5 - pristine_git_object: d639b1bd571004fa94512d472d5ead876004870d - docs/models/synclistresponseoverridestackconditionunion.md: - id: b19a44f11f60 - last_write_checksum: sha1:37e2ec45ea640f3094081154f422ff784ab0b1e1 - pristine_git_object: b79a2052bb3b0d31351f5f0b02764cc274090e69 - docs/models/synclistresponseoverrideunion.md: - id: 7ed6ddd0ea40 - last_write_checksum: sha1:672a1f44deb0d7f8000ccb163e5ce31adba6237d - pristine_git_object: 3073ddc9abebf6488296a130559d6f339f14620b docs/models/synclistresponseownership.md: id: f2dd135009b1 last_write_checksum: sha1:e0cfba2bf4606e201b758462e497483f1c024603 pristine_git_object: f6f8aa8ae4e648eab17facf3155b2872fba078c4 - docs/models/synclistresponsepermissions.md: - id: 03262a805298 - last_write_checksum: sha1:de201006f5f25e44161a889c7fc92657811f912c - pristine_git_object: bd5a950215a6f6392728ed5d296bbb7c591726da + docs/models/synclistresponsependingpreparedstack.md: + id: 6600cdbb1a5c + last_write_checksum: sha1:3d19fdac7430be19a5d9e3834dc9413b577b4753 + pristine_git_object: 98cea5a965ed95e070867bed665d08753209eed4 + docs/models/synclistresponsependingpreparedstackconfig.md: + id: e8fd00b21df1 + last_write_checksum: sha1:785996a262560c9f2d4fbdd43bc9c5564a7843e5 + pristine_git_object: b64851ea8eeb4d453eee26d79e246bcd007ee42a + docs/models/synclistresponsependingpreparedstackdefaultboolean.md: + id: 6531b1f380b3 + last_write_checksum: sha1:43d2d27f050e18e5259ac54796c8db810b64e968 + pristine_git_object: 2bd851301e38e517ad706c068795bd15bd0acbba + docs/models/synclistresponsependingpreparedstackdefaultnumber.md: + id: f01018d5ce3b + last_write_checksum: sha1:b7c646e3953f52d731689695ba135fdbaff29b62 + pristine_git_object: 065164ad5aa610c8a969846f24142bea6236b4fd + docs/models/synclistresponsependingpreparedstackdefaultstring.md: + id: 28d4ad2ecc67 + last_write_checksum: sha1:ef7c0f82b9911bbb40ef0d918ced5f7881e27801 + pristine_git_object: 6f48717988b2a6a024315e6c2b365a12295fd81a + docs/models/synclistresponsependingpreparedstackdefaultstringlist.md: + id: 9a806133a8d8 + last_write_checksum: sha1:563b96317ac17c265bdc2776f78680e054abf411 + pristine_git_object: 0aa88104b6c4e0e432642ace820603c7299e4fa4 + docs/models/synclistresponsependingpreparedstackdefaultunion.md: + id: d2afb8abb802 + last_write_checksum: sha1:5a52d8a0268498534a8a2a77ab0effc07632e409 + pristine_git_object: 81e70d04eb7eecf0fc031eaf3bd9fc73e7a4d82c + docs/models/synclistresponsependingpreparedstackdependency.md: + id: 7eb4eea76fe6 + last_write_checksum: sha1:3c372f783521f5b5c4774e1d69fbcd876bbb61d5 + pristine_git_object: 8d19d11dd0916998f325dd4b631bfcbc6b75d097 + docs/models/synclistresponsependingpreparedstackenv.md: + id: de13e9709a6d + last_write_checksum: sha1:d9a54840c4d64eb0a2efb913f717484c83794282 + pristine_git_object: 35977c6c4f4576a648eada974ac8e22ee5f341e3 + docs/models/synclistresponsependingpreparedstackextend.md: + id: ab3a59bd09ec + last_write_checksum: sha1:3fc7591e3fcfe53f1358475e91420588d4f4d985 + pristine_git_object: cd9ae179b8434a7cefe9031c0d160f9e7ea5e966 + docs/models/synclistresponsependingpreparedstackextendaw.md: + id: 9a0e510d824d + last_write_checksum: sha1:7fbc2675adc993d28a4002dee48c77b69815f843 + pristine_git_object: ccebfaf0b778ed3d562d9dfe04be44f9d868338c + docs/models/synclistresponsependingpreparedstackextendawbinding.md: + id: a6324291de8a + last_write_checksum: sha1:ad7ca530cbebb2e3f93a4a268878589d1c0608e6 + pristine_git_object: 676145484aece9d3455e6f2b6c739c4f063f1c46 + docs/models/synclistresponsependingpreparedstackextendawgrant.md: + id: 89d2dc0affc4 + last_write_checksum: sha1:2c54d168e6fb3f52682846e41de9aacf3c7d1a45 + pristine_git_object: f49dadc7b83756715c9d1e8bfd9fd9c2caf79419 + docs/models/synclistresponsependingpreparedstackextendawresource.md: + id: d4fc75308a07 + last_write_checksum: sha1:54a57a65b2761388fadba768c24ebd06f45afb1b + pristine_git_object: eafa5d8aca9d7120e23aa1b23a8bb0daf05ff5f5 + docs/models/synclistresponsependingpreparedstackextendawstack.md: + id: "778379966153" + last_write_checksum: sha1:9e7f2be2321d4d2332f73cec4ce1edb5ebc5147e + pristine_git_object: ee9ea6a3f3aa86aaf322937187a9cc1cde9c0b15 + docs/models/synclistresponsependingpreparedstackextendazure.md: + id: 8a1fd7965cb5 + last_write_checksum: sha1:6020bb658aa79631f9583b39225eba6c48560f9d + pristine_git_object: 3377fb68dd66ef32fd5ba5dc956ff97dd29a5891 + docs/models/synclistresponsependingpreparedstackextendazurebinding.md: + id: eabdeae9c414 + last_write_checksum: sha1:6e6f5d971b0ed1d1c17095fca803380dd0272055 + pristine_git_object: 841f37385fe10813e02f4f66e4e7205d78d136d3 + docs/models/synclistresponsependingpreparedstackextendazuregrant.md: + id: 0d613b9a166f + last_write_checksum: sha1:f87ba1278b598002ee820bbd5291440be9671f9a + pristine_git_object: ee367cf945dd73eba171c0224a84c85098efbfd6 + docs/models/synclistresponsependingpreparedstackextendazureresource.md: + id: bd355ced1eab + last_write_checksum: sha1:bbdc53155dcd7545d73dc64277ab1adfbc866fa3 + pristine_git_object: ea5f28cb1196a223765c061081e1391decbc17d7 + docs/models/synclistresponsependingpreparedstackextendazurestack.md: + id: a54c24eed770 + last_write_checksum: sha1:d884dbe1ed1a685e3d620b26124aa766cdc02bc9 + pristine_git_object: 4ea9fcc6fb66adea5ea3eea2ae3bc8abfafa4822 + docs/models/synclistresponsependingpreparedstackextendconditionresource.md: + id: 312446f87a4c + last_write_checksum: sha1:61e980799371959401f2e4862c8a6d5d6811f8c2 + pristine_git_object: 58c05983a5a0ff1071f83e4f8a2edffd1598176f + docs/models/synclistresponsependingpreparedstackextendconditionstack.md: + id: bcc09d6431d3 + last_write_checksum: sha1:ab2e75442835449551069dfe7707673c6b04bb6d + pristine_git_object: 479a3536c6d78b67f7837cffacb9f2e95c862ac8 + docs/models/synclistresponsependingpreparedstackextendeffect.md: + id: 5d0e86377f1a + last_write_checksum: sha1:ccfaf2d2a489aaf31f58d2c01ea032935b758d82 + pristine_git_object: f2a86069898237afe446fd1dc64e529fb1a4df79 + docs/models/synclistresponsependingpreparedstackextendgcp.md: + id: de819da00205 + last_write_checksum: sha1:b2d21345dd3fbdb6ce02ecdcd529b9bfd101e0f7 + pristine_git_object: 540f947d47d10b9d3e4f71f9b539162bd882c042 + docs/models/synclistresponsependingpreparedstackextendgcpbinding.md: + id: 1297985fb1be + last_write_checksum: sha1:75f192edbaace6ea263d9031cf0709472d602360 + pristine_git_object: 19f58a2c589780a83241535bee7925eb85483c8c + docs/models/synclistresponsependingpreparedstackextendgcpgrant.md: + id: 4d058f31c7cb + last_write_checksum: sha1:452a7fd5391c137b161ec63ab222aec309be34e7 + pristine_git_object: d8d0703b4da5e9f27b293a6b7bcfb5c9e194d0cd + docs/models/synclistresponsependingpreparedstackextendgcpresource.md: + id: b7f2db53dc2c + last_write_checksum: sha1:da5405bb0628e5de8c9ea6dfc5ddd826ddc92f4f + pristine_git_object: de3fa8d10bae7f584a68d191e0b90ef3f6c9866d + docs/models/synclistresponsependingpreparedstackextendgcpstack.md: + id: bb58457d2f92 + last_write_checksum: sha1:892369c0cbd8332b4b4c94a0857d3a44d5892edb + pristine_git_object: 61d8e51aae1b758bc636ff337821ca32de2a7097 + docs/models/synclistresponsependingpreparedstackextendplatforms.md: + id: bef87e573003 + last_write_checksum: sha1:88203e0aa5c2410238c6782f3d6dbcec9e7cc51a + pristine_git_object: ab3768f54d2491cd0ee10f9518c5ccb82cd3c1d3 + docs/models/synclistresponsependingpreparedstackextendresourceconditionunion.md: + id: 981b30356c6f + last_write_checksum: sha1:a1cc4c0ceb86c58ec19a682c633243e5fe42b968 + pristine_git_object: cb2adc4c3fa429984ee9553db01671f153c47872 + docs/models/synclistresponsependingpreparedstackextendstackconditionunion.md: + id: a2b636ac4dd1 + last_write_checksum: sha1:2e91349f2a19684a4e20dfe1515c9ef6b7b797ef + pristine_git_object: 8a5ee11c7da7bbbac2f39f889495efea156c4101 + docs/models/synclistresponsependingpreparedstackextendunion.md: + id: 4bbf8d006173 + last_write_checksum: sha1:d843e5397430d061d8080c79cb1418cd0738a353 + pristine_git_object: c1bb51b869833c80ff55481aac025f9e28fb192f + docs/models/synclistresponsependingpreparedstackinput.md: + id: d85138187f77 + last_write_checksum: sha1:e8a8ce50146a27ac0e152cf89ef241cb1e3cde75 + pristine_git_object: fa42cddeb68f99a97ca99f3209c6dc721991b8a4 + docs/models/synclistresponsependingpreparedstackkind.md: + id: 18b3eef505d4 + last_write_checksum: sha1:87b3cf83a3785035c8b16f5f32457a02204c835d + pristine_git_object: 23ab8a81e6cff5d20f0bcfb60ef57c10e88dd37c + docs/models/synclistresponsependingpreparedstacklifecycle.md: + id: 33edfb2a0977 + last_write_checksum: sha1:167e90bd72c9c3840a8bb0abf0d306e89cf95db4 + pristine_git_object: aa93990615abef9e2afec8457f61b65e7c00beb0 + docs/models/synclistresponsependingpreparedstackmanagement1.md: + id: aec4e5287045 + last_write_checksum: sha1:9239d4de6d1b97d7896ec59c54362a701790db62 + pristine_git_object: 1ea565861d37982f1e501f51a048cf605679a4bc + docs/models/synclistresponsependingpreparedstackmanagement2.md: + id: 5ecbe74ffc52 + last_write_checksum: sha1:0054a18c43e2ca123544afdbd1a23b2c4d315a91 + pristine_git_object: d1fdaa1a69d00b67194051a2206e01f404558a5c + docs/models/synclistresponsependingpreparedstackmanagementenum.md: + id: 86f5a26501cf + last_write_checksum: sha1:959c3a85945f0bf228d7c207afcee977ea7b1a1d + pristine_git_object: 4002de3b81888784e4b53fae335efa34fe83dc72 + docs/models/synclistresponsependingpreparedstackmanagementunion.md: + id: af0a323867df + last_write_checksum: sha1:8cd2292345468708bdd4640cb89bc01148baca60 + pristine_git_object: a8ff123169e810021167c0adc64dd39eaa279615 + docs/models/synclistresponsependingpreparedstackoverride.md: + id: 1a73a5b1235c + last_write_checksum: sha1:1e2ce77c69cdeda44110c60d36c4bcc5277bf2fa + pristine_git_object: d3a99be04e1b66ef3bbe2e13cb80019ee0d82b07 + docs/models/synclistresponsependingpreparedstackoverrideaw.md: + id: bd824cb50f5f + last_write_checksum: sha1:c84e36cc2d6d27cde75a8d4ed0ec2cbcb0f133ef + pristine_git_object: cac6a93f107c6c48e6da4b1d67751cbcf8aaa503 + docs/models/synclistresponsependingpreparedstackoverrideawbinding.md: + id: 814f14b8d184 + last_write_checksum: sha1:2f3aff98c914012c7f0a0d618e92b6ed7d13659f + pristine_git_object: ed6beaa288376acb4a40ffa647d02f5157fad5d2 + docs/models/synclistresponsependingpreparedstackoverrideawgrant.md: + id: 1820676a34fc + last_write_checksum: sha1:20c4a01ed42407d156a834e1022397b00363fc30 + pristine_git_object: 897f3da0f1453a34705165534bc8a152f57d7fbe + docs/models/synclistresponsependingpreparedstackoverrideawresource.md: + id: abd018b42b3e + last_write_checksum: sha1:c273a4877e3692d73fa589be6eb873df575ee008 + pristine_git_object: 45de3977c9d634d87cc2ce1a22ff435320121ade + docs/models/synclistresponsependingpreparedstackoverrideawstack.md: + id: c2ad04d51f42 + last_write_checksum: sha1:656fcdce5a85c36c77c3d0f45a2956c9f05cd52d + pristine_git_object: 2d3b29759b857b1d462ac36211d69a77b553be08 + docs/models/synclistresponsependingpreparedstackoverrideazure.md: + id: f3f7afac34c1 + last_write_checksum: sha1:121cc1a7aa0fed2b8f7762f6d6e6f52d9b670511 + pristine_git_object: 989322e74ad80831d4cacdbc8fa95654cae8d174 + docs/models/synclistresponsependingpreparedstackoverrideazurebinding.md: + id: b9fe0ea69f04 + last_write_checksum: sha1:d98113402b0d2c73b2709dc6b04a394572f39843 + pristine_git_object: e0d4e663043b4790e4b5ecaf3b2aa20ffdb8b206 + docs/models/synclistresponsependingpreparedstackoverrideazuregrant.md: + id: 4ecdb3404617 + last_write_checksum: sha1:cdde6c698989bf47d9424f556d89b590a80d80aa + pristine_git_object: 9cf579c5f594fcbe067723692d579c959ebb9651 + docs/models/synclistresponsependingpreparedstackoverrideazureresource.md: + id: 81ea3633f313 + last_write_checksum: sha1:acb257594615ca0e6db5282330a0bd5002446906 + pristine_git_object: 6977f47ef265fe9d8d554284a89e86f82183c0c5 + docs/models/synclistresponsependingpreparedstackoverrideazurestack.md: + id: 927cc8600f0d + last_write_checksum: sha1:b4e3ded8cf1ec0597a70b2b2b37b986410937c9b + pristine_git_object: f32bfd7fb5fa8ebe05758a152448ec4d0440f87f + docs/models/synclistresponsependingpreparedstackoverrideconditionresource.md: + id: 00d80e6e3353 + last_write_checksum: sha1:453dbbbe992faa39edcc3c4c31d3d00cfee9804f + pristine_git_object: 5b3f164c663047a7ea9cbe6c8689800208b11ca7 + docs/models/synclistresponsependingpreparedstackoverrideconditionstack.md: + id: dcb77ffe2d98 + last_write_checksum: sha1:7349ea90b5f46b06c3cf6c5e7c36f0c8a7ddb3ae + pristine_git_object: 55ac71c17e3647dade36eb1a0723f5a025d14e67 + docs/models/synclistresponsependingpreparedstackoverrideeffect.md: + id: 255a59307f6e + last_write_checksum: sha1:47ea57057729bbd3d610ab2e69bc758bed616be1 + pristine_git_object: 79d2949136b0dbc729064c2676f774c35ab71aa6 + docs/models/synclistresponsependingpreparedstackoverridegcp.md: + id: a9ee6a582d3e + last_write_checksum: sha1:d4b79251a7e8b87129052f6ee10813a68be53e99 + pristine_git_object: 532931ffc6a0711c11f3919f0bd65b7e6e661fbe + docs/models/synclistresponsependingpreparedstackoverridegcpbinding.md: + id: 94bc7bf31f4d + last_write_checksum: sha1:fc3c0e6997e36604b6081472a293009decd1adba + pristine_git_object: 40e6fcd067fdedc43be89b13de8aa1c894f3d2c7 + docs/models/synclistresponsependingpreparedstackoverridegcpgrant.md: + id: a2cbbfb1a606 + last_write_checksum: sha1:57855f6e60a17323445b2fe05323573644d54b2b + pristine_git_object: 9cfd6a19a8ae490ee08ed4bbbdd8879e669d7e81 + docs/models/synclistresponsependingpreparedstackoverridegcpresource.md: + id: 198dd935f151 + last_write_checksum: sha1:d3281cf3dadb9dbed7895fe0aefae16594919c7a + pristine_git_object: 1b0b9bc51f86d119ab187ab29ca6b26bb0c1c1a5 + docs/models/synclistresponsependingpreparedstackoverridegcpstack.md: + id: d1b831e39142 + last_write_checksum: sha1:924b8767e81c008dcb1b81ff40314f7f45ba7d9a + pristine_git_object: eb1f21470012fdf39ec13ead977e53ce0d4b2123 + docs/models/synclistresponsependingpreparedstackoverrideplatforms.md: + id: 46e8ccad7f60 + last_write_checksum: sha1:d963a9704c89f2b7c056c92cd92116a37517aa11 + pristine_git_object: abbaa48c8d9aeee2d67b7a418be0bff8f889dcf0 + docs/models/synclistresponsependingpreparedstackoverrideresourceconditionunion.md: + id: c36a4301e356 + last_write_checksum: sha1:e8e109158a7640b164e03f68f132ebaad0305c55 + pristine_git_object: 24a1748a85b7c6339064c3970ccfbb8d74fd5fbd + docs/models/synclistresponsependingpreparedstackoverridestackconditionunion.md: + id: 1e7e48915fb6 + last_write_checksum: sha1:1ff344abb67b2da1e95993d377f41f5e3967e57a + pristine_git_object: 3077e979b0afd66fddf17f98a21745236b2331cc + docs/models/synclistresponsependingpreparedstackoverrideunion.md: + id: 01252268b4bc + last_write_checksum: sha1:d9d16d613da6cb9ac3043634f243e926054c8e19 + pristine_git_object: 1d5154bd4dc0d7425e2fba72dd5be4313fa349be + docs/models/synclistresponsependingpreparedstackpermissions.md: + id: c673ca759cf5 + last_write_checksum: sha1:e31bcd633584825eb0fe05f2c6b821beddadd8ce + pristine_git_object: ef787c09fd4245469bb3657e156a00cd5e026998 + docs/models/synclistresponsependingpreparedstackplatform.md: + id: 7dbed47654bf + last_write_checksum: sha1:c4a4a0bc1d112c7a6420bf811a486bd97a633711 + pristine_git_object: 5fdf1eda278af76354f58c4729a1406c8b727bf5 + docs/models/synclistresponsependingpreparedstackprofile.md: + id: e6602ac64c9f + last_write_checksum: sha1:b7707bf0647549b3643cbf9be7405a5b62e6b62a + pristine_git_object: c0f0e866bd56e6e136fde92b1a7f5af7ef9ea33e + docs/models/synclistresponsependingpreparedstackprofileaw.md: + id: 5cbaaccc4341 + last_write_checksum: sha1:1a498bd4e06ade38c0419ed0b551d7f37fb6df6c + pristine_git_object: 7f8aafaa6b79f43a2e5ace0494353c4309f81a4d + docs/models/synclistresponsependingpreparedstackprofileawbinding.md: + id: 179fc3f66e01 + last_write_checksum: sha1:c454b131fdd9bb71493aa8e117a045b0a2ca2518 + pristine_git_object: a06df7c448d6826826a8e380e0fe0c8f2a8d49b5 + docs/models/synclistresponsependingpreparedstackprofileawgrant.md: + id: f0efd205e889 + last_write_checksum: sha1:ae0522fc521d46a36535af946d3f8cb5fcffaed2 + pristine_git_object: 92383b9d1a1e2cfa69676f9ac0768694d4bf527c + docs/models/synclistresponsependingpreparedstackprofileawresource.md: + id: d52499477700 + last_write_checksum: sha1:64415a8709dc9f08ad0ee11dc8c807d9ec187d72 + pristine_git_object: a1e6ba56255a324aeec6164968053af072983a6f + docs/models/synclistresponsependingpreparedstackprofileawstack.md: + id: 1de2fb3a51b2 + last_write_checksum: sha1:be4274fbf6b50257a3ced369418d2de75640e1bf + pristine_git_object: 5641a079581607246ecae5da6cdbb0839dfb9e86 + docs/models/synclistresponsependingpreparedstackprofileazure.md: + id: b01e27affc68 + last_write_checksum: sha1:8b9a9de7918a29e3e557315b40e86b1a3f6bd5c9 + pristine_git_object: 21469a5fd373572e2ae33a67bcb54487ee001941 + docs/models/synclistresponsependingpreparedstackprofileazurebinding.md: + id: 58b4c4154934 + last_write_checksum: sha1:d071e9829687d5be8d42183c76339681a768ae82 + pristine_git_object: 1cd643e2259a138369878be0bdd00c5b4824d9a1 + docs/models/synclistresponsependingpreparedstackprofileazuregrant.md: + id: d89d7aa1620b + last_write_checksum: sha1:bafac7bf126f9015b25191a3fd67dc36e47633eb + pristine_git_object: 32e3897b351a91dc0065f8f10304c7eed0652b25 + docs/models/synclistresponsependingpreparedstackprofileazureresource.md: + id: e0882293671f + last_write_checksum: sha1:f9a5648b6cf6a3ad67305d38e77e4c16545bad69 + pristine_git_object: d704640e2162ab08418639a3e33c350d9b854429 + docs/models/synclistresponsependingpreparedstackprofileazurestack.md: + id: 54ddd820736e + last_write_checksum: sha1:4c7813c072d83a388e463352d86cf4f35d439d69 + pristine_git_object: 91e7d5feb037adbd0777f868a6287e33687981ce + docs/models/synclistresponsependingpreparedstackprofileconditionresource.md: + id: c929e8de82d1 + last_write_checksum: sha1:28ed9dafb042176c5ec26e325a99ea78d96d2640 + pristine_git_object: 9edf4c24447a9d28797a4e9631b6ca7d10e77a15 + docs/models/synclistresponsependingpreparedstackprofileconditionstack.md: + id: ce899aa48b52 + last_write_checksum: sha1:cef54443da14705a226ae70e212964a9b018a444 + pristine_git_object: 9b5786900d4d1d41b596d556a642b0b5dfbfc03b + docs/models/synclistresponsependingpreparedstackprofileeffect.md: + id: c30c8dae2889 + last_write_checksum: sha1:8a961e1aa8cbef9731bcbc39be137daf17cd239d + pristine_git_object: d44887463ae85d513a1291b11f095c73bfc141a3 + docs/models/synclistresponsependingpreparedstackprofilegcp.md: + id: e2d572c79dee + last_write_checksum: sha1:2f31d9061905f52dfaa8c9161b3ba18aef6d93c1 + pristine_git_object: b8dfd20be2d32812c958e3f6b7e267a2d6b85b49 + docs/models/synclistresponsependingpreparedstackprofilegcpbinding.md: + id: 55776920af4f + last_write_checksum: sha1:c078a74a77a9993dd55478a331a4bfa1a6329ee5 + pristine_git_object: a55b9a0b202f3abbcee027ea553c1d4442ae68ec + docs/models/synclistresponsependingpreparedstackprofilegcpgrant.md: + id: c4e31abe8bac + last_write_checksum: sha1:56b21410da7235d9f7e71ea0af98160ed22567fe + pristine_git_object: fe33f855f9568897d9e05f90d92e5a5566e9ddca + docs/models/synclistresponsependingpreparedstackprofilegcpresource.md: + id: c27dd292d080 + last_write_checksum: sha1:6e40d3518f93167500cd20057109cdca6fecb9dd + pristine_git_object: 12b201bc732f4256a714fc3d7555471c42260755 + docs/models/synclistresponsependingpreparedstackprofilegcpstack.md: + id: e9f808cd80bb + last_write_checksum: sha1:8246ba4972d1d8555c6e21c77de8fefebbb8cfcd + pristine_git_object: 64d4f13333557afbeeb779e3d1ecc3728b8549d3 + docs/models/synclistresponsependingpreparedstackprofileplatforms.md: + id: 983743ce432a + last_write_checksum: sha1:599c4159b6ccdade46ab7368627e98998d85b6eb + pristine_git_object: b5de6e4679af5b0b17d928566e6124dd5d5699ee + docs/models/synclistresponsependingpreparedstackprofileresourceconditionunion.md: + id: 5c6e261ff490 + last_write_checksum: sha1:c3f439605a7990cdfdfa19876e12fa576bda39e6 + pristine_git_object: c1e46f793a5df71082a753ea5b661c14fab052bd + docs/models/synclistresponsependingpreparedstackprofilestackconditionunion.md: + id: bcc62c1fa742 + last_write_checksum: sha1:dae0d0059bb757d884c8cc6b018bb3acbc41a19f + pristine_git_object: 05debe5abcbf918a0fdc46f716d34eca68b45dce + docs/models/synclistresponsependingpreparedstackprofileunion.md: + id: 756d94ef6d33 + last_write_checksum: sha1:58c0fdd71ff6581df9a017d27c3e1f6891e539fb + pristine_git_object: 4c8fe67a7dfbe5f6c287dbe0fe7094cff83ad125 + docs/models/synclistresponsependingpreparedstackprovidedby.md: + id: 036613d005f0 + last_write_checksum: sha1:d9b72ac2d4460e1211ccd219c9723f9bb9c9a248 + pristine_git_object: 1ecf00f7a352b090e11da7231c672ca70fce90a0 + docs/models/synclistresponsependingpreparedstackresources.md: + id: 7aa5e65df0a7 + last_write_checksum: sha1:bf437e7c46a1ec1df52803a3fa3972ac46c0ade9 + pristine_git_object: 1e0b90de3674947e14e8a8c827103a32f3d8e862 + docs/models/synclistresponsependingpreparedstacksupportedplatform.md: + id: 971de12ddb4e + last_write_checksum: sha1:fff4d79f534a8ae306f9aa3922d6c519c41d237c + pristine_git_object: 46b04d63e575feeda44f6f16817bf3721a00863a + docs/models/synclistresponsependingpreparedstacktypeboolean.md: + id: 5b912810273f + last_write_checksum: sha1:3888bf4a361b491fd03b4c887611ba3c16520940 + pristine_git_object: 0a001b257d1e879bdbde5702fd49951b79bdae9e + docs/models/synclistresponsependingpreparedstacktypeenvenum.md: + id: 81e3562834f1 + last_write_checksum: sha1:df4c552504d2ee25d6328aad8d9ef22ac7c71863 + pristine_git_object: 7b3ff275da908dd33a4f6db87291af23a3365732 + docs/models/synclistresponsependingpreparedstacktypenumber.md: + id: 100c771f5694 + last_write_checksum: sha1:4dceaadc66c5a5cf98c16b09058485e456bfd1dc + pristine_git_object: e0a73408199951c4822133739e748d94afd502d0 + docs/models/synclistresponsependingpreparedstacktypestring.md: + id: 2ba5e7060060 + last_write_checksum: sha1:000eeb9f44c1f0dbb210ffeb98eb842535f231ae + pristine_git_object: 7125a3edac73a537047c4be04e2aae791c123074 + docs/models/synclistresponsependingpreparedstacktypestringlist.md: + id: e665e5f2c6b7 + last_write_checksum: sha1:99d175e8c2be96e254a0ecb701c84a509a7fe7a3 + pristine_git_object: e22c7cdfc6129136dd1dd5ddf64526598eba55fc + docs/models/synclistresponsependingpreparedstacktypeunion.md: + id: 01ef44129e0b + last_write_checksum: sha1:d9d4299ab3d5fb90b935f5334fe69a39ee13d744 + pristine_git_object: 4baa1a6678e3efec13458d61d86ebd3ae73a86e6 + docs/models/synclistresponsependingpreparedstackunion.md: + id: cf241697933c + last_write_checksum: sha1:baf3efda4e40bada644ab9a928a1e2be36f44c63 + pristine_git_object: b6d60392c85e5c5f24b860df443605fa69c1e49f + docs/models/synclistresponsependingpreparedstackvalidation.md: + id: e155bfd2f855 + last_write_checksum: sha1:d1e983594865d6547a2407c2d17083d42fd2dc8c + pristine_git_object: 4d8b015893f6e27de78d1f2125f46f6e7c24ca54 + docs/models/synclistresponsependingpreparedstackvalidationunion.md: + id: 8edacd6666a1 + last_write_checksum: sha1:ed6b631999a7e0f83ddf416ff4137208250dc23d + pristine_git_object: e815596432db54d840f687ecdfea1299963288ec docs/models/synclistresponseplatform.md: id: 7e4093aecd0b last_write_checksum: sha1:c51090b6bd54f56568bd999bf3236317b1ba27d6 @@ -21900,44 +24760,412 @@ trackedFiles: pristine_git_object: 2920500559cab47f1a5f6f1fbd123693948ccf35 docs/models/synclistresponsepoolsautoscale.md: id: 43286c1fe84e - last_write_checksum: sha1:343f51d3cc40540017442d63a37fa1c37ac703ca - pristine_git_object: b4d2d4c0e2df98fd87015a7caef004f4ed6917e5 + last_write_checksum: sha1:1a2c5a946b6f65bf25a7b59d7ea034d77e24c4e2 + pristine_git_object: 6032bbb314100f941ec4ce29f53d21f19795ff77 docs/models/synclistresponsepoolsfixed.md: id: 2d30cb397e60 - last_write_checksum: sha1:151db956effa6943e0f4c41c3e65afbec4d96617 - pristine_git_object: afeb652a3c16e8ddad5661ed334a032b6eface13 + last_write_checksum: sha1:7f5bee92245f3895c2fb22590f040fb6ce430560 + pristine_git_object: 5388971810f689df8b1cdd25492c7c74d41a4bc5 docs/models/synclistresponsepoolsunion.md: id: 37a5d91ccd03 last_write_checksum: sha1:0f5cc4f99adf3b2b5e12321520ca79c7bb279597 pristine_git_object: 33aa9ada0a38b88c0fa89fce3ea4cb8b4f79fb55 docs/models/synclistresponsepreparedstack.md: id: b538a8eee672 - last_write_checksum: sha1:04e76d79b2669e4bb3205a015b7547de051402f4 - pristine_git_object: 4ac8d5cbe81b32503957fceb638c90b5d0f061a1 + last_write_checksum: sha1:e2730687a6b001adbb6c2f2b77e5c549a572aefd + pristine_git_object: 89cbad1996e84a273b3d6ec4c2cf4c330aa4ac51 docs/models/synclistresponsepreparedstackconfig.md: id: 3c168a0115fd last_write_checksum: sha1:ba3b2fdd57e6bb8a52ca37642bb505d25d722a5a pristine_git_object: 259c58649a8da06ff186f64cc513d18f7a18d2d9 + docs/models/synclistresponsepreparedstackdefaultboolean.md: + id: 7d78a3e89b1d + last_write_checksum: sha1:425f15e65a5da2fa75cf0cda50537f6b1316b851 + pristine_git_object: ee5211172825245967a1f64e83110f0409e9c991 + docs/models/synclistresponsepreparedstackdefaultnumber.md: + id: b9eb3192477c + last_write_checksum: sha1:bf7a95a388b433750b84d6cb0d6e179dcfb8782c + pristine_git_object: 3ba264879a7975e497028be5bbde0da1e9c0c869 + docs/models/synclistresponsepreparedstackdefaultstring.md: + id: 47099a94eb29 + last_write_checksum: sha1:1f43539250d9aeae1d204444333cec56a1d59fcf + pristine_git_object: e2dbe25763926f8c6000367c0ddb2e08e60841e3 + docs/models/synclistresponsepreparedstackdefaultstringlist.md: + id: ea65ff9094ea + last_write_checksum: sha1:6f47e42969855f010f2c95bb4cba6ce34ec2b6f9 + pristine_git_object: a3e77d7627560f57db527d67dd1e2336396ac8b8 + docs/models/synclistresponsepreparedstackdefaultunion.md: + id: 6856f0da9125 + last_write_checksum: sha1:0847603cc4c70b7ba62ce1e6b458afb6b8c39655 + pristine_git_object: fab2963b748030297a04b677238f7547adb3f06a docs/models/synclistresponsepreparedstackdependency.md: id: 29db22954306 last_write_checksum: sha1:7fc3f0a82607f884696d3b97824577b999fd1004 pristine_git_object: f41ce286a4e1341198ad8a43f1d3b19cb383ec22 + docs/models/synclistresponsepreparedstackenv.md: + id: cdd39933b76c + last_write_checksum: sha1:64d6b910daf954f287ec8170cab34ba967c036a8 + pristine_git_object: e5593c9c2e02673e72e964d10c272778acece514 + docs/models/synclistresponsepreparedstackextend.md: + id: ffca98803257 + last_write_checksum: sha1:fba6c2a30b931aee89cd44049d7cb45227892de6 + pristine_git_object: 8699e914581dc4e07ab2c6cbd4f720bfb9642e27 + docs/models/synclistresponsepreparedstackextendaw.md: + id: 64bf292acf1e + last_write_checksum: sha1:3b792e8f6a7af9d5c027da6f90e4e5d971b41266 + pristine_git_object: d4bffb43ce8ccf1b06d8dd316c2b453812e551e3 + docs/models/synclistresponsepreparedstackextendawbinding.md: + id: e1e3365e1cf6 + last_write_checksum: sha1:856c58eab2ed85b427a96fae28e5d9bf7da31e5b + pristine_git_object: 18f414a61e5f890c4ba484dcff93fd2eaa5c91a7 + docs/models/synclistresponsepreparedstackextendawgrant.md: + id: 23405e43a00a + last_write_checksum: sha1:ff035b4747bedd437d190df2adfc23b89451cd3a + pristine_git_object: 72dc08b2a3c58d1ab93b80982a456302e528bd77 + docs/models/synclistresponsepreparedstackextendawresource.md: + id: aa104e4b470f + last_write_checksum: sha1:fd1ea71352589b823cccdae3dc4a544a28ac8afb + pristine_git_object: 4689dd7dc41942eadf9b460b04a6ffb55c24b651 + docs/models/synclistresponsepreparedstackextendawstack.md: + id: 0dba6b93d67a + last_write_checksum: sha1:7da584cdccdfc27e737fe062f11d6e39db9a9b89 + pristine_git_object: 89a0ddd8d475b2e1cb95e019636d0eb956e228e1 + docs/models/synclistresponsepreparedstackextendazure.md: + id: 7c405ade0fd0 + last_write_checksum: sha1:0956954ffd49d71ad982b05ce7e12d98edf07a1a + pristine_git_object: 4ffc46e83daf4895d449977387a5031dd642f2ae + docs/models/synclistresponsepreparedstackextendazurebinding.md: + id: 4b7b761285e2 + last_write_checksum: sha1:963c06e2503ffb823545fc7572567edec0e66591 + pristine_git_object: 7e1cb44218e1c3f435ab4a57312663233108661d + docs/models/synclistresponsepreparedstackextendazuregrant.md: + id: 4fa6d1696e89 + last_write_checksum: sha1:54e3d2f8565f90ca61d09c9dda3d339c2f195de4 + pristine_git_object: a7472a8efbaa4521d7d9dcb0ca7d65493d9579af + docs/models/synclistresponsepreparedstackextendazureresource.md: + id: 5ed9fe88e41a + last_write_checksum: sha1:426be595a91e95c2d1f8f1c662b343bb6ff77d40 + pristine_git_object: 3efd17682a62a418ec866268ea5790b7db8fa3a8 + docs/models/synclistresponsepreparedstackextendazurestack.md: + id: 1cf984ab8957 + last_write_checksum: sha1:0a5616bf18fac155d031576d9efa230fe73bf108 + pristine_git_object: a08443e1d7d05c35ffc57a22fda0f1b04307960d + docs/models/synclistresponsepreparedstackextendconditionresource.md: + id: cb870785d493 + last_write_checksum: sha1:a47423dc29e13a470a2465db8403db4f22baf5a7 + pristine_git_object: 8556366448c1e4be0f482d5056a6cfcb52c83e76 + docs/models/synclistresponsepreparedstackextendconditionstack.md: + id: 9868a2821119 + last_write_checksum: sha1:5adb42127ec9585c1422f785e0830cdeead2b3b4 + pristine_git_object: c8c403c316322610a9bfddbad89266c61d577d2c + docs/models/synclistresponsepreparedstackextendeffect.md: + id: 4798e3363fd6 + last_write_checksum: sha1:0b4a9d0e126556805e115e068a41d02a9ab9bbb3 + pristine_git_object: 8744d27298235588f8f2733a39756e77a3202bb4 + docs/models/synclistresponsepreparedstackextendgcp.md: + id: b5be39673d51 + last_write_checksum: sha1:ef39efcdef6ccd844eff21424d6b74398b715f5a + pristine_git_object: 096c06431f8bd6522a0bbce0dd68b53fe1b33730 + docs/models/synclistresponsepreparedstackextendgcpbinding.md: + id: c180771cfaf1 + last_write_checksum: sha1:8dad736bb709c68e5edfaae731fe273f86263b30 + pristine_git_object: 32cd007c3dce88a2a33d937bc71a95f8302ba881 + docs/models/synclistresponsepreparedstackextendgcpgrant.md: + id: 5edd7678f227 + last_write_checksum: sha1:8330dae774dd77c3d40606fb2aeff271a03d5ae3 + pristine_git_object: cd5cd06dbf1cb5a6a00ba1e8de40d5cbd24889a9 + docs/models/synclistresponsepreparedstackextendgcpresource.md: + id: 493fdb0ebab7 + last_write_checksum: sha1:4a70871dba5d215558a9d0a708570f9a86710232 + pristine_git_object: 69680b249029d7d6d0b7fdf7e313a29280b8ecb6 + docs/models/synclistresponsepreparedstackextendgcpstack.md: + id: 92cb8f768b9d + last_write_checksum: sha1:50a5b13bbc93834a59f3a0566a077284e9fcd017 + pristine_git_object: f044a61d30e17683cd1778915cc6ec2d6a19cf56 + docs/models/synclistresponsepreparedstackextendplatforms.md: + id: 21c31f4f9648 + last_write_checksum: sha1:bfbf9751d15061743d4c82c7fd690ac9b41a1967 + pristine_git_object: a945321f12c2a29e21cd3f3b331cad8ebd97e075 + docs/models/synclistresponsepreparedstackextendresourceconditionunion.md: + id: b016b7f11448 + last_write_checksum: sha1:a5b4b4315e1a77817dd4fa6a9dd14a380df10b6d + pristine_git_object: 7ba97ea5a8cde35732e2736e22fea2aa99e778da + docs/models/synclistresponsepreparedstackextendstackconditionunion.md: + id: cd78653a732f + last_write_checksum: sha1:f2f71e27ef4ab9681e5fe348026cc59bff23a836 + pristine_git_object: 9388a268d425db96b668d66b2a3154fc48174d14 + docs/models/synclistresponsepreparedstackextendunion.md: + id: 2c347867f574 + last_write_checksum: sha1:d9cffc9ab5a5fce99f68f182b64e04238ee81fee + pristine_git_object: ae64529e4a91f95502eae85c812c81cb91e03048 + docs/models/synclistresponsepreparedstackinput.md: + id: 274777699a8a + last_write_checksum: sha1:449cdbee760b6a6840ad8946b9ae9f7e2f4ddd5e + pristine_git_object: 66a9934739b8ae63e54922447a4c219616778806 + docs/models/synclistresponsepreparedstackkind.md: + id: 94050e40b33f + last_write_checksum: sha1:9d8a6404e3ac204c71067bc9ab6e6e6a294bbe0a + pristine_git_object: 31916cf514bcf9e953ed7c5a59b226be8793a613 docs/models/synclistresponsepreparedstacklifecycle.md: id: 8c7aad51eb8e last_write_checksum: sha1:3883f4d255e2e057613c3bb2d6752a2cf2bf106e pristine_git_object: 896cd2c03b17489f71231f5d79923cab32234740 + docs/models/synclistresponsepreparedstackmanagement1.md: + id: db8d582e8e4b + last_write_checksum: sha1:4756a97bab6e1ff34de6eebd3106aad7e250c39f + pristine_git_object: f7ed73414550e31bc1dd4d61a9936e1c85fb8dee + docs/models/synclistresponsepreparedstackmanagement2.md: + id: f3c21aae3d5c + last_write_checksum: sha1:56f9b7d50444a2b9ea9a5106fb63daab74bb2018 + pristine_git_object: 94ecc8182ae63f75edb5034399c38ff7705ff52b + docs/models/synclistresponsepreparedstackmanagementenum.md: + id: ab1331351d95 + last_write_checksum: sha1:6f96d6dfc8e6abddae6b29a9732fe3c3b304b425 + pristine_git_object: 77fb3f690fb7f40bf58c6fb3eec6e404f15c7664 + docs/models/synclistresponsepreparedstackmanagementunion.md: + id: cf7969a449f2 + last_write_checksum: sha1:71402bcbd21ab76a75f178185813f58a43b15d4f + pristine_git_object: f5ed3fee3c55e69225694719b4957a35a073bb78 + docs/models/synclistresponsepreparedstackoverride.md: + id: 57b575979e55 + last_write_checksum: sha1:943fab03fd245e232680c458b354d5e4c1b5630a + pristine_git_object: 66e90e1b508da177357d9978740ef8b2ebb98ca1 + docs/models/synclistresponsepreparedstackoverrideaw.md: + id: 62a66ea39571 + last_write_checksum: sha1:42ec50e8abc3e4478b56d8a95cb32571f5a06087 + pristine_git_object: 3b2c2be4fba409671f1c3613770345c117ceaf32 + docs/models/synclistresponsepreparedstackoverrideawbinding.md: + id: be7ec1f504c9 + last_write_checksum: sha1:be6e9e088267ff2d4df5a8781037837d0353eeb4 + pristine_git_object: d3cc7553ebbdcee3ba3deeec5a55fda22cbb29cb + docs/models/synclistresponsepreparedstackoverrideawgrant.md: + id: 6852a2236296 + last_write_checksum: sha1:47e0ca7d587c818bc582fad45bfd4a581853262b + pristine_git_object: 52a3980970ac770d3076c7c47f93fa7a0447fcd4 + docs/models/synclistresponsepreparedstackoverrideawresource.md: + id: 1ea113d70330 + last_write_checksum: sha1:0f46e8aeb829267d8ecec4fb3dca3b75308abe4a + pristine_git_object: 6ea5d6974e351bf027be84bca29b24a5eb5af09d + docs/models/synclistresponsepreparedstackoverrideawstack.md: + id: c2e320e0cb10 + last_write_checksum: sha1:33a4a1e388689d4d436f223374fb708941d26194 + pristine_git_object: 3970c3fd2ec23b4a48fb1b6ffb2975908b168c50 + docs/models/synclistresponsepreparedstackoverrideazure.md: + id: 06f3472be5b7 + last_write_checksum: sha1:91edc8c765e18d59b32878abe08ad71cde390d14 + pristine_git_object: c69c1f29d85d04da3f5ee3e52af656c504694c28 + docs/models/synclistresponsepreparedstackoverrideazurebinding.md: + id: 34178f7e4449 + last_write_checksum: sha1:9253d20ea8bddb49e73395544f3a97d931ae4016 + pristine_git_object: eaa05199bb5677cb136ed9705b051e78372b1bf3 + docs/models/synclistresponsepreparedstackoverrideazuregrant.md: + id: 10c3c1b5991e + last_write_checksum: sha1:12d74e02727d6702bb661a8fe1410564a4b14e90 + pristine_git_object: b57d2bf877fe5cd41969426999cc7917c67a3113 + docs/models/synclistresponsepreparedstackoverrideazureresource.md: + id: 0865898fb878 + last_write_checksum: sha1:4e34dab7dc22122c03df114195d5b0acbaba33d1 + pristine_git_object: 00ef78ef863005519a95093dc7dad3e08a75343a + docs/models/synclistresponsepreparedstackoverrideazurestack.md: + id: 162383a39de5 + last_write_checksum: sha1:03c75775880b1f021f214d2845875ddbdd87ae28 + pristine_git_object: ab78b9cc4ed778c4d7267a808bebbaa6fe2e547e + docs/models/synclistresponsepreparedstackoverrideconditionresource.md: + id: dac35f04f847 + last_write_checksum: sha1:30a151b312ee867173d05458f825a62517233fd5 + pristine_git_object: 3e6ddfd4cf9c06e9d5d40b921b1a697286e121e0 + docs/models/synclistresponsepreparedstackoverrideconditionstack.md: + id: 03a96c2798f2 + last_write_checksum: sha1:4162a1ca41fc930ad121d88fc708a7293afc33eb + pristine_git_object: 89616101b3bee52acfca53d4ab67ff688b82c886 + docs/models/synclistresponsepreparedstackoverrideeffect.md: + id: 37fb33df26fd + last_write_checksum: sha1:cf2ef26657d84f69e26182c7cca3743bfc8cbf92 + pristine_git_object: e4004fc50d732cd401d6ec616e1a186586e87e8f + docs/models/synclistresponsepreparedstackoverridegcp.md: + id: e748db1d331d + last_write_checksum: sha1:1166c6e8b226460657f8dc6f7dfb2a7620ba919f + pristine_git_object: 50d7ca221d410becf127dea07edf3c86a4e8c9fa + docs/models/synclistresponsepreparedstackoverridegcpbinding.md: + id: 63f91c94ab58 + last_write_checksum: sha1:3dfe8202d5f4657e1bca3b9888987ccfc455f4ed + pristine_git_object: 43e3fcc7e0663ec7512256a8482becfc15db4f6e + docs/models/synclistresponsepreparedstackoverridegcpgrant.md: + id: 33ec2bb6f766 + last_write_checksum: sha1:4addb8e4ddd3c6f8363237cede5e7bc8027c60a6 + pristine_git_object: e3fe6f07f0145fd7f1b21a9e780462d5ae97b7fc + docs/models/synclistresponsepreparedstackoverridegcpresource.md: + id: 85659b260632 + last_write_checksum: sha1:4464441643739458a5a45f444eaafdeb6b03765b + pristine_git_object: 860093917fea04d418cceffa6d8188895404acaa + docs/models/synclistresponsepreparedstackoverridegcpstack.md: + id: 95a9bff5a373 + last_write_checksum: sha1:20f7e945ead6535834e7977da4f127125b6dfd31 + pristine_git_object: 85c150c0ff829c611e6c34e73427edace1b1b83f + docs/models/synclistresponsepreparedstackoverrideplatforms.md: + id: 621b91a7dc9a + last_write_checksum: sha1:5affd375f6ad70206955c67813a08916cd430a18 + pristine_git_object: 002eb9771acfa13a73a7fe5c4cecb2354709ef10 + docs/models/synclistresponsepreparedstackoverrideresourceconditionunion.md: + id: 62819701450b + last_write_checksum: sha1:a216c91675068de81c7937741ca8c51236ed3beb + pristine_git_object: a3e2f5301bdad07faed2247e50be877dfef48ccc + docs/models/synclistresponsepreparedstackoverridestackconditionunion.md: + id: 98eeb2fedae7 + last_write_checksum: sha1:961ab95ed926ae6ab0fa8d83f6e5a026a7d130ae + pristine_git_object: bb0b28662bbd1f1bee2e5f8b3cc6d8c8437e26c9 + docs/models/synclistresponsepreparedstackoverrideunion.md: + id: bc32b55e560f + last_write_checksum: sha1:d1cd91251de85c143d7a9141c2b20093b25ad05e + pristine_git_object: fb009ec50ca43f3d187e8b19c6a12cdffd9f6b2e + docs/models/synclistresponsepreparedstackpermissions.md: + id: b8a41924f76f + last_write_checksum: sha1:52127bc7e19b16d942ce4ca8f434264fb4ca7f12 + pristine_git_object: f8a1684ff44d137c4809c26136180101cd9ce0ca docs/models/synclistresponsepreparedstackplatform.md: id: b882acd2e678 last_write_checksum: sha1:08ede8423e8eedc95b1c8c35aaafd5070e5f23ec pristine_git_object: 06e292ca235c6ba0efd5531150feb247836f71fa + docs/models/synclistresponsepreparedstackprofile.md: + id: 18a60acd4d90 + last_write_checksum: sha1:dec2f026644e637ea73e07ef4613f74a47bba627 + pristine_git_object: c74e29fa5dd02ef12a69ab49dec13a287948ccc7 + docs/models/synclistresponsepreparedstackprofileaw.md: + id: 8c73d9315c93 + last_write_checksum: sha1:94e3c517fbb421c8da7f71a0c961e29cb311f345 + pristine_git_object: 70f2497b4dd0cb2ac8e94d100c118617e27a5897 + docs/models/synclistresponsepreparedstackprofileawbinding.md: + id: b5fcc6f2af09 + last_write_checksum: sha1:7b63e6c0bbc51f8a896712e4fbb65b012fb4a7fc + pristine_git_object: df92aebd801e2cc854674fcddb07b6a32a6f397e + docs/models/synclistresponsepreparedstackprofileawgrant.md: + id: 2814fa05801e + last_write_checksum: sha1:d95367980a06ffc9823cf8769d98ff1b8cb6a78b + pristine_git_object: 38eab0eedd3bf61c52a09de449e07d45e273cb12 + docs/models/synclistresponsepreparedstackprofileawresource.md: + id: 5867d2de2a6e + last_write_checksum: sha1:ac7c1b1467b482e2c99ffa7456b8b63b09c9c824 + pristine_git_object: 6f60cbdfffbb2187dfe0717ea1a4253c1aa0c3cf + docs/models/synclistresponsepreparedstackprofileawstack.md: + id: 9d34ce0e64a3 + last_write_checksum: sha1:7737aebe6af14fa6fea4a47c16ded4ffd4e8d322 + pristine_git_object: b81b193e0b6f2a24645c511fcfbf5cbb718499ce + docs/models/synclistresponsepreparedstackprofileazure.md: + id: 73fe1f4dd840 + last_write_checksum: sha1:a0ffd793caad7e86a89f252925b8e09f22b546a3 + pristine_git_object: e3de201292558aadf127a3bcf55dd56e63b919b9 + docs/models/synclistresponsepreparedstackprofileazurebinding.md: + id: 7b61d959bc17 + last_write_checksum: sha1:40a00b86be17795b77b3f4d9b531c0ecac171211 + pristine_git_object: ac48e1d512661e1dd46b8dd3526b3b8a93131c5e + docs/models/synclistresponsepreparedstackprofileazuregrant.md: + id: af85d9c0b75b + last_write_checksum: sha1:7e5c6e48f62f47d51790bacc487002e872018084 + pristine_git_object: 639bff2a6540511e6cf04e2a3ff44665d9578c2d + docs/models/synclistresponsepreparedstackprofileazureresource.md: + id: e9afda7f5cc3 + last_write_checksum: sha1:cce97ac70ab8521a0120f628f51923df3842488c + pristine_git_object: 8b4fde0226d300d721a5973ace1b57a71de98c64 + docs/models/synclistresponsepreparedstackprofileazurestack.md: + id: c37ab68e550d + last_write_checksum: sha1:dee18e48af8159985d03644a85be20ac89572753 + pristine_git_object: 29d144bb3aaf44bd86e4a591dbe25e759fd8338a + docs/models/synclistresponsepreparedstackprofileconditionresource.md: + id: a1cf5f0923d7 + last_write_checksum: sha1:275681aab3b65b65a75302c111b0c6db44f134b2 + pristine_git_object: 5103919fd0900850b75259ee71daae052c2f0ae2 + docs/models/synclistresponsepreparedstackprofileconditionstack.md: + id: c45f6a0d5b90 + last_write_checksum: sha1:7cbf19d164ce1c1eea88e03085e5981eedce2e68 + pristine_git_object: 9760ee18ad84a754c7a5a369ef14a7d46822b601 + docs/models/synclistresponsepreparedstackprofileeffect.md: + id: 489277b440e7 + last_write_checksum: sha1:93ac670f629ab70150abb95497d35b67a407c034 + pristine_git_object: b88b51e10df6ef8f2fc333222c6127ca6116ac46 + docs/models/synclistresponsepreparedstackprofilegcp.md: + id: 81a96f42259f + last_write_checksum: sha1:6a61ac3da5201223f22e2cc14f92f9ad17297a20 + pristine_git_object: f42099dcbaace0afa3bde3b477a4482d1199e9da + docs/models/synclistresponsepreparedstackprofilegcpbinding.md: + id: e8d1876aebf2 + last_write_checksum: sha1:2bb1d7d81689c394c97962254572fa33a4779c1c + pristine_git_object: 545362ad6e91b66b1bfee52f9aa5302995cc7f88 + docs/models/synclistresponsepreparedstackprofilegcpgrant.md: + id: f6488f26b647 + last_write_checksum: sha1:6a2f5eb441000e78251e60e35d3f6c4f4ff41fb0 + pristine_git_object: 86f4cc5e547fa618320af59e2d785537ed687241 + docs/models/synclistresponsepreparedstackprofilegcpresource.md: + id: f48baa43123e + last_write_checksum: sha1:14a27e4eea23edbb3dbb8484954bf593c389873f + pristine_git_object: 5a840ee3f33d9e90f02256d61de113144868f44e + docs/models/synclistresponsepreparedstackprofilegcpstack.md: + id: d6204d1927d2 + last_write_checksum: sha1:6794b050b9a10289f96a51d81419d6781f9093b0 + pristine_git_object: 0099b8967f7db79ac7cf1f3d2d2117c670caadf1 + docs/models/synclistresponsepreparedstackprofileplatforms.md: + id: 8c8f7136093f + last_write_checksum: sha1:dfe35c97dd25b5ed7859d94e3c55c0da555ca787 + pristine_git_object: 2d46d491b00871e9cfa2bbb0cc40910a4bca866e + docs/models/synclistresponsepreparedstackprofileresourceconditionunion.md: + id: b3c73ced6bb8 + last_write_checksum: sha1:a753c68702cbeb7bf955cdf6f78223b6cbfd7b71 + pristine_git_object: 7d6bb73b7ff8e548114a7dd09a1c2a94efaa1a25 + docs/models/synclistresponsepreparedstackprofilestackconditionunion.md: + id: a5d2a180ec9d + last_write_checksum: sha1:2cd69f3e22b5d8998b99293af4802e79244eae92 + pristine_git_object: 0ac8882a2ee6cc8b965cc3fb0078b28e7b7590fc + docs/models/synclistresponsepreparedstackprofileunion.md: + id: f13869c3e0ad + last_write_checksum: sha1:4cd86d590fac004713e8eed05f85dfc6c987bdc7 + pristine_git_object: ae19db626ca88540d38a0994e304f70226aef579 + docs/models/synclistresponsepreparedstackprovidedby.md: + id: 1908096ca9fe + last_write_checksum: sha1:3eb6a9c984227d241732a8cd6244d61fdd9b814f + pristine_git_object: 5c58e4bcb1a0a9d644b959f7d6645a9eabd11209 docs/models/synclistresponsepreparedstackresources.md: id: 7cf3b5cabc07 - last_write_checksum: sha1:f649c3f7ab21c0a763be392c6fed2f747bec6ca9 - pristine_git_object: f041dd3ff5c4143e4fe41d33c02a05dca92325dd + last_write_checksum: sha1:eff5f730beb93296cdce0d1d0ee2c7ccc359eaf4 + pristine_git_object: caad6e3f068c05304df64836b1e1f4fec28903af + docs/models/synclistresponsepreparedstacksupportedplatform.md: + id: 2d126f3c8d8c + last_write_checksum: sha1:d46d6a1328572668e7bcd1ca893147bc2bf7639e + pristine_git_object: e9fdfe5aa391eee93ab62916b4b2e685b38472cf + docs/models/synclistresponsepreparedstacktypeboolean.md: + id: ca4a16f58119 + last_write_checksum: sha1:02a7a0775545b161da67d6e91ac55487d3962a55 + pristine_git_object: 3965035be7a28d9157555420facf8c680e0c76fe + docs/models/synclistresponsepreparedstacktypeenvenum.md: + id: 6cb9e94d7f24 + last_write_checksum: sha1:4b2ef7506b1bcb1718d18e2fbd11e0af4d22c4e9 + pristine_git_object: 2b8a209c6c379c3471e1da9a260af134b428932f + docs/models/synclistresponsepreparedstacktypenumber.md: + id: 00f6ce11fb61 + last_write_checksum: sha1:a81efe313ceb946d191369b02331457137a7fe72 + pristine_git_object: d33e6978118ea24f58e543260500807f7c59296f + docs/models/synclistresponsepreparedstacktypestring.md: + id: c91bb3733dda + last_write_checksum: sha1:e7b26eb8bdbc8b7dc5667da1ef5210a4c3791eeb + pristine_git_object: 1a1bde608e4df96650ac09a7d36f055096ec69d0 + docs/models/synclistresponsepreparedstacktypestringlist.md: + id: 8b3747b952ec + last_write_checksum: sha1:555aafe3a3507aa656d0825c83e7b2909e07ca3d + pristine_git_object: 33ebff7ff8ce425bc6f34d46ef3b942165fd0ebf + docs/models/synclistresponsepreparedstacktypeunion.md: + id: 217a162981ad + last_write_checksum: sha1:827a07260d136b7731944f72adfa1ab954b930e4 + pristine_git_object: 9151081737f3e8a59d09220a69dadec2e081027e docs/models/synclistresponsepreparedstackunion.md: id: 04756f08eb39 last_write_checksum: sha1:fdfbef5b6917f5ea9ba1a28597d6e4e07670f444 pristine_git_object: bb89df76c9f8b8b451206b787a1ddc7b0fe690da + docs/models/synclistresponsepreparedstackvalidation.md: + id: f36c067233a0 + last_write_checksum: sha1:e9f24f87d85dc78a1ae60dada8363c1e820ca515 + pristine_git_object: 8c99989763bda0d4fed92ba73e3704030ef100eb + docs/models/synclistresponsepreparedstackvalidationunion.md: + id: 5cab14f6abe2 + last_write_checksum: sha1:61eecd79f8e876ba3485a9bcf509f1edc720c9a1 + pristine_git_object: 600b5b36cc44c7290e732d8f4cf13f2751d7e545 docs/models/synclistresponsepreviousconfig.md: id: 71c139e8349e last_write_checksum: sha1:bf9a32538c636535592018af89d0fdcee79cefe4 @@ -21946,102 +25174,6 @@ trackedFiles: id: baa7a44f98d5 last_write_checksum: sha1:4c62b455ec3c72575c4b3410845b1d4a47e5e7a4 pristine_git_object: c30d0971e772b9ab25ea49229ce0d88ab7203d8e - docs/models/synclistresponseprofile.md: - id: 3df623648bb0 - last_write_checksum: sha1:9fcc4f50f21fa49b1115930ff48875490d14dbf9 - pristine_git_object: 238e1fe159d2fde27f220470cd3c8ecea357c589 - docs/models/synclistresponseprofileaw.md: - id: 7f6536b9336f - last_write_checksum: sha1:007c46e49d2c909b514f34197226a24e062565cb - pristine_git_object: 987c70614758e4219a39299759032eec62ad810b - docs/models/synclistresponseprofileawbinding.md: - id: 158ac5cbe366 - last_write_checksum: sha1:240d007f8245ae3b8700fbe229aefc10680c3824 - pristine_git_object: 2eb26a410dba93954c55aa6251e7a2c9d5c99c0b - docs/models/synclistresponseprofileawgrant.md: - id: 8e5196663f41 - last_write_checksum: sha1:676c0d7d24f5580d5e9f6e13341f3945697b3b8f - pristine_git_object: 1d170cb70cca3d2cf3b518cdf498cbdf4faddca1 - docs/models/synclistresponseprofileawresource.md: - id: eb4f19bd5158 - last_write_checksum: sha1:488cf3d40b1c55f7e1ff54ff8ba91843cec786e6 - pristine_git_object: 0dc0c16b204317a577a008cc0a23bf2621660597 - docs/models/synclistresponseprofileawstack.md: - id: 5e36e8177a12 - last_write_checksum: sha1:68c919d053b6e24bf99011f6f57d53d380c5cb69 - pristine_git_object: 676d6447cdc54e064bae4e9cf82306cc038c94a3 - docs/models/synclistresponseprofileazure.md: - id: d64c3b9bfa91 - last_write_checksum: sha1:b7c4a5ae2f35adde1ccea04b2df37a8bdaaf8341 - pristine_git_object: d1c45333a8b97ecadc8fe4f144ddbffd4ff493a8 - docs/models/synclistresponseprofileazurebinding.md: - id: 31505b80ec07 - last_write_checksum: sha1:c91c785281df2ca13b2bb4e630ebba10af4dca20 - pristine_git_object: a80f47c7831a01faadd1c0f55653bf5548ad485b - docs/models/synclistresponseprofileazuregrant.md: - id: 191f44812cae - last_write_checksum: sha1:da5408224e27e4f7165c00f1af1a52c032535567 - pristine_git_object: ad9e04d7cf5381f625af186801f8f4bc827ba035 - docs/models/synclistresponseprofileazureresource.md: - id: a0fa0f08f03d - last_write_checksum: sha1:95b4718ae5bd11ae6d246b3e2ab3a792986227be - pristine_git_object: de9da1fe8c397a069570e22afffdeea614e36604 - docs/models/synclistresponseprofileazurestack.md: - id: e55220153153 - last_write_checksum: sha1:48436c4b452e543480bee83b5f08a0bf255cebc7 - pristine_git_object: 2ef44dde5ea86b7cf62f57ee9f8f21a2268f2b14 - docs/models/synclistresponseprofileconditionresource.md: - id: b3b661a8a804 - last_write_checksum: sha1:897e70e90b4572a077bea2b45b0d7772d62e9049 - pristine_git_object: 520a6573d090a7c5f76d40564c510239e84d1bb7 - docs/models/synclistresponseprofileconditionstack.md: - id: 1634abee9f9b - last_write_checksum: sha1:c08e71cd96303fad5971213d0199f4f21325a7df - pristine_git_object: 2423373178f6758e921318c09290856f009bb724 - docs/models/synclistresponseprofileeffect.md: - id: 28c88ed84ba7 - last_write_checksum: sha1:1b2d64a96dd90e33ae5a2d909d2c2aa825b55aad - pristine_git_object: 210cdc774d49debc9ea587a92956a8dc0e3332e9 - docs/models/synclistresponseprofilegcp.md: - id: ac7f8c650820 - last_write_checksum: sha1:9c5e398f3c1b14ddabd67e6554078311ef5b5a54 - pristine_git_object: 8d5b756da58d49e25bdd3cf42d1217a5f6211848 - docs/models/synclistresponseprofilegcpbinding.md: - id: 561d36b1ebe7 - last_write_checksum: sha1:e8dccbf6eb7251ff08502b907b7cb3a22327b7a7 - pristine_git_object: 3480321503e1470f1e4ce826a7e9f6946ba3c239 - docs/models/synclistresponseprofilegcpgrant.md: - id: ba60e55ceaaa - last_write_checksum: sha1:e1b690d210e629d22dfdcd8c8f83e36cbb47bf6e - pristine_git_object: 87f225737f3830e5810f66869d38f46e00aa5e19 - docs/models/synclistresponseprofilegcpresource.md: - id: ae80486e1c41 - last_write_checksum: sha1:f7fd5bbad9fe9e4a5f8273ba73ff4cf307901ebb - pristine_git_object: 07a2ffd92903e74d8b0d0df251e3ae8aa335c932 - docs/models/synclistresponseprofilegcpstack.md: - id: 253020f95948 - last_write_checksum: sha1:f83a6b8f0c8f7f22b42971c69cdde7768ec6e336 - pristine_git_object: 8e87d36c3f9e08965d7ed7b0ca67769c8ff79e00 - docs/models/synclistresponseprofileplatforms.md: - id: 98683780ea61 - last_write_checksum: sha1:1c7dc484f7e022778d708aab77b7435eae7b6eb0 - pristine_git_object: faf193dcc29b611deddee69b03124f257f6082af - docs/models/synclistresponseprofileresourceconditionunion.md: - id: 60fd35d733da - last_write_checksum: sha1:45b4fc062ae932a51d78d2d8e4d8367df86c2d11 - pristine_git_object: 83c0c00362897fb9578145e650343868318894a7 - docs/models/synclistresponseprofilestackconditionunion.md: - id: 1ec70663e606 - last_write_checksum: sha1:c9ab6ea445ccf199b322842bce296a0038ca7fad - pristine_git_object: 84f803db0cdd44aaa995c89e9f9886679a715ac4 - docs/models/synclistresponseprofileunion.md: - id: 150abc9c79c7 - last_write_checksum: sha1:14accf9e7be1ed9b06ca0a90d7829894c1bd498b - pristine_git_object: 4a00f627699865c4153bf14bab5e09b45cc21e7c - docs/models/synclistresponseprovidedby.md: - id: 378b425f39a6 - last_write_checksum: sha1:8cf6e97edf5f3d30b31b54fb4dacd2b9212ff0e2 - pristine_git_object: f23e1fd4f1ec658126ed8760813120aa013fa8dd docs/models/synclistresponseproviderawsalb1.md: id: 8dbd6f64febe last_write_checksum: sha1:b305eabc8e60734f98198414fb35d5a16277da47 @@ -22192,12 +25324,20 @@ trackedFiles: pristine_git_object: 2e5df8411adfa05a2389c804bf312be11cf20d8a docs/models/synclistresponseruntimemetadata.md: id: ff44348f9c60 - last_write_checksum: sha1:f153736199eb3a8b65f634e2fdfe0b92f33f2c20 - pristine_git_object: 53b393f71ef4fc1828cb211501f630196ee52942 + last_write_checksum: sha1:7525134697de80e5ede202222ab50c563901cf65 + pristine_git_object: 0c2c106ec568a5f9e77900e8ef23df7ec703d3a2 docs/models/synclistresponsesetupmethod.md: id: 52ab65494278 last_write_checksum: sha1:68da17be92d29eb33f4fec4f47f8d3b5718d5a5f pristine_git_object: f13c4a8dc3ab9c29a7671e38e093d0da5b8bd5fa + docs/models/synclistresponsesetupupdateauthorization.md: + id: 05151b9405cb + last_write_checksum: sha1:b116ce49bbbd0e53526f3645962b457bdc154935 + pristine_git_object: a67e8137ca04f11465180217c23cd7ab7c23ea07 + docs/models/synclistresponsesetupupdateauthorizationunion.md: + id: 962ada795d88 + last_write_checksum: sha1:8434c37bb07e2823b1033092308c82599cc39643 + pristine_git_object: 0cb096ff919a845d8b484e0d3ede306aca1c0582 docs/models/synclistresponsestacksettings.md: id: 357990a9b65a last_write_checksum: sha1:817d0a381b8cb6752043ebf31d774da2fcb8385a @@ -22213,7 +25353,7 @@ trackedFiles: docs/models/synclistresponsestackstatedependency.md: id: d2b9ad5a37a9 last_write_checksum: sha1:81ca436c9ddf72557fbf70874c0eed5ae1471d4b - pristine_git_object: 63c4b1c11ae03bdff525a9ed339cf572b3a83d68 + pristine_git_object: b1c1db83c15d1644d83ce931d504fa7f6606ae81 docs/models/synclistresponsestackstateplatform.md: id: 964ade8cc2bb last_write_checksum: sha1:31faa746761c71f323f243686584a2709e1ded4e @@ -22230,10 +25370,6 @@ trackedFiles: id: f706866e8267 last_write_checksum: sha1:4fa2def6be3ef08068529ac918a01a563da606f9 pristine_git_object: be131cce306625e1a8a4b88d180424be08a18da5 - docs/models/synclistresponsesupportedplatform.md: - id: 8debdba4eb95 - last_write_checksum: sha1:db7512add0aee6ff99ac440739c2af83332bfa93 - pristine_git_object: 6681a2b5c6f8a54a54c4acd70b55a161eb017f25 docs/models/synclistresponsetelemetry.md: id: 0f8134dc77d0 last_write_checksum: sha1:82b71c97a3c85816def984b1ac17a1edd336be3e @@ -22242,10 +25378,6 @@ trackedFiles: id: 01b6967cdeb5 last_write_checksum: sha1:c595aa3c1f1c051274f48d359a68f617712993ed pristine_git_object: a314db55e738685e73df2ad4d12ca88cf924ca44 - docs/models/synclistresponsetypeboolean.md: - id: e1561e0566d9 - last_write_checksum: sha1:895d6b676079967841c00a548bdf5811a5594f74 - pristine_git_object: 8a87011cb3d20f89f867084d36714324ae217625 docs/models/synclistresponsetypebyovnetazure.md: id: bd55ee4f6e49 last_write_checksum: sha1:e47dcaf9b80e6f726823c0303fc71477a9cc01f0 @@ -22262,26 +25394,6 @@ trackedFiles: id: 4ac645dac94c last_write_checksum: sha1:fbe3bd4cb1cba8262540b07c6b84b7b8bc77704d pristine_git_object: 0aa7e71268db8e55b3f8af30386a41fb5e5397ec - docs/models/synclistresponsetypeenvenum.md: - id: 825cfc6ce2c1 - last_write_checksum: sha1:a144bd0b0da1f52ccf7af015e27782123f7ce36d - pristine_git_object: b6df8a0e1dd753df92eab05ac01f9054766727d3 - docs/models/synclistresponsetypenumber.md: - id: c58fbd3575f4 - last_write_checksum: sha1:bf208f03d199553f09858fea162d8779ee0dfdf2 - pristine_git_object: 2233d08007ad25348333697281f3538e0cb0bbe9 - docs/models/synclistresponsetypestring.md: - id: 3753a55e7775 - last_write_checksum: sha1:d8d7f3f2a0544ffb6c9158cf6cc1abf69dec0443 - pristine_git_object: 20e3c0e6ffc50164d2aed8fb3741b22cf05add5e - docs/models/synclistresponsetypestringlist.md: - id: 4d1826867f66 - last_write_checksum: sha1:b561d122844ebabd8cd9380390e344ed1a859815 - pristine_git_object: feae29106b6f9645be98edcd7c0778fb910a2537 - docs/models/synclistresponsetypeunion.md: - id: 8bfd36b31193 - last_write_checksum: sha1:bbf28ba25e7928c3726361bffcafb879957ddf0c - pristine_git_object: f94f2cf164efc92ae007ea3a6cf80cdcd4db8931 docs/models/synclistresponsetypeusedefault.md: id: 64912666a75f last_write_checksum: sha1:a3c09ba221981ac582f8510d7117619b6f3daecd @@ -22290,14 +25402,6 @@ trackedFiles: id: c2ef7061d2d6 last_write_checksum: sha1:542fe38038c3fd8347d45f7f9bc6580648139014 pristine_git_object: 64e4b2337f7328a51e8039c7af9e8e6cf49b54b1 - docs/models/synclistresponsevalidation.md: - id: 2bc064f1e5ed - last_write_checksum: sha1:95f4d7404ba16e25801492f7cf98df8f5f90c354 - pristine_git_object: 6acbb83f5d7802156bd2920dd3b1d945a472b711 - docs/models/synclistresponsevalidationunion.md: - id: 00bc2e66baae - last_write_checksum: sha1:ecc6a95f1d436aeca46bdc05f179532268823575 - pristine_git_object: a239f4dbfd683116e3f641dd8af9332f05732774 docs/models/syncreconcilerequest.md: id: 4855da36149e last_write_checksum: sha1:a75f1b50959b7d6b1fb9dbaa7fd8c5b06cf1de45 @@ -22564,8 +25668,8 @@ trackedFiles: pristine_git_object: c94b5b41d87b6122bd5700de00b57196b46e8c70 docs/models/syncreconcilerequestcurrentreleaseresources.md: id: d9383fa55ddd - last_write_checksum: sha1:2e00bc5ada87fed9d0fbc416661e7fd4bdc3b05b - pristine_git_object: 4f4b85dfaf865d25a5861671f378fbec742854d6 + last_write_checksum: sha1:5e7ef51960ab371d36342fb28ee2dde496ed531e + pristine_git_object: 0bda4c11add4fe81cd45cafac606361244d58f07 docs/models/syncreconcilerequestcurrentreleasestack.md: id: 16e3269cf061 last_write_checksum: sha1:75a4eaabbd4b17208e3fadc5bab2706bd73bbccb @@ -22790,6 +25894,310 @@ trackedFiles: id: 3ce376f93c07 last_write_checksum: sha1:179d9c8063c512f6ae5f21fe64375aa0272e7df2 pristine_git_object: 41bdb2c984a8bf09720b2c726a0dde10380d830c + docs/models/syncreconcilerequestpendingpreparedstack.md: + id: 75439eb8ae3e + last_write_checksum: sha1:3b96b74d2ccf4c9b92394a6e958f84f0d2242d7b + pristine_git_object: 51fddc16d22736fb47a9f9cc80571023d7da4aba + docs/models/syncreconcilerequestpendingpreparedstackconfig.md: + id: 36675bffa4c8 + last_write_checksum: sha1:8e9434d2766fdb757d4984ca6f2f154fb96f3070 + pristine_git_object: ac778a24d002545138139aa5f19888dbd5502916 + docs/models/syncreconcilerequestpendingpreparedstackdefaultboolean.md: + id: 052fa1e8a5a6 + last_write_checksum: sha1:0ca7a1bf852dc6292513eebb0fc4f87224fddc88 + pristine_git_object: aed70799706ac8f24810c57a3da2478a3d26acc7 + docs/models/syncreconcilerequestpendingpreparedstackdefaultnumber.md: + id: fd6c7f32bad0 + last_write_checksum: sha1:6ded949e8d4272c730aa7f4a7dac8f264a802f5c + pristine_git_object: 2d672fa40660454bebeff7226b7a3a20c49f2d1c + docs/models/syncreconcilerequestpendingpreparedstackdefaultstring.md: + id: 8e53938d7192 + last_write_checksum: sha1:9ace7ed9996609d99d6a3aeeb94270f898e4c57f + pristine_git_object: b6f510b759a76633fd128031d5450a4dd48cbe13 + docs/models/syncreconcilerequestpendingpreparedstackdefaultstringlist.md: + id: 99cb8b1a0f88 + last_write_checksum: sha1:08f3962aafa7f9917957bf73accc9ae22c0daae4 + pristine_git_object: 1163d420c9a3078cac638d71ef2f1760067c9f9e + docs/models/syncreconcilerequestpendingpreparedstackdefaultunion.md: + id: 668183e6c2ad + last_write_checksum: sha1:eeb65017d53a85afee0d9c029dacdb4adef339e5 + pristine_git_object: 65d6abaadd394e0912597cc68ab741ca0bf89886 + docs/models/syncreconcilerequestpendingpreparedstackdependency.md: + id: 07ad306c75db + last_write_checksum: sha1:e96737241e700dfc22c0dab3b054c0d28418d5a5 + pristine_git_object: 082334ed062a9ae8958dc76147bf78e12c4eca54 + docs/models/syncreconcilerequestpendingpreparedstackenv.md: + id: 1ca49936791a + last_write_checksum: sha1:8c1787b30b6b45c4a7acc2062c312d4fd15cf3f2 + pristine_git_object: 158ac8c0ebde28f3367d876515e573c8738a0e56 + docs/models/syncreconcilerequestpendingpreparedstackextend.md: + id: 4e3f6f24fa05 + last_write_checksum: sha1:e230a8fad418f876d857eae874bf9e14b438167c + pristine_git_object: 1b05db9fe24d860659d7439d52b900cd3ee8befd + docs/models/syncreconcilerequestpendingpreparedstackextendaw.md: + id: 3119118b4fe1 + last_write_checksum: sha1:1fe6a5314aeded526191126e1cc77ec8b7fac6f0 + pristine_git_object: acbc8c0a149ab768e4003188c944835242ee2ea4 + docs/models/syncreconcilerequestpendingpreparedstackextendawbinding.md: + id: 819ce8c1ae79 + last_write_checksum: sha1:af03fc52c3e46389ed3b4a660c4224cbb27f5fad + pristine_git_object: ab6244c83fec07b88463da9e227dda16bf64432e + docs/models/syncreconcilerequestpendingpreparedstackextendawgrant.md: + id: dcb025e8a0ce + last_write_checksum: sha1:22f634227005536f7ce1095997385d68e22b4bac + pristine_git_object: 988016168c588c07754f0cf0f8f02ba8857193a6 + docs/models/syncreconcilerequestpendingpreparedstackextendawstack.md: + id: 4e7ca6381534 + last_write_checksum: sha1:b43dfac6920d0445c0be88b8962fa9dc364f8e12 + pristine_git_object: d96f87bc2cb5740b04a6f5797be6093c6f259a17 + docs/models/syncreconcilerequestpendingpreparedstackextendazure.md: + id: 9ac4a146c0cc + last_write_checksum: sha1:102524c2d8afa6e5b10a74a8cf6afdb4fcd1a898 + pristine_git_object: 381ca360dcf78987ea320a2943fd34393d5248c1 + docs/models/syncreconcilerequestpendingpreparedstackextendazurebinding.md: + id: 3ac564e2864a + last_write_checksum: sha1:c047e03b45df6b6f9601e09998769570873c11a6 + pristine_git_object: 60ffa2740960b3a03ff89a25aafb32880b8e8f55 + docs/models/syncreconcilerequestpendingpreparedstackextendazuregrant.md: + id: a3cbbe5f0ca7 + last_write_checksum: sha1:2c30d68c8457c1561b2f225bec4ab3baff7ef0cf + pristine_git_object: 386f50f9a577a0ae638d3e71b2ace7e671f2bd47 + docs/models/syncreconcilerequestpendingpreparedstackextendazurestack.md: + id: 64ceae4e8b31 + last_write_checksum: sha1:b8c5cd7b7c75019774a61e1ae63372a7b6add7aa + pristine_git_object: 4dd07e114daee4be8691c7835d77f95b4b7dbf13 + docs/models/syncreconcilerequestpendingpreparedstackextendeffect.md: + id: a4ee9528ff70 + last_write_checksum: sha1:e6ba41adecd0914e6836d7709cba24a1f9e94eec + pristine_git_object: 77b0d00a45f12d72c378ee0544654290295b425e + docs/models/syncreconcilerequestpendingpreparedstackextendgcp.md: + id: a8a0418f465d + last_write_checksum: sha1:8f319738c95ad16730dda87c6c658b6b8e0555f6 + pristine_git_object: bd58f0f57c7d1f37d01c2d1fe72e0518360b198b + docs/models/syncreconcilerequestpendingpreparedstackextendgcpbinding.md: + id: b3937cebfea5 + last_write_checksum: sha1:0e8339981c8c14bcfc845a4e2b5ad2961aa4417b + pristine_git_object: 8f80ba17e799fe9a392798bee96e91be4a241b37 + docs/models/syncreconcilerequestpendingpreparedstackextendgcpgrant.md: + id: 33573e5b8c7b + last_write_checksum: sha1:dc558cb1a5c60a83e08b780be700e8f1e35bb024 + pristine_git_object: 00799a996a31627c4264674c39a1acaa8b85b6bf + docs/models/syncreconcilerequestpendingpreparedstackextendgcpstack.md: + id: a17fad14cae1 + last_write_checksum: sha1:5a08ae8bfe22e1498601249375f3540b4d3eae38 + pristine_git_object: 90b93091978b089f0508d9e48c9a5f09b6a919f8 + docs/models/syncreconcilerequestpendingpreparedstackextendplatforms.md: + id: 5f999bed488a + last_write_checksum: sha1:624e9552e42b2c9c8c866e2e5f0e87081149f02d + pristine_git_object: 8eab0843880e375ef599fe680dfdce73cb209136 + docs/models/syncreconcilerequestpendingpreparedstackextendunion.md: + id: ddb2c3c0e1c4 + last_write_checksum: sha1:1eedb4f2a5f7b9bbe17bdaf272e31ba96d488489 + pristine_git_object: 945c5956d438929219c48c07440cc4b1c0398502 + docs/models/syncreconcilerequestpendingpreparedstackinput.md: + id: 56604ad6a5df + last_write_checksum: sha1:3c402ca06588f51530b6a3db065f770bdccbed14 + pristine_git_object: 4c4778c1cfae34c40b50752f07c7a7d57eb0cfa3 + docs/models/syncreconcilerequestpendingpreparedstackmanagement1.md: + id: e71c76ca8a3b + last_write_checksum: sha1:babb18e35057ac97a1c0e9002f460250e947b195 + pristine_git_object: 5712dd9d77cf7539a7696c0a7d0447568eb2d769 + docs/models/syncreconcilerequestpendingpreparedstackmanagement2.md: + id: a37705aa8439 + last_write_checksum: sha1:ee7c9672ff487e06fefbd0d2cf5c4697eb818c11 + pristine_git_object: db4e331fa5701e6f209599706be36ba4d0d2e038 + docs/models/syncreconcilerequestpendingpreparedstackmanagementenum.md: + id: ce082f61308e + last_write_checksum: sha1:62e88bb437d8f1a9a64d70013f15c7fb2fc5889d + pristine_git_object: 2dd2fb33a770b12381f4c261642195cb071831ef + docs/models/syncreconcilerequestpendingpreparedstackmanagementunion.md: + id: a365cecb5615 + last_write_checksum: sha1:a48e139252ce1d866187dad820f5659ab4f82fee + pristine_git_object: 84f867af8591817ea0bef05f21bd5a584b330378 + docs/models/syncreconcilerequestpendingpreparedstackoverride.md: + id: 1db3f611c1e6 + last_write_checksum: sha1:f6cf5363694f71d5e234a4b5a18d61fa5abee103 + pristine_git_object: 43523c2932b3c64ee6a39e4fd48c4fca5ec3bf00 + docs/models/syncreconcilerequestpendingpreparedstackoverrideaw.md: + id: 09bb722ab40e + last_write_checksum: sha1:72f966820c046a48cb42725da88c908e48c60add + pristine_git_object: a9e31c0c8ba76ab8df2ca31f92de4c7cce52735b + docs/models/syncreconcilerequestpendingpreparedstackoverrideawbinding.md: + id: 87641886ed3c + last_write_checksum: sha1:f8230c1d1dafdeafc1d5ef14c82fb89fc816c59f + pristine_git_object: 7d8d22a6c0aba583ba5a7a7451cd9206b6e1ddf9 + docs/models/syncreconcilerequestpendingpreparedstackoverrideawgrant.md: + id: 8e7d0ce63cf6 + last_write_checksum: sha1:ec026d598900bdfe8cf7fb0a4b26272d010c57f5 + pristine_git_object: bfcb66473c4bedd6ad3f2b5d18bed9d69b726754 + docs/models/syncreconcilerequestpendingpreparedstackoverrideawstack.md: + id: 8dd17747594f + last_write_checksum: sha1:db950fb9a950a137345b2e2cfafcc5918a4ba596 + pristine_git_object: 3dc4cdd525317205345db2829fa1cd36e525ff9e + docs/models/syncreconcilerequestpendingpreparedstackoverrideazure.md: + id: 10bb41f5a815 + last_write_checksum: sha1:0ea96cc8f91e86c0f24c23773db64f5482f0adef + pristine_git_object: 5ff3b39ab9b3251835d3dfd28530cd4b1043a034 + docs/models/syncreconcilerequestpendingpreparedstackoverrideazurebinding.md: + id: ad81944bbd32 + last_write_checksum: sha1:745420a6d79719f7a92ed44953fa68285f9ec089 + pristine_git_object: d4e8abd7c5e1b468d1169989c5e2acbf07a95a92 + docs/models/syncreconcilerequestpendingpreparedstackoverrideazuregrant.md: + id: 2c2babec5b65 + last_write_checksum: sha1:122f79adf99530a05d4f94b8b8353b42c6430055 + pristine_git_object: 1f2aa8244232e5d6fc333d78c9b608840fc2f165 + docs/models/syncreconcilerequestpendingpreparedstackoverrideazurestack.md: + id: e2f4bd254364 + last_write_checksum: sha1:231e5970e9e9ed169aa5606b5cbfa6936dac2f90 + pristine_git_object: 851c2b3130a970857dd3b206443a6e2362dbb9f2 + docs/models/syncreconcilerequestpendingpreparedstackoverrideeffect.md: + id: 7ac596bb94bc + last_write_checksum: sha1:02be1d73b5e74977e881bd587bcddcf797059c0a + pristine_git_object: faf14664e89ce15f5e6c803deb49dd53f1087f78 + docs/models/syncreconcilerequestpendingpreparedstackoverridegcp.md: + id: 3b3ecea075a7 + last_write_checksum: sha1:d751aba920c2d9296cf19609a0277d5dced78df9 + pristine_git_object: b7dab9723a7ef2cf6c16d39e2ad5ec32423d8a73 + docs/models/syncreconcilerequestpendingpreparedstackoverridegcpbinding.md: + id: 3789f9b14b05 + last_write_checksum: sha1:a690ba734395bfbc568ff9b81ff5e2b48f124213 + pristine_git_object: a1fa671faf3f266e348eb9ae03f2a1f70f899c56 + docs/models/syncreconcilerequestpendingpreparedstackoverridegcpgrant.md: + id: 3bb02f30f130 + last_write_checksum: sha1:72a6a335fa4184f53984ba759a11aa541a4e792b + pristine_git_object: 2a6d7ecbd44a2bcac9d13390b1a87eae67d80453 + docs/models/syncreconcilerequestpendingpreparedstackoverridegcpstack.md: + id: 3a74932f7ead + last_write_checksum: sha1:88382d0db16bdc539e987c1de75662c8526aa618 + pristine_git_object: 280d864c88d3c4e90f0ddab708f0c751926d3eef + docs/models/syncreconcilerequestpendingpreparedstackoverrideplatforms.md: + id: edfcb9150ddb + last_write_checksum: sha1:9c3abb1f34ea041e0ec14993768471758cfee9af + pristine_git_object: 6d631da538ec05f0beb7071c02416c6f6a3b07f0 + docs/models/syncreconcilerequestpendingpreparedstackoverrideunion.md: + id: 874f17ab616c + last_write_checksum: sha1:4aae8ee411c3c06e2f891719610c1c77f7e155e0 + pristine_git_object: 0d7434db7fde696613d3d0ff3b775ba41265417f + docs/models/syncreconcilerequestpendingpreparedstackpermissions.md: + id: 0d98e6022b75 + last_write_checksum: sha1:a1fe95b7d2b03cc2b4a9aa14a073fee77ed2f24f + pristine_git_object: a8ff2b043c0041bbf45839e71ff4178f347d430f + docs/models/syncreconcilerequestpendingpreparedstackplatform.md: + id: 17a5ca8290d8 + last_write_checksum: sha1:07686b1d679fd729a68ae91b55a243857a36f6c5 + pristine_git_object: 29cccea6aa5aad3e315b177954f3ffe868cb61fd + docs/models/syncreconcilerequestpendingpreparedstackprofile.md: + id: 348b06be80e5 + last_write_checksum: sha1:50884047e66c2d92255aa3b85200956d93e40709 + pristine_git_object: f125644eac76c9bd3e654268a305aeef1ee1633a + docs/models/syncreconcilerequestpendingpreparedstackprofileaw.md: + id: 0aa737b04964 + last_write_checksum: sha1:46851a9d8968cf41aa417cc96234c276fd10b65a + pristine_git_object: 8f4d0bf8fca64b6e2e900a18f839e303dc4cf3f1 + docs/models/syncreconcilerequestpendingpreparedstackprofileawbinding.md: + id: 4773b8c34944 + last_write_checksum: sha1:511e31d2fca0dc014457f78577179cf9d82dafe9 + pristine_git_object: 2f69940f83978c5f82715a9f3b6db8e499d1f038 + docs/models/syncreconcilerequestpendingpreparedstackprofileawgrant.md: + id: 6054e8b5a720 + last_write_checksum: sha1:83e207da73eed54f76a0e849798906bfc57f4488 + pristine_git_object: b70678a078a676374cc20e7dc5b11b6ce1f3dd59 + docs/models/syncreconcilerequestpendingpreparedstackprofileawstack.md: + id: b4906334c803 + last_write_checksum: sha1:61cdba276681b930ed487dd67ea2b61af7f5c8bf + pristine_git_object: 9015d92a80ff63cc850fa28d8f0164d99971f443 + docs/models/syncreconcilerequestpendingpreparedstackprofileazure.md: + id: a0586a987092 + last_write_checksum: sha1:9d16d512490ca43e5cb010b3aad93419d0f43647 + pristine_git_object: 57456ea6d8bd087875a7897158053fa1c224706a + docs/models/syncreconcilerequestpendingpreparedstackprofileazurebinding.md: + id: f269a09fda98 + last_write_checksum: sha1:bec5724b3d120e30ded43036b2e345189f013ada + pristine_git_object: 972cda11189f93dd3687e31157adb8b6ad5d00ef + docs/models/syncreconcilerequestpendingpreparedstackprofileazuregrant.md: + id: d68528ef6b65 + last_write_checksum: sha1:a0add426f861098cbde9649070355b4ff1a8c971 + pristine_git_object: 2d6ea55b5546613209e4e6c3afc45700177ed98c + docs/models/syncreconcilerequestpendingpreparedstackprofileazurestack.md: + id: b0cb7fbe84ec + last_write_checksum: sha1:722c6f8b60edf08c227331650a3c7cdaabd81e82 + pristine_git_object: 660df978de7cba7c7a09781aadbceb2461bb0be0 + docs/models/syncreconcilerequestpendingpreparedstackprofileeffect.md: + id: 6d03a93f5973 + last_write_checksum: sha1:2c35d0db8ab8bc3ac77c2a692e8313f0ae7ae091 + pristine_git_object: c64ca7e635f5cb379ccf328edb7b44370e3800c8 + docs/models/syncreconcilerequestpendingpreparedstackprofilegcp.md: + id: 09042f756821 + last_write_checksum: sha1:1b3945987d418db77c8d3e2473d2d4492c48d1e9 + pristine_git_object: f427c4958950107e1a3488adcbcc9de06bafa2c0 + docs/models/syncreconcilerequestpendingpreparedstackprofilegcpbinding.md: + id: b57bf04e7835 + last_write_checksum: sha1:f52459865e3761670a26fd89f02111c452f3a2fe + pristine_git_object: abc4dff0af5ebb046f8c32b2d1163f90028ea5b5 + docs/models/syncreconcilerequestpendingpreparedstackprofilegcpgrant.md: + id: e66bffaa46be + last_write_checksum: sha1:9c6f6b62da503d22dea9acafb6a2c2f40d1898a4 + pristine_git_object: 0bf125080609602aee6c9dffdba7fc58eff8032b + docs/models/syncreconcilerequestpendingpreparedstackprofilegcpstack.md: + id: 90e4fe18ec20 + last_write_checksum: sha1:9de500bea020e7c04352dbc87c85e32492bef489 + pristine_git_object: b5444a017e7a5a6f6a6b6cf7840f0cd592db266f + docs/models/syncreconcilerequestpendingpreparedstackprofileplatforms.md: + id: 4015692c81ec + last_write_checksum: sha1:cb68b29199e4db730368aa0b3250e9263edfb8a8 + pristine_git_object: b6f3fb940be35c6d28b2102e4f021f38dc498d48 + docs/models/syncreconcilerequestpendingpreparedstackprofileunion.md: + id: 39deca5da849 + last_write_checksum: sha1:8e959215ec720c0688297b86b71848be33a4ed2a + pristine_git_object: df0bbeb1f5230ab03beef6eb7eca1a4775abf55c + docs/models/syncreconcilerequestpendingpreparedstackprovidedby.md: + id: 2a495a724aaf + last_write_checksum: sha1:59084968bddcf26b3a69a126d3c520e8c953378c + pristine_git_object: cf95da743c010437422d58736b3e2357f0d75261 + docs/models/syncreconcilerequestpendingpreparedstackresources.md: + id: c4846a812063 + last_write_checksum: sha1:22bffbd3de534283ea38246202b92928dbe62040 + pristine_git_object: fcdb729ce45e5d7f702252c2918f4fe5dc0adc7e + docs/models/syncreconcilerequestpendingpreparedstacksupportedplatform.md: + id: d426bfb52a6d + last_write_checksum: sha1:61c27fb0b805fb47879161e33693d1f4f2465ccb + pristine_git_object: a2b3238bf6c9f64964b2669d999e94a4a4f135af + docs/models/syncreconcilerequestpendingpreparedstacktypeboolean.md: + id: 1940f1d48230 + last_write_checksum: sha1:0182409a93f33fa3c36021b3692abcd2f3169437 + pristine_git_object: 1ed3a21ce278a5aef9be4b631bb9dee4099a1faf + docs/models/syncreconcilerequestpendingpreparedstacktypeenvenum.md: + id: 80e838f155ad + last_write_checksum: sha1:6f5e906c5448413ee9a62fef46ba07e98a6bdacf + pristine_git_object: 836c5955cc31092952492abca5f63850341c9000 + docs/models/syncreconcilerequestpendingpreparedstacktypenumber.md: + id: 5f19c2e18999 + last_write_checksum: sha1:363c28a957d0e980a4b604db0c2f6b7d3554542d + pristine_git_object: 7196f32db6b048a48eb6a1be429e90e2cd9f6c36 + docs/models/syncreconcilerequestpendingpreparedstacktypestring.md: + id: 127bc207775c + last_write_checksum: sha1:9d68bd0d1b0924f96a7179bf7d1bd78c9ee887f0 + pristine_git_object: 94be57c96161ff6fbd876434572da32febda6b0f + docs/models/syncreconcilerequestpendingpreparedstacktypestringlist.md: + id: 47e4fdec982b + last_write_checksum: sha1:ba22af2cc4a24cca96b398f3f6e2bbdf1da103e0 + pristine_git_object: a3a652c53ca4b49cb969e7378c870463c654347a + docs/models/syncreconcilerequestpendingpreparedstacktypeunion.md: + id: f87740d163c5 + last_write_checksum: sha1:f7151aa11ca0ed9475dae334f4f2bb3fdc26979c + pristine_git_object: 7138fe36a0c3e0afae7c6268719bf12d9055f732 + docs/models/syncreconcilerequestpendingpreparedstackunion.md: + id: 69472c933eb9 + last_write_checksum: sha1:4633b4ff08d5e813c564b835da07a369a959880d + pristine_git_object: 377b3588b1d94515ad36c228eb6f22a57a78a874 + docs/models/syncreconcilerequestpendingpreparedstackvalidation.md: + id: cc9486962c3f + last_write_checksum: sha1:31104034d7f2029974edbab0319ab131ae380e68 + pristine_git_object: 0b1310660c60e7a7de93f4a3ab758ce41430592c + docs/models/syncreconcilerequestpendingpreparedstackvalidationunion.md: + id: de613c24f631 + last_write_checksum: sha1:cdb5f3d0895d331f421775ad5ffa14a37df4716c + pristine_git_object: 6a783332cd57026060d3a59591f764f1c8084dee docs/models/syncreconcilerequestplatform.md: id: 9a3bc70a4dbd last_write_checksum: sha1:4cc3c5a6acf5ea7910493e240c71470203e3c754 @@ -23076,8 +26484,8 @@ trackedFiles: pristine_git_object: a64fc45963549993123c1e3edadae4dadf033f91 docs/models/syncreconcilerequestpreparedstackresources.md: id: 3fa8360af38c - last_write_checksum: sha1:c73785c83223cd83d57c46e49b8837d4cefee632 - pristine_git_object: 47457bd69d68e6ca4d15b5b65e15b087336dfa1c + last_write_checksum: sha1:7a4a00164ef51af8c7682e223cca1ff1914c9330 + pristine_git_object: 68118f7f0095ee54a90cae2fdb7aca70b40ee0e2 docs/models/syncreconcilerequestpreparedstacksupportedplatform.md: id: be009511cf11 last_write_checksum: sha1:be84ca0100c82f8c84059b2d398e268728ce710a @@ -23128,12 +26536,20 @@ trackedFiles: pristine_git_object: 8ccb2b167da8d10a429a46b8c5ca887bb05a5ae5 docs/models/syncreconcilerequestruntimemetadata.md: id: cd7ac50f8ae2 - last_write_checksum: sha1:97deb06c1dd40a394af7ad156533077bdba7dfde - pristine_git_object: 4e4fa25e3e838a28c7bad5cd53e313748adfe73a + last_write_checksum: sha1:97191a87260fbd43b4141c8e9e1ba71ef0518de4 + pristine_git_object: a9e7e7d6586facd79b5913cd3f786a5c8f469311 docs/models/syncreconcilerequestruntimemetadataunion.md: id: 7d76aaa81d55 last_write_checksum: sha1:49468b56c678f9e3abb66a65fe62115e01c82b76 pristine_git_object: 48f649d6c9f778c910e2bebecd0d64583511fe0c + docs/models/syncreconcilerequestsetupupdateauthorization.md: + id: 3243e8350fa6 + last_write_checksum: sha1:68f6259d66a48cb163cb642294e39208867a3159 + pristine_git_object: d1636e67067a46ca40ef503043095d68195f652a + docs/models/syncreconcilerequestsetupupdateauthorizationunion.md: + id: 1c48c21e6e94 + last_write_checksum: sha1:a76b8cc6e11f5edcae3f23db4c6d7a25b884aa09 + pristine_git_object: 4235e12927014e74c9b6da2f6902dd21e726aecb docs/models/syncreconcilerequestsource1.md: id: 336271f179d6 last_write_checksum: sha1:250babb11f397fb231a86994549990e148b512f5 @@ -23496,8 +26912,8 @@ trackedFiles: pristine_git_object: 46b103daa1ac28da86c5168689e3288950111b7b docs/models/syncreconcilerequesttargetreleaseresources.md: id: 03a2ccb588d7 - last_write_checksum: sha1:d653292e15306bff736038c69915a5a420f947aa - pristine_git_object: 1e93239fc7a607273d55ea4d2931c7be0c82352f + last_write_checksum: sha1:00cdff3e3ad48733d738e9611c326eceeb81aef6 + pristine_git_object: 4156953c4961b5c8f16ad010f0ac7429bb947f08 docs/models/syncreconcilerequesttargetreleasestack.md: id: 66cdb36a7a2a last_write_checksum: sha1:7544ad0fa626e77d6afd981201b4531f561fe729 @@ -24148,8 +27564,8 @@ trackedFiles: pristine_git_object: 318429b6e13e831abe575de8da496062f1099eb2 docs/models/syncreconcileresponsecurrentreleaseresources.md: id: 47de7ae0bff8 - last_write_checksum: sha1:30e881e23c4be6cb481330440b634e3560e7fdc3 - pristine_git_object: cf00a8abed349e1a1cebd114ed1a957a01608048 + last_write_checksum: sha1:9beda8b9463cbed2d74907fae9a02546b7623c71 + pristine_git_object: 290aab3ab755366390de232b547f226c7218f2a2 docs/models/syncreconcileresponsecurrentreleasestack.md: id: 5d168ce1cf5b last_write_checksum: sha1:a1836d64768c6b0647be36cef79349240e5045c8 @@ -24582,6 +27998,22 @@ trackedFiles: id: d8e15d17515d last_write_checksum: sha1:dd0f838981bbc175ab1c95e21de8979b31475949 pristine_git_object: 36d0ee555e119289ce45b4365f47eee3ce5f38bf + docs/models/syncreconcileresponsefailuredomains1.md: + id: 2532a9d4780a + last_write_checksum: sha1:ec6b7eb67a2786fc3fe123a8d381ccca5714d383 + pristine_git_object: 2cd557444761c6d26254376a122f256685e0c479 + docs/models/syncreconcileresponsefailuredomains2.md: + id: 6ec555992d2c + last_write_checksum: sha1:918d1600df3c1d6e53529c7fe4c9d9daee6c9268 + pristine_git_object: e0807df7b811cb55365e83210cee01021bafa0f5 + docs/models/syncreconcileresponsefailuredomainsunion1.md: + id: acd2049cf7fd + last_write_checksum: sha1:45d228744c3fbae12c0717e036d443713af11678 + pristine_git_object: d1322630f4256c321d238c767eea2fe1607766e7 + docs/models/syncreconcileresponsefailuredomainsunion2.md: + id: be5be796cab7 + last_write_checksum: sha1:5f01fa8cb0e4f30417ea50de13e1b8ee3df1ff7a + pristine_git_object: 75b46fa26ef6910a391c780384d2f07d50b1cfe6 docs/models/syncreconcileresponsegcpimages.md: id: b6259d91a421 last_write_checksum: sha1:ac6dd96047acd3f85d9afba6c2a7aa1c126e2cb4 @@ -24830,6 +28262,402 @@ trackedFiles: id: 69a69d3edb59 last_write_checksum: sha1:3e53e1bcc2802edc9b6095cf0a40742d67deb56d pristine_git_object: 6cdc4b4af526773a18e4e20b69339d7badf1cc88 + docs/models/syncreconcileresponsependingpreparedstack.md: + id: d4e6cd11ea26 + last_write_checksum: sha1:cb2ebf704be8ee66da21f7360e9975bf29221e62 + pristine_git_object: 0655c0735ba6449a779b81fce0610437425223ca + docs/models/syncreconcileresponsependingpreparedstackconfig.md: + id: 9e5c0649c523 + last_write_checksum: sha1:211e413341a741fcd172ae509c1186c2d6a0b65b + pristine_git_object: c263b98d015af43388f7d3e2e04d3bb07608648d + docs/models/syncreconcileresponsependingpreparedstackdefaultboolean.md: + id: 01041e39a94d + last_write_checksum: sha1:3a92d2c2a796f75f750575d9bf32de99007410a8 + pristine_git_object: 63d36b41b6620bdb38183ee7fc4e7748d1ca87d4 + docs/models/syncreconcileresponsependingpreparedstackdefaultnumber.md: + id: 57befed524b7 + last_write_checksum: sha1:156a38b210fea1cc0a93d3f63d2a86fe85b7f5cc + pristine_git_object: d1aa73d1d0ab55bce9349488e4a12eb11c3c4ba3 + docs/models/syncreconcileresponsependingpreparedstackdefaultstring.md: + id: 4447d5938e69 + last_write_checksum: sha1:991214ba89fe239cf993fe6f7720eb88637ce7cb + pristine_git_object: cb94bdc568e625fa6e3182d4725bbd9f4805990f + docs/models/syncreconcileresponsependingpreparedstackdefaultstringlist.md: + id: 342b559e483c + last_write_checksum: sha1:866bba7599e39a5023b95ce66c54f520bdea5700 + pristine_git_object: 8edb7d81ead6414dd14060a608e1207b8b88cc9a + docs/models/syncreconcileresponsependingpreparedstackdefaultunion.md: + id: 10b639c21238 + last_write_checksum: sha1:62d750f0de085a4d82b111d6c0669ab7c547a792 + pristine_git_object: 01dbde0d8a206999cc094aa071dcb28d8754a540 + docs/models/syncreconcileresponsependingpreparedstackdependency.md: + id: 2b3c77fcf3c3 + last_write_checksum: sha1:491b81bd712f9c07fae6ca2c9b1f5c2b4e4dc310 + pristine_git_object: 9fa80e1fb32049a3f468c19bb8aa0adbee7e99fc + docs/models/syncreconcileresponsependingpreparedstackenv.md: + id: 85acc045b070 + last_write_checksum: sha1:c04aff9d9bddb486fcc85de3150992562b1ecb71 + pristine_git_object: ebcbdfc01b55011ff3bb8258c53eec9407daba01 + docs/models/syncreconcileresponsependingpreparedstackextend.md: + id: bb7ec76de8cf + last_write_checksum: sha1:5ffc0d60a82beb78d9ad1c8d3d6fb0b2e5b1dc24 + pristine_git_object: fd44eb7ab15a7ee6374a6ae3e5fad603963f7927 + docs/models/syncreconcileresponsependingpreparedstackextendaw.md: + id: 1e56040468ae + last_write_checksum: sha1:27f4ce31bed516e3cdfe632bf69dc09d8782d9a8 + pristine_git_object: 48ea14141df09545c7d6b17515d4a7dd99a1e803 + docs/models/syncreconcileresponsependingpreparedstackextendawbinding.md: + id: e23d7cfa2117 + last_write_checksum: sha1:288e4808831f683b348194ded6f78611fe3608a7 + pristine_git_object: 74aa4b204e7fb49045350061bb0c0bb492564fe3 + docs/models/syncreconcileresponsependingpreparedstackextendawgrant.md: + id: 7c7575da049e + last_write_checksum: sha1:62821e026eea84804fe108fbb7e6eb94c11ef829 + pristine_git_object: fb89c1a7590aaa8544d4fba8ac7441c15d367c84 + docs/models/syncreconcileresponsependingpreparedstackextendawresource.md: + id: 5c82661e5ce1 + last_write_checksum: sha1:aa487bd843d40f1b2b27ec5eab2e01490ee07e69 + pristine_git_object: bd2d40633627f808e8fd463d112e9e7039f12b97 + docs/models/syncreconcileresponsependingpreparedstackextendawstack.md: + id: 8aa11331188d + last_write_checksum: sha1:288bf1b04bc455f9c5fa8cb8ca5adfcb948446be + pristine_git_object: f7175dd9188039e667d78195fafa22ea7502b685 + docs/models/syncreconcileresponsependingpreparedstackextendazure.md: + id: 0c5edce9facb + last_write_checksum: sha1:73cff17e21210ba0b95a83feda529170d303c62e + pristine_git_object: c458ccbaabb822fda441bf3cf65d571580d909c3 + docs/models/syncreconcileresponsependingpreparedstackextendazurebinding.md: + id: 5cae89234560 + last_write_checksum: sha1:5eb18fe9253a341cc8fab2294cd3ea8625585daa + pristine_git_object: cdebfc136b9140366009e3e20788af48db2d1432 + docs/models/syncreconcileresponsependingpreparedstackextendazuregrant.md: + id: 11b6785bd559 + last_write_checksum: sha1:8b5ef7239b8eeebb9ec3de34ca5e00641f05deff + pristine_git_object: 87a46bc1351b3a86f13261f6a5f61476cac46d90 + docs/models/syncreconcileresponsependingpreparedstackextendazureresource.md: + id: 88b50f3e8084 + last_write_checksum: sha1:659b0114667ae601f88f756b1f503f219f0ba2aa + pristine_git_object: b1b812a4a8aae1b27b9e1e90b7880c7d49509a35 + docs/models/syncreconcileresponsependingpreparedstackextendazurestack.md: + id: 8eef6ce7f085 + last_write_checksum: sha1:13b787900204cb6638ef834bec921da777251175 + pristine_git_object: 7d4b713555a74e91a5eca787daded4ee6d001edd + docs/models/syncreconcileresponsependingpreparedstackextendconditionresource.md: + id: 7553596293a9 + last_write_checksum: sha1:7d19739358912ca9dfe237432677aeab97070c8b + pristine_git_object: 6443c519d86d26cd1f9d4d0eb757d18fe9f5a1c4 + docs/models/syncreconcileresponsependingpreparedstackextendconditionstack.md: + id: 0f80f5d07dd4 + last_write_checksum: sha1:5ec6e5436b664aa6e29f6fd17116464e47b856e2 + pristine_git_object: 31644f19ae66764c555e11babe3ddf407701c38e + docs/models/syncreconcileresponsependingpreparedstackextendeffect.md: + id: c4eba2894f05 + last_write_checksum: sha1:14a2359ac2d29611cffa245c88b98002d5074680 + pristine_git_object: ac3fb2465fa9a8c332ebe6ee7ac31bf22177678f + docs/models/syncreconcileresponsependingpreparedstackextendgcp.md: + id: de475af8ef99 + last_write_checksum: sha1:5f12f363cf7845dfd1a9e343d401c983769351a7 + pristine_git_object: f15b86750f556aaf67b1349f383b8a3b567f4053 + docs/models/syncreconcileresponsependingpreparedstackextendgcpbinding.md: + id: 838bfdbda9a9 + last_write_checksum: sha1:1a4dd438b09112c7dae907e8edb0110f1e31a5db + pristine_git_object: e23efec2195ff44213e64081cc7b4eb13141ae65 + docs/models/syncreconcileresponsependingpreparedstackextendgcpgrant.md: + id: 9d8efd05f92a + last_write_checksum: sha1:644bbb4d56692398fdd0a4b8b8a78aaea8cbaef7 + pristine_git_object: ed5da3d300fe7cd36351d9c9386b412e950701e0 + docs/models/syncreconcileresponsependingpreparedstackextendgcpresource.md: + id: ffa27eeeceda + last_write_checksum: sha1:8f3e9e045bc93fbec601a726c1df2ea407999b84 + pristine_git_object: 087e55bd9e61112dc473bb81dd1efb83aae74d3b + docs/models/syncreconcileresponsependingpreparedstackextendgcpstack.md: + id: da4b9aaad66a + last_write_checksum: sha1:4d565547123182d2392eede1ce58c72245e244f9 + pristine_git_object: dad0679a3442e840141ac2d921f475fd62901f5d + docs/models/syncreconcileresponsependingpreparedstackextendplatforms.md: + id: 84df502b691e + last_write_checksum: sha1:34a420ab87f8da715cc3c855ec291d0f086e4ba4 + pristine_git_object: 53d9a9bc893e781e4af019d726d47426ab6e7369 + docs/models/syncreconcileresponsependingpreparedstackextendresourceconditionunion.md: + id: 833a17a93bfe + last_write_checksum: sha1:49c724d616aa36255b9d5a9c2d7b5d5b4b4815ab + pristine_git_object: f51962fb644c7ff8dd8f0f5ebc66f8c07b6b4f83 + docs/models/syncreconcileresponsependingpreparedstackextendstackconditionunion.md: + id: 5144626ac268 + last_write_checksum: sha1:8a4160bb62ecd01a44774d4797229bf3bdb2fa7d + pristine_git_object: db149cc190be86fbe8f21b64e1d9d404ab93b69e + docs/models/syncreconcileresponsependingpreparedstackextendunion.md: + id: fbacbd53db9c + last_write_checksum: sha1:4097d9bd4f10da56cb121e8a5b20225f413f9f79 + pristine_git_object: 00593ca9d2d87c36aec6b8498fda7f57f9f813b7 + docs/models/syncreconcileresponsependingpreparedstackinput.md: + id: 027ab6ead21d + last_write_checksum: sha1:655d3ca365628e573b673bede58c198b0d20f4b0 + pristine_git_object: 6b9321b973ba703e93e214a8ef094113c998b561 + docs/models/syncreconcileresponsependingpreparedstackkind.md: + id: 2b210cc5de94 + last_write_checksum: sha1:d43fed9475667a9fbb68dd5da7fbc82b55797b9a + pristine_git_object: 8d49662e593f9bee91bedec6057857263af2dbd3 + docs/models/syncreconcileresponsependingpreparedstacklifecycle.md: + id: 1b5a4c99a53b + last_write_checksum: sha1:60822d0a43cf6fc4bc07fdc676919684657eda6b + pristine_git_object: 41c10ccac21606c2b08c650c57a2b5b8d68c8f5d + docs/models/syncreconcileresponsependingpreparedstackmanagement1.md: + id: 0c3a92a75def + last_write_checksum: sha1:285b3e18d77c222bd7883bb4d11ff2849745bfd4 + pristine_git_object: 28b93feba3635d458809cb1e1cefc778a3e2d7bc + docs/models/syncreconcileresponsependingpreparedstackmanagement2.md: + id: afa5885eb216 + last_write_checksum: sha1:b861c14fefbbf6a72fd6a2c548743beb24629da0 + pristine_git_object: 6c6fcd4fa63945d0a79a016f25f0d303b25bc09d + docs/models/syncreconcileresponsependingpreparedstackmanagementenum.md: + id: f67bba8a49d3 + last_write_checksum: sha1:cb38cf14ff2487a999969de2c3730463cd8f3a06 + pristine_git_object: 82a4d9e90326d0be6eb1a3081a7863af0aca68e7 + docs/models/syncreconcileresponsependingpreparedstackmanagementunion.md: + id: a259b29cd8a5 + last_write_checksum: sha1:78c8a88491c16ecc7cfaa1142099ddf2701e0132 + pristine_git_object: 865a401afa3389494f88039c05701aea196ccf61 + docs/models/syncreconcileresponsependingpreparedstackoverride.md: + id: f5aa8065c152 + last_write_checksum: sha1:93bf445b26cef957df31344cae1f949a931361e1 + pristine_git_object: d0148dcf4b1807f717ddb0e3b55fcdd8ef34370a + docs/models/syncreconcileresponsependingpreparedstackoverrideaw.md: + id: c7eacba7c719 + last_write_checksum: sha1:682e56c5916ac3fbec8b563a9b253a97b8aaf50a + pristine_git_object: 8c2c0f4049ec6577a402256b43efe20891b9577c + docs/models/syncreconcileresponsependingpreparedstackoverrideawbinding.md: + id: abc4654f0792 + last_write_checksum: sha1:dabc4b9ef4bbf5d238887a2aea27fe6adee83c07 + pristine_git_object: 1de5e9c43230b487ae1d89fe7d7f6c0549fdb00d + docs/models/syncreconcileresponsependingpreparedstackoverrideawgrant.md: + id: 7aae700de4e2 + last_write_checksum: sha1:7958ded2a18df816d3a2d2953db3afe4e6af98af + pristine_git_object: aa438b7ab052f97aed47583d4adfac0960c5718c + docs/models/syncreconcileresponsependingpreparedstackoverrideawresource.md: + id: f0d82caf2e5f + last_write_checksum: sha1:77d118935e49ddeb00bc3a3504f4916a5735d3b3 + pristine_git_object: 62a50b175ca7f2a5dd9336ee581447b6aa6575a4 + docs/models/syncreconcileresponsependingpreparedstackoverrideawstack.md: + id: 414e17f4ef7d + last_write_checksum: sha1:90759fc847b1a7b05107ff14725524f019eb6d01 + pristine_git_object: 4402ff734fb653823eac9e791880c524bff79d7d + docs/models/syncreconcileresponsependingpreparedstackoverrideazure.md: + id: bf08574ec1d0 + last_write_checksum: sha1:651bc2c266f095f8858d51b546b5ad5cc20a56b7 + pristine_git_object: ef84cf30d13b08a7f5205a415c9fec78b99c7f36 + docs/models/syncreconcileresponsependingpreparedstackoverrideazurebinding.md: + id: ab4af74e2f15 + last_write_checksum: sha1:27a44a17efc22fa7e23d9732d3305370c155f4b4 + pristine_git_object: b0d3cb363a5346c90672012c2441c10a563be9f0 + docs/models/syncreconcileresponsependingpreparedstackoverrideazuregrant.md: + id: 5f57d7939e86 + last_write_checksum: sha1:59886073bf6ad5c004a36669a34b820310ec67f5 + pristine_git_object: 329d873ad269e77e2007a0c4c1e226ddd7106f62 + docs/models/syncreconcileresponsependingpreparedstackoverrideazureresource.md: + id: f70cacb792cc + last_write_checksum: sha1:09ac770f53efccdaf96c67017ddc5fd216bdf1fe + pristine_git_object: 002ac9b2315d111eb266ee2082d0f732ffc67811 + docs/models/syncreconcileresponsependingpreparedstackoverrideazurestack.md: + id: 3a4eaa762e56 + last_write_checksum: sha1:b935c7a2a3ccc71c73ecdbe3231c1e0aa1433f1f + pristine_git_object: 58ca500de1a6740603c2093bc657d06368a31051 + docs/models/syncreconcileresponsependingpreparedstackoverrideconditionresource.md: + id: 385c94624203 + last_write_checksum: sha1:5126815593b5ec0a17647a5caa6c54a2505f0903 + pristine_git_object: 74ed965c8b070f28a70a632367ac1d746e7d0875 + docs/models/syncreconcileresponsependingpreparedstackoverrideconditionstack.md: + id: 2a4ac1bdee08 + last_write_checksum: sha1:0a13e55755e8016f1efe54edecd769cb56fc743f + pristine_git_object: 7140c97d3e61f4bc86a9b49d47962d42c14b810d + docs/models/syncreconcileresponsependingpreparedstackoverrideeffect.md: + id: 1324ccd56bec + last_write_checksum: sha1:15aa847b9d0169049b8584547eaad94f5119b693 + pristine_git_object: b8f0559be76e92422f6162a2f159af562dd1b85f + docs/models/syncreconcileresponsependingpreparedstackoverridegcp.md: + id: feec63ccbcdd + last_write_checksum: sha1:d52466db402620599242da0747c7a89e247ba958 + pristine_git_object: 6fc17a8742eaf4bbfb221f0eaea3912475e88804 + docs/models/syncreconcileresponsependingpreparedstackoverridegcpbinding.md: + id: 93bbbf7e2dcd + last_write_checksum: sha1:71edfb2007be458fac82af7bce39d247a3be7125 + pristine_git_object: 7b59a02349ac7a7828cd5094109d9f6d5d1d8e35 + docs/models/syncreconcileresponsependingpreparedstackoverridegcpgrant.md: + id: 4a3af2dc21db + last_write_checksum: sha1:08bd5ba685c783c6b5dcac24e2436194b310cf63 + pristine_git_object: a589a2b14dfc4bd2d76c8ac702affd59ac72e8c9 + docs/models/syncreconcileresponsependingpreparedstackoverridegcpresource.md: + id: 3ae693090291 + last_write_checksum: sha1:f93b8b0c8f03b5231584336234aae26bc15923e2 + pristine_git_object: 99bdf9b2b1e385a1120ca7e5ac22ce83c890a3aa + docs/models/syncreconcileresponsependingpreparedstackoverridegcpstack.md: + id: 3cf0cfcdbb44 + last_write_checksum: sha1:d2f6e298d30a667706707f7ab21c4fe06655b910 + pristine_git_object: 67529bebdff8a23acfe544c1ff154b46ad1a89b6 + docs/models/syncreconcileresponsependingpreparedstackoverrideplatforms.md: + id: 54055ae644ab + last_write_checksum: sha1:51a35bd8b44428d2ace88ea6869d01d42c3a61d3 + pristine_git_object: 62c0b918ad05b7e40c12ae8ff4cabc4fc5f10eba + docs/models/syncreconcileresponsependingpreparedstackoverrideresourceconditionunion.md: + id: 4d30e6ffe549 + last_write_checksum: sha1:1c75d0f61472c457cf04a8854a61b31947f0fe6e + pristine_git_object: b3f68621486bc8799e8221edaecc5ef91fbd48b6 + docs/models/syncreconcileresponsependingpreparedstackoverridestackconditionunion.md: + id: a6134baecf7c + last_write_checksum: sha1:758f0804c09104dc7dde72a787d764eec131caac + pristine_git_object: 412e52c5b3a4c7c77252d986e3b5fb229e72a97f + docs/models/syncreconcileresponsependingpreparedstackoverrideunion.md: + id: 2c98fcc112d2 + last_write_checksum: sha1:3ad7ea6c97ce8fe41223b86161b0f4e727d2f6df + pristine_git_object: 7e79bff88ffe41381ecee2dd24117f99c6a01cf3 + docs/models/syncreconcileresponsependingpreparedstackpermissions.md: + id: b81f22fc2746 + last_write_checksum: sha1:cf47a4a34547091115b0d9da4a9ff91d8fc2d00f + pristine_git_object: 69a747e666ac14d89db77f215725a9e54e4d9194 + docs/models/syncreconcileresponsependingpreparedstackplatform.md: + id: 70f7fcad741f + last_write_checksum: sha1:e6e3fec30c7fcdee56b5d5793cf0f3f500b804d6 + pristine_git_object: 8fa211df9d35b8b9228de6f0eb7cfcd5ef89da38 + docs/models/syncreconcileresponsependingpreparedstackprofile.md: + id: bb0ab079d62b + last_write_checksum: sha1:f620576cf6f8c1335d35eff894178fb023fe64ba + pristine_git_object: 1b0c2195ef7be32cd95b28b8ae62ccbd9dca9bf0 + docs/models/syncreconcileresponsependingpreparedstackprofileaw.md: + id: 6e4e60cf6db9 + last_write_checksum: sha1:eb3d70d18b1247bdc4a00b8a5e73f919c3fb3cbf + pristine_git_object: 400827c854c8dce67b1a0fcbe2b661a13e249de2 + docs/models/syncreconcileresponsependingpreparedstackprofileawbinding.md: + id: 90ebece1b864 + last_write_checksum: sha1:86f249b4ee55eaf6432ed2dc4a2c37fe3800ee74 + pristine_git_object: 9a7848826b97a40c61877a3e9ba0662924fae42b + docs/models/syncreconcileresponsependingpreparedstackprofileawgrant.md: + id: 267dd605623e + last_write_checksum: sha1:fac61d271a57747773bbc225e1458236c345d9cd + pristine_git_object: c6349235523ccf80cc2a3cb3fd4acd44fdaeb067 + docs/models/syncreconcileresponsependingpreparedstackprofileawresource.md: + id: da4e25a2657f + last_write_checksum: sha1:fbb92c435811aa1501db94a23124d821805e20bb + pristine_git_object: d9000c30f3e929ca5869fac9b2b2a2026d6238a5 + docs/models/syncreconcileresponsependingpreparedstackprofileawstack.md: + id: 8c6667e1e4e8 + last_write_checksum: sha1:f6d6a68b9602115df4ef9cc28ba337f4acbd2432 + pristine_git_object: c33e3d9dbb12b301b2651c19729f2781e1025099 + docs/models/syncreconcileresponsependingpreparedstackprofileazure.md: + id: 695e81129ff5 + last_write_checksum: sha1:113f9248dc1e3f01fd4b7707d3cc10daa556cd6d + pristine_git_object: 86e0bfd52803a868a30e094581a03c3ff0452531 + docs/models/syncreconcileresponsependingpreparedstackprofileazurebinding.md: + id: "490734440892" + last_write_checksum: sha1:f7b48c8426d0f9d85c6d5581753ecad19a527b47 + pristine_git_object: 7d1c57b0e952d8ecd25763600f49a7346b7ab394 + docs/models/syncreconcileresponsependingpreparedstackprofileazuregrant.md: + id: 2217e4bed4a6 + last_write_checksum: sha1:9de4f7ac7aaf3f457485134a655e9a4cf4251686 + pristine_git_object: 764b2efb474b959729a1ea1d5e0d3604bf6a32c5 + docs/models/syncreconcileresponsependingpreparedstackprofileazureresource.md: + id: 27965455da1b + last_write_checksum: sha1:7458035bbe810d0982a5834b1af5e9e15523d973 + pristine_git_object: 4e6fd2086bd19fc706799d933d525b8c7aeacc9e + docs/models/syncreconcileresponsependingpreparedstackprofileazurestack.md: + id: 6ca053b2f136 + last_write_checksum: sha1:0dcd7c7f3443370cb488643cc52261f1c1b56fa3 + pristine_git_object: e66ad8162e188416908125f35a766ad30b0f263a + docs/models/syncreconcileresponsependingpreparedstackprofileconditionresource.md: + id: 51d9dab36855 + last_write_checksum: sha1:c701d5376a8e7140648bc89ba83fae1f794ea004 + pristine_git_object: 7c5fd3d2a707deed251785103344b82e9f7edaee + docs/models/syncreconcileresponsependingpreparedstackprofileconditionstack.md: + id: b5e4542168a8 + last_write_checksum: sha1:694f9ea843d273515e48c26d0469af781720dc4a + pristine_git_object: d62b67b0b76e73966d7533195fb8e246236fc426 + docs/models/syncreconcileresponsependingpreparedstackprofileeffect.md: + id: 9d97acec6442 + last_write_checksum: sha1:6ffd39ecae456d4a8e1cb2ca396b1410dfdbdbb0 + pristine_git_object: 93bb4786bfc54081995b408d6d7a136d86bcf983 + docs/models/syncreconcileresponsependingpreparedstackprofilegcp.md: + id: 3da590f0ef8f + last_write_checksum: sha1:d1aee71198b82ed49a0440bbd019f0585d4edb57 + pristine_git_object: 0fe4662bee7baaeaa66d1de4a7e5247624e5487e + docs/models/syncreconcileresponsependingpreparedstackprofilegcpbinding.md: + id: 6a4583626ed8 + last_write_checksum: sha1:4971b8117a11d9282e1d24944f38b1c3c855b2f3 + pristine_git_object: 59934d9eb82bdeff0e06ed11690cc15c54ae533b + docs/models/syncreconcileresponsependingpreparedstackprofilegcpgrant.md: + id: fda50822d25d + last_write_checksum: sha1:275a4d6538234586e21c72a582555297f2f8fe1d + pristine_git_object: 3d6ae977fba6a9b56aa71d03de581dc8daeb5f2a + docs/models/syncreconcileresponsependingpreparedstackprofilegcpresource.md: + id: f701c04fb54b + last_write_checksum: sha1:d28df227e77aa181e2807efee4ef416632e45593 + pristine_git_object: 9c98581a7e13bcd67d59f2ee0bb16fd1009b7d94 + docs/models/syncreconcileresponsependingpreparedstackprofilegcpstack.md: + id: 8d8106a76fce + last_write_checksum: sha1:af4e59e66e6a04660ce6389698709a30ee47de3e + pristine_git_object: 8ab9039c089ee59b2494292e3704a44f21c7fdd7 + docs/models/syncreconcileresponsependingpreparedstackprofileplatforms.md: + id: e98296e25499 + last_write_checksum: sha1:f6ef9c824d2b9ea646888f1afa171cd95064052e + pristine_git_object: 09468639c00573bdd78cd3c582999dae4e35d684 + docs/models/syncreconcileresponsependingpreparedstackprofileresourceconditionunion.md: + id: b4480971d19e + last_write_checksum: sha1:b8d26163a377ec56559d0f1d66e12889c5a2b48b + pristine_git_object: d2cfc238a030d226b3b24ee6eecb8c432dd53f66 + docs/models/syncreconcileresponsependingpreparedstackprofilestackconditionunion.md: + id: 003c272cbff5 + last_write_checksum: sha1:82b45decf4764883da2afea6b37cdad79fdd6de6 + pristine_git_object: 8ec4764ca2b65b224c03b7d9342be2c12ea9c60e + docs/models/syncreconcileresponsependingpreparedstackprofileunion.md: + id: 1d28fd96ecc8 + last_write_checksum: sha1:05abad9bd43eac0a8cd237032c2f5f8a653e1c3f + pristine_git_object: 8ee432dff0f480ab980ae74dc5a5c36ead83d8c1 + docs/models/syncreconcileresponsependingpreparedstackprovidedby.md: + id: f70dc485f700 + last_write_checksum: sha1:d0763c7a008b66fd8611aa556b92901d7c97d00e + pristine_git_object: 02b9a058025620e334c2d9cb689949c6727000a9 + docs/models/syncreconcileresponsependingpreparedstackresources.md: + id: b1927470c359 + last_write_checksum: sha1:e86a0dc6f4aff7e9f5faf71e9f469edfdaf1022a + pristine_git_object: 896e51c9d2aa1783925c9e9b786052ef3bf62c6e + docs/models/syncreconcileresponsependingpreparedstacksupportedplatform.md: + id: 1935657b558c + last_write_checksum: sha1:e88945eea10d14d8836bef2ff5a29eff348aa542 + pristine_git_object: 916c988a3f853b611e4d18f2ff5ecce056446dec + docs/models/syncreconcileresponsependingpreparedstacktypeboolean.md: + id: d2ec16743388 + last_write_checksum: sha1:81a773ed6294a6aa1cd01f3f9fbf5c56f97045b1 + pristine_git_object: e7a9f61228355018f7a623f67d3564c9e976946b + docs/models/syncreconcileresponsependingpreparedstacktypeenvenum.md: + id: 31c206943fb2 + last_write_checksum: sha1:f0ed968eaf29fc7041cbee6037917d66f7eac9b6 + pristine_git_object: 0aa260fa2b6c4a45777d5c4bd5bf960be3a71ab2 + docs/models/syncreconcileresponsependingpreparedstacktypenumber.md: + id: 771f53018ba0 + last_write_checksum: sha1:86d21b8beabd789bf0e97e09f06b9550c4798257 + pristine_git_object: 4601bfafe7e7d44adc449387f7274b17ee942d4b + docs/models/syncreconcileresponsependingpreparedstacktypestring.md: + id: d074a7d67bd1 + last_write_checksum: sha1:5beaffac019b736bb0d7bb8766f626bda856de2b + pristine_git_object: eb7fa23832934c0afb0c92f7c6a6a17c1d32a0ce + docs/models/syncreconcileresponsependingpreparedstacktypestringlist.md: + id: 8ca684062ce8 + last_write_checksum: sha1:e42ddb2144265dff6035e4e05dd573a50245a834 + pristine_git_object: d53d93e5ca9fdf2da183026d1a36e91f2a39d457 + docs/models/syncreconcileresponsependingpreparedstacktypeunion.md: + id: 3b4ee60e8b34 + last_write_checksum: sha1:3d30bd83e8d9963511164a08713bdbe715b96521 + pristine_git_object: 9acb9042a876c83b48ca68e02ffccc713b500e0d + docs/models/syncreconcileresponsependingpreparedstackunion.md: + id: ee6f8af3eb77 + last_write_checksum: sha1:ed3e76c71c080a3150c6fbe0dd07fecdf075da97 + pristine_git_object: c2b4046587cbf80ae510179ab155c79c42de3120 + docs/models/syncreconcileresponsependingpreparedstackvalidation.md: + id: 725f543680d8 + last_write_checksum: sha1:e701d6b17d171dc3a31ab918beedfdc13979a211 + pristine_git_object: 714428df2e56e212713199df532794da9783bca3 + docs/models/syncreconcileresponsependingpreparedstackvalidationunion.md: + id: 2d2803afdefa + last_write_checksum: sha1:bcb5f32e9fbd3cd6038c0c8e75204dc79c353f0a + pristine_git_object: 6fcc0b8b90fca149020e8ef6683e369ac22a4054 docs/models/syncreconcileresponseplatformlocal.md: id: 315da2271cd8 last_write_checksum: sha1:aae032248722bd29dbb5381fccd94797e8d0ec68 @@ -24840,12 +28668,12 @@ trackedFiles: pristine_git_object: 64c9a0d5ae4936176f32955a6e8c2ae1bad143e6 docs/models/syncreconcileresponsepoolsautoscale.md: id: 2093ba0fbfa8 - last_write_checksum: sha1:29bc1d2da83d0763cba17df1da14609df52983f8 - pristine_git_object: 5c8dbdcfc0414114498a4f110ba97502093e85d7 + last_write_checksum: sha1:b9dc1f6f2b2aa27f807ca78b38ec24ca6e69fc45 + pristine_git_object: f9b32f32baec58cb2b43eb708832fb37d357ee4c docs/models/syncreconcileresponsepoolsfixed.md: id: 8207de7bec7e - last_write_checksum: sha1:d2700d78a766af498739964cae4463d1cc82728e - pristine_git_object: c81e70fbfab13dfa25843b469fdc610cb6ce05e3 + last_write_checksum: sha1:939b7c7c9200b44f9bfd53bf0affc11ee86ca574 + pristine_git_object: bdf2b52e5315998f046ef1e44d1eaf3dc6818a14 docs/models/syncreconcileresponsepoolsunion.md: id: 7edf40084c8f last_write_checksum: sha1:0961fd4c036f1fb97eb20f74f845517e651d0b70 @@ -25264,8 +29092,8 @@ trackedFiles: pristine_git_object: b4a33e7fb6df8b679256fdd92e2781841364984b docs/models/syncreconcileresponsepreparedstackresources.md: id: 191daf8d65e0 - last_write_checksum: sha1:13e7e0c3c80682a8ca0f67244a3a1c0161fcae09 - pristine_git_object: 996b8ad225706d73396b38b3be54baabf5333df4 + last_write_checksum: sha1:889063b708dc3494e69075e34902894fbdb4317c + pristine_git_object: 760310910223dcd07c582a588a008e13202bc1c6 docs/models/syncreconcileresponsepreparedstacksupportedplatform.md: id: 20501447a9f9 last_write_checksum: sha1:30f6a1951a454c411c8d2fc2171bcfd4024c6e4e @@ -25660,12 +29488,20 @@ trackedFiles: pristine_git_object: 29cad4d24be0adb69ba28117a43b13062e2ceda8 docs/models/syncreconcileresponseruntimemetadata.md: id: 373f475926b7 - last_write_checksum: sha1:621f46c3f8a37c799056278dbbdd7da81880332a - pristine_git_object: 0ced73a05cee24e7e65dd63c5a41e23494fa321b + last_write_checksum: sha1:cd8a948680e5cad93eadcd26f729c8ebf9e26258 + pristine_git_object: 9feba9135aa567f17c89635ec9d6376e738b9415 docs/models/syncreconcileresponseruntimemetadataunion.md: id: 1c4a89a1cf4a last_write_checksum: sha1:c54310897f285b59d4b8b9b5f5f97298528815d3 pristine_git_object: 4028a6dd2a008d7387fc43333f93b7d7ace3506c + docs/models/syncreconcileresponsesetupupdateauthorization.md: + id: 03b9c60b5fdb + last_write_checksum: sha1:d4572480d2b3f5c79bc329244b882c23d431e517 + pristine_git_object: caaf33c5ec0d28ed4289d9ca69c51e0c29cd596a + docs/models/syncreconcileresponsesetupupdateauthorizationunion.md: + id: 709e1cd66d69 + last_write_checksum: sha1:94a5b15ff70c61a2e32c4b85632905eed74d16da + pristine_git_object: 2b683720814d639e1d8f9cb16ccc26d10e92e849 docs/models/syncreconcileresponsestacksettings.md: id: f4ef30daf645 last_write_checksum: sha1:4c24395a4a0d2413e1a34afc572530f6309b69f5 @@ -26136,8 +29972,8 @@ trackedFiles: pristine_git_object: fb65bb4a84fbf9d3b8380c92692b4989b7f8361a docs/models/syncreconcileresponsetargetreleaseresources.md: id: 375a2d058630 - last_write_checksum: sha1:95ad190c9559b1407b2b7a3989facd826ae12b7a - pristine_git_object: 06c7b898ec31403c633209da6c49463f1fd1c9b8 + last_write_checksum: sha1:47ce5cd862c2c68c2190b60c950fed02e67219a8 + pristine_git_object: be9064f7c1bae647487400aec1e60ac6d55839a6 docs/models/syncreconcileresponsetargetreleasestack.md: id: b0909844ceb6 last_write_checksum: sha1:06584b6edb2eeb5e39c49b1823707709c753081c @@ -26324,8 +30160,8 @@ trackedFiles: pristine_git_object: cfc5e5e426740f00eaf62a142182ab9ca4e99693 docs/models/targetconfig.md: id: 3394f3ed91fe - last_write_checksum: sha1:d54d17a7db46d2103c45d8f1e6fab67de5b2b06e - pristine_git_object: f5d85637d0b6f3b681716d78765bb3d1592d849c + last_write_checksum: sha1:30933208b4e3f121d96d3f13036878e4c38ca3ae + pristine_git_object: dfbe5b5b5b1f57f1af101079bbca74719cdaf982 docs/models/targetenum.md: id: b6f36bd46968 last_write_checksum: sha1:1f04cf7ef96d1a1c75d8099ad3346729e1719b5f @@ -26628,8 +30464,12 @@ trackedFiles: pristine_git_object: b3209b1aff7b5f4e51e1422a23e8db67ce097288 docs/models/updatedebugsessionrequest.md: id: 1144b23613d0 - last_write_checksum: sha1:b6caa1017d41da0730b82dfd1cda7af1321f4e26 - pristine_git_object: d180e134314a93802e329472c369ad031728674c + last_write_checksum: sha1:4195a898070ae4de028ef0f71c67886f5885ccf6 + pristine_git_object: 314f6f6acfd7d195af8570eafb9e6f42f6cb360a + docs/models/updatedebugsessionrequesterror.md: + id: 6f3176cbad8a + last_write_checksum: sha1:b0f0a38501d6eebf3d9f359ebdbae260cf7d1002 + pristine_git_object: d7e4508bd0e31b2a8a4715c1cd36568031fb86f0 docs/models/updatedeploymentenvironmentvariablesrequest.md: id: 338cfa5935dc last_write_checksum: sha1:360fd370362f527b3216601592430aa198c38d88 @@ -26728,8 +30568,8 @@ trackedFiles: pristine_git_object: 8994005f016603fa4936cad7528549aae854918f docs/models/updatedeploymentsetuppolicy.md: id: 548dfca7c0fe - last_write_checksum: sha1:01021bbf3c5a0d8e5eec27f06c5e5807935574af - pristine_git_object: 3cbd81fea582bf19bbd879eb281571bd17aeb127 + last_write_checksum: sha1:156dfd7db32096c3bd123d829d0e4e83650176bb + pristine_git_object: 4104e39aac2c028219392a21724028917cd42cc0 docs/models/updatemanagerdomainbinding.md: id: 8b1e48d60d8f last_write_checksum: sha1:aa652024ff37c03347ea24ae3ed4471c3d007f43 @@ -26743,11 +30583,13 @@ trackedFiles: last_write_checksum: sha1:2afac1e97455fd9da2ba77ad5e87c0362419bc18 pristine_git_object: e274752824525f2ace785e39c8031db060bf1489 docs/models/updateprojectbinarytarget.md: + id: 1c175ac70923 last_write_checksum: sha1:172e5dff1ef41f3530ee047c670947b05ee749e5 + pristine_git_object: ac33b7d65d43a8534add013c4078a54866bd18f8 docs/models/updateprojectcli.md: id: 02a0f4b5f95c last_write_checksum: sha1:b587431f554ec4f482614bb7100f805c149a5ad6 - pristine_git_object: 9c83df9062a611b5c0475af5de33405c66407875 + pristine_git_object: 7076c04c06f217e49df82ac4a4b12b19c833ed65 docs/models/updateprojectcloudformation.md: id: 23afb1d4960a last_write_checksum: sha1:b096051e371946e15e1b80504967cfc4523b57b2 @@ -26796,6 +30638,14 @@ trackedFiles: id: 1fa0bf2ef78e last_write_checksum: sha1:ee71eca6e79c993755e90a416472af6a8d953785 pristine_git_object: 7a10d04401a45bfa926775caef8c02e478efd653 + docs/models/updateworkspacesettingsrequest.md: + id: 267b81d3917c + last_write_checksum: sha1:0d613da438ca04d53f760d8756afce66182dc169 + pristine_git_object: edca8a59e1c9438af90c873fcc6ecbcb9a3fca3e + docs/models/updateworkspacesettingsrequestdebugpermissionmode.md: + id: fe720a3c12e7 + last_write_checksum: sha1:04dcfc14a142f405df1138baf1aeadb97cb2c302 + pristine_git_object: 03d408814d63c65f8f22f9e6733e37fb27a5b6d2 docs/models/usage.md: id: ba79ec873169 last_write_checksum: sha1:29b4a1c903869ec05e7a2875016df51d9c7ae6b3 @@ -26960,6 +30810,34 @@ trackedFiles: id: 1439296c684d last_write_checksum: sha1:bdedb192edc080989d7f585037cd583de3901ee9 pristine_git_object: 7e417df9210e5de8587092d675e82dc30503bab8 + docs/models/workspaceinvitation.md: + id: 5f3429592b76 + last_write_checksum: sha1:270b808cd03c264ad96697db088e9d2819e6e486 + pristine_git_object: 06fb17a7a05d39ea00d9abf4f22a78953c29632f + docs/models/workspaceinvitationpreview.md: + id: 60810f29aa85 + last_write_checksum: sha1:4b739b914377ba99a992e6918ccb4438ac56b64d + pristine_git_object: 344bf6c6ef74eaf6a3f92a365130a3e027d897ed + docs/models/workspaceinvitationpreviewkind.md: + id: 07707b23ae71 + last_write_checksum: sha1:5e5fef7315e34b470266fa90dc446c9ccec852f1 + pristine_git_object: 93b24b440a0a819c22ebe250a31a52d540497fbb + docs/models/workspaceinvitationpreviewstate.md: + id: 17191b173c0b + last_write_checksum: sha1:6d9202681ad838271386b892dacb99389f16224b + pristine_git_object: 1af1b5d587854163048db205adc974cf9b249898 + docs/models/workspaceinvitationpreviewworkspace.md: + id: c084cc352685 + last_write_checksum: sha1:1199a344a4cd686ddb38bbb10160f9f190d3a355 + pristine_git_object: 9ec6a560eb204adbd9d0b8aa968be34a913f07d3 + docs/models/workspaceinvitationstatus.md: + id: 6a1977ab7b47 + last_write_checksum: sha1:7c59641a03ed904289a2a86a77efce153e1baf12 + pristine_git_object: 0c88655b6eb0f4490661a97746bc72367f88a2ff + docs/models/workspaceinvitelink.md: + id: 9503a4a05371 + last_write_checksum: sha1:049f39340099b29171fd9510a35a6d32a1b7cab9 + pristine_git_object: 47d55f74db6f9a642982045ea71d533e7b5f6df5 docs/models/workspacemember.md: id: 74015b802170 last_write_checksum: sha1:01326c9a7e16fe074cac722815895e9e86b14db7 @@ -26972,6 +30850,14 @@ trackedFiles: id: 8f04510d8038 last_write_checksum: sha1:7876005e444c97cf3c212d0ff9b4a38e416a0dfe pristine_git_object: 22164c18980137da563d65b2be38af872ab9ba78 + docs/sdks/agentsessions/README.md: + id: c10e9b5bc2e9 + last_write_checksum: sha1:8406f8c606717ef44e323f9f61808dfb88472063 + pristine_git_object: a6deaf994a020c22e874a212d52d6eb0f90cbbd0 + docs/sdks/alien/README.md: + id: 53ee18ef5fbf + last_write_checksum: sha1:d56a8eb5d919a0d2e69c1e727a37a315b4a9b65d + pristine_git_object: aa7c060a79cd1d2f4b47f35bbf104ff022469f22 docs/sdks/apikeys/README.md: id: e2bd25998427 last_write_checksum: sha1:e9209e6b7dd3328c10dcc9b055ceeb1c65243115 @@ -26994,20 +30880,20 @@ trackedFiles: pristine_git_object: 1dcf7d6de2b07ecfb661652b78f4cf26adf2cfaf docs/sdks/debugsessions/README.md: id: a03f3215c473 - last_write_checksum: sha1:a0cec008448ab1db45812e7efd6315b1d08cdf06 - pristine_git_object: 0ad9d69175d8519e9b8bc35cefb4dbdfb9f8d123 + last_write_checksum: sha1:306683079c64599a8661d9820b436a1787bf1aa2 + pristine_git_object: d3c7770448e883d9baf46ce3dbecefd2f5fd4f78 docs/sdks/deployment/README.md: id: 5cb544abed28 last_write_checksum: sha1:5f5cd94757bcf4ba7046c77db9205edd428376fd pristine_git_object: 3e791cad7f6102a7a2aaffeddcb40990d20ff890 docs/sdks/deploymentgroups/README.md: id: 5df9f1e7770b - last_write_checksum: sha1:95f7089e21ae06d2c272fc22c663a59fa83ceff0 - pristine_git_object: 3ab72dac669daa20a387032aeff49aecfdbf7c91 + last_write_checksum: sha1:48d6024b3480bec4e6ffb143071dcb7f7ed6dfa3 + pristine_git_object: f1d7aa58b5b07efd092d9907152f14f48dfa86a8 docs/sdks/deployments/README.md: id: e7c5559ab768 last_write_checksum: sha1:04086e8826d7cc980e3cebebc6608fb3bdb29b43 - pristine_git_object: 268c082c13e5df90c861fbc9a7ad8a12f4d4d23b + pristine_git_object: cefc3e98273e78914a0e33efe6d100b737e6ca0a docs/sdks/domains/README.md: id: 06e9beb4063b last_write_checksum: sha1:f67185776fcc10b386cd3e90b2f7bbbdfd5f435f @@ -27022,8 +30908,8 @@ trackedFiles: pristine_git_object: 91ba63257de1e5cfe068cb6e5a71b87317301288 docs/sdks/managers/README.md: id: bd852d1f1428 - last_write_checksum: sha1:5223d48ed5b8720a8bb3a3eb2fd68e0552ae5809 - pristine_git_object: 8bfe2a424a7d98d235de9f1038cefa0a23b92c35 + last_write_checksum: sha1:e4c3674e7d0b479cffc698494cded7db1ae49de6 + pristine_git_object: 3b9786bbae494fcea10d430a5879517b4a1c4690 docs/sdks/operatormanifests/README.md: id: 5797b1d533e4 last_write_checksum: sha1:35b59f0d60e44da391bfe7175953cd7f44858455 @@ -27048,6 +30934,10 @@ trackedFiles: id: ddaa9ea920d9 last_write_checksum: sha1:1df2415358b523ce545ade7e278f5d2113e4293d pristine_git_object: 761dd8ccdba4d112b4c73858d8b82c0f3cab8675 + docs/sdks/slackintegration/README.md: + id: 9ff9964f2252 + last_write_checksum: sha1:1cf5a5433a69614e524d33e11d30d11e8b3da93e + pristine_git_object: 42a9a944946b7f62ac1761d8877283e4b5f602a3 docs/sdks/sync/README.md: id: a2e09f86bd16 last_write_checksum: sha1:69eda3afad9b999c252aa7c58850fed88dada1e1 @@ -27058,8 +30948,8 @@ trackedFiles: pristine_git_object: 8f39a20a53fa575fcde3b3ce407fa79609d58ad7 docs/sdks/workspaces/README.md: id: 1f5b051a6380 - last_write_checksum: sha1:ba59db40082648126bf7ca09dfef433afb087cd7 - pristine_git_object: ea607887b5585d511b732faf8676225f51ec743b + last_write_checksum: sha1:408c9a2b59a13282e50dc185981139f1d48ed7c3 + pristine_git_object: 28e8d905284cf69a0c7a3ea30abc5b5b2f0156e5 eslint.config.mjs: id: 461c8d07f6da last_write_checksum: sha1:9398f326377fe47f67af2df6eb6370750c0790b4 @@ -27072,26 +30962,50 @@ trackedFiles: id: 9d0f69d6e677 last_write_checksum: sha1:06ead694257a1826a413c9267347ddf7ce6e7a5d pristine_git_object: 881bdabe3a2b7d1004f4d5e63addda8152e4a9a7 + examples/getWorkspaceInvitationPreview.example.ts: + id: e3547b65185a + last_write_checksum: sha1:7e9e2bb553501989995c2d593a9a56837827c5dd + pristine_git_object: 11c31f8f02f91725221d46c92a3e0179fc206af3 examples/package.json: id: c1d7b0ec8e7e last_write_checksum: sha1:79c2647b05a6b6d627c5ab80d9dd24c7fe63ab42 pristine_git_object: 91b9336926d9e04ff3216ceb7f6e1d29f96c3a19 - examples/userListMemberships.example.ts: - id: 79d007295618 - last_write_checksum: sha1:e256918ecc8c65a097ef9f3beca92f00b6657aea - pristine_git_object: dc513216f32a6341abe21c560c28d4d70a769203 jsr.json: id: 7f6ab7767282 - last_write_checksum: sha1:da5cf0e8db2758cc9f81638076a4ec2e5e709b04 - pristine_git_object: b27d1739aa21f6dfb0a2772ceda2defdbe7bc6c9 + last_write_checksum: sha1:33df9ea739ad8875e7a7a3d1e2701a3f29f716e1 + pristine_git_object: e6dc236fa9000944151b9e09d0c851f3f9333280 package.json: id: 7030d0b2f71b - last_write_checksum: sha1:4b3e6d584e7ca1fd6e60d4a852f672478e0ed53b - pristine_git_object: 65db061a4e545903e4d3aa5cb5630a83fd28ce36 + last_write_checksum: sha1:e2a2e389aedbe56de4080fad141c1723d5ea3815 + pristine_git_object: 554e96e933cae3efda6f456298ef7f34b12c0c3d src/core.ts: id: f431fdbcd144 last_write_checksum: sha1:c634ddf4882f77c6dba4422d8b4ba7cb5a3a23d4 pristine_git_object: e636ed43350b38029ea85faff425f7d4aca39fb1 + src/funcs/acceptWorkspaceInvitation.ts: + id: 8a8b426f2a5d + last_write_checksum: sha1:282017066545d7b3f852a8fde2982f8fdb58eca6 + pristine_git_object: e74b919e0c9e50880188aec9d13b2d957ec4451e + src/funcs/agentSessionsApprove.ts: + id: 1f934fd67491 + last_write_checksum: sha1:33e7d107e04bdaf316e24765cfcb3b73f0ec599c + pristine_git_object: f017d5695b89148a2944faee588769f561400eee + src/funcs/agentSessionsEvents.ts: + id: ca9cdf9b5ee6 + last_write_checksum: sha1:10af4c37c937e78ff20c32cea0e7e64ddef44155 + pristine_git_object: c6facc8c55a5f4f52a1af0e5ef0be3aab81c90e4 + src/funcs/agentSessionsGet.ts: + id: 183b19270abd + last_write_checksum: sha1:206735df32904e95a5e3659596354cb45cabd3e4 + pristine_git_object: bd64c55dfb579693ee265846451fa29725f1e191 + src/funcs/agentSessionsList.ts: + id: eac4efd0b33c + last_write_checksum: sha1:41652374cfc886e2cdab0db83e25e00dff69255e + pristine_git_object: 332e6e27825979459882783d10e2a206653b721f + src/funcs/agentSessionsStop.ts: + id: 2cc26a836a17 + last_write_checksum: sha1:6e3472fe4b0bbc1b415edc43d5801fe3c610ae42 + pristine_git_object: 2fbd5e3d93e8bc0dac2937e9cc1f9b2eceb4aa69 src/funcs/apiKeysCreate.ts: id: 133e2c5f487c last_write_checksum: sha1:be3255691199eb6a1d9b21ec93e871907b0d1345 @@ -27172,10 +31086,18 @@ trackedFiles: id: 08c09d84d2c6 last_write_checksum: sha1:cc982bf548af5d9201881340d950baf03509ee0c pristine_git_object: 77b845097d249ff83c45ba4f87f7413741e3f42d + src/funcs/createWorkspaceInvitation.ts: + id: e0f2096473ef + last_write_checksum: sha1:3fc3e5417b2099eae75acb16b544c644c00c4808 + pristine_git_object: d72c54200824f428c59329b3e535a19859245ce9 + src/funcs/createWorkspaceInviteLink.ts: + id: 0be29d589b14 + last_write_checksum: sha1:1ea3fb3171e13fbeed50df6508bacc66e4320b11 + pristine_git_object: bb475ffb57d82f84cba7d802d67639deddd98a1a src/funcs/debugSessionsCreate.ts: id: 0ab661b4b653 - last_write_checksum: sha1:b8057dfbd96ee390f53d88605e32be4dd39e277d - pristine_git_object: 177493d921902aeb7e1501765dc8b0e78da1e98c + last_write_checksum: sha1:55d19bfc54e31ab18893a2f74571b90c9a89a375 + pristine_git_object: 0551cfbd79397e8e4f78abb8ebb4c497cb27a5f8 src/funcs/debugSessionsGet.ts: id: a3fbbabbc566 last_write_checksum: sha1:289679b8730a9ccf09dd4a3f60367d895ebf6bd0 @@ -27184,10 +31106,14 @@ trackedFiles: id: 93b91b8dd257 last_write_checksum: sha1:75022f648ff07179aa6c7ad45da9c0cd4ed362ae pristine_git_object: bf514095b16882736514e219432457fbcf8a2cec + src/funcs/debugSessionsListActiveForManager.ts: + id: 691d16629ec3 + last_write_checksum: sha1:c8d222dcba38bcae40baa16c7f88337107f10394 + pristine_git_object: 625b708b6a8d0f1707624bbbdac2c0ac407112d2 src/funcs/debugSessionsUpdate.ts: id: 36cc51df179b - last_write_checksum: sha1:1e7d64df22c881aeaf15111cbf48f9ad7491e927 - pristine_git_object: c5c0a800891e327b48f5c7ae3f8b42675442ca99 + last_write_checksum: sha1:2fcb414f702513061b53058f3dd5cc83336d0f46 + pristine_git_object: af1cdd6caf388614db184523745f491d73106961 src/funcs/deploymentGetInfo.ts: id: 5c45d30a687b last_write_checksum: sha1:10a1808c5b143bc0599fee59b7d79d12c98c60a3 @@ -27198,8 +31124,8 @@ trackedFiles: pristine_git_object: 39850e87ab75f48324d59166d59a77f64d27131b src/funcs/deploymentGroupsCreateDeploymentGroupToken.ts: id: a343994dab62 - last_write_checksum: sha1:87fd10fba6a6c5d56db7299ca381a4d90b14902a - pristine_git_object: c7967960a65d8fa28750e466b4efd2d1fa73e16b + last_write_checksum: sha1:1b62a6cfd34743f4b433e619c21fddc9471a6945 + pristine_git_object: 195de6bfb7b1b97a070cd7d19549475b00525f76 src/funcs/deploymentGroupsCreateFirstPartyDeploymentSession.ts: id: 2d05efac25c9 last_write_checksum: sha1:ad1dad4ff867093960281e6bb4a4d2af2d3ecafe @@ -27287,7 +31213,7 @@ trackedFiles: src/funcs/deploymentsPinRelease.ts: id: fc058c79ad16 last_write_checksum: sha1:4088652bd9c23f25b7dfdf9f0c4d3b35843e997d - pristine_git_object: 18d7297e23645a934571a676214b5965ee5ed58a + pristine_git_object: e56ca67fd00096d6850ed9913a39728fcf2998cd src/funcs/deploymentsRedeploy.ts: id: e6a049912ff7 last_write_checksum: sha1:6e3172ca91dc5268f5f63ee5925fcf98623b9efd @@ -27338,8 +31264,20 @@ trackedFiles: pristine_git_object: 977fbe409cb702af90d4bf08039368caaa67a552 src/funcs/eventsList.ts: id: 4522a8542985 - last_write_checksum: sha1:de66a377d92d0d51827cf9d98f6e82492dcb9065 - pristine_git_object: 9eb6232914eab09dc4edfff3ac5b1543d5b49a66 + last_write_checksum: sha1:26c742cace2f8572c12cc5544409b3288b185f31 + pristine_git_object: 6c6e4e657a6d13aaa0a200b8c8aa52742dc6cd1d + src/funcs/getWorkspaceInvitationPreview.ts: + id: b25036a0d345 + last_write_checksum: sha1:0332d9b584d0e47f3d7ba2e6b8bf8a67ebd3016c + pristine_git_object: 2a1e4718c868a01a8cda31a091c499287992ee23 + src/funcs/getWorkspaceInviteLink.ts: + id: 09e6621ccb12 + last_write_checksum: sha1:dc456ba4116206daf9fd320ecc3548e86bd591a3 + pristine_git_object: 8155fe4dd4c61fd635a0041df4aee168804d5a32 + src/funcs/listWorkspaceInvitations.ts: + id: 28f5891d65c1 + last_write_checksum: sha1:e615f9dc8c09c18276fa470dd7eb0dd36f2093ce + pristine_git_object: b81150c3b52c4b9afd80989da38a48e7328a128d src/funcs/machinesCancelMachineDrain.ts: id: 43a26468d0ef last_write_checksum: sha1:16164472b36c0c3f323c2f1f4aaef62d38d54d1f @@ -27384,10 +31322,18 @@ trackedFiles: id: ce3e434b894f last_write_checksum: sha1:2c55972597b24fa4835c19e3f247e5d5648cb5f0 pristine_git_object: 7eb37a567a8ea9aedee0ba8b85498cd8b91dbbef + src/funcs/managersGenerateManagerBindingToken.ts: + id: 97fc356430cd + last_write_checksum: sha1:a9fc19f438e7dd6766d2e7d08e7e0354584dbf90 + pristine_git_object: 89efc49663a94ca7087785545972ffe0f50a12b7 + src/funcs/managersGenerateManagerCommandToken.ts: + id: b7c9d5c9d82a + last_write_checksum: sha1:b96c7712a088c36268fcb85dc99ea19ede80f345 + pristine_git_object: 14fd6559b31baa9d0eff26432a0cbf235a074e52 src/funcs/managersGenerateManagerToken.ts: id: e1ce023349b5 - last_write_checksum: sha1:05ef2f7710dabd2a8f8f166cf241ac42743547b4 - pristine_git_object: 45ee42d61b756c61292f31b6bf09b49e85ae65ea + last_write_checksum: sha1:4dcd9a33d7d066767a2e91d6c2459f8ccfb45224 + pristine_git_object: 4065d015fb797a8a9e6b28ddb8540acd93cc6740 src/funcs/managersGet.ts: id: 7ff3855f0b26 last_write_checksum: sha1:7b88a61fcb540beb6aeb2c4db301a84c286c16bf @@ -27532,6 +31478,10 @@ trackedFiles: id: ac44b53308d8 last_write_checksum: sha1:4b00e93db3afac0d2f76f2793a912615ad602aad pristine_git_object: 1b94e03cf4d96af30496f0c918c85f0cf95280fc + src/funcs/resendWorkspaceInvitation.ts: + id: d4c8a1250b04 + last_write_checksum: sha1:f13b193f0e2829db1b5586e55beed6a0166b81b8 + pristine_git_object: 6465256874de42124f3a03ba8b0f00354803bfd6 src/funcs/resolveResolve.ts: id: 7590d79420ee last_write_checksum: sha1:a122859e1eba97e0ef6a2bc16a7445df32367f06 @@ -27552,6 +31502,34 @@ trackedFiles: id: 0e88bb16488e last_write_checksum: sha1:001a7c182daa37aaa7754710f6d67612b0130521 pristine_git_object: bd0af0059383eedd1cb4101cc237a1aa0a975cbc + src/funcs/revokeWorkspaceInvitation.ts: + id: 8f9c6af3e2f6 + last_write_checksum: sha1:c78022a0c191b4fb1ce3397ba70a25824fc37cdd + pristine_git_object: 6ef95921634e49bd369c585d9e63ffc5785c1e92 + src/funcs/revokeWorkspaceInviteLink.ts: + id: 9cf83f2b5aad + last_write_checksum: sha1:02b35536a7a98a8a23b5d2e1d2e7bac707fb8ea5 + pristine_git_object: 619c078bfcfff6f9136a2f6bac6edf32b1d53611 + src/funcs/slackIntegrationInstallUrl.ts: + id: 4b47b7d4f9eb + last_write_checksum: sha1:45c9210e5f0eb7e3c843f99a8d61f2767cd83868 + pristine_git_object: f32f906a8b1ddbb41852deaca0d4730998e83a8b + src/funcs/slackIntegrationListChannels.ts: + id: 150d8ac0c5dd + last_write_checksum: sha1:9b1943053bdf10410ae529e135463722414febfe + pristine_git_object: 5709afe3bf47c2de168d24c29757288ee9ddff2f + src/funcs/slackIntegrationSetNotificationChannel.ts: + id: cd261c598cab + last_write_checksum: sha1:754e236af9e67f4942ca7fdc6b9d1db32e73b77d + pristine_git_object: 2e403c7afd9e0fcad5b4bd34831cc007c6e792b8 + src/funcs/slackIntegrationStatus.ts: + id: b27ec7327bd6 + last_write_checksum: sha1:fa6fb07e77e92a74febba603db02de425653beb7 + pristine_git_object: bcf1620e7e740bd405373c53a3ad19adf2059c4c + src/funcs/slackIntegrationUninstall.ts: + id: b91015bbbd15 + last_write_checksum: sha1:db8bac5b9e33e350795cc66ead9eebb6a473a574 + pristine_git_object: ab41fcf3ae0eae8ac304e8595f72355fd1df4ea5 src/funcs/syncAcquire.ts: id: e30e2745d113 last_write_checksum: sha1:9084d31a8e315a29e784ca55e392b5ac05653839 @@ -27620,6 +31598,10 @@ trackedFiles: id: f361d34e5bff last_write_checksum: sha1:6a122f1e6762088452c408331f7d259bc2f1a48f pristine_git_object: a1dd5004d0447ceeb078029d690e649435576cbc + src/funcs/workspacesGetSettings.ts: + id: f44231b39ab6 + last_write_checksum: sha1:b96c9b75a831eab46f9566e6c42c97eefd593433 + pristine_git_object: 0def81be8d229d4352c799985a515b72ba060042 src/funcs/workspacesList.ts: id: 6ff9df556ff5 last_write_checksum: sha1:9035299e434cbd75433c3a37cd7d3e95abeb947e @@ -27640,6 +31622,10 @@ trackedFiles: id: 76f106c4bb9f last_write_checksum: sha1:2f070d8c85f02be9cacf363b6d770a3ba49f4765 pristine_git_object: 5e980b70744a757bbcdb8e6255970dbee74fef2e + src/funcs/workspacesUpdateSettings.ts: + id: cf0e3e8741d1 + last_write_checksum: sha1:94d02bcbcc5802305af59ef2538f5ddecbfb4bc5 + pristine_git_object: 07cacec652fdcdc272a4edd015a3d9f63e420385 src/hooks/hooks.ts: id: a2463fc6f69b last_write_checksum: sha1:3a90d88b4c6c07247db8e5f6441a79538232394e @@ -27662,8 +31648,8 @@ trackedFiles: pristine_git_object: 962ea486e17eabe13bcf068493a556110c944df8 src/lib/config.ts: id: 320761608fb3 - last_write_checksum: sha1:2406fab3092aaa1fdae6a1dd2aaa5e866da48011 - pristine_git_object: ea094ae0489afa7a35285ade4b0a06cabb5ca361 + last_write_checksum: sha1:c99f354e722b6b770fad0f60ad68eaa3e19e7070 + pristine_git_object: 1772bf4c48a83fe35e2d2d99351b81b6bd7ee329 src/lib/dlv.ts: id: b1988214835a last_write_checksum: sha1:1dd3e3fbb4550c4bf31f5ef997faff355d6f3250 @@ -27720,6 +31706,82 @@ trackedFiles: id: b0057e24ed76 last_write_checksum: sha1:d124050c7e755c0cce233b9e029afb584ff65201 pristine_git_object: f3a8de6c021de59c991707946cd294596cae954d + src/models/acceptworkspaceinvitationresponse.ts: + id: 46ac0670e9e2 + last_write_checksum: sha1:0ccb3dd52d4fe621cdab9059d78caac5a94993c4 + pristine_git_object: f42669be10921a06eefcb9ce87f44ba2327d4301 + src/models/agentsessionapprovalgrantedevent.ts: + id: 6cb4440760a6 + last_write_checksum: sha1:f2b23f8268ddd0752fb0f3b4ad2dd285448c672e + pristine_git_object: 20a36afbaa33698dae42fe9686bbe81fae6d865a + src/models/agentsessionapprovalrequestedevent.ts: + id: 71a305ad7e08 + last_write_checksum: sha1:2d158c8040f3c5f2c524b12352a4872eeb7d6fb4 + pristine_git_object: c559cc0f9afb860a0086119698843e81bda929a0 + src/models/agentsessionapproveresponse.ts: + id: 26d19a46695e + last_write_checksum: sha1:bb12f8ce1a06384a2a12b164ff7fe72f0958e40d + pristine_git_object: 2f0f7b806ce1273c5a59032b9c2f8ce46c9d013b + src/models/agentsessiondetail.ts: + id: c56b67c6685d + last_write_checksum: sha1:36f011da0a504a698e2274b4ebbfbfba91c52ede + pristine_git_object: 0c7f652844efbf0769bf9d3630eda0884d1dd101 + src/models/agentsessionevent.ts: + id: 8354f17c6746 + last_write_checksum: sha1:a17494b629140114d57ec57a9231d276e839c664 + pristine_git_object: 2fec5ca6efb12cc4fb45142f7b90b3c7cac6946b + src/models/agentsessioneventsresponse.ts: + id: 2dfcd9744e42 + last_write_checksum: sha1:d5c9444f421b04e0d61a9a71f891b7bb687409fb + pristine_git_object: 571d7d4daa911e711cc8cbe89edbf7d9c7263e27 + src/models/agentsessioneventstruncatedevent.ts: + id: a94eff77f217 + last_write_checksum: sha1:8967387a589d559d804930b3705bfc537caa6e3e + pristine_git_object: 4f4d0238b3bb2f25397899b71c48b122c72b8ea2 + src/models/agentsessionlistitem.ts: + id: f7bdaff8dd05 + last_write_checksum: sha1:9270e89b1be0a49bd066a2297b055b8e843ea2c3 + pristine_git_object: 5079f4cc61abb542b9016dc5d3511e4dd39ece1d + src/models/agentsessionlistresponse.ts: + id: 4c152efa29f4 + last_write_checksum: sha1:1e883c87d769b511c601fcd221ed0772261d36f3 + pristine_git_object: 00594bd9462db4195fc5b7d89914b38d2598e403 + src/models/agentsessionmarkdownevent.ts: + id: c4c6d069e449 + last_write_checksum: sha1:327cd30ab1c9b6ae7f44fe3d9aa5c6d66cc33090 + pristine_git_object: 9511f17dbbd53bb98ed50142d9953abe453c7e6d + src/models/agentsessionrestartedevent.ts: + id: 9f0dc868c8f4 + last_write_checksum: sha1:c8980f01e86caa9501aa95985a544120acf1da33 + pristine_git_object: c70d9af46567b198cbf2a9066e5469cf703e03a1 + src/models/agentsessionstatusevent.ts: + id: 128598e9c428 + last_write_checksum: sha1:9d529cff59615f79383de3557a24ab0286dbee3d + pristine_git_object: 0e4f018d16f9285bda7fab0fc898e3f4abe25d28 + src/models/agentsessionstepevent.ts: + id: 9841cc5ed474 + last_write_checksum: sha1:343f820b161b608bfd93db270445665dd2fc1370 + pristine_git_object: 82d603f64d9a6899e24056c834ecfca71153fba5 + src/models/agentsessionstopresponse.ts: + id: 2ece0a22935e + last_write_checksum: sha1:54fb5fc9145514fc1fe20de4eded4842ce967a78 + pristine_git_object: 3c798096c3be5818203d89bde4f05f7b4cebca78 + src/models/agentsessionsubject.ts: + id: 2f5583188a5e + last_write_checksum: sha1:0b2869aece9d3a8f225b7ca0359cbd59c9361348 + pristine_git_object: 97a291c85ccfd14e51ca129b451415ee0f454f72 + src/models/agentsessiontoolcallevent.ts: + id: 16226540533e + last_write_checksum: sha1:afe21967f18ec4d4e6a6dc0fb0d0a538a5daa404 + pristine_git_object: 03352e188ef39cf7678ebea1f6902f62fc368e9f + src/models/agentsessiontoolresultevent.ts: + id: "860350616650" + last_write_checksum: sha1:140f09c636fd6c880caf517c904b77e60eb25898 + pristine_git_object: d6ef79069ed6ce368aaee7a009f725acfb233b0a + src/models/agentsettings.ts: + id: d3d348ebae7a + last_write_checksum: sha1:cfae4d39eef20f9aed0572dbc3174a2a2883d35e + pristine_git_object: a1e393637f42e137363ff08be4073c819f39147c src/models/apierror.ts: id: ba8cfc219d76 last_write_checksum: sha1:7ae65e50066e8a3f06ba7391c15aae98141e7d97 @@ -27806,8 +31868,8 @@ trackedFiles: pristine_git_object: a13491587f311ecd0b5420b53377c36ca9abdaf5 src/models/createdebugsessionrequest.ts: id: e254181b16d3 - last_write_checksum: sha1:2c1ecc930782a75821084eb01e5af7d3c46e8636 - pristine_git_object: 0524e4d862970efce5f9980f020f1baaf379c7d4 + last_write_checksum: sha1:f19dbcf7d05dc56da1d54cb7b67fb3dff801e5f0 + pristine_git_object: 3d27c2d88638ea5cc277cee2473eb788ca0f9093 src/models/createdeploymentgrouprequest.ts: id: 64ab1ce49c4b last_write_checksum: sha1:e5af8ae7574dcebf49a1d58d230bd6e4022bf7f5 @@ -27842,28 +31904,44 @@ trackedFiles: pristine_git_object: 8ed7efcb53c9b3ed52719b32a1ceba679a5d239f src/models/createmanagerresponse.ts: id: c51c5ebd08da - last_write_checksum: sha1:8f75ee22d212f74f3c4bc9be95725427f5578430 - pristine_git_object: 1dd947f6619387ca6ec382b5f3f920973863e645 + last_write_checksum: sha1:bfc050ac3c2b999b824f207b42da83cf8b13f40b + pristine_git_object: aa56f530524dc7cd2bfa007fd27babd57959b482 src/models/createreleaserequest.ts: id: 4ad3666dac5c last_write_checksum: sha1:d872edb9e3a0307126390ce363283a065da11a21 pristine_git_object: 6ea40be7e62b0f8f9757e052e85ebd77c212b70b src/models/createsetupregistrationoperationrequest.ts: id: 72fc21b3c242 - last_write_checksum: sha1:283391dbcc447c38cca3cb8749e7203a9a9f73cc - pristine_git_object: 619dd87793caa87e6c8ca259530536e88850d932 + last_write_checksum: sha1:2556b5ebfb3b4eb4e333af696c33b74186e48e65 + pristine_git_object: d6a3c0f1c27ca7ac5974d527fde177eb2cabd675 src/models/debugpackagepresignedurls.ts: id: 58fc121473e2 last_write_checksum: sha1:22a621946b520d04c3fd9dbc903e83508fe48221 pristine_git_object: 441ccc22490a6a2a00897ccb824c293ea515f187 src/models/debugsession.ts: id: 70e8d7a99ddf - last_write_checksum: sha1:182ef1cbbb73a4be7a249b344aa7783c75e20eec - pristine_git_object: 1ab925f680b30e74a971e6ba022103e9e2975b6d + last_write_checksum: sha1:3a725b1179f4fcd2948499b5af59334d8eb29a44 + pristine_git_object: 0c1dd628923d85da1f970d198bb8b40c3fb05a8d + src/models/debugsessiondeployment.ts: + id: 0f32fdbdd595 + last_write_checksum: sha1:76edc1faa70f3a500e68e2514f24f0b343330727 + pristine_git_object: 0b464be3bc83d6f7775b501026735e373d094f3c src/models/debugsessionlistresponse.ts: id: 442da5122df7 last_write_checksum: sha1:2020b9f695a447106101a5b9d241038ccc773bf0 pristine_git_object: 40a1bafabe21b50484eaaf8443c6eb853592a74e + src/models/debugsessionpublicerror.ts: + id: a8fba170fb06 + last_write_checksum: sha1:c349bb704072e6413b63b3fedf0f7980971546fd + pristine_git_object: 0db4832bac92b0bb9fda736dd9356b292dce6a22 + src/models/debugsessionpublicerrorcause.ts: + id: 76ba3d95ec1f + last_write_checksum: sha1:5fefcb604cfa7350160d3e7b32628cb4e3c6b4f2 + pristine_git_object: d7c7afd4f23e25e5c4bed560724c1b6c0c82dcf3 + src/models/debugsessionpublicerrorcontext.ts: + id: c89a3ed98735 + last_write_checksum: sha1:f35c274ad4211a625c5e22e96de3ddecd06fab91 + pristine_git_object: 98c302823605a258948b7d9394a607b0d44dbaa0 src/models/debugsessionstate.ts: id: b509afba1db0 last_write_checksum: sha1:6ba19afc01988f5b08a166e7e97f9d3f89997ba2 @@ -27882,20 +31960,20 @@ trackedFiles: pristine_git_object: 9ebaaa9820ac80a522625b15c811dc7988f85952 src/models/deployment.ts: id: 26e71f87af0c - last_write_checksum: sha1:f1e0894bc4b8ef3576abfad0e160868357d0d887 - pristine_git_object: 8710819fe0c4b8978abc34f6da7ad8732e893f8b + last_write_checksum: sha1:0da14060834a846b040d5559ca4cf678d9b5e291 + pristine_git_object: 0cf284aa7f3c59430ed7d133f5fd9df0ba62d40d src/models/deploymentcomputeplan.ts: id: 4f61336f1204 last_write_checksum: sha1:241a9c2f0564fc3bb177fe07853ddc7c42f85c71 pristine_git_object: a45ace8cdaff8f9ace51c20656f234ca3ba120ff src/models/deploymentconnectioninfo.ts: id: 507904850f15 - last_write_checksum: sha1:26642c097e3dd1d4ba46ba930c13f172d17ac277 - pristine_git_object: ac3c0dd3ee7a3ae8f66bf1839ef396ec87be4d51 + last_write_checksum: sha1:f6dcc9c93a88be3eedb57430aec306bf63d0e1b6 + pristine_git_object: 7b04b32ed0dc440c753d059d9c37bb217819d5b6 src/models/deploymentdetailresponse.ts: id: f3d0b380668f - last_write_checksum: sha1:1db6e71990665a4b9fe7a7acad055b84e8ccce1a - pristine_git_object: 3b6ae1e99a22b8d28f7a842e1dc7098933d813f6 + last_write_checksum: sha1:cf3192609758d49adb533e79a36e7596c1181f3d + pristine_git_object: bf98e4c32ba80b4f0c9fa1922f114e5a665f8783 src/models/deploymentgroup.ts: id: ddf1c24537b3 last_write_checksum: sha1:b7cbce1d496465e2ebe5accc99d7f3fcd2e7c964 @@ -27986,8 +32064,8 @@ trackedFiles: pristine_git_object: 537f0fa458049d90eadb7a49c9e76f4b07e2fe82 src/models/deploymentsetupstacksettingspolicy.ts: id: e4196d4152d7 - last_write_checksum: sha1:30c2e7e401a0e384e67aa31c0402049e8f12fc4f - pristine_git_object: 8eca47b0e65a6989f7162dc044ef1402a5913d07 + last_write_checksum: sha1:630b02d55cecd33e7670f52771cbc799cfc9b8ec + pristine_git_object: 5a7ee31f066a0011bb437a6c7d060279abc5ebdd src/models/deploymentstats.ts: id: c559f6224b42 last_write_checksum: sha1:43869ff928489257b7069a5bf30a45689e87a1cf @@ -28078,16 +32156,28 @@ trackedFiles: pristine_git_object: db00022e05d55600252f401eb0e6ab46278e0b07 src/models/event.ts: id: 7d1800694a8b - last_write_checksum: sha1:85528e848f955f576d9432c5830330987d48c0db - pristine_git_object: 26560b4527531f8e0a873c0e043fcd91058b2ffc + last_write_checksum: sha1:2cb4956144317fb31ce1f49f4b267fed56c89ab7 + pristine_git_object: b91230b1066b759d7da9b713840937f5c1f9310f + src/models/eventlistitemresponse.ts: + id: 59658bd4d441 + last_write_checksum: sha1:60e2be63c1dc5da81cd06450ab0c96853ef0dc73 + pristine_git_object: efc71a760976363efd7f6091ac57019d7b2d4a8c src/models/forwardimportrequest.ts: id: 2f3eeed18289 last_write_checksum: sha1:da0a8dc4f9abbafa698bbe990d943f6c754b7321 pristine_git_object: 9782cf0f1a9ca6314dd657480ef4726612572e93 + src/models/generatemanagerbindingtokenrequest.ts: + id: 051b5710b2d0 + last_write_checksum: sha1:96b190d7fd54c9a9a71c13ac84177be7483c3543 + pristine_git_object: dfcc9576f99c53e603cfcfd4d236defe46183737 + src/models/generatemanagercommandtokenrequest.ts: + id: f7281df86dae + last_write_checksum: sha1:9c9d3e611516be023033197b7bc73e003a95047c + pristine_git_object: 5453d8fb705a411857485ed83cd989313065e80e src/models/generatemanagertokenrequest.ts: id: 37d07c31900f - last_write_checksum: sha1:ba5f9e1c87cceae1f3b26e0cdff19f5c37c9f689 - pristine_git_object: 3dd29fe08066fe2ffc4c6581cc002be3436e2cef + last_write_checksum: sha1:12d3664ffefbf06e850eb21ee988a8369276f4d7 + pristine_git_object: 07cf090aea4f2ef03971d62181dab6ca955a0107 src/models/generatemanagertokenresponse.ts: id: 2d5c48de9e4f last_write_checksum: sha1:5b8b3f4779373a09d5042f09246f02add5025304 @@ -28126,8 +32216,8 @@ trackedFiles: pristine_git_object: 88d66f229a3b0cbab8b71377b9d3a974d96cbad5 src/models/importsource.ts: id: 7a42610e98ec - last_write_checksum: sha1:0334032e1045ce96c9f4dbb874f6ad29eda94abc - pristine_git_object: 296afaf1c158672fb6c6d73936c8675d8eab9543 + last_write_checksum: sha1:0b32a0a02398be102fcf83e139d44586b8678985 + pristine_git_object: bfa7668d80784a9bd575d4d33aa9e473bd6e720b src/models/importsourcekind.ts: id: b2bf2bd7a310 last_write_checksum: sha1:22deb1d5efc34b0d03878820f2dc0161cd26afe8 @@ -28138,8 +32228,8 @@ trackedFiles: pristine_git_object: e3b1530ed0aec91afb64292a12d54ab58d11f60f src/models/index.ts: id: f93644b0f37e - last_write_checksum: sha1:9ebd22a2a5cb46510e6549aeefba6f0181515fb3 - pristine_git_object: c42df46fbef3238e23ba569f708bf4a7ca27bbc2 + last_write_checksum: sha1:274aca342a74c5cd60bfe48c7465919a41d71a6f + pristine_git_object: c64e4be8f8ef568c1dc58e55b168ff9a9ed58264 src/models/kubernetesbaseplatform.ts: id: 772a228cf68d last_write_checksum: sha1:9c4ce4aa9f5eda395cc86daf24eda66661eaeaa0 @@ -28175,17 +32265,27 @@ trackedFiles: src/models/machinesinventoryitem.ts: id: 7b608028556e last_write_checksum: sha1:e8c111a4c2bc03f82a9c2f8b04591e14fb699fa3 - pristine_git_object: cbd8328964ae35bf6cc60d3ffa037e0ff1a317af + pristine_git_object: f3c78377e5f3c0a48b195bb32104327606da5901 src/models/machinesjointokensummary.ts: id: 53c31d3d563d last_write_checksum: sha1:f4efde66a15f51fd0b6070e38acfb23f854e777f pristine_git_object: 6a1fc71606eb75b1829708739d11c3c7b4531ec6 src/models/machineslocaloverrideobservation.ts: + id: 8d1d8a2f167f last_write_checksum: sha1:9d220425d612d569ee5f88a0bc24f4b0797a0514 + pristine_git_object: ed983745137c872350e3a352506d6f0dc24780bb src/models/manager.ts: id: cbe7d43a66b3 last_write_checksum: sha1:04d6565c9ad6a253f0f9844830611688ddae2b6a pristine_git_object: f1dc685780b38360d3428ddb499de2fda706ff1c + src/models/manageractivedebugsession.ts: + id: 81aaf9b60c83 + last_write_checksum: sha1:4988e96a27e3f41223d3e902f2b46e5d76e7bfc8 + pristine_git_object: 4e03ef019997d2480e859b1ba2f3f3661951df62 + src/models/manageractivedebugsessionlistresponse.ts: + id: 6c4149f90cf5 + last_write_checksum: sha1:ad412831fd3674d22896d9e3217d143533602f52 + pristine_git_object: d004fc9c68e76d9dca8a1b959bc4968320639142 src/models/managerdeployment.ts: id: ecd2c6fbf61e last_write_checksum: sha1:2f2ea774aa880d7f16ca7120e8cc43c8be418bb1 @@ -28212,8 +32312,8 @@ trackedFiles: pristine_git_object: 31826f6990ff56898ba2c28f0cbba91f7fdff563 src/models/managerretryresponse.ts: id: c97f5890b391 - last_write_checksum: sha1:d394e95bd460b36464764dccc69f36c4934a0fd1 - pristine_git_object: 843f325f690ecb3eecf0310c3e2739d86618b3f6 + last_write_checksum: sha1:1f7065543ad2b51859c74ae3cbc9c93e0333a800 + pristine_git_object: 54b3e01634487b0fe54cdb0551b8c1e9acc27c57 src/models/managerrole.ts: id: 3cb93e346cd6 last_write_checksum: sha1:a14a1f047e03086b4207409a66ba6203d748171f @@ -28232,16 +32332,24 @@ trackedFiles: pristine_git_object: 36c61ac6fad40e1e2e90f7c1bfd834827725b6e6 src/models/newdeploymentrequest.ts: id: e89206c57a99 - last_write_checksum: sha1:509792e2c9dbe6cb5546a2bce72a7f75a1fc6755 - pristine_git_object: e3ac6e076143da69911d902dd6ff3d9627ef44ef + last_write_checksum: sha1:09024d9a0122ee5bfd0af2bbfed0ebbdc5862f5b + pristine_git_object: 26a27dc48411a9222b54514de03dcc27ac6749c1 src/models/newmanagerrequest.ts: id: 2e5a9b904ad3 last_write_checksum: sha1:fb408c72e5bb048b9aedba109ba2bf7204acf7a3 pristine_git_object: d417ac9eda4b6a70d091f794b63d8c160eaef3d3 + src/models/operations/acceptworkspaceinvitation.ts: + id: 8e894d8cf17a + last_write_checksum: sha1:7340d5e9f38debe11fba54345bffb7556f738cef + pristine_git_object: dc1d35fd7cff53f76bcab35e46375a7f47ece3d2 src/models/operations/addworkspacemember.ts: id: 73ea4e8eead0 last_write_checksum: sha1:ce1f540621054e103829b31c98d13a992c77e1c4 pristine_git_object: fd1c26e37f48aeb82914e5ea11b8e6eee6dcc73a + src/models/operations/approveagentsession.ts: + id: 770f5beb4ee3 + last_write_checksum: sha1:7f5cba2d618649b37e0e5c90ec94b01def79dda2 + pristine_git_object: 7e82a03d2f6615adba223cbb31af2a9407c2e238 src/models/operations/cancelmachinesmachinedrain.ts: id: ff1c2fb8abf9 last_write_checksum: sha1:e93ca56f01d505a3dd9f0b976ce9868b096fba0c @@ -28309,11 +32417,11 @@ trackedFiles: src/models/operations/createproject.ts: id: 906aef1b7711 last_write_checksum: sha1:822139123a99a64b3b8fc91c96c3c0227c94cb32 - pristine_git_object: 5058ea07610861714e95f60543c1bf1b3d6297bd + pristine_git_object: dc19377ec6dc9fd34682a79bcca1be1f70cd7b0d src/models/operations/createprojectfromtemplate.ts: id: a86500746e28 last_write_checksum: sha1:cd5d2e004b627b2af13099d11a2b3588363413b9 - pristine_git_object: 9c45382c175c972bc8a215f6044afea720358797 + pristine_git_object: 38b537505f833b6e17f23485ccb674bd9554e4fd src/models/operations/createrelease.ts: id: dd0994083c1b last_write_checksum: sha1:342510d04396a04b0efb11d680b251701f1ab9fe @@ -28326,6 +32434,14 @@ trackedFiles: id: 27fe97979faa last_write_checksum: sha1:27c41129bac7a19f66e89926a96e658ff6c73f95 pristine_git_object: 325334e31397022d5a3932d17483e893929ba4cf + src/models/operations/createworkspaceinvitation.ts: + id: 1a4e7fc4eb7d + last_write_checksum: sha1:59fc9b2992ac73352ad2673a2b75794ab4857952 + pristine_git_object: 1aff892b1a309a7e1306a7736dca3fcd5153b746 + src/models/operations/createworkspaceinvitelink.ts: + id: 907e12ee25c5 + last_write_checksum: sha1:d1318bc49e330d7d16f8fabd28dae9304f552c5e + pristine_git_object: 18dab542891d65fb8b34fcaa49201bddba907772 src/models/operations/deleteapikeys.ts: id: b8c63a8e167c last_write_checksum: sha1:d8aec3d368e773693c3622198aa661a6c4aa2ca8 @@ -28370,10 +32486,22 @@ trackedFiles: id: edf4d8455e14 last_write_checksum: sha1:b1eafbcfe36854a6f65e67d21f3509a557e1521e pristine_git_object: 3534ec931c855ad305e51267d26cdfa657f8f6be + src/models/operations/generatemanagerbindingtoken.ts: + id: a9611ea28b5e + last_write_checksum: sha1:d4c188678bbc80d35724c227ffd77a5fc71dbec9 + pristine_git_object: 926182b93a1d220c72c0add9d5ced7bde30301fc + src/models/operations/generatemanagercommandtoken.ts: + id: 30abfb4013dc + last_write_checksum: sha1:c261a5e9a23dbd0ac80e21b53347156a5e35b5e0 + pristine_git_object: ee84df9aa0e3dc4913270dde79f351d7b91737dd src/models/operations/generatemanagertoken.ts: id: bbd005d13fc9 - last_write_checksum: sha1:b04d07e2ec21bb858294e4eeee9afebb05572a33 - pristine_git_object: e2f3499734c501ff7e9d7406aed5b3e2c8e317dc + last_write_checksum: sha1:32de10275818aefb54cac04b1def14fc5be9e362 + pristine_git_object: 5d415bc216a434910a7487a02861f51708ff7ad1 + src/models/operations/getagentsession.ts: + id: 818afbefed1b + last_write_checksum: sha1:91707066bab4fece07a0214a4796cf077cc5ea72 + pristine_git_object: e59752a581b0bcda9d975f8780f4f521f164b006 src/models/operations/getapikey.ts: id: d94f7ec275cc last_write_checksum: sha1:35a95306004affedb589602e3b5d6ada9ade4853 @@ -28468,12 +32596,12 @@ trackedFiles: pristine_git_object: 2ffc7d70da305a39f13098eb15bdb350da4dc937 src/models/operations/getrelease.ts: id: 14cdd32ee38f - last_write_checksum: sha1:4cf3d8d3cca949285ceafa4187272c3c42cf9a9d - pristine_git_object: 4f2edd99c25ed8cb5cfe69eaffe32727b18da120 + last_write_checksum: sha1:298e06945d9b05e1cf95cf2c12d48556a2b3db94 + pristine_git_object: e194f58c36ebbee227043956f399b45b582c419f src/models/operations/getresourcedeploymentdetail.ts: id: 61664b1aea1b - last_write_checksum: sha1:e11460c1755aa85d3f0d2d30e70fbb8960588974 - pristine_git_object: 9ff4d9a3a4b7b1baccd21f110cb71e65bf8f136e + last_write_checksum: sha1:7c5c1a25031ba0f549cf183277f76a507d87c8fd + pristine_git_object: 3dc3dc287e1bd4113cc349098b0541e189d95fb5 src/models/operations/getsetupregistrationoperation.ts: id: c1cf70012dca last_write_checksum: sha1:db4548f689c838e85ca3bb1c4c306393ee1150e4 @@ -28486,6 +32614,18 @@ trackedFiles: id: b5e687d1b4ad last_write_checksum: sha1:f4f4f5b711311165bfc0a33d1431b5da54a2fc38 pristine_git_object: df7207c640224f8a0dde3626e97350f9c69559b3 + src/models/operations/getworkspaceinvitationpreview.ts: + id: f24adc669484 + last_write_checksum: sha1:c50efef6c730b569f040d48a2b786480708e1625 + pristine_git_object: bce40bbf38576166556207971a5c5726a0a5598e + src/models/operations/getworkspaceinvitelink.ts: + id: d08cef916b7e + last_write_checksum: sha1:933c9972655368bcd91d1859b9fa92d2237d4306 + pristine_git_object: 8c4a2fb77e0125b54d8fff8e112ef2bcaa68e91a + src/models/operations/getworkspacesettings.ts: + id: 5e2634865518 + last_write_checksum: sha1:a247255cde1d3eb3644dccb980121776325eaed1 + pristine_git_object: dcb559b97962eeba5c3eceebaada1acdc6890b93 src/models/operations/importdeployment.ts: id: fa8d08957b7b last_write_checksum: sha1:a363fba2541fa3c95200b05fabffc8f0f88e9b0f @@ -28496,8 +32636,20 @@ trackedFiles: pristine_git_object: 126e8c5c8e0b8d15c4daefcd3e2aab500207b77e src/models/operations/index.ts: id: 0d9ffaf774d2 - last_write_checksum: sha1:371eb238eea8cd289e54ee916b37be29c8a044b0 - pristine_git_object: 4c642023437b4b27fc66f4e248cbf0fbde736860 + last_write_checksum: sha1:ddd58912c69f00121300905bb905dbf9579f771c + pristine_git_object: 093498e99ede86ec92e988e8e4f037ee27e83ec9 + src/models/operations/listactivemanagerdebugsessions.ts: + id: dc812cb9ef08 + last_write_checksum: sha1:a3a2291f2786ff67c34a9d94ef6640ed76388212 + pristine_git_object: 01c3309c7b76f1344c3a17249cab0dca6334539f + src/models/operations/listagentsessionevents.ts: + id: 5455f9c24009 + last_write_checksum: sha1:e58f325055d03a0d05275512bb5d4c6b63adb81f + pristine_git_object: 356ffeb6a7b5fc82440945fe600ad526a63b5531 + src/models/operations/listagentsessions.ts: + id: d05624e3e4ea + last_write_checksum: sha1:40d21a6743206e1770b1c096c0081a085b982b49 + pristine_git_object: 54005b43db8f1b0de3b79c1610332f8fa6770075 src/models/operations/listapikeys.ts: id: f6a5b994cd87 last_write_checksum: sha1:c880049a7a615a11ac10318062e5758af2bee946 @@ -28544,8 +32696,8 @@ trackedFiles: pristine_git_object: 95fa741f2acf94ea6bba79c2c5dce709c523d6af src/models/operations/listevents.ts: id: 4324ebbf246a - last_write_checksum: sha1:a3e6077003e06742af6361f924d85fd7bf2a5af8 - pristine_git_object: 7b5a0a39c2c1344742be94b7fd384f97fdbdc312 + last_write_checksum: sha1:fff189095e72401b54e4dc176c238f270b56174a + pristine_git_object: 2a0076224179428bd0e0663c0e133216ebf2e256 src/models/operations/listgitnamespacerepositories.ts: id: cd2187509893 last_write_checksum: sha1:afbc5c9f15e1c3cfcfde566ea865f2e92c2535f6 @@ -28596,8 +32748,8 @@ trackedFiles: pristine_git_object: 76bdcbe69dce65c890f0bbd747b688f72de6c530 src/models/operations/listreleases.ts: id: 4e7f3343a0fd - last_write_checksum: sha1:48e0b04cbbe915d1f26ef88c16216c8a1e8cc898 - pristine_git_object: e2040f83f25a1cc96a77ca509a590b16b59d18a4 + last_write_checksum: sha1:57a8a78fe98162ceb8adc7113f800fb60516b6fa + pristine_git_object: 890c155eb9de8a975573a4b1c0dc6ece00a79f39 src/models/operations/listresourcedeployments.ts: id: 3ec2db39e463 last_write_checksum: sha1:93d86713eaa5729019f5f72ccc56be650aeed83d @@ -28606,6 +32758,10 @@ trackedFiles: id: eedd30655fb2 last_write_checksum: sha1:935f9bbf6c2eaff86d05177da5524ec144d7a9c7 pristine_git_object: 99fc4030a9c66aef83abe5f276577e0fcc90bf48 + src/models/operations/listworkspaceinvitations.ts: + id: bc6bc6b84df5 + last_write_checksum: sha1:d4de82c584132091db7e8833a90e5221d064f5ea + pristine_git_object: 9ff549c33eca2ec16dfb0282e25581bbc849e650 src/models/operations/listworkspacemembers.ts: id: 009ed1f62eb4 last_write_checksum: sha1:bc71971c11cb6c4d4885c8594ff2c15070fde7c7 @@ -28662,6 +32818,10 @@ trackedFiles: id: aac8d56123ee last_write_checksum: sha1:bbbe2ccd2a0a507ae6a647246125b0a4f8741e9b pristine_git_object: 317913f3e8af881c88923cca7d8d673a65429cfc + src/models/operations/resendworkspaceinvitation.ts: + id: 78821f99683e + last_write_checksum: sha1:2ddb06f3888c70efc00b70540374120a1269baf6 + pristine_git_object: 3948c657e404849bf7a4b558a4a8314aba838db8 src/models/operations/resolve.ts: id: d1783b563449 last_write_checksum: sha1:bf013584eb387e914ed3429d099a48f14fe86c29 @@ -28694,10 +32854,42 @@ trackedFiles: id: 63f1cd657aa3 last_write_checksum: sha1:3663aa4d7b93da64430a9a1460910d097cd55d60 pristine_git_object: 04ff089ed88b798584e3d94f5d3e6be7101c0bf0 + src/models/operations/revokeworkspaceinvitation.ts: + id: da92a846dabf + last_write_checksum: sha1:ccd348302d5f64f2a786e89b1648ddf60efdab64 + pristine_git_object: 6d59366a65ddba3fee37936dfd0359f2b69fbe5a + src/models/operations/revokeworkspaceinvitelink.ts: + id: fa7f3ac9abc7 + last_write_checksum: sha1:b49c8a7c997131493dd02f4f73bfd3b1efd6ad64 + pristine_git_object: 9627c742b297978445f534abf6d82d24a9f52edc src/models/operations/rotatemachinesjointoken.ts: id: 7f88d810e3c7 last_write_checksum: sha1:4df64776184c9bb569a0db60ef21d35ff0774010 pristine_git_object: 1cc98b339a41f1daf1a788d2875655b04436ac61 + src/models/operations/slackintegrationchannels.ts: + id: 08e137844c29 + last_write_checksum: sha1:12d4d761831ac446847735de918959c941b07fe4 + pristine_git_object: da4ff22ae3895c95af67a8e5453f02c35ad0d820 + src/models/operations/slackintegrationinstallurl.ts: + id: 73773682a2e1 + last_write_checksum: sha1:2700865b6a6f5ff8660e5b66b3ddbf3bdf8c821a + pristine_git_object: 1c95f45da6bdf66e241b5fc4aa3ef97bc5721eb1 + src/models/operations/slackintegrationsetnotificationchannel.ts: + id: 07b2350e0706 + last_write_checksum: sha1:50cabc071776c66ec592a41998575ce3f9447c11 + pristine_git_object: ef7e480669a2f094a4438649034613855627a4f6 + src/models/operations/slackintegrationstatus.ts: + id: 5ad2cf8ef08c + last_write_checksum: sha1:fc48598a03936e8e4fa7049b20ca7f141176d7cc + pristine_git_object: a38984abf402cedd5d71af2f7abc73a8bcfbd6a3 + src/models/operations/slackintegrationuninstall.ts: + id: 884576bba965 + last_write_checksum: sha1:ff769643987caf037b3b6940bd69e216d204827b + pristine_git_object: 190f0d14c26f222cb494f072ddc321533159ffce + src/models/operations/stopagentsession.ts: + id: a22ef400757c + last_write_checksum: sha1:1ac6c9edff406b72221cf2fef7898abeea686c90 + pristine_git_object: a0ba6d4b147d2cbe01100c432af2fddb163be9b7 src/models/operations/syncacquire.ts: id: 4280d0a7aa28 last_write_checksum: sha1:adfe6afc59d43c1dfcee3aea4eb235e0a30d6fd5 @@ -28774,6 +32966,10 @@ trackedFiles: id: 69faee810ed6 last_write_checksum: sha1:0fac2b9224b3ca0b7005e7c779786104187e0b96 pristine_git_object: 0901a7b6e356cf699f01a0d498657a7cc6fb1aa3 + src/models/operations/updateworkspacesettings.ts: + id: 532dd7c33e16 + last_write_checksum: sha1:472daf0968e06dc4d8d3235d4c5d2b9b0ec6c818 + pristine_git_object: 45ae5bb2abb6e0a624fa17d320b66a6a76914c04 src/models/operations/whoami.ts: id: 28fd2925cc89 last_write_checksum: sha1:d4c56e2530843f3c6308ed4dc537e029b4735f5c @@ -28789,11 +32985,11 @@ trackedFiles: src/models/package.ts: id: 463500e07740 last_write_checksum: sha1:50287ceecd7f0651953996c90dcd043e94b3b70d - pristine_git_object: e6346220d5224f79a89603c8176bf14f3c7f56e4 + pristine_git_object: aed956d51e055e6508ff2009d5caaecd2df0fb39 src/models/persistimporteddeploymentrequest.ts: id: c11c3fd39cc0 - last_write_checksum: sha1:9013b8179b1dd113e83166ea71763b21c9adca45 - pristine_git_object: 62bb91cac1e35fd1b7eebb9e8d8e38b0bd570ef7 + last_write_checksum: sha1:f952ebf69fa1535d74fab819c17af6007089a580 + pristine_git_object: 5ac0b0cec5161835bdbc7b49e141126b6ccff74e src/models/pinreleaserequest.ts: id: 4a22091eb2be last_write_checksum: sha1:f053be70eb0d7b043501590f6adc8fa700c4253c @@ -28804,8 +33000,8 @@ trackedFiles: pristine_git_object: 7659c51ec64005ee30fa3c3e312f3438c978b596 src/models/prepareddeploymentstack.ts: id: b17514615ef4 - last_write_checksum: sha1:33fceb79c02510246ad5989993d8f6ea74d5ed49 - pristine_git_object: 450415b4601a228aeec91bb347a62d4e0700c398 + last_write_checksum: sha1:e191a49a916412bd24cb09fec9fb3d0b54160622 + pristine_git_object: 9c80a38959cdd1ef3a2089141474a7fe954cf4d7 src/models/prepareoperatormanifestpackagerequest.ts: id: bef77d7a5cb6 last_write_checksum: sha1:770b6cc8015c294401fec34a0f89791245491819 @@ -28825,7 +33021,7 @@ trackedFiles: src/models/project.ts: id: 6d341934d773 last_write_checksum: sha1:d0ecedd00ba750e86dc273367bce1845290cb3f7 - pristine_git_object: fac9d66695314a50578fe51a745ec08bfac2c28c + pristine_git_object: 7e1d5fe04dff75d219788684f885609edb4038d8 src/models/projectgcpoauthprovider.ts: id: fab70ede1870 last_write_checksum: sha1:561908dd22cf0616db036b27f963595b7d339093 @@ -28833,7 +33029,7 @@ trackedFiles: src/models/projectlistitemresponse.ts: id: b07ac2938422 last_write_checksum: sha1:95621ab266bab7e571569b3eb97c401cdc6c0eb1 - pristine_git_object: 823216b87426e561f5b3a86b203a019d096b33e0 + pristine_git_object: 70d91dc899007deda4ce58a357f7cee6ca596c13 src/models/projectreleaseinfo.ts: id: cab90b13eab7 last_write_checksum: sha1:9fb090d22a8c4adc71ecd51dd64a9482559dd821 @@ -28856,8 +33052,8 @@ trackedFiles: pristine_git_object: 403f3d9c56c6e40fc91b738f2306b11742897334 src/models/releaselistitemresponse.ts: id: f747ff5a66e6 - last_write_checksum: sha1:90695e315544f7cfae02e581b67ee6c6756a8b05 - pristine_git_object: 5b66cd9c13132e2a26d4cefb288f9c3fd6211362 + last_write_checksum: sha1:74fab7278f6158808d2825b66229c589822cfc2d + pristine_git_object: 052addaa54c8529caa21b70a6c9085e7e0755184 src/models/removemachinesmachineresponse.ts: id: b6102d0f2baa last_write_checksum: sha1:dc3d22659a3c21e909687fe4d11638a83928a878 @@ -28946,6 +33142,30 @@ trackedFiles: id: 5bbe4a224dcb last_write_checksum: sha1:59ebd8732a4a67c45d25322bec9155d63879b3e0 pristine_git_object: ea4ed2bac38dc49318ee6be1a4a320f70cf2a7e6 + src/models/slackchannel.ts: + id: 318ae01b77d8 + last_write_checksum: sha1:a8e3da3933112455d4d53e850f47206c1f7d6ee7 + pristine_git_object: ed7d566af9ae8e84801675116887995f9b77e85c + src/models/slackchannelsresponse.ts: + id: 688c146050cb + last_write_checksum: sha1:1bcb73123d6768f43947aa9f169be9b1338fa7e0 + pristine_git_object: 04ee9b4ad5cb7e631f15f88e8591bdd1e27887c9 + src/models/slackinstallurlresponse.ts: + id: 784ce8499b5c + last_write_checksum: sha1:468cf8f3e65b637aa5340ce1a6db756af1bf2723 + pristine_git_object: 8fee0e10f875f444083fab5d7bf0e6d4c924eddd + src/models/slackintegrationstatus.ts: + id: e2e0f8b6a48a + last_write_checksum: sha1:5eea1ca5607ab2bafd0a9daaea6479d4ecd45a07 + pristine_git_object: 6126e773f0261690c8da2729cce3e6d7cdf82a7c + src/models/slacknotificationchannelrequest.ts: + id: 5940472300df + last_write_checksum: sha1:39c9aaf587c9a0db62260e0a62e5e0978c8cbe7b + pristine_git_object: 8d675d3b244c8b07600bb6dc878203befb96fa2e + src/models/slacknotificationchannelresponse.ts: + id: 8f96905138ac + last_write_checksum: sha1:2817923781fd01045882e4e9f9febd778e718edf + pristine_git_object: 78a07f0d135e141823a1860ca22b0f43939f2486 src/models/stackbyplatform.ts: id: cbff1149ce79 last_write_checksum: sha1:ad90b129e2f963df168a5c033c5f591523f955d1 @@ -28976,8 +33196,8 @@ trackedFiles: pristine_git_object: 9bcb2ad3f7e293932cb429b8cf89ee269a569d8c src/models/syncacquireresponsedeployment.ts: id: 0d9578b62da2 - last_write_checksum: sha1:1b4d69d97ffa8663ce253591b2f90b5a02cb7ac0 - pristine_git_object: f7d4bd94d6281f51c9482366373d74569b697097 + last_write_checksum: sha1:94943447bd77dae6bc8ccd1674e815fc9f6458b6 + pristine_git_object: d51e95f8e95651f0e8c3e0b2a70d56c6c8017a27 src/models/synccontextrequest.ts: id: 8ea5cbd6c390 last_write_checksum: sha1:c41b5543a29825d0ecfecfe9b2c6f11d56df8047 @@ -28988,16 +33208,16 @@ trackedFiles: pristine_git_object: 6ddafba33ac1493e17f3877263a563faf0a072bf src/models/synclistresponse.ts: id: 9c42028a90f9 - last_write_checksum: sha1:5ae3199a8ee203763e4a8be5e3c4b720254fb440 - pristine_git_object: 1a7dd3c151f12a849584fc2f280f43b994e70fc5 + last_write_checksum: sha1:5ab5246c1eb4c204a96ec6f7dd388b7cb941cc71 + pristine_git_object: 5b86401da13ba93e9b3ca570bd45f0cedd46f7f9 src/models/syncreconcilerequest.ts: id: 8881baf7e7c9 - last_write_checksum: sha1:af0511d450a62aa2b9c7bb196f48e014ceade70f - pristine_git_object: 88ed4ce91361a3ed7ad04ae406090f5e29e70e6c + last_write_checksum: sha1:7102cd72b749205bf94b138a977453fbe426dba0 + pristine_git_object: 9f4ca6d1244783469ac534c646623310e8a938b6 src/models/syncreconcileresponse.ts: id: 8fc1acf0281a - last_write_checksum: sha1:413dace5512be354df81f81de8467fae7a16f19d - pristine_git_object: 695cca7cfd0b608cb8c10bf230e1b37da7db8ba9 + last_write_checksum: sha1:4fe78277f3364503d6d98a25a0bcc66b99af7e1c + pristine_git_object: 0133bdffbfb8c550e56e8a519e37eecc4a96b892 src/models/syncreleaserequest.ts: id: 2543a00820b6 last_write_checksum: sha1:83dee1c83e3864e639578cf54c3818c2352fd277 @@ -29012,8 +33232,8 @@ trackedFiles: pristine_git_object: 1299918f5e759b39a38fc161cc12017ccc43287b src/models/updatedebugsessionrequest.ts: id: 064f8e607276 - last_write_checksum: sha1:4872daf30adb6e5d7280b7efda4c0c6cc44eec4f - pristine_git_object: 3b055a285268af68c9f0129c3586c1850e78df8e + last_write_checksum: sha1:e36aaffcf3a02d979a053eabc9263818029ddb13 + pristine_git_object: 9e1e075176caa17c12ed296c94936f61560ae2e0 src/models/updatedeploymentenvironmentvariablesrequest.ts: id: ff71c59d59d3 last_write_checksum: sha1:61f8696b14591a822d3e8cf852b551a99c1f2980 @@ -29045,11 +33265,15 @@ trackedFiles: src/models/updateproject.ts: id: de1a5842b62d last_write_checksum: sha1:b4b2c39c36bef7fc6ea7e8a5289e7268bb59bd85 - pristine_git_object: a5e7f5b0df9e906eb36b17e3c0f16623633ebb2e + pristine_git_object: 0dda98a4dc9623d85cd952c4327ae9ad7ba9a583 src/models/updateprojectgcpoauthprovider.ts: id: dd2bff436723 last_write_checksum: sha1:d7073444334b7549e22ce864f21a1bcfd8c24afe pristine_git_object: aecda2833b0d1306d95ce0118ee14d5cb2c3a9c6 + src/models/updateworkspacesettingsrequest.ts: + id: 82728ec27311 + last_write_checksum: sha1:679f617a355529a4431d0d21225934b218344a83 + pristine_git_object: 5aba546c08550294c5701361413f96cf0b49a591 src/models/userprofile.ts: id: 0b404ce49479 last_write_checksum: sha1:d7f81a3ec67902b023b2181a1415febb32e47ea5 @@ -29074,6 +33298,18 @@ trackedFiles: id: 454f77e6e44c last_write_checksum: sha1:1ef221e5491e924fb9b1f4b8968b407ff77a0e92 pristine_git_object: 482a601c538ae69084744672ca5c291a09ad084c + src/models/workspaceinvitation.ts: + id: ff4eddeed8e0 + last_write_checksum: sha1:83e7baf7683c285550f7c55ad7939bc0a8797592 + pristine_git_object: 386b747ad71189599b1bbfe1047c3a8302f6aaae + src/models/workspaceinvitationpreview.ts: + id: 1ebb9dd94107 + last_write_checksum: sha1:447e2433fe9b7b2ce524498737fb183aaa6a49db + pristine_git_object: b4ee12f226db501bca4dd9032499cc4be998ce96 + src/models/workspaceinvitelink.ts: + id: ec3906446ca9 + last_write_checksum: sha1:5dddb5c44cc7c96f356f55c8bde698edeab713bd + pristine_git_object: 57b23dfd831e2701d804b39d415c6f4aeb878419 src/models/workspacemember.ts: id: 42cb4568aa7e last_write_checksum: sha1:2c0617ff9755253904e6294bbb15d6bdbc3e7a7f @@ -29086,6 +33322,10 @@ trackedFiles: id: 8915ec67dab5 last_write_checksum: sha1:17cc88966da125b089bc461015c1549aad21cdb5 pristine_git_object: bd468f94c06ab4a932d6f76950605fe22a8d4eb6 + src/sdk/agentsessions.ts: + id: a47774ac8f86 + last_write_checksum: sha1:82095832872be40a4fc31395bdc9d6d83cc1dbe1 + pristine_git_object: 104158b9297af55faf14bea2da3e4360249854f8 src/sdk/apikeys.ts: id: 5dda931501e1 last_write_checksum: sha1:cbcb15319256712fd1b49b8a27b84c17dae3851c @@ -29108,8 +33348,8 @@ trackedFiles: pristine_git_object: 900d5e87bb79dd9bfb22083ddc8892c5c62e09a6 src/sdk/debugsessions.ts: id: bd8512987e15 - last_write_checksum: sha1:8b637966a9c257a40ed82a0e971dc52fee3b1f8f - pristine_git_object: f617673ef882c2bae2db3cc655872deae4a86e79 + last_write_checksum: sha1:6195223d5401cdd53683f9811b4837c1f9aae1c5 + pristine_git_object: dc042ffd53d4631b1b92e1eca711b57d5d67c47d src/sdk/deployment.ts: id: 80068e3b9d71 last_write_checksum: sha1:fc678ca6ad049934429bac6a2abcf5eea4c332cd @@ -29121,7 +33361,7 @@ trackedFiles: src/sdk/deployments.ts: id: 80d6fb28a717 last_write_checksum: sha1:97d4621742f2b79b33bf0b8c58a75658d19d0d8c - pristine_git_object: fcf205177be53bb58961e3cb36c0044faa90b087 + pristine_git_object: 43f3c8098a1697744841e705bf1a7bbcf409325f src/sdk/domains.ts: id: 70955e5c763b last_write_checksum: sha1:e2a26c6914ddb5bfd05e3ae866f979df4cc7ed6b @@ -29140,8 +33380,8 @@ trackedFiles: pristine_git_object: 2aede3b701b6ce0734f343a89f5b6ad791657d12 src/sdk/managers.ts: id: f8108bd423d0 - last_write_checksum: sha1:99141fbcc0df8507cf31d9523af17f670bdf537c - pristine_git_object: e590e4d280df175a26d76b9757972f9d2aef4534 + last_write_checksum: sha1:a7b62c0027de73000ffd549ba7b4a103c489b30a + pristine_git_object: e3ea1995d1bf9de68b4f46a335943ef3074511b9 src/sdk/operatormanifests.ts: id: daefdc3025fd last_write_checksum: sha1:847867b93d5255399b016a3638b0945813ddebb4 @@ -29165,11 +33405,15 @@ trackedFiles: src/sdk/resources.ts: id: 399cf49baf34 last_write_checksum: sha1:04bcfe188707e5c16ebcbbb7703add94c9e6ea1a - pristine_git_object: 17427a982186e05d22ab583691eb937006f1b028 + pristine_git_object: 43533cab5a0c331a69bdffaa934c6211c0c1957e src/sdk/sdk.ts: id: 784571af2f69 - last_write_checksum: sha1:87e29c04ca8a57c9e5195104ebaae631910c81ab - pristine_git_object: 248c65603a466f7a3c3d4441a3075f8287b5b1f5 + last_write_checksum: sha1:e8a2cfb161e53cf8e6af9d0555ff1a37fc8fc4f4 + pristine_git_object: be201ac00ece15538e6e7d9b29814b1ec744a590 + src/sdk/slackintegration.ts: + id: 1e3720bed0ba + last_write_checksum: sha1:4010989820fbc93e866828dfdaa939cfbdfa47ac + pristine_git_object: 342764b2170a9eaa7905427e204e60d80354a893 src/sdk/sync.ts: id: 2e323d0b48d5 last_write_checksum: sha1:33e15e5c17daaa95c1dbcb25648287766d20d538 @@ -29180,8 +33424,8 @@ trackedFiles: pristine_git_object: 23e0f1cd9c59146e7276fcfd864cd87f8c156108 src/sdk/workspaces.ts: id: 72b45379c8d9 - last_write_checksum: sha1:f0c6c849f15ad520b5181e7123ca442bc3651840 - pristine_git_object: 70087d48457356adaa2a0e443f870eabc8ff8865 + last_write_checksum: sha1:cf998dd8c92b8d1857706cecc5829d542fb129e1 + pristine_git_object: 1598a6b823f7b9c6b121db4f4511a8a8d9812969 src/types/async.ts: id: fac8da972f86 last_write_checksum: sha1:3ff07b3feaf390ec1aeb18ff938e139c6c4a9585 @@ -29759,6 +34003,8 @@ examples: application/json: {"code": "", "message": "", "retryable": false, "internal": false} "500": application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "400": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} listPackages: speakeasy-default-list-packages: parameters: @@ -30352,6 +34598,8 @@ examples: id: "mgr_enxscjrqiiu2lrc672hwwuc5" query: workspace: "my-workspace" + requestBody: + application/json: {"project": ""} responses: "200": application/json: {"accessToken": "", "expiresIn": 4192.5, "tokenType": "Bearer", "managerUrl": "https://ruddy-coliseum.org/", "databaseId": "", "controlPlaneUrl": "https://filthy-place.net/"} @@ -30359,6 +34607,8 @@ examples: application/json: {"code": "", "message": "", "retryable": false, "internal": false} "500": application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} reportManagerHeartbeat: speakeasy-default-report-manager-heartbeat: parameters: @@ -31693,14 +35943,16 @@ examples: query: workspace: "my-workspace" requestBody: - application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "expiresAt": "2024-12-05T00:22:32.720Z"} + application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "owner": "", "expiresAt": "2024-12-05T00:22:32.720Z"} responses: "201": - application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "state": "stopped", "mode": "pull", "presignedUrls": {"key": {"readUrl": "https://front-husband.biz/", "writeUrl": "https://kosher-nun.com/"}}, "createdAt": "2024-09-22T17:23:21.896Z", "expiresAt": "2025-01-22T04:56:51.185Z", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "projectId": "prj_mcytp6z3j91f7tn5ryqsfwtr", "workspaceId": "ws_It13CUaGEhLLAB87simX0"} + application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "state": "stopped", "mode": "pull", "presignedUrls": {"key": {"readUrl": "https://front-husband.biz/", "writeUrl": "https://kosher-nun.com/"}}, "createdAt": "2024-09-22T17:23:21.896Z", "expiresAt": "2025-01-22T04:56:51.185Z", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "deployment": {"id": "dep_0c29fq4a2yjb7kx3smwdgxlc", "name": "", "deploymentGroup": {"id": "dg_r27ict8c7vcgsumpj90ackf7b", "name": ""}}, "projectId": "prj_mcytp6z3j91f7tn5ryqsfwtr", "workspaceId": "ws_It13CUaGEhLLAB87simX0"} "404": application/json: {"code": "", "message": "", "retryable": false, "internal": true} "500": - application/json: {"code": "", "message": "", "retryable": false, "internal": true} + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} getDebugSession: speakeasy-default-get-debug-session: parameters: @@ -31710,7 +35962,7 @@ examples: workspace: "my-workspace" responses: "200": - application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "state": "stopped", "mode": "push", "presignedUrls": {}, "createdAt": "2026-06-05T05:55:46.403Z", "expiresAt": "2026-04-18T01:29:27.065Z", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "projectId": "prj_mcytp6z3j91f7tn5ryqsfwtr", "workspaceId": "ws_It13CUaGEhLLAB87simX0"} + application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "state": "stopped", "mode": "push", "presignedUrls": {}, "createdAt": "2026-06-05T05:55:46.403Z", "expiresAt": "2026-04-18T01:29:27.065Z", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "deployment": {"id": "dep_0c29fq4a2yjb7kx3smwdgxlc", "name": "", "deploymentGroup": {"id": "dg_r27ict8c7vcgsumpj90ackf7b", "name": ""}}, "projectId": "prj_mcytp6z3j91f7tn5ryqsfwtr", "workspaceId": "ws_It13CUaGEhLLAB87simX0"} "404": application/json: {"code": "", "message": "", "retryable": false, "internal": false} "500": @@ -31724,11 +35976,13 @@ examples: workspace: "my-workspace" responses: "200": - application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "state": "running", "mode": "push", "presignedUrls": {}, "createdAt": "2024-03-30T06:15:35.716Z", "expiresAt": "2024-12-23T16:12:11.306Z", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "projectId": "prj_mcytp6z3j91f7tn5ryqsfwtr", "workspaceId": "ws_It13CUaGEhLLAB87simX0"} + application/json: {"id": "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", "state": "running", "mode": "push", "presignedUrls": {}, "createdAt": "2024-03-30T06:15:35.716Z", "expiresAt": "2024-12-23T16:12:11.306Z", "deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc", "deployment": {"id": "dep_0c29fq4a2yjb7kx3smwdgxlc", "name": "", "deploymentGroup": {"id": "dg_r27ict8c7vcgsumpj90ackf7b", "name": ""}}, "projectId": "prj_mcytp6z3j91f7tn5ryqsfwtr", "workspaceId": "ws_It13CUaGEhLLAB87simX0"} "404": application/json: {"code": "", "message": "", "retryable": false, "internal": false} "500": - application/json: {"code": "", "message": "", "retryable": false, "internal": false} + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} planDeploymentCompute: speakeasy-default-plan-deployment-compute: parameters: @@ -32008,4 +36262,301 @@ examples: application/json: {"code": "", "message": "", "retryable": false, "internal": true} "500": application/json: {"code": "", "message": "", "retryable": false, "internal": true} + getWorkspaceInvitationPreview: + speakeasy-default-get-workspace-invitation-preview: + parameters: + path: + token: "" + responses: + "200": + application/json: {"kind": "email", "workspace": {"id": "ws_It13CUaGEhLLAB87simX0", "name": "", "logoUrl": "https://noteworthy-mantua.biz"}, "inviter": {"name": "", "image": "https://pale-saloon.name/"}, "role": "workspace.member", "expiresAt": "2024-12-23T03:07:01.575Z", "state": "expired", "emailHint": null} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + acceptWorkspaceInvitation: + speakeasy-default-accept-workspace-invitation: + parameters: + path: + token: "" + responses: + "200": + application/json: {"outcome": "joined", "workspaceId": "ws_It13CUaGEhLLAB87simX0", "workspaceName": "", "role": "workspace.member"} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + listWorkspaceInvitations: + speakeasy-default-list-workspace-invitations: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"items": [{"id": "winv_DsgltMIFV0GmqtxV5NYTtrknrna", "email": "Emmie_Muller@gmail.com", "role": "workspace.member", "status": "pending", "deliveryStatus": "failed", "expiresAt": "2024-03-09T16:33:10.868Z", "lastSentAt": "2024-03-29T16:06:21.554Z", "createdAt": "2026-07-21T15:51:18.955Z", "inviteUrl": "https://helpless-anticodon.biz/"}]} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + createWorkspaceInvitation: + speakeasy-default-create-workspace-invitation: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + requestBody: + application/json: {"email": "Moriah.Rolfson@hotmail.com", "role": "workspace.member"} + responses: + "201": + application/json: {"id": "winv_DsgltMIFV0GmqtxV5NYTtrknrna", "email": "Abraham42@hotmail.com", "role": "workspace.member", "status": "accepted", "deliveryStatus": "pending", "expiresAt": "2026-05-21T08:40:21.188Z", "lastSentAt": "2025-07-08T02:20:00.972Z", "createdAt": "2024-05-15T04:20:10.174Z", "inviteUrl": "https://abandoned-eyebrow.biz/"} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + resendWorkspaceInvitation: + speakeasy-default-resend-workspace-invitation: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + invitationId: "" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"id": "winv_DsgltMIFV0GmqtxV5NYTtrknrna", "email": "Heaven.Cole69@gmail.com", "role": "workspace.member", "status": "expired", "deliveryStatus": "failed", "expiresAt": "2024-06-06T23:10:53.839Z", "lastSentAt": "2026-10-26T00:10:20.068Z", "createdAt": "2025-05-20T00:44:42.174Z", "inviteUrl": "https://dreary-petticoat.com"} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + revokeWorkspaceInvitation: + speakeasy-default-revoke-workspace-invitation: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + invitationId: "" + query: + workspace: "my-workspace" + responses: + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + getWorkspaceInviteLink: + speakeasy-default-get-workspace-invite-link: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"id": "wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4", "role": "workspace.member", "expiresAt": "2025-06-07T04:37:56.496Z", "createdAt": "2024-04-17T09:41:30.726Z", "useCount": 953936, "lastUsedAt": "2024-03-08T14:24:52.766Z", "inviteUrl": "https://ultimate-elver.biz"} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + createWorkspaceInviteLink: + speakeasy-default-create-workspace-invite-link: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + requestBody: + application/json: {"role": "workspace.member"} + responses: + "200": + application/json: {"id": "wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4", "role": "workspace.member", "expiresAt": "2025-09-13T03:21:37.500Z", "createdAt": "2024-08-05T23:43:57.116Z", "useCount": 73602, "lastUsedAt": "2025-08-07T11:27:49.590Z", "inviteUrl": "https://dull-consistency.org/"} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + revokeWorkspaceInviteLink: + speakeasy-default-revoke-workspace-invite-link: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + responses: + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + getWorkspaceSettings: + speakeasy-default-get-workspace-settings: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"workspaceId": "ws_It13CUaGEhLLAB87simX0", "enabled": false, "debugPermissionMode": "ask", "createdAt": "2024-11-13T08:37:23.238Z", "updatedAt": "2024-08-03T09:23:28.780Z"} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + updateWorkspaceSettings: + speakeasy-default-update-workspace-settings: + parameters: + path: + id: "ws_It13CUaGEhLLAB87simX0" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"workspaceId": "ws_It13CUaGEhLLAB87simX0", "enabled": false, "debugPermissionMode": "ask", "createdAt": "2026-03-16T04:44:35.115Z", "updatedAt": "2026-12-06T08:55:25.293Z"} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + generateManagerBindingToken: + speakeasy-default-generate-manager-binding-token: + parameters: + path: + id: "mgr_enxscjrqiiu2lrc672hwwuc5" + query: + workspace: "my-workspace" + requestBody: + application/json: {"deploymentId": "dep_0c29fq4a2yjb7kx3smwdgxlc"} + responses: + "200": + application/json: {"accessToken": "", "expiresIn": 5218.79, "tokenType": "Bearer", "managerUrl": "https://admired-maintainer.com", "databaseId": "", "controlPlaneUrl": "https://well-off-mixture.com"} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + generateManagerCommandToken: + speakeasy-default-generate-manager-command-token: + parameters: + path: + id: "mgr_enxscjrqiiu2lrc672hwwuc5" + query: + workspace: "my-workspace" + requestBody: + application/json: {"commandId": "cmd_2sxjXxvOYct7IohT3ukliAzf"} + responses: + "200": + application/json: {"accessToken": "", "expiresIn": 9091.07, "tokenType": "Bearer", "managerUrl": "https://productive-nightlife.name/", "databaseId": null, "controlPlaneUrl": null} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + listActiveManagerDebugSessions: + speakeasy-default-list-active-manager-debug-sessions: + parameters: + query: + limit: 20 + responses: + "200": + application/json: {"items": [], "nextCursor": ""} + "403": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + slackIntegrationInstallUrl: + speakeasy-default-slack-integration-install-url: + parameters: + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"url": "https://apt-flood.com"} + "500": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + slackIntegrationStatus: + speakeasy-default-slack-integration-status: + parameters: + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"connected": true, "slackTeamId": "", "slackTeamName": "", "installedByUserId": null, "installedAt": "", "notificationChannelId": ""} + slackIntegrationChannels: + speakeasy-default-slack-integration-channels: + parameters: + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"channels": [{"id": "", "name": "", "isMember": false}]} + "400": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + slackIntegrationSetNotificationChannel: + speakeasy-default-slack-integration-set-notification-channel: + parameters: + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"notificationChannelId": "", "warning": ""} + "400": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + slackIntegrationUninstall: + speakeasy-default-slack-integration-uninstall: + parameters: + query: + workspace: "my-workspace" + listAgentSessions: + speakeasy-default-list-agent-sessions: + parameters: + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"sessions": [{"id": "", "triggerType": "", "subjectId": "", "subject": {"deploymentName": "", "deploymentGroupId": "", "deploymentGroupName": "", "releaseId": "", "releaseCommitMessage": "", "releaseCommitRef": "", "projectId": "", "projectName": ""}, "status": "", "createdAt": "1722382100466", "updatedAt": "1735649629368"}]} + getAgentSession: + speakeasy-default-get-agent-session: + parameters: + path: + id: "" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"id": "", "triggerType": "", "subjectId": "", "subject": {"deploymentName": "", "deploymentGroupId": "", "deploymentGroupName": "", "releaseId": "", "releaseCommitMessage": "", "releaseCommitRef": "", "projectId": "", "projectName": ""}, "status": "", "createdAt": "1707662224078", "updatedAt": "1735653190474", "resultText": "", "toolNames": [""], "error": null, "pendingApproval": {"approvalId": "", "toolCallId": "", "toolName": ""}} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + listAgentSessionEvents: + speakeasy-default-list-agent-session-events: + parameters: + path: + id: "" + query: + workspace: "my-workspace" + after: 0 + limit: 200 + responses: + "200": + application/json: {"events": [{"seq": 5222.98, "createdAt": "1713435916334", "type": "markdown", "payload": {"text": ""}}], "latestSeq": 9204.96, "hasMore": false} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + approveAgentSession: + speakeasy-default-approve-agent-session: + parameters: + path: + id: "" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"jobId": "", "status": "", "resumed": false} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + "503": + application/json: {"code": "", "message": "", "retryable": false, "internal": true} + stopAgentSession: + speakeasy-default-stop-agent-session: + parameters: + path: + id: "" + query: + workspace: "my-workspace" + responses: + "200": + application/json: {"jobId": "", "status": "", "canceled": true} + "404": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} + "503": + application/json: {"code": "", "message": "", "retryable": false, "internal": false} examplesVersion: 1.0.2 diff --git a/client-sdks/platform/typescript/.speakeasy/gen.yaml b/client-sdks/platform/typescript/.speakeasy/gen.yaml index 22882c90f..29cc63ac0 100644 --- a/client-sdks/platform/typescript/.speakeasy/gen.yaml +++ b/client-sdks/platform/typescript/.speakeasy/gen.yaml @@ -26,14 +26,14 @@ generation: allOfMergeStrategy: shallowMerge requestBodyFieldName: "" persistentEdits: - enabled: never + enabled: "false" tests: generateTests: false generateNewTests: true skipResponseBodyAssertions: false versioningStrategy: manual typescript: - version: 1.14.3 + version: 2.1.6 acceptHeaderEnum: true additionalDependencies: dependencies: {} diff --git a/client-sdks/platform/typescript/FUNCTIONS.md b/client-sdks/platform/typescript/FUNCTIONS.md index 79de03ebf..2631a71bd 100644 --- a/client-sdks/platform/typescript/FUNCTIONS.md +++ b/client-sdks/platform/typescript/FUNCTIONS.md @@ -20,7 +20,7 @@ specific category of applications. ```typescript import { AlienCore } from "@alienplatform/platform-api/core.js"; -import { userListMemberships } from "@alienplatform/platform-api/funcs/userListMemberships.js"; +import { getWorkspaceInvitationPreview } from "@alienplatform/platform-api/funcs/getWorkspaceInvitationPreview.js"; // Use `AlienCore` for best tree-shaking performance. // You can create one instance of it to use across an application. @@ -29,12 +29,14 @@ const alien = new AlienCore({ }); async function run() { - const res = await userListMemberships(alien); + const res = await getWorkspaceInvitationPreview(alien, { + token: "", + }); if (res.ok) { const { value: result } = res; console.log(result); } else { - console.log("userListMemberships failed:", res.error); + console.log("getWorkspaceInvitationPreview failed:", res.error); } } @@ -84,4 +86,4 @@ run(); Notably, `result.error` above will have an explicit type compared to a try-catch variation where the error in the catch block can only be of type `unknown` (or -`any` depending on your TypeScript settings). \ No newline at end of file +`any` depending on your TypeScript settings). diff --git a/client-sdks/platform/typescript/README.md b/client-sdks/platform/typescript/README.md index d86bfb9c9..51974a846 100644 --- a/client-sdks/platform/typescript/README.md +++ b/client-sdks/platform/typescript/README.md @@ -98,7 +98,9 @@ const alien = new Alien({ }); async function run() { - const result = await alien.user.listMemberships(); + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); console.log(result); } @@ -128,7 +130,9 @@ const alien = new Alien({ }); async function run() { - const result = await alien.user.listMemberships(); + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); console.log(result); } @@ -144,6 +148,26 @@ run();
Available methods +### [Alien SDK](docs/sdks/alien/README.md) + +* [getWorkspaceInvitationPreview](docs/sdks/alien/README.md#getworkspaceinvitationpreview) +* [acceptWorkspaceInvitation](docs/sdks/alien/README.md#acceptworkspaceinvitation) +* [listWorkspaceInvitations](docs/sdks/alien/README.md#listworkspaceinvitations) +* [createWorkspaceInvitation](docs/sdks/alien/README.md#createworkspaceinvitation) +* [resendWorkspaceInvitation](docs/sdks/alien/README.md#resendworkspaceinvitation) +* [revokeWorkspaceInvitation](docs/sdks/alien/README.md#revokeworkspaceinvitation) +* [getWorkspaceInviteLink](docs/sdks/alien/README.md#getworkspaceinvitelink) +* [createWorkspaceInviteLink](docs/sdks/alien/README.md#createworkspaceinvitelink) +* [revokeWorkspaceInviteLink](docs/sdks/alien/README.md#revokeworkspaceinvitelink) + +### [AgentSessions](docs/sdks/agentsessions/README.md) + +* [list](docs/sdks/agentsessions/README.md#list) - List ai-agent monitor sessions for this workspace. Newest first, capped at 50. +* [get](docs/sdks/agentsessions/README.md#get) - Retrieve one ai-agent monitor session by id. +* [events](docs/sdks/agentsessions/README.md#events) - Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events. +* [approve](docs/sdks/agentsessions/README.md#approve) - Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. +* [stop](docs/sdks/agentsessions/README.md#stop) - Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op. + ### [ApiKeys](docs/sdks/apikeys/README.md) * [list](docs/sdks/apikeys/README.md#list) - Retrieve all API keys for the current workspace. @@ -182,8 +206,9 @@ run(); ### [DebugSessions](docs/sdks/debugsessions/README.md) * [list](docs/sdks/debugsessions/README.md#list) - Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode. -* [create](docs/sdks/debugsessions/README.md#create) - Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment. -* [update](docs/sdks/debugsessions/README.md#update) - Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry. +* [create](docs/sdks/debugsessions/README.md#create) - Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server. +* [listActiveForManager](docs/sdks/debugsessions/README.md#listactiveformanager) - List active debug sessions created by the calling manager so runtime reconciliation can resume after restart. +* [update](docs/sdks/debugsessions/README.md#update) - Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry. * [get](docs/sdks/debugsessions/README.md#get) - Retrieve a debug session by ID. ### [Deployment](docs/sdks/deployment/README.md) @@ -265,7 +290,9 @@ run(); * [provision](docs/sdks/managers/README.md#provision) - Enqueue provisioning for a manager by ID. * [update](docs/sdks/managers/README.md#update) - Update a manager to a specific release ID or active release. * [listEvents](docs/sdks/managers/README.md#listevents) - Retrieve all events of a manager. -* [generateManagerToken](docs/sdks/managers/README.md#generatemanagertoken) - Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API. +* [generateManagerToken](docs/sdks/managers/README.md#generatemanagertoken) - Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API. +* [generateManagerBindingToken](docs/sdks/managers/README.md#generatemanagerbindingtoken) - Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager. +* [generateManagerCommandToken](docs/sdks/managers/README.md#generatemanagercommandtoken) - Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API. * [resolveGcpOAuthProvider](docs/sdks/managers/README.md#resolvegcpoauthprovider) - Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap. * [reportHeartbeat](docs/sdks/managers/README.md#reportheartbeat) - Report Manager health status and metrics. * [getDeployment](docs/sdks/managers/README.md#getdeployment) - Get deployment details for a private manager (internal deployment platform, status, resources). @@ -316,6 +343,14 @@ run(); * [listDeployments](docs/sdks/resources/README.md#listdeployments) * [getDeploymentDetail](docs/sdks/resources/README.md#getdeploymentdetail) +### [SlackIntegration](docs/sdks/slackintegration/README.md) + +* [installUrl](docs/sdks/slackintegration/README.md#installurl) - Generate the Slack OAuth consent URL for this workspace. +* [status](docs/sdks/slackintegration/README.md#status) - Return the Slack install for this workspace (if any). +* [listChannels](docs/sdks/slackintegration/README.md#listchannels) - List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker. +* [setNotificationChannel](docs/sdks/slackintegration/README.md#setnotificationchannel) - Configure which Slack channel receives ai-agent monitor reports. +* [uninstall](docs/sdks/slackintegration/README.md#uninstall) - Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row. + ### [Sync](docs/sdks/sync/README.md) * [list](docs/sdks/sync/README.md#list) - List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows. @@ -346,6 +381,8 @@ run(); * [updateMember](docs/sdks/workspaces/README.md#updatemember) - Update a workspace member's role. * [removeMember](docs/sdks/workspaces/README.md#removemember) - Remove a member from a workspace. * [dismissOnboarding](docs/sdks/workspaces/README.md#dismissonboarding) - Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu. +* [getSettings](docs/sdks/workspaces/README.md#getsettings) - Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them. +* [updateSettings](docs/sdks/workspaces/README.md#updatesettings) - Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).
@@ -365,6 +402,12 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). Available standalone functions +- [`acceptWorkspaceInvitation`](docs/sdks/alien/README.md#acceptworkspaceinvitation) +- [`agentSessionsApprove`](docs/sdks/agentsessions/README.md#approve) - Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. +- [`agentSessionsEvents`](docs/sdks/agentsessions/README.md#events) - Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events. +- [`agentSessionsGet`](docs/sdks/agentsessions/README.md#get) - Retrieve one ai-agent monitor session by id. +- [`agentSessionsList`](docs/sdks/agentsessions/README.md#list) - List ai-agent monitor sessions for this workspace. Newest first, capped at 50. +- [`agentSessionsStop`](docs/sdks/agentsessions/README.md#stop) - Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op. - [`apiKeysCreate`](docs/sdks/apikeys/README.md#create) - Create a new API key. - [`apiKeysDeleteMultiple`](docs/sdks/apikeys/README.md#deletemultiple) - Permanently delete multiple API keys. - [`apiKeysGet`](docs/sdks/apikeys/README.md#get) - Retrieve a specific API key. @@ -385,10 +428,13 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). - [`commandsListNames`](docs/sdks/commands/README.md#listnames) - List distinct command names. Use for filter dropdowns in the dashboard. - [`commandsResolveTarget`](docs/sdks/commands/README.md#resolvetarget) - Resolve which resource a command for this deployment would be addressed to, and how it would be delivered. Fails when the deployment has no command-capable resources, or more than one and no explicit target was named. - [`commandsUpdate`](docs/sdks/commands/README.md#update) - Update command state. Called by manager when command is dispatched or completes. -- [`debugSessionsCreate`](docs/sdks/debugsessions/README.md#create) - Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment. +- [`createWorkspaceInvitation`](docs/sdks/alien/README.md#createworkspaceinvitation) +- [`createWorkspaceInviteLink`](docs/sdks/alien/README.md#createworkspaceinvitelink) +- [`debugSessionsCreate`](docs/sdks/debugsessions/README.md#create) - Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server. - [`debugSessionsGet`](docs/sdks/debugsessions/README.md#get) - Retrieve a debug session by ID. - [`debugSessionsList`](docs/sdks/debugsessions/README.md#list) - Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode. -- [`debugSessionsUpdate`](docs/sdks/debugsessions/README.md#update) - Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry. +- [`debugSessionsListActiveForManager`](docs/sdks/debugsessions/README.md#listactiveformanager) - List active debug sessions created by the calling manager so runtime reconciliation can resume after restart. +- [`debugSessionsUpdate`](docs/sdks/debugsessions/README.md#update) - Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry. - [`deploymentGetInfo`](docs/sdks/deployment/README.md#getinfo) - Get deployment information for the deployment portal. Accepts both deployment-scoped and deployment-group-scoped API keys. Returns project information, package status/outputs, and either deployment or deployment group details depending on the token type. Poll this endpoint to check if packages are ready. - [`deploymentGroupsCreateDeploymentGroup`](docs/sdks/deploymentgroups/README.md#createdeploymentgroup) - Create a new deployment group - [`deploymentGroupsCreateDeploymentGroupToken`](docs/sdks/deploymentgroups/README.md#createdeploymentgrouptoken) - Create deployment group token @@ -427,6 +473,9 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). - [`domainsRefresh`](docs/sdks/domains/README.md#refresh) - Refresh workspace domain verification. - [`eventsGet`](docs/sdks/events/README.md#get) - Retrieve an event by ID. - [`eventsList`](docs/sdks/events/README.md#list) - Retrieve all events. +- [`getWorkspaceInvitationPreview`](docs/sdks/alien/README.md#getworkspaceinvitationpreview) +- [`getWorkspaceInviteLink`](docs/sdks/alien/README.md#getworkspaceinvitelink) +- [`listWorkspaceInvitations`](docs/sdks/alien/README.md#listworkspaceinvitations) - [`machinesCancelMachineDrain`](docs/sdks/machines/README.md#cancelmachinedrain) - [`machinesCreateJoinToken`](docs/sdks/machines/README.md#createjointoken) - [`machinesDrainMachine`](docs/sdks/machines/README.md#drainmachine) @@ -438,7 +487,9 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). - [`managersCancelSetup`](docs/sdks/managers/README.md#cancelsetup) - Cancel pending private-manager setup, revoke setup/runtime tokens, and remove the undeployed manager record. - [`managersCreate`](docs/sdks/managers/README.md#create) - Create a new manager. - [`managersDelete`](docs/sdks/managers/README.md#delete) - Delete a manager by ID. -- [`managersGenerateManagerToken`](docs/sdks/managers/README.md#generatemanagertoken) - Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API. +- [`managersGenerateManagerBindingToken`](docs/sdks/managers/README.md#generatemanagerbindingtoken) - Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager. +- [`managersGenerateManagerCommandToken`](docs/sdks/managers/README.md#generatemanagercommandtoken) - Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API. +- [`managersGenerateManagerToken`](docs/sdks/managers/README.md#generatemanagertoken) - Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API. - [`managersGet`](docs/sdks/managers/README.md#get) - Retrieve a manager by ID. - [`managersGetDeployment`](docs/sdks/managers/README.md#getdeployment) - Get deployment details for a private manager (internal deployment platform, status, resources). - [`managersGetDomainBinding`](docs/sdks/managers/README.md#getdomainbinding) - Get the custom domain binding for a private manager. @@ -475,11 +526,19 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). - [`releasesList`](docs/sdks/releases/README.md#list) - Retrieve all releases. - [`releasesListAuthors`](docs/sdks/releases/README.md#listauthors) - List distinct commit authors across releases. Used for filter dropdowns. - [`releasesListBranches`](docs/sdks/releases/README.md#listbranches) - List distinct git branches across releases. Used for filter dropdowns. +- [`resendWorkspaceInvitation`](docs/sdks/alien/README.md#resendworkspaceinvitation) - [`resolveResolve`](docs/sdks/resolve/README.md#resolve) - Resolve manager for a project and platform - [`resourcesGetDeploymentDetail`](docs/sdks/resources/README.md#getdeploymentdetail) - [`resourcesListDeployments`](docs/sdks/resources/README.md#listdeployments) - [`resourcesListInventory`](docs/sdks/resources/README.md#listinventory) - [`resourcesListOverview`](docs/sdks/resources/README.md#listoverview) +- [`revokeWorkspaceInvitation`](docs/sdks/alien/README.md#revokeworkspaceinvitation) +- [`revokeWorkspaceInviteLink`](docs/sdks/alien/README.md#revokeworkspaceinvitelink) +- [`slackIntegrationInstallUrl`](docs/sdks/slackintegration/README.md#installurl) - Generate the Slack OAuth consent URL for this workspace. +- [`slackIntegrationListChannels`](docs/sdks/slackintegration/README.md#listchannels) - List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker. +- [`slackIntegrationSetNotificationChannel`](docs/sdks/slackintegration/README.md#setnotificationchannel) - Configure which Slack channel receives ai-agent monitor reports. +- [`slackIntegrationStatus`](docs/sdks/slackintegration/README.md#status) - Return the Slack install for this workspace (if any). +- [`slackIntegrationUninstall`](docs/sdks/slackintegration/README.md#uninstall) - Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row. - [`syncAcquire`](docs/sdks/sync/README.md#acquire) - Acquire a batch of deployments for processing. Used by Manager to atomically lock deployments matching filters. Each deployment in the batch must be released after processing. - [`syncContext`](docs/sdks/sync/README.md#context) - Get computed deployment state and configuration for a manager-side operation without acquiring the deployment reconciliation lock. - [`syncList`](docs/sdks/sync/README.md#list) - List full deployment records for manager operational loops. This endpoint is intentionally separate from the public deployments list, which returns lightweight UI rows. @@ -497,11 +556,13 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md). - [`workspacesDelete`](docs/sdks/workspaces/README.md#delete) - Delete a workspace. The workspace must have no projects. - [`workspacesDismissOnboarding`](docs/sdks/workspaces/README.md#dismissonboarding) - Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu. - [`workspacesGet`](docs/sdks/workspaces/README.md#get) - Retrieve a workspace by ID. +- [`workspacesGetSettings`](docs/sdks/workspaces/README.md#getsettings) - Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them. - [`workspacesList`](docs/sdks/workspaces/README.md#list) - Retrieve all workspaces. - [`workspacesListMembers`](docs/sdks/workspaces/README.md#listmembers) - List all members of a workspace. - [`workspacesRemoveMember`](docs/sdks/workspaces/README.md#removemember) - Remove a member from a workspace. - [`workspacesUpdate`](docs/sdks/workspaces/README.md#update) - Update a workspace. - [`workspacesUpdateMember`](docs/sdks/workspaces/README.md#updatemember) - Update a workspace member's role. +- [`workspacesUpdateSettings`](docs/sdks/workspaces/README.md#updatesettings) - Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs).
@@ -520,7 +581,9 @@ const alien = new Alien({ }); async function run() { - const result = await alien.user.listMemberships({ + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }, { retries: { strategy: "backoff", backoff: { @@ -559,7 +622,9 @@ const alien = new Alien({ }); async function run() { - const result = await alien.user.listMemberships(); + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); console.log(result); } @@ -594,7 +659,9 @@ const alien = new Alien({ async function run() { try { - const result = await alien.user.listMemberships(); + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); console.log(result); } catch (error) { @@ -661,7 +728,9 @@ const alien = new Alien({ }); async function run() { - const result = await alien.user.listMemberships(); + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); console.log(result); } diff --git a/client-sdks/platform/typescript/USAGE.md b/client-sdks/platform/typescript/USAGE.md index 662dae6d1..5054abe5b 100644 --- a/client-sdks/platform/typescript/USAGE.md +++ b/client-sdks/platform/typescript/USAGE.md @@ -7,7 +7,9 @@ const alien = new Alien({ }); async function run() { - const result = await alien.user.listMemberships(); + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); console.log(result); } @@ -15,4 +17,4 @@ async function run() { run(); ``` - \ No newline at end of file + diff --git a/client-sdks/platform/typescript/docs/models/acceptworkspaceinvitationresponse.md b/client-sdks/platform/typescript/docs/models/acceptworkspaceinvitationresponse.md new file mode 100644 index 000000000..73ac53caa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/acceptworkspaceinvitationresponse.md @@ -0,0 +1,23 @@ +# AcceptWorkspaceInvitationResponse + +## Example Usage + +```typescript +import { AcceptWorkspaceInvitationResponse } from "@alienplatform/platform-api/models"; + +let value: AcceptWorkspaceInvitationResponse = { + outcome: "joined", + workspaceId: "ws_It13CUaGEhLLAB87simX0", + workspaceName: "", + role: "workspace.member", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `outcome` | [models.Outcome](../models/outcome.md) | :heavy_check_mark: | N/A | | +| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspaceName` | *string* | :heavy_check_mark: | N/A | | +| `role` | [models.WorkspaceRole](../models/workspacerole.md) | :heavy_check_mark: | Role for workspace-scoped service accounts | workspace.member | diff --git a/client-sdks/platform/typescript/docs/models/actor1.md b/client-sdks/platform/typescript/docs/models/actor1.md deleted file mode 100644 index 0e9771380..000000000 --- a/client-sdks/platform/typescript/docs/models/actor1.md +++ /dev/null @@ -1,22 +0,0 @@ -# Actor1 - -Authenticated principal that requested a deployment intent event. - -## Example Usage - -```typescript -import { Actor1 } from "@alienplatform/platform-api/models"; - -let value: Actor1 = { - id: "", - kind: "user", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -| `email` | *string* | :heavy_minus_sign: | User email when the principal is a user. | -| `id` | *string* | :heavy_check_mark: | Stable user or service-account identifier. | -| `kind` | [models.EventKind1](../models/eventkind1.md) | :heavy_check_mark: | Type of authenticated principal that requested an event. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/actor2.md b/client-sdks/platform/typescript/docs/models/actor2.md deleted file mode 100644 index f91675ae8..000000000 --- a/client-sdks/platform/typescript/docs/models/actor2.md +++ /dev/null @@ -1,22 +0,0 @@ -# Actor2 - -Authenticated principal that requested a deployment intent event. - -## Example Usage - -```typescript -import { Actor2 } from "@alienplatform/platform-api/models"; - -let value: Actor2 = { - id: "", - kind: "serviceAccount", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -| `email` | *string* | :heavy_minus_sign: | User email when the principal is a user. | -| `id` | *string* | :heavy_check_mark: | Stable user or service-account identifier. | -| `kind` | [models.EventKind2](../models/eventkind2.md) | :heavy_check_mark: | Type of authenticated principal that requested an event. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/actorunion1.md b/client-sdks/platform/typescript/docs/models/actorunion1.md deleted file mode 100644 index 829f8a3b0..000000000 --- a/client-sdks/platform/typescript/docs/models/actorunion1.md +++ /dev/null @@ -1,19 +0,0 @@ -# ActorUnion1 - - -## Supported Types - -### `models.Actor1` - -```typescript -const value: models.Actor1 = { - id: "", - kind: "user", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` diff --git a/client-sdks/platform/typescript/docs/models/actorunion2.md b/client-sdks/platform/typescript/docs/models/actorunion2.md deleted file mode 100644 index 99f7f3e89..000000000 --- a/client-sdks/platform/typescript/docs/models/actorunion2.md +++ /dev/null @@ -1,19 +0,0 @@ -# ActorUnion2 - - -## Supported Types - -### `models.Actor2` - -```typescript -const value: models.Actor2 = { - id: "", - kind: "serviceAccount", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` diff --git a/client-sdks/platform/typescript/docs/models/agentsessionapprovalgrantedevent.md b/client-sdks/platform/typescript/docs/models/agentsessionapprovalgrantedevent.md new file mode 100644 index 000000000..28f9373e0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionapprovalgrantedevent.md @@ -0,0 +1,28 @@ +# AgentSessionApprovalGrantedEvent + +## Example Usage + +```typescript +import { AgentSessionApprovalGrantedEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionApprovalGrantedEvent = { + seq: 2155.04, + createdAt: "1722031798553", + type: "approval_granted", + payload: { + approvalId: "", + approvedByUserId: "", + approvedByName: "", + source: "dashboard", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"approval_granted"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionApprovalGrantedEventPayload](../models/agentsessionapprovalgrantedeventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionapprovalgrantedeventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessionapprovalgrantedeventpayload.md new file mode 100644 index 000000000..5ed959e2c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionapprovalgrantedeventpayload.md @@ -0,0 +1,23 @@ +# AgentSessionApprovalGrantedEventPayload + +## Example Usage + +```typescript +import { AgentSessionApprovalGrantedEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionApprovalGrantedEventPayload = { + approvalId: "", + approvedByUserId: "", + approvedByName: "", + source: "dashboard", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `approvalId` | *string* | :heavy_check_mark: | N/A | +| `approvedByUserId` | *string* | :heavy_check_mark: | N/A | +| `approvedByName` | *string* | :heavy_check_mark: | N/A | +| `source` | [models.SourceEnum](../models/sourceenum.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionapprovalrequestedevent.md b/client-sdks/platform/typescript/docs/models/agentsessionapprovalrequestedevent.md new file mode 100644 index 000000000..d5117cd07 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionapprovalrequestedevent.md @@ -0,0 +1,27 @@ +# AgentSessionApprovalRequestedEvent + +## Example Usage + +```typescript +import { AgentSessionApprovalRequestedEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionApprovalRequestedEvent = { + seq: 8489.57, + createdAt: "1727488365811", + type: "approval_requested", + payload: { + approvalId: "", + toolCallId: "", + toolName: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"approval_requested"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionApprovalRequestedEventPayload](../models/agentsessionapprovalrequestedeventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionapprovalrequestedeventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessionapprovalrequestedeventpayload.md new file mode 100644 index 000000000..4eba53cf5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionapprovalrequestedeventpayload.md @@ -0,0 +1,22 @@ +# AgentSessionApprovalRequestedEventPayload + +## Example Usage + +```typescript +import { AgentSessionApprovalRequestedEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionApprovalRequestedEventPayload = { + approvalId: "", + toolCallId: "", + toolName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `approvalId` | *string* | :heavy_check_mark: | N/A | +| `toolCallId` | *string* | :heavy_check_mark: | N/A | +| `toolName` | *string* | :heavy_check_mark: | N/A | +| `input` | *any* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionapproveresponse.md b/client-sdks/platform/typescript/docs/models/agentsessionapproveresponse.md new file mode 100644 index 000000000..3780cbed0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionapproveresponse.md @@ -0,0 +1,21 @@ +# AgentSessionApproveResponse + +## Example Usage + +```typescript +import { AgentSessionApproveResponse } from "@alienplatform/platform-api/models"; + +let value: AgentSessionApproveResponse = { + jobId: "", + status: "", + resumed: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `jobId` | *string* | :heavy_check_mark: | N/A | +| `status` | *string* | :heavy_check_mark: | N/A | +| `resumed` | *boolean* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessiondetail.md b/client-sdks/platform/typescript/docs/models/agentsessiondetail.md new file mode 100644 index 000000000..710bf8201 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessiondetail.md @@ -0,0 +1,54 @@ +# AgentSessionDetail + +## Example Usage + +```typescript +import { AgentSessionDetail } from "@alienplatform/platform-api/models"; + +let value: AgentSessionDetail = { + id: "", + triggerType: "", + subjectId: "", + subject: { + deploymentName: "", + deploymentGroupId: null, + deploymentGroupName: "", + releaseId: "", + releaseCommitMessage: "", + releaseCommitRef: "", + projectId: "", + projectName: "", + }, + status: "", + createdAt: "1708547203760", + updatedAt: "1735665644852", + resultText: "", + toolNames: [ + "", + "", + "", + ], + error: null, + pendingApproval: { + approvalId: "", + toolCallId: "", + toolName: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `triggerType` | *string* | :heavy_check_mark: | N/A | +| `subjectId` | *string* | :heavy_check_mark: | N/A | +| `subject` | [models.AgentSessionSubject](../models/agentsessionsubject.md) | :heavy_check_mark: | N/A | +| `status` | *string* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `updatedAt` | *string* | :heavy_check_mark: | N/A | +| `resultText` | *string* | :heavy_check_mark: | N/A | +| `toolNames` | *string*[] | :heavy_check_mark: | N/A | +| `error` | *string* | :heavy_check_mark: | N/A | +| `pendingApproval` | [models.PendingApproval](../models/pendingapproval.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionevent.md b/client-sdks/platform/typescript/docs/models/agentsessionevent.md new file mode 100644 index 000000000..1adbc5ba6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionevent.md @@ -0,0 +1,131 @@ +# AgentSessionEvent + + +## Supported Types + +### `models.AgentSessionStatusEvent` + +```typescript +const value: models.AgentSessionStatusEvent = { + seq: 4210.33, + createdAt: "1710340330705", + type: "status", + payload: { + status: "", + }, +}; +``` + +### `models.AgentSessionStepEvent` + +```typescript +const value: models.AgentSessionStepEvent = { + seq: 1186.78, + createdAt: "1731419010075", + type: "step", + payload: { + stepId: "", + title: "", + status: "in_progress", + }, +}; +``` + +### `models.AgentSessionToolCallEvent` + +```typescript +const value: models.AgentSessionToolCallEvent = { + seq: 400.77, + createdAt: "1718464824179", + type: "tool_call", + payload: { + toolCallId: "", + toolName: "", + }, +}; +``` + +### `models.AgentSessionToolResultEvent` + +```typescript +const value: models.AgentSessionToolResultEvent = { + seq: 4758.06, + createdAt: "1735429468512", + type: "tool_result", + payload: { + toolCallId: "", + toolName: "", + ok: true, + }, +}; +``` + +### `models.AgentSessionMarkdownEvent` + +```typescript +const value: models.AgentSessionMarkdownEvent = { + seq: 4742.82, + createdAt: "1714119157487", + type: "markdown", + payload: { + text: "", + }, +}; +``` + +### `models.AgentSessionApprovalRequestedEvent` + +```typescript +const value: models.AgentSessionApprovalRequestedEvent = { + seq: 8489.57, + createdAt: "1727488365811", + type: "approval_requested", + payload: { + approvalId: "", + toolCallId: "", + toolName: "", + }, +}; +``` + +### `models.AgentSessionApprovalGrantedEvent` + +```typescript +const value: models.AgentSessionApprovalGrantedEvent = { + seq: 2155.04, + createdAt: "1722031798553", + type: "approval_granted", + payload: { + approvalId: "", + approvedByUserId: "", + approvedByName: "", + source: "dashboard", + }, +}; +``` + +### `models.AgentSessionRestartedEvent` + +```typescript +const value: models.AgentSessionRestartedEvent = { + seq: 9503.12, + createdAt: "1734099609945", + type: "session_restarted", + payload: { + reason: "", + }, +}; +``` + +### `models.AgentSessionEventsTruncatedEvent` + +```typescript +const value: models.AgentSessionEventsTruncatedEvent = { + seq: 1033.37, + createdAt: "1730528196150", + type: "events_truncated", + payload: { + limit: 5615.57, + }, +}; +``` diff --git a/client-sdks/platform/typescript/docs/models/agentsessioneventsresponse.md b/client-sdks/platform/typescript/docs/models/agentsessioneventsresponse.md new file mode 100644 index 000000000..04a6f39d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessioneventsresponse.md @@ -0,0 +1,21 @@ +# AgentSessionEventsResponse + +## Example Usage + +```typescript +import { AgentSessionEventsResponse } from "@alienplatform/platform-api/models"; + +let value: AgentSessionEventsResponse = { + events: [], + latestSeq: 8653.24, + hasMore: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- | +| `events` | *models.AgentSessionEvent*[] | :heavy_check_mark: | N/A | +| `latestSeq` | *number* | :heavy_check_mark: | N/A | +| `hasMore` | *boolean* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessioneventstruncatedevent.md b/client-sdks/platform/typescript/docs/models/agentsessioneventstruncatedevent.md new file mode 100644 index 000000000..dd4398863 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessioneventstruncatedevent.md @@ -0,0 +1,25 @@ +# AgentSessionEventsTruncatedEvent + +## Example Usage + +```typescript +import { AgentSessionEventsTruncatedEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionEventsTruncatedEvent = { + seq: 1033.37, + createdAt: "1730528196150", + type: "events_truncated", + payload: { + limit: 5615.57, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"events_truncated"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionEventsTruncatedEventPayload](../models/agentsessioneventstruncatedeventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessioneventstruncatedeventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessioneventstruncatedeventpayload.md new file mode 100644 index 000000000..d95292d8a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessioneventstruncatedeventpayload.md @@ -0,0 +1,17 @@ +# AgentSessionEventsTruncatedEventPayload + +## Example Usage + +```typescript +import { AgentSessionEventsTruncatedEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionEventsTruncatedEventPayload = { + limit: 4890.46, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `limit` | *number* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionlistitem.md b/client-sdks/platform/typescript/docs/models/agentsessionlistitem.md new file mode 100644 index 000000000..0c13d8c1f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionlistitem.md @@ -0,0 +1,38 @@ +# AgentSessionListItem + +## Example Usage + +```typescript +import { AgentSessionListItem } from "@alienplatform/platform-api/models"; + +let value: AgentSessionListItem = { + id: "", + triggerType: "", + subjectId: "", + subject: { + deploymentName: "", + deploymentGroupId: null, + deploymentGroupName: "", + releaseId: "", + releaseCommitMessage: "", + releaseCommitRef: "", + projectId: "", + projectName: "", + }, + status: "", + createdAt: "1709761239116", + updatedAt: "1735623031963", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `triggerType` | *string* | :heavy_check_mark: | N/A | +| `subjectId` | *string* | :heavy_check_mark: | N/A | +| `subject` | [models.AgentSessionSubject](../models/agentsessionsubject.md) | :heavy_check_mark: | N/A | +| `status` | *string* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `updatedAt` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionlistresponse.md b/client-sdks/platform/typescript/docs/models/agentsessionlistresponse.md new file mode 100644 index 000000000..bbd6d384a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionlistresponse.md @@ -0,0 +1,36 @@ +# AgentSessionListResponse + +## Example Usage + +```typescript +import { AgentSessionListResponse } from "@alienplatform/platform-api/models"; + +let value: AgentSessionListResponse = { + sessions: [ + { + id: "", + triggerType: "", + subjectId: "", + subject: { + deploymentName: "", + deploymentGroupId: null, + deploymentGroupName: "", + releaseId: "", + releaseCommitMessage: "", + releaseCommitRef: "", + projectId: "", + projectName: "", + }, + status: "", + createdAt: "1711341083645", + updatedAt: "1735641395451", + }, + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `sessions` | [models.AgentSessionListItem](../models/agentsessionlistitem.md)[] | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionmarkdownevent.md b/client-sdks/platform/typescript/docs/models/agentsessionmarkdownevent.md new file mode 100644 index 000000000..928f84e38 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionmarkdownevent.md @@ -0,0 +1,25 @@ +# AgentSessionMarkdownEvent + +## Example Usage + +```typescript +import { AgentSessionMarkdownEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionMarkdownEvent = { + seq: 4742.82, + createdAt: "1714119157487", + type: "markdown", + payload: { + text: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"markdown"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionMarkdownEventPayload](../models/agentsessionmarkdowneventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionmarkdowneventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessionmarkdowneventpayload.md new file mode 100644 index 000000000..86186cbdf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionmarkdowneventpayload.md @@ -0,0 +1,17 @@ +# AgentSessionMarkdownEventPayload + +## Example Usage + +```typescript +import { AgentSessionMarkdownEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionMarkdownEventPayload = { + text: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `text` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionrestartedevent.md b/client-sdks/platform/typescript/docs/models/agentsessionrestartedevent.md new file mode 100644 index 000000000..57f40cde7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionrestartedevent.md @@ -0,0 +1,25 @@ +# AgentSessionRestartedEvent + +## Example Usage + +```typescript +import { AgentSessionRestartedEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionRestartedEvent = { + seq: 9503.12, + createdAt: "1734099609945", + type: "session_restarted", + payload: { + reason: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"session_restarted"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionRestartedEventPayload](../models/agentsessionrestartedeventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionrestartedeventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessionrestartedeventpayload.md new file mode 100644 index 000000000..c223390e6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionrestartedeventpayload.md @@ -0,0 +1,17 @@ +# AgentSessionRestartedEventPayload + +## Example Usage + +```typescript +import { AgentSessionRestartedEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionRestartedEventPayload = { + reason: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `reason` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionstatusevent.md b/client-sdks/platform/typescript/docs/models/agentsessionstatusevent.md new file mode 100644 index 000000000..617f5f4a7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionstatusevent.md @@ -0,0 +1,25 @@ +# AgentSessionStatusEvent + +## Example Usage + +```typescript +import { AgentSessionStatusEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionStatusEvent = { + seq: 4210.33, + createdAt: "1710340330705", + type: "status", + payload: { + status: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"status"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionStatusEventPayload](../models/agentsessionstatuseventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionstatuseventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessionstatuseventpayload.md new file mode 100644 index 000000000..b84c79b45 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionstatuseventpayload.md @@ -0,0 +1,18 @@ +# AgentSessionStatusEventPayload + +## Example Usage + +```typescript +import { AgentSessionStatusEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionStatusEventPayload = { + status: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `status` | *string* | :heavy_check_mark: | N/A | +| `error` | *string* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionstepevent.md b/client-sdks/platform/typescript/docs/models/agentsessionstepevent.md new file mode 100644 index 000000000..4661f6fd5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionstepevent.md @@ -0,0 +1,27 @@ +# AgentSessionStepEvent + +## Example Usage + +```typescript +import { AgentSessionStepEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionStepEvent = { + seq: 1186.78, + createdAt: "1731419010075", + type: "step", + payload: { + stepId: "", + title: "", + status: "in_progress", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"step"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionStepEventPayload](../models/agentsessionstepeventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionstepeventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessionstepeventpayload.md new file mode 100644 index 000000000..7ac6f0725 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionstepeventpayload.md @@ -0,0 +1,21 @@ +# AgentSessionStepEventPayload + +## Example Usage + +```typescript +import { AgentSessionStepEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionStepEventPayload = { + stepId: "", + title: "", + status: "in_progress", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `stepId` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | +| `status` | [models.AgentSessionStepEventStatus](../models/agentsessionstepeventstatus.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionstepeventstatus.md b/client-sdks/platform/typescript/docs/models/agentsessionstepeventstatus.md new file mode 100644 index 000000000..8cd7f6e3f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionstepeventstatus.md @@ -0,0 +1,15 @@ +# AgentSessionStepEventStatus + +## Example Usage + +```typescript +import { AgentSessionStepEventStatus } from "@alienplatform/platform-api/models"; + +let value: AgentSessionStepEventStatus = "in_progress"; +``` + +## Values + +```typescript +"in_progress" | "complete" | "error" +``` diff --git a/client-sdks/platform/typescript/docs/models/agentsessionstopresponse.md b/client-sdks/platform/typescript/docs/models/agentsessionstopresponse.md new file mode 100644 index 000000000..dda37b5d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionstopresponse.md @@ -0,0 +1,21 @@ +# AgentSessionStopResponse + +## Example Usage + +```typescript +import { AgentSessionStopResponse } from "@alienplatform/platform-api/models"; + +let value: AgentSessionStopResponse = { + jobId: "", + status: "", + canceled: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `jobId` | *string* | :heavy_check_mark: | N/A | +| `status` | *string* | :heavy_check_mark: | N/A | +| `canceled` | *boolean* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessionsubject.md b/client-sdks/platform/typescript/docs/models/agentsessionsubject.md new file mode 100644 index 000000000..5392fc0e9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessionsubject.md @@ -0,0 +1,31 @@ +# AgentSessionSubject + +## Example Usage + +```typescript +import { AgentSessionSubject } from "@alienplatform/platform-api/models"; + +let value: AgentSessionSubject = { + deploymentName: "", + deploymentGroupId: "", + deploymentGroupName: "", + releaseId: "", + releaseCommitMessage: "", + releaseCommitRef: "", + projectId: "", + projectName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `deploymentName` | *string* | :heavy_check_mark: | N/A | +| `deploymentGroupId` | *string* | :heavy_check_mark: | N/A | +| `deploymentGroupName` | *string* | :heavy_check_mark: | N/A | +| `releaseId` | *string* | :heavy_check_mark: | N/A | +| `releaseCommitMessage` | *string* | :heavy_check_mark: | N/A | +| `releaseCommitRef` | *string* | :heavy_check_mark: | N/A | +| `projectId` | *string* | :heavy_check_mark: | N/A | +| `projectName` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessiontoolcallevent.md b/client-sdks/platform/typescript/docs/models/agentsessiontoolcallevent.md new file mode 100644 index 000000000..22b208055 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessiontoolcallevent.md @@ -0,0 +1,26 @@ +# AgentSessionToolCallEvent + +## Example Usage + +```typescript +import { AgentSessionToolCallEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionToolCallEvent = { + seq: 400.77, + createdAt: "1718464824179", + type: "tool_call", + payload: { + toolCallId: "", + toolName: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"tool_call"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionToolCallEventPayload](../models/agentsessiontoolcalleventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessiontoolcalleventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessiontoolcalleventpayload.md new file mode 100644 index 000000000..5135c7b56 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessiontoolcalleventpayload.md @@ -0,0 +1,20 @@ +# AgentSessionToolCallEventPayload + +## Example Usage + +```typescript +import { AgentSessionToolCallEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionToolCallEventPayload = { + toolCallId: "", + toolName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `toolCallId` | *string* | :heavy_check_mark: | N/A | +| `toolName` | *string* | :heavy_check_mark: | N/A | +| `input` | *any* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessiontoolresultevent.md b/client-sdks/platform/typescript/docs/models/agentsessiontoolresultevent.md new file mode 100644 index 000000000..ca973c75c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessiontoolresultevent.md @@ -0,0 +1,27 @@ +# AgentSessionToolResultEvent + +## Example Usage + +```typescript +import { AgentSessionToolResultEvent } from "@alienplatform/platform-api/models"; + +let value: AgentSessionToolResultEvent = { + seq: 4758.06, + createdAt: "1735429468512", + type: "tool_result", + payload: { + toolCallId: "", + toolName: "", + ok: true, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `seq` | *number* | :heavy_check_mark: | N/A | +| `createdAt` | *string* | :heavy_check_mark: | N/A | +| `type` | *"tool_result"* | :heavy_check_mark: | N/A | +| `payload` | [models.AgentSessionToolResultEventPayload](../models/agentsessiontoolresulteventpayload.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsessiontoolresulteventpayload.md b/client-sdks/platform/typescript/docs/models/agentsessiontoolresulteventpayload.md new file mode 100644 index 000000000..8de018ba6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsessiontoolresulteventpayload.md @@ -0,0 +1,22 @@ +# AgentSessionToolResultEventPayload + +## Example Usage + +```typescript +import { AgentSessionToolResultEventPayload } from "@alienplatform/platform-api/models"; + +let value: AgentSessionToolResultEventPayload = { + toolCallId: "", + toolName: "", + ok: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `toolCallId` | *string* | :heavy_check_mark: | N/A | +| `toolName` | *string* | :heavy_check_mark: | N/A | +| `ok` | *boolean* | :heavy_check_mark: | N/A | +| `output` | *any* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/agentsettings.md b/client-sdks/platform/typescript/docs/models/agentsettings.md new file mode 100644 index 000000000..6d801d340 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsettings.md @@ -0,0 +1,25 @@ +# AgentSettings + +## Example Usage + +```typescript +import { AgentSettings } from "@alienplatform/platform-api/models"; + +let value: AgentSettings = { + workspaceId: "ws_It13CUaGEhLLAB87simX0", + enabled: true, + debugPermissionMode: "ask", + createdAt: new Date("2024-07-15T04:21:22.473Z"), + updatedAt: new Date("2026-10-03T19:00:11.287Z"), +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `enabled` | *boolean* | :heavy_check_mark: | Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`. | | +| `debugPermissionMode` | [models.AgentSettingsDebugPermissionMode](../models/agentsettingsdebugpermissionmode.md) | :heavy_check_mark: | Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. | | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/agentsettingsdebugpermissionmode.md b/client-sdks/platform/typescript/docs/models/agentsettingsdebugpermissionmode.md new file mode 100644 index 000000000..b0c10af01 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/agentsettingsdebugpermissionmode.md @@ -0,0 +1,17 @@ +# AgentSettingsDebugPermissionMode + +Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + +## Example Usage + +```typescript +import { AgentSettingsDebugPermissionMode } from "@alienplatform/platform-api/models"; + +let value: AgentSettingsDebugPermissionMode = "auto"; +``` + +## Values + +```typescript +"auto" | "ask" +``` diff --git a/client-sdks/platform/typescript/docs/models/apikey.md b/client-sdks/platform/typescript/docs/models/apikey.md index e81bb271b..9a2248dbe 100644 --- a/client-sdks/platform/typescript/docs/models/apikey.md +++ b/client-sdks/platform/typescript/docs/models/apikey.md @@ -26,19 +26,19 @@ let value: APIKey = { deploymentSetupConfig: { metadata: { "key": "", - "key1": "", - "key2": "", }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }, createdByUser: { id: "", - email: "Rhett78@hotmail.com", - image: "https://picsum.photos/seed/PS5fO/2447/1335", + email: "Rhianna90@hotmail.com", + image: "https://picsum.photos/seed/UEmR2Mt/3119/3794", }, }; ``` @@ -63,4 +63,4 @@ let value: APIKey = { | `lastUsedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | | `revokedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | | `deploymentSetupConfig` | [models.APIKeyDeploymentSetupConfig](../models/apikeydeploymentsetupconfig.md) | :heavy_check_mark: | N/A | | -| `createdByUser` | [models.CreatedByUser](../models/createdbyuser.md) | :heavy_check_mark: | User information associated with the API key | | \ No newline at end of file +| `createdByUser` | [models.CreatedByUser](../models/createdbyuser.md) | :heavy_check_mark: | User information associated with the API key | | diff --git a/client-sdks/platform/typescript/docs/models/apikeydeploymentsetupconfig.md b/client-sdks/platform/typescript/docs/models/apikeydeploymentsetupconfig.md index 225b98c31..6286b3e7b 100644 --- a/client-sdks/platform/typescript/docs/models/apikeydeploymentsetupconfig.md +++ b/client-sdks/platform/typescript/docs/models/apikeydeploymentsetupconfig.md @@ -11,7 +11,9 @@ let value: APIKeyDeploymentSetupConfig = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [ { @@ -29,4 +31,4 @@ let value: APIKeyDeploymentSetupConfig = { | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | `metadata` | Record | :heavy_check_mark: | N/A | | `policy` | [models.DeploymentSetupPolicy](../models/deploymentsetuppolicy.md) | :heavy_check_mark: | N/A | -| `environmentVariables` | [models.APIKeyDeploymentSetupEnvironmentVariable](../models/apikeydeploymentsetupenvironmentvariable.md)[] | :heavy_check_mark: | N/A | \ No newline at end of file +| `environmentVariables` | [models.APIKeyDeploymentSetupEnvironmentVariable](../models/apikeydeploymentsetupenvironmentvariable.md)[] | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createapikeyresponse.md b/client-sdks/platform/typescript/docs/models/createapikeyresponse.md index 33a675c3e..1ab555c63 100644 --- a/client-sdks/platform/typescript/docs/models/createapikeyresponse.md +++ b/client-sdks/platform/typescript/docs/models/createapikeyresponse.md @@ -28,12 +28,12 @@ let value: CreateAPIKeyResponse = { deploymentSetupConfig: { metadata: { "key": "", - "key1": "", - "key2": "", }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }, @@ -46,4 +46,4 @@ let value: CreateAPIKeyResponse = { | Field | Type | Required | Description | | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | | `apiKey` | *string* | :heavy_check_mark: | The generated API key value (only shown once) | -| `keyInfo` | [models.KeyInfo](../models/keyinfo.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| `keyInfo` | [models.KeyInfo](../models/keyinfo.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createdebugsessionrequest.md b/client-sdks/platform/typescript/docs/models/createdebugsessionrequest.md index 5e650afd8..7faab0780 100644 --- a/client-sdks/platform/typescript/docs/models/createdebugsessionrequest.md +++ b/client-sdks/platform/typescript/docs/models/createdebugsessionrequest.md @@ -8,6 +8,7 @@ import { CreateDebugSessionRequest } from "@alienplatform/platform-api/models"; let value: CreateDebugSessionRequest = { id: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + owner: "", expiresAt: new Date("2024-08-15T01:20:10.131Z"), }; ``` @@ -18,6 +19,6 @@ let value: CreateDebugSessionRequest = { | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | | `id` | *string* | :heavy_minus_sign: | Override the generated id. Manager passes the registry session id so logs correlate. | dbg_HOXmkmT9UPYlsnxqSNlEGoXL | | `deploymentId` | *string* | :heavy_check_mark: | Unique identifier for the deployment. | dep_0c29fq4a2yjb7kx3smwdgxlc | -| `owner` | *string* | :heavy_minus_sign: | N/A | | +| `owner` | *string* | :heavy_check_mark: | Original actor label attested by the assigned manager. | | | `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | -| `state` | [models.DebugSessionState](../models/debugsessionstate.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `backendTargetId` | *string* | :heavy_minus_sign: | Provider-owned target used for exact restart reconciliation. | | diff --git a/client-sdks/platform/typescript/docs/models/createdeploymentgrouptokenrequest.md b/client-sdks/platform/typescript/docs/models/createdeploymentgrouptokenrequest.md index 0a0b12f14..cf2f847d3 100644 --- a/client-sdks/platform/typescript/docs/models/createdeploymentgrouptokenrequest.md +++ b/client-sdks/platform/typescript/docs/models/createdeploymentgrouptokenrequest.md @@ -10,9 +10,21 @@ let value: CreateDeploymentGroupTokenRequest = { metadata: {}, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, - environmentVariables: [], + environmentVariables: [ + { + name: "", + value: "", + type: "plain", + targetResources: [ + "", + "", + ], + }, + ], }, }; ``` @@ -24,4 +36,4 @@ let value: CreateDeploymentGroupTokenRequest = { | `description` | *string* | :heavy_minus_sign: | Description for the API key | | `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | Optional expiration date for the API key | | `deploymentSetupConfig` | [models.DeploymentSetupConfig](../models/deploymentsetupconfig.md) | :heavy_check_mark: | N/A | -| `inputValues` | Record | :heavy_minus_sign: | N/A | \ No newline at end of file +| `inputValues` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponse.md b/client-sdks/platform/typescript/docs/models/createmanagerresponse.md index f87e7633a..013417f03 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponse.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponse.md @@ -18,7 +18,9 @@ let value: CreateManagerResponse = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }, @@ -50,4 +52,4 @@ let value: CreateManagerResponse = { | `setupTokenId` | *string* | :heavy_check_mark: | N/A | | | `deploymentLink` | *string* | :heavy_check_mark: | N/A | | | `setupConfig` | [models.CreateManagerResponseSetupConfig](../models/createmanagerresponsesetupconfig.md) | :heavy_check_mark: | N/A | | -| `setup` | *models.CreateManagerResponseSetupUnion* | :heavy_check_mark: | N/A | | \ No newline at end of file +| `setup` | *models.CreateManagerResponseSetupUnion* | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains1.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains1.md new file mode 100644 index 000000000..5c3989834 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains1.md @@ -0,0 +1,20 @@ +# CreateManagerResponseFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateManagerResponseFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: CreateManagerResponseFailureDomains1 = { + spread: 897218, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains2.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains2.md new file mode 100644 index 000000000..1a9cbd56a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains2.md @@ -0,0 +1,20 @@ +# CreateManagerResponseFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateManagerResponseFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: CreateManagerResponseFailureDomains2 = { + spread: 450195, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains3.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains3.md new file mode 100644 index 000000000..11f0e2df4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains3.md @@ -0,0 +1,20 @@ +# CreateManagerResponseFailureDomains3 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateManagerResponseFailureDomains3 } from "@alienplatform/platform-api/models"; + +let value: CreateManagerResponseFailureDomains3 = { + spread: 297029, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains4.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains4.md new file mode 100644 index 000000000..b1fa207e2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains4.md @@ -0,0 +1,20 @@ +# CreateManagerResponseFailureDomains4 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateManagerResponseFailureDomains4 } from "@alienplatform/platform-api/models"; + +let value: CreateManagerResponseFailureDomains4 = { + spread: 596209, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains5.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains5.md new file mode 100644 index 000000000..e2dcedf21 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains5.md @@ -0,0 +1,20 @@ +# CreateManagerResponseFailureDomains5 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateManagerResponseFailureDomains5 } from "@alienplatform/platform-api/models"; + +let value: CreateManagerResponseFailureDomains5 = { + spread: 178175, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains6.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains6.md new file mode 100644 index 000000000..1d8b2884e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomains6.md @@ -0,0 +1,20 @@ +# CreateManagerResponseFailureDomains6 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateManagerResponseFailureDomains6 } from "@alienplatform/platform-api/models"; + +let value: CreateManagerResponseFailureDomains6 = { + spread: 219970, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion1.md new file mode 100644 index 000000000..1ba6c8ffe --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion1.md @@ -0,0 +1,18 @@ +# CreateManagerResponseFailureDomainsUnion1 + + +## Supported Types + +### `models.CreateManagerResponseFailureDomains1` + +```typescript +const value: models.CreateManagerResponseFailureDomains1 = { + spread: 897218, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion2.md new file mode 100644 index 000000000..b6d1637cd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion2.md @@ -0,0 +1,18 @@ +# CreateManagerResponseFailureDomainsUnion2 + + +## Supported Types + +### `models.CreateManagerResponseFailureDomains2` + +```typescript +const value: models.CreateManagerResponseFailureDomains2 = { + spread: 450195, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion3.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion3.md new file mode 100644 index 000000000..b22fcbb61 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion3.md @@ -0,0 +1,18 @@ +# CreateManagerResponseFailureDomainsUnion3 + + +## Supported Types + +### `models.CreateManagerResponseFailureDomains3` + +```typescript +const value: models.CreateManagerResponseFailureDomains3 = { + spread: 297029, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion4.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion4.md new file mode 100644 index 000000000..90ec0b3a9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion4.md @@ -0,0 +1,18 @@ +# CreateManagerResponseFailureDomainsUnion4 + + +## Supported Types + +### `models.CreateManagerResponseFailureDomains4` + +```typescript +const value: models.CreateManagerResponseFailureDomains4 = { + spread: 596209, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion5.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion5.md new file mode 100644 index 000000000..82b79acdc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion5.md @@ -0,0 +1,18 @@ +# CreateManagerResponseFailureDomainsUnion5 + + +## Supported Types + +### `models.CreateManagerResponseFailureDomains5` + +```typescript +const value: models.CreateManagerResponseFailureDomains5 = { + spread: 178175, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion6.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion6.md new file mode 100644 index 000000000..7267dcd7d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsefailuredomainsunion6.md @@ -0,0 +1,18 @@ +# CreateManagerResponseFailureDomainsUnion6 + + +## Supported Types + +### `models.CreateManagerResponseFailureDomains6` + +```typescript +const value: models.CreateManagerResponseFailureDomains6 = { + spread: 219970, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale1.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale1.md index cb1ecb7c3..0c3213b88 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale1.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale1.md @@ -16,7 +16,8 @@ let value: CreateManagerResponsePoolsAutoscale1 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.CreateManagerResponseFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale2.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale2.md index f7f0d2031..a3db1b09d 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale2.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale2.md @@ -16,7 +16,8 @@ let value: CreateManagerResponsePoolsAutoscale2 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.CreateManagerResponseFailureDomainsUnion4* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale3.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale3.md index 9d13dc814..4479a4bf9 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale3.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsautoscale3.md @@ -16,7 +16,8 @@ let value: CreateManagerResponsePoolsAutoscale3 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.CreateManagerResponseFailureDomainsUnion6* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed1.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed1.md index 7dee6b606..bd3e149dd 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed1.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed1.md @@ -15,6 +15,7 @@ let value: CreateManagerResponsePoolsFixed1 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.CreateManagerResponseFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed2.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed2.md index 1cc3557ea..f3367e760 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed2.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed2.md @@ -15,6 +15,7 @@ let value: CreateManagerResponsePoolsFixed2 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.CreateManagerResponseFailureDomainsUnion3* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed3.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed3.md index 5bf975c7b..25fabd384 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed3.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsepoolsfixed3.md @@ -15,6 +15,7 @@ let value: CreateManagerResponsePoolsFixed3 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.CreateManagerResponseFailureDomainsUnion5* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createmanagerresponsesetupconfig.md b/client-sdks/platform/typescript/docs/models/createmanagerresponsesetupconfig.md index 0f3a67f07..71e51fd16 100644 --- a/client-sdks/platform/typescript/docs/models/createmanagerresponsesetupconfig.md +++ b/client-sdks/platform/typescript/docs/models/createmanagerresponsesetupconfig.md @@ -12,7 +12,9 @@ let value: CreateManagerResponseSetupConfig = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }; @@ -26,4 +28,4 @@ let value: CreateManagerResponseSetupConfig = { | `policy` | [models.DeploymentSetupPolicy](../models/deploymentsetuppolicy.md) | :heavy_check_mark: | N/A | | `inputValues` | Record | :heavy_minus_sign: | N/A | | `publicSubdomain` | *string* | :heavy_minus_sign: | Operator-pinned deployment subdomain for this setup token. | -| `environmentVariables` | [models.CreateManagerResponseEnvironmentVariable](../models/createmanagerresponseenvironmentvariable.md)[] | :heavy_check_mark: | N/A | \ No newline at end of file +| `environmentVariables` | [models.CreateManagerResponseEnvironmentVariable](../models/createmanagerresponseenvironmentvariable.md)[] | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequest.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequest.md index 5ef370100..ea6c86c04 100644 --- a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequest.md +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequest.md @@ -23,7 +23,11 @@ let value: CreateSetupRegistrationOperationRequest = { { id: "", type: "", - importData: {}, + importData: { + "key": "", + "key1": "", + "key2": "", + }, }, ], }, @@ -41,4 +45,4 @@ let value: CreateSetupRegistrationOperationRequest = { | `inputValues` | Record | :heavy_minus_sign: | N/A | | | `deploymentId` | *string* | :heavy_minus_sign: | Unique identifier for the deployment. | dep_0c29fq4a2yjb7kx3smwdgxlc | | `idempotencyKey` | *string* | :heavy_minus_sign: | N/A | | -| `cloudFormation` | [models.SetupRegistrationCloudFormationTarget](../models/setupregistrationcloudformationtarget.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `cloudFormation` | [models.SetupRegistrationCloudFormationTarget](../models/setupregistrationcloudformationtarget.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomains1.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomains1.md new file mode 100644 index 000000000..1f51bc669 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomains1.md @@ -0,0 +1,20 @@ +# CreateSetupRegistrationOperationRequestFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateSetupRegistrationOperationRequestFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: CreateSetupRegistrationOperationRequestFailureDomains1 = { + spread: 750494, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomains2.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomains2.md new file mode 100644 index 000000000..b3d37197f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomains2.md @@ -0,0 +1,20 @@ +# CreateSetupRegistrationOperationRequestFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { CreateSetupRegistrationOperationRequestFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: CreateSetupRegistrationOperationRequestFailureDomains2 = { + spread: 990650, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomainsunion1.md new file mode 100644 index 000000000..836b89f0e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomainsunion1.md @@ -0,0 +1,18 @@ +# CreateSetupRegistrationOperationRequestFailureDomainsUnion1 + + +## Supported Types + +### `models.CreateSetupRegistrationOperationRequestFailureDomains1` + +```typescript +const value: models.CreateSetupRegistrationOperationRequestFailureDomains1 = { + spread: 750494, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomainsunion2.md new file mode 100644 index 000000000..61b45f9f1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestfailuredomainsunion2.md @@ -0,0 +1,18 @@ +# CreateSetupRegistrationOperationRequestFailureDomainsUnion2 + + +## Supported Types + +### `models.CreateSetupRegistrationOperationRequestFailureDomains2` + +```typescript +const value: models.CreateSetupRegistrationOperationRequestFailureDomains2 = { + spread: 990650, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsautoscale.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsautoscale.md index a3088980f..b0867ab3c 100644 --- a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsautoscale.md @@ -14,9 +14,10 @@ let value: CreateSetupRegistrationOperationRequestPoolsAutoscale = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `max` | *number* | :heavy_check_mark: | Maximum machine count. | -| `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `failureDomains` | *models.CreateSetupRegistrationOperationRequestFailureDomainsUnion2* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `max` | *number* | :heavy_check_mark: | Maximum machine count. | +| `min` | *number* | :heavy_check_mark: | Minimum machine count. | +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsfixed.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsfixed.md index e76d3e7c1..e5bd63187 100644 --- a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestpoolsfixed.md @@ -13,8 +13,9 @@ let value: CreateSetupRegistrationOperationRequestPoolsFixed = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `failureDomains` | *models.CreateSetupRegistrationOperationRequestFailureDomainsUnion1* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestsource.md b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestsource.md index 65b4a4a44..6fabe60d5 100644 --- a/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestsource.md +++ b/client-sdks/platform/typescript/docs/models/createsetupregistrationoperationrequestsource.md @@ -22,7 +22,11 @@ let value: CreateSetupRegistrationOperationRequestSource = { { id: "", type: "", - importData: {}, + importData: { + "key": "", + "key1": "", + "key2": "", + }, }, ], }; @@ -46,4 +50,4 @@ let value: CreateSetupRegistrationOperationRequestSource = { | `setupFingerprintVersion` | *number* | :heavy_check_mark: | N/A | | | `stackSettings` | [models.CreateSetupRegistrationOperationRequestStackSettings](../models/createsetupregistrationoperationrequeststacksettings.md) | :heavy_check_mark: | User-customizable deployment settings specified at deploy time.

These settings are provided by the customer via CloudFormation parameters,
Terraform attributes, CLI flags, or Helm values. They customize how the
deployment runs and what capabilities are enabled.

**Key distinction**: StackSettings is user-customizable, while ManagementConfig
is platform-derived (from the Manager's ServiceAccount). | | | `managementConfig` | *models.CreateSetupRegistrationOperationRequestManagementConfigUnion* | :heavy_minus_sign: | Management configuration for different cloud platforms.

Platform-derived configuration for cross-account/cross-tenant access.
This is NOT user-specified - it's derived from the Manager's ServiceAccount. | | -| `resources` | [models.ImportedResource](../models/importedresource.md)[] | :heavy_check_mark: | N/A | | \ No newline at end of file +| `resources` | [models.ImportedResource](../models/importedresource.md)[] | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/dataassumingrole.md b/client-sdks/platform/typescript/docs/models/dataassumingrole.md deleted file mode 100644 index 3b44fd793..000000000 --- a/client-sdks/platform/typescript/docs/models/dataassumingrole.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataAssumingRole - -## Example Usage - -```typescript -import { DataAssumingRole } from "@alienplatform/platform-api/models"; - -let value: DataAssumingRole = { - roleArn: "", - type: "AssumingRole", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------- | ------------------------- | ------------------------- | ------------------------- | -| `roleArn` | *string* | :heavy_check_mark: | ARN of the role to assume | -| `type` | *"AssumingRole"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataaws1.md b/client-sdks/platform/typescript/docs/models/dataaws1.md index e5001eef3..b0ac91224 100644 --- a/client-sdks/platform/typescript/docs/models/dataaws1.md +++ b/client-sdks/platform/typescript/docs/models/dataaws1.md @@ -63,6 +63,7 @@ let value: DataAws1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [models.ResourceHeartbeatStatus13](../models/resourceheartbeatstatus13.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"aws"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"aws"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/dataazure1.md b/client-sdks/platform/typescript/docs/models/dataazure1.md index 379971c48..6bc254613 100644 --- a/client-sdks/platform/typescript/docs/models/dataazure1.md +++ b/client-sdks/platform/typescript/docs/models/dataazure1.md @@ -58,6 +58,7 @@ let value: DataAzure1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [models.ResourceHeartbeatStatus15](../models/resourceheartbeatstatus15.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"azure"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"azure"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/databuildingimage.md b/client-sdks/platform/typescript/docs/models/databuildingimage.md deleted file mode 100644 index 8451bcb47..000000000 --- a/client-sdks/platform/typescript/docs/models/databuildingimage.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataBuildingImage - -## Example Usage - -```typescript -import { DataBuildingImage } from "@alienplatform/platform-api/models"; - -let value: DataBuildingImage = { - image: "https://loremflickr.com/965/1538?lock=536245262441792", - type: "BuildingImage", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `image` | *string* | :heavy_check_mark: | Name of the image being built | -| `type` | *"BuildingImage"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/databuildingresource.md b/client-sdks/platform/typescript/docs/models/databuildingresource.md deleted file mode 100644 index 697efce49..000000000 --- a/client-sdks/platform/typescript/docs/models/databuildingresource.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataBuildingResource - -## Example Usage - -```typescript -import { DataBuildingResource } from "@alienplatform/platform-api/models"; - -let value: DataBuildingResource = { - resourceName: "", - resourceType: "", - type: "BuildingResource", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `relatedResources` | *string*[] | :heavy_minus_sign: | All resource names sharing this build (for deduped container groups) | -| `resourceName` | *string* | :heavy_check_mark: | Name of the resource being built | -| `resourceType` | *string* | :heavy_check_mark: | Type of the resource: "worker", "container" | -| `type` | *"BuildingResource"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/databuildingstack.md b/client-sdks/platform/typescript/docs/models/databuildingstack.md deleted file mode 100644 index ebc60fb55..000000000 --- a/client-sdks/platform/typescript/docs/models/databuildingstack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataBuildingStack - -## Example Usage - -```typescript -import { DataBuildingStack } from "@alienplatform/platform-api/models"; - -let value: DataBuildingStack = { - stack: "", - type: "BuildingStack", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `stack` | *string* | :heavy_check_mark: | Name of the stack being built | -| `type` | *"BuildingStack"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datacleaningupenvironment.md b/client-sdks/platform/typescript/docs/models/datacleaningupenvironment.md deleted file mode 100644 index 5ee56c658..000000000 --- a/client-sdks/platform/typescript/docs/models/datacleaningupenvironment.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataCleaningUpEnvironment - -## Example Usage - -```typescript -import { DataCleaningUpEnvironment } from "@alienplatform/platform-api/models"; - -let value: DataCleaningUpEnvironment = { - stackName: "", - strategyName: "", - type: "CleaningUpEnvironment", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `stackName` | *string* | :heavy_check_mark: | Name of the stack being cleaned up | -| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used for cleanup | -| `type` | *"CleaningUpEnvironment"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datacleaningupstack.md b/client-sdks/platform/typescript/docs/models/datacleaningupstack.md deleted file mode 100644 index 8496daa1d..000000000 --- a/client-sdks/platform/typescript/docs/models/datacleaningupstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataCleaningUpStack - -## Example Usage - -```typescript -import { DataCleaningUpStack } from "@alienplatform/platform-api/models"; - -let value: DataCleaningUpStack = { - stackName: "", - strategyName: "", - type: "CleaningUpStack", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `stackName` | *string* | :heavy_check_mark: | Name of the stack being cleaned up | -| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used for cleanup | -| `type` | *"CleaningUpStack"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datacompilingcode.md b/client-sdks/platform/typescript/docs/models/datacompilingcode.md deleted file mode 100644 index 1a14afdd2..000000000 --- a/client-sdks/platform/typescript/docs/models/datacompilingcode.md +++ /dev/null @@ -1,20 +0,0 @@ -# DataCompilingCode - -## Example Usage - -```typescript -import { DataCompilingCode } from "@alienplatform/platform-api/models"; - -let value: DataCompilingCode = { - language: "", - type: "CompilingCode", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `language` | *string* | :heavy_check_mark: | Language being compiled (rust, typescript, etc.) | -| `progress` | *string* | :heavy_minus_sign: | Current progress/status line from the build output | -| `type` | *"CompilingCode"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datacreatingrelease.md b/client-sdks/platform/typescript/docs/models/datacreatingrelease.md deleted file mode 100644 index af2526d5a..000000000 --- a/client-sdks/platform/typescript/docs/models/datacreatingrelease.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataCreatingRelease - -## Example Usage - -```typescript -import { DataCreatingRelease } from "@alienplatform/platform-api/models"; - -let value: DataCreatingRelease = { - project: "", - type: "CreatingRelease", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------- | ------------------- | ------------------- | ------------------- | -| `project` | *string* | :heavy_check_mark: | Project name | -| `type` | *"CreatingRelease"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadebuggingagent.md b/client-sdks/platform/typescript/docs/models/datadebuggingagent.md deleted file mode 100644 index 595ffc79c..000000000 --- a/client-sdks/platform/typescript/docs/models/datadebuggingagent.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDebuggingAgent - -## Example Usage - -```typescript -import { DataDebuggingAgent } from "@alienplatform/platform-api/models"; - -let value: DataDebuggingAgent = { - agentId: "", - debugSessionId: "", - type: "DebuggingAgent", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | -| `agentId` | *string* | :heavy_check_mark: | ID of the agent being debugged | -| `debugSessionId` | *string* | :heavy_check_mark: | ID of the debug session | -| `type` | *"DebuggingAgent"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeletingagent.md b/client-sdks/platform/typescript/docs/models/datadeletingagent.md deleted file mode 100644 index ea7feeb31..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeletingagent.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDeletingAgent - -## Example Usage - -```typescript -import { DataDeletingAgent } from "@alienplatform/platform-api/models"; - -let value: DataDeletingAgent = { - agentId: "", - releaseId: "", - type: "DeletingAgent", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | -| `agentId` | *string* | :heavy_check_mark: | ID of the agent being deleted | -| `releaseId` | *string* | :heavy_check_mark: | ID of the release that was running on the agent | -| `type` | *"DeletingAgent"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeletingcloudformationstack.md b/client-sdks/platform/typescript/docs/models/datadeletingcloudformationstack.md deleted file mode 100644 index 93b4be6aa..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeletingcloudformationstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDeletingCloudFormationStack - -## Example Usage - -```typescript -import { DataDeletingCloudFormationStack } from "@alienplatform/platform-api/models"; - -let value: DataDeletingCloudFormationStack = { - cfnStackName: "", - currentStatus: "", - type: "DeletingCloudFormationStack", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | -| `currentStatus` | *string* | :heavy_check_mark: | Current stack status | -| `type` | *"DeletingCloudFormationStack"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeployingcloudformationstack.md b/client-sdks/platform/typescript/docs/models/datadeployingcloudformationstack.md deleted file mode 100644 index 1079d6332..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeployingcloudformationstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDeployingCloudFormationStack - -## Example Usage - -```typescript -import { DataDeployingCloudFormationStack } from "@alienplatform/platform-api/models"; - -let value: DataDeployingCloudFormationStack = { - cfnStackName: "", - currentStatus: "", - type: "DeployingCloudFormationStack", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | -| `currentStatus` | *string* | :heavy_check_mark: | Current stack status | -| `type` | *"DeployingCloudFormationStack"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeployingstack.md b/client-sdks/platform/typescript/docs/models/datadeployingstack.md deleted file mode 100644 index 49c811e65..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeployingstack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataDeployingStack - -## Example Usage - -```typescript -import { DataDeployingStack } from "@alienplatform/platform-api/models"; - -let value: DataDeployingStack = { - stackName: "", - type: "DeployingStack", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -| `stackName` | *string* | :heavy_check_mark: | Name of the stack being deployed | -| `type` | *"DeployingStack"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentcreated.md b/client-sdks/platform/typescript/docs/models/datadeploymentcreated.md deleted file mode 100644 index c13c03230..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentcreated.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataDeploymentCreated - -## Example Usage - -```typescript -import { DataDeploymentCreated } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentCreated = { - deploymentGroupId: "", - deploymentId: "", - type: "DeploymentCreated", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | -| `deploymentGroupId` | *string* | :heavy_check_mark: | ID of the deployment group this slot belongs to | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment that was created | -| `releaseId` | *string* | :heavy_minus_sign: | Initial release the slot was created with, if any | -| `type` | *"DeploymentCreated"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentdegraded.md b/client-sdks/platform/typescript/docs/models/datadeploymentdegraded.md deleted file mode 100644 index bc8004719..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentdegraded.md +++ /dev/null @@ -1,25 +0,0 @@ -# DataDeploymentDegraded - -## Example Usage - -```typescript -import { DataDeploymentDegraded } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentDegraded = { - deploymentId: "", - error: { - code: "", - internal: false, - message: "", - }, - type: "DeploymentDegraded", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `error` | [models.DataError2](../models/dataerror2.md) | :heavy_check_mark: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | -| `type` | *"DeploymentDegraded"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentdeleted.md b/client-sdks/platform/typescript/docs/models/datadeploymentdeleted.md deleted file mode 100644 index 572373e0f..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentdeleted.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataDeploymentDeleted - -## Example Usage - -```typescript -import { DataDeploymentDeleted } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentDeleted = { - deploymentId: "", - type: "DeploymentDeleted", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment that was deleted | -| `type` | *"DeploymentDeleted"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentdeletionrequested.md b/client-sdks/platform/typescript/docs/models/datadeploymentdeletionrequested.md deleted file mode 100644 index 138214404..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentdeletionrequested.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataDeploymentDeletionRequested - -## Example Usage - -```typescript -import { DataDeploymentDeletionRequested } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentDeletionRequested = { - deploymentId: "", - type: "DeploymentDeletionRequested", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `type` | *"DeploymentDeletionRequested"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentenvironmentupdated.md b/client-sdks/platform/typescript/docs/models/datadeploymentenvironmentupdated.md deleted file mode 100644 index 2bab8a9c8..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentenvironmentupdated.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataDeploymentEnvironmentUpdated - -## Example Usage - -```typescript -import { DataDeploymentEnvironmentUpdated } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentEnvironmentUpdated = { - changedKeys: [], - deploymentId: "", - type: "DeploymentEnvironmentUpdated", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| `actor` | *models.ActorUnion2* | :heavy_minus_sign: | N/A | -| `changedKeys` | *string*[] | :heavy_check_mark: | Names of the environment variables that changed (added, removed, or modified) | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `type` | *"DeploymentEnvironmentUpdated"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentfailed.md b/client-sdks/platform/typescript/docs/models/datadeploymentfailed.md deleted file mode 100644 index c21788f88..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentfailed.md +++ /dev/null @@ -1,28 +0,0 @@ -# DataDeploymentFailed - -## Example Usage - -```typescript -import { DataDeploymentFailed } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentFailed = { - deploymentId: "", - error: { - code: "", - internal: true, - message: "", - }, - phase: "preflights", - type: "DeploymentFailed", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `attemptedReleaseId` | *string* | :heavy_minus_sign: | ID of the release the platform was trying to deploy, if known | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `error` | [models.DataError1](../models/dataerror1.md) | :heavy_check_mark: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | -| `phase` | [models.Phase](../models/phase.md) | :heavy_check_mark: | Phase of a deployment at which a failure occurred.

Derived from the source deployment status: `preflights-failed` →
`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →
`Updating`, `delete-failed` → `Deleting`.
`refresh-failed` is modelled separately via `DeploymentDegraded`. | -| `type` | *"DeploymentFailed"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentrecovered.md b/client-sdks/platform/typescript/docs/models/datadeploymentrecovered.md deleted file mode 100644 index 6833109bc..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentrecovered.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDeploymentRecovered - -## Example Usage - -```typescript -import { DataDeploymentRecovered } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentRecovered = { - deploymentId: "", - releaseId: "", - type: "DeploymentRecovered", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `releaseId` | *string* | :heavy_check_mark: | ID of the release that is now live | -| `type` | *"DeploymentRecovered"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentredeployrequested.md b/client-sdks/platform/typescript/docs/models/datadeploymentredeployrequested.md deleted file mode 100644 index d3b46276d..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentredeployrequested.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDeploymentRedeployRequested - -## Example Usage - -```typescript -import { DataDeploymentRedeployRequested } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentRedeployRequested = { - deploymentId: "", - releaseId: "", - type: "DeploymentRedeployRequested", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `releaseId` | *string* | :heavy_check_mark: | ID of the release being redeployed | -| `type` | *"DeploymentRedeployRequested"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentreleased.md b/client-sdks/platform/typescript/docs/models/datadeploymentreleased.md deleted file mode 100644 index cf9ffeb9f..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentreleased.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataDeploymentReleased - -## Example Usage - -```typescript -import { DataDeploymentReleased } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentReleased = { - deploymentId: "", - releaseId: "", - type: "DeploymentReleased", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `previousReleaseId` | *string* | :heavy_minus_sign: | ID of the release that was previously live, if any | -| `releaseId` | *string* | :heavy_check_mark: | ID of the release that is now live | -| `type` | *"DeploymentReleased"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentreleasepinned.md b/client-sdks/platform/typescript/docs/models/datadeploymentreleasepinned.md deleted file mode 100644 index 26abd58c4..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentreleasepinned.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataDeploymentReleasePinned - -## Example Usage - -```typescript -import { DataDeploymentReleasePinned } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentReleasePinned = { - deploymentId: "", - pinnedReleaseId: "", - type: "DeploymentReleasePinned", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `pinnedReleaseId` | *string* | :heavy_check_mark: | ID of the release that is now pinned | -| `previousPinnedReleaseId` | *string* | :heavy_minus_sign: | ID of the previously pinned release, if any | -| `type` | *"DeploymentReleasePinned"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentreleaseunpinned.md b/client-sdks/platform/typescript/docs/models/datadeploymentreleaseunpinned.md deleted file mode 100644 index 5f9000bef..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentreleaseunpinned.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDeploymentReleaseUnpinned - -## Example Usage - -```typescript -import { DataDeploymentReleaseUnpinned } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentReleaseUnpinned = { - deploymentId: "", - previousPinnedReleaseId: "", - type: "DeploymentReleaseUnpinned", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `previousPinnedReleaseId` | *string* | :heavy_check_mark: | ID of the release that was previously pinned | -| `type` | *"DeploymentReleaseUnpinned"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadeploymentretryrequested.md b/client-sdks/platform/typescript/docs/models/datadeploymentretryrequested.md deleted file mode 100644 index 35c49e3d2..000000000 --- a/client-sdks/platform/typescript/docs/models/datadeploymentretryrequested.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataDeploymentRetryRequested - -## Example Usage - -```typescript -import { DataDeploymentRetryRequested } from "@alienplatform/platform-api/models"; - -let value: DataDeploymentRetryRequested = { - deploymentId: "", - type: "DeploymentRetryRequested", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | -| `actor` | *models.ActorUnion1* | :heavy_minus_sign: | N/A | -| `attemptedReleaseId` | *string* | :heavy_minus_sign: | ID of the release that the failed attempt was targeting, if known | -| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | -| `previousError` | *models.PreviousErrorUnion* | :heavy_minus_sign: | N/A | -| `type` | *"DeploymentRetryRequested"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datadownloadingalienruntime.md b/client-sdks/platform/typescript/docs/models/datadownloadingalienruntime.md deleted file mode 100644 index 5bad9710f..000000000 --- a/client-sdks/platform/typescript/docs/models/datadownloadingalienruntime.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataDownloadingAlienRuntime - -## Example Usage - -```typescript -import { DataDownloadingAlienRuntime } from "@alienplatform/platform-api/models"; - -let value: DataDownloadingAlienRuntime = { - targetTriple: "", - type: "DownloadingAlienRuntime", - url: "https://dim-jellyfish.com/", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `targetTriple` | *string* | :heavy_check_mark: | Target triple for the runtime | -| `type` | *"DownloadingAlienRuntime"* | :heavy_check_mark: | N/A | -| `url` | *string* | :heavy_check_mark: | URL being downloaded from | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataemptyingbuckets.md b/client-sdks/platform/typescript/docs/models/dataemptyingbuckets.md deleted file mode 100644 index 0c5dba194..000000000 --- a/client-sdks/platform/typescript/docs/models/dataemptyingbuckets.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataEmptyingBuckets - -## Example Usage - -```typescript -import { DataEmptyingBuckets } from "@alienplatform/platform-api/models"; - -let value: DataEmptyingBuckets = { - bucketNames: [ - "", - ], - type: "EmptyingBuckets", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | -| `bucketNames` | *string*[] | :heavy_check_mark: | Names of the S3 buckets being emptied | -| `type` | *"EmptyingBuckets"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataensuringdockerrepository.md b/client-sdks/platform/typescript/docs/models/dataensuringdockerrepository.md deleted file mode 100644 index d73067ba0..000000000 --- a/client-sdks/platform/typescript/docs/models/dataensuringdockerrepository.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataEnsuringDockerRepository - -## Example Usage - -```typescript -import { DataEnsuringDockerRepository } from "@alienplatform/platform-api/models"; - -let value: DataEnsuringDockerRepository = { - repositoryName: "", - type: "EnsuringDockerRepository", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `repositoryName` | *string* | :heavy_check_mark: | Name of the docker repository | -| `type` | *"EnsuringDockerRepository"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataerror1.md b/client-sdks/platform/typescript/docs/models/dataerror1.md deleted file mode 100644 index 7a697b901..000000000 --- a/client-sdks/platform/typescript/docs/models/dataerror1.md +++ /dev/null @@ -1,34 +0,0 @@ -# DataError1 - -Canonical error container that provides a structured way to represent errors -with rich metadata including error codes, human-readable messages, context, -and chaining capabilities for error propagation. - -This struct is designed to be both machine-readable and user-friendly, -supporting serialization for API responses and detailed error reporting -in distributed systems. - -## Example Usage - -```typescript -import { DataError1 } from "@alienplatform/platform-api/models"; - -let value: DataError1 = { - code: "", - internal: false, - message: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | -| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | -| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | -| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | -| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | -| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | -| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | -| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataerror2.md b/client-sdks/platform/typescript/docs/models/dataerror2.md deleted file mode 100644 index cd2c5cb5a..000000000 --- a/client-sdks/platform/typescript/docs/models/dataerror2.md +++ /dev/null @@ -1,34 +0,0 @@ -# DataError2 - -Canonical error container that provides a structured way to represent errors -with rich metadata including error codes, human-readable messages, context, -and chaining capabilities for error propagation. - -This struct is designed to be both machine-readable and user-friendly, -supporting serialization for API responses and detailed error reporting -in distributed systems. - -## Example Usage - -```typescript -import { DataError2 } from "@alienplatform/platform-api/models"; - -let value: DataError2 = { - code: "", - internal: false, - message: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | -| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | -| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | -| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | -| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | -| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | -| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | -| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datafinished.md b/client-sdks/platform/typescript/docs/models/datafinished.md deleted file mode 100644 index 0669e0ef8..000000000 --- a/client-sdks/platform/typescript/docs/models/datafinished.md +++ /dev/null @@ -1,17 +0,0 @@ -# DataFinished - -## Example Usage - -```typescript -import { DataFinished } from "@alienplatform/platform-api/models"; - -let value: DataFinished = { - type: "Finished", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *"Finished"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datagcp1.md b/client-sdks/platform/typescript/docs/models/datagcp1.md index ba5d59e1c..6125633c0 100644 --- a/client-sdks/platform/typescript/docs/models/datagcp1.md +++ b/client-sdks/platform/typescript/docs/models/datagcp1.md @@ -57,6 +57,7 @@ let value: DataGcp1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [models.ResourceHeartbeatStatus14](../models/resourceheartbeatstatus14.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"gcp"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"gcp"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/datageneratingcloudformationtemplate.md b/client-sdks/platform/typescript/docs/models/datageneratingcloudformationtemplate.md deleted file mode 100644 index 13e9bd0e6..000000000 --- a/client-sdks/platform/typescript/docs/models/datageneratingcloudformationtemplate.md +++ /dev/null @@ -1,17 +0,0 @@ -# DataGeneratingCloudFormationTemplate - -## Example Usage - -```typescript -import { DataGeneratingCloudFormationTemplate } from "@alienplatform/platform-api/models"; - -let value: DataGeneratingCloudFormationTemplate = { - type: "GeneratingCloudFormationTemplate", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | -| `type` | *"GeneratingCloudFormationTemplate"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datageneratingtemplate.md b/client-sdks/platform/typescript/docs/models/datageneratingtemplate.md deleted file mode 100644 index e83d11e19..000000000 --- a/client-sdks/platform/typescript/docs/models/datageneratingtemplate.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataGeneratingTemplate - -## Example Usage - -```typescript -import { DataGeneratingTemplate } from "@alienplatform/platform-api/models"; - -let value: DataGeneratingTemplate = { - platform: "", - type: "GeneratingTemplate", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `platform` | *string* | :heavy_check_mark: | Platform for which the template is being generated | -| `type` | *"GeneratingTemplate"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datahorizonplatform.md b/client-sdks/platform/typescript/docs/models/datahorizonplatform.md index ea5b52c30..8de3e4a4f 100644 --- a/client-sdks/platform/typescript/docs/models/datahorizonplatform.md +++ b/client-sdks/platform/typescript/docs/models/datahorizonplatform.md @@ -39,9 +39,11 @@ let value: DataHorizonPlatform = { | `cpu` | *models.CpuUnion3* | :heavy_minus_sign: | N/A | | `events` | [models.SyncReconcileRequestEvent3](../models/syncreconcilerequestevent3.md)[] | :heavy_check_mark: | N/A | | `image` | *string* | :heavy_minus_sign: | N/A | +| `latestUpdateTimestamp` | *string* | :heavy_minus_sign: | N/A | | `memory` | *models.MemoryUnion3* | :heavy_minus_sign: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `replicaUnits` | [models.ReplicaUnit](../models/replicaunit.md)[] | :heavy_check_mark: | N/A | | `replicas` | [models.Replicas2](../models/replicas2.md) | :heavy_check_mark: | N/A | | `schedulingMode` | [models.SchedulingMode](../models/schedulingmode.md) | :heavy_check_mark: | N/A | | `status` | [models.ResourceHeartbeatStatus10](../models/resourceheartbeatstatus10.md) | :heavy_check_mark: | N/A | -| `backend` | *"horizonPlatform"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"horizonPlatform"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/dataimportingstackstatefromcloudformation.md b/client-sdks/platform/typescript/docs/models/dataimportingstackstatefromcloudformation.md deleted file mode 100644 index 8320b3128..000000000 --- a/client-sdks/platform/typescript/docs/models/dataimportingstackstatefromcloudformation.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataImportingStackStateFromCloudFormation - -## Example Usage - -```typescript -import { DataImportingStackStateFromCloudFormation } from "@alienplatform/platform-api/models"; - -let value: DataImportingStackStateFromCloudFormation = { - cfnStackName: "", - type: "ImportingStackStateFromCloudFormation", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | -| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | -| `type` | *"ImportingStackStateFromCloudFormation"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataloadingconfiguration.md b/client-sdks/platform/typescript/docs/models/dataloadingconfiguration.md deleted file mode 100644 index 5cb5148ee..000000000 --- a/client-sdks/platform/typescript/docs/models/dataloadingconfiguration.md +++ /dev/null @@ -1,17 +0,0 @@ -# DataLoadingConfiguration - -## Example Usage - -```typescript -import { DataLoadingConfiguration } from "@alienplatform/platform-api/models"; - -let value: DataLoadingConfiguration = { - type: "LoadingConfiguration", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------ | ------------------------ | ------------------------ | ------------------------ | -| `type` | *"LoadingConfiguration"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datamachines1.md b/client-sdks/platform/typescript/docs/models/datamachines1.md index b049d4b97..b1334def5 100644 --- a/client-sdks/platform/typescript/docs/models/datamachines1.md +++ b/client-sdks/platform/typescript/docs/models/datamachines1.md @@ -56,6 +56,7 @@ let value: DataMachines1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [models.ResourceHeartbeatStatus16](../models/resourceheartbeatstatus16.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"machines"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"machines"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/datapreparingenvironment.md b/client-sdks/platform/typescript/docs/models/datapreparingenvironment.md deleted file mode 100644 index 52f8c8f3f..000000000 --- a/client-sdks/platform/typescript/docs/models/datapreparingenvironment.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataPreparingEnvironment - -## Example Usage - -```typescript -import { DataPreparingEnvironment } from "@alienplatform/platform-api/models"; - -let value: DataPreparingEnvironment = { - strategyName: "", - type: "PreparingEnvironment", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | -| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used | -| `type` | *"PreparingEnvironment"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataprovisioningagent.md b/client-sdks/platform/typescript/docs/models/dataprovisioningagent.md deleted file mode 100644 index bc8856ca5..000000000 --- a/client-sdks/platform/typescript/docs/models/dataprovisioningagent.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataProvisioningAgent - -## Example Usage - -```typescript -import { DataProvisioningAgent } from "@alienplatform/platform-api/models"; - -let value: DataProvisioningAgent = { - agentId: "", - releaseId: "", - type: "ProvisioningAgent", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | -| `agentId` | *string* | :heavy_check_mark: | ID of the agent being provisioned | -| `releaseId` | *string* | :heavy_check_mark: | ID of the release being deployed to the agent | -| `type` | *"ProvisioningAgent"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datapushingimage.md b/client-sdks/platform/typescript/docs/models/datapushingimage.md deleted file mode 100644 index 4fc451a2f..000000000 --- a/client-sdks/platform/typescript/docs/models/datapushingimage.md +++ /dev/null @@ -1,20 +0,0 @@ -# DataPushingImage - -## Example Usage - -```typescript -import { DataPushingImage } from "@alienplatform/platform-api/models"; - -let value: DataPushingImage = { - image: "https://picsum.photos/seed/bgd6b4HoNE/948/3236", - type: "PushingImage", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | -| `image` | *string* | :heavy_check_mark: | Name of the image being pushed | -| `progress` | *models.ProgressUnion* | :heavy_minus_sign: | N/A | -| `type` | *"PushingImage"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datapushingresource.md b/client-sdks/platform/typescript/docs/models/datapushingresource.md deleted file mode 100644 index 4e4a20783..000000000 --- a/client-sdks/platform/typescript/docs/models/datapushingresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataPushingResource - -## Example Usage - -```typescript -import { DataPushingResource } from "@alienplatform/platform-api/models"; - -let value: DataPushingResource = { - resourceName: "", - resourceType: "", - type: "PushingResource", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | -| `resourceName` | *string* | :heavy_check_mark: | Name of the resource being pushed | -| `resourceType` | *string* | :heavy_check_mark: | Type of the resource: "worker", "container" | -| `type` | *"PushingResource"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datapushingstack.md b/client-sdks/platform/typescript/docs/models/datapushingstack.md deleted file mode 100644 index b5da8bdc4..000000000 --- a/client-sdks/platform/typescript/docs/models/datapushingstack.md +++ /dev/null @@ -1,22 +0,0 @@ -# DataPushingStack - -## Example Usage - -```typescript -import { DataPushingStack } from "@alienplatform/platform-api/models"; - -let value: DataPushingStack = { - platform: "", - stack: "", - type: "PushingStack", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -| `destination` | *string* | :heavy_minus_sign: | Human-readable destination for pushed images | -| `platform` | *string* | :heavy_check_mark: | Target platform | -| `stack` | *string* | :heavy_check_mark: | Name of the stack being pushed | -| `type` | *"PushingStack"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datarunningpreflights.md b/client-sdks/platform/typescript/docs/models/datarunningpreflights.md deleted file mode 100644 index aa2c9ddb4..000000000 --- a/client-sdks/platform/typescript/docs/models/datarunningpreflights.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataRunningPreflights - -## Example Usage - -```typescript -import { DataRunningPreflights } from "@alienplatform/platform-api/models"; - -let value: DataRunningPreflights = { - platform: "", - stack: "", - type: "RunningPreflights", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | -| `platform` | *string* | :heavy_check_mark: | Platform being targeted | -| `stack` | *string* | :heavy_check_mark: | Name of the stack being checked | -| `type` | *"RunningPreflights"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datarunningtestworker.md b/client-sdks/platform/typescript/docs/models/datarunningtestworker.md deleted file mode 100644 index 475f34733..000000000 --- a/client-sdks/platform/typescript/docs/models/datarunningtestworker.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataRunningTestWorker - -## Example Usage - -```typescript -import { DataRunningTestWorker } from "@alienplatform/platform-api/models"; - -let value: DataRunningTestWorker = { - stackName: "", - type: "RunningTestWorker", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | -| `stackName` | *string* | :heavy_check_mark: | Name of the stack being tested | -| `type` | *"RunningTestWorker"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datasettingupplatformcontext.md b/client-sdks/platform/typescript/docs/models/datasettingupplatformcontext.md deleted file mode 100644 index 2caff3986..000000000 --- a/client-sdks/platform/typescript/docs/models/datasettingupplatformcontext.md +++ /dev/null @@ -1,19 +0,0 @@ -# DataSettingUpPlatformContext - -## Example Usage - -```typescript -import { DataSettingUpPlatformContext } from "@alienplatform/platform-api/models"; - -let value: DataSettingUpPlatformContext = { - platformName: "", - type: "SettingUpPlatformContext", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | -| `platformName` | *string* | :heavy_check_mark: | Name of the platform (e.g., "AWS", "GCP") | -| `type` | *"SettingUpPlatformContext"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/datastackstep.md b/client-sdks/platform/typescript/docs/models/datastackstep.md deleted file mode 100644 index 30d528696..000000000 --- a/client-sdks/platform/typescript/docs/models/datastackstep.md +++ /dev/null @@ -1,33 +0,0 @@ -# DataStackStep - -## Example Usage - -```typescript -import { DataStackStep } from "@alienplatform/platform-api/models"; - -let value: DataStackStep = { - nextState: { - platform: "test", - resourcePrefix: "", - resources: { - "key": { - config: { - id: "", - type: "", - }, - status: "running", - type: "", - }, - }, - }, - type: "StackStep", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `nextState` | [models.NextState](../models/nextstate.md) | :heavy_check_mark: | Represents the collective state of all resources in a stack, including platform and pending actions. | -| `suggestedDelayMs` | *number* | :heavy_minus_sign: | An suggested duration to wait before executing the next step. | -| `type` | *"StackStep"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/dataupdatingagent.md b/client-sdks/platform/typescript/docs/models/dataupdatingagent.md deleted file mode 100644 index 79e63e3fb..000000000 --- a/client-sdks/platform/typescript/docs/models/dataupdatingagent.md +++ /dev/null @@ -1,21 +0,0 @@ -# DataUpdatingAgent - -## Example Usage - -```typescript -import { DataUpdatingAgent } from "@alienplatform/platform-api/models"; - -let value: DataUpdatingAgent = { - agentId: "", - releaseId: "", - type: "UpdatingAgent", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | -| `agentId` | *string* | :heavy_check_mark: | ID of the agent being updated | -| `releaseId` | *string* | :heavy_check_mark: | ID of the new release being deployed to the agent | -| `type` | *"UpdatingAgent"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/debugsession.md b/client-sdks/platform/typescript/docs/models/debugsession.md index 2feda3719..7cc63131a 100644 --- a/client-sdks/platform/typescript/docs/models/debugsession.md +++ b/client-sdks/platform/typescript/docs/models/debugsession.md @@ -18,6 +18,14 @@ let value: DebugSession = { createdAt: new Date("2024-09-20T12:44:28.084Z"), expiresAt: new Date("2024-08-23T07:27:56.959Z"), deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + deployment: { + id: "dep_0c29fq4a2yjb7kx3smwdgxlc", + name: "", + deploymentGroup: { + id: "dg_r27ict8c7vcgsumpj90ackf7b", + name: "", + }, + }, projectId: "prj_mcytp6z3j91f7tn5ryqsfwtr", workspaceId: "ws_It13CUaGEhLLAB87simX0", }; @@ -33,9 +41,10 @@ let value: DebugSession = { | `mode` | [models.DebugSessionMode](../models/debugsessionmode.md) | :heavy_check_mark: | Deployment model: how updates are delivered to the remote environment. | | | `provider` | [models.DebugSessionProvider](../models/debugsessionprovider.md) | :heavy_minus_sign: | Represents the target cloud platform. | | | `presignedUrls` | Record | :heavy_check_mark: | N/A | | -| `error` | *any* | :heavy_minus_sign: | N/A | | +| `error` | [models.DebugSessionPublicError](../models/debugsessionpublicerror.md) | :heavy_minus_sign: | N/A | | | `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | | `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | | `deploymentId` | *string* | :heavy_check_mark: | Unique identifier for the deployment. | dep_0c29fq4a2yjb7kx3smwdgxlc | +| `deployment` | [models.DebugSessionDeployment](../models/debugsessiondeployment.md) | :heavy_check_mark: | N/A | | | `projectId` | *string* | :heavy_check_mark: | Unique identifier for the project. | prj_mcytp6z3j91f7tn5ryqsfwtr | -| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | \ No newline at end of file +| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeployment.md b/client-sdks/platform/typescript/docs/models/debugsessiondeployment.md new file mode 100644 index 000000000..7f3b93649 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeployment.md @@ -0,0 +1,26 @@ +# DebugSessionDeployment + +## Example Usage + +```typescript +import { DebugSessionDeployment } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeployment = { + id: "dep_0c29fq4a2yjb7kx3smwdgxlc", + name: "", + deploymentGroup: { + id: "dg_r27ict8c7vcgsumpj90ackf7b", + name: "", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the deployment. | dep_0c29fq4a2yjb7kx3smwdgxlc | +| `name` | *string* | :heavy_check_mark: | N/A | | +| `deploymentGroup` | [models.DebugSessionDeploymentDeploymentGroup](../models/debugsessiondeploymentdeploymentgroup.md) | :heavy_minus_sign: | N/A | | +| `platform` | [models.DebugSessionDeploymentPlatform](../models/debugsessiondeploymentplatform.md) | :heavy_minus_sign: | Represents the target cloud platform. | | +| `environmentInfo` | *models.DebugSessionDeploymentEnvironmentInfoUnion* | :heavy_minus_sign: | Platform-specific environment information | | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentdeploymentgroup.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentdeploymentgroup.md new file mode 100644 index 000000000..19af508d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentdeploymentgroup.md @@ -0,0 +1,19 @@ +# DebugSessionDeploymentDeploymentGroup + +## Example Usage + +```typescript +import { DebugSessionDeploymentDeploymentGroup } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentDeploymentGroup = { + id: "dg_r27ict8c7vcgsumpj90ackf7b", + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the deployment group. | dg_r27ict8c7vcgsumpj90ackf7b | +| `name` | *string* | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfoaws.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfoaws.md new file mode 100644 index 000000000..c60d56d50 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfoaws.md @@ -0,0 +1,23 @@ +# DebugSessionDeploymentEnvironmentInfoAws + +AWS-specific environment information + +## Example Usage + +```typescript +import { DebugSessionDeploymentEnvironmentInfoAws } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentEnvironmentInfoAws = { + accountId: "", + region: "", + platform: "aws", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `accountId` | *string* | :heavy_check_mark: | AWS account ID | +| `region` | *string* | :heavy_check_mark: | AWS region | +| `platform` | [models.DebugSessionDeploymentPlatformAws](../models/debugsessiondeploymentplatformaws.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfoazure.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfoazure.md new file mode 100644 index 000000000..7c7545f0c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfoazure.md @@ -0,0 +1,25 @@ +# DebugSessionDeploymentEnvironmentInfoAzure + +Azure-specific environment information + +## Example Usage + +```typescript +import { DebugSessionDeploymentEnvironmentInfoAzure } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentEnvironmentInfoAzure = { + location: "", + subscriptionId: "", + tenantId: "", + platform: "azure", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `location` | *string* | :heavy_check_mark: | Azure location/region | +| `subscriptionId` | *string* | :heavy_check_mark: | Azure subscription ID | +| `tenantId` | *string* | :heavy_check_mark: | Azure tenant ID | +| `platform` | [models.DebugSessionDeploymentPlatformAzure](../models/debugsessiondeploymentplatformazure.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfogcp.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfogcp.md new file mode 100644 index 000000000..8881d767a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfogcp.md @@ -0,0 +1,25 @@ +# DebugSessionDeploymentEnvironmentInfoGcp + +GCP-specific environment information + +## Example Usage + +```typescript +import { DebugSessionDeploymentEnvironmentInfoGcp } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentEnvironmentInfoGcp = { + projectId: "", + projectNumber: "", + region: "", + platform: "gcp", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `projectId` | *string* | :heavy_check_mark: | GCP project ID (e.g., "my-project") | +| `projectNumber` | *string* | :heavy_check_mark: | GCP project number (e.g., "123456789012") | +| `region` | *string* | :heavy_check_mark: | GCP region | +| `platform` | [models.DebugSessionDeploymentPlatformGcp](../models/debugsessiondeploymentplatformgcp.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfolocal.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfolocal.md new file mode 100644 index 000000000..1f6667c34 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfolocal.md @@ -0,0 +1,25 @@ +# DebugSessionDeploymentEnvironmentInfoLocal + +Local platform environment information + +## Example Usage + +```typescript +import { DebugSessionDeploymentEnvironmentInfoLocal } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentEnvironmentInfoLocal = { + arch: "", + hostname: "whimsical-offset.net", + os: "Chrome OS", + platform: "local", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `arch` | *string* | :heavy_check_mark: | Architecture (e.g., "x86_64", "aarch64") | +| `hostname` | *string* | :heavy_check_mark: | Hostname of the machine running the deployment | +| `os` | *string* | :heavy_check_mark: | Operating system (e.g., "linux", "macos", "windows") | +| `platform` | [models.DebugSessionDeploymentPlatformLocal](../models/debugsessiondeploymentplatformlocal.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfotest.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfotest.md new file mode 100644 index 000000000..16db045fd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfotest.md @@ -0,0 +1,21 @@ +# DebugSessionDeploymentEnvironmentInfoTest + +Test platform environment information (mock) + +## Example Usage + +```typescript +import { DebugSessionDeploymentEnvironmentInfoTest } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentEnvironmentInfoTest = { + testId: "", + platform: "test", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `testId` | *string* | :heavy_check_mark: | Test identifier for this environment | +| `platform` | [models.DebugSessionDeploymentPlatformTest](../models/debugsessiondeploymentplatformtest.md) | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfounion.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfounion.md new file mode 100644 index 000000000..2b522a889 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentenvironmentinfounion.md @@ -0,0 +1,64 @@ +# DebugSessionDeploymentEnvironmentInfoUnion + +Platform-specific environment information + + +## Supported Types + +### `models.DebugSessionDeploymentEnvironmentInfoAws` + +```typescript +const value: models.DebugSessionDeploymentEnvironmentInfoAws = { + accountId: "", + region: "", + platform: "aws", +}; +``` + +### `models.DebugSessionDeploymentEnvironmentInfoGcp` + +```typescript +const value: models.DebugSessionDeploymentEnvironmentInfoGcp = { + projectId: "", + projectNumber: "", + region: "", + platform: "gcp", +}; +``` + +### `models.DebugSessionDeploymentEnvironmentInfoAzure` + +```typescript +const value: models.DebugSessionDeploymentEnvironmentInfoAzure = { + location: "", + subscriptionId: "", + tenantId: "", + platform: "azure", +}; +``` + +### `models.DebugSessionDeploymentEnvironmentInfoLocal` + +```typescript +const value: models.DebugSessionDeploymentEnvironmentInfoLocal = { + arch: "", + hostname: "whimsical-offset.net", + os: "Chrome OS", + platform: "local", +}; +``` + +### `models.DebugSessionDeploymentEnvironmentInfoTest` + +```typescript +const value: models.DebugSessionDeploymentEnvironmentInfoTest = { + testId: "", + platform: "test", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatform.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatform.md new file mode 100644 index 000000000..f67e21526 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatform.md @@ -0,0 +1,17 @@ +# DebugSessionDeploymentPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DebugSessionDeploymentPlatform } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentPlatform = "kubernetes"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformaws.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformaws.md new file mode 100644 index 000000000..8fb69d9d8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformaws.md @@ -0,0 +1,15 @@ +# DebugSessionDeploymentPlatformAws + +## Example Usage + +```typescript +import { DebugSessionDeploymentPlatformAws } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentPlatformAws = "aws"; +``` + +## Values + +```typescript +"aws" +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformazure.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformazure.md new file mode 100644 index 000000000..34d35ac63 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformazure.md @@ -0,0 +1,15 @@ +# DebugSessionDeploymentPlatformAzure + +## Example Usage + +```typescript +import { DebugSessionDeploymentPlatformAzure } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentPlatformAzure = "azure"; +``` + +## Values + +```typescript +"azure" +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformgcp.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformgcp.md new file mode 100644 index 000000000..72ea85d55 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformgcp.md @@ -0,0 +1,15 @@ +# DebugSessionDeploymentPlatformGcp + +## Example Usage + +```typescript +import { DebugSessionDeploymentPlatformGcp } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentPlatformGcp = "gcp"; +``` + +## Values + +```typescript +"gcp" +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformlocal.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformlocal.md new file mode 100644 index 000000000..5acd9d420 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformlocal.md @@ -0,0 +1,15 @@ +# DebugSessionDeploymentPlatformLocal + +## Example Usage + +```typescript +import { DebugSessionDeploymentPlatformLocal } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentPlatformLocal = "local"; +``` + +## Values + +```typescript +"local" +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformtest.md b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformtest.md new file mode 100644 index 000000000..c385731a2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessiondeploymentplatformtest.md @@ -0,0 +1,15 @@ +# DebugSessionDeploymentPlatformTest + +## Example Usage + +```typescript +import { DebugSessionDeploymentPlatformTest } from "@alienplatform/platform-api/models"; + +let value: DebugSessionDeploymentPlatformTest = "test"; +``` + +## Values + +```typescript +"test" +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionlistresponse.md b/client-sdks/platform/typescript/docs/models/debugsessionlistresponse.md index 3a7dfb77f..3c93d8429 100644 --- a/client-sdks/platform/typescript/docs/models/debugsessionlistresponse.md +++ b/client-sdks/platform/typescript/docs/models/debugsessionlistresponse.md @@ -17,6 +17,14 @@ let value: DebugSessionListResponse = { createdAt: new Date("2025-10-15T12:13:12.531Z"), expiresAt: new Date("2026-01-18T14:49:27.434Z"), deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + deployment: { + id: "dep_0c29fq4a2yjb7kx3smwdgxlc", + name: "", + deploymentGroup: { + id: "dg_r27ict8c7vcgsumpj90ackf7b", + name: "", + }, + }, projectId: "prj_mcytp6z3j91f7tn5ryqsfwtr", workspaceId: "ws_It13CUaGEhLLAB87simX0", }, @@ -30,4 +38,4 @@ let value: DebugSessionListResponse = { | Field | Type | Required | Description | | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | | `items` | [models.DebugSession](../models/debugsession.md)[] | :heavy_check_mark: | Items in this page | -| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | \ No newline at end of file +| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerror.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerror.md new file mode 100644 index 000000000..d9419e4ec --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerror.md @@ -0,0 +1,27 @@ +# DebugSessionPublicError + +## Example Usage + +```typescript +import { DebugSessionPublicError } from "@alienplatform/platform-api/models"; + +let value: DebugSessionPublicError = { + code: "", + internal: false, + message: "", + retryable: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `code` | *string* | :heavy_check_mark: | N/A | +| `context` | *models.DebugSessionPublicErrorContext* | :heavy_minus_sign: | N/A | +| `hint` | *string* | :heavy_minus_sign: | N/A | +| `httpStatusCode` | *number* | :heavy_minus_sign: | N/A | +| `internal` | *boolean* | :heavy_check_mark: | N/A | +| `message` | *string* | :heavy_check_mark: | N/A | +| `retryable` | *boolean* | :heavy_check_mark: | N/A | +| `source` | [models.DebugSessionPublicErrorCause](../models/debugsessionpublicerrorcause.md) | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcause.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcause.md new file mode 100644 index 000000000..a5f53884d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcause.md @@ -0,0 +1,26 @@ +# DebugSessionPublicErrorCause + +## Example Usage + +```typescript +import { DebugSessionPublicErrorCause } from "@alienplatform/platform-api/models"; + +let value: DebugSessionPublicErrorCause = { + code: "", + internal: false, + message: "", + retryable: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | +| `code` | *string* | :heavy_check_mark: | N/A | +| `context` | *models.DebugSessionPublicErrorContext* | :heavy_minus_sign: | N/A | +| `hint` | *string* | :heavy_minus_sign: | N/A | +| `httpStatusCode` | *number* | :heavy_minus_sign: | N/A | +| `internal` | *boolean* | :heavy_check_mark: | N/A | +| `message` | *string* | :heavy_check_mark: | N/A | +| `retryable` | *boolean* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext.md new file mode 100644 index 000000000..ad13c2818 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext.md @@ -0,0 +1,36 @@ +# DebugSessionPublicErrorContext + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` + +### `models.DebugSessionPublicErrorContext3[]` + +```typescript +const value: models.DebugSessionPublicErrorContext3[] = [ + true, +]; +``` + +### `{ [k: string]: models.DebugSessionPublicErrorContext6 }` + +```typescript +const value: { [k: string]: models.DebugSessionPublicErrorContext6 } = {}; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext1.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext1.md new file mode 100644 index 000000000..2073bdaf4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext1.md @@ -0,0 +1,22 @@ +# DebugSessionPublicErrorContext1 + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext2.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext2.md new file mode 100644 index 000000000..853fe2298 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext2.md @@ -0,0 +1,22 @@ +# DebugSessionPublicErrorContext2 + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext3.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext3.md new file mode 100644 index 000000000..3c5976163 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext3.md @@ -0,0 +1,36 @@ +# DebugSessionPublicErrorContext3 + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` + +### `models.DebugSessionPublicErrorContext1[]` + +```typescript +const value: models.DebugSessionPublicErrorContext1[] = []; +``` + +### `{ [k: string]: models.DebugSessionPublicErrorContext2 }` + +```typescript +const value: { [k: string]: models.DebugSessionPublicErrorContext2 } = { + "key": true, +}; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext4.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext4.md new file mode 100644 index 000000000..bd5666297 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext4.md @@ -0,0 +1,22 @@ +# DebugSessionPublicErrorContext4 + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext5.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext5.md new file mode 100644 index 000000000..8d5fa4232 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext5.md @@ -0,0 +1,22 @@ +# DebugSessionPublicErrorContext5 + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` diff --git a/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext6.md b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext6.md new file mode 100644 index 000000000..0300e2653 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/debugsessionpublicerrorcontext6.md @@ -0,0 +1,36 @@ +# DebugSessionPublicErrorContext6 + + +## Supported Types + +### `string` + +```typescript +const value: string = ""; +``` + +### `number` + +```typescript +const value: number = 1284.03; +``` + +### `boolean` + +```typescript +const value: boolean = true; +``` + +### `models.DebugSessionPublicErrorContext4[]` + +```typescript +const value: models.DebugSessionPublicErrorContext4[] = [ + false, +]; +``` + +### `{ [k: string]: models.DebugSessionPublicErrorContext5 }` + +```typescript +const value: { [k: string]: models.DebugSessionPublicErrorContext5 } = {}; +``` diff --git a/client-sdks/platform/typescript/docs/models/deliverystatus.md b/client-sdks/platform/typescript/docs/models/deliverystatus.md new file mode 100644 index 000000000..5570c7ebc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deliverystatus.md @@ -0,0 +1,15 @@ +# DeliveryStatus + +## Example Usage + +```typescript +import { DeliveryStatus } from "@alienplatform/platform-api/models"; + +let value: DeliveryStatus = "pending"; +``` + +## Values + +```typescript +"pending" | "sent" | "failed" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdefaultboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdefaultboolean.md deleted file mode 100644 index a3b912e0a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdefaultboolean.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDefaultBoolean - -## Example Usage - -```typescript -import { DeploymentDefaultBoolean } from "@alienplatform/platform-api/models"; - -let value: DeploymentDefaultBoolean = { - type: "boolean", - value: true, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `type` | [models.DeploymentTypeBoolean](../models/deploymenttypeboolean.md) | :heavy_check_mark: | N/A | -| `value` | *boolean* | :heavy_check_mark: | Boolean default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdefaultnumber.md b/client-sdks/platform/typescript/docs/models/deploymentdefaultnumber.md deleted file mode 100644 index 558b97aa8..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdefaultnumber.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDefaultNumber - -## Example Usage - -```typescript -import { DeploymentDefaultNumber } from "@alienplatform/platform-api/models"; - -let value: DeploymentDefaultNumber = { - type: "number", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | -| `type` | [models.DeploymentTypeNumber](../models/deploymenttypenumber.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | Number default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdefaultstring.md b/client-sdks/platform/typescript/docs/models/deploymentdefaultstring.md deleted file mode 100644 index 517a60fde..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdefaultstring.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDefaultString - -## Example Usage - -```typescript -import { DeploymentDefaultString } from "@alienplatform/platform-api/models"; - -let value: DeploymentDefaultString = { - type: "string", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | -| `type` | [models.DeploymentTypeString](../models/deploymenttypestring.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | String default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdefaultstringlist.md deleted file mode 100644 index 54075985b..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdefaultstringlist.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDefaultStringList - -## Example Usage - -```typescript -import { DeploymentDefaultStringList } from "@alienplatform/platform-api/models"; - -let value: DeploymentDefaultStringList = { - type: "stringList", - value: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `type` | [models.DeploymentTypeStringList](../models/deploymenttypestringlist.md) | :heavy_check_mark: | N/A | -| `value` | *string*[] | :heavy_check_mark: | String list default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdefaultunion.md b/client-sdks/platform/typescript/docs/models/deploymentdefaultunion.md deleted file mode 100644 index d98673fad..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdefaultunion.md +++ /dev/null @@ -1,47 +0,0 @@ -# DeploymentDefaultUnion - - -## Supported Types - -### `models.DeploymentDefaultString` - -```typescript -const value: models.DeploymentDefaultString = { - type: "string", - value: "", -}; -``` - -### `models.DeploymentDefaultNumber` - -```typescript -const value: models.DeploymentDefaultNumber = { - type: "number", - value: "", -}; -``` - -### `models.DeploymentDefaultBoolean` - -```typescript -const value: models.DeploymentDefaultBoolean = { - type: "boolean", - value: true, -}; -``` - -### `models.DeploymentDefaultStringList` - -```typescript -const value: models.DeploymentDefaultStringList = { - type: "stringList", - value: [], -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponse.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponse.md index 3edeebf1f..9bec81d1f 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponse.md +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponse.md @@ -38,7 +38,7 @@ let value: DeploymentDetailResponse = { commitAuthorLogin: "johndoe", commitAuthorAvatarUrl: "https://github.com/johndoe.png", }, - createdAt: new Date("2024-06-27T06:57:01.451Z"), + createdAt: new Date("2024-04-17T05:47:54.417Z"), }, deploymentGroup: { id: "dg_r27ict8c7vcgsumpj90ackf7b", @@ -94,4 +94,4 @@ let value: DeploymentDetailResponse = { | `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | | `release` | [models.DeploymentReleaseInfo](../models/deploymentreleaseinfo.md) | :heavy_minus_sign: | N/A | | | `deploymentGroup` | [models.DeploymentGroupInfo](../models/deploymentgroupinfo.md) | :heavy_minus_sign: | N/A | | -| `project` | [models.DeploymentProjectInfo](../models/deploymentprojectinfo.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `project` | [models.DeploymentProjectInfo](../models/deploymentprojectinfo.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultboolean.md deleted file mode 100644 index a0c8820c9..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultboolean.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseDefaultBoolean - -## Example Usage - -```typescript -import { DeploymentDetailResponseDefaultBoolean } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseDefaultBoolean = { - type: "boolean", - value: false, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `type` | [models.DeploymentDetailResponseTypeBoolean](../models/deploymentdetailresponsetypeboolean.md) | :heavy_check_mark: | N/A | -| `value` | *boolean* | :heavy_check_mark: | Boolean default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultnumber.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultnumber.md deleted file mode 100644 index 331a30ace..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultnumber.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseDefaultNumber - -## Example Usage - -```typescript -import { DeploymentDetailResponseDefaultNumber } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseDefaultNumber = { - type: "number", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `type` | [models.DeploymentDetailResponseTypeNumber](../models/deploymentdetailresponsetypenumber.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | Number default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultstring.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultstring.md deleted file mode 100644 index 8f4e09e3c..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultstring.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseDefaultString - -## Example Usage - -```typescript -import { DeploymentDetailResponseDefaultString } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseDefaultString = { - type: "string", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `type` | [models.DeploymentDetailResponseTypeString](../models/deploymentdetailresponsetypestring.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | String default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultstringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultstringlist.md deleted file mode 100644 index d3192be77..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultstringlist.md +++ /dev/null @@ -1,22 +0,0 @@ -# DeploymentDetailResponseDefaultStringList - -## Example Usage - -```typescript -import { DeploymentDetailResponseDefaultStringList } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseDefaultStringList = { - type: "stringList", - value: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `type` | [models.DeploymentDetailResponseTypeStringList](../models/deploymentdetailresponsetypestringlist.md) | :heavy_check_mark: | N/A | -| `value` | *string*[] | :heavy_check_mark: | String list default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultunion.md deleted file mode 100644 index 0f8867ec8..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsedefaultunion.md +++ /dev/null @@ -1,50 +0,0 @@ -# DeploymentDetailResponseDefaultUnion - - -## Supported Types - -### `models.DeploymentDetailResponseDefaultString` - -```typescript -const value: models.DeploymentDetailResponseDefaultString = { - type: "string", - value: "", -}; -``` - -### `models.DeploymentDetailResponseDefaultNumber` - -```typescript -const value: models.DeploymentDetailResponseDefaultNumber = { - type: "number", - value: "", -}; -``` - -### `models.DeploymentDetailResponseDefaultBoolean` - -```typescript -const value: models.DeploymentDetailResponseDefaultBoolean = { - type: "boolean", - value: false, -}; -``` - -### `models.DeploymentDetailResponseDefaultStringList` - -```typescript -const value: models.DeploymentDetailResponseDefaultStringList = { - type: "stringList", - value: [ - "", - "", - ], -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseenv.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseenv.md deleted file mode 100644 index a4630e177..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseenv.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseEnv - -How a resolved stack input is injected into runtime environment variables. - -## Example Usage - -```typescript -import { DeploymentDetailResponseEnv } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseEnv = { - name: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| `name` | *string* | :heavy_check_mark: | Environment variable name. | -| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | -| `type` | *models.DeploymentDetailResponseTypeUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextend.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextend.md deleted file mode 100644 index c20cbbb03..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextend.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseExtend - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtend } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtend = { - description: "how meanwhile amid permafrost obnoxiously geez stake", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.DeploymentDetailResponseExtendPlatforms](../models/deploymentdetailresponseextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendaw.md deleted file mode 100644 index 695f927a7..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentDetailResponseExtendAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAw } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `binding` | [models.DeploymentDetailResponseExtendAwBinding](../models/deploymentdetailresponseextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.DeploymentDetailResponseExtendEffect](../models/deploymentdetailresponseextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.DeploymentDetailResponseExtendAwGrant](../models/deploymentdetailresponseextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawbinding.md deleted file mode 100644 index fb65dafa1..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseExtendAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAwBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentDetailResponseExtendAwResource](../models/deploymentdetailresponseextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.DeploymentDetailResponseExtendAwStack](../models/deploymentdetailresponseextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawgrant.md deleted file mode 100644 index c321c4296..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseExtendAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAwGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawresource.md deleted file mode 100644 index ac2278fe3..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawresource.md +++ /dev/null @@ -1,22 +0,0 @@ -# DeploymentDetailResponseExtendAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAwResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAwResource = { - resources: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawstack.md deleted file mode 100644 index d707ad918..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendawstack.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentDetailResponseExtendAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAwStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAwStack = { - resources: [ - "", - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazure.md deleted file mode 100644 index c9e06f22d..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseExtendAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAzure } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `binding` | [models.DeploymentDetailResponseExtendAzureBinding](../models/deploymentdetailresponseextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentDetailResponseExtendAzureGrant](../models/deploymentdetailresponseextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazurebinding.md deleted file mode 100644 index 9d78cc1ce..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseExtendAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAzureBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentDetailResponseExtendAzureResource](../models/deploymentdetailresponseextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.DeploymentDetailResponseExtendAzureStack](../models/deploymentdetailresponseextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazuregrant.md deleted file mode 100644 index 9c7b01cab..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseExtendAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAzureGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazureresource.md deleted file mode 100644 index 8c7f98216..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseExtendAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAzureResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazurestack.md deleted file mode 100644 index 99cb94a37..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseExtendAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendAzureStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendconditionresource.md deleted file mode 100644 index 97c875268..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseExtendConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendConditionResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendconditionstack.md deleted file mode 100644 index 2a688ff7c..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseExtendConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendConditionStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendeffect.md deleted file mode 100644 index e146007c3..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseExtendEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendEffect } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendEffect = "Allow"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcp.md deleted file mode 100644 index 50fd114d1..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseExtendGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendGcp } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentDetailResponseExtendGcpBinding](../models/deploymentdetailresponseextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentDetailResponseExtendGcpGrant](../models/deploymentdetailresponseextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpbinding.md deleted file mode 100644 index 565702231..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseExtendGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendGcpBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentDetailResponseExtendGcpResource](../models/deploymentdetailresponseextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.DeploymentDetailResponseExtendGcpStack](../models/deploymentdetailresponseextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpgrant.md deleted file mode 100644 index 289010cbb..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseExtendGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendGcpGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpresource.md deleted file mode 100644 index 8cad3f412..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseExtendGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendGcpResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | -| `condition` | *models.DeploymentDetailResponseExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpstack.md deleted file mode 100644 index 6c15305bf..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendgcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseExtendGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendGcpStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | -| `condition` | *models.DeploymentDetailResponseExtendStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendplatforms.md deleted file mode 100644 index a0473f156..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseExtendPlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { DeploymentDetailResponseExtendPlatforms } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseExtendPlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `aws` | [models.DeploymentDetailResponseExtendAw](../models/deploymentdetailresponseextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.DeploymentDetailResponseExtendAzure](../models/deploymentdetailresponseextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.DeploymentDetailResponseExtendGcp](../models/deploymentdetailresponseextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendresourceconditionunion.md deleted file mode 100644 index 0b5e52163..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseExtendResourceConditionUnion - - -## Supported Types - -### `models.DeploymentDetailResponseExtendConditionResource` - -```typescript -const value: models.DeploymentDetailResponseExtendConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendstackconditionunion.md deleted file mode 100644 index 58883f707..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendstackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseExtendStackConditionUnion - - -## Supported Types - -### `models.DeploymentDetailResponseExtendConditionStack` - -```typescript -const value: models.DeploymentDetailResponseExtendConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendunion.md deleted file mode 100644 index fff71bf17..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseextendunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseExtendUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.DeploymentDetailResponseExtend` - -```typescript -const value: models.DeploymentDetailResponseExtend = { - description: "how meanwhile amid permafrost obnoxiously geez stake", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomains1.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomains1.md new file mode 100644 index 000000000..4b64b13cd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomains1.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponseFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { DeploymentDetailResponseFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponseFailureDomains1 = { + spread: 545321, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomains2.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomains2.md new file mode 100644 index 000000000..964951c6e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomains2.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponseFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { DeploymentDetailResponseFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponseFailureDomains2 = { + spread: 159411, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomainsunion1.md new file mode 100644 index 000000000..1ac203136 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomainsunion1.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponseFailureDomainsUnion1 + + +## Supported Types + +### `models.DeploymentDetailResponseFailureDomains1` + +```typescript +const value: models.DeploymentDetailResponseFailureDomains1 = { + spread: 545321, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomainsunion2.md new file mode 100644 index 000000000..f37d66fd4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsefailuredomainsunion2.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponseFailureDomainsUnion2 + + +## Supported Types + +### `models.DeploymentDetailResponseFailureDomains2` + +```typescript +const value: models.DeploymentDetailResponseFailureDomains2 = { + spread: 159411, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseinput.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseinput.md deleted file mode 100644 index 014b0801e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseinput.md +++ /dev/null @@ -1,34 +0,0 @@ -# DeploymentDetailResponseInput - -Stack input definition serialized into a release stack. - -## Example Usage - -```typescript -import { DeploymentDetailResponseInput } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseInput = { - description: "psst throughout remorseful hm like ah alongside", - id: "", - kind: "secret", - label: "", - providedBy: [], - required: true, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `default` | *models.DeploymentDetailResponseDefaultUnion* | :heavy_minus_sign: | N/A | -| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | -| `env` | [models.DeploymentDetailResponseEnv](../models/deploymentdetailresponseenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | -| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | -| `kind` | [models.DeploymentDetailResponseKind](../models/deploymentdetailresponsekind.md) | :heavy_check_mark: | Primitive stack input kind. | -| `label` | *string* | :heavy_check_mark: | Human-facing field label. | -| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | -| `platforms` | [models.DeploymentDetailResponsePreparedStackPlatform](../models/deploymentdetailresponsepreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | -| `providedBy` | [models.DeploymentDetailResponseProvidedBy](../models/deploymentdetailresponseprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | -| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | -| `validation` | *models.DeploymentDetailResponseValidationUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsekind.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsekind.md deleted file mode 100644 index e183d12aa..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsekind.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseKind - -Primitive stack input kind. - -## Example Usage - -```typescript -import { DeploymentDetailResponseKind } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseKind = "enum"; -``` - -## Values - -```typescript -"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagement1.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagement1.md deleted file mode 100644 index 7c2345b1b..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagement1.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseManagement1 - -## Example Usage - -```typescript -import { DeploymentDetailResponseManagement1 } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseManagement1 = { - extend: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagement2.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagement2.md deleted file mode 100644 index ea22791df..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagement2.md +++ /dev/null @@ -1,32 +0,0 @@ -# DeploymentDetailResponseManagement2 - -## Example Usage - -```typescript -import { DeploymentDetailResponseManagement2 } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseManagement2 = { - override: { - "key": [ - { - description: "besides meaningfully genuine", - id: "", - platforms: {}, - }, - ], - "key1": [ - { - description: "besides meaningfully genuine", - id: "", - platforms: {}, - }, - ], - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagementenum.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagementenum.md deleted file mode 100644 index a9c932982..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagementenum.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentDetailResponseManagementEnum - -## Example Usage - -```typescript -import { DeploymentDetailResponseManagementEnum } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseManagementEnum = "auto"; -``` - -## Values - -```typescript -"auto" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagementunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagementunion.md deleted file mode 100644 index 0bcce7187..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsemanagementunion.md +++ /dev/null @@ -1,44 +0,0 @@ -# DeploymentDetailResponseManagementUnion - -Management permissions configuration for stack management access - - -## Supported Types - -### `models.DeploymentDetailResponseManagement1` - -```typescript -const value: models.DeploymentDetailResponseManagement1 = { - extend: {}, -}; -``` - -### `models.DeploymentDetailResponseManagement2` - -```typescript -const value: models.DeploymentDetailResponseManagement2 = { - override: { - "key": [ - { - description: "besides meaningfully genuine", - id: "", - platforms: {}, - }, - ], - "key1": [ - { - description: "besides meaningfully genuine", - id: "", - platforms: {}, - }, - ], - }, -}; -``` - -### `models.DeploymentDetailResponseManagementEnum` - -```typescript -const value: models.DeploymentDetailResponseManagementEnum = "auto"; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverride.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverride.md deleted file mode 100644 index 071f7765e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverride.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseOverride - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverride } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverride = { - description: "skeletal swear indelible than french boo tune-up yahoo yum", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.DeploymentDetailResponseOverridePlatforms](../models/deploymentdetailresponseoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideaw.md deleted file mode 100644 index 700073994..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentDetailResponseOverrideAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAw } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentDetailResponseOverrideAwBinding](../models/deploymentdetailresponseoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.DeploymentDetailResponseOverrideEffect](../models/deploymentdetailresponseoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.DeploymentDetailResponseOverrideAwGrant](../models/deploymentdetailresponseoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawbinding.md deleted file mode 100644 index 04e0f75dc..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseOverrideAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAwBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `resource` | [models.DeploymentDetailResponseOverrideAwResource](../models/deploymentdetailresponseoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.DeploymentDetailResponseOverrideAwStack](../models/deploymentdetailresponseoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawgrant.md deleted file mode 100644 index d6bfdf585..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseOverrideAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAwGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawresource.md deleted file mode 100644 index 819c0afc7..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseOverrideAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAwResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAwResource = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawstack.md deleted file mode 100644 index 2afbef6a8..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideawstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseOverrideAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAwStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAwStack = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazure.md deleted file mode 100644 index d754d5097..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseOverrideAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAzure } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentDetailResponseOverrideAzureBinding](../models/deploymentdetailresponseoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentDetailResponseOverrideAzureGrant](../models/deploymentdetailresponseoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazurebinding.md deleted file mode 100644 index 9563fad45..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseOverrideAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAzureBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | -| `resource` | [models.DeploymentDetailResponseOverrideAzureResource](../models/deploymentdetailresponseoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.DeploymentDetailResponseOverrideAzureStack](../models/deploymentdetailresponseoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazuregrant.md deleted file mode 100644 index 83846b0aa..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseOverrideAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAzureGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazureresource.md deleted file mode 100644 index 0c30c43b0..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseOverrideAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAzureResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazurestack.md deleted file mode 100644 index 7be375f03..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseOverrideAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideAzureStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideconditionresource.md deleted file mode 100644 index 7685ba33d..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseOverrideConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideConditionResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideconditionstack.md deleted file mode 100644 index d44f96a54..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseOverrideConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideConditionStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideeffect.md deleted file mode 100644 index bedb8d3a8..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseOverrideEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideEffect } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideEffect = "Deny"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcp.md deleted file mode 100644 index 7e7e20fc3..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseOverrideGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideGcp } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `binding` | [models.DeploymentDetailResponseOverrideGcpBinding](../models/deploymentdetailresponseoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentDetailResponseOverrideGcpGrant](../models/deploymentdetailresponseoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpbinding.md deleted file mode 100644 index f96ea2254..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseOverrideGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideGcpBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentDetailResponseOverrideGcpResource](../models/deploymentdetailresponseoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.DeploymentDetailResponseOverrideGcpStack](../models/deploymentdetailresponseoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpgrant.md deleted file mode 100644 index ef844b188..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseOverrideGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideGcpGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpresource.md deleted file mode 100644 index 741e62b03..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseOverrideGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideGcpResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | -| `condition` | *models.DeploymentDetailResponseOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpstack.md deleted file mode 100644 index fb8511e55..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseOverrideGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverrideGcpStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverrideGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| `condition` | *models.DeploymentDetailResponseOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideplatforms.md deleted file mode 100644 index ccae40393..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseOverridePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { DeploymentDetailResponseOverridePlatforms } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseOverridePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `aws` | [models.DeploymentDetailResponseOverrideAw](../models/deploymentdetailresponseoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.DeploymentDetailResponseOverrideAzure](../models/deploymentdetailresponseoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.DeploymentDetailResponseOverrideGcp](../models/deploymentdetailresponseoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideresourceconditionunion.md deleted file mode 100644 index dc23b0b3f..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseOverrideResourceConditionUnion - - -## Supported Types - -### `models.DeploymentDetailResponseOverrideConditionResource` - -```typescript -const value: models.DeploymentDetailResponseOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridestackconditionunion.md deleted file mode 100644 index 0b39721ed..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverridestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseOverrideStackConditionUnion - - -## Supported Types - -### `models.DeploymentDetailResponseOverrideConditionStack` - -```typescript -const value: models.DeploymentDetailResponseOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideunion.md deleted file mode 100644 index 9f2a38d0e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseoverrideunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseOverrideUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.DeploymentDetailResponseOverride` - -```typescript -const value: models.DeploymentDetailResponseOverride = { - description: "skeletal swear indelible than french boo tune-up yahoo yum", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstack.md new file mode 100644 index 000000000..b0317246b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstack.md @@ -0,0 +1,33 @@ +# DeploymentDetailResponsePendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.DeploymentDetailResponsePendingPreparedStackInput](../models/deploymentdetailresponsependingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.DeploymentDetailResponsePendingPreparedStackPermissions](../models/deploymentdetailresponsependingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.DeploymentDetailResponsePendingPreparedStackSupportedPlatform](../models/deploymentdetailresponsependingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackconfig.md new file mode 100644 index 000000000..f51192a99 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..94b3e85ff --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentDetailResponsePendingPreparedStackTypeBoolean](../models/deploymentdetailresponsependingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..9e3f593dd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.DeploymentDetailResponsePendingPreparedStackTypeNumber](../models/deploymentdetailresponsependingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultstring.md new file mode 100644 index 000000000..b6f31cf02 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.DeploymentDetailResponsePendingPreparedStackTypeString](../models/deploymentdetailresponsependingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..32617eb15 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultstringlist.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentDetailResponsePendingPreparedStackTypeStringList](../models/deploymentdetailresponsependingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultunion.md new file mode 100644 index 000000000..7ba429e42 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdefaultunion.md @@ -0,0 +1,53 @@ +# DeploymentDetailResponsePendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackDefaultString` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackDefaultString = + { + type: "string", + value: "", + }; +``` + +### `models.DeploymentDetailResponsePendingPreparedStackDefaultNumber` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackDefaultNumber = + { + type: "number", + value: "", + }; +``` + +### `models.DeploymentDetailResponsePendingPreparedStackDefaultBoolean` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackDefaultBoolean = + { + type: "boolean", + value: true, + }; +``` + +### `models.DeploymentDetailResponsePendingPreparedStackDefaultStringList` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdependency.md new file mode 100644 index 000000000..e9d6bef50 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackenv.md new file mode 100644 index 000000000..71365fa66 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackenv.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.DeploymentDetailResponsePendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextend.md new file mode 100644 index 000000000..097b4cded --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextend.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtend = { + description: "mortally because spectacles per a from of mothball", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentDetailResponsePendingPreparedStackExtendPlatforms](../models/deploymentdetailresponsependingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendaw.md new file mode 100644 index 000000000..22d5a4152 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackExtendAwBinding](../models/deploymentdetailresponsependingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentDetailResponsePendingPreparedStackExtendEffect](../models/deploymentdetailresponsependingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackExtendAwGrant](../models/deploymentdetailresponsependingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawbinding.md new file mode 100644 index 000000000..bc21ee2d8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackExtendAwResource](../models/deploymentdetailresponsependingpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackExtendAwStack](../models/deploymentdetailresponsependingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawgrant.md new file mode 100644 index 000000000..c27fab51d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawresource.md new file mode 100644 index 000000000..acdd86d26 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawresource.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawstack.md new file mode 100644 index 000000000..25bab7abf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendawstack.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazure.md new file mode 100644 index 000000000..c2ddbedf3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackExtendAzureBinding](../models/deploymentdetailresponsependingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackExtendAzureGrant](../models/deploymentdetailresponsependingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..58d9ca6fd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackExtendAzureResource](../models/deploymentdetailresponsependingpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackExtendAzureStack](../models/deploymentdetailresponsependingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..da4bf72e4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazureresource.md new file mode 100644 index 000000000..0b1274f7a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazurestack.md new file mode 100644 index 000000000..82f2825f6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendconditionresource.md new file mode 100644 index 000000000..4b5a99b88 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendconditionresource.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendConditionResource = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendconditionstack.md new file mode 100644 index 000000000..0a176fa78 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendeffect.md new file mode 100644 index 000000000..c37952c1d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcp.md new file mode 100644 index 000000000..3dbf575f9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackExtendGcpBinding](../models/deploymentdetailresponsependingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackExtendGcpGrant](../models/deploymentdetailresponsependingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..f831b4b58 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackExtendGcpResource](../models/deploymentdetailresponsependingpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackExtendGcpStack](../models/deploymentdetailresponsependingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..2b591b1a4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpresource.md new file mode 100644 index 000000000..748ab4fcd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..17bef0519 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `condition` | *models.DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendplatforms.md new file mode 100644 index 000000000..ccd0aa6eb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentDetailResponsePendingPreparedStackExtendAw](../models/deploymentdetailresponsependingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentDetailResponsePendingPreparedStackExtendAzure](../models/deploymentdetailresponsependingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentDetailResponsePendingPreparedStackExtendGcp](../models/deploymentdetailresponsependingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..d15ce0e4b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendresourceconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackExtendConditionResource` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackExtendConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..20348dcdd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendstackconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackExtendConditionStack` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackExtendConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendunion.md new file mode 100644 index 000000000..94343de0d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackExtend` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackExtend = { + description: "mortally because spectacles per a from of mothball", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackinput.md new file mode 100644 index 000000000..9334eab70 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackinput.md @@ -0,0 +1,34 @@ +# DeploymentDetailResponsePendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackInput = { + description: "behold when lest but compete long saturate subtract", + id: "", + kind: "enum", + label: "", + providedBy: [], + required: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `default` | *models.DeploymentDetailResponsePendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.DeploymentDetailResponsePendingPreparedStackEnv](../models/deploymentdetailresponsependingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.DeploymentDetailResponsePendingPreparedStackKind](../models/deploymentdetailresponsependingpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.DeploymentDetailResponsePendingPreparedStackPlatform](../models/deploymentdetailresponsependingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.DeploymentDetailResponsePendingPreparedStackProvidedBy](../models/deploymentdetailresponsependingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.DeploymentDetailResponsePendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackkind.md new file mode 100644 index 000000000..58a64d998 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackkind.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackKind = "integer"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacklifecycle.md new file mode 100644 index 000000000..34d497733 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacklifecycle.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackLifecycle = "live"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagement1.md new file mode 100644 index 000000000..e6decca14 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagement1.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackManagement1 = { + extend: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagement2.md new file mode 100644 index 000000000..03de5808a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagement2.md @@ -0,0 +1,31 @@ +# DeploymentDetailResponsePendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackManagement2 = { + override: { + "key": [ + { + description: "hippodrome around after pfft primary afore creamy", + id: "", + platforms: {}, + }, + ], + "key1": [ + "", + ], + "key2": [ + "", + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagementenum.md new file mode 100644 index 000000000..895693c28 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagementunion.md new file mode 100644 index 000000000..1a9cce4e4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackmanagementunion.md @@ -0,0 +1,43 @@ +# DeploymentDetailResponsePendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackManagement1` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackManagement1 = { + extend: {}, +}; +``` + +### `models.DeploymentDetailResponsePendingPreparedStackManagement2` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackManagement2 = { + override: { + "key": [ + { + description: "hippodrome around after pfft primary afore creamy", + id: "", + platforms: {}, + }, + ], + "key1": [ + "", + ], + "key2": [ + "", + ], + }, +}; +``` + +### `models.DeploymentDetailResponsePendingPreparedStackManagementEnum` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackManagementEnum = + "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverride.md new file mode 100644 index 000000000..bdebf480c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverride.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverride = { + description: "under joyously unaccountably stunning", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentDetailResponsePendingPreparedStackOverridePlatforms](../models/deploymentdetailresponsependingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideaw.md new file mode 100644 index 000000000..e4c5147d4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAwBinding](../models/deploymentdetailresponsependingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentDetailResponsePendingPreparedStackOverrideEffect](../models/deploymentdetailresponsependingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAwGrant](../models/deploymentdetailresponsependingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..78a2c545c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAwResource](../models/deploymentdetailresponsependingpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAwStack](../models/deploymentdetailresponsependingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..5b32bc369 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawresource.md new file mode 100644 index 000000000..0fddba034 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawresource.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..57c2d0437 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideawstack.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazure.md new file mode 100644 index 000000000..60862b583 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding](../models/deploymentdetailresponsependingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant](../models/deploymentdetailresponsependingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..8aa82fbb0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazurebinding.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAzureResource](../models/deploymentdetailresponsependingpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAzureStack](../models/deploymentdetailresponsependingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..6c27a9ee5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..378bcc08f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..88be758cd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..9fc91e604 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionresource.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: + DeploymentDetailResponsePendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..1519d3bc7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideconditionstack.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideConditionStack = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..29555d673 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcp.md new file mode 100644 index 000000000..43fff5093 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding](../models/deploymentdetailresponsependingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant](../models/deploymentdetailresponsependingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..925235386 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackOverrideGcpResource](../models/deploymentdetailresponsependingpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackOverrideGcpStack](../models/deploymentdetailresponsependingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..a033e3853 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..343f2523c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..fe2925239 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..098004f76 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAw](../models/deploymentdetailresponsependingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentDetailResponsePendingPreparedStackOverrideAzure](../models/deploymentdetailresponsependingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentDetailResponsePendingPreparedStackOverrideGcp](../models/deploymentdetailresponsependingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..0340aead1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackOverrideConditionResource` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackOverrideConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..a5b41b741 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverridestackconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackOverrideConditionStack` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideunion.md new file mode 100644 index 000000000..77f9f2253 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackoverrideunion.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackOverride` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackOverride = { + description: "under joyously unaccountably stunning", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackpermissions.md new file mode 100644 index 000000000..50168d369 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackpermissions.md @@ -0,0 +1,27 @@ +# DeploymentDetailResponsePendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackPermissions = { + profiles: { + "key": {}, + "key1": { + "key": [ + "", + ], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.DeploymentDetailResponsePendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackplatform.md new file mode 100644 index 000000000..d23d587f9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackplatform.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackPlatform = "local"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofile.md new file mode 100644 index 000000000..5824e8ed6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofile.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfile = { + description: "suckle heartfelt barring stall partially brr", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentDetailResponsePendingPreparedStackProfilePlatforms](../models/deploymentdetailresponsependingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileaw.md new file mode 100644 index 000000000..fa6dcc619 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackProfileAwBinding](../models/deploymentdetailresponsependingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentDetailResponsePendingPreparedStackProfileEffect](../models/deploymentdetailresponsependingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackProfileAwGrant](../models/deploymentdetailresponsependingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..e3c12e8e0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackProfileAwResource](../models/deploymentdetailresponsependingpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackProfileAwStack](../models/deploymentdetailresponsependingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..9573759fb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawresource.md new file mode 100644 index 000000000..1b87aecda --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawresource.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawstack.md new file mode 100644 index 000000000..57cfc504b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileawstack.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazure.md new file mode 100644 index 000000000..1623dcc7f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackProfileAzureBinding](../models/deploymentdetailresponsependingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackProfileAzureGrant](../models/deploymentdetailresponsependingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..3045e9dc6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackProfileAzureResource](../models/deploymentdetailresponsependingpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackProfileAzureStack](../models/deploymentdetailresponsependingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..7e98cdad6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazureresource.md new file mode 100644 index 000000000..b014c23b8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..6705c8399 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..038cf4697 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileconditionresource.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: + DeploymentDetailResponsePendingPreparedStackProfileConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..a0dbc6e89 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileeffect.md new file mode 100644 index 000000000..c5fc7fca4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcp.md new file mode 100644 index 000000000..dc8e026ff --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePendingPreparedStackProfileGcpBinding](../models/deploymentdetailresponsependingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePendingPreparedStackProfileGcpGrant](../models/deploymentdetailresponsependingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..e5d5dab59 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePendingPreparedStackProfileGcpResource](../models/deploymentdetailresponsependingpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePendingPreparedStackProfileGcpStack](../models/deploymentdetailresponsependingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..88a31c4d0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..00e4a7239 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..50858d28c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..8608ef9e9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.DeploymentDetailResponsePendingPreparedStackProfileAw](../models/deploymentdetailresponsependingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentDetailResponsePendingPreparedStackProfileAzure](../models/deploymentdetailresponsependingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentDetailResponsePendingPreparedStackProfileGcp](../models/deploymentdetailresponsependingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..9db310d5c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackProfileConditionResource` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackProfileConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..e32d3dd05 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofilestackconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackProfileConditionStack` + +```typescript +const value: + models.DeploymentDetailResponsePendingPreparedStackProfileConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileunion.md new file mode 100644 index 000000000..f3f744cbe --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackProfile` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackProfile = { + description: "suckle heartfelt barring stall partially brr", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprovidedby.md new file mode 100644 index 000000000..025e473af --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackProvidedBy = "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackresources.md new file mode 100644 index 000000000..f4703be92 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackresources.md @@ -0,0 +1,26 @@ +# DeploymentDetailResponsePendingPreparedStackResources + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.DeploymentDetailResponsePendingPreparedStackConfig](../models/deploymentdetailresponsependingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.DeploymentDetailResponsePendingPreparedStackDependency](../models/deploymentdetailresponsependingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.DeploymentDetailResponsePendingPreparedStackLifecycle](../models/deploymentdetailresponsependingpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..30c963708 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacksupportedplatform.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackSupportedPlatform = + "kubernetes"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeboolean.md new file mode 100644 index 000000000..33df9ccdf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..d3fc3ab88 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackTypeEnvEnum = "secret"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypenumber.md new file mode 100644 index 000000000..fd896d55b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypestring.md new file mode 100644 index 000000000..d02dfb405 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePendingPreparedStackTypeString + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypestringlist.md new file mode 100644 index 000000000..1d77ff0cc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypestringlist.md @@ -0,0 +1,16 @@ +# DeploymentDetailResponsePendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackTypeStringList = + "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeunion.md new file mode 100644 index 000000000..887334570 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstacktypeunion.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePendingPreparedStackTypeUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackTypeEnvEnum` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackTypeEnvEnum = + "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackunion.md new file mode 100644 index 000000000..48e15dd80 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackunion.md @@ -0,0 +1,28 @@ +# DeploymentDetailResponsePendingPreparedStackUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStack` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", + }, + }, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackvalidation.md new file mode 100644 index 000000000..ade8d5385 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# DeploymentDetailResponsePendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackvalidationunion.md new file mode 100644 index 000000000..b4b267fba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsependingpreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# DeploymentDetailResponsePendingPreparedStackValidationUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePendingPreparedStackValidation` + +```typescript +const value: models.DeploymentDetailResponsePendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepermissions.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepermissions.md deleted file mode 100644 index 095bee0cf..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepermissions.md +++ /dev/null @@ -1,29 +0,0 @@ -# DeploymentDetailResponsePermissions - -Combined permissions configuration that contains both profiles and management - -## Example Usage - -```typescript -import { DeploymentDetailResponsePermissions } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponsePermissions = { - profiles: { - "key": { - "key": [ - "", - ], - "key1": [], - "key2": [], - }, - "key1": {}, - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `management` | *models.DeploymentDetailResponseManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | -| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsautoscale.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsautoscale.md index c4488832f..088c19fe1 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsautoscale.md @@ -14,9 +14,10 @@ let value: DeploymentDetailResponsePoolsAutoscale = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `max` | *number* | :heavy_check_mark: | Maximum machine count. | -| `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `failureDomains` | *models.DeploymentDetailResponseFailureDomainsUnion2* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `max` | *number* | :heavy_check_mark: | Maximum machine count. | +| `min` | *number* | :heavy_check_mark: | Minimum machine count. | +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsfixed.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsfixed.md index f978ffc1a..3360a3fc6 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepoolsfixed.md @@ -13,8 +13,9 @@ let value: DeploymentDetailResponsePoolsFixed = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `failureDomains` | *models.DeploymentDetailResponseFailureDomainsUnion1* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstack.md index 7dddc9ca8..800db2d13 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstack.md +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstack.md @@ -24,10 +24,10 @@ let value: DeploymentDetailResponsePreparedStack = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | -| `inputs` | [models.DeploymentDetailResponseInput](../models/deploymentdetailresponseinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | -| `permissions` | [models.DeploymentDetailResponsePermissions](../models/deploymentdetailresponsepermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | -| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | -| `supportedPlatforms` | [models.DeploymentDetailResponseSupportedPlatform](../models/deploymentdetailresponsesupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.DeploymentDetailResponsePreparedStackInput](../models/deploymentdetailresponsepreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.DeploymentDetailResponsePreparedStackPermissions](../models/deploymentdetailresponsepreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.DeploymentDetailResponsePreparedStackSupportedPlatform](../models/deploymentdetailresponsepreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultboolean.md new file mode 100644 index 000000000..f61a22fb2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.DeploymentDetailResponsePreparedStackTypeBoolean](../models/deploymentdetailresponsepreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultnumber.md new file mode 100644 index 000000000..2d854266c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackDefaultNumber + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentDetailResponsePreparedStackTypeNumber](../models/deploymentdetailresponsepreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultstring.md new file mode 100644 index 000000000..14ee8c4ca --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackDefaultString + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentDetailResponsePreparedStackTypeString](../models/deploymentdetailresponsepreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultstringlist.md new file mode 100644 index 000000000..dc60c8aa8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultstringlist.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackDefaultStringList + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackDefaultStringList = { + type: "stringList", + value: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.DeploymentDetailResponsePreparedStackTypeStringList](../models/deploymentdetailresponsepreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultunion.md new file mode 100644 index 000000000..61e6f6cea --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackdefaultunion.md @@ -0,0 +1,46 @@ +# DeploymentDetailResponsePreparedStackDefaultUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackDefaultString` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.DeploymentDetailResponsePreparedStackDefaultNumber` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.DeploymentDetailResponsePreparedStackDefaultBoolean` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +### `models.DeploymentDetailResponsePreparedStackDefaultStringList` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackDefaultStringList = { + type: "stringList", + value: [], +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackenv.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackenv.md new file mode 100644 index 000000000..e4fc540c6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackenv.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.DeploymentDetailResponsePreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextend.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextend.md new file mode 100644 index 000000000..c56b2c40d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextend.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtend = { + description: "aside freight sideboard that gosh quizzically", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentDetailResponsePreparedStackExtendPlatforms](../models/deploymentdetailresponsepreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendaw.md new file mode 100644 index 000000000..d26d4c2a5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendaw.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePreparedStackExtendAwBinding](../models/deploymentdetailresponsepreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentDetailResponsePreparedStackExtendEffect](../models/deploymentdetailresponsepreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentDetailResponsePreparedStackExtendAwGrant](../models/deploymentdetailresponsepreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawbinding.md new file mode 100644 index 000000000..d0b896fd8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePreparedStackExtendAwResource](../models/deploymentdetailresponsepreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackExtendAwStack](../models/deploymentdetailresponsepreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawgrant.md new file mode 100644 index 000000000..83c934bac --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawresource.md new file mode 100644 index 000000000..41e5ca4b0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawresource.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawstack.md new file mode 100644 index 000000000..a04de0e97 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendawstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazure.md new file mode 100644 index 000000000..8828b81e2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazure.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePreparedStackExtendAzureBinding](../models/deploymentdetailresponsepreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePreparedStackExtendAzureGrant](../models/deploymentdetailresponsepreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazurebinding.md new file mode 100644 index 000000000..9f51421f2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePreparedStackExtendAzureResource](../models/deploymentdetailresponsepreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackExtendAzureStack](../models/deploymentdetailresponsepreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazuregrant.md new file mode 100644 index 000000000..93b56db1d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazureresource.md new file mode 100644 index 000000000..ca2ecfcb8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazurestack.md new file mode 100644 index 000000000..57e43f807 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendconditionresource.md new file mode 100644 index 000000000..f78d61350 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendconditionstack.md new file mode 100644 index 000000000..b770a48b8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendeffect.md new file mode 100644 index 000000000..e599a61fe --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcp.md new file mode 100644 index 000000000..f9327b65e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePreparedStackExtendGcpBinding](../models/deploymentdetailresponsepreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePreparedStackExtendGcpGrant](../models/deploymentdetailresponsepreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpbinding.md new file mode 100644 index 000000000..08b1df0af --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentDetailResponsePreparedStackExtendGcpResource](../models/deploymentdetailresponsepreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackExtendGcpStack](../models/deploymentdetailresponsepreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpgrant.md new file mode 100644 index 000000000..5e10cbf9f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpresource.md new file mode 100644 index 000000000..863b3e50a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpstack.md new file mode 100644 index 000000000..c8332df40 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendplatforms.md new file mode 100644 index 000000000..72f6003b2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentDetailResponsePreparedStackExtendAw](../models/deploymentdetailresponsepreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentDetailResponsePreparedStackExtendAzure](../models/deploymentdetailresponsepreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentDetailResponsePreparedStackExtendGcp](../models/deploymentdetailresponsepreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..c36a13173 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendresourceconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackExtendConditionResource` + +```typescript +const value: + models.DeploymentDetailResponsePreparedStackExtendConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..36975913f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendstackconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackExtendConditionStack` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackExtendConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendunion.md new file mode 100644 index 000000000..ce8e21374 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackextendunion.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackExtend` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackExtend = { + description: "aside freight sideboard that gosh quizzically", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackinput.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackinput.md new file mode 100644 index 000000000..dc217156e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackinput.md @@ -0,0 +1,37 @@ +# DeploymentDetailResponsePreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackInput = { + description: + "excepting anti when except pfft um knowledgeably vice saloon times", + id: "", + kind: "string", + label: "", + providedBy: [ + "deployer", + ], + required: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `default` | *models.DeploymentDetailResponsePreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.DeploymentDetailResponsePreparedStackEnv](../models/deploymentdetailresponsepreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.DeploymentDetailResponsePreparedStackKind](../models/deploymentdetailresponsepreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.DeploymentDetailResponsePreparedStackPlatform](../models/deploymentdetailresponsepreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.DeploymentDetailResponsePreparedStackProvidedBy](../models/deploymentdetailresponsepreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.DeploymentDetailResponsePreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackkind.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackkind.md new file mode 100644 index 000000000..94eca6818 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackkind.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackKind = "string"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagement1.md new file mode 100644 index 000000000..f884fd50f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagement1.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackManagement1 + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackManagement1 = { + extend: { + "key": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagement2.md new file mode 100644 index 000000000..58552f13d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagement2.md @@ -0,0 +1,29 @@ +# DeploymentDetailResponsePreparedStackManagement2 + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackManagement2 = { + override: { + "key": [ + "", + ], + "key1": [], + "key2": [ + { + description: "beneath self-confidence abaft gah whether", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagementenum.md new file mode 100644 index 000000000..b3477cf91 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePreparedStackManagementEnum + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagementunion.md new file mode 100644 index 000000000..cc9241afc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackmanagementunion.md @@ -0,0 +1,43 @@ +# DeploymentDetailResponsePreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackManagement1` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackManagement1 = { + extend: { + "key": [], + }, +}; +``` + +### `models.DeploymentDetailResponsePreparedStackManagement2` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackManagement2 = { + override: { + "key": [ + "", + ], + "key1": [], + "key2": [ + { + description: "beneath self-confidence abaft gah whether", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +### `models.DeploymentDetailResponsePreparedStackManagementEnum` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackManagementEnum = + "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverride.md new file mode 100644 index 000000000..82593ded2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverride.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverride = { + description: "yearningly swanling that ghost but barring", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentDetailResponsePreparedStackOverridePlatforms](../models/deploymentdetailresponsepreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideaw.md new file mode 100644 index 000000000..ca5c4d541 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentDetailResponsePreparedStackOverrideAwBinding](../models/deploymentdetailresponsepreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentDetailResponsePreparedStackOverrideEffect](../models/deploymentdetailresponsepreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentDetailResponsePreparedStackOverrideAwGrant](../models/deploymentdetailresponsepreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawbinding.md new file mode 100644 index 000000000..da79e5724 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePreparedStackOverrideAwResource](../models/deploymentdetailresponsepreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackOverrideAwStack](../models/deploymentdetailresponsepreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawgrant.md new file mode 100644 index 000000000..cc6c362a4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawresource.md new file mode 100644 index 000000000..29bed63ac --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawresource.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawstack.md new file mode 100644 index 000000000..a2347c6b0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideawstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazure.md new file mode 100644 index 000000000..672137b4d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentDetailResponsePreparedStackOverrideAzureBinding](../models/deploymentdetailresponsepreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePreparedStackOverrideAzureGrant](../models/deploymentdetailresponsepreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..7d1c2d6ae --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePreparedStackOverrideAzureResource](../models/deploymentdetailresponsepreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackOverrideAzureStack](../models/deploymentdetailresponsepreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..61ae6b40b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazureresource.md new file mode 100644 index 000000000..1ab966ca7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazurestack.md new file mode 100644 index 000000000..b401a19eb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..9f8e8c5d8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..c0a720146 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideeffect.md new file mode 100644 index 000000000..ee709696b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcp.md new file mode 100644 index 000000000..b271da02f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePreparedStackOverrideGcpBinding](../models/deploymentdetailresponsepreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePreparedStackOverrideGcpGrant](../models/deploymentdetailresponsepreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..4ec1205d2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePreparedStackOverrideGcpResource](../models/deploymentdetailresponsepreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackOverrideGcpStack](../models/deploymentdetailresponsepreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..c33b9da62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpresource.md new file mode 100644 index 000000000..939be5a8e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpstack.md new file mode 100644 index 000000000..cbf52c1ef --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideplatforms.md new file mode 100644 index 000000000..6effea2a1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.DeploymentDetailResponsePreparedStackOverrideAw](../models/deploymentdetailresponsepreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentDetailResponsePreparedStackOverrideAzure](../models/deploymentdetailresponsepreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentDetailResponsePreparedStackOverrideGcp](../models/deploymentdetailresponsepreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..a12ce4879 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackOverrideConditionResource` + +```typescript +const value: + models.DeploymentDetailResponsePreparedStackOverrideConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..cdf03278b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverridestackconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackOverrideConditionStack` + +```typescript +const value: + models.DeploymentDetailResponsePreparedStackOverrideConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideunion.md new file mode 100644 index 000000000..7a6048828 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackoverrideunion.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackOverride` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackOverride = { + description: "yearningly swanling that ghost but barring", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackpermissions.md new file mode 100644 index 000000000..b8eb4ad51 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackpermissions.md @@ -0,0 +1,40 @@ +# DeploymentDetailResponsePreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackPermissions = { + profiles: { + "key": { + "key": [], + "key1": [ + "", + ], + "key2": [], + }, + "key1": { + "key": [ + { + description: "ignorant pecan indeed orderly", + id: "", + platforms: {}, + }, + ], + "key1": [ + "", + ], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.DeploymentDetailResponsePreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofile.md new file mode 100644 index 000000000..9e76f9ff5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofile.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfile = { + description: "mmm carefully slump outlaw", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentDetailResponsePreparedStackProfilePlatforms](../models/deploymentdetailresponsepreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileaw.md new file mode 100644 index 000000000..1110d49d2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePreparedStackProfileAwBinding](../models/deploymentdetailresponsepreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentDetailResponsePreparedStackProfileEffect](../models/deploymentdetailresponsepreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentDetailResponsePreparedStackProfileAwGrant](../models/deploymentdetailresponsepreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawbinding.md new file mode 100644 index 000000000..6f767d96b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentDetailResponsePreparedStackProfileAwResource](../models/deploymentdetailresponsepreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackProfileAwStack](../models/deploymentdetailresponsepreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawgrant.md new file mode 100644 index 000000000..0bbf1b11a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawresource.md new file mode 100644 index 000000000..3c7711680 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawresource.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponsePreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawstack.md new file mode 100644 index 000000000..50019c7a8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileawstack.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazure.md new file mode 100644 index 000000000..8b3f96aa1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentDetailResponsePreparedStackProfileAzureBinding](../models/deploymentdetailresponsepreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePreparedStackProfileAzureGrant](../models/deploymentdetailresponsepreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazurebinding.md new file mode 100644 index 000000000..c1a85b80d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentDetailResponsePreparedStackProfileAzureResource](../models/deploymentdetailresponsepreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackProfileAzureStack](../models/deploymentdetailresponsepreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazuregrant.md new file mode 100644 index 000000000..d14f0881d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazureresource.md new file mode 100644 index 000000000..8aa8ebe03 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazurestack.md new file mode 100644 index 000000000..e5e15d2f6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileconditionresource.md new file mode 100644 index 000000000..ec41bda4f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileconditionstack.md new file mode 100644 index 000000000..a333a4e34 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileeffect.md new file mode 100644 index 000000000..2cd6fdb37 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcp.md new file mode 100644 index 000000000..f5f220bb0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# DeploymentDetailResponsePreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentDetailResponsePreparedStackProfileGcpBinding](../models/deploymentdetailresponsepreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentDetailResponsePreparedStackProfileGcpGrant](../models/deploymentdetailresponsepreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..18a24e7b7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentDetailResponsePreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentDetailResponsePreparedStackProfileGcpResource](../models/deploymentdetailresponsepreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentDetailResponsePreparedStackProfileGcpStack](../models/deploymentdetailresponsepreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..4619cc6d0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentDetailResponsePreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpresource.md new file mode 100644 index 000000000..554fc7353 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `condition` | *models.DeploymentDetailResponsePreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpstack.md new file mode 100644 index 000000000..49f93f9c0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `condition` | *models.DeploymentDetailResponsePreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileplatforms.md new file mode 100644 index 000000000..38e884129 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# DeploymentDetailResponsePreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentDetailResponsePreparedStackProfileAw](../models/deploymentdetailresponsepreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentDetailResponsePreparedStackProfileAzure](../models/deploymentdetailresponsepreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentDetailResponsePreparedStackProfileGcp](../models/deploymentdetailresponsepreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..7a15d114d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileresourceconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackProfileConditionResource` + +```typescript +const value: + models.DeploymentDetailResponsePreparedStackProfileConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..fb21b7e7e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofilestackconditionunion.md @@ -0,0 +1,20 @@ +# DeploymentDetailResponsePreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackProfileConditionStack` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackProfileConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileunion.md new file mode 100644 index 000000000..75175ae18 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# DeploymentDetailResponsePreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackProfile` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackProfile = { + description: "mmm carefully slump outlaw", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprovidedby.md new file mode 100644 index 000000000..223bcb9a3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackProvidedBy = "deployer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackresources.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackresources.md index d935c4eb3..9a2be98b7 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackresources.md +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackresources.md @@ -22,9 +22,10 @@ let value: DeploymentDetailResponsePreparedStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.DeploymentDetailResponsePreparedStackConfig](../models/deploymentdetailresponsepreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.DeploymentDetailResponsePreparedStackDependency](../models/deploymentdetailresponsepreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.DeploymentDetailResponsePreparedStackLifecycle](../models/deploymentdetailresponsepreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.DeploymentDetailResponsePreparedStackConfig](../models/deploymentdetailresponsepreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.DeploymentDetailResponsePreparedStackDependency](../models/deploymentdetailresponsepreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.DeploymentDetailResponsePreparedStackLifecycle](../models/deploymentdetailresponsepreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacksupportedplatform.md new file mode 100644 index 000000000..b60bc22a3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackSupportedPlatform = "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeboolean.md new file mode 100644 index 000000000..7f50503d3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePreparedStackTypeBoolean + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeenvenum.md new file mode 100644 index 000000000..e75258f9d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# DeploymentDetailResponsePreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackTypeEnvEnum = "secret"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypenumber.md new file mode 100644 index 000000000..5693af9f8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePreparedStackTypeNumber + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypestring.md new file mode 100644 index 000000000..3f21fac21 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypestring.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePreparedStackTypeString + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypestringlist.md new file mode 100644 index 000000000..803ad2c32 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypestringlist.md @@ -0,0 +1,15 @@ +# DeploymentDetailResponsePreparedStackTypeStringList + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackTypeStringList = "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeunion.md new file mode 100644 index 000000000..990e74d5f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstacktypeunion.md @@ -0,0 +1,16 @@ +# DeploymentDetailResponsePreparedStackTypeUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackTypeEnvEnum` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackTypeEnvEnum = "secret"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackvalidation.md new file mode 100644 index 000000000..14f6a589f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackvalidation.md @@ -0,0 +1,25 @@ +# DeploymentDetailResponsePreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { DeploymentDetailResponsePreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponsePreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackvalidationunion.md new file mode 100644 index 000000000..143531ec0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsepreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# DeploymentDetailResponsePreparedStackValidationUnion + + +## Supported Types + +### `models.DeploymentDetailResponsePreparedStackValidation` + +```typescript +const value: models.DeploymentDetailResponsePreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofile.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofile.md deleted file mode 100644 index 8c37cb01e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofile.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseProfile - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfile } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfile = { - description: "extroverted awesome incidentally clueless alongside", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.DeploymentDetailResponseProfilePlatforms](../models/deploymentdetailresponseprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileaw.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileaw.md deleted file mode 100644 index 066acad94..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentDetailResponseProfileAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAw } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentDetailResponseProfileAwBinding](../models/deploymentdetailresponseprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.DeploymentDetailResponseProfileEffect](../models/deploymentdetailresponseprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.DeploymentDetailResponseProfileAwGrant](../models/deploymentdetailresponseprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawbinding.md deleted file mode 100644 index c51fbe38e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseProfileAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAwBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentDetailResponseProfileAwResource](../models/deploymentdetailresponseprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.DeploymentDetailResponseProfileAwStack](../models/deploymentdetailresponseprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawgrant.md deleted file mode 100644 index 3e45a26dd..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseProfileAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAwGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawresource.md deleted file mode 100644 index cf04e1ff8..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseProfileAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAwResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAwResource = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawstack.md deleted file mode 100644 index ccaaa7b84..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileawstack.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentDetailResponseProfileAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAwStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAwStack = { - resources: [ - "", - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazure.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazure.md deleted file mode 100644 index 35c0493b6..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseProfileAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAzure } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentDetailResponseProfileAzureBinding](../models/deploymentdetailresponseprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentDetailResponseProfileAzureGrant](../models/deploymentdetailresponseprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazurebinding.md deleted file mode 100644 index 1b0b2d979..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseProfileAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAzureBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentDetailResponseProfileAzureResource](../models/deploymentdetailresponseprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.DeploymentDetailResponseProfileAzureStack](../models/deploymentdetailresponseprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazuregrant.md deleted file mode 100644 index 6352c4086..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseProfileAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAzureGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazureresource.md deleted file mode 100644 index b11e6f90a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseProfileAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAzureResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazurestack.md deleted file mode 100644 index e472bfc12..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseProfileAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileAzureStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileconditionresource.md deleted file mode 100644 index eb2c19d96..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseProfileConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileConditionResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileconditionstack.md deleted file mode 100644 index c73efb071..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseProfileConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileConditionStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileeffect.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileeffect.md deleted file mode 100644 index d62e20544..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseProfileEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileEffect } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileEffect = "Deny"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcp.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcp.md deleted file mode 100644 index d3266af62..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseProfileGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileGcp } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentDetailResponseProfileGcpBinding](../models/deploymentdetailresponseprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentDetailResponseProfileGcpGrant](../models/deploymentdetailresponseprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpbinding.md deleted file mode 100644 index 654cad612..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentDetailResponseProfileGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileGcpBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `resource` | [models.DeploymentDetailResponseProfileGcpResource](../models/deploymentdetailresponseprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.DeploymentDetailResponseProfileGcpStack](../models/deploymentdetailresponseprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpgrant.md deleted file mode 100644 index 038fa473a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentDetailResponseProfileGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileGcpGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpresource.md deleted file mode 100644 index c2a1a9828..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseProfileGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileGcpResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `condition` | *models.DeploymentDetailResponseProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpstack.md deleted file mode 100644 index 94f57e2f9..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseProfileGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfileGcpStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfileGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | -| `condition` | *models.DeploymentDetailResponseProfileStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileplatforms.md deleted file mode 100644 index 770e06314..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentDetailResponseProfilePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { DeploymentDetailResponseProfilePlatforms } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProfilePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `aws` | [models.DeploymentDetailResponseProfileAw](../models/deploymentdetailresponseprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.DeploymentDetailResponseProfileAzure](../models/deploymentdetailresponseprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.DeploymentDetailResponseProfileGcp](../models/deploymentdetailresponseprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileresourceconditionunion.md deleted file mode 100644 index 1bf66e67c..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseProfileResourceConditionUnion - - -## Supported Types - -### `models.DeploymentDetailResponseProfileConditionResource` - -```typescript -const value: models.DeploymentDetailResponseProfileConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilestackconditionunion.md deleted file mode 100644 index 2c37ebe62..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofilestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentDetailResponseProfileStackConditionUnion - - -## Supported Types - -### `models.DeploymentDetailResponseProfileConditionStack` - -```typescript -const value: models.DeploymentDetailResponseProfileConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileunion.md deleted file mode 100644 index ca58c6f76..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprofileunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentDetailResponseProfileUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.DeploymentDetailResponseProfile` - -```typescript -const value: models.DeploymentDetailResponseProfile = { - description: "extroverted awesome incidentally clueless alongside", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprovidedby.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprovidedby.md deleted file mode 100644 index 7c64aad2e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseprovidedby.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseProvidedBy - -Who can provide a stack input value. - -## Example Usage - -```typescript -import { DeploymentDetailResponseProvidedBy } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseProvidedBy = "developer"; -``` - -## Values - -```typescript -"developer" | "deployer" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseruntimemetadata.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseruntimemetadata.md index 347272d4b..e21a6b2b6 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponseruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponseruntimemetadata.md @@ -16,5 +16,7 @@ let value: DeploymentDetailResponseRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.DeploymentDetailResponsePendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.DeploymentDetailResponsePreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.DeploymentDetailResponseSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesetupupdateauthorization.md new file mode 100644 index 000000000..793f89144 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesetupupdateauthorization.md @@ -0,0 +1,31 @@ +# DeploymentDetailResponseSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { DeploymentDetailResponseSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: DeploymentDetailResponseSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 846995, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesetupupdateauthorizationunion.md new file mode 100644 index 000000000..e6917a151 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# DeploymentDetailResponseSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.DeploymentDetailResponseSetupUpdateAuthorization` + +```typescript +const value: models.DeploymentDetailResponseSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 846995, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesupportedplatform.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesupportedplatform.md deleted file mode 100644 index 2fe773d2d..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsesupportedplatform.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseSupportedPlatform - -Represents the target cloud platform. - -## Example Usage - -```typescript -import { DeploymentDetailResponseSupportedPlatform } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseSupportedPlatform = "machines"; -``` - -## Values - -```typescript -"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeboolean.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeboolean.md deleted file mode 100644 index 46ac28ffe..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeboolean.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentDetailResponseTypeBoolean - -## Example Usage - -```typescript -import { DeploymentDetailResponseTypeBoolean } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseTypeBoolean = "boolean"; -``` - -## Values - -```typescript -"boolean" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeenvenum.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeenvenum.md deleted file mode 100644 index 53138fbd9..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeenvenum.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseTypeEnvEnum - -Environment variable handling for a stack input mapping. - -## Example Usage - -```typescript -import { DeploymentDetailResponseTypeEnvEnum } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseTypeEnvEnum = "secret"; -``` - -## Values - -```typescript -"plain" | "secret" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypenumber.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypenumber.md deleted file mode 100644 index 0d5ae771f..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypenumber.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentDetailResponseTypeNumber - -## Example Usage - -```typescript -import { DeploymentDetailResponseTypeNumber } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseTypeNumber = "number"; -``` - -## Values - -```typescript -"number" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypestring.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypestring.md deleted file mode 100644 index 4524a579a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypestring.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentDetailResponseTypeString - -## Example Usage - -```typescript -import { DeploymentDetailResponseTypeString } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseTypeString = "string"; -``` - -## Values - -```typescript -"string" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypestringlist.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypestringlist.md deleted file mode 100644 index 76ddbc00f..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypestringlist.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentDetailResponseTypeStringList - -## Example Usage - -```typescript -import { DeploymentDetailResponseTypeStringList } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseTypeStringList = "stringList"; -``` - -## Values - -```typescript -"stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeunion.md deleted file mode 100644 index c14562901..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsetypeunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseTypeUnion - - -## Supported Types - -### `models.DeploymentDetailResponseTypeEnvEnum` - -```typescript -const value: models.DeploymentDetailResponseTypeEnvEnum = "plain"; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsevalidation.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsevalidation.md deleted file mode 100644 index 8c8c0dbb1..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsevalidation.md +++ /dev/null @@ -1,25 +0,0 @@ -# DeploymentDetailResponseValidation - -Portable stack input validation constraints. - -## Example Usage - -```typescript -import { DeploymentDetailResponseValidation } from "@alienplatform/platform-api/models"; - -let value: DeploymentDetailResponseValidation = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | -| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | -| `max` | *string* | :heavy_minus_sign: | Maximum number. | -| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | -| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | -| `min` | *string* | :heavy_minus_sign: | Minimum number. | -| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | -| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | -| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | -| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsevalidationunion.md b/client-sdks/platform/typescript/docs/models/deploymentdetailresponsevalidationunion.md deleted file mode 100644 index 2c875f941..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentdetailresponsevalidationunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentDetailResponseValidationUnion - - -## Supported Types - -### `models.DeploymentDetailResponseValidation` - -```typescript -const value: models.DeploymentDetailResponseValidation = {}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentenv.md b/client-sdks/platform/typescript/docs/models/deploymentenv.md deleted file mode 100644 index f1c85e427..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentenv.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentEnv - -How a resolved stack input is injected into runtime environment variables. - -## Example Usage - -```typescript -import { DeploymentEnv } from "@alienplatform/platform-api/models"; - -let value: DeploymentEnv = { - name: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| `name` | *string* | :heavy_check_mark: | Environment variable name. | -| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | -| `type` | *models.DeploymentTypeUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextend.md b/client-sdks/platform/typescript/docs/models/deploymentextend.md deleted file mode 100644 index f9014b6d2..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextend.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentExtend - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { DeploymentExtend } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtend = { - description: "burdensome smog miserably lamp whitewash carouse irk", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.DeploymentExtendPlatforms](../models/deploymentextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendaw.md b/client-sdks/platform/typescript/docs/models/deploymentextendaw.md deleted file mode 100644 index 7b9300f5e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentExtendAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentExtendAw } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| `binding` | [models.DeploymentExtendAwBinding](../models/deploymentextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.DeploymentExtendEffect](../models/deploymentextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.DeploymentExtendAwGrant](../models/deploymentextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentextendawbinding.md deleted file mode 100644 index 38b60b663..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentExtendAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentExtendAwBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `resource` | [models.DeploymentExtendAwResource](../models/deploymentextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.DeploymentExtendAwStack](../models/deploymentextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentextendawgrant.md deleted file mode 100644 index 25175ec5a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentExtendAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentExtendAwGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendawresource.md b/client-sdks/platform/typescript/docs/models/deploymentextendawresource.md deleted file mode 100644 index 5648a927f..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendawresource.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentExtendAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentExtendAwResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAwResource = { - resources: [ - "", - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendawstack.md b/client-sdks/platform/typescript/docs/models/deploymentextendawstack.md deleted file mode 100644 index 7e368cbd7..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendawstack.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentExtendAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentExtendAwStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAwStack = { - resources: [ - "", - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendazure.md b/client-sdks/platform/typescript/docs/models/deploymentextendazure.md deleted file mode 100644 index 876ffc557..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentExtendAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentExtendAzure } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentExtendAzureBinding](../models/deploymentextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentExtendAzureGrant](../models/deploymentextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentextendazurebinding.md deleted file mode 100644 index e28f5419c..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentExtendAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentExtendAzureBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentExtendAzureResource](../models/deploymentextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.DeploymentExtendAzureStack](../models/deploymentextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentextendazuregrant.md deleted file mode 100644 index db53152bc..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentExtendAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentExtendAzureGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentextendazureresource.md deleted file mode 100644 index 15ea38b68..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentExtendAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentExtendAzureResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentextendazurestack.md deleted file mode 100644 index 3e9f66f01..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentExtendAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentExtendAzureStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentextendconditionresource.md deleted file mode 100644 index 9872c5706..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentExtendConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentExtendConditionResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentextendconditionstack.md deleted file mode 100644 index 1c796cef7..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentExtendConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentExtendConditionStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendeffect.md b/client-sdks/platform/typescript/docs/models/deploymentextendeffect.md deleted file mode 100644 index 8e1264c9d..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentExtendEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { DeploymentExtendEffect } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendEffect = "Allow"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendgcp.md b/client-sdks/platform/typescript/docs/models/deploymentextendgcp.md deleted file mode 100644 index d00b92983..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendgcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentExtendGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentExtendGcp } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `binding` | [models.DeploymentExtendGcpBinding](../models/deploymentextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentExtendGcpGrant](../models/deploymentextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentextendgcpbinding.md deleted file mode 100644 index f4d4bdc92..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendgcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentExtendGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentExtendGcpBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `resource` | [models.DeploymentExtendGcpResource](../models/deploymentextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.DeploymentExtendGcpStack](../models/deploymentextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentextendgcpgrant.md deleted file mode 100644 index 4db5da902..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendgcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentExtendGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentExtendGcpGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendgcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentextendgcpresource.md deleted file mode 100644 index 0fd3a8bf8..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendgcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentExtendGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentExtendGcpResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | -| `condition` | *models.DeploymentExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendgcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentextendgcpstack.md deleted file mode 100644 index 00d11ec22..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendgcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentExtendGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentExtendGcpStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -| `condition` | *models.DeploymentExtendStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentextendplatforms.md deleted file mode 100644 index 8aac8606b..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentExtendPlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { DeploymentExtendPlatforms } from "@alienplatform/platform-api/models"; - -let value: DeploymentExtendPlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `aws` | [models.DeploymentExtendAw](../models/deploymentextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.DeploymentExtendAzure](../models/deploymentextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.DeploymentExtendGcp](../models/deploymentextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentextendresourceconditionunion.md deleted file mode 100644 index 61e6d0a04..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentExtendResourceConditionUnion - - -## Supported Types - -### `models.DeploymentExtendConditionResource` - -```typescript -const value: models.DeploymentExtendConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentextendstackconditionunion.md deleted file mode 100644 index 6d62bbceb..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendstackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentExtendStackConditionUnion - - -## Supported Types - -### `models.DeploymentExtendConditionStack` - -```typescript -const value: models.DeploymentExtendConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentextendunion.md b/client-sdks/platform/typescript/docs/models/deploymentextendunion.md deleted file mode 100644 index 6cfe6e132..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentextendunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentExtendUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.DeploymentExtend` - -```typescript -const value: models.DeploymentExtend = { - description: "burdensome smog miserably lamp whitewash carouse irk", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentfailuredomains1.md b/client-sdks/platform/typescript/docs/models/deploymentfailuredomains1.md new file mode 100644 index 000000000..0263e7a2c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentfailuredomains1.md @@ -0,0 +1,20 @@ +# DeploymentFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { DeploymentFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentFailureDomains1 = { + spread: 551861, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentfailuredomains2.md b/client-sdks/platform/typescript/docs/models/deploymentfailuredomains2.md new file mode 100644 index 000000000..cd899dafb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentfailuredomains2.md @@ -0,0 +1,20 @@ +# DeploymentFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { DeploymentFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentFailureDomains2 = { + spread: 203107, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentfailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/deploymentfailuredomainsunion1.md new file mode 100644 index 000000000..e311e9dfa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentfailuredomainsunion1.md @@ -0,0 +1,18 @@ +# DeploymentFailureDomainsUnion1 + + +## Supported Types + +### `models.DeploymentFailureDomains1` + +```typescript +const value: models.DeploymentFailureDomains1 = { + spread: 551861, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentfailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/deploymentfailuredomainsunion2.md new file mode 100644 index 000000000..075476779 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentfailuredomainsunion2.md @@ -0,0 +1,18 @@ +# DeploymentFailureDomainsUnion2 + + +## Supported Types + +### `models.DeploymentFailureDomains2` + +```typescript +const value: models.DeploymentFailureDomains2 = { + spread: 203107, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentinfosetupconfig.md b/client-sdks/platform/typescript/docs/models/deploymentinfosetupconfig.md index f87142203..6ade9cd7f 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentinfosetupconfig.md +++ b/client-sdks/platform/typescript/docs/models/deploymentinfosetupconfig.md @@ -12,7 +12,9 @@ let value: DeploymentInfoSetupConfig = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }; @@ -26,4 +28,4 @@ let value: DeploymentInfoSetupConfig = { | `policy` | [models.DeploymentSetupPolicy](../models/deploymentsetuppolicy.md) | :heavy_check_mark: | N/A | | `environmentVariables` | [models.DeploymentInfoSetupConfigEnvironmentVariable](../models/deploymentinfosetupconfigenvironmentvariable.md)[] | :heavy_check_mark: | N/A | | `inputs` | [models.DeploymentInfoSetupConfigInput](../models/deploymentinfosetupconfiginput.md)[] | :heavy_minus_sign: | N/A | -| `inputValues` | [models.ResolvedStackInputSummary](../models/resolvedstackinputsummary.md)[] | :heavy_minus_sign: | N/A | \ No newline at end of file +| `inputValues` | [models.ResolvedStackInputSummary](../models/resolvedstackinputsummary.md)[] | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentinput.md b/client-sdks/platform/typescript/docs/models/deploymentinput.md deleted file mode 100644 index f7bb6e136..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentinput.md +++ /dev/null @@ -1,34 +0,0 @@ -# DeploymentInput - -Stack input definition serialized into a release stack. - -## Example Usage - -```typescript -import { DeploymentInput } from "@alienplatform/platform-api/models"; - -let value: DeploymentInput = { - description: "reasoning nice once left sit round aw", - id: "", - kind: "string", - label: "", - providedBy: [], - required: true, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `default` | *models.DeploymentDefaultUnion* | :heavy_minus_sign: | N/A | -| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | -| `env` | [models.DeploymentEnv](../models/deploymentenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | -| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | -| `kind` | [models.DeploymentKind](../models/deploymentkind.md) | :heavy_check_mark: | Primitive stack input kind. | -| `label` | *string* | :heavy_check_mark: | Human-facing field label. | -| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | -| `platforms` | [models.DeploymentPreparedStackPlatform](../models/deploymentpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | -| `providedBy` | [models.DeploymentProvidedBy](../models/deploymentprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | -| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | -| `validation` | *models.DeploymentValidationUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentkind.md b/client-sdks/platform/typescript/docs/models/deploymentkind.md deleted file mode 100644 index 8f015661a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentkind.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentKind - -Primitive stack input kind. - -## Example Usage - -```typescript -import { DeploymentKind } from "@alienplatform/platform-api/models"; - -let value: DeploymentKind = "string"; -``` - -## Values - -```typescript -"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentlistitemresponse.md b/client-sdks/platform/typescript/docs/models/deploymentlistitemresponse.md index 27b34315d..a154459fe 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentlistitemresponse.md +++ b/client-sdks/platform/typescript/docs/models/deploymentlistitemresponse.md @@ -37,7 +37,7 @@ let value: DeploymentListItemResponse = { commitAuthorLogin: "johndoe", commitAuthorAvatarUrl: "https://github.com/johndoe.png", }, - createdAt: new Date("2024-06-27T06:57:01.451Z"), + createdAt: new Date("2024-04-17T05:47:54.417Z"), }, deploymentGroup: { id: "dg_r27ict8c7vcgsumpj90ackf7b", @@ -84,4 +84,4 @@ let value: DeploymentListItemResponse = { | `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | | `release` | [models.DeploymentReleaseInfo](../models/deploymentreleaseinfo.md) | :heavy_minus_sign: | N/A | | | `deploymentGroup` | [models.DeploymentGroupInfo](../models/deploymentgroupinfo.md) | :heavy_minus_sign: | N/A | | -| `project` | [models.DeploymentProjectInfo](../models/deploymentprojectinfo.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `project` | [models.DeploymentProjectInfo](../models/deploymentprojectinfo.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/deploymentmanagement1.md b/client-sdks/platform/typescript/docs/models/deploymentmanagement1.md deleted file mode 100644 index 4982ac804..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentmanagement1.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentManagement1 - -## Example Usage - -```typescript -import { DeploymentManagement1 } from "@alienplatform/platform-api/models"; - -let value: DeploymentManagement1 = { - extend: { - "key": [], - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentmanagement2.md b/client-sdks/platform/typescript/docs/models/deploymentmanagement2.md deleted file mode 100644 index e576c40e5..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentmanagement2.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentManagement2 - -## Example Usage - -```typescript -import { DeploymentManagement2 } from "@alienplatform/platform-api/models"; - -let value: DeploymentManagement2 = { - override: { - "key": [ - "", - ], - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentmanagementenum.md b/client-sdks/platform/typescript/docs/models/deploymentmanagementenum.md deleted file mode 100644 index 66d8610ae..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentmanagementenum.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentManagementEnum - -## Example Usage - -```typescript -import { DeploymentManagementEnum } from "@alienplatform/platform-api/models"; - -let value: DeploymentManagementEnum = "auto"; -``` - -## Values - -```typescript -"auto" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentmanagementunion.md b/client-sdks/platform/typescript/docs/models/deploymentmanagementunion.md deleted file mode 100644 index 5d208e6c2..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentmanagementunion.md +++ /dev/null @@ -1,35 +0,0 @@ -# DeploymentManagementUnion - -Management permissions configuration for stack management access - - -## Supported Types - -### `models.DeploymentManagement1` - -```typescript -const value: models.DeploymentManagement1 = { - extend: { - "key": [], - }, -}; -``` - -### `models.DeploymentManagement2` - -```typescript -const value: models.DeploymentManagement2 = { - override: { - "key": [ - "", - ], - }, -}; -``` - -### `models.DeploymentManagementEnum` - -```typescript -const value: models.DeploymentManagementEnum = "auto"; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverride.md b/client-sdks/platform/typescript/docs/models/deploymentoverride.md deleted file mode 100644 index e6b372d44..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverride.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentOverride - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { DeploymentOverride } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverride = { - description: "technician um however academics", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.DeploymentOverridePlatforms](../models/deploymentoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideaw.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideaw.md deleted file mode 100644 index 4d2e2153a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentOverrideAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentOverrideAw } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `binding` | [models.DeploymentOverrideAwBinding](../models/deploymentoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.DeploymentOverrideEffect](../models/deploymentoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.DeploymentOverrideAwGrant](../models/deploymentoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideawbinding.md deleted file mode 100644 index 0d3e9d406..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentOverrideAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentOverrideAwBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentOverrideAwResource](../models/deploymentoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.DeploymentOverrideAwStack](../models/deploymentoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideawgrant.md deleted file mode 100644 index 8246edd30..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentOverrideAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentOverrideAwGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideawresource.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideawresource.md deleted file mode 100644 index d55b19ded..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideawresource.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentOverrideAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentOverrideAwResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAwResource = { - resources: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideawstack.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideawstack.md deleted file mode 100644 index 0ced95dcd..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideawstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentOverrideAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentOverrideAwStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAwStack = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideazure.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideazure.md deleted file mode 100644 index aa43ffedf..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentOverrideAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentOverrideAzure } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `binding` | [models.DeploymentOverrideAzureBinding](../models/deploymentoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentOverrideAzureGrant](../models/deploymentoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideazurebinding.md deleted file mode 100644 index 2be51019d..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentOverrideAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentOverrideAzureBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentOverrideAzureResource](../models/deploymentoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.DeploymentOverrideAzureStack](../models/deploymentoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideazuregrant.md deleted file mode 100644 index 993525682..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentOverrideAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentOverrideAzureGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideazureresource.md deleted file mode 100644 index 13355c19c..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentOverrideAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentOverrideAzureResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideazurestack.md deleted file mode 100644 index 229de554b..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentOverrideAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentOverrideAzureStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideconditionresource.md deleted file mode 100644 index cc755e338..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentOverrideConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentOverrideConditionResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideconditionstack.md deleted file mode 100644 index 0c15c4ee7..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentOverrideConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentOverrideConditionStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideeffect.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideeffect.md deleted file mode 100644 index a73e20edd..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentOverrideEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { DeploymentOverrideEffect } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideEffect = "Allow"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverridegcp.md b/client-sdks/platform/typescript/docs/models/deploymentoverridegcp.md deleted file mode 100644 index 29b3d3949..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverridegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentOverrideGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentOverrideGcp } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentOverrideGcpBinding](../models/deploymentoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentOverrideGcpGrant](../models/deploymentoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentoverridegcpbinding.md deleted file mode 100644 index 1753dd590..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentOverrideGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentOverrideGcpBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentOverrideGcpResource](../models/deploymentoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.DeploymentOverrideGcpStack](../models/deploymentoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentoverridegcpgrant.md deleted file mode 100644 index 24b440101..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentOverrideGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentOverrideGcpGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentoverridegcpresource.md deleted file mode 100644 index 130490517..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentOverrideGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentOverrideGcpResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | -| `condition` | *models.DeploymentOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentoverridegcpstack.md deleted file mode 100644 index 68e988182..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverridegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentOverrideGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentOverrideGcpStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverrideGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | -| `condition` | *models.DeploymentOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideplatforms.md deleted file mode 100644 index 255b50186..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentOverridePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { DeploymentOverridePlatforms } from "@alienplatform/platform-api/models"; - -let value: DeploymentOverridePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `aws` | [models.DeploymentOverrideAw](../models/deploymentoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.DeploymentOverrideAzure](../models/deploymentoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.DeploymentOverrideGcp](../models/deploymentoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideresourceconditionunion.md deleted file mode 100644 index 0b79f4d26..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentOverrideResourceConditionUnion - - -## Supported Types - -### `models.DeploymentOverrideConditionResource` - -```typescript -const value: models.DeploymentOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentoverridestackconditionunion.md deleted file mode 100644 index ece774ad7..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverridestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentOverrideStackConditionUnion - - -## Supported Types - -### `models.DeploymentOverrideConditionStack` - -```typescript -const value: models.DeploymentOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentoverrideunion.md b/client-sdks/platform/typescript/docs/models/deploymentoverrideunion.md deleted file mode 100644 index b640d8a0a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentoverrideunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentOverrideUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.DeploymentOverride` - -```typescript -const value: models.DeploymentOverride = { - description: "technician um however academics", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstack.md new file mode 100644 index 000000000..52f9c2d3a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstack.md @@ -0,0 +1,24 @@ +# DeploymentPendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStack = { + id: "", + resources: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.DeploymentPendingPreparedStackInput](../models/deploymentpendingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.DeploymentPendingPreparedStackPermissions](../models/deploymentpendingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.DeploymentPendingPreparedStackSupportedPlatform](../models/deploymentpendingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackconfig.md new file mode 100644 index 000000000..12131ee50 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..eac917bd8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentPendingPreparedStackTypeBoolean](../models/deploymentpendingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..1cc4b1ca5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentPendingPreparedStackTypeNumber](../models/deploymentpendingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultstring.md new file mode 100644 index 000000000..6e019d174 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentPendingPreparedStackTypeString](../models/deploymentpendingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..6bab488f7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultstringlist.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentPendingPreparedStackTypeStringList](../models/deploymentpendingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultunion.md new file mode 100644 index 000000000..bb7288524 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdefaultunion.md @@ -0,0 +1,49 @@ +# DeploymentPendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackDefaultString` + +```typescript +const value: models.DeploymentPendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.DeploymentPendingPreparedStackDefaultNumber` + +```typescript +const value: models.DeploymentPendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.DeploymentPendingPreparedStackDefaultBoolean` + +```typescript +const value: models.DeploymentPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +### `models.DeploymentPendingPreparedStackDefaultStringList` + +```typescript +const value: models.DeploymentPendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdependency.md new file mode 100644 index 000000000..a0bf65771 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackenv.md new file mode 100644 index 000000000..8364c8edc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackenv.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.DeploymentPendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextend.md new file mode 100644 index 000000000..4a4191cec --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextend.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtend = { + description: "knowingly cleverly institute even lest", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentPendingPreparedStackExtendPlatforms](../models/deploymentpendingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendaw.md new file mode 100644 index 000000000..4720145e5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# DeploymentPendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentPendingPreparedStackExtendAwBinding](../models/deploymentpendingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentPendingPreparedStackExtendEffect](../models/deploymentpendingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentPendingPreparedStackExtendAwGrant](../models/deploymentpendingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawbinding.md new file mode 100644 index 000000000..c073574c1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPendingPreparedStackExtendAwResource](../models/deploymentpendingpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackExtendAwStack](../models/deploymentpendingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawgrant.md new file mode 100644 index 000000000..78daa201d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawresource.md new file mode 100644 index 000000000..f43a65fcc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawresource.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawstack.md new file mode 100644 index 000000000..32667c6bb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendawstack.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazure.md new file mode 100644 index 000000000..df7709a78 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentPendingPreparedStackExtendAzureBinding](../models/deploymentpendingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPendingPreparedStackExtendAzureGrant](../models/deploymentpendingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..5abf07f2b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPendingPreparedStackExtendAzureResource](../models/deploymentpendingpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackExtendAzureStack](../models/deploymentpendingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..0cfeb5f4d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazureresource.md new file mode 100644 index 000000000..b1c70725c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazurestack.md new file mode 100644 index 000000000..537a22ae1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendconditionresource.md new file mode 100644 index 000000000..db23f847e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendconditionstack.md new file mode 100644 index 000000000..f348256fd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendeffect.md new file mode 100644 index 000000000..5ce37a2a3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcp.md new file mode 100644 index 000000000..c7dd55a67 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPendingPreparedStackExtendGcpBinding](../models/deploymentpendingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPendingPreparedStackExtendGcpGrant](../models/deploymentpendingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..bd4cb57e1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPendingPreparedStackExtendGcpResource](../models/deploymentpendingpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackExtendGcpStack](../models/deploymentpendingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..3a8310134 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpresource.md new file mode 100644 index 000000000..507b6e479 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `condition` | *models.DeploymentPendingPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..16801efd6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `condition` | *models.DeploymentPendingPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendplatforms.md new file mode 100644 index 000000000..6994f088c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.DeploymentPendingPreparedStackExtendAw](../models/deploymentpendingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentPendingPreparedStackExtendAzure](../models/deploymentpendingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentPendingPreparedStackExtendGcp](../models/deploymentpendingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..f38bf46d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendresourceconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackExtendConditionResource` + +```typescript +const value: models.DeploymentPendingPreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..d56f7b3a1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendstackconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackExtendConditionStack` + +```typescript +const value: models.DeploymentPendingPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendunion.md new file mode 100644 index 000000000..d45571f8e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentPendingPreparedStackExtend` + +```typescript +const value: models.DeploymentPendingPreparedStackExtend = { + description: "knowingly cleverly institute even lest", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackinput.md new file mode 100644 index 000000000..362d77713 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackinput.md @@ -0,0 +1,34 @@ +# DeploymentPendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackInput = { + description: "smog concerning quash qua phooey wherever", + id: "", + kind: "boolean", + label: "", + providedBy: [], + required: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `default` | *models.DeploymentPendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.DeploymentPendingPreparedStackEnv](../models/deploymentpendingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.DeploymentPendingPreparedStackKind](../models/deploymentpendingpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.DeploymentPendingPreparedStackPlatform](../models/deploymentpendingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.DeploymentPendingPreparedStackProvidedBy](../models/deploymentpendingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.DeploymentPendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackkind.md new file mode 100644 index 000000000..9b760206a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackkind.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackKind = "number"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacklifecycle.md new file mode 100644 index 000000000..7fa744d2f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacklifecycle.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackLifecycle = "frozen"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagement1.md new file mode 100644 index 000000000..953abf0a4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagement1.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [ + "", + ], + "key2": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagement2.md new file mode 100644 index 000000000..1531be157 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagement2.md @@ -0,0 +1,35 @@ +# DeploymentPendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackManagement2 = { + override: { + "key": [ + { + description: + "midst clamor untrue request onset eek above gosh likewise milky", + id: "", + platforms: {}, + }, + ], + "key1": [], + "key2": [ + { + description: + "midst clamor untrue request onset eek above gosh likewise milky", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagementenum.md new file mode 100644 index 000000000..fbe24a5fd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# DeploymentPendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagementunion.md new file mode 100644 index 000000000..cfdb50a4a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackmanagementunion.md @@ -0,0 +1,52 @@ +# DeploymentPendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.DeploymentPendingPreparedStackManagement1` + +```typescript +const value: models.DeploymentPendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [ + "", + ], + "key2": [], + }, +}; +``` + +### `models.DeploymentPendingPreparedStackManagement2` + +```typescript +const value: models.DeploymentPendingPreparedStackManagement2 = { + override: { + "key": [ + { + description: + "midst clamor untrue request onset eek above gosh likewise milky", + id: "", + platforms: {}, + }, + ], + "key1": [], + "key2": [ + { + description: + "midst clamor untrue request onset eek above gosh likewise milky", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +### `models.DeploymentPendingPreparedStackManagementEnum` + +```typescript +const value: models.DeploymentPendingPreparedStackManagementEnum = "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverride.md new file mode 100644 index 000000000..93e4650d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverride.md @@ -0,0 +1,24 @@ +# DeploymentPendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverride = { + description: + "almighty convection pip throughout hm consign impact alb blah slipper", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentPendingPreparedStackOverridePlatforms](../models/deploymentpendingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideaw.md new file mode 100644 index 000000000..c77b129ee --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# DeploymentPendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPendingPreparedStackOverrideAwBinding](../models/deploymentpendingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentPendingPreparedStackOverrideEffect](../models/deploymentpendingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentPendingPreparedStackOverrideAwGrant](../models/deploymentpendingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..6e276d1cc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentPendingPreparedStackOverrideAwResource](../models/deploymentpendingpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackOverrideAwStack](../models/deploymentpendingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..55538b491 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawresource.md new file mode 100644 index 000000000..70cf298e0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawresource.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAwResource = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..ff2657fea --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideawstack.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazure.md new file mode 100644 index 000000000..c5d9c05e2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPendingPreparedStackOverrideAzureBinding](../models/deploymentpendingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPendingPreparedStackOverrideAzureGrant](../models/deploymentpendingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..e285f8746 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentPendingPreparedStackOverrideAzureResource](../models/deploymentpendingpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackOverrideAzureStack](../models/deploymentpendingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..3da2a5c43 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..fd449dec4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..893770c43 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..2ce3fae05 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..b36af0b7d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..775b3b543 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcp.md new file mode 100644 index 000000000..71fd55fd7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentPendingPreparedStackOverrideGcpBinding](../models/deploymentpendingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPendingPreparedStackOverrideGcpGrant](../models/deploymentpendingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..06cb2e31c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPendingPreparedStackOverrideGcpResource](../models/deploymentpendingpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackOverrideGcpStack](../models/deploymentpendingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..decacac38 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..dcfe3881c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `condition` | *models.DeploymentPendingPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..433eabb32 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `condition` | *models.DeploymentPendingPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..40e397f93 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentPendingPreparedStackOverrideAw](../models/deploymentpendingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentPendingPreparedStackOverrideAzure](../models/deploymentpendingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentPendingPreparedStackOverrideGcp](../models/deploymentpendingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..61aa7d3d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackOverrideConditionResource` + +```typescript +const value: models.DeploymentPendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..b2294e76b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverridestackconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackOverrideConditionStack` + +```typescript +const value: models.DeploymentPendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideunion.md new file mode 100644 index 000000000..2ceb825ef --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackoverrideunion.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentPendingPreparedStackOverride` + +```typescript +const value: models.DeploymentPendingPreparedStackOverride = { + description: + "almighty convection pip throughout hm consign impact alb blah slipper", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackpermissions.md new file mode 100644 index 000000000..8a9f1e400 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackpermissions.md @@ -0,0 +1,38 @@ +# DeploymentPendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackPermissions = { + profiles: { + "key": { + "key": [], + "key1": [ + "", + ], + }, + "key1": { + "key": [ + "", + ], + "key1": [], + }, + "key2": { + "key": [], + "key1": [], + "key2": [], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.DeploymentPendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackplatform.md new file mode 100644 index 000000000..412a1ee25 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackplatform.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackPlatform = "kubernetes"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofile.md new file mode 100644 index 000000000..f5d89216e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofile.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfile = { + description: "what why clearly blah that filthy meanwhile for", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentPendingPreparedStackProfilePlatforms](../models/deploymentpendingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileaw.md new file mode 100644 index 000000000..ebcd0c04d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# DeploymentPendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPendingPreparedStackProfileAwBinding](../models/deploymentpendingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentPendingPreparedStackProfileEffect](../models/deploymentpendingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentPendingPreparedStackProfileAwGrant](../models/deploymentpendingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..4642c75ae --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPendingPreparedStackProfileAwResource](../models/deploymentpendingpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackProfileAwStack](../models/deploymentpendingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..79807d3ec --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawresource.md new file mode 100644 index 000000000..fb3662ee0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawresource.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawstack.md new file mode 100644 index 000000000..c5dd09b56 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileawstack.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazure.md new file mode 100644 index 000000000..9ba0bfb16 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPendingPreparedStackProfileAzureBinding](../models/deploymentpendingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPendingPreparedStackProfileAzureGrant](../models/deploymentpendingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..dd7620117 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPendingPreparedStackProfileAzureResource](../models/deploymentpendingpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackProfileAzureStack](../models/deploymentpendingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..3c5ef36dd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazureresource.md new file mode 100644 index 000000000..1cc7a0286 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..979b30f44 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..5c790f80c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..0108bb91c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileeffect.md new file mode 100644 index 000000000..28898a89b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcp.md new file mode 100644 index 000000000..68cb813dc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# DeploymentPendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPendingPreparedStackProfileGcpBinding](../models/deploymentpendingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPendingPreparedStackProfileGcpGrant](../models/deploymentpendingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..eb0944d56 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentPendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentPendingPreparedStackProfileGcpResource](../models/deploymentpendingpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentPendingPreparedStackProfileGcpStack](../models/deploymentpendingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..1b4a6facc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentPendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..e0007a7ce --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `condition` | *models.DeploymentPendingPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..92dff542e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentPendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `condition` | *models.DeploymentPendingPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..b701b9ce2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentPendingPreparedStackProfileAw](../models/deploymentpendingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentPendingPreparedStackProfileAzure](../models/deploymentpendingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentPendingPreparedStackProfileGcp](../models/deploymentpendingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..eabdabf3f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackProfileConditionResource` + +```typescript +const value: models.DeploymentPendingPreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..b70ac0439 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofilestackconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackProfileConditionStack` + +```typescript +const value: models.DeploymentPendingPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileunion.md new file mode 100644 index 000000000..545aaa509 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# DeploymentPendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentPendingPreparedStackProfile` + +```typescript +const value: models.DeploymentPendingPreparedStackProfile = { + description: "what why clearly blah that filthy meanwhile for", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprovidedby.md new file mode 100644 index 000000000..779f60e37 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackProvidedBy = "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackresources.md new file mode 100644 index 000000000..8766ddec6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackresources.md @@ -0,0 +1,31 @@ +# DeploymentPendingPreparedStackResources + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [ + { + id: "", + type: "", + }, + ], + lifecycle: "live", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.DeploymentPendingPreparedStackConfig](../models/deploymentpendingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.DeploymentPendingPreparedStackDependency](../models/deploymentpendingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.DeploymentPendingPreparedStackLifecycle](../models/deploymentpendingpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..df4caa319 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackSupportedPlatform = "aws"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeboolean.md new file mode 100644 index 000000000..4940a619c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# DeploymentPendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..cc4642c9a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# DeploymentPendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackTypeEnvEnum = "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypenumber.md new file mode 100644 index 000000000..a785785b0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# DeploymentPendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypestring.md new file mode 100644 index 000000000..6eff99d42 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# DeploymentPendingPreparedStackTypeString + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypestringlist.md new file mode 100644 index 000000000..f9b7c4f70 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypestringlist.md @@ -0,0 +1,15 @@ +# DeploymentPendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackTypeStringList = "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeunion.md new file mode 100644 index 000000000..1afd1dbf3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstacktypeunion.md @@ -0,0 +1,16 @@ +# DeploymentPendingPreparedStackTypeUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackTypeEnvEnum` + +```typescript +const value: models.DeploymentPendingPreparedStackTypeEnvEnum = "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackunion.md new file mode 100644 index 000000000..969782f68 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackunion.md @@ -0,0 +1,19 @@ +# DeploymentPendingPreparedStackUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStack` + +```typescript +const value: models.DeploymentPendingPreparedStack = { + id: "", + resources: {}, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackvalidation.md new file mode 100644 index 000000000..72dcafb41 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# DeploymentPendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { DeploymentPendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: DeploymentPendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackvalidationunion.md new file mode 100644 index 000000000..d92b28d1c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpendingpreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# DeploymentPendingPreparedStackValidationUnion + + +## Supported Types + +### `models.DeploymentPendingPreparedStackValidation` + +```typescript +const value: models.DeploymentPendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpermissions.md b/client-sdks/platform/typescript/docs/models/deploymentpermissions.md deleted file mode 100644 index 1ac3bfd88..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentpermissions.md +++ /dev/null @@ -1,42 +0,0 @@ -# DeploymentPermissions - -Combined permissions configuration that contains both profiles and management - -## Example Usage - -```typescript -import { DeploymentPermissions } from "@alienplatform/platform-api/models"; - -let value: DeploymentPermissions = { - profiles: { - "key": { - "key": [], - }, - "key1": {}, - "key2": { - "key": [], - "key1": [ - { - description: "aw strong everlasting", - id: "", - platforms: {}, - }, - ], - "key2": [ - { - description: "aw strong everlasting", - id: "", - platforms: {}, - }, - ], - }, - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `management` | *models.DeploymentManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | -| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentpoolsautoscale.md b/client-sdks/platform/typescript/docs/models/deploymentpoolsautoscale.md index 409f808bf..df91344ac 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentpoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/deploymentpoolsautoscale.md @@ -16,7 +16,8 @@ let value: DeploymentPoolsAutoscale = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.DeploymentFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpoolsfixed.md b/client-sdks/platform/typescript/docs/models/deploymentpoolsfixed.md index fea8c3d58..37349dcbe 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentpoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/deploymentpoolsfixed.md @@ -15,6 +15,7 @@ let value: DeploymentPoolsFixed = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.DeploymentFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstack.md index a9c286790..b5e429202 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentpreparedstack.md +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstack.md @@ -29,10 +29,10 @@ let value: DeploymentPreparedStack = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | -| `inputs` | [models.DeploymentInput](../models/deploymentinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | -| `permissions` | [models.DeploymentPermissions](../models/deploymentpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | -| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | -| `supportedPlatforms` | [models.DeploymentSupportedPlatform](../models/deploymentsupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.DeploymentPreparedStackInput](../models/deploymentpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.DeploymentPreparedStackPermissions](../models/deploymentpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.DeploymentPreparedStackSupportedPlatform](../models/deploymentpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultboolean.md new file mode 100644 index 000000000..af42964c1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { DeploymentPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentPreparedStackTypeBoolean](../models/deploymentpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultnumber.md new file mode 100644 index 000000000..f417b8ead --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { DeploymentPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `type` | [models.DeploymentPreparedStackTypeNumber](../models/deploymentpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultstring.md new file mode 100644 index 000000000..fb5ec335b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackDefaultString + +## Example Usage + +```typescript +import { DeploymentPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `type` | [models.DeploymentPreparedStackTypeString](../models/deploymentpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..dafdb5829 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultstringlist.md @@ -0,0 +1,22 @@ +# DeploymentPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { DeploymentPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `type` | [models.DeploymentPreparedStackTypeStringList](../models/deploymentpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultunion.md new file mode 100644 index 000000000..84eb37f8c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackdefaultunion.md @@ -0,0 +1,49 @@ +# DeploymentPreparedStackDefaultUnion + + +## Supported Types + +### `models.DeploymentPreparedStackDefaultString` + +```typescript +const value: models.DeploymentPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.DeploymentPreparedStackDefaultNumber` + +```typescript +const value: models.DeploymentPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.DeploymentPreparedStackDefaultBoolean` + +```typescript +const value: models.DeploymentPreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +### `models.DeploymentPreparedStackDefaultStringList` + +```typescript +const value: models.DeploymentPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackenv.md new file mode 100644 index 000000000..ff36fe7e2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackenv.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { DeploymentPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.DeploymentPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextend.md new file mode 100644 index 000000000..87914c549 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextend.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtend = { + description: "forswear behind ew reiterate rubric putrefy", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentPreparedStackExtendPlatforms](../models/deploymentpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendaw.md new file mode 100644 index 000000000..e79af7f66 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# DeploymentPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPreparedStackExtendAwBinding](../models/deploymentpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentPreparedStackExtendEffect](../models/deploymentpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentPreparedStackExtendAwGrant](../models/deploymentpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawbinding.md new file mode 100644 index 000000000..86f59425c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentPreparedStackExtendAwResource](../models/deploymentpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentPreparedStackExtendAwStack](../models/deploymentpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawgrant.md new file mode 100644 index 000000000..46d94d600 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawresource.md new file mode 100644 index 000000000..3bf6d9406 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawresource.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawstack.md new file mode 100644 index 000000000..4509ac246 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendawstack.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazure.md new file mode 100644 index 000000000..2b1348d38 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPreparedStackExtendAzureBinding](../models/deploymentpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPreparedStackExtendAzureGrant](../models/deploymentpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazurebinding.md new file mode 100644 index 000000000..500b3e80b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentPreparedStackExtendAzureResource](../models/deploymentpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentPreparedStackExtendAzureStack](../models/deploymentpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazuregrant.md new file mode 100644 index 000000000..d8984149a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazureresource.md new file mode 100644 index 000000000..67a010c60 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazurestack.md new file mode 100644 index 000000000..63c93d8ec --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendconditionresource.md new file mode 100644 index 000000000..76b423c0c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendconditionstack.md new file mode 100644 index 000000000..af267ab3b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendeffect.md new file mode 100644 index 000000000..028a47448 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcp.md new file mode 100644 index 000000000..e62190538 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentPreparedStackExtendGcpBinding](../models/deploymentpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPreparedStackExtendGcpGrant](../models/deploymentpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..b8bbaf956 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPreparedStackExtendGcpResource](../models/deploymentpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentPreparedStackExtendGcpStack](../models/deploymentpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..5b8bb061a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpresource.md new file mode 100644 index 000000000..dc74eaffd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `condition` | *models.DeploymentPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpstack.md new file mode 100644 index 000000000..9f4b3b9f3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | +| `condition` | *models.DeploymentPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendplatforms.md new file mode 100644 index 000000000..82405cfd9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentPreparedStackExtendAw](../models/deploymentpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentPreparedStackExtendAzure](../models/deploymentpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentPreparedStackExtendGcp](../models/deploymentpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..051ad873f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendresourceconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.DeploymentPreparedStackExtendConditionResource` + +```typescript +const value: models.DeploymentPreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..ca5139a21 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendstackconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.DeploymentPreparedStackExtendConditionStack` + +```typescript +const value: models.DeploymentPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendunion.md new file mode 100644 index 000000000..45a01e29e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# DeploymentPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentPreparedStackExtend` + +```typescript +const value: models.DeploymentPreparedStackExtend = { + description: "forswear behind ew reiterate rubric putrefy", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackinput.md new file mode 100644 index 000000000..be9fd8b44 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackinput.md @@ -0,0 +1,34 @@ +# DeploymentPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { DeploymentPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackInput = { + description: "formation um oh", + id: "", + kind: "number", + label: "", + providedBy: [], + required: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `default` | *models.DeploymentPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.DeploymentPreparedStackEnv](../models/deploymentpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.DeploymentPreparedStackKind](../models/deploymentpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.DeploymentPreparedStackPlatform](../models/deploymentpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.DeploymentPreparedStackProvidedBy](../models/deploymentpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.DeploymentPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackkind.md new file mode 100644 index 000000000..297c8c19d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackkind.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { DeploymentPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackKind = "number"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagement1.md new file mode 100644 index 000000000..569591951 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagement1.md @@ -0,0 +1,31 @@ +# DeploymentPreparedStackManagement1 + +## Example Usage + +```typescript +import { DeploymentPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackManagement1 = { + extend: { + "key": [ + "", + ], + "key1": [ + { + description: "netsuke delectable recklessly dramatic brr for", + id: "", + platforms: {}, + }, + ], + "key2": [ + "", + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagement2.md new file mode 100644 index 000000000..f6a64a56e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagement2.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackManagement2 + +## Example Usage + +```typescript +import { DeploymentPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackManagement2 = { + override: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagementenum.md new file mode 100644 index 000000000..736dcda10 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# DeploymentPreparedStackManagementEnum + +## Example Usage + +```typescript +import { DeploymentPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagementunion.md new file mode 100644 index 000000000..68861c6e2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackmanagementunion.md @@ -0,0 +1,42 @@ +# DeploymentPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.DeploymentPreparedStackManagement1` + +```typescript +const value: models.DeploymentPreparedStackManagement1 = { + extend: { + "key": [ + "", + ], + "key1": [ + { + description: "netsuke delectable recklessly dramatic brr for", + id: "", + platforms: {}, + }, + ], + "key2": [ + "", + ], + }, +}; +``` + +### `models.DeploymentPreparedStackManagement2` + +```typescript +const value: models.DeploymentPreparedStackManagement2 = { + override: {}, +}; +``` + +### `models.DeploymentPreparedStackManagementEnum` + +```typescript +const value: models.DeploymentPreparedStackManagementEnum = "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverride.md new file mode 100644 index 000000000..4d12e853a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverride.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverride = { + description: "white redraw rectangular warm", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentPreparedStackOverridePlatforms](../models/deploymentpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideaw.md new file mode 100644 index 000000000..89d97c5e2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# DeploymentPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPreparedStackOverrideAwBinding](../models/deploymentpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentPreparedStackOverrideEffect](../models/deploymentpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentPreparedStackOverrideAwGrant](../models/deploymentpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..713747e37 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPreparedStackOverrideAwResource](../models/deploymentpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentPreparedStackOverrideAwStack](../models/deploymentpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..04b80c7e3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawresource.md new file mode 100644 index 000000000..1acda88e7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawresource.md @@ -0,0 +1,24 @@ +# DeploymentPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawstack.md new file mode 100644 index 000000000..909bc4afd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideawstack.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazure.md new file mode 100644 index 000000000..6c3019476 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPreparedStackOverrideAzureBinding](../models/deploymentpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPreparedStackOverrideAzureGrant](../models/deploymentpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..e00cc5f79 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPreparedStackOverrideAzureResource](../models/deploymentpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentPreparedStackOverrideAzureStack](../models/deploymentpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..7c105b398 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..f18231956 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..6cc7fb1f2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..11dbb7edb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..588740972 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideeffect.md new file mode 100644 index 000000000..5d70fc329 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcp.md new file mode 100644 index 000000000..ef1eb13fd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPreparedStackOverrideGcpBinding](../models/deploymentpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPreparedStackOverrideGcpGrant](../models/deploymentpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..73b3b8a77 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.DeploymentPreparedStackOverrideGcpResource](../models/deploymentpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentPreparedStackOverrideGcpStack](../models/deploymentpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..025cad3fa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..9d51da1db --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `condition` | *models.DeploymentPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..274dbb664 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `condition` | *models.DeploymentPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..da240a7da --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `aws` | [models.DeploymentPreparedStackOverrideAw](../models/deploymentpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentPreparedStackOverrideAzure](../models/deploymentpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentPreparedStackOverrideGcp](../models/deploymentpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..17a7c4c97 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.DeploymentPreparedStackOverrideConditionResource` + +```typescript +const value: models.DeploymentPreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..a67fc9e02 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverridestackconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.DeploymentPreparedStackOverrideConditionStack` + +```typescript +const value: models.DeploymentPreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideunion.md new file mode 100644 index 000000000..2dee89463 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackoverrideunion.md @@ -0,0 +1,22 @@ +# DeploymentPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentPreparedStackOverride` + +```typescript +const value: models.DeploymentPreparedStackOverride = { + description: "white redraw rectangular warm", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackpermissions.md new file mode 100644 index 000000000..8b0879ea7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackpermissions.md @@ -0,0 +1,41 @@ +# DeploymentPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { DeploymentPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackPermissions = { + profiles: { + "key": { + "key": [ + "", + ], + "key1": [ + "", + ], + "key2": [], + }, + "key1": { + "key": [ + { + description: + "impartial pigpen whenever whose arid sailor bleak spirited elastic though", + id: "", + platforms: {}, + }, + ], + "key1": [], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.DeploymentPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofile.md new file mode 100644 index 000000000..393a51e81 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofile.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfile = { + description: "below but coop square too", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.DeploymentPreparedStackProfilePlatforms](../models/deploymentpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileaw.md new file mode 100644 index 000000000..17c24a729 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# DeploymentPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentPreparedStackProfileAwBinding](../models/deploymentpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.DeploymentPreparedStackProfileEffect](../models/deploymentpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.DeploymentPreparedStackProfileAwGrant](../models/deploymentpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawbinding.md new file mode 100644 index 000000000..c0af33a88 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPreparedStackProfileAwResource](../models/deploymentpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.DeploymentPreparedStackProfileAwStack](../models/deploymentpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawgrant.md new file mode 100644 index 000000000..dc7b05fd4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawresource.md new file mode 100644 index 000000000..77798d701 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawresource.md @@ -0,0 +1,22 @@ +# DeploymentPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawstack.md new file mode 100644 index 000000000..d9d1fcd2f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileawstack.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazure.md new file mode 100644 index 000000000..724e28ef2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.DeploymentPreparedStackProfileAzureBinding](../models/deploymentpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPreparedStackProfileAzureGrant](../models/deploymentpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..e206f2d85 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPreparedStackProfileAzureResource](../models/deploymentpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.DeploymentPreparedStackProfileAzureStack](../models/deploymentpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..8030fa992 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazureresource.md new file mode 100644 index 000000000..ed6261527 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazurestack.md new file mode 100644 index 000000000..b2f5bf59b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..21ec6ca6d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileconditionresource.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..63ae17af2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileeffect.md new file mode 100644 index 000000000..054fd0f36 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcp.md new file mode 100644 index 000000000..42d565b83 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# DeploymentPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `binding` | [models.DeploymentPreparedStackProfileGcpBinding](../models/deploymentpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.DeploymentPreparedStackProfileGcpGrant](../models/deploymentpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..931b42073 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# DeploymentPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `resource` | [models.DeploymentPreparedStackProfileGcpResource](../models/deploymentpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.DeploymentPreparedStackProfileGcpStack](../models/deploymentpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..aec97310f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# DeploymentPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..a4c0f31d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `condition` | *models.DeploymentPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..0103f74aa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# DeploymentPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `condition` | *models.DeploymentPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileplatforms.md new file mode 100644 index 000000000..22da7695e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { DeploymentPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `aws` | [models.DeploymentPreparedStackProfileAw](../models/deploymentpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.DeploymentPreparedStackProfileAzure](../models/deploymentpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.DeploymentPreparedStackProfileGcp](../models/deploymentpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..9272d100e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.DeploymentPreparedStackProfileConditionResource` + +```typescript +const value: models.DeploymentPreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..06781a96b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofilestackconditionunion.md @@ -0,0 +1,19 @@ +# DeploymentPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.DeploymentPreparedStackProfileConditionStack` + +```typescript +const value: models.DeploymentPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileunion.md new file mode 100644 index 000000000..a492ecfa0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# DeploymentPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.DeploymentPreparedStackProfile` + +```typescript +const value: models.DeploymentPreparedStackProfile = { + description: "below but coop square too", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprovidedby.md new file mode 100644 index 000000000..53abd3175 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { DeploymentPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackProvidedBy = "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackresources.md index 51c0abc72..0b546ddb7 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackresources.md +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackresources.md @@ -17,9 +17,10 @@ let value: DeploymentPreparedStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.DeploymentPreparedStackConfig](../models/deploymentpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.DeploymentPreparedStackDependency](../models/deploymentpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.DeploymentPreparedStackLifecycle](../models/deploymentpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.DeploymentPreparedStackConfig](../models/deploymentpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.DeploymentPreparedStackDependency](../models/deploymentpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.DeploymentPreparedStackLifecycle](../models/deploymentpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacksupportedplatform.md new file mode 100644 index 000000000..2023f9411 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { DeploymentPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackSupportedPlatform = "kubernetes"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeboolean.md new file mode 100644 index 000000000..324f20f00 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# DeploymentPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { DeploymentPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeenvenum.md new file mode 100644 index 000000000..af13da1ee --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# DeploymentPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { DeploymentPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackTypeEnvEnum = "secret"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypenumber.md new file mode 100644 index 000000000..7faa137d4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# DeploymentPreparedStackTypeNumber + +## Example Usage + +```typescript +import { DeploymentPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypestring.md new file mode 100644 index 000000000..608b44b4f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# DeploymentPreparedStackTypeString + +## Example Usage + +```typescript +import { DeploymentPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypestringlist.md new file mode 100644 index 000000000..429aa5ef9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypestringlist.md @@ -0,0 +1,15 @@ +# DeploymentPreparedStackTypeStringList + +## Example Usage + +```typescript +import { DeploymentPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackTypeStringList = "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeunion.md new file mode 100644 index 000000000..b8b150c0f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstacktypeunion.md @@ -0,0 +1,16 @@ +# DeploymentPreparedStackTypeUnion + + +## Supported Types + +### `models.DeploymentPreparedStackTypeEnvEnum` + +```typescript +const value: models.DeploymentPreparedStackTypeEnvEnum = "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackvalidation.md new file mode 100644 index 000000000..1d4248f67 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# DeploymentPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { DeploymentPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: DeploymentPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackvalidationunion.md new file mode 100644 index 000000000..f6452f97f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentpreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# DeploymentPreparedStackValidationUnion + + +## Supported Types + +### `models.DeploymentPreparedStackValidation` + +```typescript +const value: models.DeploymentPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofile.md b/client-sdks/platform/typescript/docs/models/deploymentprofile.md deleted file mode 100644 index c5e7249db..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofile.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentProfile - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { DeploymentProfile } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfile = { - description: - "across unto comfortable meh kookily paltry hover while intensely", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.DeploymentProfilePlatforms](../models/deploymentprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileaw.md b/client-sdks/platform/typescript/docs/models/deploymentprofileaw.md deleted file mode 100644 index 297636daa..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentProfileAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentProfileAw } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `binding` | [models.DeploymentProfileAwBinding](../models/deploymentprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.DeploymentProfileEffect](../models/deploymentprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.DeploymentProfileAwGrant](../models/deploymentprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileawbinding.md b/client-sdks/platform/typescript/docs/models/deploymentprofileawbinding.md deleted file mode 100644 index d1d6c7e72..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentProfileAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentProfileAwBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `resource` | [models.DeploymentProfileAwResource](../models/deploymentprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.DeploymentProfileAwStack](../models/deploymentprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileawgrant.md b/client-sdks/platform/typescript/docs/models/deploymentprofileawgrant.md deleted file mode 100644 index 817d6abba..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentProfileAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentProfileAwGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileawresource.md b/client-sdks/platform/typescript/docs/models/deploymentprofileawresource.md deleted file mode 100644 index 3cb8ca1b4..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileawresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentProfileAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentProfileAwResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAwResource = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileawstack.md b/client-sdks/platform/typescript/docs/models/deploymentprofileawstack.md deleted file mode 100644 index 20186ebad..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileawstack.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentProfileAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { DeploymentProfileAwStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAwStack = { - resources: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileazure.md b/client-sdks/platform/typescript/docs/models/deploymentprofileazure.md deleted file mode 100644 index f3b706a2e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentProfileAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentProfileAzure } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `binding` | [models.DeploymentProfileAzureBinding](../models/deploymentprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentProfileAzureGrant](../models/deploymentprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/deploymentprofileazurebinding.md deleted file mode 100644 index 2cf6bb8ac..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentProfileAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentProfileAzureBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `resource` | [models.DeploymentProfileAzureResource](../models/deploymentprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.DeploymentProfileAzureStack](../models/deploymentprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/deploymentprofileazuregrant.md deleted file mode 100644 index cdab8b12a..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentProfileAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentProfileAzureGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileazureresource.md b/client-sdks/platform/typescript/docs/models/deploymentprofileazureresource.md deleted file mode 100644 index 9bbea435e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentProfileAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentProfileAzureResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileazurestack.md b/client-sdks/platform/typescript/docs/models/deploymentprofileazurestack.md deleted file mode 100644 index 764297ef2..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentProfileAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { DeploymentProfileAzureStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/deploymentprofileconditionresource.md deleted file mode 100644 index d3c6cec62..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentProfileConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentProfileConditionResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/deploymentprofileconditionstack.md deleted file mode 100644 index 3a682d747..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentProfileConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { DeploymentProfileConditionStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileeffect.md b/client-sdks/platform/typescript/docs/models/deploymentprofileeffect.md deleted file mode 100644 index a5d8f9645..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentProfileEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { DeploymentProfileEffect } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileEffect = "Deny"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofilegcp.md b/client-sdks/platform/typescript/docs/models/deploymentprofilegcp.md deleted file mode 100644 index 080c0b7a5..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofilegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# DeploymentProfileGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { DeploymentProfileGcp } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `binding` | [models.DeploymentProfileGcpBinding](../models/deploymentprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.DeploymentProfileGcpGrant](../models/deploymentprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/deploymentprofilegcpbinding.md deleted file mode 100644 index a33c8944e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# DeploymentProfileGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { DeploymentProfileGcpBinding } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `resource` | [models.DeploymentProfileGcpResource](../models/deploymentprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.DeploymentProfileGcpStack](../models/deploymentprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/deploymentprofilegcpgrant.md deleted file mode 100644 index b7e351845..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# DeploymentProfileGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { DeploymentProfileGcpGrant } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/deploymentprofilegcpresource.md deleted file mode 100644 index ac93f41fa..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentProfileGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentProfileGcpResource } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `condition` | *models.DeploymentProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/deploymentprofilegcpstack.md deleted file mode 100644 index b161e0f69..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofilegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentProfileGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { DeploymentProfileGcpStack } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfileGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | -| `condition` | *models.DeploymentProfileStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileplatforms.md b/client-sdks/platform/typescript/docs/models/deploymentprofileplatforms.md deleted file mode 100644 index 30082868f..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# DeploymentProfilePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { DeploymentProfilePlatforms } from "@alienplatform/platform-api/models"; - -let value: DeploymentProfilePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `aws` | [models.DeploymentProfileAw](../models/deploymentprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.DeploymentProfileAzure](../models/deploymentprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.DeploymentProfileGcp](../models/deploymentprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentprofileresourceconditionunion.md deleted file mode 100644 index 4cc57c5b4..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentProfileResourceConditionUnion - - -## Supported Types - -### `models.DeploymentProfileConditionResource` - -```typescript -const value: models.DeploymentProfileConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/deploymentprofilestackconditionunion.md deleted file mode 100644 index a972b2b84..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofilestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# DeploymentProfileStackConditionUnion - - -## Supported Types - -### `models.DeploymentProfileConditionStack` - -```typescript -const value: models.DeploymentProfileConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentprofileunion.md b/client-sdks/platform/typescript/docs/models/deploymentprofileunion.md deleted file mode 100644 index 3145219a2..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprofileunion.md +++ /dev/null @@ -1,24 +0,0 @@ -# DeploymentProfileUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.DeploymentProfile` - -```typescript -const value: models.DeploymentProfile = { - description: - "across unto comfortable meh kookily paltry hover while intensely", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentprovidedby.md b/client-sdks/platform/typescript/docs/models/deploymentprovidedby.md deleted file mode 100644 index 1daba96f3..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentprovidedby.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentProvidedBy - -Who can provide a stack input value. - -## Example Usage - -```typescript -import { DeploymentProvidedBy } from "@alienplatform/platform-api/models"; - -let value: DeploymentProvidedBy = "developer"; -``` - -## Values - -```typescript -"developer" | "deployer" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentruntimemetadata.md b/client-sdks/platform/typescript/docs/models/deploymentruntimemetadata.md index 8313fe7e6..cd4e0f7c9 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/deploymentruntimemetadata.md @@ -16,5 +16,7 @@ let value: DeploymentRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.DeploymentPendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.DeploymentPreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.DeploymentSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupconfig.md b/client-sdks/platform/typescript/docs/models/deploymentsetupconfig.md index 660afbdc9..3b5dfaa71 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentsetupconfig.md +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupconfig.md @@ -13,7 +13,9 @@ let value: DeploymentSetupConfig = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }; @@ -27,4 +29,4 @@ let value: DeploymentSetupConfig = { | `policy` | [models.DeploymentSetupPolicy](../models/deploymentsetuppolicy.md) | :heavy_check_mark: | N/A | | `environmentVariables` | [models.EnvironmentVariableConfig](../models/environmentvariableconfig.md)[] | :heavy_check_mark: | N/A | | `inputValues` | Record | :heavy_minus_sign: | N/A | -| `publicSubdomain` | *string* | :heavy_minus_sign: | Operator-pinned deployment subdomain for this setup token. | \ No newline at end of file +| `publicSubdomain` | *string* | :heavy_minus_sign: | Operator-pinned deployment subdomain for this setup token. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomains1.md b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomains1.md new file mode 100644 index 000000000..daed03e82 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomains1.md @@ -0,0 +1,20 @@ +# DeploymentSetupStackSettingsPolicyFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { DeploymentSetupStackSettingsPolicyFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: DeploymentSetupStackSettingsPolicyFailureDomains1 = { + spread: 834872, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomains2.md b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomains2.md new file mode 100644 index 000000000..da3d207bf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomains2.md @@ -0,0 +1,20 @@ +# DeploymentSetupStackSettingsPolicyFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { DeploymentSetupStackSettingsPolicyFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: DeploymentSetupStackSettingsPolicyFailureDomains2 = { + spread: 479279, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion1.md new file mode 100644 index 000000000..c4afe9c54 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion1.md @@ -0,0 +1,18 @@ +# DeploymentSetupStackSettingsPolicyFailureDomainsUnion1 + + +## Supported Types + +### `models.DeploymentSetupStackSettingsPolicyFailureDomains1` + +```typescript +const value: models.DeploymentSetupStackSettingsPolicyFailureDomains1 = { + spread: 834872, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion2.md new file mode 100644 index 000000000..4499f2866 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicyfailuredomainsunion2.md @@ -0,0 +1,18 @@ +# DeploymentSetupStackSettingsPolicyFailureDomainsUnion2 + + +## Supported Types + +### `models.DeploymentSetupStackSettingsPolicyFailureDomains2` + +```typescript +const value: models.DeploymentSetupStackSettingsPolicyFailureDomains2 = { + spread: 479279, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsautoscale.md b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsautoscale.md index 92a0235a6..f3d6fdb35 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsautoscale.md @@ -14,9 +14,10 @@ let value: DeploymentSetupStackSettingsPolicyPoolsAutoscale = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `max` | *number* | :heavy_check_mark: | Maximum machine count. | -| `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `failureDomains` | *models.DeploymentSetupStackSettingsPolicyFailureDomainsUnion2* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `max` | *number* | :heavy_check_mark: | Maximum machine count. | +| `min` | *number* | :heavy_check_mark: | Minimum machine count. | +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsfixed.md b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsfixed.md index b259684b4..3bdd7b2c2 100644 --- a/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupstacksettingspolicypoolsfixed.md @@ -13,8 +13,9 @@ let value: DeploymentSetupStackSettingsPolicyPoolsFixed = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `failureDomains` | *models.DeploymentSetupStackSettingsPolicyFailureDomainsUnion1* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/deploymentsetupupdateauthorization.md new file mode 100644 index 000000000..64af13732 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupupdateauthorization.md @@ -0,0 +1,31 @@ +# DeploymentSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { DeploymentSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: DeploymentSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 933795, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/deploymentsetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/deploymentsetupupdateauthorizationunion.md new file mode 100644 index 000000000..e4513063d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/deploymentsetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# DeploymentSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.DeploymentSetupUpdateAuthorization` + +```typescript +const value: models.DeploymentSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 933795, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/deploymentsupportedplatform.md b/client-sdks/platform/typescript/docs/models/deploymentsupportedplatform.md deleted file mode 100644 index 543070b1e..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentsupportedplatform.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentSupportedPlatform - -Represents the target cloud platform. - -## Example Usage - -```typescript -import { DeploymentSupportedPlatform } from "@alienplatform/platform-api/models"; - -let value: DeploymentSupportedPlatform = "test"; -``` - -## Values - -```typescript -"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymenttypeboolean.md b/client-sdks/platform/typescript/docs/models/deploymenttypeboolean.md deleted file mode 100644 index 6e6f5f621..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymenttypeboolean.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentTypeBoolean - -## Example Usage - -```typescript -import { DeploymentTypeBoolean } from "@alienplatform/platform-api/models"; - -let value: DeploymentTypeBoolean = "boolean"; -``` - -## Values - -```typescript -"boolean" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymenttypeenvenum.md b/client-sdks/platform/typescript/docs/models/deploymenttypeenvenum.md deleted file mode 100644 index 869a7e559..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymenttypeenvenum.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentTypeEnvEnum - -Environment variable handling for a stack input mapping. - -## Example Usage - -```typescript -import { DeploymentTypeEnvEnum } from "@alienplatform/platform-api/models"; - -let value: DeploymentTypeEnvEnum = "plain"; -``` - -## Values - -```typescript -"plain" | "secret" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymenttypenumber.md b/client-sdks/platform/typescript/docs/models/deploymenttypenumber.md deleted file mode 100644 index a8d7c7a21..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymenttypenumber.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentTypeNumber - -## Example Usage - -```typescript -import { DeploymentTypeNumber } from "@alienplatform/platform-api/models"; - -let value: DeploymentTypeNumber = "number"; -``` - -## Values - -```typescript -"number" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymenttypestring.md b/client-sdks/platform/typescript/docs/models/deploymenttypestring.md deleted file mode 100644 index e6b2e4361..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymenttypestring.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentTypeString - -## Example Usage - -```typescript -import { DeploymentTypeString } from "@alienplatform/platform-api/models"; - -let value: DeploymentTypeString = "string"; -``` - -## Values - -```typescript -"string" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymenttypestringlist.md b/client-sdks/platform/typescript/docs/models/deploymenttypestringlist.md deleted file mode 100644 index e72dc9078..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymenttypestringlist.md +++ /dev/null @@ -1,15 +0,0 @@ -# DeploymentTypeStringList - -## Example Usage - -```typescript -import { DeploymentTypeStringList } from "@alienplatform/platform-api/models"; - -let value: DeploymentTypeStringList = "stringList"; -``` - -## Values - -```typescript -"stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymenttypeunion.md b/client-sdks/platform/typescript/docs/models/deploymenttypeunion.md deleted file mode 100644 index 0a42e1a12..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymenttypeunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentTypeUnion - - -## Supported Types - -### `models.DeploymentTypeEnvEnum` - -```typescript -const value: models.DeploymentTypeEnvEnum = "secret"; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/deploymentvalidation.md b/client-sdks/platform/typescript/docs/models/deploymentvalidation.md deleted file mode 100644 index 00e595113..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentvalidation.md +++ /dev/null @@ -1,25 +0,0 @@ -# DeploymentValidation - -Portable stack input validation constraints. - -## Example Usage - -```typescript -import { DeploymentValidation } from "@alienplatform/platform-api/models"; - -let value: DeploymentValidation = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | -| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | -| `max` | *string* | :heavy_minus_sign: | Maximum number. | -| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | -| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | -| `min` | *string* | :heavy_minus_sign: | Minimum number. | -| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | -| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | -| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | -| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/deploymentvalidationunion.md b/client-sdks/platform/typescript/docs/models/deploymentvalidationunion.md deleted file mode 100644 index 583bedc8f..000000000 --- a/client-sdks/platform/typescript/docs/models/deploymentvalidationunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# DeploymentValidationUnion - - -## Supported Types - -### `models.DeploymentValidation` - -```typescript -const value: models.DeploymentValidation = {}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/errorfailed.md b/client-sdks/platform/typescript/docs/models/errorfailed.md deleted file mode 100644 index 3975b4dcc..000000000 --- a/client-sdks/platform/typescript/docs/models/errorfailed.md +++ /dev/null @@ -1,34 +0,0 @@ -# ErrorFailed - -Canonical error container that provides a structured way to represent errors -with rich metadata including error codes, human-readable messages, context, -and chaining capabilities for error propagation. - -This struct is designed to be both machine-readable and user-friendly, -supporting serialization for API responses and detailed error reporting -in distributed systems. - -## Example Usage - -```typescript -import { ErrorFailed } from "@alienplatform/platform-api/models"; - -let value: ErrorFailed = { - code: "", - internal: true, - message: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | -| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | -| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | -| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | -| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | -| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | -| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | -| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/errornextstate.md b/client-sdks/platform/typescript/docs/models/errornextstate.md deleted file mode 100644 index 27b4d6de1..000000000 --- a/client-sdks/platform/typescript/docs/models/errornextstate.md +++ /dev/null @@ -1,34 +0,0 @@ -# ErrorNextState - -Canonical error container that provides a structured way to represent errors -with rich metadata including error codes, human-readable messages, context, -and chaining capabilities for error propagation. - -This struct is designed to be both machine-readable and user-friendly, -supporting serialization for API responses and detailed error reporting -in distributed systems. - -## Example Usage - -```typescript -import { ErrorNextState } from "@alienplatform/platform-api/models"; - -let value: ErrorNextState = { - code: "", - internal: false, - message: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | -| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | -| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | -| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | -| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | -| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | -| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | -| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/event.md b/client-sdks/platform/typescript/docs/models/event.md index 4088af26d..bb39e8440 100644 --- a/client-sdks/platform/typescript/docs/models/event.md +++ b/client-sdks/platform/typescript/docs/models/event.md @@ -31,7 +31,7 @@ let value: Event = { | `releaseId` | *string* | :heavy_minus_sign: | Unique identifier for the release. | rel_WbhQgksrawSKIpEN0NAssHX9 | | `debugSessionId` | *string* | :heavy_minus_sign: | Unique identifier for the debug session. | dbg_HOXmkmT9UPYlsnxqSNlEGoXL | | `data` | *models.EventDataUnion* | :heavy_check_mark: | N/A | | -| `state` | *models.State* | :heavy_check_mark: | Represents the state of an event | | +| `state` | *models.EventStateUnion* | :heavy_check_mark: | Represents the state of an event | | | `projectId` | *string* | :heavy_check_mark: | Unique identifier for the project. | prj_mcytp6z3j91f7tn5ryqsfwtr | | `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | -| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | \ No newline at end of file +| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | diff --git a/client-sdks/platform/typescript/docs/models/eventactor1.md b/client-sdks/platform/typescript/docs/models/eventactor1.md new file mode 100644 index 000000000..0044de6fe --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventactor1.md @@ -0,0 +1,22 @@ +# EventActor1 + +Authenticated principal that requested a deployment intent event. + +## Example Usage + +```typescript +import { EventActor1 } from "@alienplatform/platform-api/models"; + +let value: EventActor1 = { + id: "", + kind: "serviceAccount", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `email` | *string* | :heavy_minus_sign: | User email when the principal is a user. | +| `id` | *string* | :heavy_check_mark: | Stable user or service-account identifier. | +| `kind` | [models.EventKind1](../models/eventkind1.md) | :heavy_check_mark: | Type of authenticated principal that requested an event. | diff --git a/client-sdks/platform/typescript/docs/models/eventactor2.md b/client-sdks/platform/typescript/docs/models/eventactor2.md new file mode 100644 index 000000000..8a43385f3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventactor2.md @@ -0,0 +1,22 @@ +# EventActor2 + +Authenticated principal that requested a deployment intent event. + +## Example Usage + +```typescript +import { EventActor2 } from "@alienplatform/platform-api/models"; + +let value: EventActor2 = { + id: "", + kind: "user", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `email` | *string* | :heavy_minus_sign: | User email when the principal is a user. | +| `id` | *string* | :heavy_check_mark: | Stable user or service-account identifier. | +| `kind` | [models.EventKind2](../models/eventkind2.md) | :heavy_check_mark: | Type of authenticated principal that requested an event. | diff --git a/client-sdks/platform/typescript/docs/models/eventactorunion1.md b/client-sdks/platform/typescript/docs/models/eventactorunion1.md new file mode 100644 index 000000000..b1e7b07c6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventactorunion1.md @@ -0,0 +1,19 @@ +# EventActorUnion1 + + +## Supported Types + +### `models.EventActor1` + +```typescript +const value: models.EventActor1 = { + id: "", + kind: "serviceAccount", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventactorunion2.md b/client-sdks/platform/typescript/docs/models/eventactorunion2.md new file mode 100644 index 000000000..761ba427f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventactorunion2.md @@ -0,0 +1,19 @@ +# EventActorUnion2 + + +## Supported Types + +### `models.EventActor2` + +```typescript +const value: models.EventActor2 = { + id: "", + kind: "user", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventdataassumingrole.md b/client-sdks/platform/typescript/docs/models/eventdataassumingrole.md new file mode 100644 index 000000000..3238444bd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataassumingrole.md @@ -0,0 +1,19 @@ +# EventDataAssumingRole + +## Example Usage + +```typescript +import { EventDataAssumingRole } from "@alienplatform/platform-api/models"; + +let value: EventDataAssumingRole = { + roleArn: "", + type: "AssumingRole", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `roleArn` | *string* | :heavy_check_mark: | ARN of the role to assume | +| `type` | *"AssumingRole"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatabuildingimage.md b/client-sdks/platform/typescript/docs/models/eventdatabuildingimage.md new file mode 100644 index 000000000..90ab01cd4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatabuildingimage.md @@ -0,0 +1,19 @@ +# EventDataBuildingImage + +## Example Usage + +```typescript +import { EventDataBuildingImage } from "@alienplatform/platform-api/models"; + +let value: EventDataBuildingImage = { + image: "https://loremflickr.com/1460/1419?lock=7755903317896576", + type: "BuildingImage", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `image` | *string* | :heavy_check_mark: | Name of the image being built | +| `type` | *"BuildingImage"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatabuildingresource.md b/client-sdks/platform/typescript/docs/models/eventdatabuildingresource.md new file mode 100644 index 000000000..884910189 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatabuildingresource.md @@ -0,0 +1,22 @@ +# EventDataBuildingResource + +## Example Usage + +```typescript +import { EventDataBuildingResource } from "@alienplatform/platform-api/models"; + +let value: EventDataBuildingResource = { + resourceName: "", + resourceType: "", + type: "BuildingResource", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `relatedResources` | *string*[] | :heavy_minus_sign: | All resource names sharing this build (for deduped container groups) | +| `resourceName` | *string* | :heavy_check_mark: | Name of the resource being built | +| `resourceType` | *string* | :heavy_check_mark: | Type of the resource: "worker", "container" | +| `type` | *"BuildingResource"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatabuildingstack.md b/client-sdks/platform/typescript/docs/models/eventdatabuildingstack.md new file mode 100644 index 000000000..9b614a325 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatabuildingstack.md @@ -0,0 +1,19 @@ +# EventDataBuildingStack + +## Example Usage + +```typescript +import { EventDataBuildingStack } from "@alienplatform/platform-api/models"; + +let value: EventDataBuildingStack = { + stack: "", + type: "BuildingStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `stack` | *string* | :heavy_check_mark: | Name of the stack being built | +| `type` | *"BuildingStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatacleaningupenvironment.md b/client-sdks/platform/typescript/docs/models/eventdatacleaningupenvironment.md new file mode 100644 index 000000000..5c1e39d16 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatacleaningupenvironment.md @@ -0,0 +1,21 @@ +# EventDataCleaningUpEnvironment + +## Example Usage + +```typescript +import { EventDataCleaningUpEnvironment } from "@alienplatform/platform-api/models"; + +let value: EventDataCleaningUpEnvironment = { + stackName: "", + strategyName: "", + type: "CleaningUpEnvironment", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being cleaned up | +| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used for cleanup | +| `type` | *"CleaningUpEnvironment"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatacleaningupstack.md b/client-sdks/platform/typescript/docs/models/eventdatacleaningupstack.md new file mode 100644 index 000000000..4d2454684 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatacleaningupstack.md @@ -0,0 +1,21 @@ +# EventDataCleaningUpStack + +## Example Usage + +```typescript +import { EventDataCleaningUpStack } from "@alienplatform/platform-api/models"; + +let value: EventDataCleaningUpStack = { + stackName: "", + strategyName: "", + type: "CleaningUpStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being cleaned up | +| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used for cleanup | +| `type` | *"CleaningUpStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatacompilingcode.md b/client-sdks/platform/typescript/docs/models/eventdatacompilingcode.md new file mode 100644 index 000000000..01c86fc14 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatacompilingcode.md @@ -0,0 +1,20 @@ +# EventDataCompilingCode + +## Example Usage + +```typescript +import { EventDataCompilingCode } from "@alienplatform/platform-api/models"; + +let value: EventDataCompilingCode = { + language: "", + type: "CompilingCode", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `language` | *string* | :heavy_check_mark: | Language being compiled (rust, typescript, etc.) | +| `progress` | *string* | :heavy_minus_sign: | Current progress/status line from the build output | +| `type` | *"CompilingCode"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatacreatingrelease.md b/client-sdks/platform/typescript/docs/models/eventdatacreatingrelease.md new file mode 100644 index 000000000..2baaa92e7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatacreatingrelease.md @@ -0,0 +1,19 @@ +# EventDataCreatingRelease + +## Example Usage + +```typescript +import { EventDataCreatingRelease } from "@alienplatform/platform-api/models"; + +let value: EventDataCreatingRelease = { + project: "", + type: "CreatingRelease", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------- | ------------------- | ------------------- | ------------------- | +| `project` | *string* | :heavy_check_mark: | Project name | +| `type` | *"CreatingRelease"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadebuggingagent.md b/client-sdks/platform/typescript/docs/models/eventdatadebuggingagent.md new file mode 100644 index 000000000..f0ae3ee02 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadebuggingagent.md @@ -0,0 +1,21 @@ +# EventDataDebuggingAgent + +## Example Usage + +```typescript +import { EventDataDebuggingAgent } from "@alienplatform/platform-api/models"; + +let value: EventDataDebuggingAgent = { + agentId: "", + debugSessionId: "", + type: "DebuggingAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being debugged | +| `debugSessionId` | *string* | :heavy_check_mark: | ID of the debug session | +| `type` | *"DebuggingAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeletingagent.md b/client-sdks/platform/typescript/docs/models/eventdatadeletingagent.md new file mode 100644 index 000000000..d7a7714a7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeletingagent.md @@ -0,0 +1,21 @@ +# EventDataDeletingAgent + +## Example Usage + +```typescript +import { EventDataDeletingAgent } from "@alienplatform/platform-api/models"; + +let value: EventDataDeletingAgent = { + agentId: "", + releaseId: "", + type: "DeletingAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being deleted | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release that was running on the agent | +| `type` | *"DeletingAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeletingcloudformationstack.md b/client-sdks/platform/typescript/docs/models/eventdatadeletingcloudformationstack.md new file mode 100644 index 000000000..23bc283b6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeletingcloudformationstack.md @@ -0,0 +1,21 @@ +# EventDataDeletingCloudFormationStack + +## Example Usage + +```typescript +import { EventDataDeletingCloudFormationStack } from "@alienplatform/platform-api/models"; + +let value: EventDataDeletingCloudFormationStack = { + cfnStackName: "", + currentStatus: "", + type: "DeletingCloudFormationStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | +| `currentStatus` | *string* | :heavy_check_mark: | Current stack status | +| `type` | *"DeletingCloudFormationStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeployingcloudformationstack.md b/client-sdks/platform/typescript/docs/models/eventdatadeployingcloudformationstack.md new file mode 100644 index 000000000..a2f1131b3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeployingcloudformationstack.md @@ -0,0 +1,21 @@ +# EventDataDeployingCloudFormationStack + +## Example Usage + +```typescript +import { EventDataDeployingCloudFormationStack } from "@alienplatform/platform-api/models"; + +let value: EventDataDeployingCloudFormationStack = { + cfnStackName: "", + currentStatus: "", + type: "DeployingCloudFormationStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | +| `currentStatus` | *string* | :heavy_check_mark: | Current stack status | +| `type` | *"DeployingCloudFormationStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeployingstack.md b/client-sdks/platform/typescript/docs/models/eventdatadeployingstack.md new file mode 100644 index 000000000..b1903c295 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeployingstack.md @@ -0,0 +1,19 @@ +# EventDataDeployingStack + +## Example Usage + +```typescript +import { EventDataDeployingStack } from "@alienplatform/platform-api/models"; + +let value: EventDataDeployingStack = { + stackName: "", + type: "DeployingStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being deployed | +| `type` | *"DeployingStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentcreated.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentcreated.md new file mode 100644 index 000000000..91f55d426 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentcreated.md @@ -0,0 +1,22 @@ +# EventDataDeploymentCreated + +## Example Usage + +```typescript +import { EventDataDeploymentCreated } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentCreated = { + deploymentGroupId: "", + deploymentId: "", + type: "DeploymentCreated", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `deploymentGroupId` | *string* | :heavy_check_mark: | ID of the deployment group this slot belongs to | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment that was created | +| `releaseId` | *string* | :heavy_minus_sign: | Initial release the slot was created with, if any | +| `type` | *"DeploymentCreated"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentdegraded.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentdegraded.md new file mode 100644 index 000000000..8c8ca0db1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentdegraded.md @@ -0,0 +1,25 @@ +# EventDataDeploymentDegraded + +## Example Usage + +```typescript +import { EventDataDeploymentDegraded } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentDegraded = { + deploymentId: "", + error: { + code: "", + internal: true, + message: "", + }, + type: "DeploymentDegraded", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `error` | [models.EventDataError2](../models/eventdataerror2.md) | :heavy_check_mark: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | +| `type` | *"DeploymentDegraded"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentdeleted.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentdeleted.md new file mode 100644 index 000000000..7294baba5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentdeleted.md @@ -0,0 +1,19 @@ +# EventDataDeploymentDeleted + +## Example Usage + +```typescript +import { EventDataDeploymentDeleted } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentDeleted = { + deploymentId: "", + type: "DeploymentDeleted", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment that was deleted | +| `type` | *"DeploymentDeleted"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentdeletionrequested.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentdeletionrequested.md new file mode 100644 index 000000000..1ed4a8dd3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentdeletionrequested.md @@ -0,0 +1,19 @@ +# EventDataDeploymentDeletionRequested + +## Example Usage + +```typescript +import { EventDataDeploymentDeletionRequested } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentDeletionRequested = { + deploymentId: "", + type: "DeploymentDeletionRequested", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `type` | *"DeploymentDeletionRequested"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentenvironmentupdated.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentenvironmentupdated.md new file mode 100644 index 000000000..b383bf959 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentenvironmentupdated.md @@ -0,0 +1,26 @@ +# EventDataDeploymentEnvironmentUpdated + +## Example Usage + +```typescript +import { EventDataDeploymentEnvironmentUpdated } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentEnvironmentUpdated = { + changedKeys: [ + "", + "", + "", + ], + deploymentId: "", + type: "DeploymentEnvironmentUpdated", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `actor` | *models.EventActorUnion2* | :heavy_minus_sign: | N/A | +| `changedKeys` | *string*[] | :heavy_check_mark: | Names of the environment variables that changed (added, removed, or modified) | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `type` | *"DeploymentEnvironmentUpdated"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentfailed.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentfailed.md new file mode 100644 index 000000000..0c9f311d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentfailed.md @@ -0,0 +1,28 @@ +# EventDataDeploymentFailed + +## Example Usage + +```typescript +import { EventDataDeploymentFailed } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentFailed = { + deploymentId: "", + error: { + code: "", + internal: true, + message: "", + }, + phase: "deleting", + type: "DeploymentFailed", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `attemptedReleaseId` | *string* | :heavy_minus_sign: | ID of the release the platform was trying to deploy, if known | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `error` | [models.EventDataError1](../models/eventdataerror1.md) | :heavy_check_mark: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | +| `phase` | [models.EventPhase](../models/eventphase.md) | :heavy_check_mark: | Phase of a deployment at which a failure occurred.

Derived from the source deployment status: `preflights-failed` →
`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →
`Updating`, `delete-failed` → `Deleting`.
`refresh-failed` is modelled separately via `DeploymentDegraded`. | +| `type` | *"DeploymentFailed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentrecovered.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentrecovered.md new file mode 100644 index 000000000..0fc1460fb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentrecovered.md @@ -0,0 +1,21 @@ +# EventDataDeploymentRecovered + +## Example Usage + +```typescript +import { EventDataDeploymentRecovered } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentRecovered = { + deploymentId: "", + releaseId: "", + type: "DeploymentRecovered", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release that is now live | +| `type` | *"DeploymentRecovered"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentredeployrequested.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentredeployrequested.md new file mode 100644 index 000000000..eb0c365d0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentredeployrequested.md @@ -0,0 +1,21 @@ +# EventDataDeploymentRedeployRequested + +## Example Usage + +```typescript +import { EventDataDeploymentRedeployRequested } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentRedeployRequested = { + deploymentId: "", + releaseId: "", + type: "DeploymentRedeployRequested", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release being redeployed | +| `type` | *"DeploymentRedeployRequested"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleased.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleased.md new file mode 100644 index 000000000..c6ff99140 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleased.md @@ -0,0 +1,22 @@ +# EventDataDeploymentReleased + +## Example Usage + +```typescript +import { EventDataDeploymentReleased } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentReleased = { + deploymentId: "", + releaseId: "", + type: "DeploymentReleased", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `previousReleaseId` | *string* | :heavy_minus_sign: | ID of the release that was previously live, if any | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release that is now live | +| `type` | *"DeploymentReleased"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleasepinned.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleasepinned.md new file mode 100644 index 000000000..c52e1abac --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleasepinned.md @@ -0,0 +1,22 @@ +# EventDataDeploymentReleasePinned + +## Example Usage + +```typescript +import { EventDataDeploymentReleasePinned } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentReleasePinned = { + deploymentId: "", + pinnedReleaseId: "", + type: "DeploymentReleasePinned", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `pinnedReleaseId` | *string* | :heavy_check_mark: | ID of the release that is now pinned | +| `previousPinnedReleaseId` | *string* | :heavy_minus_sign: | ID of the previously pinned release, if any | +| `type` | *"DeploymentReleasePinned"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleaseunpinned.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleaseunpinned.md new file mode 100644 index 000000000..eda1a7217 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentreleaseunpinned.md @@ -0,0 +1,21 @@ +# EventDataDeploymentReleaseUnpinned + +## Example Usage + +```typescript +import { EventDataDeploymentReleaseUnpinned } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentReleaseUnpinned = { + deploymentId: "", + previousPinnedReleaseId: "", + type: "DeploymentReleaseUnpinned", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `previousPinnedReleaseId` | *string* | :heavy_check_mark: | ID of the release that was previously pinned | +| `type` | *"DeploymentReleaseUnpinned"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadeploymentretryrequested.md b/client-sdks/platform/typescript/docs/models/eventdatadeploymentretryrequested.md new file mode 100644 index 000000000..92e964d05 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadeploymentretryrequested.md @@ -0,0 +1,22 @@ +# EventDataDeploymentRetryRequested + +## Example Usage + +```typescript +import { EventDataDeploymentRetryRequested } from "@alienplatform/platform-api/models"; + +let value: EventDataDeploymentRetryRequested = { + deploymentId: "", + type: "DeploymentRetryRequested", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `actor` | *models.EventActorUnion1* | :heavy_minus_sign: | N/A | +| `attemptedReleaseId` | *string* | :heavy_minus_sign: | ID of the release that the failed attempt was targeting, if known | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `previousError` | *models.EventPreviousErrorUnion* | :heavy_minus_sign: | N/A | +| `type` | *"DeploymentRetryRequested"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatadownloadingalienruntime.md b/client-sdks/platform/typescript/docs/models/eventdatadownloadingalienruntime.md new file mode 100644 index 000000000..559381b6b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatadownloadingalienruntime.md @@ -0,0 +1,21 @@ +# EventDataDownloadingAlienRuntime + +## Example Usage + +```typescript +import { EventDataDownloadingAlienRuntime } from "@alienplatform/platform-api/models"; + +let value: EventDataDownloadingAlienRuntime = { + targetTriple: "", + type: "DownloadingAlienRuntime", + url: "https://unlawful-skyline.com", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `targetTriple` | *string* | :heavy_check_mark: | Target triple for the runtime | +| `type` | *"DownloadingAlienRuntime"* | :heavy_check_mark: | N/A | +| `url` | *string* | :heavy_check_mark: | URL being downloaded from | diff --git a/client-sdks/platform/typescript/docs/models/eventdataemptyingbuckets.md b/client-sdks/platform/typescript/docs/models/eventdataemptyingbuckets.md new file mode 100644 index 000000000..9a7af836e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataemptyingbuckets.md @@ -0,0 +1,19 @@ +# EventDataEmptyingBuckets + +## Example Usage + +```typescript +import { EventDataEmptyingBuckets } from "@alienplatform/platform-api/models"; + +let value: EventDataEmptyingBuckets = { + bucketNames: [], + type: "EmptyingBuckets", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | +| `bucketNames` | *string*[] | :heavy_check_mark: | Names of the S3 buckets being emptied | +| `type` | *"EmptyingBuckets"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdataensuringdockerrepository.md b/client-sdks/platform/typescript/docs/models/eventdataensuringdockerrepository.md new file mode 100644 index 000000000..ebab8d867 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataensuringdockerrepository.md @@ -0,0 +1,19 @@ +# EventDataEnsuringDockerRepository + +## Example Usage + +```typescript +import { EventDataEnsuringDockerRepository } from "@alienplatform/platform-api/models"; + +let value: EventDataEnsuringDockerRepository = { + repositoryName: "", + type: "EnsuringDockerRepository", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `repositoryName` | *string* | :heavy_check_mark: | Name of the docker repository | +| `type` | *"EnsuringDockerRepository"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdataerror1.md b/client-sdks/platform/typescript/docs/models/eventdataerror1.md new file mode 100644 index 000000000..1b7f6e299 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataerror1.md @@ -0,0 +1,34 @@ +# EventDataError1 + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventDataError1 } from "@alienplatform/platform-api/models"; + +let value: EventDataError1 = { + code: "", + internal: true, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventdataerror2.md b/client-sdks/platform/typescript/docs/models/eventdataerror2.md new file mode 100644 index 000000000..f9b93e1a2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataerror2.md @@ -0,0 +1,34 @@ +# EventDataError2 + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventDataError2 } from "@alienplatform/platform-api/models"; + +let value: EventDataError2 = { + code: "", + internal: false, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventdatafinished.md b/client-sdks/platform/typescript/docs/models/eventdatafinished.md new file mode 100644 index 000000000..79338c8f7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatafinished.md @@ -0,0 +1,17 @@ +# EventDataFinished + +## Example Usage + +```typescript +import { EventDataFinished } from "@alienplatform/platform-api/models"; + +let value: EventDataFinished = { + type: "Finished", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"Finished"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatageneratingcloudformationtemplate.md b/client-sdks/platform/typescript/docs/models/eventdatageneratingcloudformationtemplate.md new file mode 100644 index 000000000..1b3c6bf54 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatageneratingcloudformationtemplate.md @@ -0,0 +1,17 @@ +# EventDataGeneratingCloudFormationTemplate + +## Example Usage + +```typescript +import { EventDataGeneratingCloudFormationTemplate } from "@alienplatform/platform-api/models"; + +let value: EventDataGeneratingCloudFormationTemplate = { + type: "GeneratingCloudFormationTemplate", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `type` | *"GeneratingCloudFormationTemplate"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatageneratingtemplate.md b/client-sdks/platform/typescript/docs/models/eventdatageneratingtemplate.md new file mode 100644 index 000000000..1153b7402 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatageneratingtemplate.md @@ -0,0 +1,19 @@ +# EventDataGeneratingTemplate + +## Example Usage + +```typescript +import { EventDataGeneratingTemplate } from "@alienplatform/platform-api/models"; + +let value: EventDataGeneratingTemplate = { + platform: "", + type: "GeneratingTemplate", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `platform` | *string* | :heavy_check_mark: | Platform for which the template is being generated | +| `type` | *"GeneratingTemplate"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdataimportingstackstatefromcloudformation.md b/client-sdks/platform/typescript/docs/models/eventdataimportingstackstatefromcloudformation.md new file mode 100644 index 000000000..d01ea1ec6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataimportingstackstatefromcloudformation.md @@ -0,0 +1,19 @@ +# EventDataImportingStackStateFromCloudFormation + +## Example Usage + +```typescript +import { EventDataImportingStackStateFromCloudFormation } from "@alienplatform/platform-api/models"; + +let value: EventDataImportingStackStateFromCloudFormation = { + cfnStackName: "", + type: "ImportingStackStateFromCloudFormation", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | +| `type` | *"ImportingStackStateFromCloudFormation"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdataloadingconfiguration.md b/client-sdks/platform/typescript/docs/models/eventdataloadingconfiguration.md new file mode 100644 index 000000000..d8de61d28 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataloadingconfiguration.md @@ -0,0 +1,17 @@ +# EventDataLoadingConfiguration + +## Example Usage + +```typescript +import { EventDataLoadingConfiguration } from "@alienplatform/platform-api/models"; + +let value: EventDataLoadingConfiguration = { + type: "LoadingConfiguration", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `type` | *"LoadingConfiguration"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatapreparingenvironment.md b/client-sdks/platform/typescript/docs/models/eventdatapreparingenvironment.md new file mode 100644 index 000000000..50f9ef072 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatapreparingenvironment.md @@ -0,0 +1,19 @@ +# EventDataPreparingEnvironment + +## Example Usage + +```typescript +import { EventDataPreparingEnvironment } from "@alienplatform/platform-api/models"; + +let value: EventDataPreparingEnvironment = { + strategyName: "", + type: "PreparingEnvironment", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used | +| `type` | *"PreparingEnvironment"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdataprovisioningagent.md b/client-sdks/platform/typescript/docs/models/eventdataprovisioningagent.md new file mode 100644 index 000000000..37a44b311 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataprovisioningagent.md @@ -0,0 +1,21 @@ +# EventDataProvisioningAgent + +## Example Usage + +```typescript +import { EventDataProvisioningAgent } from "@alienplatform/platform-api/models"; + +let value: EventDataProvisioningAgent = { + agentId: "", + releaseId: "", + type: "ProvisioningAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being provisioned | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release being deployed to the agent | +| `type` | *"ProvisioningAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatapushingimage.md b/client-sdks/platform/typescript/docs/models/eventdatapushingimage.md new file mode 100644 index 000000000..43927bdbf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatapushingimage.md @@ -0,0 +1,20 @@ +# EventDataPushingImage + +## Example Usage + +```typescript +import { EventDataPushingImage } from "@alienplatform/platform-api/models"; + +let value: EventDataPushingImage = { + image: "https://picsum.photos/seed/3ETRvL33XQ/3838/1575", + type: "PushingImage", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `image` | *string* | :heavy_check_mark: | Name of the image being pushed | +| `progress` | *models.EventProgressUnion* | :heavy_minus_sign: | N/A | +| `type` | *"PushingImage"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatapushingresource.md b/client-sdks/platform/typescript/docs/models/eventdatapushingresource.md new file mode 100644 index 000000000..d59df3abc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatapushingresource.md @@ -0,0 +1,21 @@ +# EventDataPushingResource + +## Example Usage + +```typescript +import { EventDataPushingResource } from "@alienplatform/platform-api/models"; + +let value: EventDataPushingResource = { + resourceName: "", + resourceType: "", + type: "PushingResource", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `resourceName` | *string* | :heavy_check_mark: | Name of the resource being pushed | +| `resourceType` | *string* | :heavy_check_mark: | Type of the resource: "worker", "container" | +| `type` | *"PushingResource"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatapushingstack.md b/client-sdks/platform/typescript/docs/models/eventdatapushingstack.md new file mode 100644 index 000000000..ba114e9f9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatapushingstack.md @@ -0,0 +1,22 @@ +# EventDataPushingStack + +## Example Usage + +```typescript +import { EventDataPushingStack } from "@alienplatform/platform-api/models"; + +let value: EventDataPushingStack = { + platform: "", + stack: "", + type: "PushingStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `destination` | *string* | :heavy_minus_sign: | Human-readable destination for pushed images | +| `platform` | *string* | :heavy_check_mark: | Target platform | +| `stack` | *string* | :heavy_check_mark: | Name of the stack being pushed | +| `type` | *"PushingStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatarunningpreflights.md b/client-sdks/platform/typescript/docs/models/eventdatarunningpreflights.md new file mode 100644 index 000000000..6f45db8a8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatarunningpreflights.md @@ -0,0 +1,21 @@ +# EventDataRunningPreflights + +## Example Usage + +```typescript +import { EventDataRunningPreflights } from "@alienplatform/platform-api/models"; + +let value: EventDataRunningPreflights = { + platform: "", + stack: "", + type: "RunningPreflights", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `platform` | *string* | :heavy_check_mark: | Platform being targeted | +| `stack` | *string* | :heavy_check_mark: | Name of the stack being checked | +| `type` | *"RunningPreflights"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatarunningtestworker.md b/client-sdks/platform/typescript/docs/models/eventdatarunningtestworker.md new file mode 100644 index 000000000..3909c4f75 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatarunningtestworker.md @@ -0,0 +1,19 @@ +# EventDataRunningTestWorker + +## Example Usage + +```typescript +import { EventDataRunningTestWorker } from "@alienplatform/platform-api/models"; + +let value: EventDataRunningTestWorker = { + stackName: "", + type: "RunningTestWorker", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being tested | +| `type` | *"RunningTestWorker"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatasettingupplatformcontext.md b/client-sdks/platform/typescript/docs/models/eventdatasettingupplatformcontext.md new file mode 100644 index 000000000..5807a18c4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatasettingupplatformcontext.md @@ -0,0 +1,19 @@ +# EventDataSettingUpPlatformContext + +## Example Usage + +```typescript +import { EventDataSettingUpPlatformContext } from "@alienplatform/platform-api/models"; + +let value: EventDataSettingUpPlatformContext = { + platformName: "", + type: "SettingUpPlatformContext", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `platformName` | *string* | :heavy_check_mark: | Name of the platform (e.g., "AWS", "GCP") | +| `type` | *"SettingUpPlatformContext"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdatastackstep.md b/client-sdks/platform/typescript/docs/models/eventdatastackstep.md new file mode 100644 index 000000000..bee03a7ba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdatastackstep.md @@ -0,0 +1,33 @@ +# EventDataStackStep + +## Example Usage + +```typescript +import { EventDataStackStep } from "@alienplatform/platform-api/models"; + +let value: EventDataStackStep = { + nextState: { + platform: "kubernetes", + resourcePrefix: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + status: "pending", + type: "", + }, + }, + }, + type: "StackStep", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `nextState` | [models.EventNextState](../models/eventnextstate.md) | :heavy_check_mark: | Represents the collective state of all resources in a stack, including platform and pending actions. | +| `suggestedDelayMs` | *number* | :heavy_minus_sign: | An suggested duration to wait before executing the next step. | +| `type` | *"StackStep"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventdataunion.md b/client-sdks/platform/typescript/docs/models/eventdataunion.md index 8b1db163f..80520b8f8 100644 --- a/client-sdks/platform/typescript/docs/models/eventdataunion.md +++ b/client-sdks/platform/typescript/docs/models/eventdataunion.md @@ -3,123 +3,123 @@ ## Supported Types -### `models.DataLoadingConfiguration` +### `models.EventDataLoadingConfiguration` ```typescript -const value: models.DataLoadingConfiguration = { +const value: models.EventDataLoadingConfiguration = { type: "LoadingConfiguration", }; ``` -### `models.DataFinished` +### `models.EventDataFinished` ```typescript -const value: models.DataFinished = { +const value: models.EventDataFinished = { type: "Finished", }; ``` -### `models.DataBuildingStack` +### `models.EventDataBuildingStack` ```typescript -const value: models.DataBuildingStack = { +const value: models.EventDataBuildingStack = { stack: "", type: "BuildingStack", }; ``` -### `models.DataRunningPreflights` +### `models.EventDataRunningPreflights` ```typescript -const value: models.DataRunningPreflights = { +const value: models.EventDataRunningPreflights = { platform: "", stack: "", type: "RunningPreflights", }; ``` -### `models.DataDownloadingAlienRuntime` +### `models.EventDataDownloadingAlienRuntime` ```typescript -const value: models.DataDownloadingAlienRuntime = { +const value: models.EventDataDownloadingAlienRuntime = { targetTriple: "", type: "DownloadingAlienRuntime", - url: "https://dim-jellyfish.com/", + url: "https://unlawful-skyline.com", }; ``` -### `models.DataBuildingResource` +### `models.EventDataBuildingResource` ```typescript -const value: models.DataBuildingResource = { +const value: models.EventDataBuildingResource = { resourceName: "", resourceType: "", type: "BuildingResource", }; ``` -### `models.DataBuildingImage` +### `models.EventDataBuildingImage` ```typescript -const value: models.DataBuildingImage = { - image: "https://loremflickr.com/965/1538?lock=536245262441792", +const value: models.EventDataBuildingImage = { + image: "https://loremflickr.com/1460/1419?lock=7755903317896576", type: "BuildingImage", }; ``` -### `models.DataPushingImage` +### `models.EventDataPushingImage` ```typescript -const value: models.DataPushingImage = { - image: "https://picsum.photos/seed/bgd6b4HoNE/948/3236", +const value: models.EventDataPushingImage = { + image: "https://picsum.photos/seed/3ETRvL33XQ/3838/1575", type: "PushingImage", }; ``` -### `models.DataPushingStack` +### `models.EventDataPushingStack` ```typescript -const value: models.DataPushingStack = { +const value: models.EventDataPushingStack = { platform: "", stack: "", type: "PushingStack", }; ``` -### `models.DataPushingResource` +### `models.EventDataPushingResource` ```typescript -const value: models.DataPushingResource = { +const value: models.EventDataPushingResource = { resourceName: "", resourceType: "", type: "PushingResource", }; ``` -### `models.DataCreatingRelease` +### `models.EventDataCreatingRelease` ```typescript -const value: models.DataCreatingRelease = { +const value: models.EventDataCreatingRelease = { project: "", type: "CreatingRelease", }; ``` -### `models.DataCompilingCode` +### `models.EventDataCompilingCode` ```typescript -const value: models.DataCompilingCode = { +const value: models.EventDataCompilingCode = { language: "", type: "CompilingCode", }; ``` -### `models.DataStackStep` +### `models.EventDataStackStep` ```typescript -const value: models.DataStackStep = { +const value: models.EventDataStackStep = { nextState: { - platform: "test", + platform: "kubernetes", resourcePrefix: "", resources: { "key": { @@ -127,7 +127,7 @@ const value: models.DataStackStep = { id: "", type: "", }, - status: "running", + status: "pending", type: "", }, }, @@ -136,300 +136,301 @@ const value: models.DataStackStep = { }; ``` -### `models.DataGeneratingCloudFormationTemplate` +### `models.EventDataGeneratingCloudFormationTemplate` ```typescript -const value: models.DataGeneratingCloudFormationTemplate = { +const value: models.EventDataGeneratingCloudFormationTemplate = { type: "GeneratingCloudFormationTemplate", }; ``` -### `models.DataGeneratingTemplate` +### `models.EventDataGeneratingTemplate` ```typescript -const value: models.DataGeneratingTemplate = { +const value: models.EventDataGeneratingTemplate = { platform: "", type: "GeneratingTemplate", }; ``` -### `models.DataProvisioningAgent` +### `models.EventDataProvisioningAgent` ```typescript -const value: models.DataProvisioningAgent = { +const value: models.EventDataProvisioningAgent = { agentId: "", releaseId: "", type: "ProvisioningAgent", }; ``` -### `models.DataUpdatingAgent` +### `models.EventDataUpdatingAgent` ```typescript -const value: models.DataUpdatingAgent = { +const value: models.EventDataUpdatingAgent = { agentId: "", releaseId: "", type: "UpdatingAgent", }; ``` -### `models.DataDeletingAgent` +### `models.EventDataDeletingAgent` ```typescript -const value: models.DataDeletingAgent = { +const value: models.EventDataDeletingAgent = { agentId: "", releaseId: "", type: "DeletingAgent", }; ``` -### `models.DataDebuggingAgent` +### `models.EventDataDebuggingAgent` ```typescript -const value: models.DataDebuggingAgent = { +const value: models.EventDataDebuggingAgent = { agentId: "", debugSessionId: "", type: "DebuggingAgent", }; ``` -### `models.DataPreparingEnvironment` +### `models.EventDataPreparingEnvironment` ```typescript -const value: models.DataPreparingEnvironment = { +const value: models.EventDataPreparingEnvironment = { strategyName: "", type: "PreparingEnvironment", }; ``` -### `models.DataDeployingStack` +### `models.EventDataDeployingStack` ```typescript -const value: models.DataDeployingStack = { +const value: models.EventDataDeployingStack = { stackName: "", type: "DeployingStack", }; ``` -### `models.DataRunningTestWorker` +### `models.EventDataRunningTestWorker` ```typescript -const value: models.DataRunningTestWorker = { +const value: models.EventDataRunningTestWorker = { stackName: "", type: "RunningTestWorker", }; ``` -### `models.DataCleaningUpStack` +### `models.EventDataCleaningUpStack` ```typescript -const value: models.DataCleaningUpStack = { +const value: models.EventDataCleaningUpStack = { stackName: "", strategyName: "", type: "CleaningUpStack", }; ``` -### `models.DataCleaningUpEnvironment` +### `models.EventDataCleaningUpEnvironment` ```typescript -const value: models.DataCleaningUpEnvironment = { +const value: models.EventDataCleaningUpEnvironment = { stackName: "", strategyName: "", type: "CleaningUpEnvironment", }; ``` -### `models.DataSettingUpPlatformContext` +### `models.EventDataSettingUpPlatformContext` ```typescript -const value: models.DataSettingUpPlatformContext = { +const value: models.EventDataSettingUpPlatformContext = { platformName: "", type: "SettingUpPlatformContext", }; ``` -### `models.DataEnsuringDockerRepository` +### `models.EventDataEnsuringDockerRepository` ```typescript -const value: models.DataEnsuringDockerRepository = { +const value: models.EventDataEnsuringDockerRepository = { repositoryName: "", type: "EnsuringDockerRepository", }; ``` -### `models.DataDeployingCloudFormationStack` +### `models.EventDataDeployingCloudFormationStack` ```typescript -const value: models.DataDeployingCloudFormationStack = { +const value: models.EventDataDeployingCloudFormationStack = { cfnStackName: "", currentStatus: "", type: "DeployingCloudFormationStack", }; ``` -### `models.DataAssumingRole` +### `models.EventDataAssumingRole` ```typescript -const value: models.DataAssumingRole = { +const value: models.EventDataAssumingRole = { roleArn: "", type: "AssumingRole", }; ``` -### `models.DataImportingStackStateFromCloudFormation` +### `models.EventDataImportingStackStateFromCloudFormation` ```typescript -const value: models.DataImportingStackStateFromCloudFormation = { +const value: models.EventDataImportingStackStateFromCloudFormation = { cfnStackName: "", type: "ImportingStackStateFromCloudFormation", }; ``` -### `models.DataDeletingCloudFormationStack` +### `models.EventDataDeletingCloudFormationStack` ```typescript -const value: models.DataDeletingCloudFormationStack = { +const value: models.EventDataDeletingCloudFormationStack = { cfnStackName: "", currentStatus: "", type: "DeletingCloudFormationStack", }; ``` -### `models.DataEmptyingBuckets` +### `models.EventDataEmptyingBuckets` ```typescript -const value: models.DataEmptyingBuckets = { - bucketNames: [ - "", - ], +const value: models.EventDataEmptyingBuckets = { + bucketNames: [], type: "EmptyingBuckets", }; ``` -### `models.DataDeploymentCreated` +### `models.EventDataDeploymentCreated` ```typescript -const value: models.DataDeploymentCreated = { +const value: models.EventDataDeploymentCreated = { deploymentGroupId: "", deploymentId: "", type: "DeploymentCreated", }; ``` -### `models.DataDeploymentReleased` +### `models.EventDataDeploymentReleased` ```typescript -const value: models.DataDeploymentReleased = { +const value: models.EventDataDeploymentReleased = { deploymentId: "", releaseId: "", type: "DeploymentReleased", }; ``` -### `models.DataDeploymentFailed` +### `models.EventDataDeploymentFailed` ```typescript -const value: models.DataDeploymentFailed = { +const value: models.EventDataDeploymentFailed = { deploymentId: "", error: { code: "", internal: true, message: "", }, - phase: "preflights", + phase: "deleting", type: "DeploymentFailed", }; ``` -### `models.DataDeploymentDegraded` +### `models.EventDataDeploymentDegraded` ```typescript -const value: models.DataDeploymentDegraded = { +const value: models.EventDataDeploymentDegraded = { deploymentId: "", error: { code: "", - internal: false, + internal: true, message: "", }, type: "DeploymentDegraded", }; ``` -### `models.DataDeploymentRecovered` +### `models.EventDataDeploymentRecovered` ```typescript -const value: models.DataDeploymentRecovered = { +const value: models.EventDataDeploymentRecovered = { deploymentId: "", releaseId: "", type: "DeploymentRecovered", }; ``` -### `models.DataDeploymentDeleted` +### `models.EventDataDeploymentDeleted` ```typescript -const value: models.DataDeploymentDeleted = { +const value: models.EventDataDeploymentDeleted = { deploymentId: "", type: "DeploymentDeleted", }; ``` -### `models.DataDeploymentRetryRequested` +### `models.EventDataDeploymentRetryRequested` ```typescript -const value: models.DataDeploymentRetryRequested = { +const value: models.EventDataDeploymentRetryRequested = { deploymentId: "", type: "DeploymentRetryRequested", }; ``` -### `models.DataDeploymentRedeployRequested` +### `models.EventDataDeploymentRedeployRequested` ```typescript -const value: models.DataDeploymentRedeployRequested = { +const value: models.EventDataDeploymentRedeployRequested = { deploymentId: "", releaseId: "", type: "DeploymentRedeployRequested", }; ``` -### `models.DataDeploymentReleasePinned` +### `models.EventDataDeploymentReleasePinned` ```typescript -const value: models.DataDeploymentReleasePinned = { +const value: models.EventDataDeploymentReleasePinned = { deploymentId: "", pinnedReleaseId: "", type: "DeploymentReleasePinned", }; ``` -### `models.DataDeploymentReleaseUnpinned` +### `models.EventDataDeploymentReleaseUnpinned` ```typescript -const value: models.DataDeploymentReleaseUnpinned = { +const value: models.EventDataDeploymentReleaseUnpinned = { deploymentId: "", previousPinnedReleaseId: "", type: "DeploymentReleaseUnpinned", }; ``` -### `models.DataDeploymentEnvironmentUpdated` +### `models.EventDataDeploymentEnvironmentUpdated` ```typescript -const value: models.DataDeploymentEnvironmentUpdated = { - changedKeys: [], +const value: models.EventDataDeploymentEnvironmentUpdated = { + changedKeys: [ + "", + "", + "", + ], deploymentId: "", type: "DeploymentEnvironmentUpdated", }; ``` -### `models.DataDeploymentDeletionRequested` +### `models.EventDataDeploymentDeletionRequested` ```typescript -const value: models.DataDeploymentDeletionRequested = { +const value: models.EventDataDeploymentDeletionRequested = { deploymentId: "", type: "DeploymentDeletionRequested", }; ``` - diff --git a/client-sdks/platform/typescript/docs/models/eventdataupdatingagent.md b/client-sdks/platform/typescript/docs/models/eventdataupdatingagent.md new file mode 100644 index 000000000..6603e53e6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventdataupdatingagent.md @@ -0,0 +1,21 @@ +# EventDataUpdatingAgent + +## Example Usage + +```typescript +import { EventDataUpdatingAgent } from "@alienplatform/platform-api/models"; + +let value: EventDataUpdatingAgent = { + agentId: "", + releaseId: "", + type: "UpdatingAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being updated | +| `releaseId` | *string* | :heavy_check_mark: | ID of the new release being deployed to the agent | +| `type` | *"UpdatingAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventerrorfailed.md b/client-sdks/platform/typescript/docs/models/eventerrorfailed.md new file mode 100644 index 000000000..7d4302366 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventerrorfailed.md @@ -0,0 +1,34 @@ +# EventErrorFailed + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventErrorFailed } from "@alienplatform/platform-api/models"; + +let value: EventErrorFailed = { + code: "", + internal: false, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventerrornextstate.md b/client-sdks/platform/typescript/docs/models/eventerrornextstate.md new file mode 100644 index 000000000..e6838bd87 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventerrornextstate.md @@ -0,0 +1,34 @@ +# EventErrorNextState + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventErrorNextState } from "@alienplatform/platform-api/models"; + +let value: EventErrorNextState = { + code: "", + internal: true, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventfailed.md b/client-sdks/platform/typescript/docs/models/eventfailed.md new file mode 100644 index 000000000..3f187e38c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventfailed.md @@ -0,0 +1,17 @@ +# EventFailed + +Event failed with an error + +## Example Usage + +```typescript +import { EventFailed } from "@alienplatform/platform-api/models"; + +let value: EventFailed = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `error` | *models.EventFailedErrorUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventfailederrorunion.md b/client-sdks/platform/typescript/docs/models/eventfailederrorunion.md new file mode 100644 index 000000000..23d898ae2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventfailederrorunion.md @@ -0,0 +1,20 @@ +# EventFailedErrorUnion + + +## Supported Types + +### `models.EventErrorFailed` + +```typescript +const value: models.EventErrorFailed = { + code: "", + internal: false, + message: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponse.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponse.md new file mode 100644 index 000000000..9733e433e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponse.md @@ -0,0 +1,36 @@ +# EventListItemResponse + +## Example Usage + +```typescript +import { EventListItemResponse } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponse = { + id: "event_MtSA24M3pWuAkQYxgZxuRI", + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + releaseId: "rel_WbhQgksrawSKIpEN0NAssHX9", + debugSessionId: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", + data: { + type: "GeneratingCloudFormationTemplate", + }, + state: "success", + projectId: "prj_mcytp6z3j91f7tn5ryqsfwtr", + createdAt: new Date("2024-08-03T01:48:11.595Z"), + workspaceId: "ws_It13CUaGEhLLAB87simX0", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the event. | event_MtSA24M3pWuAkQYxgZxuRI | +| `deploymentId` | *string* | :heavy_minus_sign: | Unique identifier for the deployment. | dep_0c29fq4a2yjb7kx3smwdgxlc | +| `releaseId` | *string* | :heavy_minus_sign: | Unique identifier for the release. | rel_WbhQgksrawSKIpEN0NAssHX9 | +| `debugSessionId` | *string* | :heavy_minus_sign: | Unique identifier for the debug session. | dbg_HOXmkmT9UPYlsnxqSNlEGoXL | +| `data` | *models.EventListItemResponseDataUnion* | :heavy_check_mark: | N/A | | +| `state` | *models.EventListItemResponseStateUnion* | :heavy_check_mark: | Represents the state of an event | | +| `projectId` | *string* | :heavy_check_mark: | Unique identifier for the project. | prj_mcytp6z3j91f7tn5ryqsfwtr | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `workspaceId` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `releaseCreatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used | | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseactor1.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactor1.md new file mode 100644 index 000000000..7893c5f9a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactor1.md @@ -0,0 +1,22 @@ +# EventListItemResponseActor1 + +Authenticated principal that requested a deployment intent event. + +## Example Usage + +```typescript +import { EventListItemResponseActor1 } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseActor1 = { + id: "", + kind: "serviceAccount", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `email` | *string* | :heavy_minus_sign: | User email when the principal is a user. | +| `id` | *string* | :heavy_check_mark: | Stable user or service-account identifier. | +| `kind` | [models.EventListItemResponseKind1](../models/eventlistitemresponsekind1.md) | :heavy_check_mark: | Type of authenticated principal that requested an event. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseactor2.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactor2.md new file mode 100644 index 000000000..1c99967aa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactor2.md @@ -0,0 +1,22 @@ +# EventListItemResponseActor2 + +Authenticated principal that requested a deployment intent event. + +## Example Usage + +```typescript +import { EventListItemResponseActor2 } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseActor2 = { + id: "", + kind: "user", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `email` | *string* | :heavy_minus_sign: | User email when the principal is a user. | +| `id` | *string* | :heavy_check_mark: | Stable user or service-account identifier. | +| `kind` | [models.EventListItemResponseKind2](../models/eventlistitemresponsekind2.md) | :heavy_check_mark: | Type of authenticated principal that requested an event. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseactorunion1.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactorunion1.md new file mode 100644 index 000000000..6d81ea498 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactorunion1.md @@ -0,0 +1,19 @@ +# EventListItemResponseActorUnion1 + + +## Supported Types + +### `models.EventListItemResponseActor1` + +```typescript +const value: models.EventListItemResponseActor1 = { + id: "", + kind: "serviceAccount", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseactorunion2.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactorunion2.md new file mode 100644 index 000000000..eb80e6ee1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseactorunion2.md @@ -0,0 +1,19 @@ +# EventListItemResponseActorUnion2 + + +## Supported Types + +### `models.EventListItemResponseActor2` + +```typescript +const value: models.EventListItemResponseActor2 = { + id: "", + kind: "user", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseconfig.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseconfig.md new file mode 100644 index 000000000..0f641b64e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseconfig.md @@ -0,0 +1,22 @@ +# EventListItemResponseConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { EventListItemResponseConfig } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsecontrollerplatformenum.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsecontrollerplatformenum.md new file mode 100644 index 000000000..0c91779c5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsecontrollerplatformenum.md @@ -0,0 +1,17 @@ +# EventListItemResponseControllerPlatformEnum + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { EventListItemResponseControllerPlatformEnum } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseControllerPlatformEnum = "machines"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsecontrollerplatformunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsecontrollerplatformunion.md new file mode 100644 index 000000000..9eaf4d1d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsecontrollerplatformunion.md @@ -0,0 +1,16 @@ +# EventListItemResponseControllerPlatformUnion + + +## Supported Types + +### `models.EventListItemResponseControllerPlatformEnum` + +```typescript +const value: models.EventListItemResponseControllerPlatformEnum = "aws"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataassumingrole.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataassumingrole.md new file mode 100644 index 000000000..2347fc57d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataassumingrole.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataAssumingRole + +## Example Usage + +```typescript +import { EventListItemResponseDataAssumingRole } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataAssumingRole = { + roleArn: "", + type: "AssumingRole", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `roleArn` | *string* | :heavy_check_mark: | ARN of the role to assume | +| `type` | *"AssumingRole"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingimage.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingimage.md new file mode 100644 index 000000000..ece6623af --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingimage.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataBuildingImage + +## Example Usage + +```typescript +import { EventListItemResponseDataBuildingImage } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataBuildingImage = { + image: "https://loremflickr.com/3474/373?lock=4089420585640817", + type: "BuildingImage", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `image` | *string* | :heavy_check_mark: | Name of the image being built | +| `type` | *"BuildingImage"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingresource.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingresource.md new file mode 100644 index 000000000..8b0de3d5a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingresource.md @@ -0,0 +1,22 @@ +# EventListItemResponseDataBuildingResource + +## Example Usage + +```typescript +import { EventListItemResponseDataBuildingResource } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataBuildingResource = { + resourceName: "", + resourceType: "", + type: "BuildingResource", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `relatedResources` | *string*[] | :heavy_minus_sign: | All resource names sharing this build (for deduped container groups) | +| `resourceName` | *string* | :heavy_check_mark: | Name of the resource being built | +| `resourceType` | *string* | :heavy_check_mark: | Type of the resource: "worker", "container" | +| `type` | *"BuildingResource"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingstack.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingstack.md new file mode 100644 index 000000000..bd0a7d367 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatabuildingstack.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataBuildingStack + +## Example Usage + +```typescript +import { EventListItemResponseDataBuildingStack } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataBuildingStack = { + stack: "", + type: "BuildingStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `stack` | *string* | :heavy_check_mark: | Name of the stack being built | +| `type` | *"BuildingStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacleaningupenvironment.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacleaningupenvironment.md new file mode 100644 index 000000000..4cf86ffb1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacleaningupenvironment.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataCleaningUpEnvironment + +## Example Usage + +```typescript +import { EventListItemResponseDataCleaningUpEnvironment } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataCleaningUpEnvironment = { + stackName: "", + strategyName: "", + type: "CleaningUpEnvironment", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being cleaned up | +| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used for cleanup | +| `type` | *"CleaningUpEnvironment"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacleaningupstack.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacleaningupstack.md new file mode 100644 index 000000000..20cfe8d73 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacleaningupstack.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataCleaningUpStack + +## Example Usage + +```typescript +import { EventListItemResponseDataCleaningUpStack } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataCleaningUpStack = { + stackName: "", + strategyName: "", + type: "CleaningUpStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being cleaned up | +| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used for cleanup | +| `type` | *"CleaningUpStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacompilingcode.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacompilingcode.md new file mode 100644 index 000000000..749454546 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacompilingcode.md @@ -0,0 +1,20 @@ +# EventListItemResponseDataCompilingCode + +## Example Usage + +```typescript +import { EventListItemResponseDataCompilingCode } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataCompilingCode = { + language: "", + type: "CompilingCode", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `language` | *string* | :heavy_check_mark: | Language being compiled (rust, typescript, etc.) | +| `progress` | *string* | :heavy_minus_sign: | Current progress/status line from the build output | +| `type` | *"CompilingCode"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacreatingrelease.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacreatingrelease.md new file mode 100644 index 000000000..0c1ee3c07 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatacreatingrelease.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataCreatingRelease + +## Example Usage + +```typescript +import { EventListItemResponseDataCreatingRelease } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataCreatingRelease = { + project: "", + type: "CreatingRelease", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------- | ------------------- | ------------------- | ------------------- | +| `project` | *string* | :heavy_check_mark: | Project name | +| `type` | *"CreatingRelease"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadebuggingagent.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadebuggingagent.md new file mode 100644 index 000000000..c0dcc7192 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadebuggingagent.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDebuggingAgent + +## Example Usage + +```typescript +import { EventListItemResponseDataDebuggingAgent } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDebuggingAgent = { + agentId: "", + debugSessionId: "", + type: "DebuggingAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being debugged | +| `debugSessionId` | *string* | :heavy_check_mark: | ID of the debug session | +| `type` | *"DebuggingAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeletingagent.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeletingagent.md new file mode 100644 index 000000000..a5f511b50 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeletingagent.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDeletingAgent + +## Example Usage + +```typescript +import { EventListItemResponseDataDeletingAgent } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeletingAgent = { + agentId: "", + releaseId: "", + type: "DeletingAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being deleted | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release that was running on the agent | +| `type` | *"DeletingAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeletingcloudformationstack.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeletingcloudformationstack.md new file mode 100644 index 000000000..4b4e85a87 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeletingcloudformationstack.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDeletingCloudFormationStack + +## Example Usage + +```typescript +import { EventListItemResponseDataDeletingCloudFormationStack } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeletingCloudFormationStack = { + cfnStackName: "", + currentStatus: "", + type: "DeletingCloudFormationStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | +| `currentStatus` | *string* | :heavy_check_mark: | Current stack status | +| `type` | *"DeletingCloudFormationStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeployingcloudformationstack.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeployingcloudformationstack.md new file mode 100644 index 000000000..e8014f11a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeployingcloudformationstack.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDeployingCloudFormationStack + +## Example Usage + +```typescript +import { EventListItemResponseDataDeployingCloudFormationStack } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeployingCloudFormationStack = { + cfnStackName: "", + currentStatus: "", + type: "DeployingCloudFormationStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | +| `currentStatus` | *string* | :heavy_check_mark: | Current stack status | +| `type` | *"DeployingCloudFormationStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeployingstack.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeployingstack.md new file mode 100644 index 000000000..3980ea6d4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeployingstack.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataDeployingStack + +## Example Usage + +```typescript +import { EventListItemResponseDataDeployingStack } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeployingStack = { + stackName: "", + type: "DeployingStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being deployed | +| `type` | *"DeployingStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentcreated.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentcreated.md new file mode 100644 index 000000000..c6e409864 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentcreated.md @@ -0,0 +1,22 @@ +# EventListItemResponseDataDeploymentCreated + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentCreated } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentCreated = { + deploymentGroupId: "", + deploymentId: "", + type: "DeploymentCreated", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `deploymentGroupId` | *string* | :heavy_check_mark: | ID of the deployment group this slot belongs to | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment that was created | +| `releaseId` | *string* | :heavy_minus_sign: | Initial release the slot was created with, if any | +| `type` | *"DeploymentCreated"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdegraded.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdegraded.md new file mode 100644 index 000000000..0ef0a4042 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdegraded.md @@ -0,0 +1,25 @@ +# EventListItemResponseDataDeploymentDegraded + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentDegraded } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentDegraded = { + deploymentId: "", + error: { + code: "", + internal: false, + message: "", + }, + type: "DeploymentDegraded", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `error` | [models.EventListItemResponseDataError2](../models/eventlistitemresponsedataerror2.md) | :heavy_check_mark: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | +| `type` | *"DeploymentDegraded"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdeleted.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdeleted.md new file mode 100644 index 000000000..dba09cfa2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdeleted.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataDeploymentDeleted + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentDeleted } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentDeleted = { + deploymentId: "", + type: "DeploymentDeleted", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment that was deleted | +| `type` | *"DeploymentDeleted"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdeletionrequested.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdeletionrequested.md new file mode 100644 index 000000000..1dcacd91e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentdeletionrequested.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataDeploymentDeletionRequested + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentDeletionRequested } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentDeletionRequested = { + deploymentId: "", + type: "DeploymentDeletionRequested", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `type` | *"DeploymentDeletionRequested"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentenvironmentupdated.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentenvironmentupdated.md new file mode 100644 index 000000000..c25fdd5c5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentenvironmentupdated.md @@ -0,0 +1,24 @@ +# EventListItemResponseDataDeploymentEnvironmentUpdated + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentEnvironmentUpdated } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentEnvironmentUpdated = { + changedKeys: [ + "", + ], + deploymentId: "", + type: "DeploymentEnvironmentUpdated", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `actor` | *models.EventListItemResponseActorUnion2* | :heavy_minus_sign: | N/A | +| `changedKeys` | *string*[] | :heavy_check_mark: | Names of the environment variables that changed (added, removed, or modified) | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `type` | *"DeploymentEnvironmentUpdated"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentfailed.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentfailed.md new file mode 100644 index 000000000..04357bb31 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentfailed.md @@ -0,0 +1,28 @@ +# EventListItemResponseDataDeploymentFailed + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentFailed } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentFailed = { + deploymentId: "", + error: { + code: "", + internal: false, + message: "", + }, + phase: "provisioning", + type: "DeploymentFailed", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `attemptedReleaseId` | *string* | :heavy_minus_sign: | ID of the release the platform was trying to deploy, if known | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `error` | [models.EventListItemResponseDataError1](../models/eventlistitemresponsedataerror1.md) | :heavy_check_mark: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | +| `phase` | [models.EventListItemResponsePhase](../models/eventlistitemresponsephase.md) | :heavy_check_mark: | Phase of a deployment at which a failure occurred.

Derived from the source deployment status: `preflights-failed` →
`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` →
`Updating`, `delete-failed` → `Deleting`.
`refresh-failed` is modelled separately via `DeploymentDegraded`. | +| `type` | *"DeploymentFailed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentrecovered.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentrecovered.md new file mode 100644 index 000000000..ae7790490 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentrecovered.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDeploymentRecovered + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentRecovered } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentRecovered = { + deploymentId: "", + releaseId: "", + type: "DeploymentRecovered", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release that is now live | +| `type` | *"DeploymentRecovered"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentredeployrequested.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentredeployrequested.md new file mode 100644 index 000000000..620731b80 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentredeployrequested.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDeploymentRedeployRequested + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentRedeployRequested } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentRedeployRequested = { + deploymentId: "", + releaseId: "", + type: "DeploymentRedeployRequested", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release being redeployed | +| `type` | *"DeploymentRedeployRequested"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleased.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleased.md new file mode 100644 index 000000000..22e957843 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleased.md @@ -0,0 +1,22 @@ +# EventListItemResponseDataDeploymentReleased + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentReleased } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentReleased = { + deploymentId: "", + releaseId: "", + type: "DeploymentReleased", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `previousReleaseId` | *string* | :heavy_minus_sign: | ID of the release that was previously live, if any | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release that is now live | +| `type` | *"DeploymentReleased"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleasepinned.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleasepinned.md new file mode 100644 index 000000000..855b7395a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleasepinned.md @@ -0,0 +1,22 @@ +# EventListItemResponseDataDeploymentReleasePinned + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentReleasePinned } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentReleasePinned = { + deploymentId: "", + pinnedReleaseId: "", + type: "DeploymentReleasePinned", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `pinnedReleaseId` | *string* | :heavy_check_mark: | ID of the release that is now pinned | +| `previousPinnedReleaseId` | *string* | :heavy_minus_sign: | ID of the previously pinned release, if any | +| `type` | *"DeploymentReleasePinned"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleaseunpinned.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleaseunpinned.md new file mode 100644 index 000000000..82df47808 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentreleaseunpinned.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDeploymentReleaseUnpinned + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentReleaseUnpinned } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentReleaseUnpinned = { + deploymentId: "", + previousPinnedReleaseId: "", + type: "DeploymentReleaseUnpinned", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `previousPinnedReleaseId` | *string* | :heavy_check_mark: | ID of the release that was previously pinned | +| `type` | *"DeploymentReleaseUnpinned"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentretryrequested.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentretryrequested.md new file mode 100644 index 000000000..be7d2dbfc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadeploymentretryrequested.md @@ -0,0 +1,22 @@ +# EventListItemResponseDataDeploymentRetryRequested + +## Example Usage + +```typescript +import { EventListItemResponseDataDeploymentRetryRequested } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDeploymentRetryRequested = { + deploymentId: "", + type: "DeploymentRetryRequested", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `actor` | *models.EventListItemResponseActorUnion1* | :heavy_minus_sign: | N/A | +| `attemptedReleaseId` | *string* | :heavy_minus_sign: | ID of the release that the failed attempt was targeting, if known | +| `deploymentId` | *string* | :heavy_check_mark: | ID of the deployment | +| `previousError` | *models.EventListItemResponsePreviousErrorUnion* | :heavy_minus_sign: | N/A | +| `type` | *"DeploymentRetryRequested"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadownloadingalienruntime.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadownloadingalienruntime.md new file mode 100644 index 000000000..67b6b8d9b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatadownloadingalienruntime.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataDownloadingAlienRuntime + +## Example Usage + +```typescript +import { EventListItemResponseDataDownloadingAlienRuntime } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataDownloadingAlienRuntime = { + targetTriple: "", + type: "DownloadingAlienRuntime", + url: "https://hefty-eggplant.net", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `targetTriple` | *string* | :heavy_check_mark: | Target triple for the runtime | +| `type` | *"DownloadingAlienRuntime"* | :heavy_check_mark: | N/A | +| `url` | *string* | :heavy_check_mark: | URL being downloaded from | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataemptyingbuckets.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataemptyingbuckets.md new file mode 100644 index 000000000..cd5463e14 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataemptyingbuckets.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataEmptyingBuckets + +## Example Usage + +```typescript +import { EventListItemResponseDataEmptyingBuckets } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataEmptyingBuckets = { + bucketNames: [], + type: "EmptyingBuckets", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | +| `bucketNames` | *string*[] | :heavy_check_mark: | Names of the S3 buckets being emptied | +| `type` | *"EmptyingBuckets"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataensuringdockerrepository.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataensuringdockerrepository.md new file mode 100644 index 000000000..49f981c57 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataensuringdockerrepository.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataEnsuringDockerRepository + +## Example Usage + +```typescript +import { EventListItemResponseDataEnsuringDockerRepository } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataEnsuringDockerRepository = { + repositoryName: "", + type: "EnsuringDockerRepository", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | +| `repositoryName` | *string* | :heavy_check_mark: | Name of the docker repository | +| `type` | *"EnsuringDockerRepository"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataerror1.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataerror1.md new file mode 100644 index 000000000..31abe5a95 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataerror1.md @@ -0,0 +1,34 @@ +# EventListItemResponseDataError1 + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventListItemResponseDataError1 } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataError1 = { + code: "", + internal: false, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataerror2.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataerror2.md new file mode 100644 index 000000000..1a8e615f1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataerror2.md @@ -0,0 +1,34 @@ +# EventListItemResponseDataError2 + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventListItemResponseDataError2 } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataError2 = { + code: "", + internal: true, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatafinished.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatafinished.md new file mode 100644 index 000000000..e7dda0c40 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatafinished.md @@ -0,0 +1,17 @@ +# EventListItemResponseDataFinished + +## Example Usage + +```typescript +import { EventListItemResponseDataFinished } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataFinished = { + type: "Finished", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"Finished"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatageneratingcloudformationtemplate.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatageneratingcloudformationtemplate.md new file mode 100644 index 000000000..9401c11fb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatageneratingcloudformationtemplate.md @@ -0,0 +1,17 @@ +# EventListItemResponseDataGeneratingCloudFormationTemplate + +## Example Usage + +```typescript +import { EventListItemResponseDataGeneratingCloudFormationTemplate } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataGeneratingCloudFormationTemplate = { + type: "GeneratingCloudFormationTemplate", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `type` | *"GeneratingCloudFormationTemplate"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatageneratingtemplate.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatageneratingtemplate.md new file mode 100644 index 000000000..9bbfe575c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatageneratingtemplate.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataGeneratingTemplate + +## Example Usage + +```typescript +import { EventListItemResponseDataGeneratingTemplate } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataGeneratingTemplate = { + platform: "", + type: "GeneratingTemplate", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `platform` | *string* | :heavy_check_mark: | Platform for which the template is being generated | +| `type` | *"GeneratingTemplate"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataimportingstackstatefromcloudformation.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataimportingstackstatefromcloudformation.md new file mode 100644 index 000000000..1484b14c0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataimportingstackstatefromcloudformation.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataImportingStackStateFromCloudFormation + +## Example Usage + +```typescript +import { EventListItemResponseDataImportingStackStateFromCloudFormation } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataImportingStackStateFromCloudFormation = { + cfnStackName: "", + type: "ImportingStackStateFromCloudFormation", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `cfnStackName` | *string* | :heavy_check_mark: | Name of the CloudFormation stack | +| `type` | *"ImportingStackStateFromCloudFormation"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataloadingconfiguration.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataloadingconfiguration.md new file mode 100644 index 000000000..b148db3d6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataloadingconfiguration.md @@ -0,0 +1,17 @@ +# EventListItemResponseDataLoadingConfiguration + +## Example Usage + +```typescript +import { EventListItemResponseDataLoadingConfiguration } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataLoadingConfiguration = { + type: "LoadingConfiguration", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `type` | *"LoadingConfiguration"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapreparingenvironment.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapreparingenvironment.md new file mode 100644 index 000000000..d641bbdba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapreparingenvironment.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataPreparingEnvironment + +## Example Usage + +```typescript +import { EventListItemResponseDataPreparingEnvironment } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataPreparingEnvironment = { + strategyName: "", + type: "PreparingEnvironment", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `strategyName` | *string* | :heavy_check_mark: | Name of the deployment strategy being used | +| `type` | *"PreparingEnvironment"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataprovisioningagent.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataprovisioningagent.md new file mode 100644 index 000000000..d456b11d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataprovisioningagent.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataProvisioningAgent + +## Example Usage + +```typescript +import { EventListItemResponseDataProvisioningAgent } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataProvisioningAgent = { + agentId: "", + releaseId: "", + type: "ProvisioningAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being provisioned | +| `releaseId` | *string* | :heavy_check_mark: | ID of the release being deployed to the agent | +| `type` | *"ProvisioningAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingimage.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingimage.md new file mode 100644 index 000000000..0606f1d88 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingimage.md @@ -0,0 +1,20 @@ +# EventListItemResponseDataPushingImage + +## Example Usage + +```typescript +import { EventListItemResponseDataPushingImage } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataPushingImage = { + image: "https://picsum.photos/seed/3kNN0/505/3308", + type: "PushingImage", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `image` | *string* | :heavy_check_mark: | Name of the image being pushed | +| `progress` | *models.EventListItemResponseProgressUnion* | :heavy_minus_sign: | N/A | +| `type` | *"PushingImage"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingresource.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingresource.md new file mode 100644 index 000000000..690409d38 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingresource.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataPushingResource + +## Example Usage + +```typescript +import { EventListItemResponseDataPushingResource } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataPushingResource = { + resourceName: "", + resourceType: "", + type: "PushingResource", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `resourceName` | *string* | :heavy_check_mark: | Name of the resource being pushed | +| `resourceType` | *string* | :heavy_check_mark: | Type of the resource: "worker", "container" | +| `type` | *"PushingResource"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingstack.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingstack.md new file mode 100644 index 000000000..d5c8507c8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatapushingstack.md @@ -0,0 +1,22 @@ +# EventListItemResponseDataPushingStack + +## Example Usage + +```typescript +import { EventListItemResponseDataPushingStack } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataPushingStack = { + platform: "", + stack: "", + type: "PushingStack", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `destination` | *string* | :heavy_minus_sign: | Human-readable destination for pushed images | +| `platform` | *string* | :heavy_check_mark: | Target platform | +| `stack` | *string* | :heavy_check_mark: | Name of the stack being pushed | +| `type` | *"PushingStack"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatarunningpreflights.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatarunningpreflights.md new file mode 100644 index 000000000..6c7db0597 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatarunningpreflights.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataRunningPreflights + +## Example Usage + +```typescript +import { EventListItemResponseDataRunningPreflights } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataRunningPreflights = { + platform: "", + stack: "", + type: "RunningPreflights", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `platform` | *string* | :heavy_check_mark: | Platform being targeted | +| `stack` | *string* | :heavy_check_mark: | Name of the stack being checked | +| `type` | *"RunningPreflights"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatarunningtestworker.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatarunningtestworker.md new file mode 100644 index 000000000..9a7770dbc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatarunningtestworker.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataRunningTestWorker + +## Example Usage + +```typescript +import { EventListItemResponseDataRunningTestWorker } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataRunningTestWorker = { + stackName: "", + type: "RunningTestWorker", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `stackName` | *string* | :heavy_check_mark: | Name of the stack being tested | +| `type` | *"RunningTestWorker"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatasettingupplatformcontext.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatasettingupplatformcontext.md new file mode 100644 index 000000000..d9a783dc9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatasettingupplatformcontext.md @@ -0,0 +1,19 @@ +# EventListItemResponseDataSettingUpPlatformContext + +## Example Usage + +```typescript +import { EventListItemResponseDataSettingUpPlatformContext } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataSettingUpPlatformContext = { + platformName: "", + type: "SettingUpPlatformContext", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `platformName` | *string* | :heavy_check_mark: | Name of the platform (e.g., "AWS", "GCP") | +| `type` | *"SettingUpPlatformContext"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatastackstep.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatastackstep.md new file mode 100644 index 000000000..b03ebca24 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedatastackstep.md @@ -0,0 +1,33 @@ +# EventListItemResponseDataStackStep + +## Example Usage + +```typescript +import { EventListItemResponseDataStackStep } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataStackStep = { + nextState: { + platform: "test", + resourcePrefix: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + status: "delete-failed", + type: "", + }, + }, + }, + type: "StackStep", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `nextState` | [models.EventListItemResponseNextState](../models/eventlistitemresponsenextstate.md) | :heavy_check_mark: | Represents the collective state of all resources in a stack, including platform and pending actions. | +| `suggestedDelayMs` | *number* | :heavy_minus_sign: | An suggested duration to wait before executing the next step. | +| `type` | *"StackStep"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataunion.md new file mode 100644 index 000000000..9e0a40f3d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataunion.md @@ -0,0 +1,436 @@ +# EventListItemResponseDataUnion + + +## Supported Types + +### `models.EventListItemResponseDataLoadingConfiguration` + +```typescript +const value: models.EventListItemResponseDataLoadingConfiguration = { + type: "LoadingConfiguration", +}; +``` + +### `models.EventListItemResponseDataFinished` + +```typescript +const value: models.EventListItemResponseDataFinished = { + type: "Finished", +}; +``` + +### `models.EventListItemResponseDataBuildingStack` + +```typescript +const value: models.EventListItemResponseDataBuildingStack = { + stack: "", + type: "BuildingStack", +}; +``` + +### `models.EventListItemResponseDataRunningPreflights` + +```typescript +const value: models.EventListItemResponseDataRunningPreflights = { + platform: "", + stack: "", + type: "RunningPreflights", +}; +``` + +### `models.EventListItemResponseDataDownloadingAlienRuntime` + +```typescript +const value: models.EventListItemResponseDataDownloadingAlienRuntime = { + targetTriple: "", + type: "DownloadingAlienRuntime", + url: "https://hefty-eggplant.net", +}; +``` + +### `models.EventListItemResponseDataBuildingResource` + +```typescript +const value: models.EventListItemResponseDataBuildingResource = { + resourceName: "", + resourceType: "", + type: "BuildingResource", +}; +``` + +### `models.EventListItemResponseDataBuildingImage` + +```typescript +const value: models.EventListItemResponseDataBuildingImage = { + image: "https://loremflickr.com/3474/373?lock=4089420585640817", + type: "BuildingImage", +}; +``` + +### `models.EventListItemResponseDataPushingImage` + +```typescript +const value: models.EventListItemResponseDataPushingImage = { + image: "https://picsum.photos/seed/3kNN0/505/3308", + type: "PushingImage", +}; +``` + +### `models.EventListItemResponseDataPushingStack` + +```typescript +const value: models.EventListItemResponseDataPushingStack = { + platform: "", + stack: "", + type: "PushingStack", +}; +``` + +### `models.EventListItemResponseDataPushingResource` + +```typescript +const value: models.EventListItemResponseDataPushingResource = { + resourceName: "", + resourceType: "", + type: "PushingResource", +}; +``` + +### `models.EventListItemResponseDataCreatingRelease` + +```typescript +const value: models.EventListItemResponseDataCreatingRelease = { + project: "", + type: "CreatingRelease", +}; +``` + +### `models.EventListItemResponseDataCompilingCode` + +```typescript +const value: models.EventListItemResponseDataCompilingCode = { + language: "", + type: "CompilingCode", +}; +``` + +### `models.EventListItemResponseDataStackStep` + +```typescript +const value: models.EventListItemResponseDataStackStep = { + nextState: { + platform: "test", + resourcePrefix: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + status: "delete-failed", + type: "", + }, + }, + }, + type: "StackStep", +}; +``` + +### `models.EventListItemResponseDataGeneratingCloudFormationTemplate` + +```typescript +const value: models.EventListItemResponseDataGeneratingCloudFormationTemplate = + { + type: "GeneratingCloudFormationTemplate", + }; +``` + +### `models.EventListItemResponseDataGeneratingTemplate` + +```typescript +const value: models.EventListItemResponseDataGeneratingTemplate = { + platform: "", + type: "GeneratingTemplate", +}; +``` + +### `models.EventListItemResponseDataProvisioningAgent` + +```typescript +const value: models.EventListItemResponseDataProvisioningAgent = { + agentId: "", + releaseId: "", + type: "ProvisioningAgent", +}; +``` + +### `models.EventListItemResponseDataUpdatingAgent` + +```typescript +const value: models.EventListItemResponseDataUpdatingAgent = { + agentId: "", + releaseId: "", + type: "UpdatingAgent", +}; +``` + +### `models.EventListItemResponseDataDeletingAgent` + +```typescript +const value: models.EventListItemResponseDataDeletingAgent = { + agentId: "", + releaseId: "", + type: "DeletingAgent", +}; +``` + +### `models.EventListItemResponseDataDebuggingAgent` + +```typescript +const value: models.EventListItemResponseDataDebuggingAgent = { + agentId: "", + debugSessionId: "", + type: "DebuggingAgent", +}; +``` + +### `models.EventListItemResponseDataPreparingEnvironment` + +```typescript +const value: models.EventListItemResponseDataPreparingEnvironment = { + strategyName: "", + type: "PreparingEnvironment", +}; +``` + +### `models.EventListItemResponseDataDeployingStack` + +```typescript +const value: models.EventListItemResponseDataDeployingStack = { + stackName: "", + type: "DeployingStack", +}; +``` + +### `models.EventListItemResponseDataRunningTestWorker` + +```typescript +const value: models.EventListItemResponseDataRunningTestWorker = { + stackName: "", + type: "RunningTestWorker", +}; +``` + +### `models.EventListItemResponseDataCleaningUpStack` + +```typescript +const value: models.EventListItemResponseDataCleaningUpStack = { + stackName: "", + strategyName: "", + type: "CleaningUpStack", +}; +``` + +### `models.EventListItemResponseDataCleaningUpEnvironment` + +```typescript +const value: models.EventListItemResponseDataCleaningUpEnvironment = { + stackName: "", + strategyName: "", + type: "CleaningUpEnvironment", +}; +``` + +### `models.EventListItemResponseDataSettingUpPlatformContext` + +```typescript +const value: models.EventListItemResponseDataSettingUpPlatformContext = { + platformName: "", + type: "SettingUpPlatformContext", +}; +``` + +### `models.EventListItemResponseDataEnsuringDockerRepository` + +```typescript +const value: models.EventListItemResponseDataEnsuringDockerRepository = { + repositoryName: "", + type: "EnsuringDockerRepository", +}; +``` + +### `models.EventListItemResponseDataDeployingCloudFormationStack` + +```typescript +const value: models.EventListItemResponseDataDeployingCloudFormationStack = { + cfnStackName: "", + currentStatus: "", + type: "DeployingCloudFormationStack", +}; +``` + +### `models.EventListItemResponseDataAssumingRole` + +```typescript +const value: models.EventListItemResponseDataAssumingRole = { + roleArn: "", + type: "AssumingRole", +}; +``` + +### `models.EventListItemResponseDataImportingStackStateFromCloudFormation` + +```typescript +const value: + models.EventListItemResponseDataImportingStackStateFromCloudFormation = { + cfnStackName: "", + type: "ImportingStackStateFromCloudFormation", + }; +``` + +### `models.EventListItemResponseDataDeletingCloudFormationStack` + +```typescript +const value: models.EventListItemResponseDataDeletingCloudFormationStack = { + cfnStackName: "", + currentStatus: "", + type: "DeletingCloudFormationStack", +}; +``` + +### `models.EventListItemResponseDataEmptyingBuckets` + +```typescript +const value: models.EventListItemResponseDataEmptyingBuckets = { + bucketNames: [], + type: "EmptyingBuckets", +}; +``` + +### `models.EventListItemResponseDataDeploymentCreated` + +```typescript +const value: models.EventListItemResponseDataDeploymentCreated = { + deploymentGroupId: "", + deploymentId: "", + type: "DeploymentCreated", +}; +``` + +### `models.EventListItemResponseDataDeploymentReleased` + +```typescript +const value: models.EventListItemResponseDataDeploymentReleased = { + deploymentId: "", + releaseId: "", + type: "DeploymentReleased", +}; +``` + +### `models.EventListItemResponseDataDeploymentFailed` + +```typescript +const value: models.EventListItemResponseDataDeploymentFailed = { + deploymentId: "", + error: { + code: "", + internal: false, + message: "", + }, + phase: "provisioning", + type: "DeploymentFailed", +}; +``` + +### `models.EventListItemResponseDataDeploymentDegraded` + +```typescript +const value: models.EventListItemResponseDataDeploymentDegraded = { + deploymentId: "", + error: { + code: "", + internal: false, + message: "", + }, + type: "DeploymentDegraded", +}; +``` + +### `models.EventListItemResponseDataDeploymentRecovered` + +```typescript +const value: models.EventListItemResponseDataDeploymentRecovered = { + deploymentId: "", + releaseId: "", + type: "DeploymentRecovered", +}; +``` + +### `models.EventListItemResponseDataDeploymentDeleted` + +```typescript +const value: models.EventListItemResponseDataDeploymentDeleted = { + deploymentId: "", + type: "DeploymentDeleted", +}; +``` + +### `models.EventListItemResponseDataDeploymentRetryRequested` + +```typescript +const value: models.EventListItemResponseDataDeploymentRetryRequested = { + deploymentId: "", + type: "DeploymentRetryRequested", +}; +``` + +### `models.EventListItemResponseDataDeploymentRedeployRequested` + +```typescript +const value: models.EventListItemResponseDataDeploymentRedeployRequested = { + deploymentId: "", + releaseId: "", + type: "DeploymentRedeployRequested", +}; +``` + +### `models.EventListItemResponseDataDeploymentReleasePinned` + +```typescript +const value: models.EventListItemResponseDataDeploymentReleasePinned = { + deploymentId: "", + pinnedReleaseId: "", + type: "DeploymentReleasePinned", +}; +``` + +### `models.EventListItemResponseDataDeploymentReleaseUnpinned` + +```typescript +const value: models.EventListItemResponseDataDeploymentReleaseUnpinned = { + deploymentId: "", + previousPinnedReleaseId: "", + type: "DeploymentReleaseUnpinned", +}; +``` + +### `models.EventListItemResponseDataDeploymentEnvironmentUpdated` + +```typescript +const value: models.EventListItemResponseDataDeploymentEnvironmentUpdated = { + changedKeys: [ + "", + ], + deploymentId: "", + type: "DeploymentEnvironmentUpdated", +}; +``` + +### `models.EventListItemResponseDataDeploymentDeletionRequested` + +```typescript +const value: models.EventListItemResponseDataDeploymentDeletionRequested = { + deploymentId: "", + type: "DeploymentDeletionRequested", +}; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataupdatingagent.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataupdatingagent.md new file mode 100644 index 000000000..3f8f39b5d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedataupdatingagent.md @@ -0,0 +1,21 @@ +# EventListItemResponseDataUpdatingAgent + +## Example Usage + +```typescript +import { EventListItemResponseDataUpdatingAgent } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDataUpdatingAgent = { + agentId: "", + releaseId: "", + type: "UpdatingAgent", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `agentId` | *string* | :heavy_check_mark: | ID of the agent being updated | +| `releaseId` | *string* | :heavy_check_mark: | ID of the new release being deployed to the agent | +| `type` | *"UpdatingAgent"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsedependency.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedependency.md new file mode 100644 index 000000000..74cde080a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsedependency.md @@ -0,0 +1,21 @@ +# EventListItemResponseDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { EventListItemResponseDependency } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseerrorfailed.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseerrorfailed.md new file mode 100644 index 000000000..d97408358 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseerrorfailed.md @@ -0,0 +1,34 @@ +# EventListItemResponseErrorFailed + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventListItemResponseErrorFailed } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseErrorFailed = { + code: "", + internal: false, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseerrornextstate.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseerrornextstate.md new file mode 100644 index 000000000..7c78d0059 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseerrornextstate.md @@ -0,0 +1,34 @@ +# EventListItemResponseErrorNextState + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventListItemResponseErrorNextState } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseErrorNextState = { + code: "", + internal: true, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsefailed.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsefailed.md new file mode 100644 index 000000000..070b1ad9a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsefailed.md @@ -0,0 +1,17 @@ +# EventListItemResponseFailed + +Event failed with an error + +## Example Usage + +```typescript +import { EventListItemResponseFailed } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseFailed = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `error` | *models.EventListItemResponseFailedErrorUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsefailederrorunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsefailederrorunion.md new file mode 100644 index 000000000..7152cb315 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsefailederrorunion.md @@ -0,0 +1,20 @@ +# EventListItemResponseFailedErrorUnion + + +## Supported Types + +### `models.EventListItemResponseErrorFailed` + +```typescript +const value: models.EventListItemResponseErrorFailed = { + code: "", + internal: false, + message: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsekind1.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsekind1.md new file mode 100644 index 000000000..f487df544 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsekind1.md @@ -0,0 +1,17 @@ +# EventListItemResponseKind1 + +Type of authenticated principal that requested an event. + +## Example Usage + +```typescript +import { EventListItemResponseKind1 } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseKind1 = "serviceAccount"; +``` + +## Values + +```typescript +"user" | "serviceAccount" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsekind2.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsekind2.md new file mode 100644 index 000000000..cf937b8d5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsekind2.md @@ -0,0 +1,17 @@ +# EventListItemResponseKind2 + +Type of authenticated principal that requested an event. + +## Example Usage + +```typescript +import { EventListItemResponseKind2 } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseKind2 = "user"; +``` + +## Values + +```typescript +"user" | "serviceAccount" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponselifecycleenum.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponselifecycleenum.md new file mode 100644 index 000000000..523c9d64d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponselifecycleenum.md @@ -0,0 +1,17 @@ +# EventListItemResponseLifecycleEnum + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { EventListItemResponseLifecycleEnum } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseLifecycleEnum = "live"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponselifecycleunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponselifecycleunion.md new file mode 100644 index 000000000..3027b6453 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponselifecycleunion.md @@ -0,0 +1,16 @@ +# EventListItemResponseLifecycleUnion + + +## Supported Types + +### `models.EventListItemResponseLifecycleEnum` + +```typescript +const value: models.EventListItemResponseLifecycleEnum = "live"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsenextstate.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsenextstate.md new file mode 100644 index 000000000..84ae75102 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsenextstate.md @@ -0,0 +1,32 @@ +# EventListItemResponseNextState + +Represents the collective state of all resources in a stack, including platform and pending actions. + +## Example Usage + +```typescript +import { EventListItemResponseNextState } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseNextState = { + platform: "local", + resourcePrefix: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + status: "delete-failed", + type: "", + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `platform` | [models.EventListItemResponsePlatform](../models/eventlistitemresponseplatform.md) | :heavy_check_mark: | Represents the target cloud platform. | +| `resourcePrefix` | *string* | :heavy_check_mark: | A prefix used for resource naming to ensure uniqueness across deployments. | +| `resources` | Record | :heavy_check_mark: | The state of individual resources, keyed by resource ID. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsenextstateerrorunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsenextstateerrorunion.md new file mode 100644 index 000000000..b3a714e6c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsenextstateerrorunion.md @@ -0,0 +1,20 @@ +# EventListItemResponseNextStateErrorUnion + + +## Supported Types + +### `models.EventListItemResponseErrorNextState` + +```typescript +const value: models.EventListItemResponseErrorNextState = { + code: "", + internal: true, + message: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseoutputs.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseoutputs.md new file mode 100644 index 000000000..255f25e53 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseoutputs.md @@ -0,0 +1,20 @@ +# EventListItemResponseOutputs + +Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. + +## Example Usage + +```typescript +import { EventListItemResponseOutputs } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseOutputs = { + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseoutputsunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseoutputsunion.md new file mode 100644 index 000000000..5680c512a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseoutputsunion.md @@ -0,0 +1,18 @@ +# EventListItemResponseOutputsUnion + + +## Supported Types + +### `models.EventListItemResponseOutputs` + +```typescript +const value: models.EventListItemResponseOutputs = { + type: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsephase.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsephase.md new file mode 100644 index 000000000..ad9b9219d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsephase.md @@ -0,0 +1,22 @@ +# EventListItemResponsePhase + +Phase of a deployment at which a failure occurred. + +Derived from the source deployment status: `preflights-failed` → +`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` → +`Updating`, `delete-failed` → `Deleting`. +`refresh-failed` is modelled separately via `DeploymentDegraded`. + +## Example Usage + +```typescript +import { EventListItemResponsePhase } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponsePhase = "deleting"; +``` + +## Values + +```typescript +"preflights" | "provisioning" | "updating" | "deleting" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseplatform.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseplatform.md new file mode 100644 index 000000000..b598b951b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseplatform.md @@ -0,0 +1,17 @@ +# EventListItemResponsePlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { EventListItemResponsePlatform } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponsePlatform = "gcp"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviousconfig.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviousconfig.md new file mode 100644 index 000000000..13f349306 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviousconfig.md @@ -0,0 +1,22 @@ +# EventListItemResponsePreviousConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { EventListItemResponsePreviousConfig } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponsePreviousConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviousconfigunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviousconfigunion.md new file mode 100644 index 000000000..d33efe6ab --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviousconfigunion.md @@ -0,0 +1,19 @@ +# EventListItemResponsePreviousConfigUnion + + +## Supported Types + +### `models.EventListItemResponsePreviousConfig` + +```typescript +const value: models.EventListItemResponsePreviousConfig = { + id: "", + type: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviouserror.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviouserror.md new file mode 100644 index 000000000..f33af0be1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviouserror.md @@ -0,0 +1,34 @@ +# EventListItemResponsePreviousError + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventListItemResponsePreviousError } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponsePreviousError = { + code: "", + internal: false, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviouserrorunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviouserrorunion.md new file mode 100644 index 000000000..baff5dec3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsepreviouserrorunion.md @@ -0,0 +1,20 @@ +# EventListItemResponsePreviousErrorUnion + + +## Supported Types + +### `models.EventListItemResponsePreviousError` + +```typescript +const value: models.EventListItemResponsePreviousError = { + code: "", + internal: false, + message: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseprogress.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseprogress.md new file mode 100644 index 000000000..f1cc2bd89 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseprogress.md @@ -0,0 +1,27 @@ +# EventListItemResponseProgress + +Progress information for image push operations + +## Example Usage + +```typescript +import { EventListItemResponseProgress } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseProgress = { + bytesUploaded: 810913, + layersUploaded: 441338, + operation: "", + totalBytes: 43935, + totalLayers: 949681, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `bytesUploaded` | *number* | :heavy_check_mark: | Bytes uploaded so far | +| `layersUploaded` | *number* | :heavy_check_mark: | Number of layers uploaded so far | +| `operation` | *string* | :heavy_check_mark: | Current operation being performed | +| `totalBytes` | *number* | :heavy_check_mark: | Total bytes to upload | +| `totalLayers` | *number* | :heavy_check_mark: | Total number of layers to upload | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseprogressunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseprogressunion.md new file mode 100644 index 000000000..6c6302875 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseprogressunion.md @@ -0,0 +1,22 @@ +# EventListItemResponseProgressUnion + + +## Supported Types + +### `models.EventListItemResponseProgress` + +```typescript +const value: models.EventListItemResponseProgress = { + bytesUploaded: 810913, + layersUploaded: 441338, + operation: "", + totalBytes: 43935, + totalLayers: 949681, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponseresources.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponseresources.md new file mode 100644 index 000000000..327df345b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponseresources.md @@ -0,0 +1,36 @@ +# EventListItemResponseResources + +Represents the state of a single resource within the stack for a specific platform. + +## Example Usage + +```typescript +import { EventListItemResponseResources } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseResources = { + config: { + id: "", + type: "", + }, + status: "pending", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `internal` | *any* | :heavy_minus_sign: | The platform-specific resource controller that manages this resource's lifecycle.
This is None when the resource status is Pending.
Stored as JSON to make the struct serializable and movable to alien-core. | +| `config` | [models.EventListItemResponseConfig](../models/eventlistitemresponseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `controllerPlatform` | *models.EventListItemResponseControllerPlatformUnion* | :heavy_minus_sign: | N/A | +| `dependencies` | [models.EventListItemResponseDependency](../models/eventlistitemresponsedependency.md)[] | :heavy_minus_sign: | Complete list of dependencies for this resource, including infrastructure dependencies.
This preserves the full dependency information from the stack definition. | +| `error` | *models.EventListItemResponseNextStateErrorUnion* | :heavy_minus_sign: | N/A | +| `lastFailedState` | *any* | :heavy_minus_sign: | Stores the controller state that failed, used for manual retry operations.
This allows resuming from the exact point where the failure occurred.
Stored as JSON to make the struct serializable and movable to alien-core. | +| `lifecycle` | *models.EventListItemResponseLifecycleUnion* | :heavy_minus_sign: | N/A | +| `outputs` | *models.EventListItemResponseOutputsUnion* | :heavy_minus_sign: | N/A | +| `previousConfig` | *models.EventListItemResponsePreviousConfigUnion* | :heavy_minus_sign: | N/A | +| `remoteBindingParams` | *any* | :heavy_minus_sign: | Binding parameters for remote access.
Only populated when the resource has `remote_access: true` in its ResourceEntry.
This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).
Populated by controllers during provisioning using get_binding_params(). | +| `retryAttempt` | *number* | :heavy_minus_sign: | Tracks consecutive retry attempts for the current state transition. | +| `status` | [models.EventListItemResponseStatus](../models/eventlistitemresponsestatus.md) | :heavy_check_mark: | Represents the high-level status of a resource during its lifecycle. | +| `type` | *string* | :heavy_check_mark: | The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsestate.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestate.md new file mode 100644 index 000000000..e0aac843a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestate.md @@ -0,0 +1,17 @@ +# EventListItemResponseState + +## Example Usage + +```typescript +import { EventListItemResponseState } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseState = { + failed: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `failed` | [models.EventListItemResponseFailed](../models/eventlistitemresponsefailed.md) | :heavy_check_mark: | Event failed with an error | diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatenone.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatenone.md new file mode 100644 index 000000000..f52e052bc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatenone.md @@ -0,0 +1,15 @@ +# EventListItemResponseStateNone + +## Example Usage + +```typescript +import { EventListItemResponseStateNone } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseStateNone = "none"; +``` + +## Values + +```typescript +"none" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatestarted.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatestarted.md new file mode 100644 index 000000000..a578ea13b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatestarted.md @@ -0,0 +1,15 @@ +# EventListItemResponseStateStarted + +## Example Usage + +```typescript +import { EventListItemResponseStateStarted } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseStateStarted = "started"; +``` + +## Values + +```typescript +"started" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatesuccess.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatesuccess.md new file mode 100644 index 000000000..a328a2833 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatesuccess.md @@ -0,0 +1,15 @@ +# EventListItemResponseStateSuccess + +## Example Usage + +```typescript +import { EventListItemResponseStateSuccess } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseStateSuccess = "success"; +``` + +## Values + +```typescript +"success" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsestateunion.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestateunion.md new file mode 100644 index 000000000..fa3ae5291 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestateunion.md @@ -0,0 +1,32 @@ +# EventListItemResponseStateUnion + +Represents the state of an event + + +## Supported Types + +### `models.EventListItemResponseState` + +```typescript +const value: models.EventListItemResponseState = { + failed: {}, +}; +``` + +### `models.EventListItemResponseStateNone` + +```typescript +const value: models.EventListItemResponseStateNone = "none"; +``` + +### `models.EventListItemResponseStateStarted` + +```typescript +const value: models.EventListItemResponseStateStarted = "started"; +``` + +### `models.EventListItemResponseStateSuccess` + +```typescript +const value: models.EventListItemResponseStateSuccess = "success"; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatus.md b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatus.md new file mode 100644 index 000000000..c8fef8c07 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventlistitemresponsestatus.md @@ -0,0 +1,17 @@ +# EventListItemResponseStatus + +Represents the high-level status of a resource during its lifecycle. + +## Example Usage + +```typescript +import { EventListItemResponseStatus } from "@alienplatform/platform-api/models"; + +let value: EventListItemResponseStatus = "delete-failed"; +``` + +## Values + +```typescript +"pending" | "provisioning" | "provision-failed" | "running" | "updating" | "update-failed" | "deleting" | "delete-failed" | "teardown-required" | "deleted" | "refresh-failed" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventnextstate.md b/client-sdks/platform/typescript/docs/models/eventnextstate.md new file mode 100644 index 000000000..74b058eda --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventnextstate.md @@ -0,0 +1,23 @@ +# EventNextState + +Represents the collective state of all resources in a stack, including platform and pending actions. + +## Example Usage + +```typescript +import { EventNextState } from "@alienplatform/platform-api/models"; + +let value: EventNextState = { + platform: "machines", + resourcePrefix: "", + resources: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `platform` | [models.EventPlatform](../models/eventplatform.md) | :heavy_check_mark: | Represents the target cloud platform. | +| `resourcePrefix` | *string* | :heavy_check_mark: | A prefix used for resource naming to ensure uniqueness across deployments. | +| `resources` | Record | :heavy_check_mark: | The state of individual resources, keyed by resource ID. | diff --git a/client-sdks/platform/typescript/docs/models/eventnextstateerrorunion.md b/client-sdks/platform/typescript/docs/models/eventnextstateerrorunion.md new file mode 100644 index 000000000..8c6fa0450 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventnextstateerrorunion.md @@ -0,0 +1,20 @@ +# EventNextStateErrorUnion + + +## Supported Types + +### `models.EventErrorNextState` + +```typescript +const value: models.EventErrorNextState = { + code: "", + internal: true, + message: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventphase.md b/client-sdks/platform/typescript/docs/models/eventphase.md new file mode 100644 index 000000000..5e64aed6e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventphase.md @@ -0,0 +1,22 @@ +# EventPhase + +Phase of a deployment at which a failure occurred. + +Derived from the source deployment status: `preflights-failed` → +`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` → +`Updating`, `delete-failed` → `Deleting`. +`refresh-failed` is modelled separately via `DeploymentDegraded`. + +## Example Usage + +```typescript +import { EventPhase } from "@alienplatform/platform-api/models"; + +let value: EventPhase = "deleting"; +``` + +## Values + +```typescript +"preflights" | "provisioning" | "updating" | "deleting" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventpreviouserror.md b/client-sdks/platform/typescript/docs/models/eventpreviouserror.md new file mode 100644 index 000000000..d6294341e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventpreviouserror.md @@ -0,0 +1,34 @@ +# EventPreviousError + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { EventPreviousError } from "@alienplatform/platform-api/models"; + +let value: EventPreviousError = { + code: "", + internal: true, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/eventpreviouserrorunion.md b/client-sdks/platform/typescript/docs/models/eventpreviouserrorunion.md new file mode 100644 index 000000000..9f0fe2101 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventpreviouserrorunion.md @@ -0,0 +1,20 @@ +# EventPreviousErrorUnion + + +## Supported Types + +### `models.EventPreviousError` + +```typescript +const value: models.EventPreviousError = { + code: "", + internal: true, + message: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventprogress.md b/client-sdks/platform/typescript/docs/models/eventprogress.md new file mode 100644 index 000000000..75444e668 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventprogress.md @@ -0,0 +1,27 @@ +# EventProgress + +Progress information for image push operations + +## Example Usage + +```typescript +import { EventProgress } from "@alienplatform/platform-api/models"; + +let value: EventProgress = { + bytesUploaded: 376832, + layersUploaded: 873781, + operation: "", + totalBytes: 861993, + totalLayers: 202100, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `bytesUploaded` | *number* | :heavy_check_mark: | Bytes uploaded so far | +| `layersUploaded` | *number* | :heavy_check_mark: | Number of layers uploaded so far | +| `operation` | *string* | :heavy_check_mark: | Current operation being performed | +| `totalBytes` | *number* | :heavy_check_mark: | Total bytes to upload | +| `totalLayers` | *number* | :heavy_check_mark: | Total number of layers to upload | diff --git a/client-sdks/platform/typescript/docs/models/eventprogressunion.md b/client-sdks/platform/typescript/docs/models/eventprogressunion.md new file mode 100644 index 000000000..80c5ab297 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventprogressunion.md @@ -0,0 +1,22 @@ +# EventProgressUnion + + +## Supported Types + +### `models.EventProgress` + +```typescript +const value: models.EventProgress = { + bytesUploaded: 376832, + layersUploaded: 873781, + operation: "", + totalBytes: 861993, + totalLayers: 202100, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/eventresources.md b/client-sdks/platform/typescript/docs/models/eventresources.md index 3abda9401..b1f268220 100644 --- a/client-sdks/platform/typescript/docs/models/eventresources.md +++ b/client-sdks/platform/typescript/docs/models/eventresources.md @@ -25,7 +25,7 @@ let value: EventResources = { | `config` | [models.EventConfig](../models/eventconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | | `controllerPlatform` | *models.EventControllerPlatformUnion* | :heavy_minus_sign: | N/A | | `dependencies` | [models.EventDependency](../models/eventdependency.md)[] | :heavy_minus_sign: | Complete list of dependencies for this resource, including infrastructure dependencies.
This preserves the full dependency information from the stack definition. | -| `error` | *models.NextStateErrorUnion* | :heavy_minus_sign: | N/A | +| `error` | *models.EventNextStateErrorUnion* | :heavy_minus_sign: | N/A | | `lastFailedState` | *any* | :heavy_minus_sign: | Stores the controller state that failed, used for manual retry operations.
This allows resuming from the exact point where the failure occurred.
Stored as JSON to make the struct serializable and movable to alien-core. | | `lifecycle` | *models.EventLifecycleUnion* | :heavy_minus_sign: | N/A | | `outputs` | *models.EventOutputsUnion* | :heavy_minus_sign: | N/A | @@ -33,4 +33,4 @@ let value: EventResources = { | `remoteBindingParams` | *any* | :heavy_minus_sign: | Binding parameters for remote access.
Only populated when the resource has `remote_access: true` in its ResourceEntry.
This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding).
Populated by controllers during provisioning using get_binding_params(). | | `retryAttempt` | *number* | :heavy_minus_sign: | Tracks consecutive retry attempts for the current state transition. | | `status` | [models.EventStatus](../models/eventstatus.md) | :heavy_check_mark: | Represents the high-level status of a resource during its lifecycle. | -| `type` | *string* | :heavy_check_mark: | The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). | \ No newline at end of file +| `type` | *string* | :heavy_check_mark: | The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). | diff --git a/client-sdks/platform/typescript/docs/models/eventstate.md b/client-sdks/platform/typescript/docs/models/eventstate.md index 9bd2f980f..eb6340804 100644 --- a/client-sdks/platform/typescript/docs/models/eventstate.md +++ b/client-sdks/platform/typescript/docs/models/eventstate.md @@ -12,6 +12,6 @@ let value: EventState = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | -| `failed` | [models.Failed](../models/failed.md) | :heavy_check_mark: | Event failed with an error | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `failed` | [models.EventFailed](../models/eventfailed.md) | :heavy_check_mark: | Event failed with an error | diff --git a/client-sdks/platform/typescript/docs/models/eventstatenone.md b/client-sdks/platform/typescript/docs/models/eventstatenone.md new file mode 100644 index 000000000..212f11413 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventstatenone.md @@ -0,0 +1,15 @@ +# EventStateNone + +## Example Usage + +```typescript +import { EventStateNone } from "@alienplatform/platform-api/models"; + +let value: EventStateNone = "none"; +``` + +## Values + +```typescript +"none" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventstatestarted.md b/client-sdks/platform/typescript/docs/models/eventstatestarted.md new file mode 100644 index 000000000..edd8fd193 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventstatestarted.md @@ -0,0 +1,15 @@ +# EventStateStarted + +## Example Usage + +```typescript +import { EventStateStarted } from "@alienplatform/platform-api/models"; + +let value: EventStateStarted = "started"; +``` + +## Values + +```typescript +"started" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventstatesuccess.md b/client-sdks/platform/typescript/docs/models/eventstatesuccess.md new file mode 100644 index 000000000..e27ff1411 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventstatesuccess.md @@ -0,0 +1,15 @@ +# EventStateSuccess + +## Example Usage + +```typescript +import { EventStateSuccess } from "@alienplatform/platform-api/models"; + +let value: EventStateSuccess = "success"; +``` + +## Values + +```typescript +"success" +``` diff --git a/client-sdks/platform/typescript/docs/models/eventstateunion.md b/client-sdks/platform/typescript/docs/models/eventstateunion.md new file mode 100644 index 000000000..b881a2a22 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/eventstateunion.md @@ -0,0 +1,32 @@ +# EventStateUnion + +Represents the state of an event + + +## Supported Types + +### `models.EventState` + +```typescript +const value: models.EventState = { + failed: {}, +}; +``` + +### `models.EventStateNone` + +```typescript +const value: models.EventStateNone = "none"; +``` + +### `models.EventStateStarted` + +```typescript +const value: models.EventStateStarted = "started"; +``` + +### `models.EventStateSuccess` + +```typescript +const value: models.EventStateSuccess = "success"; +``` diff --git a/client-sdks/platform/typescript/docs/models/failed.md b/client-sdks/platform/typescript/docs/models/failed.md deleted file mode 100644 index 44e948358..000000000 --- a/client-sdks/platform/typescript/docs/models/failed.md +++ /dev/null @@ -1,17 +0,0 @@ -# Failed - -Event failed with an error - -## Example Usage - -```typescript -import { Failed } from "@alienplatform/platform-api/models"; - -let value: Failed = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------- | ------------------------- | ------------------------- | ------------------------- | -| `error` | *models.FailedErrorUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/failederrorunion.md b/client-sdks/platform/typescript/docs/models/failederrorunion.md deleted file mode 100644 index 92d60bd09..000000000 --- a/client-sdks/platform/typescript/docs/models/failederrorunion.md +++ /dev/null @@ -1,21 +0,0 @@ -# FailedErrorUnion - - -## Supported Types - -### `models.ErrorFailed` - -```typescript -const value: models.ErrorFailed = { - code: "", - internal: true, - message: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/forwardimportrequest.md b/client-sdks/platform/typescript/docs/models/forwardimportrequest.md index 7e5bd6b51..4a7955379 100644 --- a/client-sdks/platform/typescript/docs/models/forwardimportrequest.md +++ b/client-sdks/platform/typescript/docs/models/forwardimportrequest.md @@ -23,7 +23,11 @@ let value: ForwardImportRequest = { { id: "", type: "", - importData: {}, + importData: { + "key": "", + "key1": "", + "key2": "", + }, }, ], }, @@ -39,4 +43,4 @@ let value: ForwardImportRequest = { | `deploymentGroupId` | *string* | :heavy_minus_sign: | Required for user-session callers. Deployment-group tokens use their own group automatically. | dg_r27ict8c7vcgsumpj90ackf7b | | `managerId` | *string* | :heavy_minus_sign: | N/A | mgr_enxscjrqiiu2lrc672hwwuc5 | | `source` | [models.ImportSource](../models/importsource.md) | :heavy_check_mark: | Resolved setup import payload | | -| `inputValues` | Record | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `inputValues` | Record | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/generatemanagerbindingtokenrequest.md b/client-sdks/platform/typescript/docs/models/generatemanagerbindingtokenrequest.md new file mode 100644 index 000000000..a200bd7eb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/generatemanagerbindingtokenrequest.md @@ -0,0 +1,17 @@ +# GenerateManagerBindingTokenRequest + +## Example Usage + +```typescript +import { GenerateManagerBindingTokenRequest } from "@alienplatform/platform-api/models"; + +let value: GenerateManagerBindingTokenRequest = { + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `deploymentId` | *string* | :heavy_check_mark: | Exact deployment whose remote bindings may be resolved. | dep_0c29fq4a2yjb7kx3smwdgxlc | diff --git a/client-sdks/platform/typescript/docs/models/generatemanagercommandtokenrequest.md b/client-sdks/platform/typescript/docs/models/generatemanagercommandtokenrequest.md new file mode 100644 index 000000000..1d20ed557 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/generatemanagercommandtokenrequest.md @@ -0,0 +1,17 @@ +# GenerateManagerCommandTokenRequest + +## Example Usage + +```typescript +import { GenerateManagerCommandTokenRequest } from "@alienplatform/platform-api/models"; + +let value: GenerateManagerCommandTokenRequest = { + commandId: "cmd_2sxjXxvOYct7IohT3ukliAzf", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `commandId` | *string* | :heavy_check_mark: | Exact command whose encrypted payload may be read. | cmd_2sxjXxvOYct7IohT3ukliAzf | diff --git a/client-sdks/platform/typescript/docs/models/importdeploymentrequest.md b/client-sdks/platform/typescript/docs/models/importdeploymentrequest.md index a15c43511..e6d6eaf60 100644 --- a/client-sdks/platform/typescript/docs/models/importdeploymentrequest.md +++ b/client-sdks/platform/typescript/docs/models/importdeploymentrequest.md @@ -26,7 +26,11 @@ const value: models.ForwardImportRequest = { { id: "", type: "", - importData: {}, + importData: { + "key": "", + "key1": "", + "key2": "", + }, }, ], }, @@ -52,4 +56,3 @@ const value: models.PersistImportedDeploymentRequest = { setupFingerprintVersion: 119877, }; ``` - diff --git a/client-sdks/platform/typescript/docs/models/importsource.md b/client-sdks/platform/typescript/docs/models/importsource.md index 83fddd6ad..7a58f6662 100644 --- a/client-sdks/platform/typescript/docs/models/importsource.md +++ b/client-sdks/platform/typescript/docs/models/importsource.md @@ -22,7 +22,11 @@ let value: ImportSource = { { id: "", type: "", - importData: {}, + importData: { + "key": "", + "key1": "", + "key2": "", + }, }, ], }; @@ -46,4 +50,4 @@ let value: ImportSource = { | `setupFingerprintVersion` | *number* | :heavy_check_mark: | N/A | | | `stackSettings` | [models.ImportSourceStackSettings](../models/importsourcestacksettings.md) | :heavy_check_mark: | User-customizable deployment settings specified at deploy time.

These settings are provided by the customer via CloudFormation parameters,
Terraform attributes, CLI flags, or Helm values. They customize how the
deployment runs and what capabilities are enabled.

**Key distinction**: StackSettings is user-customizable, while ManagementConfig
is platform-derived (from the Manager's ServiceAccount). | | | `managementConfig` | *models.ImportSourceManagementConfigUnion* | :heavy_minus_sign: | Management configuration for different cloud platforms.

Platform-derived configuration for cross-account/cross-tenant access.
This is NOT user-specified - it's derived from the Manager's ServiceAccount. | | -| `resources` | [models.ImportedResource](../models/importedresource.md)[] | :heavy_check_mark: | N/A | | \ No newline at end of file +| `resources` | [models.ImportedResource](../models/importedresource.md)[] | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/importsourcefailuredomains1.md b/client-sdks/platform/typescript/docs/models/importsourcefailuredomains1.md new file mode 100644 index 000000000..1a5cefec1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/importsourcefailuredomains1.md @@ -0,0 +1,20 @@ +# ImportSourceFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ImportSourceFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: ImportSourceFailureDomains1 = { + spread: 679399, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/importsourcefailuredomains2.md b/client-sdks/platform/typescript/docs/models/importsourcefailuredomains2.md new file mode 100644 index 000000000..c61c354ad --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/importsourcefailuredomains2.md @@ -0,0 +1,20 @@ +# ImportSourceFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ImportSourceFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: ImportSourceFailureDomains2 = { + spread: 888200, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/importsourcefailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/importsourcefailuredomainsunion1.md new file mode 100644 index 000000000..65171f455 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/importsourcefailuredomainsunion1.md @@ -0,0 +1,18 @@ +# ImportSourceFailureDomainsUnion1 + + +## Supported Types + +### `models.ImportSourceFailureDomains1` + +```typescript +const value: models.ImportSourceFailureDomains1 = { + spread: 679399, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/importsourcefailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/importsourcefailuredomainsunion2.md new file mode 100644 index 000000000..ea40dd6a9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/importsourcefailuredomainsunion2.md @@ -0,0 +1,18 @@ +# ImportSourceFailureDomainsUnion2 + + +## Supported Types + +### `models.ImportSourceFailureDomains2` + +```typescript +const value: models.ImportSourceFailureDomains2 = { + spread: 888200, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/importsourcepoolsautoscale.md b/client-sdks/platform/typescript/docs/models/importsourcepoolsautoscale.md index ee2cca309..85e43cbb8 100644 --- a/client-sdks/platform/typescript/docs/models/importsourcepoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/importsourcepoolsautoscale.md @@ -16,7 +16,8 @@ let value: ImportSourcePoolsAutoscale = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ImportSourceFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/importsourcepoolsfixed.md b/client-sdks/platform/typescript/docs/models/importsourcepoolsfixed.md index add5ba478..ece7aa11d 100644 --- a/client-sdks/platform/typescript/docs/models/importsourcepoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/importsourcepoolsfixed.md @@ -15,6 +15,7 @@ let value: ImportSourcePoolsFixed = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ImportSourceFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/inviter.md b/client-sdks/platform/typescript/docs/models/inviter.md new file mode 100644 index 000000000..4c77f94b5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/inviter.md @@ -0,0 +1,19 @@ +# Inviter + +## Example Usage + +```typescript +import { Inviter } from "@alienplatform/platform-api/models"; + +let value: Inviter = { + name: "", + image: "https://prime-reorganisation.info/", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `name` | *string* | :heavy_check_mark: | N/A | +| `image` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/keyinfo.md b/client-sdks/platform/typescript/docs/models/keyinfo.md index 764a6aa11..87b21538e 100644 --- a/client-sdks/platform/typescript/docs/models/keyinfo.md +++ b/client-sdks/platform/typescript/docs/models/keyinfo.md @@ -24,12 +24,12 @@ let value: KeyInfo = { deploymentSetupConfig: { metadata: { "key": "", - "key1": "", - "key2": "", }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }, @@ -55,4 +55,4 @@ let value: KeyInfo = { | `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | | `lastUsedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | | `revokedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | -| `deploymentSetupConfig` | [models.APIKeyDeploymentSetupConfig](../models/apikeydeploymentsetupconfig.md) | :heavy_check_mark: | N/A | | \ No newline at end of file +| `deploymentSetupConfig` | [models.APIKeyDeploymentSetupConfig](../models/apikeydeploymentsetupconfig.md) | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/manageractivedebugsession.md b/client-sdks/platform/typescript/docs/models/manageractivedebugsession.md new file mode 100644 index 000000000..1ff2ff5d1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/manageractivedebugsession.md @@ -0,0 +1,24 @@ +# ManagerActiveDebugSession + +## Example Usage + +```typescript +import { ManagerActiveDebugSession } from "@alienplatform/platform-api/models"; + +let value: ManagerActiveDebugSession = { + id: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + state: "stopped", + expiresAt: new Date("2025-04-05T19:55:04.463Z"), +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the debug session. | dbg_HOXmkmT9UPYlsnxqSNlEGoXL | +| `deploymentId` | *string* | :heavy_check_mark: | Unique identifier for the deployment. | dep_0c29fq4a2yjb7kx3smwdgxlc | +| `state` | [models.DebugSessionState](../models/debugsessionstate.md) | :heavy_check_mark: | N/A | | +| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `backendTargetId` | *string* | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/manageractivedebugsessionlistresponse.md b/client-sdks/platform/typescript/docs/models/manageractivedebugsessionlistresponse.md new file mode 100644 index 000000000..6f289e3d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/manageractivedebugsessionlistresponse.md @@ -0,0 +1,28 @@ +# ManagerActiveDebugSessionListResponse + +Paginated response + +## Example Usage + +```typescript +import { ManagerActiveDebugSessionListResponse } from "@alienplatform/platform-api/models"; + +let value: ManagerActiveDebugSessionListResponse = { + items: [ + { + id: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + state: "failed", + expiresAt: new Date("2024-07-14T07:23:56.850Z"), + }, + ], + nextCursor: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `items` | [models.ManagerActiveDebugSession](../models/manageractivedebugsession.md)[] | :heavy_check_mark: | Items in this page | +| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponse.md b/client-sdks/platform/typescript/docs/models/managerretryresponse.md index 49ba6256a..8635ddbf8 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponse.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponse.md @@ -20,7 +20,9 @@ const value: models.ManagerRetryResponseSetup = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [ { @@ -57,4 +59,3 @@ const value: models.ManagerRetryDeploymentResponse = { message: "", }; ``` - diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains1.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains1.md new file mode 100644 index 000000000..2e31fab03 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains1.md @@ -0,0 +1,20 @@ +# ManagerRetryResponseFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ManagerRetryResponseFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: ManagerRetryResponseFailureDomains1 = { + spread: 95775, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains2.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains2.md new file mode 100644 index 000000000..e54e6d099 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains2.md @@ -0,0 +1,20 @@ +# ManagerRetryResponseFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ManagerRetryResponseFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: ManagerRetryResponseFailureDomains2 = { + spread: 982587, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains3.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains3.md new file mode 100644 index 000000000..2c2491f2e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains3.md @@ -0,0 +1,20 @@ +# ManagerRetryResponseFailureDomains3 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ManagerRetryResponseFailureDomains3 } from "@alienplatform/platform-api/models"; + +let value: ManagerRetryResponseFailureDomains3 = { + spread: 62272, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains4.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains4.md new file mode 100644 index 000000000..1f113c046 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains4.md @@ -0,0 +1,20 @@ +# ManagerRetryResponseFailureDomains4 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ManagerRetryResponseFailureDomains4 } from "@alienplatform/platform-api/models"; + +let value: ManagerRetryResponseFailureDomains4 = { + spread: 794975, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains5.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains5.md new file mode 100644 index 000000000..be4d84b30 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains5.md @@ -0,0 +1,20 @@ +# ManagerRetryResponseFailureDomains5 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ManagerRetryResponseFailureDomains5 } from "@alienplatform/platform-api/models"; + +let value: ManagerRetryResponseFailureDomains5 = { + spread: 179689, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains6.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains6.md new file mode 100644 index 000000000..96c09bfdc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomains6.md @@ -0,0 +1,20 @@ +# ManagerRetryResponseFailureDomains6 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { ManagerRetryResponseFailureDomains6 } from "@alienplatform/platform-api/models"; + +let value: ManagerRetryResponseFailureDomains6 = { + spread: 821053, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion1.md new file mode 100644 index 000000000..a834c93c4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion1.md @@ -0,0 +1,18 @@ +# ManagerRetryResponseFailureDomainsUnion1 + + +## Supported Types + +### `models.ManagerRetryResponseFailureDomains1` + +```typescript +const value: models.ManagerRetryResponseFailureDomains1 = { + spread: 95775, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion2.md new file mode 100644 index 000000000..48c1c921e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion2.md @@ -0,0 +1,18 @@ +# ManagerRetryResponseFailureDomainsUnion2 + + +## Supported Types + +### `models.ManagerRetryResponseFailureDomains2` + +```typescript +const value: models.ManagerRetryResponseFailureDomains2 = { + spread: 982587, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion3.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion3.md new file mode 100644 index 000000000..f0f2f4a1d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion3.md @@ -0,0 +1,18 @@ +# ManagerRetryResponseFailureDomainsUnion3 + + +## Supported Types + +### `models.ManagerRetryResponseFailureDomains3` + +```typescript +const value: models.ManagerRetryResponseFailureDomains3 = { + spread: 62272, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion4.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion4.md new file mode 100644 index 000000000..62502cff1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion4.md @@ -0,0 +1,18 @@ +# ManagerRetryResponseFailureDomainsUnion4 + + +## Supported Types + +### `models.ManagerRetryResponseFailureDomains4` + +```typescript +const value: models.ManagerRetryResponseFailureDomains4 = { + spread: 794975, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion5.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion5.md new file mode 100644 index 000000000..89459093d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion5.md @@ -0,0 +1,18 @@ +# ManagerRetryResponseFailureDomainsUnion5 + + +## Supported Types + +### `models.ManagerRetryResponseFailureDomains5` + +```typescript +const value: models.ManagerRetryResponseFailureDomains5 = { + spread: 179689, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion6.md b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion6.md new file mode 100644 index 000000000..9a43b6e6a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsefailuredomainsunion6.md @@ -0,0 +1,18 @@ +# ManagerRetryResponseFailureDomainsUnion6 + + +## Supported Types + +### `models.ManagerRetryResponseFailureDomains6` + +```typescript +const value: models.ManagerRetryResponseFailureDomains6 = { + spread: 821053, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale1.md b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale1.md index c432650a9..ecd88ca5b 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale1.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale1.md @@ -16,7 +16,8 @@ let value: ManagerRetryResponsePoolsAutoscale1 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ManagerRetryResponseFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale2.md b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale2.md index bd9625b80..89b577f23 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale2.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale2.md @@ -16,7 +16,8 @@ let value: ManagerRetryResponsePoolsAutoscale2 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ManagerRetryResponseFailureDomainsUnion4* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale3.md b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale3.md index 3d044fa2c..fbe26439b 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale3.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsautoscale3.md @@ -16,7 +16,8 @@ let value: ManagerRetryResponsePoolsAutoscale3 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ManagerRetryResponseFailureDomainsUnion6* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed1.md b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed1.md index c76493d07..02f99a58a 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed1.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed1.md @@ -15,6 +15,7 @@ let value: ManagerRetryResponsePoolsFixed1 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ManagerRetryResponseFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed2.md b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed2.md index 747038f90..8022e4448 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed2.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed2.md @@ -15,6 +15,7 @@ let value: ManagerRetryResponsePoolsFixed2 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ManagerRetryResponseFailureDomainsUnion3* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed3.md b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed3.md index b6f323ea6..692da49f7 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed3.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsepoolsfixed3.md @@ -15,6 +15,7 @@ let value: ManagerRetryResponsePoolsFixed3 = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.ManagerRetryResponseFailureDomainsUnion5* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsesetup.md b/client-sdks/platform/typescript/docs/models/managerretryresponsesetup.md index 3ce743642..6363868a8 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsesetup.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsesetup.md @@ -19,7 +19,9 @@ let value: ManagerRetryResponseSetup = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [ { @@ -56,4 +58,4 @@ let value: ManagerRetryResponseSetup = { | `deploymentLink` | *string* | :heavy_check_mark: | N/A | | | `setupConfig` | [models.ManagerRetryResponseSetupConfig](../models/managerretryresponsesetupconfig.md) | :heavy_check_mark: | N/A | | | `setup` | *models.ManagerRetryResponseSetupUnion* | :heavy_check_mark: | N/A | | -| `mode` | [models.ModeSetup](../models/modesetup.md) | :heavy_check_mark: | N/A | | \ No newline at end of file +| `mode` | [models.ModeSetup](../models/modesetup.md) | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/managerretryresponsesetupconfig.md b/client-sdks/platform/typescript/docs/models/managerretryresponsesetupconfig.md index 839c2dcb9..7d6d0f66a 100644 --- a/client-sdks/platform/typescript/docs/models/managerretryresponsesetupconfig.md +++ b/client-sdks/platform/typescript/docs/models/managerretryresponsesetupconfig.md @@ -12,7 +12,9 @@ let value: ManagerRetryResponseSetupConfig = { }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }; @@ -26,4 +28,4 @@ let value: ManagerRetryResponseSetupConfig = { | `policy` | [models.DeploymentSetupPolicy](../models/deploymentsetuppolicy.md) | :heavy_check_mark: | N/A | | `inputValues` | Record | :heavy_minus_sign: | N/A | | `publicSubdomain` | *string* | :heavy_minus_sign: | Operator-pinned deployment subdomain for this setup token. | -| `environmentVariables` | [models.ManagerRetryResponseEnvironmentVariable](../models/managerretryresponseenvironmentvariable.md)[] | :heavy_check_mark: | N/A | \ No newline at end of file +| `environmentVariables` | [models.ManagerRetryResponseEnvironmentVariable](../models/managerretryresponseenvironmentvariable.md)[] | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomains1.md b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomains1.md new file mode 100644 index 000000000..c5537017f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomains1.md @@ -0,0 +1,20 @@ +# NewDeploymentRequestFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { NewDeploymentRequestFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: NewDeploymentRequestFailureDomains1 = { + spread: 596174, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomains2.md b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomains2.md new file mode 100644 index 000000000..9694d2e8a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomains2.md @@ -0,0 +1,20 @@ +# NewDeploymentRequestFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { NewDeploymentRequestFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: NewDeploymentRequestFailureDomains2 = { + spread: 665508, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomainsunion1.md new file mode 100644 index 000000000..bbd27e77c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomainsunion1.md @@ -0,0 +1,18 @@ +# NewDeploymentRequestFailureDomainsUnion1 + + +## Supported Types + +### `models.NewDeploymentRequestFailureDomains1` + +```typescript +const value: models.NewDeploymentRequestFailureDomains1 = { + spread: 596174, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomainsunion2.md new file mode 100644 index 000000000..75f915d46 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/newdeploymentrequestfailuredomainsunion2.md @@ -0,0 +1,18 @@ +# NewDeploymentRequestFailureDomainsUnion2 + + +## Supported Types + +### `models.NewDeploymentRequestFailureDomains2` + +```typescript +const value: models.NewDeploymentRequestFailureDomains2 = { + spread: 665508, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsautoscale.md b/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsautoscale.md index 36ca20e5e..d2ab2cd03 100644 --- a/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsautoscale.md @@ -16,7 +16,8 @@ let value: NewDeploymentRequestPoolsAutoscale = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.NewDeploymentRequestFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsfixed.md b/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsfixed.md index a6bc6a7e4..02d8f214c 100644 --- a/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/newdeploymentrequestpoolsfixed.md @@ -15,6 +15,7 @@ let value: NewDeploymentRequestPoolsFixed = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.NewDeploymentRequestFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/nextstate.md b/client-sdks/platform/typescript/docs/models/nextstate.md deleted file mode 100644 index be86d9277..000000000 --- a/client-sdks/platform/typescript/docs/models/nextstate.md +++ /dev/null @@ -1,23 +0,0 @@ -# NextState - -Represents the collective state of all resources in a stack, including platform and pending actions. - -## Example Usage - -```typescript -import { NextState } from "@alienplatform/platform-api/models"; - -let value: NextState = { - platform: "kubernetes", - resourcePrefix: "", - resources: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| `platform` | [models.EventPlatform](../models/eventplatform.md) | :heavy_check_mark: | Represents the target cloud platform. | -| `resourcePrefix` | *string* | :heavy_check_mark: | A prefix used for resource naming to ensure uniqueness across deployments. | -| `resources` | Record | :heavy_check_mark: | The state of individual resources, keyed by resource ID. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/nextstateerrorunion.md b/client-sdks/platform/typescript/docs/models/nextstateerrorunion.md deleted file mode 100644 index 08a254372..000000000 --- a/client-sdks/platform/typescript/docs/models/nextstateerrorunion.md +++ /dev/null @@ -1,21 +0,0 @@ -# NextStateErrorUnion - - -## Supported Types - -### `models.ErrorNextState` - -```typescript -const value: models.ErrorNextState = { - code: "", - internal: false, - message: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/operations/acceptworkspaceinvitationrequest.md b/client-sdks/platform/typescript/docs/models/operations/acceptworkspaceinvitationrequest.md new file mode 100644 index 000000000..c26531208 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/acceptworkspaceinvitationrequest.md @@ -0,0 +1,17 @@ +# AcceptWorkspaceInvitationRequest + +## Example Usage + +```typescript +import { AcceptWorkspaceInvitationRequest } from "@alienplatform/platform-api/models/operations"; + +let value: AcceptWorkspaceInvitationRequest = { + token: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `token` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/approveagentsessionrequest.md b/client-sdks/platform/typescript/docs/models/operations/approveagentsessionrequest.md new file mode 100644 index 000000000..07e09788e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/approveagentsessionrequest.md @@ -0,0 +1,19 @@ +# ApproveAgentSessionRequest + +## Example Usage + +```typescript +import { ApproveAgentSessionRequest } from "@alienplatform/platform-api/models/operations"; + +let value: ApproveAgentSessionRequest = { + id: "", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitationrequest.md b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitationrequest.md new file mode 100644 index 000000000..b8b5ae2d3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitationrequest.md @@ -0,0 +1,20 @@ +# CreateWorkspaceInvitationRequest + +## Example Usage + +```typescript +import { CreateWorkspaceInvitationRequest } from "@alienplatform/platform-api/models/operations"; + +let value: CreateWorkspaceInvitationRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `requestBody` | [operations.CreateWorkspaceInvitationRequestBody](../../models/operations/createworkspaceinvitationrequestbody.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitationrequestbody.md b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitationrequestbody.md new file mode 100644 index 000000000..f39bfe7c4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitationrequestbody.md @@ -0,0 +1,19 @@ +# CreateWorkspaceInvitationRequestBody + +## Example Usage + +```typescript +import { CreateWorkspaceInvitationRequestBody } from "@alienplatform/platform-api/models/operations"; + +let value: CreateWorkspaceInvitationRequestBody = { + email: "Tyrell_Kris74@hotmail.com", + role: "workspace.member", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `email` | *string* | :heavy_check_mark: | N/A | | +| `role` | [models.WorkspaceRole](../../models/workspacerole.md) | :heavy_check_mark: | Role for workspace-scoped service accounts | workspace.member | diff --git a/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitelinkrequest.md b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitelinkrequest.md new file mode 100644 index 000000000..593186b33 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitelinkrequest.md @@ -0,0 +1,20 @@ +# CreateWorkspaceInviteLinkRequest + +## Example Usage + +```typescript +import { CreateWorkspaceInviteLinkRequest } from "@alienplatform/platform-api/models/operations"; + +let value: CreateWorkspaceInviteLinkRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `requestBody` | [operations.CreateWorkspaceInviteLinkRequestBody](../../models/operations/createworkspaceinvitelinkrequestbody.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitelinkrequestbody.md b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitelinkrequestbody.md new file mode 100644 index 000000000..01f00b2bb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/createworkspaceinvitelinkrequestbody.md @@ -0,0 +1,17 @@ +# CreateWorkspaceInviteLinkRequestBody + +## Example Usage + +```typescript +import { CreateWorkspaceInviteLinkRequestBody } from "@alienplatform/platform-api/models/operations"; + +let value: CreateWorkspaceInviteLinkRequestBody = { + role: "workspace.member", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `role` | [models.WorkspaceRole](../../models/workspacerole.md) | :heavy_check_mark: | Role for workspace-scoped service accounts | workspace.member | diff --git a/client-sdks/platform/typescript/docs/models/operations/dataaws1.md b/client-sdks/platform/typescript/docs/models/operations/dataaws1.md index 79c1407f7..862c8b2b6 100644 --- a/client-sdks/platform/typescript/docs/models/operations/dataaws1.md +++ b/client-sdks/platform/typescript/docs/models/operations/dataaws1.md @@ -63,6 +63,7 @@ let value: DataAws1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [operations.DataStatus13](../../models/operations/datastatus13.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"aws"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"aws"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/dataazure1.md b/client-sdks/platform/typescript/docs/models/operations/dataazure1.md index 15708477e..84d854c7b 100644 --- a/client-sdks/platform/typescript/docs/models/operations/dataazure1.md +++ b/client-sdks/platform/typescript/docs/models/operations/dataazure1.md @@ -58,6 +58,7 @@ let value: DataAzure1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [operations.DataStatus15](../../models/operations/datastatus15.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"azure"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"azure"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/datagcp1.md b/client-sdks/platform/typescript/docs/models/operations/datagcp1.md index 75ffc8836..2d6f3d27f 100644 --- a/client-sdks/platform/typescript/docs/models/operations/datagcp1.md +++ b/client-sdks/platform/typescript/docs/models/operations/datagcp1.md @@ -57,6 +57,7 @@ let value: DataGcp1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [operations.DataStatus14](../../models/operations/datastatus14.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"gcp"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"gcp"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/datahorizonplatform.md b/client-sdks/platform/typescript/docs/models/operations/datahorizonplatform.md index 186b242f3..516e06bc8 100644 --- a/client-sdks/platform/typescript/docs/models/operations/datahorizonplatform.md +++ b/client-sdks/platform/typescript/docs/models/operations/datahorizonplatform.md @@ -39,9 +39,11 @@ let value: DataHorizonPlatform = { | `cpu` | *operations.CpuUnion3* | :heavy_minus_sign: | N/A | | `events` | [operations.Event3](../../models/operations/event3.md)[] | :heavy_check_mark: | N/A | | `image` | *string* | :heavy_minus_sign: | N/A | +| `latestUpdateTimestamp` | *string* | :heavy_minus_sign: | N/A | | `memory` | *operations.MemoryUnion3* | :heavy_minus_sign: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `replicaUnits` | [operations.ReplicaUnit](../../models/operations/replicaunit.md)[] | :heavy_check_mark: | N/A | | `replicas` | [operations.Replicas2](../../models/operations/replicas2.md) | :heavy_check_mark: | N/A | | `schedulingMode` | [operations.SchedulingMode](../../models/operations/schedulingmode.md) | :heavy_check_mark: | N/A | | `status` | [operations.DataStatus10](../../models/operations/datastatus10.md) | :heavy_check_mark: | N/A | -| `backend` | *"horizonPlatform"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"horizonPlatform"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/datamachines1.md b/client-sdks/platform/typescript/docs/models/operations/datamachines1.md index 8763f73b0..9810f50df 100644 --- a/client-sdks/platform/typescript/docs/models/operations/datamachines1.md +++ b/client-sdks/platform/typescript/docs/models/operations/datamachines1.md @@ -56,6 +56,7 @@ let value: DataMachines1 = { | `horizonStatusMessage` | *string* | :heavy_minus_sign: | N/A | | `horizonStatusReason` | *string* | :heavy_minus_sign: | N/A | | `latestUpdateTimestamp` | *string* | :heavy_check_mark: | N/A | +| `observedImage` | *string* | :heavy_minus_sign: | N/A | | `status` | [operations.DataStatus16](../../models/operations/datastatus16.md) | :heavy_check_mark: | N/A | | `unavailableInstances` | *number* | :heavy_check_mark: | N/A | -| `backend` | *"machines"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `backend` | *"machines"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/generatemanagerbindingtokenrequest.md b/client-sdks/platform/typescript/docs/models/operations/generatemanagerbindingtokenrequest.md new file mode 100644 index 000000000..7fb327e30 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/generatemanagerbindingtokenrequest.md @@ -0,0 +1,23 @@ +# GenerateManagerBindingTokenRequest + +## Example Usage + +```typescript +import { GenerateManagerBindingTokenRequest } from "@alienplatform/platform-api/models/operations"; + +let value: GenerateManagerBindingTokenRequest = { + id: "mgr_enxscjrqiiu2lrc672hwwuc5", + workspace: "my-workspace", + generateManagerBindingTokenRequest: { + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for a manager. | mgr_enxscjrqiiu2lrc672hwwuc5 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `generateManagerBindingTokenRequest` | [models.GenerateManagerBindingTokenRequest](../../models/generatemanagerbindingtokenrequest.md) | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/generatemanagercommandtokenrequest.md b/client-sdks/platform/typescript/docs/models/operations/generatemanagercommandtokenrequest.md new file mode 100644 index 000000000..2b399aecb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/generatemanagercommandtokenrequest.md @@ -0,0 +1,23 @@ +# GenerateManagerCommandTokenRequest + +## Example Usage + +```typescript +import { GenerateManagerCommandTokenRequest } from "@alienplatform/platform-api/models/operations"; + +let value: GenerateManagerCommandTokenRequest = { + id: "mgr_enxscjrqiiu2lrc672hwwuc5", + workspace: "my-workspace", + generateManagerCommandTokenRequest: { + commandId: "cmd_2sxjXxvOYct7IohT3ukliAzf", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for a manager. | mgr_enxscjrqiiu2lrc672hwwuc5 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `generateManagerCommandTokenRequest` | [models.GenerateManagerCommandTokenRequest](../../models/generatemanagercommandtokenrequest.md) | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/generatemanagertokenrequest.md b/client-sdks/platform/typescript/docs/models/operations/generatemanagertokenrequest.md index 9bed74c21..37474780e 100644 --- a/client-sdks/platform/typescript/docs/models/operations/generatemanagertokenrequest.md +++ b/client-sdks/platform/typescript/docs/models/operations/generatemanagertokenrequest.md @@ -8,6 +8,9 @@ import { GenerateManagerTokenRequest } from "@alienplatform/platform-api/models/ let value: GenerateManagerTokenRequest = { id: "mgr_enxscjrqiiu2lrc672hwwuc5", workspace: "my-workspace", + generateManagerTokenRequest: { + project: "", + }, }; ``` @@ -17,4 +20,4 @@ let value: GenerateManagerTokenRequest = { | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *string* | :heavy_check_mark: | Unique identifier for a manager. | mgr_enxscjrqiiu2lrc672hwwuc5 | | `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | -| `generateManagerTokenRequest` | [models.GenerateManagerTokenRequest](../../models/generatemanagertokenrequest.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `generateManagerTokenRequest` | [models.GenerateManagerTokenRequest](../../models/generatemanagertokenrequest.md) | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/getagentsessionrequest.md b/client-sdks/platform/typescript/docs/models/operations/getagentsessionrequest.md new file mode 100644 index 000000000..467df1376 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/getagentsessionrequest.md @@ -0,0 +1,19 @@ +# GetAgentSessionRequest + +## Example Usage + +```typescript +import { GetAgentSessionRequest } from "@alienplatform/platform-api/models/operations"; + +let value: GetAgentSessionRequest = { + id: "", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/getreleaseinclude.md b/client-sdks/platform/typescript/docs/models/operations/getreleaseinclude.md index e05e38f81..fdc09c8ea 100644 --- a/client-sdks/platform/typescript/docs/models/operations/getreleaseinclude.md +++ b/client-sdks/platform/typescript/docs/models/operations/getreleaseinclude.md @@ -5,11 +5,11 @@ ```typescript import { GetReleaseInclude } from "@alienplatform/platform-api/models/operations"; -let value: GetReleaseInclude = "project"; +let value: GetReleaseInclude = "rollout"; ``` ## Values ```typescript -"project" -``` \ No newline at end of file +"project" | "rollout" +``` diff --git a/client-sdks/platform/typescript/docs/models/operations/getreleaserequest.md b/client-sdks/platform/typescript/docs/models/operations/getreleaserequest.md index c52e71249..0a0c7f1cc 100644 --- a/client-sdks/platform/typescript/docs/models/operations/getreleaserequest.md +++ b/client-sdks/platform/typescript/docs/models/operations/getreleaserequest.md @@ -17,4 +17,4 @@ let value: GetReleaseRequest = { | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *string* | :heavy_check_mark: | Unique identifier for the release. | rel_WbhQgksrawSKIpEN0NAssHX9 | | `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | -| `include` | [operations.GetReleaseInclude](../../models/operations/getreleaseinclude.md)[] | :heavy_minus_sign: | Optional fields to include: project | | \ No newline at end of file +| `include` | [operations.GetReleaseInclude](../../models/operations/getreleaseinclude.md)[] | :heavy_minus_sign: | Optional fields to include: project, rollout | | diff --git a/client-sdks/platform/typescript/docs/models/operations/getworkspaceinvitationpreviewrequest.md b/client-sdks/platform/typescript/docs/models/operations/getworkspaceinvitationpreviewrequest.md new file mode 100644 index 000000000..63ea626d8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/getworkspaceinvitationpreviewrequest.md @@ -0,0 +1,17 @@ +# GetWorkspaceInvitationPreviewRequest + +## Example Usage + +```typescript +import { GetWorkspaceInvitationPreviewRequest } from "@alienplatform/platform-api/models/operations"; + +let value: GetWorkspaceInvitationPreviewRequest = { + token: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `token` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/getworkspaceinvitelinkrequest.md b/client-sdks/platform/typescript/docs/models/operations/getworkspaceinvitelinkrequest.md new file mode 100644 index 000000000..ea0552207 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/getworkspaceinvitelinkrequest.md @@ -0,0 +1,19 @@ +# GetWorkspaceInviteLinkRequest + +## Example Usage + +```typescript +import { GetWorkspaceInviteLinkRequest } from "@alienplatform/platform-api/models/operations"; + +let value: GetWorkspaceInviteLinkRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/getworkspacesettingsrequest.md b/client-sdks/platform/typescript/docs/models/operations/getworkspacesettingsrequest.md new file mode 100644 index 000000000..efdf7a71f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/getworkspacesettingsrequest.md @@ -0,0 +1,19 @@ +# GetWorkspaceSettingsRequest + +## Example Usage + +```typescript +import { GetWorkspaceSettingsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: GetWorkspaceSettingsRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/listactivemanagerdebugsessionsrequest.md b/client-sdks/platform/typescript/docs/models/operations/listactivemanagerdebugsessionsrequest.md new file mode 100644 index 000000000..85ae721c6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/listactivemanagerdebugsessionsrequest.md @@ -0,0 +1,16 @@ +# ListActiveManagerDebugSessionsRequest + +## Example Usage + +```typescript +import { ListActiveManagerDebugSessionsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: ListActiveManagerDebugSessionsRequest = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `limit` | *number* | :heavy_minus_sign: | Maximum number of items to return per page | +| `cursor` | *string* | :heavy_minus_sign: | Cursor for pagination - omit for first page | diff --git a/client-sdks/platform/typescript/docs/models/operations/listagentsessioneventsrequest.md b/client-sdks/platform/typescript/docs/models/operations/listagentsessioneventsrequest.md new file mode 100644 index 000000000..f2a9162f3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/listagentsessioneventsrequest.md @@ -0,0 +1,21 @@ +# ListAgentSessionEventsRequest + +## Example Usage + +```typescript +import { ListAgentSessionEventsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: ListAgentSessionEventsRequest = { + id: "", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `after` | *number* | :heavy_minus_sign: | N/A | | +| `limit` | *number* | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/listagentsessionsrequest.md b/client-sdks/platform/typescript/docs/models/operations/listagentsessionsrequest.md new file mode 100644 index 000000000..f94c6f2d0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/listagentsessionsrequest.md @@ -0,0 +1,17 @@ +# ListAgentSessionsRequest + +## Example Usage + +```typescript +import { ListAgentSessionsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: ListAgentSessionsRequest = { + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/listapikeysresponse.md b/client-sdks/platform/typescript/docs/models/operations/listapikeysresponse.md index 7b707e1f2..6dc336210 100644 --- a/client-sdks/platform/typescript/docs/models/operations/listapikeysresponse.md +++ b/client-sdks/platform/typescript/docs/models/operations/listapikeysresponse.md @@ -28,19 +28,19 @@ let value: ListAPIKeysResponse = { deploymentSetupConfig: { metadata: { "key": "", - "key1": "", - "key2": "", }, policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, environmentVariables: [], }, createdByUser: { id: "", - email: "Rhett78@hotmail.com", - image: "https://picsum.photos/seed/PS5fO/2447/1335", + email: "Rhianna90@hotmail.com", + image: "https://picsum.photos/seed/UEmR2Mt/3119/3794", }, }, ], @@ -53,4 +53,4 @@ let value: ListAPIKeysResponse = { | Field | Type | Required | Description | | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | | `items` | [models.APIKey](../../models/apikey.md)[] | :heavy_check_mark: | Items in this page | -| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | \ No newline at end of file +| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | diff --git a/client-sdks/platform/typescript/docs/models/operations/listdeploymentsresponse.md b/client-sdks/platform/typescript/docs/models/operations/listdeploymentsresponse.md index f97f2cb4d..203a9f8b1 100644 --- a/client-sdks/platform/typescript/docs/models/operations/listdeploymentsresponse.md +++ b/client-sdks/platform/typescript/docs/models/operations/listdeploymentsresponse.md @@ -41,7 +41,7 @@ let value: ListDeploymentsResponse = { commitAuthorLogin: "johndoe", commitAuthorAvatarUrl: "https://github.com/johndoe.png", }, - createdAt: new Date("2024-06-27T06:57:01.451Z"), + createdAt: new Date("2024-04-17T05:47:54.417Z"), }, deploymentGroup: { id: "dg_r27ict8c7vcgsumpj90ackf7b", @@ -62,4 +62,4 @@ let value: ListDeploymentsResponse = { | Field | Type | Required | Description | | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | | `items` | [models.DeploymentListItemResponse](../../models/deploymentlistitemresponse.md)[] | :heavy_check_mark: | Items in this page | -| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | \ No newline at end of file +| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | diff --git a/client-sdks/platform/typescript/docs/models/operations/listeventsinclude.md b/client-sdks/platform/typescript/docs/models/operations/listeventsinclude.md new file mode 100644 index 000000000..3f2e6f590 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/listeventsinclude.md @@ -0,0 +1,15 @@ +# ListEventsInclude + +## Example Usage + +```typescript +import { ListEventsInclude } from "@alienplatform/platform-api/models/operations"; + +let value: ListEventsInclude = "releaseCreatedAt"; +``` + +## Values + +```typescript +"releaseCreatedAt" +``` diff --git a/client-sdks/platform/typescript/docs/models/operations/listeventsrequest.md b/client-sdks/platform/typescript/docs/models/operations/listeventsrequest.md index 7086469a1..1b8fab75d 100644 --- a/client-sdks/platform/typescript/docs/models/operations/listeventsrequest.md +++ b/client-sdks/platform/typescript/docs/models/operations/listeventsrequest.md @@ -17,5 +17,6 @@ let value: ListEventsRequest = { | `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | | `project` | *string* | :heavy_minus_sign: | Filter by project ID or name. | | | `deploymentId` | *string* | :heavy_minus_sign: | Filter events to a single deployment. | | +| `include` | [operations.ListEventsInclude](../../models/operations/listeventsinclude.md)[] | :heavy_minus_sign: | Optional fields to include: releaseCreatedAt | | | `limit` | *number* | :heavy_minus_sign: | Maximum number of items to return per page | | -| `cursor` | *string* | :heavy_minus_sign: | Cursor for pagination - omit for first page | | \ No newline at end of file +| `cursor` | *string* | :heavy_minus_sign: | Cursor for pagination - omit for first page | | diff --git a/client-sdks/platform/typescript/docs/models/operations/listeventsresponse.md b/client-sdks/platform/typescript/docs/models/operations/listeventsresponse.md index 5d6a640d1..a864b3905 100644 --- a/client-sdks/platform/typescript/docs/models/operations/listeventsresponse.md +++ b/client-sdks/platform/typescript/docs/models/operations/listeventsresponse.md @@ -15,13 +15,13 @@ let value: ListEventsResponse = { releaseId: "rel_WbhQgksrawSKIpEN0NAssHX9", debugSessionId: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", data: { - platform: "", - stack: "", - type: "RunningPreflights", + agentId: "", + releaseId: "", + type: "DeletingAgent", }, - state: "started", + state: "none", projectId: "prj_mcytp6z3j91f7tn5ryqsfwtr", - createdAt: new Date("2026-01-05T03:00:56.315Z"), + createdAt: new Date("2026-05-23T10:59:53.935Z"), workspaceId: "ws_It13CUaGEhLLAB87simX0", }, ], @@ -31,7 +31,7 @@ let value: ListEventsResponse = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | -| `items` | [models.Event](../../models/event.md)[] | :heavy_check_mark: | Items in this page | -| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `items` | [models.EventListItemResponse](../../models/eventlistitemresponse.md)[] | :heavy_check_mark: | Items in this page | +| `nextCursor` | *string* | :heavy_check_mark: | Cursor for the next page, null if last page | diff --git a/client-sdks/platform/typescript/docs/models/operations/listreleasesinclude.md b/client-sdks/platform/typescript/docs/models/operations/listreleasesinclude.md index 1f958a0e3..51797a129 100644 --- a/client-sdks/platform/typescript/docs/models/operations/listreleasesinclude.md +++ b/client-sdks/platform/typescript/docs/models/operations/listreleasesinclude.md @@ -11,5 +11,5 @@ let value: ListReleasesInclude = "project"; ## Values ```typescript -"project" -``` \ No newline at end of file +"project" | "rollout" +``` diff --git a/client-sdks/platform/typescript/docs/models/operations/listreleasesrequest.md b/client-sdks/platform/typescript/docs/models/operations/listreleasesrequest.md index e5efe14e0..7e64058ad 100644 --- a/client-sdks/platform/typescript/docs/models/operations/listreleasesrequest.md +++ b/client-sdks/platform/typescript/docs/models/operations/listreleasesrequest.md @@ -16,11 +16,11 @@ let value: ListReleasesRequest = { | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `project` | *string* | :heavy_minus_sign: | Filter by project ID or name. | | | `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | -| `include` | [operations.ListReleasesInclude](../../models/operations/listreleasesinclude.md)[] | :heavy_minus_sign: | Optional fields to include: project | | +| `include` | [operations.ListReleasesInclude](../../models/operations/listreleasesinclude.md)[] | :heavy_minus_sign: | Optional fields to include: project, rollout | | | `search` | *string* | :heavy_minus_sign: | Search releases by commit message, branch, SHA, or release ID | | | `branch` | *string* | :heavy_minus_sign: | Filter by git branch (commitRef) | | | `author` | *string* | :heavy_minus_sign: | Filter by commit author login or name | | | `createdAfter` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | Filter releases created after this date (ISO 8601) | | | `createdBefore` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | Filter releases created before this date (ISO 8601) | | | `limit` | *number* | :heavy_minus_sign: | Maximum number of items to return per page | | -| `cursor` | *string* | :heavy_minus_sign: | Cursor for pagination - omit for first page | | \ No newline at end of file +| `cursor` | *string* | :heavy_minus_sign: | Cursor for pagination - omit for first page | | diff --git a/client-sdks/platform/typescript/docs/models/operations/listworkspaceinvitationsrequest.md b/client-sdks/platform/typescript/docs/models/operations/listworkspaceinvitationsrequest.md new file mode 100644 index 000000000..0e6b76d2e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/listworkspaceinvitationsrequest.md @@ -0,0 +1,19 @@ +# ListWorkspaceInvitationsRequest + +## Example Usage + +```typescript +import { ListWorkspaceInvitationsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: ListWorkspaceInvitationsRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/listworkspaceinvitationsresponse.md b/client-sdks/platform/typescript/docs/models/operations/listworkspaceinvitationsresponse.md new file mode 100644 index 000000000..5f6892736 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/listworkspaceinvitationsresponse.md @@ -0,0 +1,19 @@ +# ListWorkspaceInvitationsResponse + +Pending invitations. + +## Example Usage + +```typescript +import { ListWorkspaceInvitationsResponse } from "@alienplatform/platform-api/models/operations"; + +let value: ListWorkspaceInvitationsResponse = { + items: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `items` | [models.WorkspaceInvitation](../../models/workspaceinvitation.md)[] | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/operations/resendworkspaceinvitationrequest.md b/client-sdks/platform/typescript/docs/models/operations/resendworkspaceinvitationrequest.md new file mode 100644 index 000000000..4f1ebade7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/resendworkspaceinvitationrequest.md @@ -0,0 +1,21 @@ +# ResendWorkspaceInvitationRequest + +## Example Usage + +```typescript +import { ResendWorkspaceInvitationRequest } from "@alienplatform/platform-api/models/operations"; + +let value: ResendWorkspaceInvitationRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + invitationId: "", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `invitationId` | *string* | :heavy_check_mark: | N/A | | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/revokeworkspaceinvitationrequest.md b/client-sdks/platform/typescript/docs/models/operations/revokeworkspaceinvitationrequest.md new file mode 100644 index 000000000..fbd090dc5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/revokeworkspaceinvitationrequest.md @@ -0,0 +1,21 @@ +# RevokeWorkspaceInvitationRequest + +## Example Usage + +```typescript +import { RevokeWorkspaceInvitationRequest } from "@alienplatform/platform-api/models/operations"; + +let value: RevokeWorkspaceInvitationRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + invitationId: "", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `invitationId` | *string* | :heavy_check_mark: | N/A | | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/revokeworkspaceinvitelinkrequest.md b/client-sdks/platform/typescript/docs/models/operations/revokeworkspaceinvitelinkrequest.md new file mode 100644 index 000000000..2ac459710 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/revokeworkspaceinvitelinkrequest.md @@ -0,0 +1,19 @@ +# RevokeWorkspaceInviteLinkRequest + +## Example Usage + +```typescript +import { RevokeWorkspaceInviteLinkRequest } from "@alienplatform/platform-api/models/operations"; + +let value: RevokeWorkspaceInviteLinkRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/slackintegrationchannelsrequest.md b/client-sdks/platform/typescript/docs/models/operations/slackintegrationchannelsrequest.md new file mode 100644 index 000000000..b9f68e26b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/slackintegrationchannelsrequest.md @@ -0,0 +1,17 @@ +# SlackIntegrationChannelsRequest + +## Example Usage + +```typescript +import { SlackIntegrationChannelsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: SlackIntegrationChannelsRequest = { + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/slackintegrationinstallurlrequest.md b/client-sdks/platform/typescript/docs/models/operations/slackintegrationinstallurlrequest.md new file mode 100644 index 000000000..4af0dcd65 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/slackintegrationinstallurlrequest.md @@ -0,0 +1,17 @@ +# SlackIntegrationInstallUrlRequest + +## Example Usage + +```typescript +import { SlackIntegrationInstallUrlRequest } from "@alienplatform/platform-api/models/operations"; + +let value: SlackIntegrationInstallUrlRequest = { + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/slackintegrationsetnotificationchannelrequest.md b/client-sdks/platform/typescript/docs/models/operations/slackintegrationsetnotificationchannelrequest.md new file mode 100644 index 000000000..90cb1657b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/slackintegrationsetnotificationchannelrequest.md @@ -0,0 +1,18 @@ +# SlackIntegrationSetNotificationChannelRequest + +## Example Usage + +```typescript +import { SlackIntegrationSetNotificationChannelRequest } from "@alienplatform/platform-api/models/operations"; + +let value: SlackIntegrationSetNotificationChannelRequest = { + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `slackNotificationChannelRequest` | [models.SlackNotificationChannelRequest](../../models/slacknotificationchannelrequest.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/operations/slackintegrationstatusrequest.md b/client-sdks/platform/typescript/docs/models/operations/slackintegrationstatusrequest.md new file mode 100644 index 000000000..e80617eaf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/slackintegrationstatusrequest.md @@ -0,0 +1,17 @@ +# SlackIntegrationStatusRequest + +## Example Usage + +```typescript +import { SlackIntegrationStatusRequest } from "@alienplatform/platform-api/models/operations"; + +let value: SlackIntegrationStatusRequest = { + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/slackintegrationuninstallrequest.md b/client-sdks/platform/typescript/docs/models/operations/slackintegrationuninstallrequest.md new file mode 100644 index 000000000..0376306d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/slackintegrationuninstallrequest.md @@ -0,0 +1,17 @@ +# SlackIntegrationUninstallRequest + +## Example Usage + +```typescript +import { SlackIntegrationUninstallRequest } from "@alienplatform/platform-api/models/operations"; + +let value: SlackIntegrationUninstallRequest = { + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/stopagentsessionrequest.md b/client-sdks/platform/typescript/docs/models/operations/stopagentsessionrequest.md new file mode 100644 index 000000000..2995388b7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/stopagentsessionrequest.md @@ -0,0 +1,19 @@ +# StopAgentSessionRequest + +## Example Usage + +```typescript +import { StopAgentSessionRequest } from "@alienplatform/platform-api/models/operations"; + +let value: StopAgentSessionRequest = { + id: "", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | diff --git a/client-sdks/platform/typescript/docs/models/operations/updateworkspacesettingsrequest.md b/client-sdks/platform/typescript/docs/models/operations/updateworkspacesettingsrequest.md new file mode 100644 index 000000000..bab2ae9c5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/operations/updateworkspacesettingsrequest.md @@ -0,0 +1,20 @@ +# UpdateWorkspaceSettingsRequest + +## Example Usage + +```typescript +import { UpdateWorkspaceSettingsRequest } from "@alienplatform/platform-api/models/operations"; + +let value: UpdateWorkspaceSettingsRequest = { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `workspace` | *string* | :heavy_minus_sign: | Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. | my-workspace | +| `updateWorkspaceSettingsRequest` | [models.UpdateWorkspaceSettingsRequest](../../models/updateworkspacesettingsrequest.md) | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/outcome.md b/client-sdks/platform/typescript/docs/models/outcome.md new file mode 100644 index 000000000..035007b11 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/outcome.md @@ -0,0 +1,15 @@ +# Outcome + +## Example Usage + +```typescript +import { Outcome } from "@alienplatform/platform-api/models"; + +let value: Outcome = "joined"; +``` + +## Values + +```typescript +"joined" | "already-member" +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingapproval.md b/client-sdks/platform/typescript/docs/models/pendingapproval.md new file mode 100644 index 000000000..7b81607e8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingapproval.md @@ -0,0 +1,22 @@ +# PendingApproval + +## Example Usage + +```typescript +import { PendingApproval } from "@alienplatform/platform-api/models"; + +let value: PendingApproval = { + approvalId: "", + toolCallId: "", + toolName: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `approvalId` | *string* | :heavy_check_mark: | N/A | +| `toolCallId` | *string* | :heavy_check_mark: | N/A | +| `toolName` | *string* | :heavy_check_mark: | N/A | +| `input` | *any* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendconditionstateresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendconditionstateresource.md new file mode 100644 index 000000000..2f8eeb352 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendconditionstateresource.md @@ -0,0 +1,21 @@ +# PendingPreparedStackExtendConditionStateResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PendingPreparedStackExtendConditionStateResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackExtendConditionStateResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendconditionstatestack.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendconditionstatestack.md new file mode 100644 index 000000000..50df700e4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendconditionstatestack.md @@ -0,0 +1,21 @@ +# PendingPreparedStackExtendConditionStateStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PendingPreparedStackExtendConditionStateStack } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackExtendConditionStateStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateawresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateawresource.md new file mode 100644 index 000000000..baabca77a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateawresource.md @@ -0,0 +1,23 @@ +# PendingPreparedStackExtendStateAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackExtendStateAwResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackExtendStateAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateazureresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateazureresource.md new file mode 100644 index 000000000..510c5ab9c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateazureresource.md @@ -0,0 +1,19 @@ +# PendingPreparedStackExtendStateAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackExtendStateAzureResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackExtendStateAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstategcpresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstategcpresource.md new file mode 100644 index 000000000..cb211051d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstategcpresource.md @@ -0,0 +1,20 @@ +# PendingPreparedStackExtendStateGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackExtendStateGcpResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackExtendStateGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `condition` | *models.PendingPreparedStackExtendStateResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateresourceconditionunion.md new file mode 100644 index 000000000..3036d15cd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstateresourceconditionunion.md @@ -0,0 +1,19 @@ +# PendingPreparedStackExtendStateResourceConditionUnion + + +## Supported Types + +### `models.PendingPreparedStackExtendConditionStateResource` + +```typescript +const value: models.PendingPreparedStackExtendConditionStateResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstatestackconditionunion.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstatestackconditionunion.md new file mode 100644 index 000000000..0febe7f62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackextendstatestackconditionunion.md @@ -0,0 +1,19 @@ +# PendingPreparedStackExtendStateStackConditionUnion + + +## Supported Types + +### `models.PendingPreparedStackExtendConditionStateStack` + +```typescript +const value: models.PendingPreparedStackExtendConditionStateStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverrideconditionstateresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverrideconditionstateresource.md new file mode 100644 index 000000000..298da8f26 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverrideconditionstateresource.md @@ -0,0 +1,21 @@ +# PendingPreparedStackOverrideConditionStateResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PendingPreparedStackOverrideConditionStateResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackOverrideConditionStateResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverrideconditionstatestack.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverrideconditionstatestack.md new file mode 100644 index 000000000..21e5f151e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverrideconditionstatestack.md @@ -0,0 +1,21 @@ +# PendingPreparedStackOverrideConditionStateStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PendingPreparedStackOverrideConditionStateStack } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackOverrideConditionStateStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateawresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateawresource.md new file mode 100644 index 000000000..97e0520af --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateawresource.md @@ -0,0 +1,22 @@ +# PendingPreparedStackOverrideStateAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackOverrideStateAwResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackOverrideStateAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateazureresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateazureresource.md new file mode 100644 index 000000000..6376dd180 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateazureresource.md @@ -0,0 +1,19 @@ +# PendingPreparedStackOverrideStateAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackOverrideStateAzureResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackOverrideStateAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestategcpresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestategcpresource.md new file mode 100644 index 000000000..3574afee0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestategcpresource.md @@ -0,0 +1,20 @@ +# PendingPreparedStackOverrideStateGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackOverrideStateGcpResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackOverrideStateGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `condition` | *models.PendingPreparedStackOverrideStateResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateresourceconditionunion.md new file mode 100644 index 000000000..c47490b89 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestateresourceconditionunion.md @@ -0,0 +1,19 @@ +# PendingPreparedStackOverrideStateResourceConditionUnion + + +## Supported Types + +### `models.PendingPreparedStackOverrideConditionStateResource` + +```typescript +const value: models.PendingPreparedStackOverrideConditionStateResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestatestackconditionunion.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestatestackconditionunion.md new file mode 100644 index 000000000..5db8b3596 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackoverridestatestackconditionunion.md @@ -0,0 +1,19 @@ +# PendingPreparedStackOverrideStateStackConditionUnion + + +## Supported Types + +### `models.PendingPreparedStackOverrideConditionStateStack` + +```typescript +const value: models.PendingPreparedStackOverrideConditionStateStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofileconditionstateresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofileconditionstateresource.md new file mode 100644 index 000000000..2fe31d0f5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofileconditionstateresource.md @@ -0,0 +1,21 @@ +# PendingPreparedStackProfileConditionStateResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PendingPreparedStackProfileConditionStateResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackProfileConditionStateResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofileconditionstatestack.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofileconditionstatestack.md new file mode 100644 index 000000000..f5eb27109 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofileconditionstatestack.md @@ -0,0 +1,21 @@ +# PendingPreparedStackProfileConditionStateStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PendingPreparedStackProfileConditionStateStack } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackProfileConditionStateStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateawresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateawresource.md new file mode 100644 index 000000000..398e9f0a4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateawresource.md @@ -0,0 +1,22 @@ +# PendingPreparedStackProfileStateAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackProfileStateAwResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackProfileStateAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateazureresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateazureresource.md new file mode 100644 index 000000000..a0a425047 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateazureresource.md @@ -0,0 +1,19 @@ +# PendingPreparedStackProfileStateAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackProfileStateAzureResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackProfileStateAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestategcpresource.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestategcpresource.md new file mode 100644 index 000000000..cbf104689 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestategcpresource.md @@ -0,0 +1,20 @@ +# PendingPreparedStackProfileStateGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PendingPreparedStackProfileStateGcpResource } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackProfileStateGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `condition` | *models.PendingPreparedStackProfileStateResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateresourceconditionunion.md new file mode 100644 index 000000000..e1f102741 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestateresourceconditionunion.md @@ -0,0 +1,19 @@ +# PendingPreparedStackProfileStateResourceConditionUnion + + +## Supported Types + +### `models.PendingPreparedStackProfileConditionStateResource` + +```typescript +const value: models.PendingPreparedStackProfileConditionStateResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestatestackconditionunion.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestatestackconditionunion.md new file mode 100644 index 000000000..59dc00482 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackprofilestatestackconditionunion.md @@ -0,0 +1,19 @@ +# PendingPreparedStackProfileStateStackConditionUnion + + +## Supported Types + +### `models.PendingPreparedStackProfileConditionStateStack` + +```typescript +const value: models.PendingPreparedStackProfileConditionStateStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackstatekind.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackstatekind.md new file mode 100644 index 000000000..eb564ceb0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackstatekind.md @@ -0,0 +1,17 @@ +# PendingPreparedStackStateKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { PendingPreparedStackStateKind } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackStateKind = "stringList"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/pendingpreparedstackstatelifecycle.md b/client-sdks/platform/typescript/docs/models/pendingpreparedstackstatelifecycle.md new file mode 100644 index 000000000..624125165 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/pendingpreparedstackstatelifecycle.md @@ -0,0 +1,17 @@ +# PendingPreparedStackStateLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { PendingPreparedStackStateLifecycle } from "@alienplatform/platform-api/models"; + +let value: PendingPreparedStackStateLifecycle = "frozen"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequest.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequest.md index 44116d127..516cfeabc 100644 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequest.md +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequest.md @@ -37,6 +37,7 @@ let value: PersistImportedDeploymentRequest = { | `stackState` | *any* | :heavy_minus_sign: | N/A | | | `environmentInfo` | *models.PersistImportedDeploymentRequestEnvironmentInfoUnion* | :heavy_minus_sign: | Platform-specific environment information | | | `runtimeMetadata` | [models.PersistImportedDeploymentRequestRuntimeMetadata](../models/persistimporteddeploymentrequestruntimemetadata.md) | :heavy_check_mark: | Runtime metadata for deployment

Stores deployment state that needs to persist across step calls. | | +| `scheduleReconciliation` | *boolean* | :heavy_minus_sign: | N/A | | | `deploymentProtocolVersion` | *number* | :heavy_check_mark: | DeploymentState protocol version owned by the runtime/manager | | | `status` | [models.PersistImportedDeploymentRequestStatus](../models/persistimporteddeploymentrequeststatus.md) | :heavy_minus_sign: | Deployment status in the deployment lifecycle.

For observe-only deployments with no release or stack state, `Running`
means the Operator is attached. Connectivity comes from `lastHeartbeatAt`;
resource health comes from inventory and resource heartbeat data. | | | `currentReleaseId` | *string* | :heavy_minus_sign: | Unique identifier for the release. | rel_WbhQgksrawSKIpEN0NAssHX9 | @@ -48,4 +49,4 @@ let value: PersistImportedDeploymentRequest = { | `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint algorithm version | | | `deploymentToken` | *string* | :heavy_minus_sign: | N/A | | | `managementConfig` | *models.PersistImportedDeploymentRequestManagementConfigUnion* | :heavy_minus_sign: | Management configuration for different cloud platforms.

Platform-derived configuration for cross-account/cross-tenant access.
This is NOT user-specified - it's derived from the Manager's ServiceAccount. | | -| `inputValues` | Record | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `inputValues` | Record | :heavy_minus_sign: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestconfig.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestconfig.md deleted file mode 100644 index ad6d68fba..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestconfig.md +++ /dev/null @@ -1,22 +0,0 @@ -# PersistImportedDeploymentRequestConfig - -Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestConfig } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestConfig = { - id: "", - type: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | -| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | -| `additionalProperties` | Record | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultboolean.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultboolean.md deleted file mode 100644 index a911a6b61..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultboolean.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestDefaultBoolean - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestDefaultBoolean } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestDefaultBoolean = { - type: "boolean", - value: false, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `type` | [models.PersistImportedDeploymentRequestTypeBoolean](../models/persistimporteddeploymentrequesttypeboolean.md) | :heavy_check_mark: | N/A | -| `value` | *boolean* | :heavy_check_mark: | Boolean default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultnumber.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultnumber.md deleted file mode 100644 index e62822557..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultnumber.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestDefaultNumber - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestDefaultNumber } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestDefaultNumber = { - type: "number", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `type` | [models.PersistImportedDeploymentRequestTypeNumber](../models/persistimporteddeploymentrequesttypenumber.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | Number default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultstring.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultstring.md deleted file mode 100644 index 767a64737..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultstring.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestDefaultString - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestDefaultString } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestDefaultString = { - type: "string", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `type` | [models.PersistImportedDeploymentRequestTypeString](../models/persistimporteddeploymentrequesttypestring.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | String default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultstringlist.md deleted file mode 100644 index 423e67a11..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultstringlist.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestDefaultStringList - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestDefaultStringList } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestDefaultStringList = { - type: "stringList", - value: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.PersistImportedDeploymentRequestTypeStringList](../models/persistimporteddeploymentrequesttypestringlist.md) | :heavy_check_mark: | N/A | -| `value` | *string*[] | :heavy_check_mark: | String list default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultunion.md deleted file mode 100644 index f5662ffa3..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdefaultunion.md +++ /dev/null @@ -1,49 +0,0 @@ -# PersistImportedDeploymentRequestDefaultUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestDefaultString` - -```typescript -const value: models.PersistImportedDeploymentRequestDefaultString = { - type: "string", - value: "", -}; -``` - -### `models.PersistImportedDeploymentRequestDefaultNumber` - -```typescript -const value: models.PersistImportedDeploymentRequestDefaultNumber = { - type: "number", - value: "", -}; -``` - -### `models.PersistImportedDeploymentRequestDefaultBoolean` - -```typescript -const value: models.PersistImportedDeploymentRequestDefaultBoolean = { - type: "boolean", - value: false, -}; -``` - -### `models.PersistImportedDeploymentRequestDefaultStringList` - -```typescript -const value: models.PersistImportedDeploymentRequestDefaultStringList = { - type: "stringList", - value: [ - "", - ], -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdependency.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdependency.md deleted file mode 100644 index b644227c2..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestdependency.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestDependency - -Reference to a resource by its stable id and resource type. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestDependency } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestDependency = { - id: "", - type: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | N/A | -| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestenv.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestenv.md deleted file mode 100644 index ac5a49202..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestenv.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestEnv - -How a resolved stack input is injected into runtime environment variables. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestEnv } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestEnv = { - name: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| `name` | *string* | :heavy_check_mark: | Environment variable name. | -| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | -| `type` | *models.PersistImportedDeploymentRequestTypeUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextend.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextend.md deleted file mode 100644 index 870ab796d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextend.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestExtend - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtend } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtend = { - description: "cantaloupe pfft pish blah gosh yum decide", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.PersistImportedDeploymentRequestExtendPlatforms](../models/persistimporteddeploymentrequestextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendaw.md deleted file mode 100644 index 7179310b6..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# PersistImportedDeploymentRequestExtendAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAw } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.PersistImportedDeploymentRequestExtendAwBinding](../models/persistimporteddeploymentrequestextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.PersistImportedDeploymentRequestExtendEffect](../models/persistimporteddeploymentrequestextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.PersistImportedDeploymentRequestExtendAwGrant](../models/persistimporteddeploymentrequestextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawbinding.md deleted file mode 100644 index b67a52829..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestExtendAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAwBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `resource` | [models.PersistImportedDeploymentRequestExtendAwResource](../models/persistimporteddeploymentrequestextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestExtendAwStack](../models/persistimporteddeploymentrequestextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawgrant.md deleted file mode 100644 index bdabd105d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestExtendAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAwGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawresource.md deleted file mode 100644 index c40021c9e..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawresource.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestExtendAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAwResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAwResource = { - resources: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawstack.md deleted file mode 100644 index 785a29ec0..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendawstack.md +++ /dev/null @@ -1,22 +0,0 @@ -# PersistImportedDeploymentRequestExtendAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAwStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAwStack = { - resources: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazure.md deleted file mode 100644 index b5242d32a..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestExtendAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAzure } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.PersistImportedDeploymentRequestExtendAzureBinding](../models/persistimporteddeploymentrequestextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.PersistImportedDeploymentRequestExtendAzureGrant](../models/persistimporteddeploymentrequestextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazurebinding.md deleted file mode 100644 index 72a5c7915..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestExtendAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAzureBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `resource` | [models.PersistImportedDeploymentRequestExtendAzureResource](../models/persistimporteddeploymentrequestextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestExtendAzureStack](../models/persistimporteddeploymentrequestextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazuregrant.md deleted file mode 100644 index a7168ff4b..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestExtendAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAzureGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazureresource.md deleted file mode 100644 index f5e15a8bf..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestExtendAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAzureResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazurestack.md deleted file mode 100644 index 01f13db62..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestExtendAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendAzureStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendconditionresource.md deleted file mode 100644 index e032fa388..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestExtendConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendConditionResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendconditionstack.md deleted file mode 100644 index 4b46d24b9..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestExtendConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendConditionStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendeffect.md deleted file mode 100644 index acdf5248f..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestExtendEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendEffect } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendEffect = "Deny"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcp.md deleted file mode 100644 index b82b3e8e3..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestExtendGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendGcp } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `binding` | [models.PersistImportedDeploymentRequestExtendGcpBinding](../models/persistimporteddeploymentrequestextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.PersistImportedDeploymentRequestExtendGcpGrant](../models/persistimporteddeploymentrequestextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpbinding.md deleted file mode 100644 index dcc677218..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestExtendGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendGcpBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.PersistImportedDeploymentRequestExtendGcpResource](../models/persistimporteddeploymentrequestextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestExtendGcpStack](../models/persistimporteddeploymentrequestextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpgrant.md deleted file mode 100644 index 867fa6061..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestExtendGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendGcpGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpresource.md deleted file mode 100644 index 641941fe3..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestExtendGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendGcpResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | -| `condition` | *models.PersistImportedDeploymentRequestExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpstack.md deleted file mode 100644 index 2ba40cf33..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendgcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestExtendGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendGcpStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `condition` | *models.PersistImportedDeploymentRequestExtendStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendplatforms.md deleted file mode 100644 index 62ac2d652..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestExtendPlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestExtendPlatforms } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestExtendPlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `aws` | [models.PersistImportedDeploymentRequestExtendAw](../models/persistimporteddeploymentrequestextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.PersistImportedDeploymentRequestExtendAzure](../models/persistimporteddeploymentrequestextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.PersistImportedDeploymentRequestExtendGcp](../models/persistimporteddeploymentrequestextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendresourceconditionunion.md deleted file mode 100644 index ca2972220..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestExtendResourceConditionUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestExtendConditionResource` - -```typescript -const value: models.PersistImportedDeploymentRequestExtendConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendstackconditionunion.md deleted file mode 100644 index 6afac15ea..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendstackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestExtendStackConditionUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestExtendConditionStack` - -```typescript -const value: models.PersistImportedDeploymentRequestExtendConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendunion.md deleted file mode 100644 index e958dade5..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestextendunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestExtendUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.PersistImportedDeploymentRequestExtend` - -```typescript -const value: models.PersistImportedDeploymentRequestExtend = { - description: "cantaloupe pfft pish blah gosh yum decide", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomains1.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomains1.md new file mode 100644 index 000000000..114603279 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomains1.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestFailureDomains1 = { + spread: 294914, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomains2.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomains2.md new file mode 100644 index 000000000..916484d1a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomains2.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestFailureDomains2 = { + spread: 666091, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomainsunion1.md new file mode 100644 index 000000000..d00417296 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomainsunion1.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestFailureDomainsUnion1 + + +## Supported Types + +### `models.PersistImportedDeploymentRequestFailureDomains1` + +```typescript +const value: models.PersistImportedDeploymentRequestFailureDomains1 = { + spread: 294914, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomainsunion2.md new file mode 100644 index 000000000..b2aaa9ec0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestfailuredomainsunion2.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestFailureDomainsUnion2 + + +## Supported Types + +### `models.PersistImportedDeploymentRequestFailureDomains2` + +```typescript +const value: models.PersistImportedDeploymentRequestFailureDomains2 = { + spread: 666091, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestinput.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestinput.md deleted file mode 100644 index 8c9d38528..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestinput.md +++ /dev/null @@ -1,36 +0,0 @@ -# PersistImportedDeploymentRequestInput - -Stack input definition serialized into a release stack. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestInput } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestInput = { - description: "jump ew festival ah", - id: "", - kind: "integer", - label: "", - providedBy: [ - "developer", - ], - required: false, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `default` | *models.PersistImportedDeploymentRequestDefaultUnion* | :heavy_minus_sign: | N/A | -| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | -| `env` | [models.PersistImportedDeploymentRequestEnv](../models/persistimporteddeploymentrequestenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | -| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | -| `kind` | [models.PersistImportedDeploymentRequestKind](../models/persistimporteddeploymentrequestkind.md) | :heavy_check_mark: | Primitive stack input kind. | -| `label` | *string* | :heavy_check_mark: | Human-facing field label. | -| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | -| `platforms` | [models.PersistImportedDeploymentRequestPreparedStackPlatform](../models/persistimporteddeploymentrequestpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | -| `providedBy` | [models.PersistImportedDeploymentRequestProvidedBy](../models/persistimporteddeploymentrequestprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | -| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | -| `validation` | *models.PersistImportedDeploymentRequestValidationUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestkind.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestkind.md deleted file mode 100644 index d4e8d9aef..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestkind.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestKind - -Primitive stack input kind. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestKind } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestKind = "integer"; -``` - -## Values - -```typescript -"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestlifecycle.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestlifecycle.md deleted file mode 100644 index 69b055881..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestlifecycle.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestLifecycle - -Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestLifecycle } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestLifecycle = "live"; -``` - -## Values - -```typescript -"frozen" | "live" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagement1.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagement1.md deleted file mode 100644 index a2c231673..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagement1.md +++ /dev/null @@ -1,22 +0,0 @@ -# PersistImportedDeploymentRequestManagement1 - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestManagement1 } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestManagement1 = { - extend: { - "key": [ - "", - ], - "key1": [], - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagement2.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagement2.md deleted file mode 100644 index fe1ef2b9d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagement2.md +++ /dev/null @@ -1,32 +0,0 @@ -# PersistImportedDeploymentRequestManagement2 - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestManagement2 } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestManagement2 = { - override: { - "key": [ - { - description: "rebound lay anti access underneath", - id: "", - platforms: {}, - }, - ], - "key1": [ - { - description: "rebound lay anti access underneath", - id: "", - platforms: {}, - }, - ], - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagementenum.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagementenum.md deleted file mode 100644 index 790734b2a..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagementenum.md +++ /dev/null @@ -1,15 +0,0 @@ -# PersistImportedDeploymentRequestManagementEnum - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestManagementEnum } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestManagementEnum = "auto"; -``` - -## Values - -```typescript -"auto" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagementunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagementunion.md deleted file mode 100644 index a3e942d6d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestmanagementunion.md +++ /dev/null @@ -1,49 +0,0 @@ -# PersistImportedDeploymentRequestManagementUnion - -Management permissions configuration for stack management access - - -## Supported Types - -### `models.PersistImportedDeploymentRequestManagement1` - -```typescript -const value: models.PersistImportedDeploymentRequestManagement1 = { - extend: { - "key": [ - "", - ], - "key1": [], - }, -}; -``` - -### `models.PersistImportedDeploymentRequestManagement2` - -```typescript -const value: models.PersistImportedDeploymentRequestManagement2 = { - override: { - "key": [ - { - description: "rebound lay anti access underneath", - id: "", - platforms: {}, - }, - ], - "key1": [ - { - description: "rebound lay anti access underneath", - id: "", - platforms: {}, - }, - ], - }, -}; -``` - -### `models.PersistImportedDeploymentRequestManagementEnum` - -```typescript -const value: models.PersistImportedDeploymentRequestManagementEnum = "auto"; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverride.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverride.md deleted file mode 100644 index bd8c9ae0c..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverride.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestOverride - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverride } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverride = { - description: "besides once uh-huh annex grimy hm quit while stitcher whether", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.PersistImportedDeploymentRequestOverridePlatforms](../models/persistimporteddeploymentrequestoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideaw.md deleted file mode 100644 index 8933a5830..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAw } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.PersistImportedDeploymentRequestOverrideAwBinding](../models/persistimporteddeploymentrequestoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.PersistImportedDeploymentRequestOverrideEffect](../models/persistimporteddeploymentrequestoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.PersistImportedDeploymentRequestOverrideAwGrant](../models/persistimporteddeploymentrequestoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawbinding.md deleted file mode 100644 index 6f784ad5c..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAwBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.PersistImportedDeploymentRequestOverrideAwResource](../models/persistimporteddeploymentrequestoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestOverrideAwStack](../models/persistimporteddeploymentrequestoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawgrant.md deleted file mode 100644 index 190763a27..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAwGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawresource.md deleted file mode 100644 index 7125413eb..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawresource.md +++ /dev/null @@ -1,22 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAwResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAwResource = { - resources: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawstack.md deleted file mode 100644 index 5be49766d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideawstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAwStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAwStack = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazure.md deleted file mode 100644 index db0b731e4..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAzure } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.PersistImportedDeploymentRequestOverrideAzureBinding](../models/persistimporteddeploymentrequestoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.PersistImportedDeploymentRequestOverrideAzureGrant](../models/persistimporteddeploymentrequestoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazurebinding.md deleted file mode 100644 index 6e4b52f75..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAzureBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.PersistImportedDeploymentRequestOverrideAzureResource](../models/persistimporteddeploymentrequestoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestOverrideAzureStack](../models/persistimporteddeploymentrequestoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazuregrant.md deleted file mode 100644 index 0b99662dd..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAzureGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazureresource.md deleted file mode 100644 index 80d38612d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAzureResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazurestack.md deleted file mode 100644 index e09031a60..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestOverrideAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideAzureStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideconditionresource.md deleted file mode 100644 index 691df7616..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestOverrideConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideConditionResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideconditionstack.md deleted file mode 100644 index 5faf319e0..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestOverrideConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideConditionStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideeffect.md deleted file mode 100644 index 529c586f0..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestOverrideEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideEffect } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideEffect = "Allow"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcp.md deleted file mode 100644 index af12cc00c..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestOverrideGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideGcp } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.PersistImportedDeploymentRequestOverrideGcpBinding](../models/persistimporteddeploymentrequestoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.PersistImportedDeploymentRequestOverrideGcpGrant](../models/persistimporteddeploymentrequestoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpbinding.md deleted file mode 100644 index a25221800..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestOverrideGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideGcpBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `resource` | [models.PersistImportedDeploymentRequestOverrideGcpResource](../models/persistimporteddeploymentrequestoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestOverrideGcpStack](../models/persistimporteddeploymentrequestoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpgrant.md deleted file mode 100644 index ab85d1295..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestOverrideGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideGcpGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpresource.md deleted file mode 100644 index 4e7a03ae7..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestOverrideGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideGcpResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| `condition` | *models.PersistImportedDeploymentRequestOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpstack.md deleted file mode 100644 index 36c31a9d3..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestOverrideGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverrideGcpStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverrideGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `condition` | *models.PersistImportedDeploymentRequestOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideplatforms.md deleted file mode 100644 index ec39dabd2..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestOverridePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestOverridePlatforms } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestOverridePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `aws` | [models.PersistImportedDeploymentRequestOverrideAw](../models/persistimporteddeploymentrequestoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.PersistImportedDeploymentRequestOverrideAzure](../models/persistimporteddeploymentrequestoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.PersistImportedDeploymentRequestOverrideGcp](../models/persistimporteddeploymentrequestoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideresourceconditionunion.md deleted file mode 100644 index d0d7be87f..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideresourceconditionunion.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestOverrideResourceConditionUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestOverrideConditionResource` - -```typescript -const value: models.PersistImportedDeploymentRequestOverrideConditionResource = - { - expression: "", - title: "", - }; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridestackconditionunion.md deleted file mode 100644 index 79c50048d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverridestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestOverrideStackConditionUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestOverrideConditionStack` - -```typescript -const value: models.PersistImportedDeploymentRequestOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideunion.md deleted file mode 100644 index 39140970f..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestoverrideunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestOverrideUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.PersistImportedDeploymentRequestOverride` - -```typescript -const value: models.PersistImportedDeploymentRequestOverride = { - description: "besides once uh-huh annex grimy hm quit while stitcher whether", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstack.md new file mode 100644 index 000000000..6610a9035 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstack.md @@ -0,0 +1,33 @@ +# PersistImportedDeploymentRequestPendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.PersistImportedDeploymentRequestPendingPreparedStackInput](../models/persistimporteddeploymentrequestpendingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.PersistImportedDeploymentRequestPendingPreparedStackPermissions](../models/persistimporteddeploymentrequestpendingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform](../models/persistimporteddeploymentrequestpendingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackconfig.md new file mode 100644 index 000000000..09eb23107 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..a20a8526c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultboolean.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean = + { + type: "boolean", + value: false, + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean](../models/persistimporteddeploymentrequestpendingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..f67aecb46 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.PersistImportedDeploymentRequestPendingPreparedStackTypeNumber](../models/persistimporteddeploymentrequestpendingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstring.md new file mode 100644 index 000000000..1f38f24c8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.PersistImportedDeploymentRequestPendingPreparedStackTypeString](../models/persistimporteddeploymentrequestpendingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..b282d1f14 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultstringlist.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.PersistImportedDeploymentRequestPendingPreparedStackTypeStringList](../models/persistimporteddeploymentrequestpendingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultunion.md new file mode 100644 index 000000000..c511dcc21 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdefaultunion.md @@ -0,0 +1,55 @@ +# PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackDefaultString` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackDefaultString = { + type: "string", + value: "", + }; +``` + +### `models.PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber = { + type: "number", + value: "", + }; +``` + +### `models.PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, + }; +``` + +### `models.PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList = + { + type: "stringList", + value: [ + "", + "", + "", + ], + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdependency.md new file mode 100644 index 000000000..61ce44823 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackenv.md new file mode 100644 index 000000000..954002ddf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackenv.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.PersistImportedDeploymentRequestPendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextend.md new file mode 100644 index 000000000..ac4f06a18 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextend.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtend = { + description: "since apud the pepper compassionate certainly hmph", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms](../models/persistimporteddeploymentrequestpendingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendaw.md new file mode 100644 index 000000000..1982eafdd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding](../models/persistimporteddeploymentrequestpendingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendEffect](../models/persistimporteddeploymentrequestpendingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant](../models/persistimporteddeploymentrequestpendingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawbinding.md new file mode 100644 index 000000000..79460390c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawbinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource](../models/persistimporteddeploymentrequestpendingpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack](../models/persistimporteddeploymentrequestpendingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawgrant.md new file mode 100644 index 000000000..6b347d6d6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawgrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawresource.md new file mode 100644 index 000000000..34238481a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawresource.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource = { + resources: [ + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawstack.md new file mode 100644 index 000000000..5f6c942b2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendawstack.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazure.md new file mode 100644 index 000000000..4f299b259 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding](../models/persistimporteddeploymentrequestpendingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant](../models/persistimporteddeploymentrequestpendingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..a03e320d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurebinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource](../models/persistimporteddeploymentrequestpendingpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack](../models/persistimporteddeploymentrequestpendingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..fdacaab14 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazuregrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazureresource.md new file mode 100644 index 000000000..3c982f745 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazureresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurestack.md new file mode 100644 index 000000000..03a99f7de --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendazurestack.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionresource.md new file mode 100644 index 000000000..cf011be1e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionresource.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionstack.md new file mode 100644 index 000000000..bf672f992 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendconditionstack.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendeffect.md new file mode 100644 index 000000000..c11af046f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendeffect.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendEffect = + "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcp.md new file mode 100644 index 000000000..c9d4995a6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding](../models/persistimporteddeploymentrequestpendingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant](../models/persistimporteddeploymentrequestpendingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..ad3278266 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpbinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource](../models/persistimporteddeploymentrequestpendingpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack](../models/persistimporteddeploymentrequestpendingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..a66a28a29 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpgrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpresource.md new file mode 100644 index 000000000..9cecfcf21 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpresource.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..28c5507e5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendgcpstack.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendplatforms.md new file mode 100644 index 000000000..b0f59f9b1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendplatforms.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAw](../models/persistimporteddeploymentrequestpendingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendAzure](../models/persistimporteddeploymentrequestpendingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.PersistImportedDeploymentRequestPendingPreparedStackExtendGcp](../models/persistimporteddeploymentrequestpendingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..067eceda7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendresourceconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..ae827c369 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendstackconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendunion.md new file mode 100644 index 000000000..7b7bdfa6a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackextendunion.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackExtend` + +```typescript +const value: models.PersistImportedDeploymentRequestPendingPreparedStackExtend = + { + description: "since apud the pepper compassionate certainly hmph", + id: "", + platforms: {}, + }; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackinput.md new file mode 100644 index 000000000..c837481f3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackinput.md @@ -0,0 +1,34 @@ +# PersistImportedDeploymentRequestPendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackInput = { + description: "boohoo amongst refine what searchingly", + id: "", + kind: "string", + label: "", + providedBy: [], + required: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `default` | *models.PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.PersistImportedDeploymentRequestPendingPreparedStackEnv](../models/persistimporteddeploymentrequestpendingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.PersistImportedDeploymentRequestPendingPreparedStackKind](../models/persistimporteddeploymentrequestpendingpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.PersistImportedDeploymentRequestPendingPreparedStackPlatform](../models/persistimporteddeploymentrequestpendingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.PersistImportedDeploymentRequestPendingPreparedStackProvidedBy](../models/persistimporteddeploymentrequestpendingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.PersistImportedDeploymentRequestPendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackkind.md new file mode 100644 index 000000000..b0aa7d76d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackkind.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPendingPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackKind = "number"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacklifecycle.md new file mode 100644 index 000000000..a5a22102e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacklifecycle.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackLifecycle = + "live"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement1.md new file mode 100644 index 000000000..3e46b09d8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement1.md @@ -0,0 +1,26 @@ +# PersistImportedDeploymentRequestPendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackManagement1 = { + extend: { + "key": [ + { + description: + "inwardly phew prioritize ha forswear godfather merry calmly whereas", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement2.md new file mode 100644 index 000000000..eb1413622 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagement2.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackManagement2 = { + override: { + "key": [], + "key1": [ + "", + ], + "key2": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementenum.md new file mode 100644 index 000000000..dbc5ac90e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementenum.md @@ -0,0 +1,16 @@ +# PersistImportedDeploymentRequestPendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackManagementEnum = + "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementunion.md new file mode 100644 index 000000000..9ee29e45a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackmanagementunion.md @@ -0,0 +1,47 @@ +# PersistImportedDeploymentRequestPendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackManagement1` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackManagement1 = { + extend: { + "key": [ + { + description: + "inwardly phew prioritize ha forswear godfather merry calmly whereas", + id: "", + platforms: {}, + }, + ], + }, + }; +``` + +### `models.PersistImportedDeploymentRequestPendingPreparedStackManagement2` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackManagement2 = { + override: { + "key": [], + "key1": [ + "", + ], + "key2": [], + }, + }; +``` + +### `models.PersistImportedDeploymentRequestPendingPreparedStackManagementEnum` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackManagementEnum = + "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverride.md new file mode 100644 index 000000000..4701d5e7d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverride.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverride = { + description: "pointed spring icy", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideaw.md new file mode 100644 index 000000000..51c375107 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..7b94c08c6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawbinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..fdd02a29b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawgrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawresource.md new file mode 100644 index 000000000..247ed81ef --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawresource.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource = { + resources: [], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..66c7530ab --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideawstack.md @@ -0,0 +1,25 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack = + { + resources: [ + "", + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazure.md new file mode 100644 index 000000000..0d82a72cc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..abf89a407 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurebinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..45b315ff3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazuregrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..1fa269f94 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazureresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..1a284c9c0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideazurestack.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..f79a00ded --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionresource.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..b181938f5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideconditionstack.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..ee19a178b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideeffect.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect = + "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcp.md new file mode 100644 index 000000000..ee23098e9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding](../models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant](../models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..2fa6d1c50 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpbinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource](../models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack](../models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..d7a74726c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpgrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..2396fff7c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpresource.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..3a7f0c861 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridegcpstack.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..913eee184 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideplatforms.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAw](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure](../models/persistimporteddeploymentrequestpendingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp](../models/persistimporteddeploymentrequestpendingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..0360a4b20 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..11e9185da --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverridestackconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideunion.md new file mode 100644 index 000000000..eae79678f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackoverrideunion.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackOverride` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackOverride = { + description: "pointed spring icy", + id: "", + platforms: {}, + }; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackpermissions.md new file mode 100644 index 000000000..c5f9cdd4a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackpermissions.md @@ -0,0 +1,31 @@ +# PersistImportedDeploymentRequestPendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackPermissions = { + profiles: { + "key": { + "key": [], + }, + "key1": { + "key": [], + "key1": [ + "", + ], + }, + "key2": {}, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.PersistImportedDeploymentRequestPendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackplatform.md new file mode 100644 index 000000000..9c9209ea6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackplatform.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackPlatform = + "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofile.md new file mode 100644 index 000000000..8a18ae8d1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofile.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfile = { + description: "sniveling reborn bemuse bar dutiful aw", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms](../models/persistimporteddeploymentrequestpendingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileaw.md new file mode 100644 index 000000000..344c182b5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding](../models/persistimporteddeploymentrequestpendingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileEffect](../models/persistimporteddeploymentrequestpendingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant](../models/persistimporteddeploymentrequestpendingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..7fa3da53d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawbinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource](../models/persistimporteddeploymentrequestpendingpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack](../models/persistimporteddeploymentrequestpendingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..92576ad77 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawgrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawresource.md new file mode 100644 index 000000000..534667664 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawresource.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource = { + resources: [ + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawstack.md new file mode 100644 index 000000000..7fd2483e3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileawstack.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack = + { + resources: [ + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazure.md new file mode 100644 index 000000000..954c0a251 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding](../models/persistimporteddeploymentrequestpendingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant](../models/persistimporteddeploymentrequestpendingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..91efccafb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurebinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource](../models/persistimporteddeploymentrequestpendingpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack](../models/persistimporteddeploymentrequestpendingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..f460cf7af --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazuregrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazureresource.md new file mode 100644 index 000000000..ca843c405 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazureresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..fb84e30fc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileazurestack.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..a5bb1dda6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionresource.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..ba1f2391d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileconditionstack.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileeffect.md new file mode 100644 index 000000000..424d32ec5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileeffect.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileEffect = + "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcp.md new file mode 100644 index 000000000..86ed5bfd9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding](../models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant](../models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..e6d888c19 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpbinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource](../models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack](../models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..b572639f8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpgrant.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..765847e6e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpresource.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `condition` | *models.PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..d63b98736 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilegcpstack.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..1aee12129 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileplatforms.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAw](../models/persistimporteddeploymentrequestpendingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileAzure](../models/persistimporteddeploymentrequestpendingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.PersistImportedDeploymentRequestPendingPreparedStackProfileGcp](../models/persistimporteddeploymentrequestpendingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..67df38825 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..f5c41cb2e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofilestackconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileunion.md new file mode 100644 index 000000000..2607fce0c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprofileunion.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackProfile` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackProfile = { + description: "sniveling reborn bemuse bar dutiful aw", + id: "", + platforms: {}, + }; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprovidedby.md new file mode 100644 index 000000000..5df150681 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackprovidedby.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackProvidedBy = + "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackresources.md new file mode 100644 index 000000000..440b64326 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackresources.md @@ -0,0 +1,31 @@ +# PersistImportedDeploymentRequestPendingPreparedStackResources + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [ + { + id: "", + type: "", + }, + ], + lifecycle: "live", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.PersistImportedDeploymentRequestPendingPreparedStackConfig](../models/persistimporteddeploymentrequestpendingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.PersistImportedDeploymentRequestPendingPreparedStackDependency](../models/persistimporteddeploymentrequestpendingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.PersistImportedDeploymentRequestPendingPreparedStackLifecycle](../models/persistimporteddeploymentrequestpendingpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..541fae64a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacksupportedplatform.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform = + "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeboolean.md new file mode 100644 index 000000000..f15f55db2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeboolean.md @@ -0,0 +1,16 @@ +# PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean = + "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..25fd0f5bb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeenvenum.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum = + "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypenumber.md new file mode 100644 index 000000000..00b2f0195 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypenumber.md @@ -0,0 +1,16 @@ +# PersistImportedDeploymentRequestPendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackTypeNumber = + "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestring.md new file mode 100644 index 000000000..3fd4c4848 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestring.md @@ -0,0 +1,16 @@ +# PersistImportedDeploymentRequestPendingPreparedStackTypeString + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackTypeString = + "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestringlist.md new file mode 100644 index 000000000..5366a1447 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypestringlist.md @@ -0,0 +1,16 @@ +# PersistImportedDeploymentRequestPendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackTypeStringList = + "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeunion.md new file mode 100644 index 000000000..2d7c7da8d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstacktypeunion.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPendingPreparedStackTypeUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum = + "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackunion.md new file mode 100644 index 000000000..abed3db28 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackunion.md @@ -0,0 +1,28 @@ +# PersistImportedDeploymentRequestPendingPreparedStackUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStack` + +```typescript +const value: models.PersistImportedDeploymentRequestPendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", + }, + }, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidation.md new file mode 100644 index 000000000..c5ee84111 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# PersistImportedDeploymentRequestPendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidationunion.md new file mode 100644 index 000000000..fd8bd0b33 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpendingpreparedstackvalidationunion.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPendingPreparedStackValidationUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPendingPreparedStackValidation` + +```typescript +const value: + models.PersistImportedDeploymentRequestPendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpermissions.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpermissions.md deleted file mode 100644 index 070756002..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpermissions.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestPermissions - -Combined permissions configuration that contains both profiles and management - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestPermissions } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestPermissions = { - profiles: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `management` | *models.PersistImportedDeploymentRequestManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | -| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsautoscale.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsautoscale.md index 661e9e98d..ac35fd652 100644 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsautoscale.md @@ -14,9 +14,10 @@ let value: PersistImportedDeploymentRequestPoolsAutoscale = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `max` | *number* | :heavy_check_mark: | Maximum machine count. | -| `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `failureDomains` | *models.PersistImportedDeploymentRequestFailureDomainsUnion2* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `max` | *number* | :heavy_check_mark: | Maximum machine count. | +| `min` | *number* | :heavy_check_mark: | Minimum machine count. | +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsfixed.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsfixed.md index 689af226d..54866534e 100644 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpoolsfixed.md @@ -13,8 +13,9 @@ let value: PersistImportedDeploymentRequestPoolsFixed = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `failureDomains` | *models.PersistImportedDeploymentRequestFailureDomainsUnion1* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstack.md index c6800e43d..f5bf79312 100644 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstack.md +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstack.md @@ -15,10 +15,10 @@ let value: PersistImportedDeploymentRequestPreparedStack = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | -| `inputs` | [models.PersistImportedDeploymentRequestInput](../models/persistimporteddeploymentrequestinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | -| `permissions` | [models.PersistImportedDeploymentRequestPermissions](../models/persistimporteddeploymentrequestpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | -| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | -| `supportedPlatforms` | [models.PersistImportedDeploymentRequestSupportedPlatform](../models/persistimporteddeploymentrequestsupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.PersistImportedDeploymentRequestPreparedStackInput](../models/persistimporteddeploymentrequestpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.PersistImportedDeploymentRequestPreparedStackPermissions](../models/persistimporteddeploymentrequestpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.PersistImportedDeploymentRequestPreparedStackSupportedPlatform](../models/persistimporteddeploymentrequestpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackconfig.md new file mode 100644 index 000000000..7062f8f1f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackconfig.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultboolean.md new file mode 100644 index 000000000..b980bb130 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.PersistImportedDeploymentRequestPreparedStackTypeBoolean](../models/persistimporteddeploymentrequestpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultnumber.md new file mode 100644 index 000000000..dc4e6e97e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.PersistImportedDeploymentRequestPreparedStackTypeNumber](../models/persistimporteddeploymentrequestpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultstring.md new file mode 100644 index 000000000..020544520 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackDefaultString + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.PersistImportedDeploymentRequestPreparedStackTypeString](../models/persistimporteddeploymentrequestpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..b48a1a918 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultstringlist.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.PersistImportedDeploymentRequestPreparedStackTypeStringList](../models/persistimporteddeploymentrequestpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultunion.md new file mode 100644 index 000000000..568630e11 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdefaultunion.md @@ -0,0 +1,53 @@ +# PersistImportedDeploymentRequestPreparedStackDefaultUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackDefaultString` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackDefaultString = + { + type: "string", + value: "", + }; +``` + +### `models.PersistImportedDeploymentRequestPreparedStackDefaultNumber` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackDefaultNumber = + { + type: "number", + value: "", + }; +``` + +### `models.PersistImportedDeploymentRequestPreparedStackDefaultBoolean` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackDefaultBoolean = { + type: "boolean", + value: false, + }; +``` + +### `models.PersistImportedDeploymentRequestPreparedStackDefaultStringList` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdependency.md new file mode 100644 index 000000000..8c535cf6f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackdependency.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackenv.md new file mode 100644 index 000000000..0c3e1354c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackenv.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.PersistImportedDeploymentRequestPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextend.md new file mode 100644 index 000000000..705805341 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextend.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtend = { + description: "closely christen famously curiously", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.PersistImportedDeploymentRequestPreparedStackExtendPlatforms](../models/persistimporteddeploymentrequestpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendaw.md new file mode 100644 index 000000000..a338f13e3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackExtendAwBinding](../models/persistimporteddeploymentrequestpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.PersistImportedDeploymentRequestPreparedStackExtendEffect](../models/persistimporteddeploymentrequestpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackExtendAwGrant](../models/persistimporteddeploymentrequestpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawbinding.md new file mode 100644 index 000000000..243bc9125 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackExtendAwResource](../models/persistimporteddeploymentrequestpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackExtendAwStack](../models/persistimporteddeploymentrequestpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawgrant.md new file mode 100644 index 000000000..fe592fa7e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawresource.md new file mode 100644 index 000000000..7c1083064 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawresource.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawstack.md new file mode 100644 index 000000000..81933af6e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendawstack.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazure.md new file mode 100644 index 000000000..06532f3aa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackExtendAzureBinding](../models/persistimporteddeploymentrequestpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackExtendAzureGrant](../models/persistimporteddeploymentrequestpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazurebinding.md new file mode 100644 index 000000000..719ca3e1a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackExtendAzureResource](../models/persistimporteddeploymentrequestpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackExtendAzureStack](../models/persistimporteddeploymentrequestpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazuregrant.md new file mode 100644 index 000000000..44ca804f1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazureresource.md new file mode 100644 index 000000000..ea7193358 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazurestack.md new file mode 100644 index 000000000..624c8b8f5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendconditionresource.md new file mode 100644 index 000000000..b3fd4dfc2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendconditionresource.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPreparedStackExtendConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendconditionstack.md new file mode 100644 index 000000000..fe5a97926 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendeffect.md new file mode 100644 index 000000000..fd2d8fb45 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcp.md new file mode 100644 index 000000000..04e28d908 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackExtendGcpBinding](../models/persistimporteddeploymentrequestpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackExtendGcpGrant](../models/persistimporteddeploymentrequestpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..9067ecebc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackExtendGcpResource](../models/persistimporteddeploymentrequestpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackExtendGcpStack](../models/persistimporteddeploymentrequestpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..932214ef4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpresource.md new file mode 100644 index 000000000..d97790bfa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpstack.md new file mode 100644 index 000000000..727e5b622 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendplatforms.md new file mode 100644 index 000000000..7dc5418fa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.PersistImportedDeploymentRequestPreparedStackExtendAw](../models/persistimporteddeploymentrequestpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.PersistImportedDeploymentRequestPreparedStackExtendAzure](../models/persistimporteddeploymentrequestpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.PersistImportedDeploymentRequestPreparedStackExtendGcp](../models/persistimporteddeploymentrequestpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..6ab19b3e4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendresourceconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackExtendConditionResource` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackExtendConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..6ac063cdd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendstackconditionunion.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackExtendConditionStack` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackExtendConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendunion.md new file mode 100644 index 000000000..c9d04458c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackExtend` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackExtend = { + description: "closely christen famously curiously", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackinput.md new file mode 100644 index 000000000..41d26c7d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackinput.md @@ -0,0 +1,36 @@ +# PersistImportedDeploymentRequestPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackInput = { + description: "yowza athwart till before", + id: "", + kind: "string", + label: "", + providedBy: [ + "developer", + ], + required: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `default` | *models.PersistImportedDeploymentRequestPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.PersistImportedDeploymentRequestPreparedStackEnv](../models/persistimporteddeploymentrequestpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.PersistImportedDeploymentRequestPreparedStackKind](../models/persistimporteddeploymentrequestpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.PersistImportedDeploymentRequestPreparedStackPlatform](../models/persistimporteddeploymentrequestpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.PersistImportedDeploymentRequestPreparedStackProvidedBy](../models/persistimporteddeploymentrequestpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.PersistImportedDeploymentRequestPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackkind.md new file mode 100644 index 000000000..70c37f391 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackkind.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackKind = "string"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacklifecycle.md new file mode 100644 index 000000000..c93e1a53b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacklifecycle.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackLifecycle = "live"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagement1.md new file mode 100644 index 000000000..e46fcc006 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagement1.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackManagement1 + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackManagement1 = { + extend: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagement2.md new file mode 100644 index 000000000..7be746b1c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagement2.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackManagement2 + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackManagement2 = { + override: { + "key": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagementenum.md new file mode 100644 index 000000000..560d7b4a8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# PersistImportedDeploymentRequestPreparedStackManagementEnum + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagementunion.md new file mode 100644 index 000000000..c63e80f4e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackmanagementunion.md @@ -0,0 +1,31 @@ +# PersistImportedDeploymentRequestPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackManagement1` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackManagement1 = { + extend: {}, +}; +``` + +### `models.PersistImportedDeploymentRequestPreparedStackManagement2` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackManagement2 = { + override: { + "key": [], + }, +}; +``` + +### `models.PersistImportedDeploymentRequestPreparedStackManagementEnum` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackManagementEnum = "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverride.md new file mode 100644 index 000000000..5d4bafe9c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverride.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverride = { + description: "edge bleakly quicker splosh caring nor moor yuck", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.PersistImportedDeploymentRequestPreparedStackOverridePlatforms](../models/persistimporteddeploymentrequestpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideaw.md new file mode 100644 index 000000000..66e20fd63 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAwBinding](../models/persistimporteddeploymentrequestpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.PersistImportedDeploymentRequestPreparedStackOverrideEffect](../models/persistimporteddeploymentrequestpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAwGrant](../models/persistimporteddeploymentrequestpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..bd1155f5c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAwResource](../models/persistimporteddeploymentrequestpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAwStack](../models/persistimporteddeploymentrequestpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..337a772f7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawresource.md new file mode 100644 index 000000000..82dcec60e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawresource.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawstack.md new file mode 100644 index 000000000..f10e309bf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideawstack.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazure.md new file mode 100644 index 000000000..d0a1eccf9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding](../models/persistimporteddeploymentrequestpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant](../models/persistimporteddeploymentrequestpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..42be7b028 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurebinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAzureResource](../models/persistimporteddeploymentrequestpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAzureStack](../models/persistimporteddeploymentrequestpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..d5ea3fb8c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..d8ea4a09d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazureresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAzureResource = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..78cbfa63f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..283ca0917 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionresource.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..5063ff641 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideconditionstack.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideConditionStack = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideeffect.md new file mode 100644 index 000000000..b2de95e9c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideeffect.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideEffect = + "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcp.md new file mode 100644 index 000000000..daf746976 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding](../models/persistimporteddeploymentrequestpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant](../models/persistimporteddeploymentrequestpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..e5824978b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackOverrideGcpResource](../models/persistimporteddeploymentrequestpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackOverrideGcpStack](../models/persistimporteddeploymentrequestpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..fe86f47f1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..c5fca0f3c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `condition` | *models.PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..25e05b224 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..f0e0681d6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAw](../models/persistimporteddeploymentrequestpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.PersistImportedDeploymentRequestPreparedStackOverrideAzure](../models/persistimporteddeploymentrequestpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.PersistImportedDeploymentRequestPreparedStackOverrideGcp](../models/persistimporteddeploymentrequestpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..b15490e6e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackOverrideConditionResource` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackOverrideConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..a92e25b36 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverridestackconditionunion.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackOverrideConditionStack` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackOverrideConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideunion.md new file mode 100644 index 000000000..0a1060f19 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackoverrideunion.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackOverride` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackOverride = { + description: "edge bleakly quicker splosh caring nor moor yuck", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackpermissions.md new file mode 100644 index 000000000..5eaa2bcaa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackpermissions.md @@ -0,0 +1,42 @@ +# PersistImportedDeploymentRequestPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackPermissions = { + profiles: { + "key": { + "key": [], + "key1": [], + "key2": [ + { + description: "mentor formula hm deliquesce forgery deceivingly nor", + id: "", + platforms: {}, + }, + ], + }, + "key1": { + "key": [], + "key1": [ + { + description: "mentor formula hm deliquesce forgery deceivingly nor", + id: "", + platforms: {}, + }, + ], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.PersistImportedDeploymentRequestPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofile.md new file mode 100644 index 000000000..1ed315a62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofile.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfile = { + description: "meh rarely lamp eek whereas an nougat although hence", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.PersistImportedDeploymentRequestPreparedStackProfilePlatforms](../models/persistimporteddeploymentrequestpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileaw.md new file mode 100644 index 000000000..b48f76778 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackProfileAwBinding](../models/persistimporteddeploymentrequestpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.PersistImportedDeploymentRequestPreparedStackProfileEffect](../models/persistimporteddeploymentrequestpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackProfileAwGrant](../models/persistimporteddeploymentrequestpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawbinding.md new file mode 100644 index 000000000..fdf9e6603 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackProfileAwResource](../models/persistimporteddeploymentrequestpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackProfileAwStack](../models/persistimporteddeploymentrequestpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawgrant.md new file mode 100644 index 000000000..40e28eec4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawresource.md new file mode 100644 index 000000000..e92035448 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawresource.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawstack.md new file mode 100644 index 000000000..b2024a1b1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileawstack.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazure.md new file mode 100644 index 000000000..bba8e0481 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackProfileAzureBinding](../models/persistimporteddeploymentrequestpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackProfileAzureGrant](../models/persistimporteddeploymentrequestpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..7adaa5fd7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazurebinding.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAzureBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackProfileAzureResource](../models/persistimporteddeploymentrequestpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackProfileAzureStack](../models/persistimporteddeploymentrequestpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..c8dd5287a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazureresource.md new file mode 100644 index 000000000..05c94622b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazurestack.md new file mode 100644 index 000000000..85378b5e7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..f5add2398 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionresource.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: + PersistImportedDeploymentRequestPreparedStackProfileConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..89ab3a3b2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileconditionstack.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileConditionStack = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileeffect.md new file mode 100644 index 000000000..b90dd404f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcp.md new file mode 100644 index 000000000..e090ea3f8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# PersistImportedDeploymentRequestPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.PersistImportedDeploymentRequestPreparedStackProfileGcpBinding](../models/persistimporteddeploymentrequestpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.PersistImportedDeploymentRequestPreparedStackProfileGcpGrant](../models/persistimporteddeploymentrequestpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..8c5a343c0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PersistImportedDeploymentRequestPreparedStackProfileGcpResource](../models/persistimporteddeploymentrequestpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.PersistImportedDeploymentRequestPreparedStackProfileGcpStack](../models/persistimporteddeploymentrequestpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..dfd5aad5c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..59e7a7092 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..c6f7a6802 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `condition` | *models.PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileplatforms.md new file mode 100644 index 000000000..5f7c77fe1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# PersistImportedDeploymentRequestPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.PersistImportedDeploymentRequestPreparedStackProfileAw](../models/persistimporteddeploymentrequestpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.PersistImportedDeploymentRequestPreparedStackProfileAzure](../models/persistimporteddeploymentrequestpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.PersistImportedDeploymentRequestPreparedStackProfileGcp](../models/persistimporteddeploymentrequestpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..02dd27ae7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,21 @@ +# PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackProfileConditionResource` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackProfileConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..2b3fef9db --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofilestackconditionunion.md @@ -0,0 +1,20 @@ +# PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackProfileConditionStack` + +```typescript +const value: + models.PersistImportedDeploymentRequestPreparedStackProfileConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileunion.md new file mode 100644 index 000000000..4063a9de0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# PersistImportedDeploymentRequestPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackProfile` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackProfile = { + description: "meh rarely lamp eek whereas an nougat although hence", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprovidedby.md new file mode 100644 index 000000000..41e4aa410 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackProvidedBy = "deployer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackresources.md new file mode 100644 index 000000000..ce13d7c16 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackresources.md @@ -0,0 +1,26 @@ +# PersistImportedDeploymentRequestPreparedStackResources + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "frozen", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.PersistImportedDeploymentRequestPreparedStackConfig](../models/persistimporteddeploymentrequestpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.PersistImportedDeploymentRequestPreparedStackDependency](../models/persistimporteddeploymentrequestpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.PersistImportedDeploymentRequestPreparedStackLifecycle](../models/persistimporteddeploymentrequestpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacksupportedplatform.md new file mode 100644 index 000000000..b21642e8d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacksupportedplatform.md @@ -0,0 +1,18 @@ +# PersistImportedDeploymentRequestPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackSupportedPlatform = + "local"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeboolean.md new file mode 100644 index 000000000..42fb85a6a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# PersistImportedDeploymentRequestPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeenvenum.md new file mode 100644 index 000000000..52fe731d1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackTypeEnvEnum = "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypenumber.md new file mode 100644 index 000000000..09c87c6ee --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# PersistImportedDeploymentRequestPreparedStackTypeNumber + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypestring.md new file mode 100644 index 000000000..c063e3166 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# PersistImportedDeploymentRequestPreparedStackTypeString + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypestringlist.md new file mode 100644 index 000000000..cb59ef0b4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypestringlist.md @@ -0,0 +1,16 @@ +# PersistImportedDeploymentRequestPreparedStackTypeStringList + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackTypeStringList = + "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeunion.md new file mode 100644 index 000000000..493e4cd84 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstacktypeunion.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackTypeUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackTypeEnvEnum` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackTypeEnvEnum = + "secret"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackvalidation.md new file mode 100644 index 000000000..857b315aa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# PersistImportedDeploymentRequestPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackvalidationunion.md new file mode 100644 index 000000000..8c641185e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestpreparedstackvalidationunion.md @@ -0,0 +1,17 @@ +# PersistImportedDeploymentRequestPreparedStackValidationUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestPreparedStackValidation` + +```typescript +const value: models.PersistImportedDeploymentRequestPreparedStackValidation = + {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofile.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofile.md deleted file mode 100644 index d92201c67..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofile.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestProfile - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfile } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfile = { - description: "youthfully zowie infatuated", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.PersistImportedDeploymentRequestProfilePlatforms](../models/persistimporteddeploymentrequestprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileaw.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileaw.md deleted file mode 100644 index e4249add5..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# PersistImportedDeploymentRequestProfileAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAw } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `binding` | [models.PersistImportedDeploymentRequestProfileAwBinding](../models/persistimporteddeploymentrequestprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.PersistImportedDeploymentRequestProfileEffect](../models/persistimporteddeploymentrequestprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.PersistImportedDeploymentRequestProfileAwGrant](../models/persistimporteddeploymentrequestprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawbinding.md deleted file mode 100644 index a9cd6412d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestProfileAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAwBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.PersistImportedDeploymentRequestProfileAwResource](../models/persistimporteddeploymentrequestprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestProfileAwStack](../models/persistimporteddeploymentrequestprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawgrant.md deleted file mode 100644 index 642a146e5..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestProfileAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAwGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawresource.md deleted file mode 100644 index 2ee6bbf41..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawresource.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestProfileAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAwResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAwResource = { - resources: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawstack.md deleted file mode 100644 index c73801e67..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileawstack.md +++ /dev/null @@ -1,22 +0,0 @@ -# PersistImportedDeploymentRequestProfileAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAwStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAwStack = { - resources: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazure.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazure.md deleted file mode 100644 index 417ba3aa8..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestProfileAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAzure } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `binding` | [models.PersistImportedDeploymentRequestProfileAzureBinding](../models/persistimporteddeploymentrequestprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.PersistImportedDeploymentRequestProfileAzureGrant](../models/persistimporteddeploymentrequestprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazurebinding.md deleted file mode 100644 index 8cd58321e..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestProfileAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAzureBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.PersistImportedDeploymentRequestProfileAzureResource](../models/persistimporteddeploymentrequestprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestProfileAzureStack](../models/persistimporteddeploymentrequestprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazuregrant.md deleted file mode 100644 index ab25de34e..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestProfileAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAzureGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazureresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazureresource.md deleted file mode 100644 index 914a35b94..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestProfileAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAzureResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazurestack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazurestack.md deleted file mode 100644 index a9529269d..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestProfileAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileAzureStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileconditionresource.md deleted file mode 100644 index 44b8d62c0..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestProfileConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileConditionResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileconditionstack.md deleted file mode 100644 index fa3672366..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestProfileConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileConditionStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileeffect.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileeffect.md deleted file mode 100644 index 1605c1b90..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestProfileEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileEffect } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileEffect = "Deny"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcp.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcp.md deleted file mode 100644 index 5b7ac7145..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestProfileGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileGcp } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `binding` | [models.PersistImportedDeploymentRequestProfileGcpBinding](../models/persistimporteddeploymentrequestprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.PersistImportedDeploymentRequestProfileGcpGrant](../models/persistimporteddeploymentrequestprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpbinding.md deleted file mode 100644 index b1634d5eb..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# PersistImportedDeploymentRequestProfileGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileGcpBinding } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `resource` | [models.PersistImportedDeploymentRequestProfileGcpResource](../models/persistimporteddeploymentrequestprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.PersistImportedDeploymentRequestProfileGcpStack](../models/persistimporteddeploymentrequestprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpgrant.md deleted file mode 100644 index 1d04fed31..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# PersistImportedDeploymentRequestProfileGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileGcpGrant } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpresource.md deleted file mode 100644 index 6b611daef..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestProfileGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileGcpResource } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `condition` | *models.PersistImportedDeploymentRequestProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpstack.md deleted file mode 100644 index c415a4ab0..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestProfileGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfileGcpStack } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfileGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `condition` | *models.PersistImportedDeploymentRequestProfileStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileplatforms.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileplatforms.md deleted file mode 100644 index df4bf146c..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# PersistImportedDeploymentRequestProfilePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProfilePlatforms } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProfilePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | -| `aws` | [models.PersistImportedDeploymentRequestProfileAw](../models/persistimporteddeploymentrequestprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.PersistImportedDeploymentRequestProfileAzure](../models/persistimporteddeploymentrequestprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.PersistImportedDeploymentRequestProfileGcp](../models/persistimporteddeploymentrequestprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileresourceconditionunion.md deleted file mode 100644 index 313dd4d81..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestProfileResourceConditionUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestProfileConditionResource` - -```typescript -const value: models.PersistImportedDeploymentRequestProfileConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilestackconditionunion.md deleted file mode 100644 index b81e87545..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofilestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# PersistImportedDeploymentRequestProfileStackConditionUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestProfileConditionStack` - -```typescript -const value: models.PersistImportedDeploymentRequestProfileConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileunion.md deleted file mode 100644 index 7a556fb64..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprofileunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# PersistImportedDeploymentRequestProfileUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.PersistImportedDeploymentRequestProfile` - -```typescript -const value: models.PersistImportedDeploymentRequestProfile = { - description: "youthfully zowie infatuated", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprovidedby.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprovidedby.md deleted file mode 100644 index 7c2ad6a3b..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestprovidedby.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestProvidedBy - -Who can provide a stack input value. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestProvidedBy } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestProvidedBy = "deployer"; -``` - -## Values - -```typescript -"developer" | "deployer" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestresources.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestresources.md deleted file mode 100644 index fc307719c..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestresources.md +++ /dev/null @@ -1,25 +0,0 @@ -# PersistImportedDeploymentRequestResources - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestResources } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestResources = { - config: { - id: "", - type: "", - }, - dependencies: [], - lifecycle: "live", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.PersistImportedDeploymentRequestConfig](../models/persistimporteddeploymentrequestconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.PersistImportedDeploymentRequestDependency](../models/persistimporteddeploymentrequestdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.PersistImportedDeploymentRequestLifecycle](../models/persistimporteddeploymentrequestlifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestruntimemetadata.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestruntimemetadata.md index 4c6bb6a03..59942c66b 100644 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestruntimemetadata.md @@ -18,5 +18,7 @@ let value: PersistImportedDeploymentRequestRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.PersistImportedDeploymentRequestPendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.PersistImportedDeploymentRequestPreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsetupupdateauthorization.md new file mode 100644 index 000000000..c68220ef5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsetupupdateauthorization.md @@ -0,0 +1,31 @@ +# PersistImportedDeploymentRequestSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { PersistImportedDeploymentRequestSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: PersistImportedDeploymentRequestSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 956709, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsetupupdateauthorizationunion.md new file mode 100644 index 000000000..384600b98 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.PersistImportedDeploymentRequestSetupUpdateAuthorization` + +```typescript +const value: models.PersistImportedDeploymentRequestSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 956709, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsupportedplatform.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsupportedplatform.md deleted file mode 100644 index 6238b2055..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestsupportedplatform.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestSupportedPlatform - -Represents the target cloud platform. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestSupportedPlatform } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestSupportedPlatform = "test"; -``` - -## Values - -```typescript -"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeboolean.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeboolean.md deleted file mode 100644 index ef3e931af..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeboolean.md +++ /dev/null @@ -1,15 +0,0 @@ -# PersistImportedDeploymentRequestTypeBoolean - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestTypeBoolean } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestTypeBoolean = "boolean"; -``` - -## Values - -```typescript -"boolean" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeenvenum.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeenvenum.md deleted file mode 100644 index 70d455d2b..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeenvenum.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestTypeEnvEnum - -Environment variable handling for a stack input mapping. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestTypeEnvEnum } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestTypeEnvEnum = "plain"; -``` - -## Values - -```typescript -"plain" | "secret" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypenumber.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypenumber.md deleted file mode 100644 index fde8c46c3..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypenumber.md +++ /dev/null @@ -1,15 +0,0 @@ -# PersistImportedDeploymentRequestTypeNumber - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestTypeNumber } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestTypeNumber = "number"; -``` - -## Values - -```typescript -"number" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypestring.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypestring.md deleted file mode 100644 index a606b8512..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypestring.md +++ /dev/null @@ -1,15 +0,0 @@ -# PersistImportedDeploymentRequestTypeString - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestTypeString } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestTypeString = "string"; -``` - -## Values - -```typescript -"string" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypestringlist.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypestringlist.md deleted file mode 100644 index 762b46a2c..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypestringlist.md +++ /dev/null @@ -1,15 +0,0 @@ -# PersistImportedDeploymentRequestTypeStringList - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestTypeStringList } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestTypeStringList = "stringList"; -``` - -## Values - -```typescript -"stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeunion.md deleted file mode 100644 index a616336e6..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequesttypeunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestTypeUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestTypeEnvEnum` - -```typescript -const value: models.PersistImportedDeploymentRequestTypeEnvEnum = "secret"; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestvalidation.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestvalidation.md deleted file mode 100644 index c2b37f2b0..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestvalidation.md +++ /dev/null @@ -1,25 +0,0 @@ -# PersistImportedDeploymentRequestValidation - -Portable stack input validation constraints. - -## Example Usage - -```typescript -import { PersistImportedDeploymentRequestValidation } from "@alienplatform/platform-api/models"; - -let value: PersistImportedDeploymentRequestValidation = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | -| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | -| `max` | *string* | :heavy_minus_sign: | Maximum number. | -| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | -| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | -| `min` | *string* | :heavy_minus_sign: | Minimum number. | -| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | -| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | -| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | -| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestvalidationunion.md b/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestvalidationunion.md deleted file mode 100644 index cfb9c1e06..000000000 --- a/client-sdks/platform/typescript/docs/models/persistimporteddeploymentrequestvalidationunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# PersistImportedDeploymentRequestValidationUnion - - -## Supported Types - -### `models.PersistImportedDeploymentRequestValidation` - -```typescript -const value: models.PersistImportedDeploymentRequestValidation = {}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/phase.md b/client-sdks/platform/typescript/docs/models/phase.md deleted file mode 100644 index 99ecbaa49..000000000 --- a/client-sdks/platform/typescript/docs/models/phase.md +++ /dev/null @@ -1,22 +0,0 @@ -# Phase - -Phase of a deployment at which a failure occurred. - -Derived from the source deployment status: `preflights-failed` → -`Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` → -`Updating`, `delete-failed` → `Deleting`. -`refresh-failed` is modelled separately via `DeploymentDegraded`. - -## Example Usage - -```typescript -import { Phase } from "@alienplatform/platform-api/models"; - -let value: Phase = "provisioning"; -``` - -## Values - -```typescript -"preflights" | "provisioning" | "updating" | "deleting" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/prepareddeploymentstackresources.md b/client-sdks/platform/typescript/docs/models/prepareddeploymentstackresources.md index 71ecffac9..a8c6859c4 100644 --- a/client-sdks/platform/typescript/docs/models/prepareddeploymentstackresources.md +++ b/client-sdks/platform/typescript/docs/models/prepareddeploymentstackresources.md @@ -17,9 +17,10 @@ let value: PreparedDeploymentStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.PreparedDeploymentStackConfig](../models/prepareddeploymentstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.PreparedDeploymentStackDependency](../models/prepareddeploymentstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.PreparedDeploymentStackLifecycle](../models/prepareddeploymentstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.PreparedDeploymentStackConfig](../models/prepareddeploymentstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.PreparedDeploymentStackDependency](../models/prepareddeploymentstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.PreparedDeploymentStackLifecycle](../models/prepareddeploymentstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/previouserror.md b/client-sdks/platform/typescript/docs/models/previouserror.md deleted file mode 100644 index b1c7ad2e3..000000000 --- a/client-sdks/platform/typescript/docs/models/previouserror.md +++ /dev/null @@ -1,34 +0,0 @@ -# PreviousError - -Canonical error container that provides a structured way to represent errors -with rich metadata including error codes, human-readable messages, context, -and chaining capabilities for error propagation. - -This struct is designed to be both machine-readable and user-friendly, -supporting serialization for API responses and detailed error reporting -in distributed systems. - -## Example Usage - -```typescript -import { PreviousError } from "@alienplatform/platform-api/models"; - -let value: PreviousError = { - code: "", - internal: true, - message: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | -| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | -| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | -| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | -| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | -| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | -| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | -| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/previouserrorunion.md b/client-sdks/platform/typescript/docs/models/previouserrorunion.md deleted file mode 100644 index b911c916f..000000000 --- a/client-sdks/platform/typescript/docs/models/previouserrorunion.md +++ /dev/null @@ -1,21 +0,0 @@ -# PreviousErrorUnion - - -## Supported Types - -### `models.PreviousError` - -```typescript -const value: models.PreviousError = { - code: "", - internal: true, - message: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/progress.md b/client-sdks/platform/typescript/docs/models/progress.md deleted file mode 100644 index 9bb04cac6..000000000 --- a/client-sdks/platform/typescript/docs/models/progress.md +++ /dev/null @@ -1,27 +0,0 @@ -# Progress - -Progress information for image push operations - -## Example Usage - -```typescript -import { Progress } from "@alienplatform/platform-api/models"; - -let value: Progress = { - bytesUploaded: 641278, - layersUploaded: 340252, - operation: "", - totalBytes: 238665, - totalLayers: 685450, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | -| `bytesUploaded` | *number* | :heavy_check_mark: | Bytes uploaded so far | -| `layersUploaded` | *number* | :heavy_check_mark: | Number of layers uploaded so far | -| `operation` | *string* | :heavy_check_mark: | Current operation being performed | -| `totalBytes` | *number* | :heavy_check_mark: | Total bytes to upload | -| `totalLayers` | *number* | :heavy_check_mark: | Total number of layers to upload | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/progressunion.md b/client-sdks/platform/typescript/docs/models/progressunion.md deleted file mode 100644 index 37877eca5..000000000 --- a/client-sdks/platform/typescript/docs/models/progressunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# ProgressUnion - - -## Supported Types - -### `models.Progress` - -```typescript -const value: models.Progress = { - bytesUploaded: 641278, - layersUploaded: 340252, - operation: "", - totalBytes: 238665, - totalLayers: 685450, -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/protocol.md b/client-sdks/platform/typescript/docs/models/protocol.md new file mode 100644 index 000000000..66b091437 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/protocol.md @@ -0,0 +1,15 @@ +# Protocol + +## Example Usage + +```typescript +import { Protocol } from "@alienplatform/platform-api/models"; + +let value: Protocol = "http"; +``` + +## Values + +```typescript +"http" | "tcp" +``` diff --git a/client-sdks/platform/typescript/docs/models/publicendpoints.md b/client-sdks/platform/typescript/docs/models/publicendpoints.md index 083f54ec4..49812f5b1 100644 --- a/client-sdks/platform/typescript/docs/models/publicendpoints.md +++ b/client-sdks/platform/typescript/docs/models/publicendpoints.md @@ -7,13 +7,18 @@ import { PublicEndpoints } from "@alienplatform/platform-api/models"; let value: PublicEndpoints = { url: "https://gigantic-hello.name", + protocol: "http", + host: "wordy-step-mother.info", + port: 701832, }; ``` ## Fields -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `url` | *string* | :heavy_check_mark: | N/A | -| `host` | *string* | :heavy_minus_sign: | N/A | -| `wildcardHost` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `url` | *string* | :heavy_check_mark: | N/A | +| `protocol` | [models.Protocol](../models/protocol.md) | :heavy_check_mark: | N/A | +| `host` | *string* | :heavy_check_mark: | N/A | +| `port` | *number* | :heavy_check_mark: | N/A | +| `wildcardHost` | *string* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/releaseinforesources.md b/client-sdks/platform/typescript/docs/models/releaseinforesources.md index 1900a98ea..9474abb6b 100644 --- a/client-sdks/platform/typescript/docs/models/releaseinforesources.md +++ b/client-sdks/platform/typescript/docs/models/releaseinforesources.md @@ -22,9 +22,10 @@ let value: ReleaseInfoResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.ReleaseInfoConfig](../models/releaseinfoconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.ReleaseInfoDependency](../models/releaseinfodependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.ReleaseInfoLifecycle](../models/releaseinfolifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.ReleaseInfoConfig](../models/releaseinfoconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.ReleaseInfoDependency](../models/releaseinfodependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.ReleaseInfoLifecycle](../models/releaseinfolifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/releaselistitemresponse.md b/client-sdks/platform/typescript/docs/models/releaselistitemresponse.md index 80358d755..89878b0b0 100644 --- a/client-sdks/platform/typescript/docs/models/releaselistitemresponse.md +++ b/client-sdks/platform/typescript/docs/models/releaselistitemresponse.md @@ -47,4 +47,5 @@ let value: ReleaseListItemResponse = { | `setupFingerprints` | Record | :heavy_check_mark: | N/A | | | `rootDirectory` | *string* | :heavy_minus_sign: | N/A | | | `workspaceId` | *string* | :heavy_check_mark: | N/A | | -| `project` | [models.ReleaseListItemResponseProject](../models/releaselistitemresponseproject.md) | :heavy_minus_sign: | Project info, included when ?include=project is used | | \ No newline at end of file +| `project` | [models.ReleaseListItemResponseProject](../models/releaselistitemresponseproject.md) | :heavy_minus_sign: | Project info, included when ?include=project is used | | +| `rollout` | [models.Rollout](../models/rollout.md) | :heavy_minus_sign: | Rollout stats, included when ?include=rollout is used | | diff --git a/client-sdks/platform/typescript/docs/models/rollout.md b/client-sdks/platform/typescript/docs/models/rollout.md new file mode 100644 index 000000000..81dbc6dcf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/rollout.md @@ -0,0 +1,23 @@ +# Rollout + +Rollout stats, included when ?include=rollout is used + +## Example Usage + +```typescript +import { Rollout } from "@alienplatform/platform-api/models"; + +let value: Rollout = { + updatedCount: 786693, + pendingCount: 96641, + avgDurationMs: 4012.4, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `updatedCount` | *number* | :heavy_check_mark: | Deployments that finished updating to this release (excludes initial provisions) | +| `pendingCount` | *number* | :heavy_check_mark: | Deployments currently targeting this release but not yet running it | +| `avgDurationMs` | *number* | :heavy_check_mark: | Average time from release creation until a deployment finished updating, in milliseconds | diff --git a/client-sdks/platform/typescript/docs/models/slackchannel.md b/client-sdks/platform/typescript/docs/models/slackchannel.md new file mode 100644 index 000000000..c1967e23d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/slackchannel.md @@ -0,0 +1,21 @@ +# SlackChannel + +## Example Usage + +```typescript +import { SlackChannel } from "@alienplatform/platform-api/models"; + +let value: SlackChannel = { + id: "", + name: "", + isMember: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *string* | :heavy_check_mark: | N/A | +| `name` | *string* | :heavy_check_mark: | N/A | +| `isMember` | *boolean* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/slackchannelsresponse.md b/client-sdks/platform/typescript/docs/models/slackchannelsresponse.md new file mode 100644 index 000000000..325273068 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/slackchannelsresponse.md @@ -0,0 +1,17 @@ +# SlackChannelsResponse + +## Example Usage + +```typescript +import { SlackChannelsResponse } from "@alienplatform/platform-api/models"; + +let value: SlackChannelsResponse = { + channels: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `channels` | [models.SlackChannel](../models/slackchannel.md)[] | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/slackinstallurlresponse.md b/client-sdks/platform/typescript/docs/models/slackinstallurlresponse.md new file mode 100644 index 000000000..9be241d0d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/slackinstallurlresponse.md @@ -0,0 +1,17 @@ +# SlackInstallUrlResponse + +## Example Usage + +```typescript +import { SlackInstallUrlResponse } from "@alienplatform/platform-api/models"; + +let value: SlackInstallUrlResponse = { + url: "https://subtle-relative.name/", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `url` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/slackintegrationstatus.md b/client-sdks/platform/typescript/docs/models/slackintegrationstatus.md new file mode 100644 index 000000000..7460d9f29 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/slackintegrationstatus.md @@ -0,0 +1,27 @@ +# SlackIntegrationStatus + +## Example Usage + +```typescript +import { SlackIntegrationStatus } from "@alienplatform/platform-api/models"; + +let value: SlackIntegrationStatus = { + connected: true, + slackTeamId: "", + slackTeamName: "", + installedByUserId: "", + installedAt: "", + notificationChannelId: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `connected` | *boolean* | :heavy_check_mark: | N/A | +| `slackTeamId` | *string* | :heavy_check_mark: | N/A | +| `slackTeamName` | *string* | :heavy_check_mark: | N/A | +| `installedByUserId` | *string* | :heavy_check_mark: | N/A | +| `installedAt` | *string* | :heavy_check_mark: | N/A | +| `notificationChannelId` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/slacknotificationchannelrequest.md b/client-sdks/platform/typescript/docs/models/slacknotificationchannelrequest.md new file mode 100644 index 000000000..f5f85e139 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/slacknotificationchannelrequest.md @@ -0,0 +1,17 @@ +# SlackNotificationChannelRequest + +## Example Usage + +```typescript +import { SlackNotificationChannelRequest } from "@alienplatform/platform-api/models"; + +let value: SlackNotificationChannelRequest = { + channelId: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `channelId` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/slacknotificationchannelresponse.md b/client-sdks/platform/typescript/docs/models/slacknotificationchannelresponse.md new file mode 100644 index 000000000..e27e51cd5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/slacknotificationchannelresponse.md @@ -0,0 +1,19 @@ +# SlackNotificationChannelResponse + +## Example Usage + +```typescript +import { SlackNotificationChannelResponse } from "@alienplatform/platform-api/models"; + +let value: SlackNotificationChannelResponse = { + notificationChannelId: "", + warning: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `notificationChannelId` | *string* | :heavy_check_mark: | N/A | +| `warning` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/sourceenum.md b/client-sdks/platform/typescript/docs/models/sourceenum.md new file mode 100644 index 000000000..18de672e5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/sourceenum.md @@ -0,0 +1,15 @@ +# SourceEnum + +## Example Usage + +```typescript +import { SourceEnum } from "@alienplatform/platform-api/models"; + +let value: SourceEnum = "dashboard"; +``` + +## Values + +```typescript +"dashboard" | "slack" +``` diff --git a/client-sdks/platform/typescript/docs/models/state.md b/client-sdks/platform/typescript/docs/models/state.md deleted file mode 100644 index fcc9aa55c..000000000 --- a/client-sdks/platform/typescript/docs/models/state.md +++ /dev/null @@ -1,33 +0,0 @@ -# State - -Represents the state of an event - - -## Supported Types - -### `models.EventState` - -```typescript -const value: models.EventState = { - failed: {}, -}; -``` - -### `models.StateNone` - -```typescript -const value: models.StateNone = "none"; -``` - -### `models.StateStarted` - -```typescript -const value: models.StateStarted = "started"; -``` - -### `models.StateSuccess` - -```typescript -const value: models.StateSuccess = "success"; -``` - diff --git a/client-sdks/platform/typescript/docs/models/statenone.md b/client-sdks/platform/typescript/docs/models/statenone.md deleted file mode 100644 index e7e45caf9..000000000 --- a/client-sdks/platform/typescript/docs/models/statenone.md +++ /dev/null @@ -1,15 +0,0 @@ -# StateNone - -## Example Usage - -```typescript -import { StateNone } from "@alienplatform/platform-api/models"; - -let value: StateNone = "none"; -``` - -## Values - -```typescript -"none" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/statestarted.md b/client-sdks/platform/typescript/docs/models/statestarted.md deleted file mode 100644 index a6710e860..000000000 --- a/client-sdks/platform/typescript/docs/models/statestarted.md +++ /dev/null @@ -1,15 +0,0 @@ -# StateStarted - -## Example Usage - -```typescript -import { StateStarted } from "@alienplatform/platform-api/models"; - -let value: StateStarted = "started"; -``` - -## Values - -```typescript -"started" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/statesuccess.md b/client-sdks/platform/typescript/docs/models/statesuccess.md deleted file mode 100644 index 3e7d24302..000000000 --- a/client-sdks/platform/typescript/docs/models/statesuccess.md +++ /dev/null @@ -1,15 +0,0 @@ -# StateSuccess - -## Example Usage - -```typescript -import { StateSuccess } from "@alienplatform/platform-api/models"; - -let value: StateSuccess = "success"; -``` - -## Values - -```typescript -"success" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentconfig.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentconfig.md index d066f47b6..145afb82b 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentconfig.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentconfig.md @@ -34,6 +34,7 @@ let value: SyncAcquireResponseDeploymentConfig = { | `domainMetadata` | *models.SyncAcquireResponseDeploymentDomainMetadataUnion* | :heavy_minus_sign: | N/A | | `environmentVariables` | [models.SyncAcquireResponseDeploymentEnvironmentVariables](../models/syncacquireresponsedeploymentenvironmentvariables.md) | :heavy_check_mark: | Snapshot of environment variables at a point in time | | `externalBindings` | Record | :heavy_minus_sign: | Map from resource ID to external binding.

Validated at runtime: binding type must match resource type. | +| `inputValues` | Record | :heavy_minus_sign: | Deployer-provided stack input values, keyed by input id. A resource
gated with `.enabled(input)` and a Live lifecycle follows these
values; a missing key falls back to the input's declared boolean
default. Suppliers must not place secret-kind input values here:
this map serializes and debug-prints unredacted. | | `labelDomain` | *string* | :heavy_minus_sign: | DNS-style label domain used for Kubernetes resource ownership labels.

Defaults to `alien.dev` when absent. Whitelabeled Operator builds set this
so generated workloads and optional log collectors share the same label
namespace. | | `managementConfig` | *models.SyncAcquireResponseDeploymentManagementConfigUnion* | :heavy_minus_sign: | N/A | | `managerUrl` | *string* | :heavy_minus_sign: | Manager base URL (e.g., "https://manager.alien.dev").

The manager IS the container registry — its `/v2/` endpoint serves as
the OCI Distribution API. Controllers derive the proxy host from this
to configure pull auth (RegistryCredentials, imagePullSecrets).

When None (e.g., `alien dev`), controllers use image URIs as-is. | @@ -42,4 +43,4 @@ let value: SyncAcquireResponseDeploymentConfig = { | `observeAllNamespaces` | *boolean* | :heavy_minus_sign: | When true the observe pass reports raw resources across every namespace
(cluster scope); otherwise it stays within the operator's own namespace.
The label selector, if any, still filters within whichever scope applies.
Ignored by cloud observers. | | `observeLabelSelector` | *string* | :heavy_minus_sign: | Kubernetes label selector that narrows which raw resources the observe
pass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes
everything in the namespace. Ignored by cloud observers. | | `publicEndpoints` | Record> | :heavy_minus_sign: | Public endpoint URLs for exposed resources (optional override).

Use this only when a caller already knows the public URL. Managed public
endpoint flows should prefer `domain_metadata` plus controller-reported
load balancer outputs so DNS, certificate renewal, and route readiness
stay tied to the resource state.

If not set, platforms determine public endpoint URLs from other sources:
- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS
- Local: `http://localhost:{allocated_port}`
- Custom or disabled exposure: no public endpoint URL unless a controller reports one

Outer key: resource ID. Inner key: endpoint name. Value: public URL. | -| `stackSettings` | [models.SyncAcquireResponseDeploymentStackSettings](../models/syncacquireresponsedeploymentstacksettings.md) | :heavy_minus_sign: | User-customizable deployment settings specified at deploy time.

These settings are provided by the customer via CloudFormation parameters,
Terraform attributes, CLI flags, or Helm values. They customize how the
deployment runs and what capabilities are enabled.

**Key distinction**: StackSettings is user-customizable, while ManagementConfig
is platform-derived (from the Manager's ServiceAccount). | \ No newline at end of file +| `stackSettings` | [models.SyncAcquireResponseDeploymentStackSettings](../models/syncacquireresponsedeploymentstacksettings.md) | :heavy_minus_sign: | User-customizable deployment settings specified at deploy time.

These settings are provided by the customer via CloudFormation parameters,
Terraform attributes, CLI flags, or Helm values. They customize how the
deployment runs and what capabilities are enabled.

**Key distinction**: StackSettings is user-customizable, while ManagementConfig
is platform-derived (from the Manager's ServiceAccount). | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentcurrentreleaseresources.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentcurrentreleaseresources.md index c0617126b..a2b64f585 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentcurrentreleaseresources.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentcurrentreleaseresources.md @@ -17,9 +17,10 @@ let value: SyncAcquireResponseDeploymentCurrentReleaseResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncAcquireResponseDeploymentCurrentReleaseConfig](../models/syncacquireresponsedeploymentcurrentreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncAcquireResponseDeploymentCurrentReleaseDependency](../models/syncacquireresponsedeploymentcurrentreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncAcquireResponseDeploymentCurrentReleaseLifecycle](../models/syncacquireresponsedeploymentcurrentreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncAcquireResponseDeploymentCurrentReleaseConfig](../models/syncacquireresponsedeploymentcurrentreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncAcquireResponseDeploymentCurrentReleaseDependency](../models/syncacquireresponsedeploymentcurrentreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncAcquireResponseDeploymentCurrentReleaseLifecycle](../models/syncacquireresponsedeploymentcurrentreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomains1.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomains1.md new file mode 100644 index 000000000..9fc5aae80 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomains1.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentFailureDomains1 = { + spread: 446681, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomains2.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomains2.md new file mode 100644 index 000000000..657757622 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomains2.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentFailureDomains2 = { + spread: 647430, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomainsunion1.md new file mode 100644 index 000000000..a5b654703 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomainsunion1.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentFailureDomainsUnion1 + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentFailureDomains1` + +```typescript +const value: models.SyncAcquireResponseDeploymentFailureDomains1 = { + spread: 446681, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomainsunion2.md new file mode 100644 index 000000000..55d85e009 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentfailuredomainsunion2.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentFailureDomainsUnion2 + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentFailureDomains2` + +```typescript +const value: models.SyncAcquireResponseDeploymentFailureDomains2 = { + spread: 647430, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstack.md new file mode 100644 index 000000000..96c1b0679 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstack.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentPendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStack = { + id: "", + resources: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.SyncAcquireResponseDeploymentPendingPreparedStackInput](../models/syncacquireresponsedeploymentpendingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.SyncAcquireResponseDeploymentPendingPreparedStackPermissions](../models/syncacquireresponsedeploymentpendingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform](../models/syncacquireresponsedeploymentpendingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackconfig.md new file mode 100644 index 000000000..1b2229bc6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..9375afb64 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean](../models/syncacquireresponsedeploymentpendingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..c01bcb78f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber](../models/syncacquireresponsedeploymentpendingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstring.md new file mode 100644 index 000000000..10fa6b4e0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncAcquireResponseDeploymentPendingPreparedStackTypeString](../models/syncacquireresponsedeploymentpendingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..d3e62eb9b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultstringlist.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList = + { + type: "stringList", + value: [ + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList](../models/syncacquireresponsedeploymentpendingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultunion.md new file mode 100644 index 000000000..29eacc66e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdefaultunion.md @@ -0,0 +1,53 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultString` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultString = { + type: "string", + value: "", + }; +``` + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber = { + type: "number", + value: "", + }; +``` + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, + }; +``` + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdependency.md new file mode 100644 index 000000000..25693a031 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackenv.md new file mode 100644 index 000000000..49a7d3b72 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackenv.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextend.md new file mode 100644 index 000000000..82f92e596 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextend.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtend = { + description: "whoa impact toward yawningly till", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms](../models/syncacquireresponsedeploymentpendingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendaw.md new file mode 100644 index 000000000..fc8ae2011 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding](../models/syncacquireresponsedeploymentpendingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect](../models/syncacquireresponsedeploymentpendingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant](../models/syncacquireresponsedeploymentpendingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawbinding.md new file mode 100644 index 000000000..6d1c0c6d0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawbinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource](../models/syncacquireresponsedeploymentpendingpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack](../models/syncacquireresponsedeploymentpendingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawgrant.md new file mode 100644 index 000000000..a295d89b1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawresource.md new file mode 100644 index 000000000..dcc81b0f0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawresource.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawstack.md new file mode 100644 index 000000000..8c3050b78 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendawstack.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazure.md new file mode 100644 index 000000000..c6b09b638 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding](../models/syncacquireresponsedeploymentpendingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant](../models/syncacquireresponsedeploymentpendingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..205018419 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurebinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource](../models/syncacquireresponsedeploymentpendingpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack](../models/syncacquireresponsedeploymentpendingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..df5f46d7d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazuregrant.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazureresource.md new file mode 100644 index 000000000..08608ffd9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazureresource.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurestack.md new file mode 100644 index 000000000..3fb22a95b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionresource.md new file mode 100644 index 000000000..5734d45c9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionresource.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionstack.md new file mode 100644 index 000000000..6ceace475 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendconditionstack.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendeffect.md new file mode 100644 index 000000000..32bae7b42 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendeffect.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect = + "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcp.md new file mode 100644 index 000000000..700f67bba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding](../models/syncacquireresponsedeploymentpendingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant](../models/syncacquireresponsedeploymentpendingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..4280db132 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpbinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource](../models/syncacquireresponsedeploymentpendingpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack](../models/syncacquireresponsedeploymentpendingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..abb14531d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpresource.md new file mode 100644 index 000000000..15235ff12 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpresource.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `condition` | *models.SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..a4ce39dfc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `condition` | *models.SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendplatforms.md new file mode 100644 index 000000000..331316f6f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendplatforms.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAw](../models/syncacquireresponsedeploymentpendingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure](../models/syncacquireresponsedeploymentpendingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp](../models/syncacquireresponsedeploymentpendingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..c5e192116 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendresourceconditionunion.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..925d4264f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendstackconditionunion.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendunion.md new file mode 100644 index 000000000..cffe7c4b4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackExtend` + +```typescript +const value: models.SyncAcquireResponseDeploymentPendingPreparedStackExtend = { + description: "whoa impact toward yawningly till", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackinput.md new file mode 100644 index 000000000..9b6d6754d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackinput.md @@ -0,0 +1,35 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackInput = { + description: + "whoa give passport reflate couch glider someplace bowler slipper openly", + id: "", + kind: "secret", + label: "", + providedBy: [], + required: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `default` | *models.SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.SyncAcquireResponseDeploymentPendingPreparedStackEnv](../models/syncacquireresponsedeploymentpendingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.SyncAcquireResponseDeploymentPendingPreparedStackKind](../models/syncacquireresponsedeploymentpendingpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.SyncAcquireResponseDeploymentPendingPreparedStackPlatform](../models/syncacquireresponsedeploymentpendingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy](../models/syncacquireresponsedeploymentpendingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackkind.md new file mode 100644 index 000000000..01243f2e3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackkind.md @@ -0,0 +1,17 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackKind = "stringList"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacklifecycle.md new file mode 100644 index 000000000..e043f3aac --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacklifecycle.md @@ -0,0 +1,17 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackLifecycle = "live"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement1.md new file mode 100644 index 000000000..b35d7e90c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement1.md @@ -0,0 +1,27 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [ + { + description: "properly with suddenly", + id: "", + platforms: {}, + }, + ], + "key2": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement2.md new file mode 100644 index 000000000..71970a27e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagement2.md @@ -0,0 +1,17 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackManagement2 = { + override: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementenum.md new file mode 100644 index 000000000..4110eeeda --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementenum.md @@ -0,0 +1,16 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum = + "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementunion.md new file mode 100644 index 000000000..26524dc86 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackmanagementunion.md @@ -0,0 +1,42 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackManagement1` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [ + { + description: "properly with suddenly", + id: "", + platforms: {}, + }, + ], + "key2": [], + }, + }; +``` + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackManagement2` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackManagement2 = { + override: {}, + }; +``` + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum = + "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverride.md new file mode 100644 index 000000000..747f2bd75 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverride.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverride = { + description: "past huzzah which er plus or unripe vaguely phew deploy", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideaw.md new file mode 100644 index 000000000..0562b7cf3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..b664b9947 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawbinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..d694b37cc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawgrant.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawresource.md new file mode 100644 index 000000000..4a0966da6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawresource.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource = + { + resources: [ + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..351e878af --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideawstack.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazure.md new file mode 100644 index 000000000..8b7cfd7b4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..d597d9813 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurebinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..fc25c7272 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazuregrant.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..266ac2df4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazureresource.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..7a33c119a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideazurestack.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..a1bb84dcc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionresource.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..b413a1c97 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideconditionstack.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..301d3b7b4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideeffect.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect = + "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcp.md new file mode 100644 index 000000000..8703dd649 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding](../models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant](../models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..95933ee49 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpbinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource](../models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack](../models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..ed4b61b26 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpgrant.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..8540979dc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpresource.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `condition` | *models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..50484b754 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `condition` | *models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..97b26d198 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideplatforms.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure](../models/syncacquireresponsedeploymentpendingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp](../models/syncacquireresponsedeploymentpendingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..4a025a36d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..5d67eb5bb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverridestackconditionunion.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideunion.md new file mode 100644 index 000000000..63936af70 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackoverrideunion.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackOverride` + +```typescript +const value: models.SyncAcquireResponseDeploymentPendingPreparedStackOverride = + { + description: "past huzzah which er plus or unripe vaguely phew deploy", + id: "", + platforms: {}, + }; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackpermissions.md new file mode 100644 index 000000000..7465c5e2b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackpermissions.md @@ -0,0 +1,46 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackPermissions = { + profiles: { + "key": { + "key": [ + { + description: "yowza formamide now recent claw", + id: "", + platforms: {}, + }, + ], + "key1": [ + { + description: "yowza formamide now recent claw", + id: "", + platforms: {}, + }, + ], + }, + "key1": { + "key": [ + { + description: "yowza formamide now recent claw", + id: "", + platforms: {}, + }, + ], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackplatform.md new file mode 100644 index 000000000..d3a856f8d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackplatform.md @@ -0,0 +1,17 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackPlatform = "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofile.md new file mode 100644 index 000000000..12118c42d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofile.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfile = { + description: "polished boo indeed exempt", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms](../models/syncacquireresponsedeploymentpendingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileaw.md new file mode 100644 index 000000000..256fa281c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding](../models/syncacquireresponsedeploymentpendingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect](../models/syncacquireresponsedeploymentpendingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant](../models/syncacquireresponsedeploymentpendingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..74fbb9591 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawbinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource](../models/syncacquireresponsedeploymentpendingpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack](../models/syncacquireresponsedeploymentpendingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..5bdc5e0bf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawresource.md new file mode 100644 index 000000000..de38799da --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawresource.md @@ -0,0 +1,25 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource = + { + resources: [ + "", + "", + "", + ], + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawstack.md new file mode 100644 index 000000000..7b17a9826 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileawstack.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazure.md new file mode 100644 index 000000000..e49f6e49d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding](../models/syncacquireresponsedeploymentpendingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant](../models/syncacquireresponsedeploymentpendingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..8fb33fa91 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurebinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource](../models/syncacquireresponsedeploymentpendingpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack](../models/syncacquireresponsedeploymentpendingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..4f7c9653f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazuregrant.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazureresource.md new file mode 100644 index 000000000..b9c351d16 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazureresource.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource = { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..68999a90a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileazurestack.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..60c680c2f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionresource.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..12557323b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileconditionstack.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack = { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileeffect.md new file mode 100644 index 000000000..bb15c4542 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileeffect.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect = + "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcp.md new file mode 100644 index 000000000..b2b24b6db --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding](../models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant](../models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..2c0f44c30 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpbinding.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource](../models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack](../models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..9028c04a8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpgrant.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..d9b6d4cd5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpresource.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource = + { + scope: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `condition` | *models.SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..434f5e937 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `condition` | *models.SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..69237880b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileplatforms.md @@ -0,0 +1,20 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms = + {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAw](../models/syncacquireresponsedeploymentpendingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure](../models/syncacquireresponsedeploymentpendingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp](../models/syncacquireresponsedeploymentpendingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..92a5738ea --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..c28d2e5ab --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofilestackconditionunion.md @@ -0,0 +1,21 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileunion.md new file mode 100644 index 000000000..00054bdac --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackProfile` + +```typescript +const value: models.SyncAcquireResponseDeploymentPendingPreparedStackProfile = { + description: "polished boo indeed exempt", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprovidedby.md new file mode 100644 index 000000000..434e0fc80 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackprovidedby.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy = + "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackresources.md new file mode 100644 index 000000000..e8a261dba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackresources.md @@ -0,0 +1,26 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackResources + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncAcquireResponseDeploymentPendingPreparedStackConfig](../models/syncacquireresponsedeploymentpendingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncAcquireResponseDeploymentPendingPreparedStackDependency](../models/syncacquireresponsedeploymentpendingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncAcquireResponseDeploymentPendingPreparedStackLifecycle](../models/syncacquireresponsedeploymentpendingpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..25a72125a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacksupportedplatform.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform = + "aws"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeboolean.md new file mode 100644 index 000000000..05c09d48f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeboolean.md @@ -0,0 +1,16 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean = + "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..049b6ef17 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeenvenum.md @@ -0,0 +1,18 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum = + "secret"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypenumber.md new file mode 100644 index 000000000..118bdc800 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypenumber.md @@ -0,0 +1,16 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber = + "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestring.md new file mode 100644 index 000000000..69160725b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestring.md @@ -0,0 +1,16 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackTypeString + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackTypeString = + "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestringlist.md new file mode 100644 index 000000000..5dbf537f6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypestringlist.md @@ -0,0 +1,16 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList = + "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeunion.md new file mode 100644 index 000000000..655e1b9e4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstacktypeunion.md @@ -0,0 +1,17 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum = "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackunion.md new file mode 100644 index 000000000..aada1f68e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackunion.md @@ -0,0 +1,19 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStack` + +```typescript +const value: models.SyncAcquireResponseDeploymentPendingPreparedStack = { + id: "", + resources: {}, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidation.md new file mode 100644 index 000000000..5f9655f5a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentPendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentPendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidationunion.md new file mode 100644 index 000000000..b90ef2c0c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpendingpreparedstackvalidationunion.md @@ -0,0 +1,17 @@ +# SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentPendingPreparedStackValidation` + +```typescript +const value: + models.SyncAcquireResponseDeploymentPendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsautoscale.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsautoscale.md index 7e2e5214d..d5b5952a2 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsautoscale.md @@ -14,9 +14,10 @@ let value: SyncAcquireResponseDeploymentPoolsAutoscale = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `max` | *number* | :heavy_check_mark: | Maximum machine count. | -| `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `failureDomains` | *models.SyncAcquireResponseDeploymentFailureDomainsUnion2* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `max` | *number* | :heavy_check_mark: | Maximum machine count. | +| `min` | *number* | :heavy_check_mark: | Minimum machine count. | +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsfixed.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsfixed.md index dcbf4ac15..15b139217 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpoolsfixed.md @@ -13,8 +13,9 @@ let value: SyncAcquireResponseDeploymentPoolsFixed = { ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | -| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `failureDomains` | *models.SyncAcquireResponseDeploymentFailureDomainsUnion1* | :heavy_minus_sign: | N/A | +| `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | +| `machines` | *number* | :heavy_check_mark: | Number of machines to run. | +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpreparedstackresources.md index 68a040394..2673c4bcf 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpreparedstackresources.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentpreparedstackresources.md @@ -22,9 +22,10 @@ let value: SyncAcquireResponseDeploymentPreparedStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncAcquireResponseDeploymentPreparedStackConfig](../models/syncacquireresponsedeploymentpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncAcquireResponseDeploymentPreparedStackDependency](../models/syncacquireresponsedeploymentpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncAcquireResponseDeploymentPreparedStackLifecycle](../models/syncacquireresponsedeploymentpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncAcquireResponseDeploymentPreparedStackConfig](../models/syncacquireresponsedeploymentpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncAcquireResponseDeploymentPreparedStackDependency](../models/syncacquireresponsedeploymentpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncAcquireResponseDeploymentPreparedStackLifecycle](../models/syncacquireresponsedeploymentpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentruntimemetadata.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentruntimemetadata.md index b010fd0d7..2e3053e71 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentruntimemetadata.md @@ -18,5 +18,7 @@ let value: SyncAcquireResponseDeploymentRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.SyncAcquireResponseDeploymentPendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.SyncAcquireResponseDeploymentPreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentsetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentsetupupdateauthorization.md new file mode 100644 index 000000000..20b726f62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentsetupupdateauthorization.md @@ -0,0 +1,31 @@ +# SyncAcquireResponseDeploymentSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { SyncAcquireResponseDeploymentSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: SyncAcquireResponseDeploymentSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 21546, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentsetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentsetupupdateauthorizationunion.md new file mode 100644 index 000000000..b465d4073 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymentsetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.SyncAcquireResponseDeploymentSetupUpdateAuthorization` + +```typescript +const value: models.SyncAcquireResponseDeploymentSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 21546, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymenttargetreleaseresources.md b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymenttargetreleaseresources.md index 81c49f554..8ce578187 100644 --- a/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymenttargetreleaseresources.md +++ b/client-sdks/platform/typescript/docs/models/syncacquireresponsedeploymenttargetreleaseresources.md @@ -17,9 +17,10 @@ let value: SyncAcquireResponseDeploymentTargetReleaseResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncAcquireResponseDeploymentTargetReleaseConfig](../models/syncacquireresponsedeploymenttargetreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncAcquireResponseDeploymentTargetReleaseDependency](../models/syncacquireresponsedeploymenttargetreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncAcquireResponseDeploymentTargetReleaseLifecycle](../models/syncacquireresponsedeploymenttargetreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncAcquireResponseDeploymentTargetReleaseConfig](../models/syncacquireresponsedeploymenttargetreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncAcquireResponseDeploymentTargetReleaseDependency](../models/syncacquireresponsedeploymenttargetreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncAcquireResponseDeploymentTargetReleaseLifecycle](../models/syncacquireresponsedeploymenttargetreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultboolean.md b/client-sdks/platform/typescript/docs/models/synclistresponsedefaultboolean.md deleted file mode 100644 index b2a0889bd..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultboolean.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseDefaultBoolean - -## Example Usage - -```typescript -import { SyncListResponseDefaultBoolean } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseDefaultBoolean = { - type: "boolean", - value: false, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `type` | [models.SyncListResponseTypeBoolean](../models/synclistresponsetypeboolean.md) | :heavy_check_mark: | N/A | -| `value` | *boolean* | :heavy_check_mark: | Boolean default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultnumber.md b/client-sdks/platform/typescript/docs/models/synclistresponsedefaultnumber.md deleted file mode 100644 index d6dd25184..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultnumber.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseDefaultNumber - -## Example Usage - -```typescript -import { SyncListResponseDefaultNumber } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseDefaultNumber = { - type: "number", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `type` | [models.SyncListResponseTypeNumber](../models/synclistresponsetypenumber.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | Number default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultstring.md b/client-sdks/platform/typescript/docs/models/synclistresponsedefaultstring.md deleted file mode 100644 index 25b1dc755..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultstring.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseDefaultString - -## Example Usage - -```typescript -import { SyncListResponseDefaultString } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseDefaultString = { - type: "string", - value: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `type` | [models.SyncListResponseTypeString](../models/synclistresponsetypestring.md) | :heavy_check_mark: | N/A | -| `value` | *string* | :heavy_check_mark: | String default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultstringlist.md b/client-sdks/platform/typescript/docs/models/synclistresponsedefaultstringlist.md deleted file mode 100644 index 951d4a07a..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultstringlist.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseDefaultStringList - -## Example Usage - -```typescript -import { SyncListResponseDefaultStringList } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseDefaultStringList = { - type: "stringList", - value: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `type` | [models.SyncListResponseTypeStringList](../models/synclistresponsetypestringlist.md) | :heavy_check_mark: | N/A | -| `value` | *string*[] | :heavy_check_mark: | String list default. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsedefaultunion.md deleted file mode 100644 index 0047656f4..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsedefaultunion.md +++ /dev/null @@ -1,49 +0,0 @@ -# SyncListResponseDefaultUnion - - -## Supported Types - -### `models.SyncListResponseDefaultString` - -```typescript -const value: models.SyncListResponseDefaultString = { - type: "string", - value: "", -}; -``` - -### `models.SyncListResponseDefaultNumber` - -```typescript -const value: models.SyncListResponseDefaultNumber = { - type: "number", - value: "", -}; -``` - -### `models.SyncListResponseDefaultBoolean` - -```typescript -const value: models.SyncListResponseDefaultBoolean = { - type: "boolean", - value: false, -}; -``` - -### `models.SyncListResponseDefaultStringList` - -```typescript -const value: models.SyncListResponseDefaultStringList = { - type: "stringList", - value: [ - "", - ], -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseenv.md b/client-sdks/platform/typescript/docs/models/synclistresponseenv.md deleted file mode 100644 index f0e44e69e..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseenv.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseEnv - -How a resolved stack input is injected into runtime environment variables. - -## Example Usage - -```typescript -import { SyncListResponseEnv } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseEnv = { - name: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| `name` | *string* | :heavy_check_mark: | Environment variable name. | -| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | -| `type` | *models.SyncListResponseTypeUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextend.md b/client-sdks/platform/typescript/docs/models/synclistresponseextend.md deleted file mode 100644 index 743a86a47..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextend.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseExtend - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { SyncListResponseExtend } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtend = { - description: "probable inasmuch cork", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.SyncListResponseExtendPlatforms](../models/synclistresponseextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendaw.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendaw.md deleted file mode 100644 index 3f7936deb..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# SyncListResponseExtendAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseExtendAw } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `binding` | [models.SyncListResponseExtendAwBinding](../models/synclistresponseextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.SyncListResponseExtendEffect](../models/synclistresponseextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.SyncListResponseExtendAwGrant](../models/synclistresponseextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendawbinding.md deleted file mode 100644 index 51ea4792d..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseExtendAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseExtendAwBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `resource` | [models.SyncListResponseExtendAwResource](../models/synclistresponseextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.SyncListResponseExtendAwStack](../models/synclistresponseextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendawgrant.md deleted file mode 100644 index 2bb849031..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseExtendAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseExtendAwGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendawresource.md deleted file mode 100644 index b2be0d1fb..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendawresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseExtendAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseExtendAwResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAwResource = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendawstack.md deleted file mode 100644 index d3b13a9f2..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendawstack.md +++ /dev/null @@ -1,22 +0,0 @@ -# SyncListResponseExtendAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseExtendAwStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAwStack = { - resources: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendazure.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendazure.md deleted file mode 100644 index af9ef5022..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseExtendAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseExtendAzure } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `binding` | [models.SyncListResponseExtendAzureBinding](../models/synclistresponseextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.SyncListResponseExtendAzureGrant](../models/synclistresponseextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendazurebinding.md deleted file mode 100644 index d29956fb2..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseExtendAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseExtendAzureBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `resource` | [models.SyncListResponseExtendAzureResource](../models/synclistresponseextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.SyncListResponseExtendAzureStack](../models/synclistresponseextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendazuregrant.md deleted file mode 100644 index e1826ffb8..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseExtendAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseExtendAzureGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendazureresource.md deleted file mode 100644 index 2a7d635e4..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseExtendAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseExtendAzureResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendazurestack.md deleted file mode 100644 index 8e95ca2d2..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseExtendAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseExtendAzureStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendconditionresource.md deleted file mode 100644 index b2506c3f6..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseExtendConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { SyncListResponseExtendConditionResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendconditionstack.md deleted file mode 100644 index bcec1de17..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseExtendConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { SyncListResponseExtendConditionStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendeffect.md deleted file mode 100644 index 8d02d1aaf..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseExtendEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { SyncListResponseExtendEffect } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendEffect = "Allow"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcp.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendgcp.md deleted file mode 100644 index 91b9a24ed..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseExtendGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseExtendGcp } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `binding` | [models.SyncListResponseExtendGcpBinding](../models/synclistresponseextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.SyncListResponseExtendGcpGrant](../models/synclistresponseextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpbinding.md deleted file mode 100644 index 4cca25430..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseExtendGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseExtendGcpBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `resource` | [models.SyncListResponseExtendGcpResource](../models/synclistresponseextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.SyncListResponseExtendGcpStack](../models/synclistresponseextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpgrant.md deleted file mode 100644 index 3cf7795c7..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseExtendGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseExtendGcpGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpresource.md deleted file mode 100644 index 2145e1ee8..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseExtendGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseExtendGcpResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | -| `condition` | *models.SyncListResponseExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpstack.md deleted file mode 100644 index 30d72bc2b..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendgcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseExtendGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseExtendGcpStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | *models.SyncListResponseExtendStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendplatforms.md deleted file mode 100644 index 71b73ebe5..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseExtendPlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { SyncListResponseExtendPlatforms } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseExtendPlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `aws` | [models.SyncListResponseExtendAw](../models/synclistresponseextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.SyncListResponseExtendAzure](../models/synclistresponseextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.SyncListResponseExtendGcp](../models/synclistresponseextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendresourceconditionunion.md deleted file mode 100644 index 4ffbc3802..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseExtendResourceConditionUnion - - -## Supported Types - -### `models.SyncListResponseExtendConditionResource` - -```typescript -const value: models.SyncListResponseExtendConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendstackconditionunion.md deleted file mode 100644 index ce110ef1b..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendstackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseExtendStackConditionUnion - - -## Supported Types - -### `models.SyncListResponseExtendConditionStack` - -```typescript -const value: models.SyncListResponseExtendConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseextendunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseextendunion.md deleted file mode 100644 index 4cf0f217d..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseextendunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseExtendUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.SyncListResponseExtend` - -```typescript -const value: models.SyncListResponseExtend = { - description: "probable inasmuch cork", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomains1.md b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomains1.md new file mode 100644 index 000000000..b94a54d21 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomains1.md @@ -0,0 +1,20 @@ +# SyncListResponseFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { SyncListResponseFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: SyncListResponseFailureDomains1 = { + spread: 124748, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomains2.md b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomains2.md new file mode 100644 index 000000000..dac34524b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomains2.md @@ -0,0 +1,20 @@ +# SyncListResponseFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { SyncListResponseFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: SyncListResponseFailureDomains2 = { + spread: 625371, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomainsunion1.md new file mode 100644 index 000000000..a8b741d46 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomainsunion1.md @@ -0,0 +1,18 @@ +# SyncListResponseFailureDomainsUnion1 + + +## Supported Types + +### `models.SyncListResponseFailureDomains1` + +```typescript +const value: models.SyncListResponseFailureDomains1 = { + spread: 124748, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomainsunion2.md new file mode 100644 index 000000000..9f44a44ed --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsefailuredomainsunion2.md @@ -0,0 +1,18 @@ +# SyncListResponseFailureDomainsUnion2 + + +## Supported Types + +### `models.SyncListResponseFailureDomains2` + +```typescript +const value: models.SyncListResponseFailureDomains2 = { + spread: 625371, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseinput.md b/client-sdks/platform/typescript/docs/models/synclistresponseinput.md deleted file mode 100644 index 4eb827ea6..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseinput.md +++ /dev/null @@ -1,36 +0,0 @@ -# SyncListResponseInput - -Stack input definition serialized into a release stack. - -## Example Usage - -```typescript -import { SyncListResponseInput } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseInput = { - description: "draw neatly round modulo sensitize", - id: "", - kind: "integer", - label: "", - providedBy: [ - "deployer", - ], - required: false, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `default` | *models.SyncListResponseDefaultUnion* | :heavy_minus_sign: | N/A | -| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | -| `env` | [models.SyncListResponseEnv](../models/synclistresponseenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | -| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | -| `kind` | [models.SyncListResponseKind](../models/synclistresponsekind.md) | :heavy_check_mark: | Primitive stack input kind. | -| `label` | *string* | :heavy_check_mark: | Human-facing field label. | -| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | -| `platforms` | [models.SyncListResponsePreparedStackPlatform](../models/synclistresponsepreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | -| `providedBy` | [models.SyncListResponseProvidedBy](../models/synclistresponseprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | -| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | -| `validation` | *models.SyncListResponseValidationUnion* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsekind.md b/client-sdks/platform/typescript/docs/models/synclistresponsekind.md deleted file mode 100644 index 69657de70..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsekind.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseKind - -Primitive stack input kind. - -## Example Usage - -```typescript -import { SyncListResponseKind } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseKind = "enum"; -``` - -## Values - -```typescript -"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsemanagement1.md b/client-sdks/platform/typescript/docs/models/synclistresponsemanagement1.md deleted file mode 100644 index 0c9b0ed5f..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsemanagement1.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseManagement1 - -## Example Usage - -```typescript -import { SyncListResponseManagement1 } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseManagement1 = { - extend: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsemanagement2.md b/client-sdks/platform/typescript/docs/models/synclistresponsemanagement2.md deleted file mode 100644 index 4c1f3e190..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsemanagement2.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseManagement2 - -## Example Usage - -```typescript -import { SyncListResponseManagement2 } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseManagement2 = { - override: { - "key": [], - "key1": [], - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsemanagementenum.md b/client-sdks/platform/typescript/docs/models/synclistresponsemanagementenum.md deleted file mode 100644 index 8f3de0fa0..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsemanagementenum.md +++ /dev/null @@ -1,15 +0,0 @@ -# SyncListResponseManagementEnum - -## Example Usage - -```typescript -import { SyncListResponseManagementEnum } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseManagementEnum = "auto"; -``` - -## Values - -```typescript -"auto" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsemanagementunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsemanagementunion.md deleted file mode 100644 index 580b016ea..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsemanagementunion.md +++ /dev/null @@ -1,32 +0,0 @@ -# SyncListResponseManagementUnion - -Management permissions configuration for stack management access - - -## Supported Types - -### `models.SyncListResponseManagement1` - -```typescript -const value: models.SyncListResponseManagement1 = { - extend: {}, -}; -``` - -### `models.SyncListResponseManagement2` - -```typescript -const value: models.SyncListResponseManagement2 = { - override: { - "key": [], - "key1": [], - }, -}; -``` - -### `models.SyncListResponseManagementEnum` - -```typescript -const value: models.SyncListResponseManagementEnum = "auto"; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverride.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverride.md deleted file mode 100644 index bdc4c6734..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverride.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseOverride - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { SyncListResponseOverride } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverride = { - description: "singe excepting censor overcooked gee youthfully um including", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.SyncListResponseOverridePlatforms](../models/synclistresponseoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideaw.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideaw.md deleted file mode 100644 index 0f48bc470..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# SyncListResponseOverrideAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseOverrideAw } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `binding` | [models.SyncListResponseOverrideAwBinding](../models/synclistresponseoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.SyncListResponseOverrideEffect](../models/synclistresponseoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.SyncListResponseOverrideAwGrant](../models/synclistresponseoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawbinding.md deleted file mode 100644 index 6211e89c5..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseOverrideAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseOverrideAwBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `resource` | [models.SyncListResponseOverrideAwResource](../models/synclistresponseoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.SyncListResponseOverrideAwStack](../models/synclistresponseoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawgrant.md deleted file mode 100644 index ddffe3050..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseOverrideAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseOverrideAwGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawresource.md deleted file mode 100644 index 006538549..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawresource.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseOverrideAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseOverrideAwResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAwResource = { - resources: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawstack.md deleted file mode 100644 index 420e60090..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideawstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseOverrideAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseOverrideAwStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAwStack = { - resources: [], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazure.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazure.md deleted file mode 100644 index 2eff38ca8..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseOverrideAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseOverrideAzure } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `binding` | [models.SyncListResponseOverrideAzureBinding](../models/synclistresponseoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.SyncListResponseOverrideAzureGrant](../models/synclistresponseoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazurebinding.md deleted file mode 100644 index 3cb01c11b..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseOverrideAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseOverrideAzureBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `resource` | [models.SyncListResponseOverrideAzureResource](../models/synclistresponseoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.SyncListResponseOverrideAzureStack](../models/synclistresponseoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazuregrant.md deleted file mode 100644 index c14ac3a83..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseOverrideAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseOverrideAzureGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazureresource.md deleted file mode 100644 index 6d01fc344..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseOverrideAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseOverrideAzureResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazurestack.md deleted file mode 100644 index 30fc35b69..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseOverrideAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseOverrideAzureStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideconditionresource.md deleted file mode 100644 index a511107ca..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseOverrideConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { SyncListResponseOverrideConditionResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideconditionstack.md deleted file mode 100644 index aaa5905d1..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseOverrideConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { SyncListResponseOverrideConditionStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideeffect.md deleted file mode 100644 index 0dbcfb1e3..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseOverrideEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { SyncListResponseOverrideEffect } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideEffect = "Allow"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcp.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcp.md deleted file mode 100644 index b7123593a..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseOverrideGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseOverrideGcp } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `binding` | [models.SyncListResponseOverrideGcpBinding](../models/synclistresponseoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.SyncListResponseOverrideGcpGrant](../models/synclistresponseoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpbinding.md deleted file mode 100644 index 4da417185..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseOverrideGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseOverrideGcpBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `resource` | [models.SyncListResponseOverrideGcpResource](../models/synclistresponseoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.SyncListResponseOverrideGcpStack](../models/synclistresponseoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpgrant.md deleted file mode 100644 index 35780b497..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseOverrideGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseOverrideGcpGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpresource.md deleted file mode 100644 index 41a7e7ab2..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseOverrideGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseOverrideGcpResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `condition` | *models.SyncListResponseOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpstack.md deleted file mode 100644 index 2a4a5f5db..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverridegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseOverrideGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseOverrideGcpStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverrideGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | -| `condition` | *models.SyncListResponseOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideplatforms.md deleted file mode 100644 index 4012fdb16..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseOverridePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { SyncListResponseOverridePlatforms } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseOverridePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `aws` | [models.SyncListResponseOverrideAw](../models/synclistresponseoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.SyncListResponseOverrideAzure](../models/synclistresponseoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.SyncListResponseOverrideGcp](../models/synclistresponseoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideresourceconditionunion.md deleted file mode 100644 index d639b1bd5..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseOverrideResourceConditionUnion - - -## Supported Types - -### `models.SyncListResponseOverrideConditionResource` - -```typescript -const value: models.SyncListResponseOverrideConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverridestackconditionunion.md deleted file mode 100644 index b79a2052b..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverridestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseOverrideStackConditionUnion - - -## Supported Types - -### `models.SyncListResponseOverrideConditionStack` - -```typescript -const value: models.SyncListResponseOverrideConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseoverrideunion.md deleted file mode 100644 index 3073ddc9a..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseoverrideunion.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseOverrideUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.SyncListResponseOverride` - -```typescript -const value: models.SyncListResponseOverride = { - description: "singe excepting censor overcooked gee youthfully um including", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstack.md new file mode 100644 index 000000000..fce9fd126 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstack.md @@ -0,0 +1,38 @@ +# SyncListResponsePendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [ + { + id: "", + type: "", + }, + ], + lifecycle: "frozen", + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.SyncListResponsePendingPreparedStackInput](../models/synclistresponsependingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.SyncListResponsePendingPreparedStackPermissions](../models/synclistresponsependingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.SyncListResponsePendingPreparedStackSupportedPlatform](../models/synclistresponsependingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackconfig.md new file mode 100644 index 000000000..deb3fb415 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# SyncListResponsePendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..5c11548ae --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncListResponsePendingPreparedStackTypeBoolean](../models/synclistresponsependingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..cba5b093b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncListResponsePendingPreparedStackTypeNumber](../models/synclistresponsependingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultstring.md new file mode 100644 index 000000000..966b6fd2f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncListResponsePendingPreparedStackTypeString](../models/synclistresponsependingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..714a4eee9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultstringlist.md @@ -0,0 +1,22 @@ +# SyncListResponsePendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncListResponsePendingPreparedStackTypeStringList](../models/synclistresponsependingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultunion.md new file mode 100644 index 000000000..efa9b9fe6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdefaultunion.md @@ -0,0 +1,49 @@ +# SyncListResponsePendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackDefaultString` + +```typescript +const value: models.SyncListResponsePendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.SyncListResponsePendingPreparedStackDefaultNumber` + +```typescript +const value: models.SyncListResponsePendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.SyncListResponsePendingPreparedStackDefaultBoolean` + +```typescript +const value: models.SyncListResponsePendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +### `models.SyncListResponsePendingPreparedStackDefaultStringList` + +```typescript +const value: models.SyncListResponsePendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdependency.md new file mode 100644 index 000000000..c7fcb8b07 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackenv.md new file mode 100644 index 000000000..ceb7948a8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackenv.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.SyncListResponsePendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextend.md new file mode 100644 index 000000000..b8d4b0d55 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextend.md @@ -0,0 +1,24 @@ +# SyncListResponsePendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtend = { + description: + "since miskey flimsy near ambitious pish though ignite accurate tooth", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncListResponsePendingPreparedStackExtendPlatforms](../models/synclistresponsependingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendaw.md new file mode 100644 index 000000000..0ffb3de52 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# SyncListResponsePendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncListResponsePendingPreparedStackExtendAwBinding](../models/synclistresponsependingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncListResponsePendingPreparedStackExtendEffect](../models/synclistresponsependingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncListResponsePendingPreparedStackExtendAwGrant](../models/synclistresponsependingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawbinding.md new file mode 100644 index 000000000..276239847 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePendingPreparedStackExtendAwResource](../models/synclistresponsependingpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackExtendAwStack](../models/synclistresponsependingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawgrant.md new file mode 100644 index 000000000..4ab151af6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawresource.md new file mode 100644 index 000000000..20fd6cde5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawresource.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawstack.md new file mode 100644 index 000000000..b30b80ea6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendawstack.md @@ -0,0 +1,22 @@ +# SyncListResponsePendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazure.md new file mode 100644 index 000000000..cf1055efa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncListResponsePendingPreparedStackExtendAzureBinding](../models/synclistresponsependingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePendingPreparedStackExtendAzureGrant](../models/synclistresponsependingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..8380746c4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePendingPreparedStackExtendAzureResource](../models/synclistresponsependingpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackExtendAzureStack](../models/synclistresponsependingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..17ce319ee --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazureresource.md new file mode 100644 index 000000000..d060db94b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazurestack.md new file mode 100644 index 000000000..98458046d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendconditionresource.md new file mode 100644 index 000000000..aa19d5511 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendconditionresource.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendconditionstack.md new file mode 100644 index 000000000..ed2636b62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendeffect.md new file mode 100644 index 000000000..2a24194ad --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcp.md new file mode 100644 index 000000000..4d3cc4716 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePendingPreparedStackExtendGcpBinding](../models/synclistresponsependingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePendingPreparedStackExtendGcpGrant](../models/synclistresponsependingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..593b4a3bd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePendingPreparedStackExtendGcpResource](../models/synclistresponsependingpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackExtendGcpStack](../models/synclistresponsependingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..84dfb7d41 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpresource.md new file mode 100644 index 000000000..e840c596b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePendingPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..551afcd20 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePendingPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendplatforms.md new file mode 100644 index 000000000..603f1b7c0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.SyncListResponsePendingPreparedStackExtendAw](../models/synclistresponsependingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncListResponsePendingPreparedStackExtendAzure](../models/synclistresponsependingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncListResponsePendingPreparedStackExtendGcp](../models/synclistresponsependingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..50d4ecb58 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendresourceconditionunion.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackExtendConditionResource` + +```typescript +const value: + models.SyncListResponsePendingPreparedStackExtendConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..023c34e90 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendstackconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackExtendConditionStack` + +```typescript +const value: models.SyncListResponsePendingPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendunion.md new file mode 100644 index 000000000..765b2b5e6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackextendunion.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackExtend` + +```typescript +const value: models.SyncListResponsePendingPreparedStackExtend = { + description: + "since miskey flimsy near ambitious pish though ignite accurate tooth", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackinput.md new file mode 100644 index 000000000..b8353b7df --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackinput.md @@ -0,0 +1,34 @@ +# SyncListResponsePendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackInput = { + description: "and ack twine absent plus", + id: "", + kind: "enum", + label: "", + providedBy: [], + required: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `default` | *models.SyncListResponsePendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.SyncListResponsePendingPreparedStackEnv](../models/synclistresponsependingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.SyncListResponsePendingPreparedStackKind](../models/synclistresponsependingpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.SyncListResponsePendingPreparedStackPlatform](../models/synclistresponsependingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.SyncListResponsePendingPreparedStackProvidedBy](../models/synclistresponsependingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.SyncListResponsePendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackkind.md new file mode 100644 index 000000000..377413d23 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackkind.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackKind = "secret"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacklifecycle.md new file mode 100644 index 000000000..ea31c1779 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacklifecycle.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackLifecycle = "live"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagement1.md new file mode 100644 index 000000000..4c5399bb2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagement1.md @@ -0,0 +1,35 @@ +# SyncListResponsePendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackManagement1 = { + extend: { + "key": [ + { + description: "alongside however generously ick teammate for", + id: "", + platforms: {}, + }, + ], + "key1": [ + "", + ], + "key2": [ + { + description: "alongside however generously ick teammate for", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagement2.md new file mode 100644 index 000000000..44d11e57b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagement2.md @@ -0,0 +1,22 @@ +# SyncListResponsePendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackManagement2 = { + override: { + "key": [], + "key1": [ + "", + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagementenum.md new file mode 100644 index 000000000..271fdcdc4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# SyncListResponsePendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagementunion.md new file mode 100644 index 000000000..5da377da5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackmanagementunion.md @@ -0,0 +1,51 @@ +# SyncListResponsePendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackManagement1` + +```typescript +const value: models.SyncListResponsePendingPreparedStackManagement1 = { + extend: { + "key": [ + { + description: "alongside however generously ick teammate for", + id: "", + platforms: {}, + }, + ], + "key1": [ + "", + ], + "key2": [ + { + description: "alongside however generously ick teammate for", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +### `models.SyncListResponsePendingPreparedStackManagement2` + +```typescript +const value: models.SyncListResponsePendingPreparedStackManagement2 = { + override: { + "key": [], + "key1": [ + "", + ], + }, +}; +``` + +### `models.SyncListResponsePendingPreparedStackManagementEnum` + +```typescript +const value: models.SyncListResponsePendingPreparedStackManagementEnum = "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverride.md new file mode 100644 index 000000000..5669582a8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverride.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverride = { + description: "as ack duh", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncListResponsePendingPreparedStackOverridePlatforms](../models/synclistresponsependingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideaw.md new file mode 100644 index 000000000..930784f5f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# SyncListResponsePendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePendingPreparedStackOverrideAwBinding](../models/synclistresponsependingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncListResponsePendingPreparedStackOverrideEffect](../models/synclistresponsependingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncListResponsePendingPreparedStackOverrideAwGrant](../models/synclistresponsependingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..09d5e388b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncListResponsePendingPreparedStackOverrideAwResource](../models/synclistresponsependingpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackOverrideAwStack](../models/synclistresponsependingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..d70d7265c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawresource.md new file mode 100644 index 000000000..b97c19cbd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawresource.md @@ -0,0 +1,24 @@ +# SyncListResponsePendingPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..b77bd229a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideawstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazure.md new file mode 100644 index 000000000..40725bd5d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePendingPreparedStackOverrideAzureBinding](../models/synclistresponsependingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePendingPreparedStackOverrideAzureGrant](../models/synclistresponsependingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..a87bb2b99 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncListResponsePendingPreparedStackOverrideAzureResource](../models/synclistresponsependingpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackOverrideAzureStack](../models/synclistresponsependingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..31d1a4c43 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..7909a7e93 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..27665425d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..7f3ab46fc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideconditionresource.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..5856c8b01 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideconditionstack.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..e2bc0a77a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcp.md new file mode 100644 index 000000000..d0a017188 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncListResponsePendingPreparedStackOverrideGcpBinding](../models/synclistresponsependingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePendingPreparedStackOverrideGcpGrant](../models/synclistresponsependingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..754538439 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePendingPreparedStackOverrideGcpResource](../models/synclistresponsependingpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackOverrideGcpStack](../models/synclistresponsependingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..f91923034 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..c466d7d59 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePendingPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..98178cd1c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `condition` | *models.SyncListResponsePendingPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..b0583aa3b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncListResponsePendingPreparedStackOverrideAw](../models/synclistresponsependingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncListResponsePendingPreparedStackOverrideAzure](../models/synclistresponsependingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncListResponsePendingPreparedStackOverrideGcp](../models/synclistresponsependingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..6114cbcfb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackOverrideConditionResource` + +```typescript +const value: + models.SyncListResponsePendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..376335683 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverridestackconditionunion.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackOverrideConditionStack` + +```typescript +const value: models.SyncListResponsePendingPreparedStackOverrideConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideunion.md new file mode 100644 index 000000000..654f45db0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackoverrideunion.md @@ -0,0 +1,22 @@ +# SyncListResponsePendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackOverride` + +```typescript +const value: models.SyncListResponsePendingPreparedStackOverride = { + description: "as ack duh", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackpermissions.md new file mode 100644 index 000000000..f80697f40 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackpermissions.md @@ -0,0 +1,25 @@ +# SyncListResponsePendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackPermissions = { + profiles: { + "key": { + "key": [], + }, + "key1": {}, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.SyncListResponsePendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackplatform.md new file mode 100644 index 000000000..efecfaa45 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackplatform.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackPlatform = "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofile.md new file mode 100644 index 000000000..115f4319f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofile.md @@ -0,0 +1,24 @@ +# SyncListResponsePendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfile = { + description: + "whereas spectacles er late seldom absentmindedly experienced where", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncListResponsePendingPreparedStackProfilePlatforms](../models/synclistresponsependingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileaw.md new file mode 100644 index 000000000..216357a7b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# SyncListResponsePendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePendingPreparedStackProfileAwBinding](../models/synclistresponsependingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncListResponsePendingPreparedStackProfileEffect](../models/synclistresponsependingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncListResponsePendingPreparedStackProfileAwGrant](../models/synclistresponsependingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..18ff5a838 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePendingPreparedStackProfileAwResource](../models/synclistresponsependingpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackProfileAwStack](../models/synclistresponsependingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..dd45f20a3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawresource.md new file mode 100644 index 000000000..f319c86aa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawresource.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawstack.md new file mode 100644 index 000000000..dce42cd06 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileawstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazure.md new file mode 100644 index 000000000..110d8df8f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePendingPreparedStackProfileAzureBinding](../models/synclistresponsependingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePendingPreparedStackProfileAzureGrant](../models/synclistresponsependingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..bdebb40be --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePendingPreparedStackProfileAzureResource](../models/synclistresponsependingpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackProfileAzureStack](../models/synclistresponsependingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..961e9b00d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazureresource.md new file mode 100644 index 000000000..6d1fadd34 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..32268f938 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..200cbf999 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileconditionresource.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..ad11209c8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileeffect.md new file mode 100644 index 000000000..1e750f506 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcp.md new file mode 100644 index 000000000..924dfd727 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePendingPreparedStackProfileGcpBinding](../models/synclistresponsependingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePendingPreparedStackProfileGcpGrant](../models/synclistresponsependingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..da31f0b82 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncListResponsePendingPreparedStackProfileGcpResource](../models/synclistresponsependingpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncListResponsePendingPreparedStackProfileGcpStack](../models/synclistresponsependingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..be0ca8d10 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..a118c8a53 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePendingPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..df07f769e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePendingPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..7faf0c539 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# SyncListResponsePendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncListResponsePendingPreparedStackProfileAw](../models/synclistresponsependingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncListResponsePendingPreparedStackProfileAzure](../models/synclistresponsependingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncListResponsePendingPreparedStackProfileGcp](../models/synclistresponsependingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..c13065a2c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackProfileConditionResource` + +```typescript +const value: + models.SyncListResponsePendingPreparedStackProfileConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..61ef8f8ba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofilestackconditionunion.md @@ -0,0 +1,20 @@ +# SyncListResponsePendingPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackProfileConditionStack` + +```typescript +const value: models.SyncListResponsePendingPreparedStackProfileConditionStack = + { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileunion.md new file mode 100644 index 000000000..9bc0678cf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprofileunion.md @@ -0,0 +1,23 @@ +# SyncListResponsePendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackProfile` + +```typescript +const value: models.SyncListResponsePendingPreparedStackProfile = { + description: + "whereas spectacles er late seldom absentmindedly experienced where", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprovidedby.md new file mode 100644 index 000000000..640d7c25e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackProvidedBy = "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackresources.md new file mode 100644 index 000000000..9127167a2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackresources.md @@ -0,0 +1,26 @@ +# SyncListResponsePendingPreparedStackResources + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "frozen", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncListResponsePendingPreparedStackConfig](../models/synclistresponsependingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncListResponsePendingPreparedStackDependency](../models/synclistresponsependingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncListResponsePendingPreparedStackLifecycle](../models/synclistresponsependingpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..d3f9dce87 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackSupportedPlatform = "kubernetes"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeboolean.md new file mode 100644 index 000000000..424026f36 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# SyncListResponsePendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..52523b891 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# SyncListResponsePendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackTypeEnvEnum = "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypenumber.md new file mode 100644 index 000000000..09512a0e6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# SyncListResponsePendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypestring.md new file mode 100644 index 000000000..de8927c93 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# SyncListResponsePendingPreparedStackTypeString + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypestringlist.md new file mode 100644 index 000000000..5c87379fc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypestringlist.md @@ -0,0 +1,15 @@ +# SyncListResponsePendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackTypeStringList = "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeunion.md new file mode 100644 index 000000000..6a6420f4a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstacktypeunion.md @@ -0,0 +1,16 @@ +# SyncListResponsePendingPreparedStackTypeUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackTypeEnvEnum` + +```typescript +const value: models.SyncListResponsePendingPreparedStackTypeEnvEnum = "secret"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackunion.md new file mode 100644 index 000000000..953854b38 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackunion.md @@ -0,0 +1,33 @@ +# SyncListResponsePendingPreparedStackUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStack` + +```typescript +const value: models.SyncListResponsePendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [ + { + id: "", + type: "", + }, + ], + lifecycle: "frozen", + }, + }, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackvalidation.md new file mode 100644 index 000000000..f1fb0efc2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# SyncListResponsePendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { SyncListResponsePendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackvalidationunion.md new file mode 100644 index 000000000..e9ba04b24 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsependingpreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# SyncListResponsePendingPreparedStackValidationUnion + + +## Supported Types + +### `models.SyncListResponsePendingPreparedStackValidation` + +```typescript +const value: models.SyncListResponsePendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepermissions.md b/client-sdks/platform/typescript/docs/models/synclistresponsepermissions.md deleted file mode 100644 index bd5a95021..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsepermissions.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponsePermissions - -Combined permissions configuration that contains both profiles and management - -## Example Usage - -```typescript -import { SyncListResponsePermissions } from "@alienplatform/platform-api/models"; - -let value: SyncListResponsePermissions = { - profiles: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `management` | *models.SyncListResponseManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | -| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepoolsautoscale.md b/client-sdks/platform/typescript/docs/models/synclistresponsepoolsautoscale.md index b4d2d4c0e..a83bb71cc 100644 --- a/client-sdks/platform/typescript/docs/models/synclistresponsepoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepoolsautoscale.md @@ -16,7 +16,8 @@ let value: SyncListResponsePoolsAutoscale = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.SyncListResponseFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepoolsfixed.md b/client-sdks/platform/typescript/docs/models/synclistresponsepoolsfixed.md index afeb652a3..6b5e3befb 100644 --- a/client-sdks/platform/typescript/docs/models/synclistresponsepoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepoolsfixed.md @@ -15,6 +15,7 @@ let value: SyncListResponsePoolsFixed = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.SyncListResponseFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstack.md index 4ac8d5cbe..af1c74775 100644 --- a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstack.md +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstack.md @@ -15,10 +15,10 @@ let value: SyncListResponsePreparedStack = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | -| `inputs` | [models.SyncListResponseInput](../models/synclistresponseinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | -| `permissions` | [models.SyncListResponsePermissions](../models/synclistresponsepermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | -| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | -| `supportedPlatforms` | [models.SyncListResponseSupportedPlatform](../models/synclistresponsesupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.SyncListResponsePreparedStackInput](../models/synclistresponsepreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.SyncListResponsePreparedStackPermissions](../models/synclistresponsepreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.SyncListResponsePreparedStackSupportedPlatform](../models/synclistresponsepreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultboolean.md new file mode 100644 index 000000000..424d940c0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncListResponsePreparedStackTypeBoolean](../models/synclistresponsepreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultnumber.md new file mode 100644 index 000000000..66b851221 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackDefaultNumber + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncListResponsePreparedStackTypeNumber](../models/synclistresponsepreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultstring.md new file mode 100644 index 000000000..92b450c6c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackDefaultString + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncListResponsePreparedStackTypeString](../models/synclistresponsepreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultstringlist.md new file mode 100644 index 000000000..b8d89f916 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultstringlist.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackDefaultStringList + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncListResponsePreparedStackTypeStringList](../models/synclistresponsepreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultunion.md new file mode 100644 index 000000000..24804a037 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackdefaultunion.md @@ -0,0 +1,50 @@ +# SyncListResponsePreparedStackDefaultUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackDefaultString` + +```typescript +const value: models.SyncListResponsePreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.SyncListResponsePreparedStackDefaultNumber` + +```typescript +const value: models.SyncListResponsePreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.SyncListResponsePreparedStackDefaultBoolean` + +```typescript +const value: models.SyncListResponsePreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +### `models.SyncListResponsePreparedStackDefaultStringList` + +```typescript +const value: models.SyncListResponsePreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + "", + ], +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackenv.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackenv.md new file mode 100644 index 000000000..45aeedc45 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackenv.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.SyncListResponsePreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextend.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextend.md new file mode 100644 index 000000000..1474584ef --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextend.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtend = { + description: "why nor cultivated openly trust garage scary hateful waist", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncListResponsePreparedStackExtendPlatforms](../models/synclistresponsepreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendaw.md new file mode 100644 index 000000000..4c96c7f33 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendaw.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePreparedStackExtendAwBinding](../models/synclistresponsepreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncListResponsePreparedStackExtendEffect](../models/synclistresponsepreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncListResponsePreparedStackExtendAwGrant](../models/synclistresponsepreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawbinding.md new file mode 100644 index 000000000..8cea3d7e6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncListResponsePreparedStackExtendAwResource](../models/synclistresponsepreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackExtendAwStack](../models/synclistresponsepreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawgrant.md new file mode 100644 index 000000000..a3cb6eef4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawresource.md new file mode 100644 index 000000000..40709c542 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawresource.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawstack.md new file mode 100644 index 000000000..7f0ec26a6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendawstack.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazure.md new file mode 100644 index 000000000..52818ca0a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazure.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePreparedStackExtendAzureBinding](../models/synclistresponsepreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePreparedStackExtendAzureGrant](../models/synclistresponsepreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazurebinding.md new file mode 100644 index 000000000..d78d35903 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncListResponsePreparedStackExtendAzureResource](../models/synclistresponsepreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackExtendAzureStack](../models/synclistresponsepreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazuregrant.md new file mode 100644 index 000000000..53661215c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazureresource.md new file mode 100644 index 000000000..c43f5bdf1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazurestack.md new file mode 100644 index 000000000..a12925a80 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendconditionresource.md new file mode 100644 index 000000000..bab0e4e98 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendconditionresource.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendconditionstack.md new file mode 100644 index 000000000..aa5e4c225 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendeffect.md new file mode 100644 index 000000000..9efae5932 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcp.md new file mode 100644 index 000000000..e99a17eba --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncListResponsePreparedStackExtendGcpBinding](../models/synclistresponsepreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePreparedStackExtendGcpGrant](../models/synclistresponsepreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpbinding.md new file mode 100644 index 000000000..b7b96b733 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePreparedStackExtendGcpResource](../models/synclistresponsepreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackExtendGcpStack](../models/synclistresponsepreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpgrant.md new file mode 100644 index 000000000..fa5e89d6c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpresource.md new file mode 100644 index 000000000..5658bca5a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# SyncListResponsePreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `condition` | *models.SyncListResponsePreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpstack.md new file mode 100644 index 000000000..e311daa34 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendplatforms.md new file mode 100644 index 000000000..dfb78131b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncListResponsePreparedStackExtendAw](../models/synclistresponsepreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncListResponsePreparedStackExtendAzure](../models/synclistresponsepreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncListResponsePreparedStackExtendGcp](../models/synclistresponsepreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..50f2c56dc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendresourceconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackExtendConditionResource` + +```typescript +const value: models.SyncListResponsePreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..5de7fced0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendstackconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackExtendConditionStack` + +```typescript +const value: models.SyncListResponsePreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendunion.md new file mode 100644 index 000000000..63ce40627 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackextendunion.md @@ -0,0 +1,22 @@ +# SyncListResponsePreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncListResponsePreparedStackExtend` + +```typescript +const value: models.SyncListResponsePreparedStackExtend = { + description: "why nor cultivated openly trust garage scary hateful waist", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackinput.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackinput.md new file mode 100644 index 000000000..e2601d81d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackinput.md @@ -0,0 +1,34 @@ +# SyncListResponsePreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackInput = { + description: "or calculus vision via buttery times", + id: "", + kind: "boolean", + label: "", + providedBy: [], + required: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `default` | *models.SyncListResponsePreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.SyncListResponsePreparedStackEnv](../models/synclistresponsepreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.SyncListResponsePreparedStackKind](../models/synclistresponsepreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.SyncListResponsePreparedStackPlatform](../models/synclistresponsepreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.SyncListResponsePreparedStackProvidedBy](../models/synclistresponsepreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.SyncListResponsePreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackkind.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackkind.md new file mode 100644 index 000000000..60ed7cc0c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackkind.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackKind = "boolean"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagement1.md new file mode 100644 index 000000000..2166c4f98 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagement1.md @@ -0,0 +1,22 @@ +# SyncListResponsePreparedStackManagement1 + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackManagement1 = { + extend: { + "key": [ + "", + ], + "key1": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagement2.md new file mode 100644 index 000000000..998167a89 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagement2.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackManagement2 + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackManagement2 = { + override: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagementenum.md new file mode 100644 index 000000000..49e019d7c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# SyncListResponsePreparedStackManagementEnum + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagementunion.md new file mode 100644 index 000000000..5dc957d68 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackmanagementunion.md @@ -0,0 +1,33 @@ +# SyncListResponsePreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.SyncListResponsePreparedStackManagement1` + +```typescript +const value: models.SyncListResponsePreparedStackManagement1 = { + extend: { + "key": [ + "", + ], + "key1": [], + }, +}; +``` + +### `models.SyncListResponsePreparedStackManagement2` + +```typescript +const value: models.SyncListResponsePreparedStackManagement2 = { + override: {}, +}; +``` + +### `models.SyncListResponsePreparedStackManagementEnum` + +```typescript +const value: models.SyncListResponsePreparedStackManagementEnum = "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverride.md new file mode 100644 index 000000000..b44cb3d08 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverride.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverride = { + description: + "circa as armchair jiggle fictionalize devise consequently acceptable concerning fraternise", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncListResponsePreparedStackOverridePlatforms](../models/synclistresponsepreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideaw.md new file mode 100644 index 000000000..225b1decd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePreparedStackOverrideAwBinding](../models/synclistresponsepreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncListResponsePreparedStackOverrideEffect](../models/synclistresponsepreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncListResponsePreparedStackOverrideAwGrant](../models/synclistresponsepreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawbinding.md new file mode 100644 index 000000000..da647ef1f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePreparedStackOverrideAwResource](../models/synclistresponsepreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackOverrideAwStack](../models/synclistresponsepreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawgrant.md new file mode 100644 index 000000000..d94377443 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawresource.md new file mode 100644 index 000000000..662175f6f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawresource.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAwResource = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawstack.md new file mode 100644 index 000000000..0e3fac8a2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideawstack.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazure.md new file mode 100644 index 000000000..a14036b82 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePreparedStackOverrideAzureBinding](../models/synclistresponsepreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePreparedStackOverrideAzureGrant](../models/synclistresponsepreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..5fe160a35 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePreparedStackOverrideAzureResource](../models/synclistresponsepreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackOverrideAzureStack](../models/synclistresponsepreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..c7036cf88 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazureresource.md new file mode 100644 index 000000000..cdc6a737d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazurestack.md new file mode 100644 index 000000000..c03c9894b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..c8c24fd1b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideconditionresource.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..ef0a3aa80 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideconditionstack.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideeffect.md new file mode 100644 index 000000000..174363b6c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcp.md new file mode 100644 index 000000000..317c2df3b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePreparedStackOverrideGcpBinding](../models/synclistresponsepreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePreparedStackOverrideGcpGrant](../models/synclistresponsepreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..146d25d49 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncListResponsePreparedStackOverrideGcpResource](../models/synclistresponsepreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackOverrideGcpStack](../models/synclistresponsepreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..41ef166d4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpresource.md new file mode 100644 index 000000000..76d3df5c5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# SyncListResponsePreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpstack.md new file mode 100644 index 000000000..466186b2e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideplatforms.md new file mode 100644 index 000000000..d3d9ff682 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncListResponsePreparedStackOverrideAw](../models/synclistresponsepreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncListResponsePreparedStackOverrideAzure](../models/synclistresponsepreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncListResponsePreparedStackOverrideGcp](../models/synclistresponsepreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..850ed2e74 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackOverrideConditionResource` + +```typescript +const value: models.SyncListResponsePreparedStackOverrideConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..3d9ea6fbe --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverridestackconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackOverrideConditionStack` + +```typescript +const value: models.SyncListResponsePreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideunion.md new file mode 100644 index 000000000..b08909b3e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackoverrideunion.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncListResponsePreparedStackOverride` + +```typescript +const value: models.SyncListResponsePreparedStackOverride = { + description: + "circa as armchair jiggle fictionalize devise consequently acceptable concerning fraternise", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackpermissions.md new file mode 100644 index 000000000..0e1911eae --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackpermissions.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackPermissions = { + profiles: { + "key": { + "key": [], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.SyncListResponsePreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofile.md new file mode 100644 index 000000000..cb3e0623c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofile.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfile = { + description: + "an joyously sternly colorize zowie puff till trusting ick until", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncListResponsePreparedStackProfilePlatforms](../models/synclistresponsepreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileaw.md new file mode 100644 index 000000000..4684c9e62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncListResponsePreparedStackProfileAwBinding](../models/synclistresponsepreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncListResponsePreparedStackProfileEffect](../models/synclistresponsepreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncListResponsePreparedStackProfileAwGrant](../models/synclistresponsepreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawbinding.md new file mode 100644 index 000000000..3b3a3bb62 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePreparedStackProfileAwResource](../models/synclistresponsepreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackProfileAwStack](../models/synclistresponsepreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawgrant.md new file mode 100644 index 000000000..13d2df2a1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawresource.md new file mode 100644 index 000000000..4026efe18 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawresource.md @@ -0,0 +1,22 @@ +# SyncListResponsePreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAwResource = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawstack.md new file mode 100644 index 000000000..3e73efe76 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileawstack.md @@ -0,0 +1,24 @@ +# SyncListResponsePreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazure.md new file mode 100644 index 000000000..deaf5109f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncListResponsePreparedStackProfileAzureBinding](../models/synclistresponsepreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePreparedStackProfileAzureGrant](../models/synclistresponsepreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazurebinding.md new file mode 100644 index 000000000..ff06f877b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePreparedStackProfileAzureResource](../models/synclistresponsepreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackProfileAzureStack](../models/synclistresponsepreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazuregrant.md new file mode 100644 index 000000000..71d82a8fc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazureresource.md new file mode 100644 index 000000000..12b32db99 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazurestack.md new file mode 100644 index 000000000..ca3342efd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileconditionresource.md new file mode 100644 index 000000000..ee4318a58 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileconditionresource.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileconditionstack.md new file mode 100644 index 000000000..b10af9dad --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileeffect.md new file mode 100644 index 000000000..2bbda225e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcp.md new file mode 100644 index 000000000..731bc7d1c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncListResponsePreparedStackProfileGcpBinding](../models/synclistresponsepreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncListResponsePreparedStackProfileGcpGrant](../models/synclistresponsepreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..30d0d6bf4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# SyncListResponsePreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncListResponsePreparedStackProfileGcpResource](../models/synclistresponsepreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncListResponsePreparedStackProfileGcpStack](../models/synclistresponsepreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..6ce5f44f3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# SyncListResponsePreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpresource.md new file mode 100644 index 000000000..e5904feab --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# SyncListResponsePreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpstack.md new file mode 100644 index 000000000..e025480b1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# SyncListResponsePreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `condition` | *models.SyncListResponsePreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileplatforms.md new file mode 100644 index 000000000..770bcab9b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.SyncListResponsePreparedStackProfileAw](../models/synclistresponsepreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncListResponsePreparedStackProfileAzure](../models/synclistresponsepreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncListResponsePreparedStackProfileGcp](../models/synclistresponsepreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..12803cf94 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileresourceconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackProfileConditionResource` + +```typescript +const value: models.SyncListResponsePreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..a9327b10b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofilestackconditionunion.md @@ -0,0 +1,19 @@ +# SyncListResponsePreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackProfileConditionStack` + +```typescript +const value: models.SyncListResponsePreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileunion.md new file mode 100644 index 000000000..8925d60df --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprofileunion.md @@ -0,0 +1,23 @@ +# SyncListResponsePreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncListResponsePreparedStackProfile` + +```typescript +const value: models.SyncListResponsePreparedStackProfile = { + description: + "an joyously sternly colorize zowie puff till trusting ick until", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprovidedby.md new file mode 100644 index 000000000..ae46e767a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackProvidedBy = "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackresources.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackresources.md index f041dd3ff..86e6e91fa 100644 --- a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackresources.md +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackresources.md @@ -17,9 +17,10 @@ let value: SyncListResponsePreparedStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncListResponsePreparedStackConfig](../models/synclistresponsepreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncListResponsePreparedStackDependency](../models/synclistresponsepreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncListResponsePreparedStackLifecycle](../models/synclistresponsepreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncListResponsePreparedStackConfig](../models/synclistresponsepreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncListResponsePreparedStackDependency](../models/synclistresponsepreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncListResponsePreparedStackLifecycle](../models/synclistresponsepreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacksupportedplatform.md new file mode 100644 index 000000000..305aebc05 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackSupportedPlatform = "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeboolean.md new file mode 100644 index 000000000..da31295a5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# SyncListResponsePreparedStackTypeBoolean + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeenvenum.md new file mode 100644 index 000000000..1c44e8995 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# SyncListResponsePreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackTypeEnvEnum = "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypenumber.md new file mode 100644 index 000000000..7dc98029b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# SyncListResponsePreparedStackTypeNumber + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypestring.md new file mode 100644 index 000000000..cb5822957 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypestring.md @@ -0,0 +1,15 @@ +# SyncListResponsePreparedStackTypeString + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypestringlist.md new file mode 100644 index 000000000..424f48b43 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypestringlist.md @@ -0,0 +1,15 @@ +# SyncListResponsePreparedStackTypeStringList + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackTypeStringList = "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeunion.md new file mode 100644 index 000000000..c01c4a8e6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstacktypeunion.md @@ -0,0 +1,16 @@ +# SyncListResponsePreparedStackTypeUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackTypeEnvEnum` + +```typescript +const value: models.SyncListResponsePreparedStackTypeEnvEnum = "secret"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackvalidation.md new file mode 100644 index 000000000..2f496af09 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackvalidation.md @@ -0,0 +1,25 @@ +# SyncListResponsePreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { SyncListResponsePreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: SyncListResponsePreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackvalidationunion.md new file mode 100644 index 000000000..199c04803 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsepreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# SyncListResponsePreparedStackValidationUnion + + +## Supported Types + +### `models.SyncListResponsePreparedStackValidation` + +```typescript +const value: models.SyncListResponsePreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofile.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofile.md deleted file mode 100644 index 238e1fe15..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofile.md +++ /dev/null @@ -1,24 +0,0 @@ -# SyncListResponseProfile - -A permission set that can be applied across different cloud platforms - -## Example Usage - -```typescript -import { SyncListResponseProfile } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfile = { - description: - "regarding even now bungalow boiling promptly entry eventually where", - id: "", - platforms: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | -| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | -| `platforms` | [models.SyncListResponseProfilePlatforms](../models/synclistresponseprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileaw.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileaw.md deleted file mode 100644 index 987c70614..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileaw.md +++ /dev/null @@ -1,24 +0,0 @@ -# SyncListResponseProfileAw - -AWS-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseProfileAw } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAw = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `binding` | [models.SyncListResponseProfileAwBinding](../models/synclistresponseprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `effect` | [models.SyncListResponseProfileEffect](../models/synclistresponseprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | -| `grant` | [models.SyncListResponseProfileAwGrant](../models/synclistresponseprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileawbinding.md deleted file mode 100644 index 2eb26a410..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseProfileAwBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseProfileAwBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAwBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `resource` | [models.SyncListResponseProfileAwResource](../models/synclistresponseprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | -| `stack` | [models.SyncListResponseProfileAwStack](../models/synclistresponseprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileawgrant.md deleted file mode 100644 index 1d170cb70..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseProfileAwGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseProfileAwGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAwGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileawresource.md deleted file mode 100644 index 0dc0c16b2..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawresource.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseProfileAwResource - -AWS-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseProfileAwResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAwResource = { - resources: [ - "", - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileawstack.md deleted file mode 100644 index 676d6447c..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileawstack.md +++ /dev/null @@ -1,22 +0,0 @@ -# SyncListResponseProfileAwStack - -AWS-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseProfileAwStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAwStack = { - resources: [ - "", - ], -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | -| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazure.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileazure.md deleted file mode 100644 index d1c45333a..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazure.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseProfileAzure - -Azure-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseProfileAzure } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAzure = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `binding` | [models.SyncListResponseProfileAzureBinding](../models/synclistresponseprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.SyncListResponseProfileAzureGrant](../models/synclistresponseprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileazurebinding.md deleted file mode 100644 index a80f47c78..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazurebinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseProfileAzureBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseProfileAzureBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAzureBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `resource` | [models.SyncListResponseProfileAzureResource](../models/synclistresponseprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | -| `stack` | [models.SyncListResponseProfileAzureStack](../models/synclistresponseprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileazuregrant.md deleted file mode 100644 index ad9e04d7c..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazuregrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseProfileAzureGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseProfileAzureGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAzureGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazureresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileazureresource.md deleted file mode 100644 index de9da1fe8..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazureresource.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseProfileAzureResource - -Azure-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseProfileAzureResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAzureResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazurestack.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileazurestack.md deleted file mode 100644 index 2ef44dde5..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileazurestack.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseProfileAzureStack - -Azure-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseProfileAzureStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileAzureStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileconditionresource.md deleted file mode 100644 index 520a6573d..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileconditionresource.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseProfileConditionResource - -GCP IAM condition - -## Example Usage - -```typescript -import { SyncListResponseProfileConditionResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileConditionResource = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileconditionstack.md deleted file mode 100644 index 242337317..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileconditionstack.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseProfileConditionStack - -GCP IAM condition - -## Example Usage - -```typescript -import { SyncListResponseProfileConditionStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileConditionStack = { - expression: "", - title: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `expression` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileeffect.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileeffect.md deleted file mode 100644 index 210cdc774..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileeffect.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseProfileEffect - -IAM effect. Defaults to Allow. - -## Example Usage - -```typescript -import { SyncListResponseProfileEffect } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileEffect = "Deny"; -``` - -## Values - -```typescript -"Allow" | "Deny" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcp.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcp.md deleted file mode 100644 index 8d5b756da..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcp.md +++ /dev/null @@ -1,23 +0,0 @@ -# SyncListResponseProfileGcp - -GCP-specific platform permission configuration - -## Example Usage - -```typescript -import { SyncListResponseProfileGcp } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileGcp = { - binding: {}, - grant: {}, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `binding` | [models.SyncListResponseProfileGcpBinding](../models/synclistresponseprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | -| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | -| `grant` | [models.SyncListResponseProfileGcpGrant](../models/synclistresponseprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | -| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpbinding.md deleted file mode 100644 index 348032150..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpbinding.md +++ /dev/null @@ -1,18 +0,0 @@ -# SyncListResponseProfileGcpBinding - -Generic binding configuration for permissions - -## Example Usage - -```typescript -import { SyncListResponseProfileGcpBinding } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileGcpBinding = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `resource` | [models.SyncListResponseProfileGcpResource](../models/synclistresponseprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | -| `stack` | [models.SyncListResponseProfileGcpStack](../models/synclistresponseprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpgrant.md deleted file mode 100644 index 87f225737..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpgrant.md +++ /dev/null @@ -1,21 +0,0 @@ -# SyncListResponseProfileGcpGrant - -Grant permissions for a specific cloud platform - -## Example Usage - -```typescript -import { SyncListResponseProfileGcpGrant } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileGcpGrant = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | -| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | -| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | -| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | -| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpresource.md deleted file mode 100644 index 07a2ffd92..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpresource.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseProfileGcpResource - -GCP-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseProfileGcpResource } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileGcpResource = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `condition` | *models.SyncListResponseProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpstack.md deleted file mode 100644 index 8e87d36c3..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofilegcpstack.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseProfileGcpStack - -GCP-specific binding specification - -## Example Usage - -```typescript -import { SyncListResponseProfileGcpStack } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfileGcpStack = { - scope: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | -| `condition` | *models.SyncListResponseProfileStackConditionUnion* | :heavy_minus_sign: | N/A | -| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileplatforms.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileplatforms.md deleted file mode 100644 index faf193dcc..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileplatforms.md +++ /dev/null @@ -1,19 +0,0 @@ -# SyncListResponseProfilePlatforms - -Platform-specific permission configurations - -## Example Usage - -```typescript -import { SyncListResponseProfilePlatforms } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProfilePlatforms = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `aws` | [models.SyncListResponseProfileAw](../models/synclistresponseprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | -| `azure` | [models.SyncListResponseProfileAzure](../models/synclistresponseprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | -| `gcp` | [models.SyncListResponseProfileGcp](../models/synclistresponseprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileresourceconditionunion.md deleted file mode 100644 index 83c0c0036..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileresourceconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseProfileResourceConditionUnion - - -## Supported Types - -### `models.SyncListResponseProfileConditionResource` - -```typescript -const value: models.SyncListResponseProfileConditionResource = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofilestackconditionunion.md deleted file mode 100644 index 84f803db0..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofilestackconditionunion.md +++ /dev/null @@ -1,20 +0,0 @@ -# SyncListResponseProfileStackConditionUnion - - -## Supported Types - -### `models.SyncListResponseProfileConditionStack` - -```typescript -const value: models.SyncListResponseProfileConditionStack = { - expression: "", - title: "", -}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprofileunion.md b/client-sdks/platform/typescript/docs/models/synclistresponseprofileunion.md deleted file mode 100644 index 4a00f6276..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprofileunion.md +++ /dev/null @@ -1,24 +0,0 @@ -# SyncListResponseProfileUnion - -Reference to a permission set - either by name or inline definition - - -## Supported Types - -### `models.SyncListResponseProfile` - -```typescript -const value: models.SyncListResponseProfile = { - description: - "regarding even now bungalow boiling promptly entry eventually where", - id: "", - platforms: {}, -}; -``` - -### `string` - -```typescript -const value: string = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseprovidedby.md b/client-sdks/platform/typescript/docs/models/synclistresponseprovidedby.md deleted file mode 100644 index f23e1fd4f..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponseprovidedby.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseProvidedBy - -Who can provide a stack input value. - -## Example Usage - -```typescript -import { SyncListResponseProvidedBy } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseProvidedBy = "deployer"; -``` - -## Values - -```typescript -"developer" | "deployer" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponseruntimemetadata.md b/client-sdks/platform/typescript/docs/models/synclistresponseruntimemetadata.md index 53b393f71..df387133e 100644 --- a/client-sdks/platform/typescript/docs/models/synclistresponseruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/synclistresponseruntimemetadata.md @@ -16,5 +16,7 @@ let value: SyncListResponseRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.SyncListResponsePendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.SyncListResponsePreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.SyncListResponseSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsesetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/synclistresponsesetupupdateauthorization.md new file mode 100644 index 000000000..fc31bbbb1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsesetupupdateauthorization.md @@ -0,0 +1,31 @@ +# SyncListResponseSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { SyncListResponseSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: SyncListResponseSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 256760, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsesetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsesetupupdateauthorizationunion.md new file mode 100644 index 000000000..0e96f11fb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/synclistresponsesetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# SyncListResponseSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.SyncListResponseSetupUpdateAuthorization` + +```typescript +const value: models.SyncListResponseSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 256760, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsesupportedplatform.md b/client-sdks/platform/typescript/docs/models/synclistresponsesupportedplatform.md deleted file mode 100644 index 6681a2b5c..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsesupportedplatform.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseSupportedPlatform - -Represents the target cloud platform. - -## Example Usage - -```typescript -import { SyncListResponseSupportedPlatform } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseSupportedPlatform = "machines"; -``` - -## Values - -```typescript -"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsetypeboolean.md b/client-sdks/platform/typescript/docs/models/synclistresponsetypeboolean.md deleted file mode 100644 index 8a87011cb..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsetypeboolean.md +++ /dev/null @@ -1,15 +0,0 @@ -# SyncListResponseTypeBoolean - -## Example Usage - -```typescript -import { SyncListResponseTypeBoolean } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseTypeBoolean = "boolean"; -``` - -## Values - -```typescript -"boolean" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsetypeenvenum.md b/client-sdks/platform/typescript/docs/models/synclistresponsetypeenvenum.md deleted file mode 100644 index b6df8a0e1..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsetypeenvenum.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseTypeEnvEnum - -Environment variable handling for a stack input mapping. - -## Example Usage - -```typescript -import { SyncListResponseTypeEnvEnum } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseTypeEnvEnum = "secret"; -``` - -## Values - -```typescript -"plain" | "secret" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsetypenumber.md b/client-sdks/platform/typescript/docs/models/synclistresponsetypenumber.md deleted file mode 100644 index 2233d0800..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsetypenumber.md +++ /dev/null @@ -1,15 +0,0 @@ -# SyncListResponseTypeNumber - -## Example Usage - -```typescript -import { SyncListResponseTypeNumber } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseTypeNumber = "number"; -``` - -## Values - -```typescript -"number" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsetypestring.md b/client-sdks/platform/typescript/docs/models/synclistresponsetypestring.md deleted file mode 100644 index 20e3c0e6f..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsetypestring.md +++ /dev/null @@ -1,15 +0,0 @@ -# SyncListResponseTypeString - -## Example Usage - -```typescript -import { SyncListResponseTypeString } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseTypeString = "string"; -``` - -## Values - -```typescript -"string" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsetypestringlist.md b/client-sdks/platform/typescript/docs/models/synclistresponsetypestringlist.md deleted file mode 100644 index feae29106..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsetypestringlist.md +++ /dev/null @@ -1,15 +0,0 @@ -# SyncListResponseTypeStringList - -## Example Usage - -```typescript -import { SyncListResponseTypeStringList } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseTypeStringList = "stringList"; -``` - -## Values - -```typescript -"stringList" -``` \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsetypeunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsetypeunion.md deleted file mode 100644 index f94f2cf16..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsetypeunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseTypeUnion - - -## Supported Types - -### `models.SyncListResponseTypeEnvEnum` - -```typescript -const value: models.SyncListResponseTypeEnvEnum = "secret"; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsevalidation.md b/client-sdks/platform/typescript/docs/models/synclistresponsevalidation.md deleted file mode 100644 index 6acbb83f5..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsevalidation.md +++ /dev/null @@ -1,25 +0,0 @@ -# SyncListResponseValidation - -Portable stack input validation constraints. - -## Example Usage - -```typescript -import { SyncListResponseValidation } from "@alienplatform/platform-api/models"; - -let value: SyncListResponseValidation = {}; -``` - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | -| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | -| `max` | *string* | :heavy_minus_sign: | Maximum number. | -| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | -| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | -| `min` | *string* | :heavy_minus_sign: | Minimum number. | -| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | -| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | -| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | -| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | \ No newline at end of file diff --git a/client-sdks/platform/typescript/docs/models/synclistresponsevalidationunion.md b/client-sdks/platform/typescript/docs/models/synclistresponsevalidationunion.md deleted file mode 100644 index a239f4dbf..000000000 --- a/client-sdks/platform/typescript/docs/models/synclistresponsevalidationunion.md +++ /dev/null @@ -1,17 +0,0 @@ -# SyncListResponseValidationUnion - - -## Supported Types - -### `models.SyncListResponseValidation` - -```typescript -const value: models.SyncListResponseValidation = {}; -``` - -### `any` - -```typescript -const value: any = ""; -``` - diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestcurrentreleaseresources.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestcurrentreleaseresources.md index 4f4b85dfa..d0f74fad8 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcilerequestcurrentreleaseresources.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestcurrentreleaseresources.md @@ -17,9 +17,10 @@ let value: SyncReconcileRequestCurrentReleaseResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncReconcileRequestCurrentReleaseConfig](../models/syncreconcilerequestcurrentreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncReconcileRequestCurrentReleaseDependency](../models/syncreconcilerequestcurrentreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.CurrentReleaseStateLifecycle](../models/currentreleasestatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileRequestCurrentReleaseConfig](../models/syncreconcilerequestcurrentreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileRequestCurrentReleaseDependency](../models/syncreconcilerequestcurrentreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.CurrentReleaseStateLifecycle](../models/currentreleasestatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstack.md new file mode 100644 index 000000000..297c9a719 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstack.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestPendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStack = { + id: "", + resources: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.SyncReconcileRequestPendingPreparedStackInput](../models/syncreconcilerequestpendingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.SyncReconcileRequestPendingPreparedStackPermissions](../models/syncreconcilerequestpendingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.SyncReconcileRequestPendingPreparedStackSupportedPlatform](../models/syncreconcilerequestpendingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackconfig.md new file mode 100644 index 000000000..560034809 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# SyncReconcileRequestPendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..d0ac8c422 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncReconcileRequestPendingPreparedStackTypeBoolean](../models/syncreconcilerequestpendingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..20227d615 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncReconcileRequestPendingPreparedStackTypeNumber](../models/syncreconcilerequestpendingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultstring.md new file mode 100644 index 000000000..d4c76f01c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncReconcileRequestPendingPreparedStackTypeString](../models/syncreconcilerequestpendingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..6c631e22d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultstringlist.md @@ -0,0 +1,22 @@ +# SyncReconcileRequestPendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncReconcileRequestPendingPreparedStackTypeStringList](../models/syncreconcilerequestpendingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultunion.md new file mode 100644 index 000000000..e313250c4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdefaultunion.md @@ -0,0 +1,50 @@ +# SyncReconcileRequestPendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackDefaultString` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.SyncReconcileRequestPendingPreparedStackDefaultNumber` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.SyncReconcileRequestPendingPreparedStackDefaultBoolean` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackDefaultBoolean = { + type: "boolean", + value: true, +}; +``` + +### `models.SyncReconcileRequestPendingPreparedStackDefaultStringList` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackDefaultStringList = + { + type: "stringList", + value: [ + "", + "", + ], + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdependency.md new file mode 100644 index 000000000..f6b8a9160 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackenv.md new file mode 100644 index 000000000..3f6439a0d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackenv.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.SyncReconcileRequestPendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextend.md new file mode 100644 index 000000000..22200a8d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextend.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtend = { + description: "from unto closely", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncReconcileRequestPendingPreparedStackExtendPlatforms](../models/syncreconcilerequestpendingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendaw.md new file mode 100644 index 000000000..151b72460 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestPendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackExtendAwBinding](../models/syncreconcilerequestpendingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncReconcileRequestPendingPreparedStackExtendEffect](../models/syncreconcilerequestpendingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackExtendAwGrant](../models/syncreconcilerequestpendingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawbinding.md new file mode 100644 index 000000000..491a91986 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PendingPreparedStackExtendStateAwResource](../models/pendingpreparedstackextendstateawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackExtendAwStack](../models/syncreconcilerequestpendingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawgrant.md new file mode 100644 index 000000000..3b8dc54cb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawstack.md new file mode 100644 index 000000000..81d867838 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendawstack.md @@ -0,0 +1,20 @@ +# SyncReconcileRequestPendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazure.md new file mode 100644 index 000000000..6fe8a2155 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackExtendAzureBinding](../models/syncreconcilerequestpendingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackExtendAzureGrant](../models/syncreconcilerequestpendingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..1fb22e71d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PendingPreparedStackExtendStateAzureResource](../models/pendingpreparedstackextendstateazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackExtendAzureStack](../models/syncreconcilerequestpendingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..aba75844d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazurestack.md new file mode 100644 index 000000000..47d772e6d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendeffect.md new file mode 100644 index 000000000..4eecff0cc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcp.md new file mode 100644 index 000000000..05aa32b8d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackExtendGcpBinding](../models/syncreconcilerequestpendingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackExtendGcpGrant](../models/syncreconcilerequestpendingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..378b8e672 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PendingPreparedStackExtendStateGcpResource](../models/pendingpreparedstackextendstategcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackExtendGcpStack](../models/syncreconcilerequestpendingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..cdce3aaa8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..a9377c9a1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# SyncReconcileRequestPendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `condition` | *models.PendingPreparedStackExtendStateStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendplatforms.md new file mode 100644 index 000000000..efccf13b5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncReconcileRequestPendingPreparedStackExtendAw](../models/syncreconcilerequestpendingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncReconcileRequestPendingPreparedStackExtendAzure](../models/syncreconcilerequestpendingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncReconcileRequestPendingPreparedStackExtendGcp](../models/syncreconcilerequestpendingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendunion.md new file mode 100644 index 000000000..f3524e930 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# SyncReconcileRequestPendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackExtend` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackExtend = { + description: "from unto closely", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackinput.md new file mode 100644 index 000000000..33f15c97d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackinput.md @@ -0,0 +1,35 @@ +# SyncReconcileRequestPendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackInput = { + description: + "yet whine moral ew massive well-off forsaken willfully uh-huh developmental", + id: "", + kind: "integer", + label: "", + providedBy: [], + required: true, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `default` | *models.SyncReconcileRequestPendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.SyncReconcileRequestPendingPreparedStackEnv](../models/syncreconcilerequestpendingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.PendingPreparedStackStateKind](../models/pendingpreparedstackstatekind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.SyncReconcileRequestPendingPreparedStackPlatform](../models/syncreconcilerequestpendingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.SyncReconcileRequestPendingPreparedStackProvidedBy](../models/syncreconcilerequestpendingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.SyncReconcileRequestPendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagement1.md new file mode 100644 index 000000000..5638aeb64 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagement1.md @@ -0,0 +1,20 @@ +# SyncReconcileRequestPendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagement2.md new file mode 100644 index 000000000..9f456fa03 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagement2.md @@ -0,0 +1,25 @@ +# SyncReconcileRequestPendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackManagement2 = { + override: { + "key": [ + "", + ], + "key1": [ + "", + ], + "key2": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagementenum.md new file mode 100644 index 000000000..f4321973d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# SyncReconcileRequestPendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagementunion.md new file mode 100644 index 000000000..419e8c04e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackmanagementunion.md @@ -0,0 +1,40 @@ +# SyncReconcileRequestPendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackManagement1` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [], + }, +}; +``` + +### `models.SyncReconcileRequestPendingPreparedStackManagement2` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackManagement2 = { + override: { + "key": [ + "", + ], + "key1": [ + "", + ], + "key2": [], + }, +}; +``` + +### `models.SyncReconcileRequestPendingPreparedStackManagementEnum` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackManagementEnum = + "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverride.md new file mode 100644 index 000000000..456fcd9be --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverride.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestPendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverride = { + description: + "ouch daily past dual regularly gracefully athwart flu zowie whose", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncReconcileRequestPendingPreparedStackOverridePlatforms](../models/syncreconcilerequestpendingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideaw.md new file mode 100644 index 000000000..c8cb986e9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackOverrideAwBinding](../models/syncreconcilerequestpendingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncReconcileRequestPendingPreparedStackOverrideEffect](../models/syncreconcilerequestpendingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackOverrideAwGrant](../models/syncreconcilerequestpendingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..e834b9a4a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PendingPreparedStackOverrideStateAwResource](../models/pendingpreparedstackoverridestateawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackOverrideAwStack](../models/syncreconcilerequestpendingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..87063bb08 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..3172c1223 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideawstack.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazure.md new file mode 100644 index 000000000..a839fad54 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackOverrideAzureBinding](../models/syncreconcilerequestpendingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackOverrideAzureGrant](../models/syncreconcilerequestpendingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..48e2f446e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PendingPreparedStackOverrideStateAzureResource](../models/pendingpreparedstackoverridestateazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackOverrideAzureStack](../models/syncreconcilerequestpendingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..036c98fe9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..b632be374 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..c49a0e84a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideEffect = "Deny"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcp.md new file mode 100644 index 000000000..5f62c2fda --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackOverrideGcpBinding](../models/syncreconcilerequestpendingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackOverrideGcpGrant](../models/syncreconcilerequestpendingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..ee5afbb74 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PendingPreparedStackOverrideStateGcpResource](../models/pendingpreparedstackoverridestategcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackOverrideGcpStack](../models/syncreconcilerequestpendingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..a4995ff4c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..f54d0d657 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# SyncReconcileRequestPendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `condition` | *models.PendingPreparedStackOverrideStateStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..65bec2c8d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.SyncReconcileRequestPendingPreparedStackOverrideAw](../models/syncreconcilerequestpendingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncReconcileRequestPendingPreparedStackOverrideAzure](../models/syncreconcilerequestpendingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncReconcileRequestPendingPreparedStackOverrideGcp](../models/syncreconcilerequestpendingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideunion.md new file mode 100644 index 000000000..af2071a6c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackoverrideunion.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackOverride` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackOverride = { + description: + "ouch daily past dual regularly gracefully athwart flu zowie whose", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackpermissions.md new file mode 100644 index 000000000..6e53f7c26 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackpermissions.md @@ -0,0 +1,37 @@ +# SyncReconcileRequestPendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackPermissions = { + profiles: { + "key": { + "key": [ + { + description: "unfortunately hmph voluntarily issue pure finding aw", + id: "", + platforms: {}, + }, + ], + "key1": [ + { + description: "unfortunately hmph voluntarily issue pure finding aw", + id: "", + platforms: {}, + }, + ], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.SyncReconcileRequestPendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackplatform.md new file mode 100644 index 000000000..8c0ffe081 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackplatform.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackPlatform = "kubernetes"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofile.md new file mode 100644 index 000000000..65192e218 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofile.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfile = { + description: "amidst unaccountably so brr sermon ugh violent", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncReconcileRequestPendingPreparedStackProfilePlatforms](../models/syncreconcilerequestpendingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileaw.md new file mode 100644 index 000000000..a541c2c83 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestPendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackProfileAwBinding](../models/syncreconcilerequestpendingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncReconcileRequestPendingPreparedStackProfileEffect](../models/syncreconcilerequestpendingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackProfileAwGrant](../models/syncreconcilerequestpendingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..dd1fb4880 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PendingPreparedStackProfileStateAwResource](../models/pendingpreparedstackprofilestateawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackProfileAwStack](../models/syncreconcilerequestpendingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..78f1eceb9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawstack.md new file mode 100644 index 000000000..20300288e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileawstack.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAwStack = { + resources: [ + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazure.md new file mode 100644 index 000000000..1d3edb8e0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackProfileAzureBinding](../models/syncreconcilerequestpendingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackProfileAzureGrant](../models/syncreconcilerequestpendingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..c7bafba49 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.PendingPreparedStackProfileStateAzureResource](../models/pendingpreparedstackprofilestateazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackProfileAzureStack](../models/syncreconcilerequestpendingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..406118406 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..dc0268e5f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileeffect.md new file mode 100644 index 000000000..30e9b5679 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcp.md new file mode 100644 index 000000000..6831565d5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# SyncReconcileRequestPendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncReconcileRequestPendingPreparedStackProfileGcpBinding](../models/syncreconcilerequestpendingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileRequestPendingPreparedStackProfileGcpGrant](../models/syncreconcilerequestpendingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..3e937c45e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileRequestPendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.PendingPreparedStackProfileStateGcpResource](../models/pendingpreparedstackprofilestategcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncReconcileRequestPendingPreparedStackProfileGcpStack](../models/syncreconcilerequestpendingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..a4bacfc05 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileRequestPendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..008c0576d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# SyncReconcileRequestPendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `condition` | *models.PendingPreparedStackProfileStateStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..26737e535 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncReconcileRequestPendingPreparedStackProfileAw](../models/syncreconcilerequestpendingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncReconcileRequestPendingPreparedStackProfileAzure](../models/syncreconcilerequestpendingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncReconcileRequestPendingPreparedStackProfileGcp](../models/syncreconcilerequestpendingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileunion.md new file mode 100644 index 000000000..02516e716 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprofileunion.md @@ -0,0 +1,22 @@ +# SyncReconcileRequestPendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackProfile` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackProfile = { + description: "amidst unaccountably so brr sermon ugh violent", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprovidedby.md new file mode 100644 index 000000000..5cc96a448 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackProvidedBy = "deployer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackresources.md new file mode 100644 index 000000000..bafc685b8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackresources.md @@ -0,0 +1,26 @@ +# SyncReconcileRequestPendingPreparedStackResources + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "live", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileRequestPendingPreparedStackConfig](../models/syncreconcilerequestpendingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileRequestPendingPreparedStackDependency](../models/syncreconcilerequestpendingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.PendingPreparedStackStateLifecycle](../models/pendingpreparedstackstatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..62da6f6f0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackSupportedPlatform = "aws"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeboolean.md new file mode 100644 index 000000000..0d2638a48 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# SyncReconcileRequestPendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..5c26cc574 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackTypeEnvEnum = "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypenumber.md new file mode 100644 index 000000000..89eb099d8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# SyncReconcileRequestPendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypestring.md new file mode 100644 index 000000000..04f07fe45 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# SyncReconcileRequestPendingPreparedStackTypeString + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypestringlist.md new file mode 100644 index 000000000..c2231eb14 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypestringlist.md @@ -0,0 +1,16 @@ +# SyncReconcileRequestPendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackTypeStringList = + "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeunion.md new file mode 100644 index 000000000..9e814b484 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstacktypeunion.md @@ -0,0 +1,17 @@ +# SyncReconcileRequestPendingPreparedStackTypeUnion + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackTypeEnvEnum` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackTypeEnvEnum = + "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackunion.md new file mode 100644 index 000000000..2429b7c1a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackunion.md @@ -0,0 +1,19 @@ +# SyncReconcileRequestPendingPreparedStackUnion + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStack` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStack = { + id: "", + resources: {}, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackvalidation.md new file mode 100644 index 000000000..460223408 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# SyncReconcileRequestPendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { SyncReconcileRequestPendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestPendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackvalidationunion.md new file mode 100644 index 000000000..1a53b79f1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpendingpreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# SyncReconcileRequestPendingPreparedStackValidationUnion + + +## Supported Types + +### `models.SyncReconcileRequestPendingPreparedStackValidation` + +```typescript +const value: models.SyncReconcileRequestPendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpreparedstackresources.md index 47457bd69..cdb7af135 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcilerequestpreparedstackresources.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestpreparedstackresources.md @@ -17,9 +17,10 @@ let value: SyncReconcileRequestPreparedStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncReconcileRequestPreparedStackConfig](../models/syncreconcilerequestpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncReconcileRequestPreparedStackDependency](../models/syncreconcilerequestpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.PreparedStackStateLifecycle](../models/preparedstackstatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileRequestPreparedStackConfig](../models/syncreconcilerequestpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileRequestPreparedStackDependency](../models/syncreconcilerequestpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.PreparedStackStateLifecycle](../models/preparedstackstatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestruntimemetadata.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestruntimemetadata.md index 4e4fa25e3..56def67ae 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcilerequestruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestruntimemetadata.md @@ -18,5 +18,7 @@ let value: SyncReconcileRequestRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.SyncReconcileRequestPendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.SyncReconcileRequestPreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.SyncReconcileRequestSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestsetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestsetupupdateauthorization.md new file mode 100644 index 000000000..654d2cc8d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestsetupupdateauthorization.md @@ -0,0 +1,31 @@ +# SyncReconcileRequestSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { SyncReconcileRequestSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileRequestSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 809897, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequestsetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequestsetupupdateauthorizationunion.md new file mode 100644 index 000000000..f32772ad5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequestsetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# SyncReconcileRequestSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.SyncReconcileRequestSetupUpdateAuthorization` + +```typescript +const value: models.SyncReconcileRequestSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 809897, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcilerequesttargetreleaseresources.md b/client-sdks/platform/typescript/docs/models/syncreconcilerequesttargetreleaseresources.md index 1e93239fc..1cbc85625 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcilerequesttargetreleaseresources.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcilerequesttargetreleaseresources.md @@ -22,9 +22,10 @@ let value: SyncReconcileRequestTargetReleaseResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncReconcileRequestTargetReleaseConfig](../models/syncreconcilerequesttargetreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncReconcileRequestTargetReleaseDependency](../models/syncreconcilerequesttargetreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.TargetReleaseStateLifecycle](../models/targetreleasestatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileRequestTargetReleaseConfig](../models/syncreconcilerequesttargetreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileRequestTargetReleaseDependency](../models/syncreconcilerequesttargetreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.TargetReleaseStateLifecycle](../models/targetreleasestatelifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsecurrentreleaseresources.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsecurrentreleaseresources.md index cf00a8abe..ff39771e1 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcileresponsecurrentreleaseresources.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsecurrentreleaseresources.md @@ -17,9 +17,10 @@ let value: SyncReconcileResponseCurrentReleaseResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncReconcileResponseCurrentReleaseConfig](../models/syncreconcileresponsecurrentreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncReconcileResponseCurrentReleaseDependency](../models/syncreconcileresponsecurrentreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncReconcileResponseCurrentReleaseLifecycle](../models/syncreconcileresponsecurrentreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileResponseCurrentReleaseConfig](../models/syncreconcileresponsecurrentreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileResponseCurrentReleaseDependency](../models/syncreconcileresponsecurrentreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncReconcileResponseCurrentReleaseLifecycle](../models/syncreconcileresponsecurrentreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomains1.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomains1.md new file mode 100644 index 000000000..d2289ff4c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomains1.md @@ -0,0 +1,20 @@ +# SyncReconcileResponseFailureDomains1 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { SyncReconcileResponseFailureDomains1 } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponseFailureDomains1 = { + spread: 244778, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomains2.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomains2.md new file mode 100644 index 000000000..c79ee2e02 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomains2.md @@ -0,0 +1,20 @@ +# SyncReconcileResponseFailureDomains2 + +Failure-domain policy selected for a compute pool. + +## Example Usage + +```typescript +import { SyncReconcileResponseFailureDomains2 } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponseFailureDomains2 = { + spread: 575572, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `selectedFailureDomains` | *string*[] | :heavy_minus_sign: | Concrete provider domains selected during setup.
Empty delegates deterministic selection to the provider setup implementation. | +| `spread` | *number* | :heavy_check_mark: | Number of distinct failure domains across which new stateful replicas may be spread. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomainsunion1.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomainsunion1.md new file mode 100644 index 000000000..366528849 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomainsunion1.md @@ -0,0 +1,18 @@ +# SyncReconcileResponseFailureDomainsUnion1 + + +## Supported Types + +### `models.SyncReconcileResponseFailureDomains1` + +```typescript +const value: models.SyncReconcileResponseFailureDomains1 = { + spread: 244778, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomainsunion2.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomainsunion2.md new file mode 100644 index 000000000..8742b509b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsefailuredomainsunion2.md @@ -0,0 +1,18 @@ +# SyncReconcileResponseFailureDomainsUnion2 + + +## Supported Types + +### `models.SyncReconcileResponseFailureDomains2` + +```typescript +const value: models.SyncReconcileResponseFailureDomains2 = { + spread: 575572, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstack.md new file mode 100644 index 000000000..abf279dd2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstack.md @@ -0,0 +1,38 @@ +# SyncReconcileResponsePendingPreparedStack + +A bag of resources, unaware of any cloud. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [ + { + id: "", + type: "", + }, + ], + lifecycle: "live", + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the stack | +| `inputs` | [models.SyncReconcileResponsePendingPreparedStackInput](../models/syncreconcileresponsependingpreparedstackinput.md)[] | :heavy_minus_sign: | Input definitions required before setup or deployment can proceed. | +| `permissions` | [models.SyncReconcileResponsePendingPreparedStackPermissions](../models/syncreconcileresponsependingpreparedstackpermissions.md) | :heavy_minus_sign: | Combined permissions configuration that contains both profiles and management | +| `resources` | Record | :heavy_check_mark: | Map of resource IDs to their configurations and lifecycle settings | +| `supportedPlatforms` | [models.SyncReconcileResponsePendingPreparedStackSupportedPlatform](../models/syncreconcileresponsependingpreparedstacksupportedplatform.md)[] | :heavy_minus_sign: | Which platforms this stack supports. When None, all platforms are supported. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackconfig.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackconfig.md new file mode 100644 index 000000000..6687f6a5a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackconfig.md @@ -0,0 +1,22 @@ +# SyncReconcileResponsePendingPreparedStackConfig + +Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackConfig } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackConfig = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | +| `additionalProperties` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultboolean.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultboolean.md new file mode 100644 index 000000000..28b13d4e7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultboolean.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackDefaultBoolean + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackDefaultBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncReconcileResponsePendingPreparedStackTypeBoolean](../models/syncreconcileresponsependingpreparedstacktypeboolean.md) | :heavy_check_mark: | N/A | +| `value` | *boolean* | :heavy_check_mark: | Boolean default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultnumber.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultnumber.md new file mode 100644 index 000000000..4541431b2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultnumber.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackDefaultNumber + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackDefaultNumber } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncReconcileResponsePendingPreparedStackTypeNumber](../models/syncreconcileresponsependingpreparedstacktypenumber.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | Number default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultstring.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultstring.md new file mode 100644 index 000000000..968aa4d4a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultstring.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackDefaultString + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackDefaultString } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `type` | [models.SyncReconcileResponsePendingPreparedStackTypeString](../models/syncreconcileresponsependingpreparedstacktypestring.md) | :heavy_check_mark: | N/A | +| `value` | *string* | :heavy_check_mark: | String default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultstringlist.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultstringlist.md new file mode 100644 index 000000000..b8965ad2f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultstringlist.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackDefaultStringList + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackDefaultStringList } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackDefaultStringList = { + type: "stringList", + value: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [models.SyncReconcileResponsePendingPreparedStackTypeStringList](../models/syncreconcileresponsependingpreparedstacktypestringlist.md) | :heavy_check_mark: | N/A | +| `value` | *string*[] | :heavy_check_mark: | String list default. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultunion.md new file mode 100644 index 000000000..835c57c5c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdefaultunion.md @@ -0,0 +1,51 @@ +# SyncReconcileResponsePendingPreparedStackDefaultUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackDefaultString` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackDefaultString = { + type: "string", + value: "", +}; +``` + +### `models.SyncReconcileResponsePendingPreparedStackDefaultNumber` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackDefaultNumber = { + type: "number", + value: "", +}; +``` + +### `models.SyncReconcileResponsePendingPreparedStackDefaultBoolean` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackDefaultBoolean = { + type: "boolean", + value: false, +}; +``` + +### `models.SyncReconcileResponsePendingPreparedStackDefaultStringList` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackDefaultStringList = + { + type: "stringList", + value: [ + "", + "", + "", + ], + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdependency.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdependency.md new file mode 100644 index 000000000..efc4ed8bc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackdependency.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackDependency + +Reference to a resource by its stable id and resource type. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackDependency } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackDependency = { + id: "", + type: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | N/A | +| `type` | *string* | :heavy_check_mark: | Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackenv.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackenv.md new file mode 100644 index 000000000..ffa5ec58a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackenv.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackEnv + +How a resolved stack input is injected into runtime environment variables. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackEnv } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackEnv = { + name: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `name` | *string* | :heavy_check_mark: | Environment variable name. | +| `targetResources` | *string*[] | :heavy_minus_sign: | Target resource IDs or patterns. None means every env-capable resource. | +| `type` | *models.SyncReconcileResponsePendingPreparedStackTypeUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextend.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextend.md new file mode 100644 index 000000000..54b4234d9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextend.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackExtend + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtend } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtend = { + description: "cruelly whether yowza incidentally innocently idealistic", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncReconcileResponsePendingPreparedStackExtendPlatforms](../models/syncreconcileresponsependingpreparedstackextendplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendaw.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendaw.md new file mode 100644 index 000000000..5cd8ab6f7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendaw.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackExtendAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAw } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackExtendAwBinding](../models/syncreconcileresponsependingpreparedstackextendawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncReconcileResponsePendingPreparedStackExtendEffect](../models/syncreconcileresponsependingpreparedstackextendeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackExtendAwGrant](../models/syncreconcileresponsependingpreparedstackextendawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawbinding.md new file mode 100644 index 000000000..e3ae11fe0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackExtendAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackExtendAwResource](../models/syncreconcileresponsependingpreparedstackextendawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackExtendAwStack](../models/syncreconcileresponsependingpreparedstackextendawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawgrant.md new file mode 100644 index 000000000..5196c6734 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackExtendAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawresource.md new file mode 100644 index 000000000..fd168f103 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawresource.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackExtendAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAwResource = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawstack.md new file mode 100644 index 000000000..1d98dad68 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendawstack.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackExtendAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAwStack = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazure.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazure.md new file mode 100644 index 000000000..d8f5596e8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazure.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackExtendAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAzure } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackExtendAzureBinding](../models/syncreconcileresponsependingpreparedstackextendazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackExtendAzureGrant](../models/syncreconcileresponsependingpreparedstackextendazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazurebinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazurebinding.md new file mode 100644 index 000000000..7f351d1cf --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazurebinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackExtendAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackExtendAzureResource](../models/syncreconcileresponsependingpreparedstackextendazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackExtendAzureStack](../models/syncreconcileresponsependingpreparedstackextendazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazuregrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazuregrant.md new file mode 100644 index 000000000..79399e223 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazuregrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackExtendAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazureresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazureresource.md new file mode 100644 index 000000000..435a4d02f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazureresource.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackExtendAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazurestack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazurestack.md new file mode 100644 index 000000000..a171df370 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendazurestack.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackExtendAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendconditionresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendconditionresource.md new file mode 100644 index 000000000..d13b84651 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendconditionresource.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackExtendConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendconditionstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendconditionstack.md new file mode 100644 index 000000000..86c81c6a0 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendconditionstack.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackExtendConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendeffect.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendeffect.md new file mode 100644 index 000000000..f37473ebe --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendeffect.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackExtendEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendEffect } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcp.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcp.md new file mode 100644 index 000000000..39961a39e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcp.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackExtendGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendGcp } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackExtendGcpBinding](../models/syncreconcileresponsependingpreparedstackextendgcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackExtendGcpGrant](../models/syncreconcileresponsependingpreparedstackextendgcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpbinding.md new file mode 100644 index 000000000..7a05893b1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackExtendGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackExtendGcpResource](../models/syncreconcileresponsependingpreparedstackextendgcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackExtendGcpStack](../models/syncreconcileresponsependingpreparedstackextendgcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpgrant.md new file mode 100644 index 000000000..4c584ea52 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackExtendGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpresource.md new file mode 100644 index 000000000..0d2a0b359 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpresource.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackExtendGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `condition` | *models.SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpstack.md new file mode 100644 index 000000000..3123c1d61 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendgcpstack.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackExtendGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `condition` | *models.SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendplatforms.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendplatforms.md new file mode 100644 index 000000000..db4bbed83 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendplatforms.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackExtendPlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackExtendPlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackExtendPlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncReconcileResponsePendingPreparedStackExtendAw](../models/syncreconcileresponsependingpreparedstackextendaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncReconcileResponsePendingPreparedStackExtendAzure](../models/syncreconcileresponsependingpreparedstackextendazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncReconcileResponsePendingPreparedStackExtendGcp](../models/syncreconcileresponsependingpreparedstackextendgcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendresourceconditionunion.md new file mode 100644 index 000000000..ad791a806 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendresourceconditionunion.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackExtendConditionResource` + +```typescript +const value: + models.SyncReconcileResponsePendingPreparedStackExtendConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendstackconditionunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendstackconditionunion.md new file mode 100644 index 000000000..be5b4a20d --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendstackconditionunion.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackExtendConditionStack` + +```typescript +const value: + models.SyncReconcileResponsePendingPreparedStackExtendConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendunion.md new file mode 100644 index 000000000..d1080d76f --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackextendunion.md @@ -0,0 +1,22 @@ +# SyncReconcileResponsePendingPreparedStackExtendUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackExtend` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackExtend = { + description: "cruelly whether yowza incidentally innocently idealistic", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackinput.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackinput.md new file mode 100644 index 000000000..222ac1aa4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackinput.md @@ -0,0 +1,34 @@ +# SyncReconcileResponsePendingPreparedStackInput + +Stack input definition serialized into a release stack. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackInput } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackInput = { + description: "left qualified yahoo", + id: "", + kind: "integer", + label: "", + providedBy: [], + required: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `default` | *models.SyncReconcileResponsePendingPreparedStackDefaultUnion* | :heavy_minus_sign: | N/A | +| `description` | *string* | :heavy_check_mark: | Human-facing helper text. | +| `env` | [models.SyncReconcileResponsePendingPreparedStackEnv](../models/syncreconcileresponsependingpreparedstackenv.md)[] | :heavy_minus_sign: | Runtime env-var mappings for v1 input resolution. | +| `id` | *string* | :heavy_check_mark: | Stable input ID used by CLI/API calls. | +| `kind` | [models.SyncReconcileResponsePendingPreparedStackKind](../models/syncreconcileresponsependingpreparedstackkind.md) | :heavy_check_mark: | Primitive stack input kind. | +| `label` | *string* | :heavy_check_mark: | Human-facing field label. | +| `placeholder` | *string* | :heavy_minus_sign: | Example placeholder shown in UI. | +| `platforms` | [models.SyncReconcileResponsePendingPreparedStackPlatform](../models/syncreconcileresponsependingpreparedstackplatform.md)[] | :heavy_minus_sign: | Platforms where this input applies. | +| `providedBy` | [models.SyncReconcileResponsePendingPreparedStackProvidedBy](../models/syncreconcileresponsependingpreparedstackprovidedby.md)[] | :heavy_check_mark: | Who can provide this value. | +| `required` | *boolean* | :heavy_check_mark: | Whether a resolved value is required before deployment can proceed. | +| `validation` | *models.SyncReconcileResponsePendingPreparedStackValidationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackkind.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackkind.md new file mode 100644 index 000000000..9ecbc3831 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackkind.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackKind + +Primitive stack input kind. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackKind } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackKind = "stringList"; +``` + +## Values + +```typescript +"string" | "secret" | "number" | "integer" | "boolean" | "enum" | "stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacklifecycle.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacklifecycle.md new file mode 100644 index 000000000..266235390 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacklifecycle.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackLifecycle + +Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackLifecycle } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackLifecycle = "frozen"; +``` + +## Values + +```typescript +"frozen" | "live" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagement1.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagement1.md new file mode 100644 index 000000000..2f325b6bb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagement1.md @@ -0,0 +1,26 @@ +# SyncReconcileResponsePendingPreparedStackManagement1 + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackManagement1 } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [ + { + description: "now forager phooey cinder finally whenever restfully ack", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `extend` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagement2.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagement2.md new file mode 100644 index 000000000..2cffb4969 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagement2.md @@ -0,0 +1,27 @@ +# SyncReconcileResponsePendingPreparedStackManagement2 + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackManagement2 } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackManagement2 = { + override: { + "key": [ + { + description: + "incidentally outnumber before till roadway encouragement rightfully", + id: "", + platforms: {}, + }, + ], + "key1": [], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `override` | Record | :heavy_check_mark: | Permission profile that maps resources to permission sets
Key can be "*" for all resources or resource name for specific resource | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagementenum.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagementenum.md new file mode 100644 index 000000000..c5325f486 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagementenum.md @@ -0,0 +1,15 @@ +# SyncReconcileResponsePendingPreparedStackManagementEnum + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackManagementEnum } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackManagementEnum = "auto"; +``` + +## Values + +```typescript +"auto" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagementunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagementunion.md new file mode 100644 index 000000000..7185c1f13 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackmanagementunion.md @@ -0,0 +1,48 @@ +# SyncReconcileResponsePendingPreparedStackManagementUnion + +Management permissions configuration for stack management access + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackManagement1` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackManagement1 = { + extend: { + "key": [], + "key1": [ + { + description: "now forager phooey cinder finally whenever restfully ack", + id: "", + platforms: {}, + }, + ], + }, +}; +``` + +### `models.SyncReconcileResponsePendingPreparedStackManagement2` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackManagement2 = { + override: { + "key": [ + { + description: + "incidentally outnumber before till roadway encouragement rightfully", + id: "", + platforms: {}, + }, + ], + "key1": [], + }, +}; +``` + +### `models.SyncReconcileResponsePendingPreparedStackManagementEnum` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackManagementEnum = + "auto"; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverride.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverride.md new file mode 100644 index 000000000..757c1ba3c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverride.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackOverride + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverride } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverride = { + description: "fatally the equal whimsical for coal bare rowdy flint", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncReconcileResponsePendingPreparedStackOverridePlatforms](../models/syncreconcileresponsependingpreparedstackoverrideplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideaw.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideaw.md new file mode 100644 index 000000000..4e134f249 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideaw.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAw } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackOverrideAwBinding](../models/syncreconcileresponsependingpreparedstackoverrideawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncReconcileResponsePendingPreparedStackOverrideEffect](../models/syncreconcileresponsependingpreparedstackoverrideeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackOverrideAwGrant](../models/syncreconcileresponsependingpreparedstackoverrideawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawbinding.md new file mode 100644 index 000000000..048040bea --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackOverrideAwResource](../models/syncreconcileresponsependingpreparedstackoverrideawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackOverrideAwStack](../models/syncreconcileresponsependingpreparedstackoverrideawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawgrant.md new file mode 100644 index 000000000..120184409 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawresource.md new file mode 100644 index 000000000..c4d75e024 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawresource.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawstack.md new file mode 100644 index 000000000..68720b1a4 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideawstack.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAwStack = { + resources: [], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazure.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazure.md new file mode 100644 index 000000000..c789e7370 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazure.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAzure } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackOverrideAzureBinding](../models/syncreconcileresponsependingpreparedstackoverrideazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackOverrideAzureGrant](../models/syncreconcileresponsependingpreparedstackoverrideazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazurebinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazurebinding.md new file mode 100644 index 000000000..6757aeac6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazurebinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackOverrideAzureResource](../models/syncreconcileresponsependingpreparedstackoverrideazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackOverrideAzureStack](../models/syncreconcileresponsependingpreparedstackoverrideazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazuregrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazuregrant.md new file mode 100644 index 000000000..8f6a56e32 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazuregrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazureresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazureresource.md new file mode 100644 index 000000000..c903c5626 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazureresource.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazurestack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazurestack.md new file mode 100644 index 000000000..96cfa1cd5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideazurestack.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackOverrideAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideconditionresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideconditionresource.md new file mode 100644 index 000000000..18ed01085 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideconditionresource.md @@ -0,0 +1,22 @@ +# SyncReconcileResponsePendingPreparedStackOverrideConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideConditionResource = + { + expression: "", + title: "", + }; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideconditionstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideconditionstack.md new file mode 100644 index 000000000..6afea4986 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideconditionstack.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackOverrideConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideeffect.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideeffect.md new file mode 100644 index 000000000..62cfaf50e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideeffect.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackOverrideEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideEffect } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcp.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcp.md new file mode 100644 index 000000000..348558752 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcp.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackOverrideGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideGcp } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackOverrideGcpBinding](../models/syncreconcileresponsependingpreparedstackoverridegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackOverrideGcpGrant](../models/syncreconcileresponsependingpreparedstackoverridegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpbinding.md new file mode 100644 index 000000000..48c6ab40c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackOverrideGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackOverrideGcpResource](../models/syncreconcileresponsependingpreparedstackoverridegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackOverrideGcpStack](../models/syncreconcileresponsependingpreparedstackoverridegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpgrant.md new file mode 100644 index 000000000..089b39a57 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackOverrideGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpresource.md new file mode 100644 index 000000000..4838c96df --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpresource.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackOverrideGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `condition` | *models.SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpstack.md new file mode 100644 index 000000000..aef999799 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridegcpstack.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackOverrideGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverrideGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverrideGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `condition` | *models.SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideplatforms.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideplatforms.md new file mode 100644 index 000000000..00892edcc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideplatforms.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackOverridePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackOverridePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackOverridePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `aws` | [models.SyncReconcileResponsePendingPreparedStackOverrideAw](../models/syncreconcileresponsependingpreparedstackoverrideaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncReconcileResponsePendingPreparedStackOverrideAzure](../models/syncreconcileresponsependingpreparedstackoverrideazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncReconcileResponsePendingPreparedStackOverrideGcp](../models/syncreconcileresponsependingpreparedstackoverridegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideresourceconditionunion.md new file mode 100644 index 000000000..b05a0b348 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideresourceconditionunion.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackOverrideConditionResource` + +```typescript +const value: + models.SyncReconcileResponsePendingPreparedStackOverrideConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridestackconditionunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridestackconditionunion.md new file mode 100644 index 000000000..dd0bf76f6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverridestackconditionunion.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackOverrideConditionStack` + +```typescript +const value: + models.SyncReconcileResponsePendingPreparedStackOverrideConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideunion.md new file mode 100644 index 000000000..48ff9a61e --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackoverrideunion.md @@ -0,0 +1,22 @@ +# SyncReconcileResponsePendingPreparedStackOverrideUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackOverride` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackOverride = { + description: "fatally the equal whimsical for coal bare rowdy flint", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackpermissions.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackpermissions.md new file mode 100644 index 000000000..3f7d2b75c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackpermissions.md @@ -0,0 +1,33 @@ +# SyncReconcileResponsePendingPreparedStackPermissions + +Combined permissions configuration that contains both profiles and management + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackPermissions } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackPermissions = { + profiles: { + "key": { + "key": [ + "", + ], + "key1": [], + "key2": [], + }, + "key1": { + "key": [], + "key1": [], + "key2": [], + }, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `management` | *models.SyncReconcileResponsePendingPreparedStackManagementUnion* | :heavy_minus_sign: | Management permissions configuration for stack management access | +| `profiles` | Record> | :heavy_check_mark: | Permission profiles that define access control for compute services
Key is the profile name, value is the permission configuration | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackplatform.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackplatform.md new file mode 100644 index 000000000..f37fe48c2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackplatform.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackPlatform = "azure"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofile.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofile.md new file mode 100644 index 000000000..c93484e64 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofile.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackProfile + +A permission set that can be applied across different cloud platforms + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfile } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfile = { + description: + "catalyze consequently forenenst smuggle pomelo stealthily keenly", + id: "", + platforms: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *string* | :heavy_check_mark: | Human-readable description of what this permission set allows | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the permission set (e.g., "storage/data-read") | +| `platforms` | [models.SyncReconcileResponsePendingPreparedStackProfilePlatforms](../models/syncreconcileresponsependingpreparedstackprofileplatforms.md) | :heavy_check_mark: | Platform-specific permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileaw.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileaw.md new file mode 100644 index 000000000..84c3713ea --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileaw.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackProfileAw + +AWS-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAw } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAw = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackProfileAwBinding](../models/syncreconcileresponsependingpreparedstackprofileawbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `effect` | [models.SyncReconcileResponsePendingPreparedStackProfileEffect](../models/syncreconcileresponsependingpreparedstackprofileeffect.md) | :heavy_minus_sign: | IAM effect. Defaults to Allow. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackProfileAwGrant](../models/syncreconcileresponsependingpreparedstackprofileawgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawbinding.md new file mode 100644 index 000000000..f1f6be2d7 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackProfileAwBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAwBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAwBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackProfileAwResource](../models/syncreconcileresponsependingpreparedstackprofileawresource.md) | :heavy_minus_sign: | AWS-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackProfileAwStack](../models/syncreconcileresponsependingpreparedstackprofileawstack.md) | :heavy_minus_sign: | AWS-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawgrant.md new file mode 100644 index 000000000..17dd477fa --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackProfileAwGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAwGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAwGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawresource.md new file mode 100644 index 000000000..eec4079f2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawresource.md @@ -0,0 +1,24 @@ +# SyncReconcileResponsePendingPreparedStackProfileAwResource + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAwResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAwResource = { + resources: [ + "", + "", + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawstack.md new file mode 100644 index 000000000..e5c2bb271 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileawstack.md @@ -0,0 +1,22 @@ +# SyncReconcileResponsePendingPreparedStackProfileAwStack + +AWS-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAwStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAwStack = { + resources: [ + "", + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `condition` | Record> | :heavy_minus_sign: | Optional condition for additional filtering (rare) | +| `resources` | *string*[] | :heavy_check_mark: | Resource ARNs to bind to | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazure.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazure.md new file mode 100644 index 000000000..c74fce847 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazure.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackProfileAzure + +Azure-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAzure } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAzure = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackProfileAzureBinding](../models/syncreconcileresponsependingpreparedstackprofileazurebinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackProfileAzureGrant](../models/syncreconcileresponsependingpreparedstackprofileazuregrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazurebinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazurebinding.md new file mode 100644 index 000000000..ee42047bd --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazurebinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackProfileAzureBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAzureBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAzureBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackProfileAzureResource](../models/syncreconcileresponsependingpreparedstackprofileazureresource.md) | :heavy_minus_sign: | Azure-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackProfileAzureStack](../models/syncreconcileresponsependingpreparedstackprofileazurestack.md) | :heavy_minus_sign: | Azure-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazuregrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazuregrant.md new file mode 100644 index 000000000..7c6ef36cc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazuregrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackProfileAzureGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAzureGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAzureGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazureresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazureresource.md new file mode 100644 index 000000000..c73029f40 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazureresource.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackProfileAzureResource + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAzureResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAzureResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazurestack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazurestack.md new file mode 100644 index 000000000..31a6357fc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileazurestack.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackProfileAzureStack + +Azure-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileAzureStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileAzureStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `scope` | *string* | :heavy_check_mark: | Scope (subscription/resource group/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileconditionresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileconditionresource.md new file mode 100644 index 000000000..da986d4b3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileconditionresource.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackProfileConditionResource + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileConditionResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileConditionResource = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileconditionstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileconditionstack.md new file mode 100644 index 000000000..cf1cc7b3c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileconditionstack.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackProfileConditionStack + +GCP IAM condition + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileConditionStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileConditionStack = { + expression: "", + title: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `expression` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileeffect.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileeffect.md new file mode 100644 index 000000000..35e6000a3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileeffect.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackProfileEffect + +IAM effect. Defaults to Allow. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileEffect } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileEffect = "Allow"; +``` + +## Values + +```typescript +"Allow" | "Deny" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcp.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcp.md new file mode 100644 index 000000000..01d48ff06 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcp.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackProfileGcp + +GCP-specific platform permission configuration + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileGcp } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileGcp = { + binding: {}, + grant: {}, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `binding` | [models.SyncReconcileResponsePendingPreparedStackProfileGcpBinding](../models/syncreconcileresponsependingpreparedstackprofilegcpbinding.md) | :heavy_check_mark: | Generic binding configuration for permissions | +| `description` | *string* | :heavy_minus_sign: | Short admin-facing description of why this entry exists. | +| `grant` | [models.SyncReconcileResponsePendingPreparedStackProfileGcpGrant](../models/syncreconcileresponsependingpreparedstackprofilegcpgrant.md) | :heavy_check_mark: | Grant permissions for a specific cloud platform | +| `label` | *string* | :heavy_minus_sign: | Stable admin-facing label for this permission entry. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpbinding.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpbinding.md new file mode 100644 index 000000000..15ed94d2b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpbinding.md @@ -0,0 +1,18 @@ +# SyncReconcileResponsePendingPreparedStackProfileGcpBinding + +Generic binding configuration for permissions + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileGcpBinding } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileGcpBinding = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `resource` | [models.SyncReconcileResponsePendingPreparedStackProfileGcpResource](../models/syncreconcileresponsependingpreparedstackprofilegcpresource.md) | :heavy_minus_sign: | GCP-specific binding specification | +| `stack` | [models.SyncReconcileResponsePendingPreparedStackProfileGcpStack](../models/syncreconcileresponsependingpreparedstackprofilegcpstack.md) | :heavy_minus_sign: | GCP-specific binding specification | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpgrant.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpgrant.md new file mode 100644 index 000000000..47acd8b05 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpgrant.md @@ -0,0 +1,21 @@ +# SyncReconcileResponsePendingPreparedStackProfileGcpGrant + +Grant permissions for a specific cloud platform + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileGcpGrant } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileGcpGrant = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `actions` | *string*[] | :heavy_minus_sign: | AWS IAM actions (only for AWS) | +| `dataActions` | *string*[] | :heavy_minus_sign: | Azure actions (only for Azure) | +| `permissions` | *string*[] | :heavy_minus_sign: | GCP permissions that require an exact residual custom role. | +| `predefinedRoles` | *string*[] | :heavy_minus_sign: | Provider predefined roles to bind directly. | +| `residualPermissions` | *string*[] | :heavy_minus_sign: | GCP residual custom permissions to pair with predefined roles. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpresource.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpresource.md new file mode 100644 index 000000000..535fa9dda --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpresource.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackProfileGcpResource + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileGcpResource } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileGcpResource = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `condition` | *models.SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpstack.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpstack.md new file mode 100644 index 000000000..2060f2306 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilegcpstack.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackProfileGcpStack + +GCP-specific binding specification + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfileGcpStack } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfileGcpStack = { + scope: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `condition` | *models.SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion* | :heavy_minus_sign: | N/A | +| `scope` | *string* | :heavy_check_mark: | Scope (project/resource level) | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileplatforms.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileplatforms.md new file mode 100644 index 000000000..b301b80a9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileplatforms.md @@ -0,0 +1,19 @@ +# SyncReconcileResponsePendingPreparedStackProfilePlatforms + +Platform-specific permission configurations + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProfilePlatforms } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProfilePlatforms = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `aws` | [models.SyncReconcileResponsePendingPreparedStackProfileAw](../models/syncreconcileresponsependingpreparedstackprofileaw.md)[] | :heavy_minus_sign: | AWS permission configurations | +| `azure` | [models.SyncReconcileResponsePendingPreparedStackProfileAzure](../models/syncreconcileresponsependingpreparedstackprofileazure.md)[] | :heavy_minus_sign: | Azure permission configurations | +| `gcp` | [models.SyncReconcileResponsePendingPreparedStackProfileGcp](../models/syncreconcileresponsependingpreparedstackprofilegcp.md)[] | :heavy_minus_sign: | GCP permission configurations | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileresourceconditionunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileresourceconditionunion.md new file mode 100644 index 000000000..920c8cb27 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileresourceconditionunion.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackProfileConditionResource` + +```typescript +const value: + models.SyncReconcileResponsePendingPreparedStackProfileConditionResource = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilestackconditionunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilestackconditionunion.md new file mode 100644 index 000000000..0816ea365 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofilestackconditionunion.md @@ -0,0 +1,20 @@ +# SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackProfileConditionStack` + +```typescript +const value: + models.SyncReconcileResponsePendingPreparedStackProfileConditionStack = { + expression: "", + title: "", + }; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileunion.md new file mode 100644 index 000000000..d1c7666b3 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprofileunion.md @@ -0,0 +1,23 @@ +# SyncReconcileResponsePendingPreparedStackProfileUnion + +Reference to a permission set - either by name or inline definition + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackProfile` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackProfile = { + description: + "catalyze consequently forenenst smuggle pomelo stealthily keenly", + id: "", + platforms: {}, +}; +``` + +### `string` + +```typescript +const value: string = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprovidedby.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprovidedby.md new file mode 100644 index 000000000..8981782f2 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackprovidedby.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackProvidedBy + +Who can provide a stack input value. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackProvidedBy } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackProvidedBy = "developer"; +``` + +## Values + +```typescript +"developer" | "deployer" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackresources.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackresources.md new file mode 100644 index 000000000..a2540b86c --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackresources.md @@ -0,0 +1,26 @@ +# SyncReconcileResponsePendingPreparedStackResources + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackResources } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackResources = { + config: { + id: "", + type: "", + }, + dependencies: [], + lifecycle: "frozen", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileResponsePendingPreparedStackConfig](../models/syncreconcileresponsependingpreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileResponsePendingPreparedStackDependency](../models/syncreconcileresponsependingpreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncReconcileResponsePendingPreparedStackLifecycle](../models/syncreconcileresponsependingpreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacksupportedplatform.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacksupportedplatform.md new file mode 100644 index 000000000..5f38420ce --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacksupportedplatform.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackSupportedPlatform + +Represents the target cloud platform. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackSupportedPlatform } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackSupportedPlatform = "test"; +``` + +## Values + +```typescript +"aws" | "gcp" | "azure" | "kubernetes" | "machines" | "local" | "test" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeboolean.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeboolean.md new file mode 100644 index 000000000..a51f12dc1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeboolean.md @@ -0,0 +1,15 @@ +# SyncReconcileResponsePendingPreparedStackTypeBoolean + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackTypeBoolean } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackTypeBoolean = "boolean"; +``` + +## Values + +```typescript +"boolean" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeenvenum.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeenvenum.md new file mode 100644 index 000000000..bb42e1fcc --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeenvenum.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackTypeEnvEnum + +Environment variable handling for a stack input mapping. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackTypeEnvEnum } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackTypeEnvEnum = "plain"; +``` + +## Values + +```typescript +"plain" | "secret" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypenumber.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypenumber.md new file mode 100644 index 000000000..06cb41340 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypenumber.md @@ -0,0 +1,15 @@ +# SyncReconcileResponsePendingPreparedStackTypeNumber + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackTypeNumber } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackTypeNumber = "number"; +``` + +## Values + +```typescript +"number" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypestring.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypestring.md new file mode 100644 index 000000000..0a6d60371 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypestring.md @@ -0,0 +1,15 @@ +# SyncReconcileResponsePendingPreparedStackTypeString + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackTypeString } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackTypeString = "string"; +``` + +## Values + +```typescript +"string" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypestringlist.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypestringlist.md new file mode 100644 index 000000000..01f0c18c1 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypestringlist.md @@ -0,0 +1,16 @@ +# SyncReconcileResponsePendingPreparedStackTypeStringList + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackTypeStringList } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackTypeStringList = + "stringList"; +``` + +## Values + +```typescript +"stringList" +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeunion.md new file mode 100644 index 000000000..858a2ab63 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstacktypeunion.md @@ -0,0 +1,17 @@ +# SyncReconcileResponsePendingPreparedStackTypeUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackTypeEnvEnum` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackTypeEnvEnum = + "plain"; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackunion.md new file mode 100644 index 000000000..e1b545a6a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackunion.md @@ -0,0 +1,33 @@ +# SyncReconcileResponsePendingPreparedStackUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStack` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStack = { + id: "", + resources: { + "key": { + config: { + id: "", + type: "", + }, + dependencies: [ + { + id: "", + type: "", + }, + ], + lifecycle: "live", + }, + }, +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackvalidation.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackvalidation.md new file mode 100644 index 000000000..8cb4dbda6 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackvalidation.md @@ -0,0 +1,25 @@ +# SyncReconcileResponsePendingPreparedStackValidation + +Portable stack input validation constraints. + +## Example Usage + +```typescript +import { SyncReconcileResponsePendingPreparedStackValidation } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponsePendingPreparedStackValidation = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Semantic format hint such as url. | +| `max` | *string* | :heavy_minus_sign: | Maximum number. | +| `maxItems` | *number* | :heavy_minus_sign: | Maximum string-list items. | +| `maxLength` | *number* | :heavy_minus_sign: | Maximum string length. | +| `min` | *string* | :heavy_minus_sign: | Minimum number. | +| `minItems` | *number* | :heavy_minus_sign: | Minimum string-list items. | +| `minLength` | *number* | :heavy_minus_sign: | Minimum string length. | +| `pattern` | *string* | :heavy_minus_sign: | Portable whole-value regex pattern. | +| `values` | *string*[] | :heavy_minus_sign: | Allowed string enum values. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackvalidationunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackvalidationunion.md new file mode 100644 index 000000000..17ca167ec --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsependingpreparedstackvalidationunion.md @@ -0,0 +1,16 @@ +# SyncReconcileResponsePendingPreparedStackValidationUnion + + +## Supported Types + +### `models.SyncReconcileResponsePendingPreparedStackValidation` + +```typescript +const value: models.SyncReconcileResponsePendingPreparedStackValidation = {}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsautoscale.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsautoscale.md index 5c8dbdcfc..fb40a53fd 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsautoscale.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsautoscale.md @@ -16,7 +16,8 @@ let value: SyncReconcileResponsePoolsAutoscale = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.SyncReconcileResponseFailureDomainsUnion2* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `max` | *number* | :heavy_check_mark: | Maximum machine count. | | `min` | *number* | :heavy_check_mark: | Minimum machine count. | -| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"autoscale"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsfixed.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsfixed.md index c81e70fbf..c95d66718 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsfixed.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsepoolsfixed.md @@ -15,6 +15,7 @@ let value: SyncReconcileResponsePoolsFixed = { | Field | Type | Required | Description | | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `failureDomains` | *models.SyncReconcileResponseFailureDomainsUnion1* | :heavy_minus_sign: | N/A | | `machine` | *string* | :heavy_minus_sign: | Provider machine type selected for this deployment. | | `machines` | *number* | :heavy_check_mark: | Number of machines to run. | -| `mode` | *"fixed"* | :heavy_check_mark: | N/A | \ No newline at end of file +| `mode` | *"fixed"* | :heavy_check_mark: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsepreparedstackresources.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsepreparedstackresources.md index 996b8ad22..5fb18ddb6 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcileresponsepreparedstackresources.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsepreparedstackresources.md @@ -22,9 +22,10 @@ let value: SyncReconcileResponsePreparedStackResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncReconcileResponsePreparedStackConfig](../models/syncreconcileresponsepreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncReconcileResponsePreparedStackDependency](../models/syncreconcileresponsepreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncReconcileResponsePreparedStackLifecycle](../models/syncreconcileresponsepreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileResponsePreparedStackConfig](../models/syncreconcileresponsepreparedstackconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileResponsePreparedStackDependency](../models/syncreconcileresponsepreparedstackdependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncReconcileResponsePreparedStackLifecycle](../models/syncreconcileresponsepreparedstacklifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponseruntimemetadata.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponseruntimemetadata.md index 0ced73a05..c79f99665 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcileresponseruntimemetadata.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponseruntimemetadata.md @@ -18,5 +18,7 @@ let value: SyncReconcileResponseRuntimeMetadata = {}; | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lastSyncedEnvVarsHash` | *string* | :heavy_minus_sign: | Hash of the environment variables snapshot that was last synced to the vault
Used to avoid redundant sync operations during incremental deployment | | `lastSyncedSecretNames` | *string*[] | :heavy_minus_sign: | Exact vault keys owned by the deployment secret synchronizer. This
inventory lets a later snapshot delete removed keys without listing or
touching unrelated values in the same vault. | +| `pendingPreparedStack` | *models.SyncReconcileResponsePendingPreparedStackUnion* | :heavy_minus_sign: | N/A | | `preparedStack` | *models.SyncReconcileResponsePreparedStackUnion* | :heavy_minus_sign: | N/A | -| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | \ No newline at end of file +| `registryAccessGranted` | *boolean* | :heavy_minus_sign: | Whether cross-account registry access has been successfully granted.
Set to true after the manager successfully sets the ECR/GAR repo policy
for this deployment's target account. Prevents redundant API calls on
every reconcile tick. | +| `setupUpdateAuthorization` | *models.SyncReconcileResponseSetupUpdateAuthorizationUnion* | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsesetupupdateauthorization.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsesetupupdateauthorization.md new file mode 100644 index 000000000..1727e5c8a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsesetupupdateauthorization.md @@ -0,0 +1,31 @@ +# SyncReconcileResponseSetupUpdateAuthorization + +One-shot authority for a setup re-import to replace setup-owned resources. + +## Example Usage + +```typescript +import { SyncReconcileResponseSetupUpdateAuthorization } from "@alienplatform/platform-api/models"; + +let value: SyncReconcileResponseSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 91270, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `baselineFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection from the last successful deployment. | +| `nonce` | *string* | :heavy_check_mark: | Unique revision used by persistence layers for compare-and-swap updates. | +| `releaseId` | *string* | :heavy_check_mark: | Release whose stack was prepared by setup. | +| `setupFingerprint` | *string* | :heavy_check_mark: | Exact setup artifact revision that authored this authority. | +| `setupFingerprintVersion` | *number* | :heavy_check_mark: | Setup fingerprint contract version. | +| `setupTarget` | *string* | :heavy_check_mark: | Stable setup target recorded on the imported deployment. | +| `targetFrozenDigest` | *string* | :heavy_check_mark: | Frozen resource projection prepared by the setup re-import. | diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsesetupupdateauthorizationunion.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsesetupupdateauthorizationunion.md new file mode 100644 index 000000000..5eac6a54b --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsesetupupdateauthorizationunion.md @@ -0,0 +1,24 @@ +# SyncReconcileResponseSetupUpdateAuthorizationUnion + + +## Supported Types + +### `models.SyncReconcileResponseSetupUpdateAuthorization` + +```typescript +const value: models.SyncReconcileResponseSetupUpdateAuthorization = { + baselineFrozenDigest: "", + nonce: "", + releaseId: "", + setupFingerprint: "", + setupFingerprintVersion: 91270, + setupTarget: "", + targetFrozenDigest: "", +}; +``` + +### `any` + +```typescript +const value: any = ""; +``` diff --git a/client-sdks/platform/typescript/docs/models/syncreconcileresponsetargetreleaseresources.md b/client-sdks/platform/typescript/docs/models/syncreconcileresponsetargetreleaseresources.md index 06c7b898e..34fc152ac 100644 --- a/client-sdks/platform/typescript/docs/models/syncreconcileresponsetargetreleaseresources.md +++ b/client-sdks/platform/typescript/docs/models/syncreconcileresponsetargetreleaseresources.md @@ -17,9 +17,10 @@ let value: SyncReconcileResponseTargetReleaseResources = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config` | [models.SyncReconcileResponseTargetReleaseConfig](../models/syncreconcileresponsetargetreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | -| `dependencies` | [models.SyncReconcileResponseTargetReleaseDependency](../models/syncreconcileresponsetargetreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | -| `lifecycle` | [models.SyncReconcileResponseTargetReleaseLifecycle](../models/syncreconcileresponsetargetreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | -| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config` | [models.SyncReconcileResponseTargetReleaseConfig](../models/syncreconcileresponsetargetreleaseconfig.md) | :heavy_check_mark: | Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. | +| `dependencies` | [models.SyncReconcileResponseTargetReleaseDependency](../models/syncreconcileresponsetargetreleasedependency.md)[] | :heavy_check_mark: | Additional dependencies for this resource beyond those defined in the resource itself.
The total dependencies are: resource.get_dependencies() + this list | +| `enabledWhen` | *string* | :heavy_minus_sign: | Id of the boolean stack input that decides whether this resource is
created at all. `None` means always create it.

Set by `.enabled(input)` in the SDK. Setup emitters render the resource
conditionally on the matching template variable, so a deployer who says no
never gets the resource, its outputs, or anything derived from it. | +| `lifecycle` | [models.SyncReconcileResponseTargetReleaseLifecycle](../models/syncreconcileresponsetargetreleaselifecycle.md) | :heavy_check_mark: | Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. | +| `remoteAccess` | *boolean* | :heavy_minus_sign: | Enable remote bindings for this resource (BYOB use case).
When true, binding params are synced to StackState's `remote_binding_params`.
Default: false (prevents sensitive data in synced state). | diff --git a/client-sdks/platform/typescript/docs/models/targetconfig.md b/client-sdks/platform/typescript/docs/models/targetconfig.md index f5d85637d..a2475e613 100644 --- a/client-sdks/platform/typescript/docs/models/targetconfig.md +++ b/client-sdks/platform/typescript/docs/models/targetconfig.md @@ -31,6 +31,7 @@ let value: TargetConfig = { | `domainMetadata` | *models.SyncReconcileResponseDomainMetadataUnion* | :heavy_minus_sign: | N/A | | `environmentVariables` | [models.SyncReconcileResponseEnvironmentVariables](../models/syncreconcileresponseenvironmentvariables.md) | :heavy_check_mark: | Snapshot of environment variables at a point in time | | `externalBindings` | Record | :heavy_minus_sign: | Map from resource ID to external binding.

Validated at runtime: binding type must match resource type. | +| `inputValues` | Record | :heavy_minus_sign: | Deployer-provided stack input values, keyed by input id. A resource
gated with `.enabled(input)` and a Live lifecycle follows these
values; a missing key falls back to the input's declared boolean
default. Suppliers must not place secret-kind input values here:
this map serializes and debug-prints unredacted. | | `labelDomain` | *string* | :heavy_minus_sign: | DNS-style label domain used for Kubernetes resource ownership labels.

Defaults to `alien.dev` when absent. Whitelabeled Operator builds set this
so generated workloads and optional log collectors share the same label
namespace. | | `managementConfig` | *models.SyncReconcileResponseManagementConfigUnion* | :heavy_minus_sign: | N/A | | `managerUrl` | *string* | :heavy_minus_sign: | Manager base URL (e.g., "https://manager.alien.dev").

The manager IS the container registry — its `/v2/` endpoint serves as
the OCI Distribution API. Controllers derive the proxy host from this
to configure pull auth (RegistryCredentials, imagePullSecrets).

When None (e.g., `alien dev`), controllers use image URIs as-is. | @@ -39,4 +40,4 @@ let value: TargetConfig = { | `observeAllNamespaces` | *boolean* | :heavy_minus_sign: | When true the observe pass reports raw resources across every namespace
(cluster scope); otherwise it stays within the operator's own namespace.
The label selector, if any, still filters within whichever scope applies.
Ignored by cloud observers. | | `observeLabelSelector` | *string* | :heavy_minus_sign: | Kubernetes label selector that narrows which raw resources the observe
pass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes
everything in the namespace. Ignored by cloud observers. | | `publicEndpoints` | Record> | :heavy_minus_sign: | Public endpoint URLs for exposed resources (optional override).

Use this only when a caller already knows the public URL. Managed public
endpoint flows should prefer `domain_metadata` plus controller-reported
load balancer outputs so DNS, certificate renewal, and route readiness
stay tied to the resource state.

If not set, platforms determine public endpoint URLs from other sources:
- Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS
- Local: `http://localhost:{allocated_port}`
- Custom or disabled exposure: no public endpoint URL unless a controller reports one

Outer key: resource ID. Inner key: endpoint name. Value: public URL. | -| `stackSettings` | [models.SyncReconcileResponseStackSettings](../models/syncreconcileresponsestacksettings.md) | :heavy_minus_sign: | User-customizable deployment settings specified at deploy time.

These settings are provided by the customer via CloudFormation parameters,
Terraform attributes, CLI flags, or Helm values. They customize how the
deployment runs and what capabilities are enabled.

**Key distinction**: StackSettings is user-customizable, while ManagementConfig
is platform-derived (from the Manager's ServiceAccount). | \ No newline at end of file +| `stackSettings` | [models.SyncReconcileResponseStackSettings](../models/syncreconcileresponsestacksettings.md) | :heavy_minus_sign: | User-customizable deployment settings specified at deploy time.

These settings are provided by the customer via CloudFormation parameters,
Terraform attributes, CLI flags, or Helm values. They customize how the
deployment runs and what capabilities are enabled.

**Key distinction**: StackSettings is user-customizable, while ManagementConfig
is platform-derived (from the Manager's ServiceAccount). | diff --git a/client-sdks/platform/typescript/docs/models/updatedebugsessionrequest.md b/client-sdks/platform/typescript/docs/models/updatedebugsessionrequest.md index d180e1343..6e9f53909 100644 --- a/client-sdks/platform/typescript/docs/models/updatedebugsessionrequest.md +++ b/client-sdks/platform/typescript/docs/models/updatedebugsessionrequest.md @@ -10,8 +10,7 @@ let value: UpdateDebugSessionRequest = {}; ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| `state` | [models.DebugSessionState](../models/debugsessionstate.md) | :heavy_minus_sign: | N/A | -| `error` | Record | :heavy_minus_sign: | N/A | -| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `state` | [models.DebugSessionState](../models/debugsessionstate.md) | :heavy_minus_sign: | N/A | +| `error` | [models.UpdateDebugSessionRequestError](../models/updatedebugsessionrequesterror.md) | :heavy_minus_sign: | Canonical error container that provides a structured way to represent errors
with rich metadata including error codes, human-readable messages, context,
and chaining capabilities for error propagation.

This struct is designed to be both machine-readable and user-friendly,
supporting serialization for API responses and detailed error reporting
in distributed systems. | diff --git a/client-sdks/platform/typescript/docs/models/updatedebugsessionrequesterror.md b/client-sdks/platform/typescript/docs/models/updatedebugsessionrequesterror.md new file mode 100644 index 000000000..962082cd8 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/updatedebugsessionrequesterror.md @@ -0,0 +1,34 @@ +# UpdateDebugSessionRequestError + +Canonical error container that provides a structured way to represent errors +with rich metadata including error codes, human-readable messages, context, +and chaining capabilities for error propagation. + +This struct is designed to be both machine-readable and user-friendly, +supporting serialization for API responses and detailed error reporting +in distributed systems. + +## Example Usage + +```typescript +import { UpdateDebugSessionRequestError } from "@alienplatform/platform-api/models"; + +let value: UpdateDebugSessionRequestError = { + code: "", + internal: true, + message: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `code` | *string* | :heavy_check_mark: | A unique identifier for the type of error.

This should be a short, machine-readable string that can be used
by clients to programmatically handle different error types.
Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" | +| `context` | *any* | :heavy_minus_sign: | Additional diagnostic information about the error context.

This optional field can contain structured data providing more details
about the error, such as validation errors, request parameters that
caused the issue, or other relevant context information. | +| `hint` | *string* | :heavy_minus_sign: | Optional human-facing remediation hint. | +| `httpStatusCode` | *number* | :heavy_minus_sign: | HTTP status code for this error.

Used when converting the error to an HTTP response. If None, falls back to
the error type's default status code or 500. | +| `internal` | *boolean* | :heavy_check_mark: | Indicates if this is an internal error that should not be exposed to users.

When `true`, this error contains sensitive information or implementation
details that should not be shown to end-users. Such errors should be
logged for debugging but replaced with generic error messages in responses. | +| `message` | *string* | :heavy_check_mark: | Human-readable error message.

This message should be clear and actionable for developers or end-users,
providing context about what went wrong and potentially how to fix it. | +| `retryable` | *boolean* | :heavy_minus_sign: | Indicates whether the operation that caused the error should be retried.

When `true`, the error is transient and the operation might succeed
if attempted again. When `false`, retrying the same operation is
unlikely to succeed without changes. | +| `source` | *any* | :heavy_minus_sign: | The underlying error that caused this error, creating an error chain.

This allows for proper error propagation and debugging by maintaining
the full context of how an error occurred through multiple layers
of an application. | diff --git a/client-sdks/platform/typescript/docs/models/updatedeploymentsetuppolicy.md b/client-sdks/platform/typescript/docs/models/updatedeploymentsetuppolicy.md index 3cbd81fea..fc16c381d 100644 --- a/client-sdks/platform/typescript/docs/models/updatedeploymentsetuppolicy.md +++ b/client-sdks/platform/typescript/docs/models/updatedeploymentsetuppolicy.md @@ -10,7 +10,9 @@ import { UpdateDeploymentSetupPolicy } from "@alienplatform/platform-api/models" let value: UpdateDeploymentSetupPolicy = { policy: { allowedPlatforms: [], - allowedSetupMethods: [], + allowedSetupMethods: [ + "google-oauth", + ], }, }; ``` @@ -20,4 +22,4 @@ let value: UpdateDeploymentSetupPolicy = { | Field | Type | Required | Description | | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | | `policy` | [models.DeploymentSetupPolicy](../models/deploymentsetuppolicy.md) | :heavy_check_mark: | N/A | -| `metadata` | Record | :heavy_minus_sign: | N/A | \ No newline at end of file +| `metadata` | Record | :heavy_minus_sign: | N/A | diff --git a/client-sdks/platform/typescript/docs/models/updateworkspacesettingsrequest.md b/client-sdks/platform/typescript/docs/models/updateworkspacesettingsrequest.md new file mode 100644 index 000000000..a49a4e2f5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/updateworkspacesettingsrequest.md @@ -0,0 +1,16 @@ +# UpdateWorkspaceSettingsRequest + +## Example Usage + +```typescript +import { UpdateWorkspaceSettingsRequest } from "@alienplatform/platform-api/models"; + +let value: UpdateWorkspaceSettingsRequest = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `debugPermissionMode` | [models.UpdateWorkspaceSettingsRequestDebugPermissionMode](../models/updateworkspacesettingsrequestdebugpermissionmode.md) | :heavy_minus_sign: | Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. | +| `enabled` | *boolean* | :heavy_minus_sign: | Turn the ai-agent on (`true`) or off (`false`) for this workspace. | diff --git a/client-sdks/platform/typescript/docs/models/updateworkspacesettingsrequestdebugpermissionmode.md b/client-sdks/platform/typescript/docs/models/updateworkspacesettingsrequestdebugpermissionmode.md new file mode 100644 index 000000000..f5b4c241a --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/updateworkspacesettingsrequestdebugpermissionmode.md @@ -0,0 +1,17 @@ +# UpdateWorkspaceSettingsRequestDebugPermissionMode + +Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + +## Example Usage + +```typescript +import { UpdateWorkspaceSettingsRequestDebugPermissionMode } from "@alienplatform/platform-api/models"; + +let value: UpdateWorkspaceSettingsRequestDebugPermissionMode = "auto"; +``` + +## Values + +```typescript +"auto" | "ask" +``` diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitation.md b/client-sdks/platform/typescript/docs/models/workspaceinvitation.md new file mode 100644 index 000000000..1aacb3244 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitation.md @@ -0,0 +1,33 @@ +# WorkspaceInvitation + +## Example Usage + +```typescript +import { WorkspaceInvitation } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInvitation = { + id: "winv_DsgltMIFV0GmqtxV5NYTtrknrna", + email: "Lane.Wolff@yahoo.com", + role: "workspace.member", + status: "expired", + deliveryStatus: "sent", + expiresAt: new Date("2026-06-18T15:21:24.905Z"), + lastSentAt: new Date("2024-12-31T09:24:38.956Z"), + createdAt: new Date("2026-03-05T13:06:57.242Z"), + inviteUrl: "https://impractical-perfection.org/", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace invitation. | winv_DsgltMIFV0GmqtxV5NYTtrknrna | +| `email` | *string* | :heavy_check_mark: | N/A | | +| `role` | [models.WorkspaceRole](../models/workspacerole.md) | :heavy_check_mark: | Role for workspace-scoped service accounts | workspace.member | +| `status` | [models.WorkspaceInvitationStatus](../models/workspaceinvitationstatus.md) | :heavy_check_mark: | N/A | | +| `deliveryStatus` | [models.DeliveryStatus](../models/deliverystatus.md) | :heavy_check_mark: | N/A | | +| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `lastSentAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `inviteUrl` | *string* | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitationpreview.md b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreview.md new file mode 100644 index 000000000..4ce18dcbb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreview.md @@ -0,0 +1,36 @@ +# WorkspaceInvitationPreview + +## Example Usage + +```typescript +import { WorkspaceInvitationPreview } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInvitationPreview = { + kind: "link", + workspace: { + id: "ws_It13CUaGEhLLAB87simX0", + name: "", + logoUrl: "https://deficient-draft.com/", + }, + inviter: { + name: "", + image: "https://grandiose-self-confidence.biz", + }, + role: "workspace.member", + expiresAt: new Date("2024-01-12T23:31:33.131Z"), + state: "revoked", + emailHint: "", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `kind` | [models.WorkspaceInvitationPreviewKind](../models/workspaceinvitationpreviewkind.md) | :heavy_check_mark: | N/A | | +| `workspace` | [models.WorkspaceInvitationPreviewWorkspace](../models/workspaceinvitationpreviewworkspace.md) | :heavy_check_mark: | N/A | | +| `inviter` | [models.Inviter](../models/inviter.md) | :heavy_check_mark: | N/A | | +| `role` | [models.WorkspaceRole](../models/workspacerole.md) | :heavy_check_mark: | Role for workspace-scoped service accounts | workspace.member | +| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `state` | [models.WorkspaceInvitationPreviewState](../models/workspaceinvitationpreviewstate.md) | :heavy_check_mark: | N/A | | +| `emailHint` | *string* | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewkind.md b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewkind.md new file mode 100644 index 000000000..b5a808293 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewkind.md @@ -0,0 +1,15 @@ +# WorkspaceInvitationPreviewKind + +## Example Usage + +```typescript +import { WorkspaceInvitationPreviewKind } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInvitationPreviewKind = "email"; +``` + +## Values + +```typescript +"email" | "link" +``` diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewstate.md b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewstate.md new file mode 100644 index 000000000..d706bc7c9 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewstate.md @@ -0,0 +1,15 @@ +# WorkspaceInvitationPreviewState + +## Example Usage + +```typescript +import { WorkspaceInvitationPreviewState } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInvitationPreviewState = "active"; +``` + +## Values + +```typescript +"active" | "accepted" | "expired" | "revoked" +``` diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewworkspace.md b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewworkspace.md new file mode 100644 index 000000000..5ea1122eb --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitationpreviewworkspace.md @@ -0,0 +1,21 @@ +# WorkspaceInvitationPreviewWorkspace + +## Example Usage + +```typescript +import { WorkspaceInvitationPreviewWorkspace } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInvitationPreviewWorkspace = { + id: "ws_It13CUaGEhLLAB87simX0", + name: "", + logoUrl: null, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace. | ws_It13CUaGEhLLAB87simX0 | +| `name` | *string* | :heavy_check_mark: | N/A | | +| `logoUrl` | *string* | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitationstatus.md b/client-sdks/platform/typescript/docs/models/workspaceinvitationstatus.md new file mode 100644 index 000000000..be17bf357 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitationstatus.md @@ -0,0 +1,15 @@ +# WorkspaceInvitationStatus + +## Example Usage + +```typescript +import { WorkspaceInvitationStatus } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInvitationStatus = "accepted"; +``` + +## Values + +```typescript +"pending" | "accepted" | "revoked" | "expired" +``` diff --git a/client-sdks/platform/typescript/docs/models/workspaceinvitelink.md b/client-sdks/platform/typescript/docs/models/workspaceinvitelink.md new file mode 100644 index 000000000..efcf00cb5 --- /dev/null +++ b/client-sdks/platform/typescript/docs/models/workspaceinvitelink.md @@ -0,0 +1,29 @@ +# WorkspaceInviteLink + +## Example Usage + +```typescript +import { WorkspaceInviteLink } from "@alienplatform/platform-api/models"; + +let value: WorkspaceInviteLink = { + id: "wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4", + role: "workspace.member", + expiresAt: new Date("2025-08-10T09:44:19.208Z"), + createdAt: new Date("2024-12-17T22:24:34.536Z"), + useCount: 786384, + lastUsedAt: new Date("2024-02-08T13:27:28.425Z"), + inviteUrl: "https://immediate-drug.net/", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `id` | *string* | :heavy_check_mark: | Unique identifier for the workspace invite link. | wil_RgcthDSZ37rmFLekuItpFS7btjXoYwou1gE4 | +| `role` | [models.WorkspaceRole](../models/workspacerole.md) | :heavy_check_mark: | Role for workspace-scoped service accounts | workspace.member | +| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `useCount` | *number* | :heavy_check_mark: | N/A | | +| `lastUsedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | N/A | | +| `inviteUrl` | *string* | :heavy_check_mark: | N/A | | diff --git a/client-sdks/platform/typescript/docs/sdks/agentsessions/README.md b/client-sdks/platform/typescript/docs/sdks/agentsessions/README.md new file mode 100644 index 000000000..b5612d299 --- /dev/null +++ b/client-sdks/platform/typescript/docs/sdks/agentsessions/README.md @@ -0,0 +1,390 @@ +# AgentSessions + +## Overview + +### Available Operations + +* [list](#list) - List ai-agent monitor sessions for this workspace. Newest first, capped at 50. +* [get](#get) - Retrieve one ai-agent monitor session by id. +* [events](#events) - Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events. +* [approve](#approve) - Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. +* [stop](#stop) - Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op. + +## list + +List ai-agent monitor sessions for this workspace. Newest first, capped at 50. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.agentSessions.list({ + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { agentSessionsList } from "@alienplatform/platform-api/funcs/agentSessionsList.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await agentSessionsList(alien, { + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("agentSessionsList failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ListAgentSessionsRequest](../../models/operations/listagentsessionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSessionListResponse](../../models/agentsessionlistresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## get + +Retrieve one ai-agent monitor session by id. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.agentSessions.get({ + id: "", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { agentSessionsGet } from "@alienplatform/platform-api/funcs/agentSessionsGet.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await agentSessionsGet(alien, { + id: "", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("agentSessionsGet failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetAgentSessionRequest](../../models/operations/getagentsessionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSessionDetail](../../models/agentsessiondetail.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## events + +Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.agentSessions.events({ + id: "", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { agentSessionsEvents } from "@alienplatform/platform-api/funcs/agentSessionsEvents.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await agentSessionsEvents(alien, { + id: "", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("agentSessionsEvents failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ListAgentSessionEventsRequest](../../models/operations/listagentsessioneventsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSessionEventsResponse](../../models/agentsessioneventsresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## approve + +Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.agentSessions.approve({ + id: "", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { agentSessionsApprove } from "@alienplatform/platform-api/funcs/agentSessionsApprove.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await agentSessionsApprove(alien, { + id: "", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("agentSessionsApprove failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ApproveAgentSessionRequest](../../models/operations/approveagentsessionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSessionApproveResponse](../../models/agentsessionapproveresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 503 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## stop + +Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.agentSessions.stop({ + id: "", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { agentSessionsStop } from "@alienplatform/platform-api/funcs/agentSessionsStop.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await agentSessionsStop(alien, { + id: "", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("agentSessionsStop failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.StopAgentSessionRequest](../../models/operations/stopagentsessionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSessionStopResponse](../../models/agentsessionstopresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 503 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/alien/README.md b/client-sdks/platform/typescript/docs/sdks/alien/README.md new file mode 100644 index 000000000..d3648d387 --- /dev/null +++ b/client-sdks/platform/typescript/docs/sdks/alien/README.md @@ -0,0 +1,704 @@ +# Alien SDK + +## Overview + +### Available Operations + +* [getWorkspaceInvitationPreview](#getworkspaceinvitationpreview) +* [acceptWorkspaceInvitation](#acceptworkspaceinvitation) +* [listWorkspaceInvitations](#listworkspaceinvitations) +* [createWorkspaceInvitation](#createworkspaceinvitation) +* [resendWorkspaceInvitation](#resendworkspaceinvitation) +* [revokeWorkspaceInvitation](#revokeworkspaceinvitation) +* [getWorkspaceInviteLink](#getworkspaceinvitelink) +* [createWorkspaceInviteLink](#createworkspaceinvitelink) +* [revokeWorkspaceInviteLink](#revokeworkspaceinvitelink) + +## getWorkspaceInvitationPreview + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { getWorkspaceInvitationPreview } from "@alienplatform/platform-api/funcs/getWorkspaceInvitationPreview.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await getWorkspaceInvitationPreview(alien, { + token: "", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("getWorkspaceInvitationPreview failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetWorkspaceInvitationPreviewRequest](../../models/operations/getworkspaceinvitationpreviewrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.WorkspaceInvitationPreview](../../models/workspaceinvitationpreview.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## acceptWorkspaceInvitation + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.acceptWorkspaceInvitation({ + token: "", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { acceptWorkspaceInvitation } from "@alienplatform/platform-api/funcs/acceptWorkspaceInvitation.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await acceptWorkspaceInvitation(alien, { + token: "", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("acceptWorkspaceInvitation failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.AcceptWorkspaceInvitationRequest](../../models/operations/acceptworkspaceinvitationrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AcceptWorkspaceInvitationResponse](../../models/acceptworkspaceinvitationresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404, 409 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## listWorkspaceInvitations + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.listWorkspaceInvitations({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { listWorkspaceInvitations } from "@alienplatform/platform-api/funcs/listWorkspaceInvitations.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await listWorkspaceInvitations(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("listWorkspaceInvitations failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ListWorkspaceInvitationsRequest](../../models/operations/listworkspaceinvitationsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[operations.ListWorkspaceInvitationsResponse](../../models/operations/listworkspaceinvitationsresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## createWorkspaceInvitation + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.createWorkspaceInvitation({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + requestBody: { + email: "Moriah.Rolfson@hotmail.com", + role: "workspace.member", + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { createWorkspaceInvitation } from "@alienplatform/platform-api/funcs/createWorkspaceInvitation.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await createWorkspaceInvitation(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + requestBody: { + email: "Moriah.Rolfson@hotmail.com", + role: "workspace.member", + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("createWorkspaceInvitation failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.CreateWorkspaceInvitationRequest](../../models/operations/createworkspaceinvitationrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.WorkspaceInvitation](../../models/workspaceinvitation.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 403, 404, 409 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## resendWorkspaceInvitation + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.resendWorkspaceInvitation({ + id: "ws_It13CUaGEhLLAB87simX0", + invitationId: "", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { resendWorkspaceInvitation } from "@alienplatform/platform-api/funcs/resendWorkspaceInvitation.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await resendWorkspaceInvitation(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + invitationId: "", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("resendWorkspaceInvitation failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ResendWorkspaceInvitationRequest](../../models/operations/resendworkspaceinvitationrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.WorkspaceInvitation](../../models/workspaceinvitation.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## revokeWorkspaceInvitation + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + await alien.revokeWorkspaceInvitation({ + id: "ws_It13CUaGEhLLAB87simX0", + invitationId: "", + workspace: "my-workspace", + }); + + +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { revokeWorkspaceInvitation } from "@alienplatform/platform-api/funcs/revokeWorkspaceInvitation.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await revokeWorkspaceInvitation(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + invitationId: "", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + + } else { + console.log("revokeWorkspaceInvitation failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.RevokeWorkspaceInvitationRequest](../../models/operations/revokeworkspaceinvitationrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## getWorkspaceInviteLink + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.getWorkspaceInviteLink({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { getWorkspaceInviteLink } from "@alienplatform/platform-api/funcs/getWorkspaceInviteLink.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await getWorkspaceInviteLink(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("getWorkspaceInviteLink failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetWorkspaceInviteLinkRequest](../../models/operations/getworkspaceinvitelinkrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.WorkspaceInviteLink](../../models/workspaceinvitelink.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## createWorkspaceInviteLink + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.createWorkspaceInviteLink({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + requestBody: { + role: "workspace.member", + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { createWorkspaceInviteLink } from "@alienplatform/platform-api/funcs/createWorkspaceInviteLink.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await createWorkspaceInviteLink(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + requestBody: { + role: "workspace.member", + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("createWorkspaceInviteLink failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.CreateWorkspaceInviteLinkRequest](../../models/operations/createworkspaceinvitelinkrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.WorkspaceInviteLink](../../models/workspaceinvitelink.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## revokeWorkspaceInviteLink + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + await alien.revokeWorkspaceInviteLink({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + + +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { revokeWorkspaceInviteLink } from "@alienplatform/platform-api/funcs/revokeWorkspaceInviteLink.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await revokeWorkspaceInviteLink(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + + } else { + console.log("revokeWorkspaceInviteLink failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.RevokeWorkspaceInviteLinkRequest](../../models/operations/revokeworkspaceinvitelinkrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/apikeys/README.md b/client-sdks/platform/typescript/docs/sdks/apikeys/README.md index 59ac341f0..3ada6756a 100644 --- a/client-sdks/platform/typescript/docs/sdks/apikeys/README.md +++ b/client-sdks/platform/typescript/docs/sdks/apikeys/README.md @@ -496,4 +496,4 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 403 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/debugsessions/README.md b/client-sdks/platform/typescript/docs/sdks/debugsessions/README.md index 0ad9d6917..7149aa3b2 100644 --- a/client-sdks/platform/typescript/docs/sdks/debugsessions/README.md +++ b/client-sdks/platform/typescript/docs/sdks/debugsessions/README.md @@ -5,8 +5,9 @@ ### Available Operations * [list](#list) - Retrieve debug sessions for dashboard audit. Filters: project, deployment, state, mode. -* [create](#create) - Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment. -* [update](#update) - Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry. +* [create](#create) - Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server. +* [listActiveForManager](#listactiveformanager) - List active debug sessions created by the calling manager so runtime reconciliation can resume after restart. +* [update](#update) - Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry. * [get](#get) - Retrieve a debug session by ID. ## list @@ -89,7 +90,7 @@ run(); ## create -Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment. +Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server. ### Example Usage @@ -107,6 +108,7 @@ async function run() { createDebugSessionRequest: { id: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + owner: "", expiresAt: new Date("2024-12-05T00:22:32.720Z"), }, }); @@ -137,6 +139,7 @@ async function run() { createDebugSessionRequest: { id: "dbg_HOXmkmT9UPYlsnxqSNlEGoXL", deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + owner: "", expiresAt: new Date("2024-12-05T00:22:32.720Z"), }, }); @@ -168,13 +171,84 @@ run(); | Error Type | Status Code | Content Type | | ------------------------ | ------------------------ | ------------------------ | -| errors.APIError | 404 | application/json | +| errors.APIError | 403, 404, 422 | application/json | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## listActiveForManager + +List active debug sessions created by the calling manager so runtime reconciliation can resume after restart. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.debugSessions.listActiveForManager({}); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { debugSessionsListActiveForManager } from "@alienplatform/platform-api/funcs/debugSessionsListActiveForManager.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await debugSessionsListActiveForManager(alien, {}); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("debugSessionsListActiveForManager failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ListActiveManagerDebugSessionsRequest](../../models/operations/listactivemanagerdebugsessionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.ManagerActiveDebugSessionListResponse](../../models/manageractivedebugsessionlistresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 403 | application/json | | errors.APIError | 500 | application/json | | errors.AlienDefaultError | 4XX, 5XX | \*/\* | ## update -Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry. +Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry. ### Example Usage @@ -245,7 +319,7 @@ run(); | Error Type | Status Code | Content Type | | ------------------------ | ------------------------ | ------------------------ | -| errors.APIError | 404 | application/json | +| errors.APIError | 403, 404, 409, 422 | application/json | | errors.APIError | 500 | application/json | | errors.AlienDefaultError | 4XX, 5XX | \*/\* | @@ -324,4 +398,4 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 404 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/deploymentgroups/README.md b/client-sdks/platform/typescript/docs/sdks/deploymentgroups/README.md index a55375747..166999187 100644 --- a/client-sdks/platform/typescript/docs/sdks/deploymentgroups/README.md +++ b/client-sdks/platform/typescript/docs/sdks/deploymentgroups/README.md @@ -601,7 +601,7 @@ run(); | Error Type | Status Code | Content Type | | ------------------------ | ------------------------ | ------------------------ | -| errors.APIError | 404 | application/json | +| errors.APIError | 400, 404 | application/json | | errors.APIError | 500 | application/json | | errors.AlienDefaultError | 4XX, 5XX | \*/\* | @@ -680,4 +680,4 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 404 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/deployments/README.md b/client-sdks/platform/typescript/docs/sdks/deployments/README.md index 1301da51f..705062db2 100644 --- a/client-sdks/platform/typescript/docs/sdks/deployments/README.md +++ b/client-sdks/platform/typescript/docs/sdks/deployments/README.md @@ -1604,4 +1604,4 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 404 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/managers/README.md b/client-sdks/platform/typescript/docs/sdks/managers/README.md index 8bfe2a424..d20ee24bb 100644 --- a/client-sdks/platform/typescript/docs/sdks/managers/README.md +++ b/client-sdks/platform/typescript/docs/sdks/managers/README.md @@ -17,7 +17,9 @@ * [provision](#provision) - Enqueue provisioning for a manager by ID. * [update](#update) - Update a manager to a specific release ID or active release. * [listEvents](#listevents) - Retrieve all events of a manager. -* [generateManagerToken](#generatemanagertoken) - Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API. +* [generateManagerToken](#generatemanagertoken) - Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API. +* [generateManagerBindingToken](#generatemanagerbindingtoken) - Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager. +* [generateManagerCommandToken](#generatemanagercommandtoken) - Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API. * [resolveGcpOAuthProvider](#resolvegcpoauthprovider) - Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap. * [reportHeartbeat](#reportheartbeat) - Report Manager health status and metrics. * [getDeployment](#getdeployment) - Get deployment details for a private manager (internal deployment platform, status, resources). @@ -1034,7 +1036,7 @@ run(); ## generateManagerToken -Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API. +Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API. ### Example Usage @@ -1050,6 +1052,9 @@ async function run() { const result = await alien.managers.generateManagerToken({ id: "mgr_enxscjrqiiu2lrc672hwwuc5", workspace: "my-workspace", + generateManagerTokenRequest: { + project: "", + }, }); console.log(result); @@ -1076,6 +1081,9 @@ async function run() { const res = await managersGenerateManagerToken(alien, { id: "mgr_enxscjrqiiu2lrc672hwwuc5", workspace: "my-workspace", + generateManagerTokenRequest: { + project: "", + }, }); if (res.ok) { const { value: result } = res; @@ -1105,8 +1113,174 @@ run(); | Error Type | Status Code | Content Type | | ------------------------ | ------------------------ | ------------------------ | -| errors.APIError | 404 | application/json | -| errors.APIError | 500 | application/json | +| errors.APIError | 403, 404, 422 | application/json | +| errors.APIError | 500, 503 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## generateManagerBindingToken + +Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.managers.generateManagerBindingToken({ + id: "mgr_enxscjrqiiu2lrc672hwwuc5", + workspace: "my-workspace", + generateManagerBindingTokenRequest: { + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { managersGenerateManagerBindingToken } from "@alienplatform/platform-api/funcs/managersGenerateManagerBindingToken.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await managersGenerateManagerBindingToken(alien, { + id: "mgr_enxscjrqiiu2lrc672hwwuc5", + workspace: "my-workspace", + generateManagerBindingTokenRequest: { + deploymentId: "dep_0c29fq4a2yjb7kx3smwdgxlc", + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("managersGenerateManagerBindingToken failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GenerateManagerBindingTokenRequest](../../models/operations/generatemanagerbindingtokenrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.GenerateManagerTokenResponse](../../models/generatemanagertokenresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 403, 404, 422 | application/json | +| errors.APIError | 500, 503 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## generateManagerCommandToken + +Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.managers.generateManagerCommandToken({ + id: "mgr_enxscjrqiiu2lrc672hwwuc5", + workspace: "my-workspace", + generateManagerCommandTokenRequest: { + commandId: "cmd_2sxjXxvOYct7IohT3ukliAzf", + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { managersGenerateManagerCommandToken } from "@alienplatform/platform-api/funcs/managersGenerateManagerCommandToken.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await managersGenerateManagerCommandToken(alien, { + id: "mgr_enxscjrqiiu2lrc672hwwuc5", + workspace: "my-workspace", + generateManagerCommandTokenRequest: { + commandId: "cmd_2sxjXxvOYct7IohT3ukliAzf", + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("managersGenerateManagerCommandToken failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GenerateManagerCommandTokenRequest](../../models/operations/generatemanagercommandtokenrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.GenerateManagerTokenResponse](../../models/generatemanagertokenresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 403, 404, 422 | application/json | +| errors.APIError | 500, 503 | application/json | | errors.AlienDefaultError | 4XX, 5XX | \*/\* | ## resolveGcpOAuthProvider @@ -1338,4 +1512,4 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 404 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/projects/README.md b/client-sdks/platform/typescript/docs/sdks/projects/README.md index c1fddb188..d752006b6 100644 --- a/client-sdks/platform/typescript/docs/sdks/projects/README.md +++ b/client-sdks/platform/typescript/docs/sdks/projects/README.md @@ -974,4 +974,4 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 404 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/slackintegration/README.md b/client-sdks/platform/typescript/docs/sdks/slackintegration/README.md new file mode 100644 index 000000000..6e48a2a34 --- /dev/null +++ b/client-sdks/platform/typescript/docs/sdks/slackintegration/README.md @@ -0,0 +1,379 @@ +# SlackIntegration + +## Overview + +### Available Operations + +* [installUrl](#installurl) - Generate the Slack OAuth consent URL for this workspace. +* [status](#status) - Return the Slack install for this workspace (if any). +* [listChannels](#listchannels) - List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker. +* [setNotificationChannel](#setnotificationchannel) - Configure which Slack channel receives ai-agent monitor reports. +* [uninstall](#uninstall) - Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row. + +## installUrl + +Generate the Slack OAuth consent URL for this workspace. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.slackIntegration.installUrl({ + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { slackIntegrationInstallUrl } from "@alienplatform/platform-api/funcs/slackIntegrationInstallUrl.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await slackIntegrationInstallUrl(alien, { + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("slackIntegrationInstallUrl failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SlackIntegrationInstallUrlRequest](../../models/operations/slackintegrationinstallurlrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.SlackInstallUrlResponse](../../models/slackinstallurlresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 500 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## status + +Return the Slack install for this workspace (if any). + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.slackIntegration.status({ + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { slackIntegrationStatus } from "@alienplatform/platform-api/funcs/slackIntegrationStatus.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await slackIntegrationStatus(alien, { + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("slackIntegrationStatus failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SlackIntegrationStatusRequest](../../models/operations/slackintegrationstatusrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.SlackIntegrationStatus](../../models/slackintegrationstatus.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## listChannels + +List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.slackIntegration.listChannels({ + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { slackIntegrationListChannels } from "@alienplatform/platform-api/funcs/slackIntegrationListChannels.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await slackIntegrationListChannels(alien, { + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("slackIntegrationListChannels failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SlackIntegrationChannelsRequest](../../models/operations/slackintegrationchannelsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.SlackChannelsResponse](../../models/slackchannelsresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 400 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## setNotificationChannel + +Configure which Slack channel receives ai-agent monitor reports. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.slackIntegration.setNotificationChannel({ + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { slackIntegrationSetNotificationChannel } from "@alienplatform/platform-api/funcs/slackIntegrationSetNotificationChannel.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await slackIntegrationSetNotificationChannel(alien, { + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("slackIntegrationSetNotificationChannel failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SlackIntegrationSetNotificationChannelRequest](../../models/operations/slackintegrationsetnotificationchannelrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.SlackNotificationChannelResponse](../../models/slacknotificationchannelresponse.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 400 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## uninstall + +Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + await alien.slackIntegration.uninstall({ + workspace: "my-workspace", + }); + + +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { slackIntegrationUninstall } from "@alienplatform/platform-api/funcs/slackIntegrationUninstall.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await slackIntegrationUninstall(alien, { + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + + } else { + console.log("slackIntegrationUninstall failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SlackIntegrationUninstallRequest](../../models/operations/slackintegrationuninstallrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/docs/sdks/workspaces/README.md b/client-sdks/platform/typescript/docs/sdks/workspaces/README.md index 611010858..1df501380 100644 --- a/client-sdks/platform/typescript/docs/sdks/workspaces/README.md +++ b/client-sdks/platform/typescript/docs/sdks/workspaces/README.md @@ -13,6 +13,8 @@ * [updateMember](#updatemember) - Update a workspace member's role. * [removeMember](#removemember) - Remove a member from a workspace. * [dismissOnboarding](#dismissonboarding) - Mark the Getting Started walkthrough as dismissed for a workspace. The dashboard stops auto-promoting onboarding once this is set; users can still re-enter the walkthrough via the help menu. +* [getSettings](#getsettings) - Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them. +* [updateSettings](#updatesettings) - Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs). ## list @@ -720,4 +722,156 @@ run(); | ------------------------ | ------------------------ | ------------------------ | | errors.APIError | 404 | application/json | | errors.APIError | 500 | application/json | -| errors.AlienDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## getSettings + +Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them. + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.workspaces.getSettings({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { workspacesGetSettings } from "@alienplatform/platform-api/funcs/workspacesGetSettings.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await workspacesGetSettings(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("workspacesGetSettings failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetWorkspaceSettingsRequest](../../models/operations/getworkspacesettingsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSettings](../../models/agentsettings.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | + +## updateSettings + +Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs). + +### Example Usage + + +```typescript +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const result = await alien.workspaces.updateSettings({ + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { AlienCore } from "@alienplatform/platform-api/core.js"; +import { workspacesUpdateSettings } from "@alienplatform/platform-api/funcs/workspacesUpdateSettings.js"; + +// Use `AlienCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const alien = new AlienCore({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function run() { + const res = await workspacesUpdateSettings(alien, { + id: "ws_It13CUaGEhLLAB87simX0", + workspace: "my-workspace", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("workspacesUpdateSettings failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.UpdateWorkspaceSettingsRequest](../../models/operations/updateworkspacesettingsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.AgentSettings](../../models/agentsettings.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------ | ------------------------ | ------------------------ | +| errors.APIError | 404 | application/json | +| errors.AlienDefaultError | 4XX, 5XX | \*/\* | diff --git a/client-sdks/platform/typescript/examples/getWorkspaceInvitationPreview.example.ts b/client-sdks/platform/typescript/examples/getWorkspaceInvitationPreview.example.ts new file mode 100644 index 000000000..11c31f8f0 --- /dev/null +++ b/client-sdks/platform/typescript/examples/getWorkspaceInvitationPreview.example.ts @@ -0,0 +1,28 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import dotenv from "dotenv"; +dotenv.config(); +/** + * Example usage of the @alienplatform/platform-api SDK + * + * To run this example from the examples directory: + * npm run build && npx tsx getWorkspaceInvitationPreview.example.ts + */ + +import { Alien } from "@alienplatform/platform-api"; + +const alien = new Alien({ + apiKey: process.env["ALIEN_API_KEY"] ?? "", +}); + +async function main() { + const result = await alien.getWorkspaceInvitationPreview({ + token: "", + }); + + console.log(result); +} + +main().catch(console.error); diff --git a/client-sdks/platform/typescript/examples/userListMemberships.example.ts b/client-sdks/platform/typescript/examples/userListMemberships.example.ts deleted file mode 100644 index dc513216f..000000000 --- a/client-sdks/platform/typescript/examples/userListMemberships.example.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ - -import dotenv from "dotenv"; -dotenv.config(); -/** - * Example usage of the @alienplatform/platform-api SDK - * - * To run this example from the examples directory: - * npm run build && npx tsx userListMemberships.example.ts - */ - -import { Alien } from "@alienplatform/platform-api"; - -const alien = new Alien({ - apiKey: process.env["ALIEN_API_KEY"] ?? "", -}); - -async function main() { - const result = await alien.user.listMemberships(); - - console.log(result); -} - -main().catch(console.error); diff --git a/client-sdks/platform/typescript/jsr.json b/client-sdks/platform/typescript/jsr.json index b27d1739a..e6dc236fa 100644 --- a/client-sdks/platform/typescript/jsr.json +++ b/client-sdks/platform/typescript/jsr.json @@ -2,7 +2,7 @@ { "name": "@alienplatform/platform-api", - "version": "1.14.3", + "version": "2.1.6", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/client-sdks/platform/typescript/package-lock.json b/client-sdks/platform/typescript/package-lock.json index 496d73e5f..c1edd7895 100644 --- a/client-sdks/platform/typescript/package-lock.json +++ b/client-sdks/platform/typescript/package-lock.json @@ -1,12 +1,12 @@ { "name": "@alienplatform/platform-api", - "version": "2.0.1", + "version": "2.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@alienplatform/platform-api", - "version": "2.0.1", + "version": "2.1.6", "license": "FSL-1.1-Apache-2.0", "dependencies": { "zod": "^3.25.0 || ^4.0.0" diff --git a/client-sdks/platform/typescript/src/funcs/acceptWorkspaceInvitation.ts b/client-sdks/platform/typescript/src/funcs/acceptWorkspaceInvitation.ts new file mode 100644 index 000000000..e74b919e0 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/acceptWorkspaceInvitation.ts @@ -0,0 +1,172 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function acceptWorkspaceInvitation( + client: AlienCore, + request: operations.AcceptWorkspaceInvitationRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AcceptWorkspaceInvitationResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.AcceptWorkspaceInvitationRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AcceptWorkspaceInvitationResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.AcceptWorkspaceInvitationRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + token: encodeSimple("token", payload.token, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/user/invitations/{token}/accept")(pathParams); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "acceptWorkspaceInvitation", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "409", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AcceptWorkspaceInvitationResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.AcceptWorkspaceInvitationResponse$inboundSchema), + M.jsonErr([404, 409], errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/agentSessionsApprove.ts b/client-sdks/platform/typescript/src/funcs/agentSessionsApprove.ts new file mode 100644 index 000000000..f017d5695 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/agentSessionsApprove.ts @@ -0,0 +1,180 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. + */ +export function agentSessionsApprove( + client: AlienCore, + request: operations.ApproveAgentSessionRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSessionApproveResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.ApproveAgentSessionRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSessionApproveResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.ApproveAgentSessionRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/agent-sessions/{id}/approve")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "approveAgentSession", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "503", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AgentSessionApproveResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json([200, 202], models.AgentSessionApproveResponse$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(503, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/agentSessionsEvents.ts b/client-sdks/platform/typescript/src/funcs/agentSessionsEvents.ts new file mode 100644 index 000000000..c6facc8c5 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/agentSessionsEvents.ts @@ -0,0 +1,181 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events. + */ +export function agentSessionsEvents( + client: AlienCore, + request: operations.ListAgentSessionEventsRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSessionEventsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.ListAgentSessionEventsRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSessionEventsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.ListAgentSessionEventsRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/agent-sessions/{id}/events")(pathParams); + + const query = encodeFormQuery({ + "after": payload.after, + "limit": payload.limit, + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "listAgentSessionEvents", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AgentSessionEventsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.AgentSessionEventsResponse$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/agentSessionsGet.ts b/client-sdks/platform/typescript/src/funcs/agentSessionsGet.ts new file mode 100644 index 000000000..bd64c55df --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/agentSessionsGet.ts @@ -0,0 +1,178 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Retrieve one ai-agent monitor session by id. + */ +export function agentSessionsGet( + client: AlienCore, + request: operations.GetAgentSessionRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSessionDetail, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.GetAgentSessionRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSessionDetail, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => operations.GetAgentSessionRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/agent-sessions/{id}")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "getAgentSession", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AgentSessionDetail, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.AgentSessionDetail$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/agentSessionsList.ts b/client-sdks/platform/typescript/src/funcs/agentSessionsList.ts new file mode 100644 index 000000000..332e6e278 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/agentSessionsList.ts @@ -0,0 +1,165 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * List ai-agent monitor sessions for this workspace. Newest first, capped at 50. + */ +export function agentSessionsList( + client: AlienCore, + request?: operations.ListAgentSessionsRequest | undefined, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSessionListResponse, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: operations.ListAgentSessionsRequest | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSessionListResponse, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.ListAgentSessionsRequest$outboundSchema.optional().parse( + value, + ), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const path = pathToFunc("/v1/agent-sessions")(); + + const query = encodeFormQuery({ + "workspace": payload?.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "listAgentSessions", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + models.AgentSessionListResponse, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.AgentSessionListResponse$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/agentSessionsStop.ts b/client-sdks/platform/typescript/src/funcs/agentSessionsStop.ts new file mode 100644 index 000000000..2fbd5e3d9 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/agentSessionsStop.ts @@ -0,0 +1,179 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op. + */ +export function agentSessionsStop( + client: AlienCore, + request: operations.StopAgentSessionRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSessionStopResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.StopAgentSessionRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSessionStopResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => operations.StopAgentSessionRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/agent-sessions/{id}/stop")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "stopAgentSession", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "503", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AgentSessionStopResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json([200, 202], models.AgentSessionStopResponse$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(503, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/createWorkspaceInvitation.ts b/client-sdks/platform/typescript/src/funcs/createWorkspaceInvitation.ts new file mode 100644 index 000000000..d72c54200 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/createWorkspaceInvitation.ts @@ -0,0 +1,178 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeJSON, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function createWorkspaceInvitation( + client: AlienCore, + request: operations.CreateWorkspaceInvitationRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.WorkspaceInvitation, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.CreateWorkspaceInvitationRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.WorkspaceInvitation, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.CreateWorkspaceInvitationRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.RequestBody, { explode: true }); + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/invitations")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "createWorkspaceInvitation", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["403", "404", "409", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.WorkspaceInvitation, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(201, models.WorkspaceInvitation$inboundSchema), + M.jsonErr([403, 404, 409], errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/createWorkspaceInviteLink.ts b/client-sdks/platform/typescript/src/funcs/createWorkspaceInviteLink.ts new file mode 100644 index 000000000..bb475ffb5 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/createWorkspaceInviteLink.ts @@ -0,0 +1,178 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeJSON, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function createWorkspaceInviteLink( + client: AlienCore, + request: operations.CreateWorkspaceInviteLinkRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.WorkspaceInviteLink, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.CreateWorkspaceInviteLinkRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.WorkspaceInviteLink, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.CreateWorkspaceInviteLinkRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.RequestBody, { explode: true }); + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/invite-link")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "createWorkspaceInviteLink", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "PUT", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.WorkspaceInviteLink, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.WorkspaceInviteLink$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/debugSessionsCreate.ts b/client-sdks/platform/typescript/src/funcs/debugSessionsCreate.ts index 177493d92..0551cfbd7 100644 --- a/client-sdks/platform/typescript/src/funcs/debugSessionsCreate.ts +++ b/client-sdks/platform/typescript/src/funcs/debugSessionsCreate.ts @@ -27,7 +27,7 @@ import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; /** - * Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment. + * Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server. */ export function debugSessionsCreate( client: AlienCore, @@ -139,7 +139,7 @@ async function $do( const doResult = await client._do(req, { context, - errorCodes: ["404", "4XX", "500", "5XX"], + errorCodes: ["403", "404", "422", "4XX", "500", "5XX"], retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); @@ -165,7 +165,7 @@ async function $do( | SDKValidationError >( M.json(201, models.DebugSession$inboundSchema), - M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr([403, 404, 422], errors.APIError$inboundSchema), M.jsonErr(500, errors.APIError$inboundSchema), M.fail("4XX"), M.fail("5XX"), diff --git a/client-sdks/platform/typescript/src/funcs/debugSessionsListActiveForManager.ts b/client-sdks/platform/typescript/src/funcs/debugSessionsListActiveForManager.ts new file mode 100644 index 000000000..625b708b6 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/debugSessionsListActiveForManager.ts @@ -0,0 +1,175 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * List active debug sessions created by the calling manager so runtime reconciliation can resume after restart. + */ +export function debugSessionsListActiveForManager( + client: AlienCore, + request?: operations.ListActiveManagerDebugSessionsRequest | undefined, + options?: RequestOptions, +): APIPromise< + Result< + models.ManagerActiveDebugSessionListResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: operations.ListActiveManagerDebugSessionsRequest | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + models.ManagerActiveDebugSessionListResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.ListActiveManagerDebugSessionsRequest$outboundSchema.optional() + .parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const path = pathToFunc("/v1/debug-sessions/internal/manager-active")(); + + const query = encodeFormQuery({ + "cursor": payload?.cursor, + "limit": payload?.limit, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "listActiveManagerDebugSessions", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["403", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.ManagerActiveDebugSessionListResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.ManagerActiveDebugSessionListResponse$inboundSchema), + M.jsonErr(403, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/debugSessionsUpdate.ts b/client-sdks/platform/typescript/src/funcs/debugSessionsUpdate.ts index c5c0a8008..af1cdd6ca 100644 --- a/client-sdks/platform/typescript/src/funcs/debugSessionsUpdate.ts +++ b/client-sdks/platform/typescript/src/funcs/debugSessionsUpdate.ts @@ -27,7 +27,7 @@ import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; /** - * Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry. + * Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry. */ export function debugSessionsUpdate( client: AlienCore, @@ -143,7 +143,7 @@ async function $do( const doResult = await client._do(req, { context, - errorCodes: ["404", "4XX", "500", "5XX"], + errorCodes: ["403", "404", "409", "422", "4XX", "500", "5XX"], retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); @@ -169,7 +169,7 @@ async function $do( | SDKValidationError >( M.json(200, models.DebugSession$inboundSchema), - M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr([403, 404, 409, 422], errors.APIError$inboundSchema), M.jsonErr(500, errors.APIError$inboundSchema), M.fail("4XX"), M.fail("5XX"), diff --git a/client-sdks/platform/typescript/src/funcs/deploymentGroupsCreateDeploymentGroupToken.ts b/client-sdks/platform/typescript/src/funcs/deploymentGroupsCreateDeploymentGroupToken.ts index c7967960a..195de6bfb 100644 --- a/client-sdks/platform/typescript/src/funcs/deploymentGroupsCreateDeploymentGroupToken.ts +++ b/client-sdks/platform/typescript/src/funcs/deploymentGroupsCreateDeploymentGroupToken.ts @@ -147,7 +147,7 @@ async function $do( const doResult = await client._do(req, { context, - errorCodes: ["404", "4XX", "500", "5XX"], + errorCodes: ["400", "404", "4XX", "500", "5XX"], retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); @@ -173,7 +173,7 @@ async function $do( | SDKValidationError >( M.json(200, models.CreateDeploymentGroupTokenResponse$inboundSchema), - M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr([400, 404], errors.APIError$inboundSchema), M.jsonErr(500, errors.APIError$inboundSchema), M.fail("4XX"), M.fail("5XX"), diff --git a/client-sdks/platform/typescript/src/funcs/eventsList.ts b/client-sdks/platform/typescript/src/funcs/eventsList.ts index 9eb623291..6c6e4e657 100644 --- a/client-sdks/platform/typescript/src/funcs/eventsList.ts +++ b/client-sdks/platform/typescript/src/funcs/eventsList.ts @@ -91,6 +91,7 @@ async function $do( const query = encodeFormQuery({ "cursor": payload?.cursor, "deploymentId": payload?.deploymentId, + "include": payload?.include, "limit": payload?.limit, "project": payload?.project, "workspace": payload?.workspace, diff --git a/client-sdks/platform/typescript/src/funcs/getWorkspaceInvitationPreview.ts b/client-sdks/platform/typescript/src/funcs/getWorkspaceInvitationPreview.ts new file mode 100644 index 000000000..2a1e4718c --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/getWorkspaceInvitationPreview.ts @@ -0,0 +1,174 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function getWorkspaceInvitationPreview( + client: AlienCore, + request: operations.GetWorkspaceInvitationPreviewRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.WorkspaceInvitationPreview, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.GetWorkspaceInvitationPreviewRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.WorkspaceInvitationPreview, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.GetWorkspaceInvitationPreviewRequest$outboundSchema.parse( + value, + ), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + token: encodeSimple("token", payload.token, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/invitations/{token}")(pathParams); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "getWorkspaceInvitationPreview", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.WorkspaceInvitationPreview, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.WorkspaceInvitationPreview$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/getWorkspaceInviteLink.ts b/client-sdks/platform/typescript/src/funcs/getWorkspaceInviteLink.ts new file mode 100644 index 000000000..8155fe4dd --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/getWorkspaceInviteLink.ts @@ -0,0 +1,177 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function getWorkspaceInviteLink( + client: AlienCore, + request: operations.GetWorkspaceInviteLinkRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.WorkspaceInviteLink, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.GetWorkspaceInviteLinkRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.WorkspaceInviteLink, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.GetWorkspaceInviteLinkRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/invite-link")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "getWorkspaceInviteLink", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.WorkspaceInviteLink, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.WorkspaceInviteLink$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/listWorkspaceInvitations.ts b/client-sdks/platform/typescript/src/funcs/listWorkspaceInvitations.ts new file mode 100644 index 000000000..b81150c3b --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/listWorkspaceInvitations.ts @@ -0,0 +1,176 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function listWorkspaceInvitations( + client: AlienCore, + request: operations.ListWorkspaceInvitationsRequest, + options?: RequestOptions, +): APIPromise< + Result< + operations.ListWorkspaceInvitationsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.ListWorkspaceInvitationsRequest, + options?: RequestOptions, +): Promise< + [ + Result< + operations.ListWorkspaceInvitationsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.ListWorkspaceInvitationsRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/invitations")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "listWorkspaceInvitations", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + operations.ListWorkspaceInvitationsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, operations.ListWorkspaceInvitationsResponse$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/managersGenerateManagerBindingToken.ts b/client-sdks/platform/typescript/src/funcs/managersGenerateManagerBindingToken.ts new file mode 100644 index 000000000..89efc4966 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/managersGenerateManagerBindingToken.ts @@ -0,0 +1,183 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeJSON, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager. + */ +export function managersGenerateManagerBindingToken( + client: AlienCore, + request: operations.GenerateManagerBindingTokenRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.GenerateManagerTokenResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.GenerateManagerBindingTokenRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.GenerateManagerTokenResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.GenerateManagerBindingTokenRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.GenerateManagerBindingTokenRequest, { + explode: true, + }); + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/managers/{id}/binding-token")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "generateManagerBindingToken", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["403", "404", "422", "4XX", "500", "503", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.GenerateManagerTokenResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.GenerateManagerTokenResponse$inboundSchema), + M.jsonErr([403, 404, 422], errors.APIError$inboundSchema), + M.jsonErr([500, 503], errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/managersGenerateManagerCommandToken.ts b/client-sdks/platform/typescript/src/funcs/managersGenerateManagerCommandToken.ts new file mode 100644 index 000000000..14fd6559b --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/managersGenerateManagerCommandToken.ts @@ -0,0 +1,183 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeJSON, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API. + */ +export function managersGenerateManagerCommandToken( + client: AlienCore, + request: operations.GenerateManagerCommandTokenRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.GenerateManagerTokenResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.GenerateManagerCommandTokenRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.GenerateManagerTokenResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.GenerateManagerCommandTokenRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.GenerateManagerCommandTokenRequest, { + explode: true, + }); + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/managers/{id}/command-token")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "generateManagerCommandToken", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["403", "404", "422", "4XX", "500", "503", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.GenerateManagerTokenResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.GenerateManagerTokenResponse$inboundSchema), + M.jsonErr([403, 404, 422], errors.APIError$inboundSchema), + M.jsonErr([500, 503], errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/managersGenerateManagerToken.ts b/client-sdks/platform/typescript/src/funcs/managersGenerateManagerToken.ts index 45ee42d61..4065d015f 100644 --- a/client-sdks/platform/typescript/src/funcs/managersGenerateManagerToken.ts +++ b/client-sdks/platform/typescript/src/funcs/managersGenerateManagerToken.ts @@ -27,7 +27,7 @@ import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; /** - * Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API. + * Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API. */ export function managersGenerateManagerToken( client: AlienCore, @@ -144,7 +144,7 @@ async function $do( const doResult = await client._do(req, { context, - errorCodes: ["404", "4XX", "500", "5XX"], + errorCodes: ["403", "404", "422", "4XX", "500", "503", "5XX"], retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); @@ -170,8 +170,8 @@ async function $do( | SDKValidationError >( M.json(200, models.GenerateManagerTokenResponse$inboundSchema), - M.jsonErr(404, errors.APIError$inboundSchema), - M.jsonErr(500, errors.APIError$inboundSchema), + M.jsonErr([403, 404, 422], errors.APIError$inboundSchema), + M.jsonErr([500, 503], errors.APIError$inboundSchema), M.fail("4XX"), M.fail("5XX"), )(response, req, { extraFields: responseFields }); diff --git a/client-sdks/platform/typescript/src/funcs/resendWorkspaceInvitation.ts b/client-sdks/platform/typescript/src/funcs/resendWorkspaceInvitation.ts new file mode 100644 index 000000000..646525687 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/resendWorkspaceInvitation.ts @@ -0,0 +1,183 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function resendWorkspaceInvitation( + client: AlienCore, + request: operations.ResendWorkspaceInvitationRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.WorkspaceInvitation, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.ResendWorkspaceInvitationRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.WorkspaceInvitation, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.ResendWorkspaceInvitationRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + invitationId: encodeSimple("invitationId", payload.invitationId, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc( + "/v1/workspaces/{id}/invitations/{invitationId}/resend", + )(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "resendWorkspaceInvitation", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.WorkspaceInvitation, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.WorkspaceInvitation$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/revokeWorkspaceInvitation.ts b/client-sdks/platform/typescript/src/funcs/revokeWorkspaceInvitation.ts new file mode 100644 index 000000000..6ef959216 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/revokeWorkspaceInvitation.ts @@ -0,0 +1,183 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function revokeWorkspaceInvitation( + client: AlienCore, + request: operations.RevokeWorkspaceInvitationRequest, + options?: RequestOptions, +): APIPromise< + Result< + void, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.RevokeWorkspaceInvitationRequest, + options?: RequestOptions, +): Promise< + [ + Result< + void, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.RevokeWorkspaceInvitationRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + invitationId: encodeSimple("invitationId", payload.invitationId, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/invitations/{invitationId}")( + pathParams, + ); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "revokeWorkspaceInvitation", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "DELETE", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + void, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.nil(204, z.void()), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/revokeWorkspaceInviteLink.ts b/client-sdks/platform/typescript/src/funcs/revokeWorkspaceInviteLink.ts new file mode 100644 index 000000000..619c078bf --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/revokeWorkspaceInviteLink.ts @@ -0,0 +1,177 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +export function revokeWorkspaceInviteLink( + client: AlienCore, + request: operations.RevokeWorkspaceInviteLinkRequest, + options?: RequestOptions, +): APIPromise< + Result< + void, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.RevokeWorkspaceInviteLinkRequest, + options?: RequestOptions, +): Promise< + [ + Result< + void, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.RevokeWorkspaceInviteLinkRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/invite-link")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "revokeWorkspaceInviteLink", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "DELETE", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + void, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.nil(204, z.void()), + M.jsonErr(404, errors.APIError$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/slackIntegrationInstallUrl.ts b/client-sdks/platform/typescript/src/funcs/slackIntegrationInstallUrl.ts new file mode 100644 index 000000000..f32f906a8 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/slackIntegrationInstallUrl.ts @@ -0,0 +1,173 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Generate the Slack OAuth consent URL for this workspace. + */ +export function slackIntegrationInstallUrl( + client: AlienCore, + request?: operations.SlackIntegrationInstallUrlRequest | undefined, + options?: RequestOptions, +): APIPromise< + Result< + models.SlackInstallUrlResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: operations.SlackIntegrationInstallUrlRequest | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + models.SlackInstallUrlResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.SlackIntegrationInstallUrlRequest$outboundSchema.optional() + .parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const path = pathToFunc("/v1/integrations/slack/install-url")(); + + const query = encodeFormQuery({ + "workspace": payload?.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "slackIntegrationInstallUrl", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "500", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.SlackInstallUrlResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.SlackInstallUrlResponse$inboundSchema), + M.jsonErr(500, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/slackIntegrationListChannels.ts b/client-sdks/platform/typescript/src/funcs/slackIntegrationListChannels.ts new file mode 100644 index 000000000..5709afe3b --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/slackIntegrationListChannels.ts @@ -0,0 +1,173 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker. + */ +export function slackIntegrationListChannels( + client: AlienCore, + request?: operations.SlackIntegrationChannelsRequest | undefined, + options?: RequestOptions, +): APIPromise< + Result< + models.SlackChannelsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: operations.SlackIntegrationChannelsRequest | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + models.SlackChannelsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.SlackIntegrationChannelsRequest$outboundSchema.optional() + .parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const path = pathToFunc("/v1/integrations/slack/channels")(); + + const query = encodeFormQuery({ + "workspace": payload?.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "slackIntegrationChannels", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["400", "4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.SlackChannelsResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.SlackChannelsResponse$inboundSchema), + M.jsonErr(400, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/slackIntegrationSetNotificationChannel.ts b/client-sdks/platform/typescript/src/funcs/slackIntegrationSetNotificationChannel.ts new file mode 100644 index 000000000..2e403c7af --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/slackIntegrationSetNotificationChannel.ts @@ -0,0 +1,180 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeJSON } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Configure which Slack channel receives ai-agent monitor reports. + */ +export function slackIntegrationSetNotificationChannel( + client: AlienCore, + request?: + | operations.SlackIntegrationSetNotificationChannelRequest + | undefined, + options?: RequestOptions, +): APIPromise< + Result< + models.SlackNotificationChannelResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: + | operations.SlackIntegrationSetNotificationChannelRequest + | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + models.SlackNotificationChannelResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.SlackIntegrationSetNotificationChannelRequest$outboundSchema + .optional().parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload?.SlackNotificationChannelRequest, { + explode: true, + }); + + const path = pathToFunc("/v1/integrations/slack/notification-channel")(); + + const query = encodeFormQuery({ + "workspace": payload?.workspace, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "slackIntegrationSetNotificationChannel", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "PUT", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["400", "4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.SlackNotificationChannelResponse, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.SlackNotificationChannelResponse$inboundSchema), + M.jsonErr(400, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/slackIntegrationStatus.ts b/client-sdks/platform/typescript/src/funcs/slackIntegrationStatus.ts new file mode 100644 index 000000000..bcf1620e7 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/slackIntegrationStatus.ts @@ -0,0 +1,165 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Return the Slack install for this workspace (if any). + */ +export function slackIntegrationStatus( + client: AlienCore, + request?: operations.SlackIntegrationStatusRequest | undefined, + options?: RequestOptions, +): APIPromise< + Result< + models.SlackIntegrationStatus, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: operations.SlackIntegrationStatusRequest | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + models.SlackIntegrationStatus, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.SlackIntegrationStatusRequest$outboundSchema.optional().parse( + value, + ), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const path = pathToFunc("/v1/integrations/slack/status")(); + + const query = encodeFormQuery({ + "workspace": payload?.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "slackIntegrationStatus", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + models.SlackIntegrationStatus, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.SlackIntegrationStatus$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/slackIntegrationUninstall.ts b/client-sdks/platform/typescript/src/funcs/slackIntegrationUninstall.ts new file mode 100644 index 000000000..ab41fcf3a --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/slackIntegrationUninstall.ts @@ -0,0 +1,164 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { AlienCore } from "../core.js"; +import { encodeFormQuery } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row. + */ +export function slackIntegrationUninstall( + client: AlienCore, + request?: operations.SlackIntegrationUninstallRequest | undefined, + options?: RequestOptions, +): APIPromise< + Result< + void, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request?: operations.SlackIntegrationUninstallRequest | undefined, + options?: RequestOptions, +): Promise< + [ + Result< + void, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.SlackIntegrationUninstallRequest$outboundSchema.optional() + .parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const path = pathToFunc("/v1/integrations/slack/installation")(); + + const query = encodeFormQuery({ + "workspace": payload?.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "*/*", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "slackIntegrationUninstall", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "DELETE", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + void, + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.nil(204, z.void()), + M.fail("4XX"), + M.fail("5XX"), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/workspacesGetSettings.ts b/client-sdks/platform/typescript/src/funcs/workspacesGetSettings.ts new file mode 100644 index 000000000..0def81be8 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/workspacesGetSettings.ts @@ -0,0 +1,179 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them. + */ +export function workspacesGetSettings( + client: AlienCore, + request: operations.GetWorkspaceSettingsRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSettings, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.GetWorkspaceSettingsRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSettings, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.GetWorkspaceSettingsRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/settings")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "getWorkspaceSettings", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AgentSettings, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.AgentSettings$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/funcs/workspacesUpdateSettings.ts b/client-sdks/platform/typescript/src/funcs/workspacesUpdateSettings.ts new file mode 100644 index 000000000..07cacec65 --- /dev/null +++ b/client-sdks/platform/typescript/src/funcs/workspacesUpdateSettings.ts @@ -0,0 +1,182 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { AlienCore } from "../core.js"; +import { encodeFormQuery, encodeJSON, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { AlienError } from "../models/errors/alienerror.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs). + */ +export function workspacesUpdateSettings( + client: AlienCore, + request: operations.UpdateWorkspaceSettingsRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.AgentSettings, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: AlienCore, + request: operations.UpdateWorkspaceSettingsRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.AgentSettings, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.UpdateWorkspaceSettingsRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.UpdateWorkspaceSettingsRequest, { + explode: true, + }); + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/v1/workspaces/{id}/settings")(pathParams); + + const query = encodeFormQuery({ + "workspace": payload.workspace, + }); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "updateWorkspaceSettings", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "PATCH", + baseURL: options?.serverURL, + path: path, + headers: headers, + query: query, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["404", "4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.AgentSettings, + | errors.APIError + | AlienError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.AgentSettings$inboundSchema), + M.jsonErr(404, errors.APIError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/client-sdks/platform/typescript/src/lib/config.ts b/client-sdks/platform/typescript/src/lib/config.ts index ea094ae04..1772bf4c4 100644 --- a/client-sdks/platform/typescript/src/lib/config.ts +++ b/client-sdks/platform/typescript/src/lib/config.ts @@ -61,8 +61,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "1.0.0", - sdkVersion: "1.14.3", + sdkVersion: "2.1.6", genVersion: "2.788.15", userAgent: - "speakeasy-sdk/typescript 1.14.3 2.788.15 1.0.0 @alienplatform/platform-api", + "speakeasy-sdk/typescript 2.1.6 2.788.15 1.0.0 @alienplatform/platform-api", } as const; diff --git a/client-sdks/platform/typescript/src/models/acceptworkspaceinvitationresponse.ts b/client-sdks/platform/typescript/src/models/acceptworkspaceinvitationresponse.ts new file mode 100644 index 000000000..f42669be1 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/acceptworkspaceinvitationresponse.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { WorkspaceRole, WorkspaceRole$inboundSchema } from "./workspacerole.js"; + +export const Outcome = { + Joined: "joined", + AlreadyMember: "already-member", +} as const; +export type Outcome = ClosedEnum; + +export type AcceptWorkspaceInvitationResponse = { + outcome: Outcome; + /** + * Unique identifier for the workspace. + */ + workspaceId: string; + workspaceName: string; + /** + * Role for workspace-scoped service accounts + */ + role: WorkspaceRole; +}; + +/** @internal */ +export const Outcome$inboundSchema: z.ZodEnum = z.enum(Outcome); + +/** @internal */ +export const AcceptWorkspaceInvitationResponse$inboundSchema: z.ZodType< + AcceptWorkspaceInvitationResponse, + unknown +> = z.object({ + outcome: Outcome$inboundSchema, + workspaceId: z.string(), + workspaceName: z.string(), + role: WorkspaceRole$inboundSchema, +}); + +export function acceptWorkspaceInvitationResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AcceptWorkspaceInvitationResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AcceptWorkspaceInvitationResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionapprovalgrantedevent.ts b/client-sdks/platform/typescript/src/models/agentsessionapprovalgrantedevent.ts new file mode 100644 index 000000000..20a36afba --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionapprovalgrantedevent.ts @@ -0,0 +1,82 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export const SourceEnum = { + Dashboard: "dashboard", + Slack: "slack", +} as const; +export type SourceEnum = ClosedEnum; + +export type AgentSessionApprovalGrantedEventPayload = { + approvalId: string; + approvedByUserId: string; + approvedByName: string | null; + source: SourceEnum; +}; + +export type AgentSessionApprovalGrantedEvent = { + seq: number; + createdAt: string; + type: "approval_granted"; + payload: AgentSessionApprovalGrantedEventPayload; +}; + +/** @internal */ +export const SourceEnum$inboundSchema: z.ZodEnum = z.enum( + SourceEnum, +); + +/** @internal */ +export const AgentSessionApprovalGrantedEventPayload$inboundSchema: z.ZodType< + AgentSessionApprovalGrantedEventPayload, + unknown +> = z.object({ + approvalId: z.string(), + approvedByUserId: z.string(), + approvedByName: z.nullable(z.string()), + source: SourceEnum$inboundSchema, +}); + +export function agentSessionApprovalGrantedEventPayloadFromJSON( + jsonString: string, +): SafeParseResult< + AgentSessionApprovalGrantedEventPayload, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + AgentSessionApprovalGrantedEventPayload$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'AgentSessionApprovalGrantedEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionApprovalGrantedEvent$inboundSchema: z.ZodType< + AgentSessionApprovalGrantedEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("approval_granted"), + payload: z.lazy(() => AgentSessionApprovalGrantedEventPayload$inboundSchema), +}); + +export function agentSessionApprovalGrantedEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionApprovalGrantedEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionApprovalGrantedEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionapprovalrequestedevent.ts b/client-sdks/platform/typescript/src/models/agentsessionapprovalrequestedevent.ts new file mode 100644 index 000000000..c559cc0f9 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionapprovalrequestedevent.ts @@ -0,0 +1,73 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionApprovalRequestedEventPayload = { + approvalId: string; + toolCallId: string; + toolName: string; + input?: any | null | undefined; +}; + +export type AgentSessionApprovalRequestedEvent = { + seq: number; + createdAt: string; + type: "approval_requested"; + payload: AgentSessionApprovalRequestedEventPayload; +}; + +/** @internal */ +export const AgentSessionApprovalRequestedEventPayload$inboundSchema: z.ZodType< + AgentSessionApprovalRequestedEventPayload, + unknown +> = z.object({ + approvalId: z.string(), + toolCallId: z.string(), + toolName: z.string(), + input: z.nullable(z.any()).optional(), +}); + +export function agentSessionApprovalRequestedEventPayloadFromJSON( + jsonString: string, +): SafeParseResult< + AgentSessionApprovalRequestedEventPayload, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + AgentSessionApprovalRequestedEventPayload$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'AgentSessionApprovalRequestedEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionApprovalRequestedEvent$inboundSchema: z.ZodType< + AgentSessionApprovalRequestedEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("approval_requested"), + payload: z.lazy(() => + AgentSessionApprovalRequestedEventPayload$inboundSchema + ), +}); + +export function agentSessionApprovalRequestedEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + AgentSessionApprovalRequestedEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionApprovalRequestedEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionapproveresponse.ts b/client-sdks/platform/typescript/src/models/agentsessionapproveresponse.ts new file mode 100644 index 000000000..2f0f7b806 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionapproveresponse.ts @@ -0,0 +1,34 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionApproveResponse = { + jobId: string; + status: string; + resumed: boolean; +}; + +/** @internal */ +export const AgentSessionApproveResponse$inboundSchema: z.ZodType< + AgentSessionApproveResponse, + unknown +> = z.object({ + jobId: z.string(), + status: z.string(), + resumed: z.boolean(), +}); + +export function agentSessionApproveResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionApproveResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionApproveResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessiondetail.ts b/client-sdks/platform/typescript/src/models/agentsessiondetail.ts new file mode 100644 index 000000000..0c7f65284 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessiondetail.ts @@ -0,0 +1,82 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + AgentSessionSubject, + AgentSessionSubject$inboundSchema, +} from "./agentsessionsubject.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type PendingApproval = { + approvalId: string; + toolCallId: string; + toolName: string; + input?: any | null | undefined; +}; + +export type AgentSessionDetail = { + id: string; + triggerType: string; + subjectId: string; + subject: AgentSessionSubject; + status: string; + createdAt: string; + updatedAt: string; + resultText: string | null; + toolNames: Array | null; + error: string | null; + pendingApproval: PendingApproval | null; +}; + +/** @internal */ +export const PendingApproval$inboundSchema: z.ZodType< + PendingApproval, + unknown +> = z.object({ + approvalId: z.string(), + toolCallId: z.string(), + toolName: z.string(), + input: z.nullable(z.any()).optional(), +}); + +export function pendingApprovalFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => PendingApproval$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'PendingApproval' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionDetail$inboundSchema: z.ZodType< + AgentSessionDetail, + unknown +> = z.object({ + id: z.string(), + triggerType: z.string(), + subjectId: z.string(), + subject: AgentSessionSubject$inboundSchema, + status: z.string(), + createdAt: z.string(), + updatedAt: z.string(), + resultText: z.nullable(z.string()), + toolNames: z.nullable(z.array(z.string())), + error: z.nullable(z.string()), + pendingApproval: z.nullable(z.lazy(() => PendingApproval$inboundSchema)), +}); + +export function agentSessionDetailFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionDetail$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionDetail' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionevent.ts b/client-sdks/platform/typescript/src/models/agentsessionevent.ts new file mode 100644 index 000000000..2fec5ca6e --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionevent.ts @@ -0,0 +1,81 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + AgentSessionApprovalGrantedEvent, + AgentSessionApprovalGrantedEvent$inboundSchema, +} from "./agentsessionapprovalgrantedevent.js"; +import { + AgentSessionApprovalRequestedEvent, + AgentSessionApprovalRequestedEvent$inboundSchema, +} from "./agentsessionapprovalrequestedevent.js"; +import { + AgentSessionEventsTruncatedEvent, + AgentSessionEventsTruncatedEvent$inboundSchema, +} from "./agentsessioneventstruncatedevent.js"; +import { + AgentSessionMarkdownEvent, + AgentSessionMarkdownEvent$inboundSchema, +} from "./agentsessionmarkdownevent.js"; +import { + AgentSessionRestartedEvent, + AgentSessionRestartedEvent$inboundSchema, +} from "./agentsessionrestartedevent.js"; +import { + AgentSessionStatusEvent, + AgentSessionStatusEvent$inboundSchema, +} from "./agentsessionstatusevent.js"; +import { + AgentSessionStepEvent, + AgentSessionStepEvent$inboundSchema, +} from "./agentsessionstepevent.js"; +import { + AgentSessionToolCallEvent, + AgentSessionToolCallEvent$inboundSchema, +} from "./agentsessiontoolcallevent.js"; +import { + AgentSessionToolResultEvent, + AgentSessionToolResultEvent$inboundSchema, +} from "./agentsessiontoolresultevent.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionEvent = + | AgentSessionStatusEvent + | AgentSessionStepEvent + | AgentSessionToolCallEvent + | AgentSessionToolResultEvent + | AgentSessionMarkdownEvent + | AgentSessionApprovalRequestedEvent + | AgentSessionApprovalGrantedEvent + | AgentSessionRestartedEvent + | AgentSessionEventsTruncatedEvent; + +/** @internal */ +export const AgentSessionEvent$inboundSchema: z.ZodType< + AgentSessionEvent, + unknown +> = z.union([ + AgentSessionStatusEvent$inboundSchema, + AgentSessionStepEvent$inboundSchema, + AgentSessionToolCallEvent$inboundSchema, + AgentSessionToolResultEvent$inboundSchema, + AgentSessionMarkdownEvent$inboundSchema, + AgentSessionApprovalRequestedEvent$inboundSchema, + AgentSessionApprovalGrantedEvent$inboundSchema, + AgentSessionRestartedEvent$inboundSchema, + AgentSessionEventsTruncatedEvent$inboundSchema, +]); + +export function agentSessionEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessioneventsresponse.ts b/client-sdks/platform/typescript/src/models/agentsessioneventsresponse.ts new file mode 100644 index 000000000..571d7d4da --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessioneventsresponse.ts @@ -0,0 +1,38 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + AgentSessionEvent, + AgentSessionEvent$inboundSchema, +} from "./agentsessionevent.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionEventsResponse = { + events: Array; + latestSeq: number; + hasMore: boolean; +}; + +/** @internal */ +export const AgentSessionEventsResponse$inboundSchema: z.ZodType< + AgentSessionEventsResponse, + unknown +> = z.object({ + events: z.array(AgentSessionEvent$inboundSchema), + latestSeq: z.number(), + hasMore: z.boolean(), +}); + +export function agentSessionEventsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionEventsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionEventsResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessioneventstruncatedevent.ts b/client-sdks/platform/typescript/src/models/agentsessioneventstruncatedevent.ts new file mode 100644 index 000000000..4f4d0238b --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessioneventstruncatedevent.ts @@ -0,0 +1,64 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionEventsTruncatedEventPayload = { + limit: number; +}; + +export type AgentSessionEventsTruncatedEvent = { + seq: number; + createdAt: string; + type: "events_truncated"; + payload: AgentSessionEventsTruncatedEventPayload; +}; + +/** @internal */ +export const AgentSessionEventsTruncatedEventPayload$inboundSchema: z.ZodType< + AgentSessionEventsTruncatedEventPayload, + unknown +> = z.object({ + limit: z.number(), +}); + +export function agentSessionEventsTruncatedEventPayloadFromJSON( + jsonString: string, +): SafeParseResult< + AgentSessionEventsTruncatedEventPayload, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + AgentSessionEventsTruncatedEventPayload$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'AgentSessionEventsTruncatedEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionEventsTruncatedEvent$inboundSchema: z.ZodType< + AgentSessionEventsTruncatedEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("events_truncated"), + payload: z.lazy(() => AgentSessionEventsTruncatedEventPayload$inboundSchema), +}); + +export function agentSessionEventsTruncatedEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionEventsTruncatedEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionEventsTruncatedEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionlistitem.ts b/client-sdks/platform/typescript/src/models/agentsessionlistitem.ts new file mode 100644 index 000000000..5079f4cc6 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionlistitem.ts @@ -0,0 +1,46 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + AgentSessionSubject, + AgentSessionSubject$inboundSchema, +} from "./agentsessionsubject.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionListItem = { + id: string; + triggerType: string; + subjectId: string; + subject: AgentSessionSubject; + status: string; + createdAt: string; + updatedAt: string; +}; + +/** @internal */ +export const AgentSessionListItem$inboundSchema: z.ZodType< + AgentSessionListItem, + unknown +> = z.object({ + id: z.string(), + triggerType: z.string(), + subjectId: z.string(), + subject: AgentSessionSubject$inboundSchema, + status: z.string(), + createdAt: z.string(), + updatedAt: z.string(), +}); + +export function agentSessionListItemFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionListItem$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionListItem' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionlistresponse.ts b/client-sdks/platform/typescript/src/models/agentsessionlistresponse.ts new file mode 100644 index 000000000..00594bd94 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionlistresponse.ts @@ -0,0 +1,34 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + AgentSessionListItem, + AgentSessionListItem$inboundSchema, +} from "./agentsessionlistitem.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionListResponse = { + sessions: Array; +}; + +/** @internal */ +export const AgentSessionListResponse$inboundSchema: z.ZodType< + AgentSessionListResponse, + unknown +> = z.object({ + sessions: z.array(AgentSessionListItem$inboundSchema), +}); + +export function agentSessionListResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionListResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionListResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionmarkdownevent.ts b/client-sdks/platform/typescript/src/models/agentsessionmarkdownevent.ts new file mode 100644 index 000000000..9511f17db --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionmarkdownevent.ts @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionMarkdownEventPayload = { + text: string; +}; + +export type AgentSessionMarkdownEvent = { + seq: number; + createdAt: string; + type: "markdown"; + payload: AgentSessionMarkdownEventPayload; +}; + +/** @internal */ +export const AgentSessionMarkdownEventPayload$inboundSchema: z.ZodType< + AgentSessionMarkdownEventPayload, + unknown +> = z.object({ + text: z.string(), +}); + +export function agentSessionMarkdownEventPayloadFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionMarkdownEventPayload$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionMarkdownEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionMarkdownEvent$inboundSchema: z.ZodType< + AgentSessionMarkdownEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("markdown"), + payload: z.lazy(() => AgentSessionMarkdownEventPayload$inboundSchema), +}); + +export function agentSessionMarkdownEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionMarkdownEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionMarkdownEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionrestartedevent.ts b/client-sdks/platform/typescript/src/models/agentsessionrestartedevent.ts new file mode 100644 index 000000000..c70d9af46 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionrestartedevent.ts @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionRestartedEventPayload = { + reason: string; +}; + +export type AgentSessionRestartedEvent = { + seq: number; + createdAt: string; + type: "session_restarted"; + payload: AgentSessionRestartedEventPayload; +}; + +/** @internal */ +export const AgentSessionRestartedEventPayload$inboundSchema: z.ZodType< + AgentSessionRestartedEventPayload, + unknown +> = z.object({ + reason: z.string(), +}); + +export function agentSessionRestartedEventPayloadFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionRestartedEventPayload$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionRestartedEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionRestartedEvent$inboundSchema: z.ZodType< + AgentSessionRestartedEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("session_restarted"), + payload: z.lazy(() => AgentSessionRestartedEventPayload$inboundSchema), +}); + +export function agentSessionRestartedEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionRestartedEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionRestartedEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionstatusevent.ts b/client-sdks/platform/typescript/src/models/agentsessionstatusevent.ts new file mode 100644 index 000000000..0e4f018d1 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionstatusevent.ts @@ -0,0 +1,60 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionStatusEventPayload = { + status: string; + error?: string | undefined; +}; + +export type AgentSessionStatusEvent = { + seq: number; + createdAt: string; + type: "status"; + payload: AgentSessionStatusEventPayload; +}; + +/** @internal */ +export const AgentSessionStatusEventPayload$inboundSchema: z.ZodType< + AgentSessionStatusEventPayload, + unknown +> = z.object({ + status: z.string(), + error: z.string().optional(), +}); + +export function agentSessionStatusEventPayloadFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionStatusEventPayload$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionStatusEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionStatusEvent$inboundSchema: z.ZodType< + AgentSessionStatusEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("status"), + payload: z.lazy(() => AgentSessionStatusEventPayload$inboundSchema), +}); + +export function agentSessionStatusEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionStatusEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionStatusEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionstepevent.ts b/client-sdks/platform/typescript/src/models/agentsessionstepevent.ts new file mode 100644 index 000000000..82d603f64 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionstepevent.ts @@ -0,0 +1,77 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export const AgentSessionStepEventStatus = { + InProgress: "in_progress", + Complete: "complete", + Error: "error", +} as const; +export type AgentSessionStepEventStatus = ClosedEnum< + typeof AgentSessionStepEventStatus +>; + +export type AgentSessionStepEventPayload = { + stepId: string; + title: string; + status: AgentSessionStepEventStatus; +}; + +export type AgentSessionStepEvent = { + seq: number; + createdAt: string; + type: "step"; + payload: AgentSessionStepEventPayload; +}; + +/** @internal */ +export const AgentSessionStepEventStatus$inboundSchema: z.ZodEnum< + typeof AgentSessionStepEventStatus +> = z.enum(AgentSessionStepEventStatus); + +/** @internal */ +export const AgentSessionStepEventPayload$inboundSchema: z.ZodType< + AgentSessionStepEventPayload, + unknown +> = z.object({ + stepId: z.string(), + title: z.string(), + status: AgentSessionStepEventStatus$inboundSchema, +}); + +export function agentSessionStepEventPayloadFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionStepEventPayload$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionStepEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionStepEvent$inboundSchema: z.ZodType< + AgentSessionStepEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("step"), + payload: z.lazy(() => AgentSessionStepEventPayload$inboundSchema), +}); + +export function agentSessionStepEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionStepEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionStepEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionstopresponse.ts b/client-sdks/platform/typescript/src/models/agentsessionstopresponse.ts new file mode 100644 index 000000000..3c798096c --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionstopresponse.ts @@ -0,0 +1,34 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionStopResponse = { + jobId: string; + status: string; + canceled: boolean; +}; + +/** @internal */ +export const AgentSessionStopResponse$inboundSchema: z.ZodType< + AgentSessionStopResponse, + unknown +> = z.object({ + jobId: z.string(), + status: z.string(), + canceled: z.boolean(), +}); + +export function agentSessionStopResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionStopResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionStopResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessionsubject.ts b/client-sdks/platform/typescript/src/models/agentsessionsubject.ts new file mode 100644 index 000000000..97a291c85 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessionsubject.ts @@ -0,0 +1,44 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionSubject = { + deploymentName: string | null; + deploymentGroupId: string | null; + deploymentGroupName: string | null; + releaseId: string | null; + releaseCommitMessage: string | null; + releaseCommitRef: string | null; + projectId: string | null; + projectName: string | null; +}; + +/** @internal */ +export const AgentSessionSubject$inboundSchema: z.ZodType< + AgentSessionSubject, + unknown +> = z.object({ + deploymentName: z.nullable(z.string()), + deploymentGroupId: z.nullable(z.string()), + deploymentGroupName: z.nullable(z.string()), + releaseId: z.nullable(z.string()), + releaseCommitMessage: z.nullable(z.string()), + releaseCommitRef: z.nullable(z.string()), + projectId: z.nullable(z.string()), + projectName: z.nullable(z.string()), +}); + +export function agentSessionSubjectFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionSubject$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionSubject' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessiontoolcallevent.ts b/client-sdks/platform/typescript/src/models/agentsessiontoolcallevent.ts new file mode 100644 index 000000000..03352e188 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessiontoolcallevent.ts @@ -0,0 +1,62 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionToolCallEventPayload = { + toolCallId: string; + toolName: string; + input?: any | null | undefined; +}; + +export type AgentSessionToolCallEvent = { + seq: number; + createdAt: string; + type: "tool_call"; + payload: AgentSessionToolCallEventPayload; +}; + +/** @internal */ +export const AgentSessionToolCallEventPayload$inboundSchema: z.ZodType< + AgentSessionToolCallEventPayload, + unknown +> = z.object({ + toolCallId: z.string(), + toolName: z.string(), + input: z.nullable(z.any()).optional(), +}); + +export function agentSessionToolCallEventPayloadFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionToolCallEventPayload$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionToolCallEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionToolCallEvent$inboundSchema: z.ZodType< + AgentSessionToolCallEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("tool_call"), + payload: z.lazy(() => AgentSessionToolCallEventPayload$inboundSchema), +}); + +export function agentSessionToolCallEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionToolCallEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionToolCallEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsessiontoolresultevent.ts b/client-sdks/platform/typescript/src/models/agentsessiontoolresultevent.ts new file mode 100644 index 000000000..d6ef79069 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsessiontoolresultevent.ts @@ -0,0 +1,65 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type AgentSessionToolResultEventPayload = { + toolCallId: string | null; + toolName: string | null; + ok: boolean; + output?: any | null | undefined; +}; + +export type AgentSessionToolResultEvent = { + seq: number; + createdAt: string; + type: "tool_result"; + payload: AgentSessionToolResultEventPayload; +}; + +/** @internal */ +export const AgentSessionToolResultEventPayload$inboundSchema: z.ZodType< + AgentSessionToolResultEventPayload, + unknown +> = z.object({ + toolCallId: z.nullable(z.string()), + toolName: z.nullable(z.string()), + ok: z.boolean(), + output: z.nullable(z.any()).optional(), +}); + +export function agentSessionToolResultEventPayloadFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + AgentSessionToolResultEventPayload$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionToolResultEventPayload' from JSON`, + ); +} + +/** @internal */ +export const AgentSessionToolResultEvent$inboundSchema: z.ZodType< + AgentSessionToolResultEvent, + unknown +> = z.object({ + seq: z.number(), + createdAt: z.string(), + type: z.literal("tool_result"), + payload: z.lazy(() => AgentSessionToolResultEventPayload$inboundSchema), +}); + +export function agentSessionToolResultEventFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSessionToolResultEvent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSessionToolResultEvent' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/agentsettings.ts b/client-sdks/platform/typescript/src/models/agentsettings.ts new file mode 100644 index 000000000..a1e393637 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/agentsettings.ts @@ -0,0 +1,65 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + */ +export const AgentSettingsDebugPermissionMode = { + Auto: "auto", + Ask: "ask", +} as const; +/** + * Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + */ +export type AgentSettingsDebugPermissionMode = ClosedEnum< + typeof AgentSettingsDebugPermissionMode +>; + +export type AgentSettings = { + /** + * Unique identifier for the workspace. + */ + workspaceId: string; + /** + * Workspace on/off switch for the ai-agent. When `false`, incoming triggers (release/deployment monitoring and Slack-invoked sessions) are rejected before any session runs. Defaults to `true`. + */ + enabled: boolean; + /** + * Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + */ + debugPermissionMode: AgentSettingsDebugPermissionMode; + createdAt: Date; + updatedAt: Date; +}; + +/** @internal */ +export const AgentSettingsDebugPermissionMode$inboundSchema: z.ZodEnum< + typeof AgentSettingsDebugPermissionMode +> = z.enum(AgentSettingsDebugPermissionMode); + +/** @internal */ +export const AgentSettings$inboundSchema: z.ZodType = z + .object({ + workspaceId: z.string(), + enabled: z.boolean(), + debugPermissionMode: AgentSettingsDebugPermissionMode$inboundSchema, + createdAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + updatedAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + }); + +export function agentSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AgentSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AgentSettings' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/createdebugsessionrequest.ts b/client-sdks/platform/typescript/src/models/createdebugsessionrequest.ts index 0524e4d86..3d27c2d88 100644 --- a/client-sdks/platform/typescript/src/models/createdebugsessionrequest.ts +++ b/client-sdks/platform/typescript/src/models/createdebugsessionrequest.ts @@ -3,10 +3,6 @@ */ import * as z from "zod/v4"; -import { - DebugSessionState, - DebugSessionState$outboundSchema, -} from "./debugsessionstate.js"; export type CreateDebugSessionRequest = { /** @@ -17,18 +13,24 @@ export type CreateDebugSessionRequest = { * Unique identifier for the deployment. */ deploymentId: string; - owner?: string | null | undefined; + /** + * Original actor label attested by the assigned manager. + */ + owner: string; expiresAt: Date; - state?: DebugSessionState | undefined; + /** + * Provider-owned target used for exact restart reconciliation. + */ + backendTargetId?: string | undefined; }; /** @internal */ export type CreateDebugSessionRequest$Outbound = { id?: string | undefined; deploymentId: string; - owner?: string | null | undefined; + owner: string; expiresAt: string; - state?: string | undefined; + backendTargetId?: string | undefined; }; /** @internal */ @@ -38,9 +40,9 @@ export const CreateDebugSessionRequest$outboundSchema: z.ZodType< > = z.object({ id: z.string().optional(), deploymentId: z.string(), - owner: z.nullable(z.string()).optional(), + owner: z.string(), expiresAt: z.date().transform(v => v.toISOString()), - state: DebugSessionState$outboundSchema.optional(), + backendTargetId: z.string().optional(), }); export function createDebugSessionRequestToJSON( diff --git a/client-sdks/platform/typescript/src/models/createmanagerresponse.ts b/client-sdks/platform/typescript/src/models/createmanagerresponse.ts index 1dd947f66..aa56f5305 100644 --- a/client-sdks/platform/typescript/src/models/createmanagerresponse.ts +++ b/client-sdks/platform/typescript/src/models/createmanagerresponse.ts @@ -49,7 +49,33 @@ export type CreateManagerResponseSetupConfig = { environmentVariables: Array; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateManagerResponseFailureDomains6 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateManagerResponseFailureDomainsUnion6 = + | CreateManagerResponseFailureDomains6 + | any; + export type CreateManagerResponsePoolsAutoscale3 = { + failureDomains?: + | CreateManagerResponseFailureDomains6 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -65,7 +91,33 @@ export type CreateManagerResponsePoolsAutoscale3 = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateManagerResponseFailureDomains5 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateManagerResponseFailureDomainsUnion5 = + | CreateManagerResponseFailureDomains5 + | any; + export type CreateManagerResponsePoolsFixed3 = { + failureDomains?: + | CreateManagerResponseFailureDomains5 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -1219,7 +1271,33 @@ export type CreateManagerResponseSetupTerraform = { stackSettings: CreateManagerResponseStackSettings3; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateManagerResponseFailureDomains4 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateManagerResponseFailureDomainsUnion4 = + | CreateManagerResponseFailureDomains4 + | any; + export type CreateManagerResponsePoolsAutoscale2 = { + failureDomains?: + | CreateManagerResponseFailureDomains4 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -1235,7 +1313,33 @@ export type CreateManagerResponsePoolsAutoscale2 = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateManagerResponseFailureDomains3 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateManagerResponseFailureDomainsUnion3 = + | CreateManagerResponseFailureDomains3 + | any; + export type CreateManagerResponsePoolsFixed2 = { + failureDomains?: + | CreateManagerResponseFailureDomains3 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -2384,7 +2488,33 @@ export type CreateManagerResponseSetupGoogleOauth = { stackSettings: CreateManagerResponseStackSettings2; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateManagerResponseFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateManagerResponseFailureDomainsUnion2 = + | CreateManagerResponseFailureDomains2 + | any; + export type CreateManagerResponsePoolsAutoscale1 = { + failureDomains?: + | CreateManagerResponseFailureDomains2 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -2400,7 +2530,33 @@ export type CreateManagerResponsePoolsAutoscale1 = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateManagerResponseFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateManagerResponseFailureDomainsUnion1 = + | CreateManagerResponseFailureDomains1 + | any; + export type CreateManagerResponsePoolsFixed1 = { + failureDomains?: + | CreateManagerResponseFailureDomains1 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -3630,15 +3786,70 @@ export function createManagerResponseSetupConfigFromJSON( ); } +/** @internal */ +export const CreateManagerResponseFailureDomains6$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomains6, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function createManagerResponseFailureDomains6FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomains6$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CreateManagerResponseFailureDomains6' from JSON`, + ); +} + +/** @internal */ +export const CreateManagerResponseFailureDomainsUnion6$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomainsUnion6, + unknown +> = z.union([ + z.lazy(() => CreateManagerResponseFailureDomains6$inboundSchema), + z.any(), +]); + +export function createManagerResponseFailureDomainsUnion6FromJSON( + jsonString: string, +): SafeParseResult< + CreateManagerResponseFailureDomainsUnion6, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomainsUnion6$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'CreateManagerResponseFailureDomainsUnion6' from JSON`, + ); +} + /** @internal */ export const CreateManagerResponsePoolsAutoscale3$inboundSchema: z.ZodType< CreateManagerResponsePoolsAutoscale3, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => CreateManagerResponseFailureDomains6$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function createManagerResponsePoolsAutoscale3FromJSON( @@ -3652,14 +3863,69 @@ export function createManagerResponsePoolsAutoscale3FromJSON( ); } +/** @internal */ +export const CreateManagerResponseFailureDomains5$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomains5, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function createManagerResponseFailureDomains5FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomains5$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CreateManagerResponseFailureDomains5' from JSON`, + ); +} + +/** @internal */ +export const CreateManagerResponseFailureDomainsUnion5$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomainsUnion5, + unknown +> = z.union([ + z.lazy(() => CreateManagerResponseFailureDomains5$inboundSchema), + z.any(), +]); + +export function createManagerResponseFailureDomainsUnion5FromJSON( + jsonString: string, +): SafeParseResult< + CreateManagerResponseFailureDomainsUnion5, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomainsUnion5$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'CreateManagerResponseFailureDomainsUnion5' from JSON`, + ); +} + /** @internal */ export const CreateManagerResponsePoolsFixed3$inboundSchema: z.ZodType< CreateManagerResponsePoolsFixed3, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => CreateManagerResponseFailureDomains5$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function createManagerResponsePoolsFixed3FromJSON( @@ -5613,15 +5879,70 @@ export function createManagerResponseSetupTerraformFromJSON( ); } +/** @internal */ +export const CreateManagerResponseFailureDomains4$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomains4, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function createManagerResponseFailureDomains4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomains4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CreateManagerResponseFailureDomains4' from JSON`, + ); +} + +/** @internal */ +export const CreateManagerResponseFailureDomainsUnion4$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomainsUnion4, + unknown +> = z.union([ + z.lazy(() => CreateManagerResponseFailureDomains4$inboundSchema), + z.any(), +]); + +export function createManagerResponseFailureDomainsUnion4FromJSON( + jsonString: string, +): SafeParseResult< + CreateManagerResponseFailureDomainsUnion4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomainsUnion4$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'CreateManagerResponseFailureDomainsUnion4' from JSON`, + ); +} + /** @internal */ export const CreateManagerResponsePoolsAutoscale2$inboundSchema: z.ZodType< CreateManagerResponsePoolsAutoscale2, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => CreateManagerResponseFailureDomains4$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function createManagerResponsePoolsAutoscale2FromJSON( @@ -5635,14 +5956,69 @@ export function createManagerResponsePoolsAutoscale2FromJSON( ); } +/** @internal */ +export const CreateManagerResponseFailureDomains3$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomains3, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function createManagerResponseFailureDomains3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomains3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CreateManagerResponseFailureDomains3' from JSON`, + ); +} + +/** @internal */ +export const CreateManagerResponseFailureDomainsUnion3$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomainsUnion3, + unknown +> = z.union([ + z.lazy(() => CreateManagerResponseFailureDomains3$inboundSchema), + z.any(), +]); + +export function createManagerResponseFailureDomainsUnion3FromJSON( + jsonString: string, +): SafeParseResult< + CreateManagerResponseFailureDomainsUnion3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomainsUnion3$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'CreateManagerResponseFailureDomainsUnion3' from JSON`, + ); +} + /** @internal */ export const CreateManagerResponsePoolsFixed2$inboundSchema: z.ZodType< CreateManagerResponsePoolsFixed2, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => CreateManagerResponseFailureDomains3$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function createManagerResponsePoolsFixed2FromJSON( @@ -7591,15 +7967,70 @@ export function createManagerResponseSetupGoogleOauthFromJSON( ); } +/** @internal */ +export const CreateManagerResponseFailureDomains2$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomains2, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function createManagerResponseFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomains2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CreateManagerResponseFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const CreateManagerResponseFailureDomainsUnion2$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomainsUnion2, + unknown +> = z.union([ + z.lazy(() => CreateManagerResponseFailureDomains2$inboundSchema), + z.any(), +]); + +export function createManagerResponseFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult< + CreateManagerResponseFailureDomainsUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomainsUnion2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'CreateManagerResponseFailureDomainsUnion2' from JSON`, + ); +} + /** @internal */ export const CreateManagerResponsePoolsAutoscale1$inboundSchema: z.ZodType< CreateManagerResponsePoolsAutoscale1, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => CreateManagerResponseFailureDomains2$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function createManagerResponsePoolsAutoscale1FromJSON( @@ -7613,14 +8044,69 @@ export function createManagerResponsePoolsAutoscale1FromJSON( ); } +/** @internal */ +export const CreateManagerResponseFailureDomains1$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomains1, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function createManagerResponseFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomains1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CreateManagerResponseFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const CreateManagerResponseFailureDomainsUnion1$inboundSchema: z.ZodType< + CreateManagerResponseFailureDomainsUnion1, + unknown +> = z.union([ + z.lazy(() => CreateManagerResponseFailureDomains1$inboundSchema), + z.any(), +]); + +export function createManagerResponseFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult< + CreateManagerResponseFailureDomainsUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + CreateManagerResponseFailureDomainsUnion1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'CreateManagerResponseFailureDomainsUnion1' from JSON`, + ); +} + /** @internal */ export const CreateManagerResponsePoolsFixed1$inboundSchema: z.ZodType< CreateManagerResponsePoolsFixed1, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => CreateManagerResponseFailureDomains1$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function createManagerResponsePoolsFixed1FromJSON( diff --git a/client-sdks/platform/typescript/src/models/createsetupregistrationoperationrequest.ts b/client-sdks/platform/typescript/src/models/createsetupregistrationoperationrequest.ts index 619dd8779..d6a3c0f1c 100644 --- a/client-sdks/platform/typescript/src/models/createsetupregistrationoperationrequest.ts +++ b/client-sdks/platform/typescript/src/models/createsetupregistrationoperationrequest.ts @@ -52,7 +52,33 @@ export type CreateSetupRegistrationOperationRequestPlatform = ClosedEnum< typeof CreateSetupRegistrationOperationRequestPlatform >; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateSetupRegistrationOperationRequestFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateSetupRegistrationOperationRequestFailureDomainsUnion2 = + | CreateSetupRegistrationOperationRequestFailureDomains2 + | any; + export type CreateSetupRegistrationOperationRequestPoolsAutoscale = { + failureDomains?: + | CreateSetupRegistrationOperationRequestFailureDomains2 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -68,7 +94,33 @@ export type CreateSetupRegistrationOperationRequestPoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type CreateSetupRegistrationOperationRequestFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type CreateSetupRegistrationOperationRequestFailureDomainsUnion1 = + | CreateSetupRegistrationOperationRequestFailureDomains1 + | any; + export type CreateSetupRegistrationOperationRequestPoolsFixed = { + failureDomains?: + | CreateSetupRegistrationOperationRequestFailureDomains1 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -1406,8 +1458,67 @@ export const CreateSetupRegistrationOperationRequestPlatform$outboundSchema: CreateSetupRegistrationOperationRequestPlatform, ); +/** @internal */ +export type CreateSetupRegistrationOperationRequestFailureDomains2$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const CreateSetupRegistrationOperationRequestFailureDomains2$outboundSchema: + z.ZodType< + CreateSetupRegistrationOperationRequestFailureDomains2$Outbound, + CreateSetupRegistrationOperationRequestFailureDomains2 + > = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function createSetupRegistrationOperationRequestFailureDomains2ToJSON( + createSetupRegistrationOperationRequestFailureDomains2: + CreateSetupRegistrationOperationRequestFailureDomains2, +): string { + return JSON.stringify( + CreateSetupRegistrationOperationRequestFailureDomains2$outboundSchema.parse( + createSetupRegistrationOperationRequestFailureDomains2, + ), + ); +} + +/** @internal */ +export type CreateSetupRegistrationOperationRequestFailureDomainsUnion2$Outbound = + | CreateSetupRegistrationOperationRequestFailureDomains2$Outbound + | any; + +/** @internal */ +export const CreateSetupRegistrationOperationRequestFailureDomainsUnion2$outboundSchema: + z.ZodType< + CreateSetupRegistrationOperationRequestFailureDomainsUnion2$Outbound, + CreateSetupRegistrationOperationRequestFailureDomainsUnion2 + > = z.union([ + z.lazy(() => + CreateSetupRegistrationOperationRequestFailureDomains2$outboundSchema + ), + z.any(), + ]); + +export function createSetupRegistrationOperationRequestFailureDomainsUnion2ToJSON( + createSetupRegistrationOperationRequestFailureDomainsUnion2: + CreateSetupRegistrationOperationRequestFailureDomainsUnion2, +): string { + return JSON.stringify( + CreateSetupRegistrationOperationRequestFailureDomainsUnion2$outboundSchema + .parse(createSetupRegistrationOperationRequestFailureDomainsUnion2), + ); +} + /** @internal */ export type CreateSetupRegistrationOperationRequestPoolsAutoscale$Outbound = { + failure_domains?: + | CreateSetupRegistrationOperationRequestFailureDomains2$Outbound + | any + | null + | undefined; machine?: string | null | undefined; max: number; min: number; @@ -1420,10 +1531,22 @@ export const CreateSetupRegistrationOperationRequestPoolsAutoscale$outboundSchem CreateSetupRegistrationOperationRequestPoolsAutoscale$Outbound, CreateSetupRegistrationOperationRequestPoolsAutoscale > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => + CreateSetupRegistrationOperationRequestFailureDomains2$outboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), + }).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function createSetupRegistrationOperationRequestPoolsAutoscaleToJSON( @@ -1437,8 +1560,67 @@ export function createSetupRegistrationOperationRequestPoolsAutoscaleToJSON( ); } +/** @internal */ +export type CreateSetupRegistrationOperationRequestFailureDomains1$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const CreateSetupRegistrationOperationRequestFailureDomains1$outboundSchema: + z.ZodType< + CreateSetupRegistrationOperationRequestFailureDomains1$Outbound, + CreateSetupRegistrationOperationRequestFailureDomains1 + > = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function createSetupRegistrationOperationRequestFailureDomains1ToJSON( + createSetupRegistrationOperationRequestFailureDomains1: + CreateSetupRegistrationOperationRequestFailureDomains1, +): string { + return JSON.stringify( + CreateSetupRegistrationOperationRequestFailureDomains1$outboundSchema.parse( + createSetupRegistrationOperationRequestFailureDomains1, + ), + ); +} + +/** @internal */ +export type CreateSetupRegistrationOperationRequestFailureDomainsUnion1$Outbound = + | CreateSetupRegistrationOperationRequestFailureDomains1$Outbound + | any; + +/** @internal */ +export const CreateSetupRegistrationOperationRequestFailureDomainsUnion1$outboundSchema: + z.ZodType< + CreateSetupRegistrationOperationRequestFailureDomainsUnion1$Outbound, + CreateSetupRegistrationOperationRequestFailureDomainsUnion1 + > = z.union([ + z.lazy(() => + CreateSetupRegistrationOperationRequestFailureDomains1$outboundSchema + ), + z.any(), + ]); + +export function createSetupRegistrationOperationRequestFailureDomainsUnion1ToJSON( + createSetupRegistrationOperationRequestFailureDomainsUnion1: + CreateSetupRegistrationOperationRequestFailureDomainsUnion1, +): string { + return JSON.stringify( + CreateSetupRegistrationOperationRequestFailureDomainsUnion1$outboundSchema + .parse(createSetupRegistrationOperationRequestFailureDomainsUnion1), + ); +} + /** @internal */ export type CreateSetupRegistrationOperationRequestPoolsFixed$Outbound = { + failure_domains?: + | CreateSetupRegistrationOperationRequestFailureDomains1$Outbound + | any + | null + | undefined; machine?: string | null | undefined; machines: number; mode: "fixed"; @@ -1450,9 +1632,21 @@ export const CreateSetupRegistrationOperationRequestPoolsFixed$outboundSchema: CreateSetupRegistrationOperationRequestPoolsFixed$Outbound, CreateSetupRegistrationOperationRequestPoolsFixed > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => + CreateSetupRegistrationOperationRequestFailureDomains1$outboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), + }).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function createSetupRegistrationOperationRequestPoolsFixedToJSON( diff --git a/client-sdks/platform/typescript/src/models/debugsession.ts b/client-sdks/platform/typescript/src/models/debugsession.ts index 1ab925f68..0c1dd6289 100644 --- a/client-sdks/platform/typescript/src/models/debugsession.ts +++ b/client-sdks/platform/typescript/src/models/debugsession.ts @@ -10,6 +10,14 @@ import { DebugPackagePresignedURLs, DebugPackagePresignedURLs$inboundSchema, } from "./debugpackagepresignedurls.js"; +import { + DebugSessionDeployment, + DebugSessionDeployment$inboundSchema, +} from "./debugsessiondeployment.js"; +import { + DebugSessionPublicError, + DebugSessionPublicError$inboundSchema, +} from "./debugsessionpublicerror.js"; import { DebugSessionState, DebugSessionState$inboundSchema, @@ -61,13 +69,14 @@ export type DebugSession = { */ provider?: DebugSessionProvider | null | undefined; presignedUrls: { [k: string]: DebugPackagePresignedURLs }; - error?: any | null | undefined; + error?: DebugSessionPublicError | null | undefined; createdAt: Date; expiresAt: Date; /** * Unique identifier for the deployment. */ deploymentId: string; + deployment: DebugSessionDeployment; /** * Unique identifier for the project. */ @@ -100,10 +109,11 @@ export const DebugSession$inboundSchema: z.ZodType = z z.string(), DebugPackagePresignedURLs$inboundSchema, ), - error: z.nullable(z.any()).optional(), + error: z.nullable(DebugSessionPublicError$inboundSchema).optional(), createdAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), expiresAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), deploymentId: z.string(), + deployment: DebugSessionDeployment$inboundSchema, projectId: z.string(), workspaceId: z.string(), }); diff --git a/client-sdks/platform/typescript/src/models/debugsessiondeployment.ts b/client-sdks/platform/typescript/src/models/debugsessiondeployment.ts new file mode 100644 index 000000000..0b464be3b --- /dev/null +++ b/client-sdks/platform/typescript/src/models/debugsessiondeployment.ts @@ -0,0 +1,428 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type DebugSessionDeploymentDeploymentGroup = { + /** + * Unique identifier for the deployment group. + */ + id: string; + name: string; +}; + +/** + * Represents the target cloud platform. + */ +export const DebugSessionDeploymentPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type DebugSessionDeploymentPlatform = ClosedEnum< + typeof DebugSessionDeploymentPlatform +>; + +export const DebugSessionDeploymentPlatformTest = { + Test: "test", +} as const; +export type DebugSessionDeploymentPlatformTest = ClosedEnum< + typeof DebugSessionDeploymentPlatformTest +>; + +/** + * Test platform environment information (mock) + */ +export type DebugSessionDeploymentEnvironmentInfoTest = { + /** + * Test identifier for this environment + */ + testId: string; + platform: DebugSessionDeploymentPlatformTest; +}; + +export const DebugSessionDeploymentPlatformLocal = { + Local: "local", +} as const; +export type DebugSessionDeploymentPlatformLocal = ClosedEnum< + typeof DebugSessionDeploymentPlatformLocal +>; + +/** + * Local platform environment information + */ +export type DebugSessionDeploymentEnvironmentInfoLocal = { + /** + * Architecture (e.g., "x86_64", "aarch64") + */ + arch: string; + /** + * Hostname of the machine running the deployment + */ + hostname: string; + /** + * Operating system (e.g., "linux", "macos", "windows") + */ + os: string; + platform: DebugSessionDeploymentPlatformLocal; +}; + +export const DebugSessionDeploymentPlatformAzure = { + Azure: "azure", +} as const; +export type DebugSessionDeploymentPlatformAzure = ClosedEnum< + typeof DebugSessionDeploymentPlatformAzure +>; + +/** + * Azure-specific environment information + */ +export type DebugSessionDeploymentEnvironmentInfoAzure = { + /** + * Azure location/region + */ + location: string; + /** + * Azure subscription ID + */ + subscriptionId: string; + /** + * Azure tenant ID + */ + tenantId: string; + platform: DebugSessionDeploymentPlatformAzure; +}; + +export const DebugSessionDeploymentPlatformGcp = { + Gcp: "gcp", +} as const; +export type DebugSessionDeploymentPlatformGcp = ClosedEnum< + typeof DebugSessionDeploymentPlatformGcp +>; + +/** + * GCP-specific environment information + */ +export type DebugSessionDeploymentEnvironmentInfoGcp = { + /** + * GCP project ID (e.g., "my-project") + */ + projectId: string; + /** + * GCP project number (e.g., "123456789012") + */ + projectNumber: string; + /** + * GCP region + */ + region: string; + platform: DebugSessionDeploymentPlatformGcp; +}; + +export const DebugSessionDeploymentPlatformAws = { + Aws: "aws", +} as const; +export type DebugSessionDeploymentPlatformAws = ClosedEnum< + typeof DebugSessionDeploymentPlatformAws +>; + +/** + * AWS-specific environment information + */ +export type DebugSessionDeploymentEnvironmentInfoAws = { + /** + * AWS account ID + */ + accountId: string; + /** + * AWS region + */ + region: string; + platform: DebugSessionDeploymentPlatformAws; +}; + +/** + * Platform-specific environment information + */ +export type DebugSessionDeploymentEnvironmentInfoUnion = + | DebugSessionDeploymentEnvironmentInfoGcp + | DebugSessionDeploymentEnvironmentInfoAzure + | DebugSessionDeploymentEnvironmentInfoLocal + | DebugSessionDeploymentEnvironmentInfoAws + | DebugSessionDeploymentEnvironmentInfoTest + | any; + +export type DebugSessionDeployment = { + /** + * Unique identifier for the deployment. + */ + id: string; + name: string; + deploymentGroup?: DebugSessionDeploymentDeploymentGroup | null | undefined; + /** + * Represents the target cloud platform. + */ + platform?: DebugSessionDeploymentPlatform | null | undefined; + /** + * Platform-specific environment information + */ + environmentInfo?: + | DebugSessionDeploymentEnvironmentInfoGcp + | DebugSessionDeploymentEnvironmentInfoAzure + | DebugSessionDeploymentEnvironmentInfoLocal + | DebugSessionDeploymentEnvironmentInfoAws + | DebugSessionDeploymentEnvironmentInfoTest + | any + | null + | undefined; +}; + +/** @internal */ +export const DebugSessionDeploymentDeploymentGroup$inboundSchema: z.ZodType< + DebugSessionDeploymentDeploymentGroup, + unknown +> = z.object({ + id: z.string(), + name: z.string(), +}); + +export function debugSessionDeploymentDeploymentGroupFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentDeploymentGroup$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionDeploymentDeploymentGroup' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeploymentPlatform$inboundSchema: z.ZodEnum< + typeof DebugSessionDeploymentPlatform +> = z.enum(DebugSessionDeploymentPlatform); + +/** @internal */ +export const DebugSessionDeploymentPlatformTest$inboundSchema: z.ZodEnum< + typeof DebugSessionDeploymentPlatformTest +> = z.enum(DebugSessionDeploymentPlatformTest); + +/** @internal */ +export const DebugSessionDeploymentEnvironmentInfoTest$inboundSchema: z.ZodType< + DebugSessionDeploymentEnvironmentInfoTest, + unknown +> = z.object({ + testId: z.string(), + platform: DebugSessionDeploymentPlatformTest$inboundSchema, +}); + +export function debugSessionDeploymentEnvironmentInfoTestFromJSON( + jsonString: string, +): SafeParseResult< + DebugSessionDeploymentEnvironmentInfoTest, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentEnvironmentInfoTest$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DebugSessionDeploymentEnvironmentInfoTest' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeploymentPlatformLocal$inboundSchema: z.ZodEnum< + typeof DebugSessionDeploymentPlatformLocal +> = z.enum(DebugSessionDeploymentPlatformLocal); + +/** @internal */ +export const DebugSessionDeploymentEnvironmentInfoLocal$inboundSchema: + z.ZodType = z.object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: DebugSessionDeploymentPlatformLocal$inboundSchema, + }); + +export function debugSessionDeploymentEnvironmentInfoLocalFromJSON( + jsonString: string, +): SafeParseResult< + DebugSessionDeploymentEnvironmentInfoLocal, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentEnvironmentInfoLocal$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DebugSessionDeploymentEnvironmentInfoLocal' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeploymentPlatformAzure$inboundSchema: z.ZodEnum< + typeof DebugSessionDeploymentPlatformAzure +> = z.enum(DebugSessionDeploymentPlatformAzure); + +/** @internal */ +export const DebugSessionDeploymentEnvironmentInfoAzure$inboundSchema: + z.ZodType = z.object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: DebugSessionDeploymentPlatformAzure$inboundSchema, + }); + +export function debugSessionDeploymentEnvironmentInfoAzureFromJSON( + jsonString: string, +): SafeParseResult< + DebugSessionDeploymentEnvironmentInfoAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentEnvironmentInfoAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DebugSessionDeploymentEnvironmentInfoAzure' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeploymentPlatformGcp$inboundSchema: z.ZodEnum< + typeof DebugSessionDeploymentPlatformGcp +> = z.enum(DebugSessionDeploymentPlatformGcp); + +/** @internal */ +export const DebugSessionDeploymentEnvironmentInfoGcp$inboundSchema: z.ZodType< + DebugSessionDeploymentEnvironmentInfoGcp, + unknown +> = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: DebugSessionDeploymentPlatformGcp$inboundSchema, +}); + +export function debugSessionDeploymentEnvironmentInfoGcpFromJSON( + jsonString: string, +): SafeParseResult< + DebugSessionDeploymentEnvironmentInfoGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentEnvironmentInfoGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DebugSessionDeploymentEnvironmentInfoGcp' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeploymentPlatformAws$inboundSchema: z.ZodEnum< + typeof DebugSessionDeploymentPlatformAws +> = z.enum(DebugSessionDeploymentPlatformAws); + +/** @internal */ +export const DebugSessionDeploymentEnvironmentInfoAws$inboundSchema: z.ZodType< + DebugSessionDeploymentEnvironmentInfoAws, + unknown +> = z.object({ + accountId: z.string(), + region: z.string(), + platform: DebugSessionDeploymentPlatformAws$inboundSchema, +}); + +export function debugSessionDeploymentEnvironmentInfoAwsFromJSON( + jsonString: string, +): SafeParseResult< + DebugSessionDeploymentEnvironmentInfoAws, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentEnvironmentInfoAws$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DebugSessionDeploymentEnvironmentInfoAws' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeploymentEnvironmentInfoUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DebugSessionDeploymentEnvironmentInfoGcp$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoAzure$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoLocal$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoAws$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoTest$inboundSchema), + z.any(), + ]); + +export function debugSessionDeploymentEnvironmentInfoUnionFromJSON( + jsonString: string, +): SafeParseResult< + DebugSessionDeploymentEnvironmentInfoUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DebugSessionDeploymentEnvironmentInfoUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DebugSessionDeploymentEnvironmentInfoUnion' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionDeployment$inboundSchema: z.ZodType< + DebugSessionDeployment, + unknown +> = z.object({ + id: z.string(), + name: z.string(), + deploymentGroup: z.nullable( + z.lazy(() => DebugSessionDeploymentDeploymentGroup$inboundSchema), + ).optional(), + platform: z.nullable(DebugSessionDeploymentPlatform$inboundSchema).optional(), + environmentInfo: z.nullable( + z.union([ + z.lazy(() => DebugSessionDeploymentEnvironmentInfoGcp$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoAzure$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoLocal$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoAws$inboundSchema), + z.lazy(() => DebugSessionDeploymentEnvironmentInfoTest$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function debugSessionDeploymentFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionDeployment$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionDeployment' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/debugsessionpublicerror.ts b/client-sdks/platform/typescript/src/models/debugsessionpublicerror.ts new file mode 100644 index 000000000..0db4832ba --- /dev/null +++ b/client-sdks/platform/typescript/src/models/debugsessionpublicerror.ts @@ -0,0 +1,52 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + DebugSessionPublicErrorCause, + DebugSessionPublicErrorCause$inboundSchema, +} from "./debugsessionpublicerrorcause.js"; +import { + DebugSessionPublicErrorContext, + DebugSessionPublicErrorContext$inboundSchema, +} from "./debugsessionpublicerrorcontext.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type DebugSessionPublicError = { + code: string; + context?: DebugSessionPublicErrorContext | undefined; + hint?: string | null | undefined; + httpStatusCode?: number | null | undefined; + internal: boolean; + message: string; + retryable: boolean; + source?: DebugSessionPublicErrorCause | undefined; +}; + +/** @internal */ +export const DebugSessionPublicError$inboundSchema: z.ZodType< + DebugSessionPublicError, + unknown +> = z.object({ + code: z.string(), + context: DebugSessionPublicErrorContext$inboundSchema.optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean(), + source: DebugSessionPublicErrorCause$inboundSchema.optional(), +}); + +export function debugSessionPublicErrorFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicError$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicError' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/debugsessionpublicerrorcause.ts b/client-sdks/platform/typescript/src/models/debugsessionpublicerrorcause.ts new file mode 100644 index 000000000..d7c7afd4f --- /dev/null +++ b/client-sdks/platform/typescript/src/models/debugsessionpublicerrorcause.ts @@ -0,0 +1,46 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + DebugSessionPublicErrorContext, + DebugSessionPublicErrorContext$inboundSchema, +} from "./debugsessionpublicerrorcontext.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type DebugSessionPublicErrorCause = { + code: string; + context?: DebugSessionPublicErrorContext | undefined; + hint?: string | null | undefined; + httpStatusCode?: number | null | undefined; + internal: boolean; + message: string; + retryable: boolean; +}; + +/** @internal */ +export const DebugSessionPublicErrorCause$inboundSchema: z.ZodType< + DebugSessionPublicErrorCause, + unknown +> = z.object({ + code: z.string(), + context: DebugSessionPublicErrorContext$inboundSchema.optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean(), +}); + +export function debugSessionPublicErrorCauseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorCause$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorCause' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/debugsessionpublicerrorcontext.ts b/client-sdks/platform/typescript/src/models/debugsessionpublicerrorcontext.ts new file mode 100644 index 000000000..98c302823 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/debugsessionpublicerrorcontext.ts @@ -0,0 +1,195 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type DebugSessionPublicErrorContext5 = string | number | boolean; + +export type DebugSessionPublicErrorContext4 = string | number | boolean; + +export type DebugSessionPublicErrorContext6 = + | string + | number + | boolean + | Array + | { [k: string]: string | number | boolean }; + +export type DebugSessionPublicErrorContext2 = string | number | boolean; + +export type DebugSessionPublicErrorContext1 = string | number | boolean; + +export type DebugSessionPublicErrorContext3 = + | string + | number + | boolean + | Array + | { [k: string]: string | number | boolean }; + +export type DebugSessionPublicErrorContext = + | string + | number + | boolean + | Array< + string | number | boolean | Array | { + [k: string]: string | number | boolean; + } + > + | { + [k: string]: + | string + | number + | boolean + | Array + | { [k: string]: string | number | boolean }; + }; + +/** @internal */ +export const DebugSessionPublicErrorContext5$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext5, + unknown +> = z.union([z.string(), z.number(), z.boolean()]); + +export function debugSessionPublicErrorContext5FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext5$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext5' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionPublicErrorContext4$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext4, + unknown +> = z.union([z.string(), z.number(), z.boolean()]); + +export function debugSessionPublicErrorContext4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext4' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionPublicErrorContext6$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext6, + unknown +> = z.union([ + z.string(), + z.number(), + z.boolean(), + z.array(z.union([z.string(), z.number(), z.boolean()])), + z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])), +]); + +export function debugSessionPublicErrorContext6FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext6$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext6' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionPublicErrorContext2$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext2, + unknown +> = z.union([z.string(), z.number(), z.boolean()]); + +export function debugSessionPublicErrorContext2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext2' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionPublicErrorContext1$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext1, + unknown +> = z.union([z.string(), z.number(), z.boolean()]); + +export function debugSessionPublicErrorContext1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext1' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionPublicErrorContext3$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext3, + unknown +> = z.union([ + z.string(), + z.number(), + z.boolean(), + z.array(z.union([z.string(), z.number(), z.boolean()])), + z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])), +]); + +export function debugSessionPublicErrorContext3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext3' from JSON`, + ); +} + +/** @internal */ +export const DebugSessionPublicErrorContext$inboundSchema: z.ZodType< + DebugSessionPublicErrorContext, + unknown +> = z.union([ + z.string(), + z.number(), + z.boolean(), + z.array( + z.union([ + z.string(), + z.number(), + z.boolean(), + z.array(z.union([z.string(), z.number(), z.boolean()])), + z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])), + ]), + ), + z.record( + z.string(), + z.union([ + z.string(), + z.number(), + z.boolean(), + z.array(z.union([z.string(), z.number(), z.boolean()])), + z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])), + ]), + ), +]); + +export function debugSessionPublicErrorContextFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DebugSessionPublicErrorContext$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DebugSessionPublicErrorContext' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/deployment.ts b/client-sdks/platform/typescript/src/models/deployment.ts index ac9488106..0cf284aa7 100644 --- a/client-sdks/platform/typescript/src/models/deployment.ts +++ b/client-sdks/platform/typescript/src/models/deployment.ts @@ -214,7 +214,27 @@ export type DeploymentEnvironmentInfoUnion = | DeploymentEnvironmentInfoTest | any; +/** + * Failure-domain policy selected for a compute pool. + */ +export type DeploymentFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type DeploymentFailureDomainsUnion2 = DeploymentFailureDomains2 | any; + export type DeploymentPoolsAutoscale = { + failureDomains?: DeploymentFailureDomains2 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -230,7 +250,27 @@ export type DeploymentPoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type DeploymentFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type DeploymentFailureDomainsUnion1 = DeploymentFailureDomains1 | any; + export type DeploymentPoolsFixed = { + failureDomains?: DeploymentFailureDomains1 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -1604,85 +1644,95 @@ export type DeploymentStackState = { resources: { [k: string]: DeploymentStackStateResources }; }; -export const DeploymentTypeStringList = { +export const DeploymentPendingPreparedStackTypeStringList = { StringList: "stringList", } as const; -export type DeploymentTypeStringList = ClosedEnum< - typeof DeploymentTypeStringList +export type DeploymentPendingPreparedStackTypeStringList = ClosedEnum< + typeof DeploymentPendingPreparedStackTypeStringList >; -export type DeploymentDefaultStringList = { - type: DeploymentTypeStringList; +export type DeploymentPendingPreparedStackDefaultStringList = { + type: DeploymentPendingPreparedStackTypeStringList; /** * String list default. */ value: Array; }; -export const DeploymentTypeBoolean = { +export const DeploymentPendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type DeploymentTypeBoolean = ClosedEnum; +export type DeploymentPendingPreparedStackTypeBoolean = ClosedEnum< + typeof DeploymentPendingPreparedStackTypeBoolean +>; -export type DeploymentDefaultBoolean = { - type: DeploymentTypeBoolean; +export type DeploymentPendingPreparedStackDefaultBoolean = { + type: DeploymentPendingPreparedStackTypeBoolean; /** * Boolean default. */ value: boolean; }; -export const DeploymentTypeNumber = { +export const DeploymentPendingPreparedStackTypeNumber = { Number: "number", } as const; -export type DeploymentTypeNumber = ClosedEnum; +export type DeploymentPendingPreparedStackTypeNumber = ClosedEnum< + typeof DeploymentPendingPreparedStackTypeNumber +>; -export type DeploymentDefaultNumber = { - type: DeploymentTypeNumber; +export type DeploymentPendingPreparedStackDefaultNumber = { + type: DeploymentPendingPreparedStackTypeNumber; /** * Number default. */ value: string; }; -export const DeploymentTypeString = { +export const DeploymentPendingPreparedStackTypeString = { String: "string", } as const; -export type DeploymentTypeString = ClosedEnum; +export type DeploymentPendingPreparedStackTypeString = ClosedEnum< + typeof DeploymentPendingPreparedStackTypeString +>; -export type DeploymentDefaultString = { - type: DeploymentTypeString; +export type DeploymentPendingPreparedStackDefaultString = { + type: DeploymentPendingPreparedStackTypeString; /** * String default. */ value: string; }; -export type DeploymentDefaultUnion = - | DeploymentDefaultString - | DeploymentDefaultNumber - | DeploymentDefaultBoolean - | DeploymentDefaultStringList +export type DeploymentPendingPreparedStackDefaultUnion = + | DeploymentPendingPreparedStackDefaultString + | DeploymentPendingPreparedStackDefaultNumber + | DeploymentPendingPreparedStackDefaultBoolean + | DeploymentPendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const DeploymentTypeEnvEnum = { +export const DeploymentPendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type DeploymentTypeEnvEnum = ClosedEnum; +export type DeploymentPendingPreparedStackTypeEnvEnum = ClosedEnum< + typeof DeploymentPendingPreparedStackTypeEnvEnum +>; -export type DeploymentTypeUnion = DeploymentTypeEnvEnum | any; +export type DeploymentPendingPreparedStackTypeUnion = + | DeploymentPendingPreparedStackTypeEnvEnum + | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type DeploymentEnv = { +export type DeploymentPendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1691,13 +1741,13 @@ export type DeploymentEnv = { * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: DeploymentTypeEnvEnum | any | null | undefined; + type?: DeploymentPendingPreparedStackTypeEnvEnum | any | null | undefined; }; /** * Primitive stack input kind. */ -export const DeploymentKind = { +export const DeploymentPendingPreparedStackKind = { String: "string", Secret: "secret", Number: "number", @@ -1709,12 +1759,14 @@ export const DeploymentKind = { /** * Primitive stack input kind. */ -export type DeploymentKind = ClosedEnum; +export type DeploymentPendingPreparedStackKind = ClosedEnum< + typeof DeploymentPendingPreparedStackKind +>; /** * Represents the target cloud platform. */ -export const DeploymentPreparedStackPlatform = { +export const DeploymentPendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1726,26 +1778,28 @@ export const DeploymentPreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type DeploymentPreparedStackPlatform = ClosedEnum< - typeof DeploymentPreparedStackPlatform +export type DeploymentPendingPreparedStackPlatform = ClosedEnum< + typeof DeploymentPendingPreparedStackPlatform >; /** * Who can provide a stack input value. */ -export const DeploymentProvidedBy = { +export const DeploymentPendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type DeploymentProvidedBy = ClosedEnum; +export type DeploymentPendingPreparedStackProvidedBy = ClosedEnum< + typeof DeploymentPendingPreparedStackProvidedBy +>; /** * Portable stack input validation constraints. */ -export type DeploymentValidation = { +export type DeploymentPendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -1784,17 +1838,19 @@ export type DeploymentValidation = { values?: Array | null | undefined; }; -export type DeploymentValidationUnion = DeploymentValidation | any; +export type DeploymentPendingPreparedStackValidationUnion = + | DeploymentPendingPreparedStackValidation + | any; /** * Stack input definition serialized into a release stack. */ -export type DeploymentInput = { +export type DeploymentPendingPreparedStackInput = { default?: - | DeploymentDefaultString - | DeploymentDefaultNumber - | DeploymentDefaultBoolean - | DeploymentDefaultStringList + | DeploymentPendingPreparedStackDefaultString + | DeploymentPendingPreparedStackDefaultNumber + | DeploymentPendingPreparedStackDefaultBoolean + | DeploymentPendingPreparedStackDefaultStringList | any | null | undefined; @@ -1805,7 +1861,7 @@ export type DeploymentInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -1813,7 +1869,7 @@ export type DeploymentInput = { /** * Primitive stack input kind. */ - kind: DeploymentKind; + kind: DeploymentPendingPreparedStackKind; /** * Human-facing field label. */ @@ -1825,29 +1881,33 @@ export type DeploymentInput = { /** * Platforms where this input applies. */ - platforms?: Array | null | undefined; + platforms?: Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; - validation?: DeploymentValidation | any | null | undefined; + validation?: + | DeploymentPendingPreparedStackValidation + | any + | null + | undefined; }; -export const DeploymentManagementEnum = { +export const DeploymentPendingPreparedStackManagementEnum = { Auto: "auto", } as const; -export type DeploymentManagementEnum = ClosedEnum< - typeof DeploymentManagementEnum +export type DeploymentPendingPreparedStackManagementEnum = ClosedEnum< + typeof DeploymentPendingPreparedStackManagementEnum >; /** * AWS-specific binding specification */ -export type DeploymentOverrideAwResource = { +export type DeploymentPendingPreparedStackOverrideAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -1861,7 +1921,7 @@ export type DeploymentOverrideAwResource = { /** * AWS-specific binding specification */ -export type DeploymentOverrideAwStack = { +export type DeploymentPendingPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -1875,35 +1935,35 @@ export type DeploymentOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type DeploymentOverrideAwBinding = { +export type DeploymentPendingPreparedStackOverrideAwBinding = { /** * AWS-specific binding specification */ - resource?: DeploymentOverrideAwResource | undefined; + resource?: DeploymentPendingPreparedStackOverrideAwResource | undefined; /** * AWS-specific binding specification */ - stack?: DeploymentOverrideAwStack | undefined; + stack?: DeploymentPendingPreparedStackOverrideAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const DeploymentOverrideEffect = { +export const DeploymentPendingPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type DeploymentOverrideEffect = ClosedEnum< - typeof DeploymentOverrideEffect +export type DeploymentPendingPreparedStackOverrideEffect = ClosedEnum< + typeof DeploymentPendingPreparedStackOverrideEffect >; /** * Grant permissions for a specific cloud platform */ -export type DeploymentOverrideAwGrant = { +export type DeploymentPendingPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -1929,11 +1989,11 @@ export type DeploymentOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type DeploymentOverrideAw = { +export type DeploymentPendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: DeploymentOverrideAwBinding; + binding: DeploymentPendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -1941,11 +2001,11 @@ export type DeploymentOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: DeploymentOverrideEffect | undefined; + effect?: DeploymentPendingPreparedStackOverrideEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: DeploymentOverrideAwGrant; + grant: DeploymentPendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -1955,7 +2015,7 @@ export type DeploymentOverrideAw = { /** * Azure-specific binding specification */ -export type DeploymentOverrideAzureResource = { +export type DeploymentPendingPreparedStackOverrideAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -1965,7 +2025,7 @@ export type DeploymentOverrideAzureResource = { /** * Azure-specific binding specification */ -export type DeploymentOverrideAzureStack = { +export type DeploymentPendingPreparedStackOverrideAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -1975,21 +2035,21 @@ export type DeploymentOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type DeploymentOverrideAzureBinding = { +export type DeploymentPendingPreparedStackOverrideAzureBinding = { /** * Azure-specific binding specification */ - resource?: DeploymentOverrideAzureResource | undefined; + resource?: DeploymentPendingPreparedStackOverrideAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: DeploymentOverrideAzureStack | undefined; + stack?: DeploymentPendingPreparedStackOverrideAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentOverrideAzureGrant = { +export type DeploymentPendingPreparedStackOverrideAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2015,11 +2075,11 @@ export type DeploymentOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type DeploymentOverrideAzure = { +export type DeploymentPendingPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: DeploymentOverrideAzureBinding; + binding: DeploymentPendingPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2027,7 +2087,7 @@ export type DeploymentOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentOverrideAzureGrant; + grant: DeploymentPendingPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2037,20 +2097,24 @@ export type DeploymentOverrideAzure = { /** * GCP IAM condition */ -export type DeploymentOverrideConditionResource = { +export type DeploymentPendingPreparedStackOverrideConditionResource = { expression: string; title: string; }; -export type DeploymentOverrideResourceConditionUnion = - | DeploymentOverrideConditionResource +export type DeploymentPendingPreparedStackOverrideResourceConditionUnion = + | DeploymentPendingPreparedStackOverrideConditionResource | any; /** * GCP-specific binding specification */ -export type DeploymentOverrideGcpResource = { - condition?: DeploymentOverrideConditionResource | any | null | undefined; +export type DeploymentPendingPreparedStackOverrideGcpResource = { + condition?: + | DeploymentPendingPreparedStackOverrideConditionResource + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2060,20 +2124,24 @@ export type DeploymentOverrideGcpResource = { /** * GCP IAM condition */ -export type DeploymentOverrideConditionStack = { +export type DeploymentPendingPreparedStackOverrideConditionStack = { expression: string; title: string; }; -export type DeploymentOverrideStackConditionUnion = - | DeploymentOverrideConditionStack +export type DeploymentPendingPreparedStackOverrideStackConditionUnion = + | DeploymentPendingPreparedStackOverrideConditionStack | any; /** * GCP-specific binding specification */ -export type DeploymentOverrideGcpStack = { - condition?: DeploymentOverrideConditionStack | any | null | undefined; +export type DeploymentPendingPreparedStackOverrideGcpStack = { + condition?: + | DeploymentPendingPreparedStackOverrideConditionStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2083,21 +2151,21 @@ export type DeploymentOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type DeploymentOverrideGcpBinding = { +export type DeploymentPendingPreparedStackOverrideGcpBinding = { /** * GCP-specific binding specification */ - resource?: DeploymentOverrideGcpResource | undefined; + resource?: DeploymentPendingPreparedStackOverrideGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: DeploymentOverrideGcpStack | undefined; + stack?: DeploymentPendingPreparedStackOverrideGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentOverrideGcpGrant = { +export type DeploymentPendingPreparedStackOverrideGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2123,11 +2191,11 @@ export type DeploymentOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type DeploymentOverrideGcp = { +export type DeploymentPendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: DeploymentOverrideGcpBinding; + binding: DeploymentPendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2135,7 +2203,7 @@ export type DeploymentOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentOverrideGcpGrant; + grant: DeploymentPendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2145,25 +2213,25 @@ export type DeploymentOverrideGcp = { /** * Platform-specific permission configurations */ -export type DeploymentOverridePlatforms = { +export type DeploymentPendingPreparedStackOverridePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type DeploymentOverride = { +export type DeploymentPendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -2175,28 +2243,32 @@ export type DeploymentOverride = { /** * Platform-specific permission configurations */ - platforms: DeploymentOverridePlatforms; + platforms: DeploymentPendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type DeploymentOverrideUnion = DeploymentOverride | string; +export type DeploymentPendingPreparedStackOverrideUnion = + | DeploymentPendingPreparedStackOverride + | string; -export type DeploymentManagement2 = { +export type DeploymentPendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - override: { [k: string]: Array }; + override: { + [k: string]: Array; + }; }; /** * AWS-specific binding specification */ -export type DeploymentExtendAwResource = { +export type DeploymentPendingPreparedStackExtendAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2210,7 +2282,7 @@ export type DeploymentExtendAwResource = { /** * AWS-specific binding specification */ -export type DeploymentExtendAwStack = { +export type DeploymentPendingPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2224,33 +2296,35 @@ export type DeploymentExtendAwStack = { /** * Generic binding configuration for permissions */ -export type DeploymentExtendAwBinding = { +export type DeploymentPendingPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: DeploymentExtendAwResource | undefined; + resource?: DeploymentPendingPreparedStackExtendAwResource | undefined; /** * AWS-specific binding specification */ - stack?: DeploymentExtendAwStack | undefined; + stack?: DeploymentPendingPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const DeploymentExtendEffect = { +export const DeploymentPendingPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type DeploymentExtendEffect = ClosedEnum; +export type DeploymentPendingPreparedStackExtendEffect = ClosedEnum< + typeof DeploymentPendingPreparedStackExtendEffect +>; /** * Grant permissions for a specific cloud platform */ -export type DeploymentExtendAwGrant = { +export type DeploymentPendingPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2276,11 +2350,11 @@ export type DeploymentExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type DeploymentExtendAw = { +export type DeploymentPendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: DeploymentExtendAwBinding; + binding: DeploymentPendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2288,11 +2362,11 @@ export type DeploymentExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: DeploymentExtendEffect | undefined; + effect?: DeploymentPendingPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: DeploymentExtendAwGrant; + grant: DeploymentPendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2302,7 +2376,7 @@ export type DeploymentExtendAw = { /** * Azure-specific binding specification */ -export type DeploymentExtendAzureResource = { +export type DeploymentPendingPreparedStackExtendAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2312,7 +2386,7 @@ export type DeploymentExtendAzureResource = { /** * Azure-specific binding specification */ -export type DeploymentExtendAzureStack = { +export type DeploymentPendingPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2322,21 +2396,21 @@ export type DeploymentExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type DeploymentExtendAzureBinding = { +export type DeploymentPendingPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: DeploymentExtendAzureResource | undefined; + resource?: DeploymentPendingPreparedStackExtendAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: DeploymentExtendAzureStack | undefined; + stack?: DeploymentPendingPreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentExtendAzureGrant = { +export type DeploymentPendingPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2362,11 +2436,11 @@ export type DeploymentExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type DeploymentExtendAzure = { +export type DeploymentPendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: DeploymentExtendAzureBinding; + binding: DeploymentPendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2374,7 +2448,7 @@ export type DeploymentExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentExtendAzureGrant; + grant: DeploymentPendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2384,20 +2458,24 @@ export type DeploymentExtendAzure = { /** * GCP IAM condition */ -export type DeploymentExtendConditionResource = { +export type DeploymentPendingPreparedStackExtendConditionResource = { expression: string; title: string; }; -export type DeploymentExtendResourceConditionUnion = - | DeploymentExtendConditionResource +export type DeploymentPendingPreparedStackExtendResourceConditionUnion = + | DeploymentPendingPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type DeploymentExtendGcpResource = { - condition?: DeploymentExtendConditionResource | any | null | undefined; +export type DeploymentPendingPreparedStackExtendGcpResource = { + condition?: + | DeploymentPendingPreparedStackExtendConditionResource + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2407,20 +2485,24 @@ export type DeploymentExtendGcpResource = { /** * GCP IAM condition */ -export type DeploymentExtendConditionStack = { +export type DeploymentPendingPreparedStackExtendConditionStack = { expression: string; title: string; }; -export type DeploymentExtendStackConditionUnion = - | DeploymentExtendConditionStack +export type DeploymentPendingPreparedStackExtendStackConditionUnion = + | DeploymentPendingPreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type DeploymentExtendGcpStack = { - condition?: DeploymentExtendConditionStack | any | null | undefined; +export type DeploymentPendingPreparedStackExtendGcpStack = { + condition?: + | DeploymentPendingPreparedStackExtendConditionStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2430,21 +2512,21 @@ export type DeploymentExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type DeploymentExtendGcpBinding = { +export type DeploymentPendingPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: DeploymentExtendGcpResource | undefined; + resource?: DeploymentPendingPreparedStackExtendGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: DeploymentExtendGcpStack | undefined; + stack?: DeploymentPendingPreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentExtendGcpGrant = { +export type DeploymentPendingPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2470,11 +2552,11 @@ export type DeploymentExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type DeploymentExtendGcp = { +export type DeploymentPendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: DeploymentExtendGcpBinding; + binding: DeploymentPendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2482,7 +2564,7 @@ export type DeploymentExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentExtendGcpGrant; + grant: DeploymentPendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2492,25 +2574,25 @@ export type DeploymentExtendGcp = { /** * Platform-specific permission configurations */ -export type DeploymentExtendPlatforms = { +export type DeploymentPendingPreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type DeploymentExtend = { +export type DeploymentPendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -2522,36 +2604,38 @@ export type DeploymentExtend = { /** * Platform-specific permission configurations */ - platforms: DeploymentExtendPlatforms; + platforms: DeploymentPendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type DeploymentExtendUnion = DeploymentExtend | string; +export type DeploymentPendingPreparedStackExtendUnion = + | DeploymentPendingPreparedStackExtend + | string; -export type DeploymentManagement1 = { +export type DeploymentPendingPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - extend: { [k: string]: Array }; + extend: { [k: string]: Array }; }; /** * Management permissions configuration for stack management access */ -export type DeploymentManagementUnion = - | DeploymentManagement1 - | DeploymentManagement2 - | DeploymentManagementEnum; +export type DeploymentPendingPreparedStackManagementUnion = + | DeploymentPendingPreparedStackManagement1 + | DeploymentPendingPreparedStackManagement2 + | DeploymentPendingPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type DeploymentProfileAwResource = { +export type DeploymentPendingPreparedStackProfileAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2565,7 +2649,7 @@ export type DeploymentProfileAwResource = { /** * AWS-specific binding specification */ -export type DeploymentProfileAwStack = { +export type DeploymentPendingPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2579,35 +2663,35 @@ export type DeploymentProfileAwStack = { /** * Generic binding configuration for permissions */ -export type DeploymentProfileAwBinding = { +export type DeploymentPendingPreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ - resource?: DeploymentProfileAwResource | undefined; + resource?: DeploymentPendingPreparedStackProfileAwResource | undefined; /** * AWS-specific binding specification */ - stack?: DeploymentProfileAwStack | undefined; + stack?: DeploymentPendingPreparedStackProfileAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const DeploymentProfileEffect = { +export const DeploymentPendingPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type DeploymentProfileEffect = ClosedEnum< - typeof DeploymentProfileEffect +export type DeploymentPendingPreparedStackProfileEffect = ClosedEnum< + typeof DeploymentPendingPreparedStackProfileEffect >; /** * Grant permissions for a specific cloud platform */ -export type DeploymentProfileAwGrant = { +export type DeploymentPendingPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2633,11 +2717,11 @@ export type DeploymentProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type DeploymentProfileAw = { +export type DeploymentPendingPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: DeploymentProfileAwBinding; + binding: DeploymentPendingPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2645,11 +2729,11 @@ export type DeploymentProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: DeploymentProfileEffect | undefined; + effect?: DeploymentPendingPreparedStackProfileEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: DeploymentProfileAwGrant; + grant: DeploymentPendingPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2659,7 +2743,7 @@ export type DeploymentProfileAw = { /** * Azure-specific binding specification */ -export type DeploymentProfileAzureResource = { +export type DeploymentPendingPreparedStackProfileAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2669,7 +2753,7 @@ export type DeploymentProfileAzureResource = { /** * Azure-specific binding specification */ -export type DeploymentProfileAzureStack = { +export type DeploymentPendingPreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2679,21 +2763,21 @@ export type DeploymentProfileAzureStack = { /** * Generic binding configuration for permissions */ -export type DeploymentProfileAzureBinding = { +export type DeploymentPendingPreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ - resource?: DeploymentProfileAzureResource | undefined; + resource?: DeploymentPendingPreparedStackProfileAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: DeploymentProfileAzureStack | undefined; + stack?: DeploymentPendingPreparedStackProfileAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentProfileAzureGrant = { +export type DeploymentPendingPreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2719,11 +2803,11 @@ export type DeploymentProfileAzureGrant = { /** * Azure-specific platform permission configuration */ -export type DeploymentProfileAzure = { +export type DeploymentPendingPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: DeploymentProfileAzureBinding; + binding: DeploymentPendingPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2731,7 +2815,7 @@ export type DeploymentProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentProfileAzureGrant; + grant: DeploymentPendingPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2741,20 +2825,24 @@ export type DeploymentProfileAzure = { /** * GCP IAM condition */ -export type DeploymentProfileConditionResource = { +export type DeploymentPendingPreparedStackProfileConditionResource = { expression: string; title: string; }; -export type DeploymentProfileResourceConditionUnion = - | DeploymentProfileConditionResource +export type DeploymentPendingPreparedStackProfileResourceConditionUnion = + | DeploymentPendingPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type DeploymentProfileGcpResource = { - condition?: DeploymentProfileConditionResource | any | null | undefined; +export type DeploymentPendingPreparedStackProfileGcpResource = { + condition?: + | DeploymentPendingPreparedStackProfileConditionResource + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2764,20 +2852,24 @@ export type DeploymentProfileGcpResource = { /** * GCP IAM condition */ -export type DeploymentProfileConditionStack = { +export type DeploymentPendingPreparedStackProfileConditionStack = { expression: string; title: string; }; -export type DeploymentProfileStackConditionUnion = - | DeploymentProfileConditionStack +export type DeploymentPendingPreparedStackProfileStackConditionUnion = + | DeploymentPendingPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type DeploymentProfileGcpStack = { - condition?: DeploymentProfileConditionStack | any | null | undefined; +export type DeploymentPendingPreparedStackProfileGcpStack = { + condition?: + | DeploymentPendingPreparedStackProfileConditionStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2787,21 +2879,21 @@ export type DeploymentProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type DeploymentProfileGcpBinding = { +export type DeploymentPendingPreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ - resource?: DeploymentProfileGcpResource | undefined; + resource?: DeploymentPendingPreparedStackProfileGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: DeploymentProfileGcpStack | undefined; + stack?: DeploymentPendingPreparedStackProfileGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentProfileGcpGrant = { +export type DeploymentPendingPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2827,11 +2919,11 @@ export type DeploymentProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type DeploymentProfileGcp = { +export type DeploymentPendingPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: DeploymentProfileGcpBinding; + binding: DeploymentPendingPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2839,7 +2931,7 @@ export type DeploymentProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentProfileGcpGrant; + grant: DeploymentPendingPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2849,25 +2941,25 @@ export type DeploymentProfileGcp = { /** * Platform-specific permission configurations */ -export type DeploymentProfilePlatforms = { +export type DeploymentPendingPreparedStackProfilePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type DeploymentProfile = { +export type DeploymentPendingPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -2879,25 +2971,27 @@ export type DeploymentProfile = { /** * Platform-specific permission configurations */ - platforms: DeploymentProfilePlatforms; + platforms: DeploymentPendingPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type DeploymentProfileUnion = DeploymentProfile | string; +export type DeploymentPendingPreparedStackProfileUnion = + | DeploymentPendingPreparedStackProfile + | string; /** * Combined permissions configuration that contains both profiles and management */ -export type DeploymentPermissions = { +export type DeploymentPendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | DeploymentManagement1 - | DeploymentManagement2 - | DeploymentManagementEnum + | DeploymentPendingPreparedStackManagement1 + | DeploymentPendingPreparedStackManagement2 + | DeploymentPendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -2905,13 +2999,17 @@ export type DeploymentPermissions = { * @remarks * Key is the profile name, value is the permission configuration */ - profiles: { [k: string]: { [k: string]: Array } }; + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; }; /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type DeploymentPreparedStackConfig = { +export type DeploymentPendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -2926,7 +3024,7 @@ export type DeploymentPreparedStackConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type DeploymentPreparedStackDependency = { +export type DeploymentPendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -2937,33 +3035,44 @@ export type DeploymentPreparedStackDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const DeploymentPreparedStackLifecycle = { +export const DeploymentPendingPreparedStackLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type DeploymentPreparedStackLifecycle = ClosedEnum< - typeof DeploymentPreparedStackLifecycle +export type DeploymentPendingPreparedStackLifecycle = ClosedEnum< + typeof DeploymentPendingPreparedStackLifecycle >; -export type DeploymentPreparedStackResources = { +export type DeploymentPendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: DeploymentPreparedStackConfig; + config: DeploymentPendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: DeploymentPreparedStackLifecycle; + lifecycle: DeploymentPendingPreparedStackLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -2977,7 +3086,7 @@ export type DeploymentPreparedStackResources = { /** * Represents the target cloud platform. */ -export const DeploymentSupportedPlatform = { +export const DeploymentPendingPreparedStackSupportedPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -2989,14 +3098,14 @@ export const DeploymentSupportedPlatform = { /** * Represents the target cloud platform. */ -export type DeploymentSupportedPlatform = ClosedEnum< - typeof DeploymentSupportedPlatform +export type DeploymentPendingPreparedStackSupportedPlatform = ClosedEnum< + typeof DeploymentPendingPreparedStackSupportedPlatform >; /** * A bag of resources, unaware of any cloud. */ -export type DeploymentPreparedStack = { +export type DeploymentPendingPreparedStack = { /** * Unique identifier for the stack */ @@ -3004,2454 +3113,6428 @@ export type DeploymentPreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: Array | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: DeploymentPermissions | undefined; + permissions?: DeploymentPendingPreparedStackPermissions | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: DeploymentPreparedStackResources }; + resources: { [k: string]: DeploymentPendingPreparedStackResources }; /** * Which platforms this stack supports. When None, all platforms are supported. */ - supportedPlatforms?: Array | null | undefined; + supportedPlatforms?: + | Array + | null + | undefined; }; -export type DeploymentPreparedStackUnion = DeploymentPreparedStack | any; +export type DeploymentPendingPreparedStackUnion = + | DeploymentPendingPreparedStack + | any; -/** - * Runtime metadata for deployment state persistence - */ -export type DeploymentRuntimeMetadata = { +export const DeploymentPreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type DeploymentPreparedStackTypeStringList = ClosedEnum< + typeof DeploymentPreparedStackTypeStringList +>; + +export type DeploymentPreparedStackDefaultStringList = { + type: DeploymentPreparedStackTypeStringList; /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * String list default. */ - lastSyncedEnvVarsHash?: string | null | undefined; + value: Array; +}; + +export const DeploymentPreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type DeploymentPreparedStackTypeBoolean = ClosedEnum< + typeof DeploymentPreparedStackTypeBoolean +>; + +export type DeploymentPreparedStackDefaultBoolean = { + type: DeploymentPreparedStackTypeBoolean; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Boolean default. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: DeploymentPreparedStack | any | null | undefined; + value: boolean; +}; + +export const DeploymentPreparedStackTypeNumber = { + Number: "number", +} as const; +export type DeploymentPreparedStackTypeNumber = ClosedEnum< + typeof DeploymentPreparedStackTypeNumber +>; + +export type DeploymentPreparedStackDefaultNumber = { + type: DeploymentPreparedStackTypeNumber; /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. + * Number default. */ - registryAccessGranted?: boolean | undefined; + value: string; +}; + +export const DeploymentPreparedStackTypeString = { + String: "string", +} as const; +export type DeploymentPreparedStackTypeString = ClosedEnum< + typeof DeploymentPreparedStackTypeString +>; + +export type DeploymentPreparedStackDefaultString = { + type: DeploymentPreparedStackTypeString; + /** + * String default. + */ + value: string; }; +export type DeploymentPreparedStackDefaultUnion = + | DeploymentPreparedStackDefaultString + | DeploymentPreparedStackDefaultNumber + | DeploymentPreparedStackDefaultBoolean + | DeploymentPreparedStackDefaultStringList + | any; + /** - * Setup source that imported this deployment + * Environment variable handling for a stack input mapping. */ -export const DeploymentImportSource = { - Cloudformation: "cloudformation", - Terraform: "terraform", - Helm: "helm", +export const DeploymentPreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; /** - * Setup source that imported this deployment + * Environment variable handling for a stack input mapping. */ -export type DeploymentImportSource = ClosedEnum; +export type DeploymentPreparedStackTypeEnvEnum = ClosedEnum< + typeof DeploymentPreparedStackTypeEnvEnum +>; + +export type DeploymentPreparedStackTypeUnion = + | DeploymentPreparedStackTypeEnvEnum + | any; /** - * Setup method that created the deployment record and owns setup-time resources. + * How a resolved stack input is injected into runtime environment variables. */ -export const DeploymentSetupMethod1 = { - Cloudformation: "cloudformation", - GoogleOauth: "google-oauth", - Terraform: "terraform", - Helm: "helm", - Cli: "cli", - Manual: "manual", +export type DeploymentPreparedStackEnv = { + /** + * Environment variable name. + */ + name: string; + /** + * Target resource IDs or patterns. None means every env-capable resource. + */ + targetResources?: Array | null | undefined; + type?: DeploymentPreparedStackTypeEnvEnum | any | null | undefined; +}; + +/** + * Primitive stack input kind. + */ +export const DeploymentPreparedStackKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", } as const; /** - * Setup method that created the deployment record and owns setup-time resources. + * Primitive stack input kind. */ -export type DeploymentSetupMethod1 = ClosedEnum; +export type DeploymentPreparedStackKind = ClosedEnum< + typeof DeploymentPreparedStackKind +>; /** - * Latest error information if the deployment is in a failed state + * Represents the target cloud platform. */ -export type DeploymentError = { +export const DeploymentPreparedStackPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type DeploymentPreparedStackPlatform = ClosedEnum< + typeof DeploymentPreparedStackPlatform +>; + +/** + * Who can provide a stack input value. + */ +export const DeploymentPreparedStackProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type DeploymentPreparedStackProvidedBy = ClosedEnum< + typeof DeploymentPreparedStackProvidedBy +>; + +/** + * Portable stack input validation constraints. + */ +export type DeploymentPreparedStackValidation = { /** - * A unique identifier for the type of error. - * - * @remarks - * - * This should be a short, machine-readable string that can be used - * by clients to programmatically handle different error types. - * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + * Semantic format hint such as url. */ - code: string; + format?: string | null | undefined; /** - * Additional diagnostic information about the error context. - * - * @remarks - * - * This optional field can contain structured data providing more details - * about the error, such as validation errors, request parameters that - * caused the issue, or other relevant context information. + * Maximum number. */ - context?: any | null | undefined; + max?: string | null | undefined; /** - * Optional human-facing remediation hint. + * Maximum string-list items. */ - hint?: string | null | undefined; + maxItems?: number | null | undefined; /** - * HTTP status code for this error. - * - * @remarks - * - * Used when converting the error to an HTTP response. If None, falls back to - * the error type's default status code or 500. + * Maximum string length. */ - httpStatusCode?: number | null | undefined; + maxLength?: number | null | undefined; /** - * Indicates if this is an internal error that should not be exposed to users. - * - * @remarks - * - * When `true`, this error contains sensitive information or implementation - * details that should not be shown to end-users. Such errors should be - * logged for debugging but replaced with generic error messages in responses. + * Minimum number. */ - internal: boolean; + min?: string | null | undefined; /** - * Human-readable error message. - * - * @remarks - * - * This message should be clear and actionable for developers or end-users, - * providing context about what went wrong and potentially how to fix it. - */ - message: string; - /** - * Indicates whether the operation that caused the error should be retried. - * - * @remarks - * - * When `true`, the error is transient and the operation might succeed - * if attempted again. When `false`, retrying the same operation is - * unlikely to succeed without changes. - */ - retryable: boolean; - /** - * The underlying error that caused this error, creating an error chain. - * - * @remarks - * - * This allows for proper error propagation and debugging by maintaining - * the full context of how an error occurred through multiple layers - * of an application. + * Minimum string-list items. */ - source?: any | null | undefined; -}; - -/** - * Snapshot of target environment variables for the deployment - */ -export type DeploymentTargetEnvironmentVariables = { + minItems?: number | null | undefined; /** - * Environment variables in the snapshot + * Minimum string length. */ - variables: Array; + minLength?: number | null | undefined; /** - * Deterministic hash of all variables for change detection + * Portable whole-value regex pattern. */ - hash: string; + pattern?: string | null | undefined; /** - * ISO 8601 timestamp when snapshot was created + * Allowed string enum values. */ - createdAt: Date; + values?: Array | null | undefined; }; +export type DeploymentPreparedStackValidationUnion = + | DeploymentPreparedStackValidation + | any; + /** - * Snapshot of current environment variables for the deployment + * Stack input definition serialized into a release stack. */ -export type DeploymentCurrentEnvironmentVariables = { - /** - * Environment variables in the snapshot - */ - variables: Array; +export type DeploymentPreparedStackInput = { + default?: + | DeploymentPreparedStackDefaultString + | DeploymentPreparedStackDefaultNumber + | DeploymentPreparedStackDefaultBoolean + | DeploymentPreparedStackDefaultStringList + | any + | null + | undefined; /** - * Deterministic hash of all variables for change detection + * Human-facing helper text. */ - hash: string; + description: string; /** - * ISO 8601 timestamp when snapshot was created + * Runtime env-var mappings for v1 input resolution. */ - createdAt: Date; -}; - -export type Deployment = { + env?: Array | undefined; /** - * Unique identifier for the deployment. + * Stable input ID used by CLI/API calls. */ id: string; /** - * Deployment name. + * Primitive stack input kind. */ - name: string; + kind: DeploymentPreparedStackKind; /** - * Public subdomain for auto-generated domains + * Human-facing field label. */ - publicSubdomain?: string | null | undefined; + label: string; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Example placeholder shown in UI. */ - status: DeploymentStatus; + placeholder?: string | null | undefined; /** - * Unique identifier for the project. + * Platforms where this input applies. */ - projectId: string; + platforms?: Array | null | undefined; /** - * Target platform for the deployment + * Who can provide this value. */ - platform: DeploymentPlatform; + providedBy: Array; /** - * Underlying cloud platform for Kubernetes deployments. + * Whether a resolved value is required before deployment can proceed. */ - basePlatform?: DeploymentBasePlatform | null | undefined; + required: boolean; + validation?: DeploymentPreparedStackValidation | any | null | undefined; +}; + +export const DeploymentPreparedStackManagementEnum = { + Auto: "auto", +} as const; +export type DeploymentPreparedStackManagementEnum = ClosedEnum< + typeof DeploymentPreparedStackManagementEnum +>; + +/** + * AWS-specific binding specification + */ +export type DeploymentPreparedStackOverrideAwResource = { /** - * Cloud region or location for the deployment. + * Optional condition for additional filtering (rare) */ - region?: string | null | undefined; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * DeploymentState protocol version owned by the runtime/manager + * Resource ARNs to bind to */ - deploymentProtocolVersion: number; + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentPreparedStackOverrideAwStack = { /** - * ID of deployment group this deployment belongs to + * Optional condition for additional filtering (rare) */ - deploymentGroupId: string; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * Cloud environment information + * Resource ARNs to bind to */ - environmentInfo?: - | DeploymentEnvironmentInfoGcp - | DeploymentEnvironmentInfoAzure - | DeploymentEnvironmentInfoLocal - | DeploymentEnvironmentInfoAws - | DeploymentEnvironmentInfoTest - | any - | null - | undefined; + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackOverrideAwBinding = { /** - * User-provided configuration (network, deployment model, approvals) + * AWS-specific binding specification */ - stackSettings: DeploymentStackSettings; + resource?: DeploymentPreparedStackOverrideAwResource | undefined; /** - * State of infrastructure components managed by this deployment + * AWS-specific binding specification */ - stackState?: DeploymentStackState | null | undefined; + stack?: DeploymentPreparedStackOverrideAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const DeploymentPreparedStackOverrideEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type DeploymentPreparedStackOverrideEffect = ClosedEnum< + typeof DeploymentPreparedStackOverrideEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackOverrideAwGrant = { /** - * Runtime metadata for deployment state persistence + * AWS IAM actions (only for AWS) */ - runtimeMetadata?: DeploymentRuntimeMetadata | null | undefined; + actions?: Array | null | undefined; /** - * ID of the currently deployed release (actual state) + * Azure actions (only for Azure) */ - currentReleaseId?: string | null | undefined; + dataActions?: Array | null | undefined; /** - * ID of the desired release for deployment/update (desired state) + * GCP permissions that require an exact residual custom role. */ - desiredReleaseId?: string | null | undefined; + permissions?: Array | null | undefined; /** - * ID of the pinned release + * Provider predefined roles to bind directly. */ - pinnedReleaseId?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Setup source that imported this deployment + * GCP residual custom permissions to pair with predefined roles. */ - importSource?: DeploymentImportSource | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type DeploymentPreparedStackOverrideAw = { /** - * Setup method that created the deployment record and owns setup-time resources. + * Generic binding configuration for permissions */ - setupMethod?: DeploymentSetupMethod1 | null | undefined; + binding: DeploymentPreparedStackOverrideAwBinding; /** - * Setup method metadata needed to guide privileged teardown. + * Short admin-facing description of why this entry exists. */ - setupMetadata?: { [k: string]: any | null } | null | undefined; + description?: string | null | undefined; /** - * Imported setup target for compatibility checks + * IAM effect. Defaults to Allow. */ - setupTarget?: string | null | undefined; + effect?: DeploymentPreparedStackOverrideEffect | undefined; /** - * Imported setup compatibility fingerprint + * Grant permissions for a specific cloud platform */ - setupFingerprint?: string | null | undefined; + grant: DeploymentPreparedStackOverrideAwGrant; /** - * Imported setup fingerprint algorithm version + * Stable admin-facing label for this permission entry. */ - setupFingerprintVersion?: number | null | undefined; + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentPreparedStackOverrideAzureResource = { /** - * Display-only scope reported by the Operator manifest + * Scope (subscription/resource group/resource level) */ - operatorScope?: string | null | undefined; + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentPreparedStackOverrideAzureStack = { /** - * Display-only permission tier reported by the Operator manifest + * Scope (subscription/resource group/resource level) */ - operatorPermission?: string | null | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackOverrideAzureBinding = { /** - * Version reported by the Operator + * Azure-specific binding specification */ - operatorVersion?: string | null | undefined; + resource?: DeploymentPreparedStackOverrideAzureResource | undefined; /** - * Capability state reported by the Operator + * Azure-specific binding specification */ - capabilities?: Array | null | undefined; + stack?: DeploymentPreparedStackOverrideAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackOverrideAzureGrant = { /** - * Whether a retry has been requested for a failed deployment + * AWS IAM actions (only for AWS) */ - retryRequested: boolean; + actions?: Array | null | undefined; /** - * Timestamp of the last received heartbeat from the deployment + * Azure actions (only for Azure) */ - lastHeartbeatAt?: Date | null | undefined; + dataActions?: Array | null | undefined; /** - * Latest error information if the deployment is in a failed state + * GCP permissions that require an exact residual custom role. */ - error?: DeploymentError | null | undefined; + permissions?: Array | null | undefined; /** - * Configuration of environment variables for the deployment + * Provider predefined roles to bind directly. */ - environmentVariables?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Snapshot of target environment variables for the deployment + * GCP residual custom permissions to pair with predefined roles. */ - targetEnvironmentVariables?: - | DeploymentTargetEnvironmentVariables + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type DeploymentPreparedStackOverrideAzure = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackOverrideAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type DeploymentPreparedStackOverrideConditionResource = { + expression: string; + title: string; +}; + +export type DeploymentPreparedStackOverrideResourceConditionUnion = + | DeploymentPreparedStackOverrideConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentPreparedStackOverrideGcpResource = { + condition?: + | DeploymentPreparedStackOverrideConditionResource + | any | null | undefined; /** - * Snapshot of current environment variables for the deployment + * Scope (project/resource level) */ - currentEnvironmentVariables?: - | DeploymentCurrentEnvironmentVariables + scope: string; +}; + +/** + * GCP IAM condition + */ +export type DeploymentPreparedStackOverrideConditionStack = { + expression: string; + title: string; +}; + +export type DeploymentPreparedStackOverrideStackConditionUnion = + | DeploymentPreparedStackOverrideConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentPreparedStackOverrideGcpStack = { + condition?: + | DeploymentPreparedStackOverrideConditionStack + | any | null | undefined; - createdAt: Date; - updatedAt: Date; - managerId: string; /** - * Unique identifier for the workspace. + * Scope (project/resource level) */ - workspaceId: string; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackOverrideGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: DeploymentPreparedStackOverrideGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: DeploymentPreparedStackOverrideGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackOverrideGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type DeploymentPreparedStackOverrideGcp = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackOverrideGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackOverrideGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type DeploymentPreparedStackOverridePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type DeploymentPreparedStackOverride = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: DeploymentPreparedStackOverridePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type DeploymentPreparedStackOverrideUnion = + | DeploymentPreparedStackOverride + | string; + +export type DeploymentPreparedStackManagement2 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + override: { [k: string]: Array }; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentPreparedStackExtendAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentPreparedStackExtendAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackExtendAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: DeploymentPreparedStackExtendAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: DeploymentPreparedStackExtendAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const DeploymentPreparedStackExtendEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type DeploymentPreparedStackExtendEffect = ClosedEnum< + typeof DeploymentPreparedStackExtendEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackExtendAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; +/** + * AWS-specific platform permission configuration + */ +export type DeploymentPreparedStackExtendAw = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackExtendAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: DeploymentPreparedStackExtendEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentPreparedStackExtendAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentPreparedStackExtendAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: DeploymentPreparedStackExtendAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: DeploymentPreparedStackExtendAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackExtendAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type DeploymentPreparedStackExtendAzure = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type DeploymentPreparedStackExtendConditionResource = { + expression: string; + title: string; +}; + +export type DeploymentPreparedStackExtendResourceConditionUnion = + | DeploymentPreparedStackExtendConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentPreparedStackExtendGcpResource = { + condition?: + | DeploymentPreparedStackExtendConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type DeploymentPreparedStackExtendConditionStack = { + expression: string; + title: string; +}; + +export type DeploymentPreparedStackExtendStackConditionUnion = + | DeploymentPreparedStackExtendConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentPreparedStackExtendGcpStack = { + condition?: + | DeploymentPreparedStackExtendConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackExtendGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: DeploymentPreparedStackExtendGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: DeploymentPreparedStackExtendGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackExtendGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type DeploymentPreparedStackExtendGcp = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type DeploymentPreparedStackExtendPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type DeploymentPreparedStackExtend = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: DeploymentPreparedStackExtendPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type DeploymentPreparedStackExtendUnion = + | DeploymentPreparedStackExtend + | string; + +export type DeploymentPreparedStackManagement1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { [k: string]: Array }; +}; + +/** + * Management permissions configuration for stack management access + */ +export type DeploymentPreparedStackManagementUnion = + | DeploymentPreparedStackManagement1 + | DeploymentPreparedStackManagement2 + | DeploymentPreparedStackManagementEnum; + +/** + * AWS-specific binding specification + */ +export type DeploymentPreparedStackProfileAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentPreparedStackProfileAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: DeploymentPreparedStackProfileAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: DeploymentPreparedStackProfileAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const DeploymentPreparedStackProfileEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type DeploymentPreparedStackProfileEffect = ClosedEnum< + typeof DeploymentPreparedStackProfileEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackProfileAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type DeploymentPreparedStackProfileAw = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: DeploymentPreparedStackProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentPreparedStackProfileAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentPreparedStackProfileAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: DeploymentPreparedStackProfileAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: DeploymentPreparedStackProfileAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackProfileAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type DeploymentPreparedStackProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type DeploymentPreparedStackProfileConditionResource = { + expression: string; + title: string; +}; + +export type DeploymentPreparedStackProfileResourceConditionUnion = + | DeploymentPreparedStackProfileConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentPreparedStackProfileGcpResource = { + condition?: + | DeploymentPreparedStackProfileConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type DeploymentPreparedStackProfileConditionStack = { + expression: string; + title: string; +}; + +export type DeploymentPreparedStackProfileStackConditionUnion = + | DeploymentPreparedStackProfileConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentPreparedStackProfileGcpStack = { + condition?: + | DeploymentPreparedStackProfileConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentPreparedStackProfileGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: DeploymentPreparedStackProfileGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: DeploymentPreparedStackProfileGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentPreparedStackProfileGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type DeploymentPreparedStackProfileGcp = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentPreparedStackProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentPreparedStackProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type DeploymentPreparedStackProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type DeploymentPreparedStackProfile = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: DeploymentPreparedStackProfilePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type DeploymentPreparedStackProfileUnion = + | DeploymentPreparedStackProfile + | string; + +/** + * Combined permissions configuration that contains both profiles and management + */ +export type DeploymentPreparedStackPermissions = { + /** + * Management permissions configuration for stack management access + */ + management?: + | DeploymentPreparedStackManagement1 + | DeploymentPreparedStackManagement2 + | DeploymentPreparedStackManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; +}; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type DeploymentPreparedStackConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +/** + * Reference to a resource by its stable id and resource type. + */ +export type DeploymentPreparedStackDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; + +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const DeploymentPreparedStackLifecycle = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type DeploymentPreparedStackLifecycle = ClosedEnum< + typeof DeploymentPreparedStackLifecycle +>; + +export type DeploymentPreparedStackResources = { + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: DeploymentPreparedStackConfig; + /** + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list + */ + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: DeploymentPreparedStackLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; +}; + +/** + * Represents the target cloud platform. + */ +export const DeploymentPreparedStackSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type DeploymentPreparedStackSupportedPlatform = ClosedEnum< + typeof DeploymentPreparedStackSupportedPlatform +>; + +/** + * A bag of resources, unaware of any cloud. + */ +export type DeploymentPreparedStack = { + /** + * Unique identifier for the stack + */ + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: DeploymentPreparedStackPermissions | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { [k: string]: DeploymentPreparedStackResources }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; +}; + +export type DeploymentPreparedStackUnion = DeploymentPreparedStack | any; + +/** + * One-shot authority for a setup re-import to replace setup-owned resources. + */ +export type DeploymentSetupUpdateAuthorization = { + /** + * Frozen resource projection from the last successful deployment. + */ + baselineFrozenDigest: string; + /** + * Unique revision used by persistence layers for compare-and-swap updates. + */ + nonce: string; + /** + * Release whose stack was prepared by setup. + */ + releaseId: string; + /** + * Exact setup artifact revision that authored this authority. + */ + setupFingerprint: string; + /** + * Setup fingerprint contract version. + */ + setupFingerprintVersion: number; + /** + * Stable setup target recorded on the imported deployment. + */ + setupTarget: string; + /** + * Frozen resource projection prepared by the setup re-import. + */ + targetFrozenDigest: string; +}; + +export type DeploymentSetupUpdateAuthorizationUnion = + | DeploymentSetupUpdateAuthorization + | any; + +/** + * Runtime metadata for deployment state persistence + */ +export type DeploymentRuntimeMetadata = { + /** + * Hash of the environment variables snapshot that was last synced to the vault + * + * @remarks + * Used to avoid redundant sync operations during incremental deployment + */ + lastSyncedEnvVarsHash?: string | null | undefined; + /** + * Exact vault keys owned by the deployment secret synchronizer. This + * + * @remarks + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. + */ + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | DeploymentPendingPreparedStack + | any + | null + | undefined; + preparedStack?: DeploymentPreparedStack | any | null | undefined; + /** + * Whether cross-account registry access has been successfully granted. + * + * @remarks + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. + */ + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | DeploymentSetupUpdateAuthorization + | any + | null + | undefined; +}; + +/** + * Setup source that imported this deployment + */ +export const DeploymentImportSource = { + Cloudformation: "cloudformation", + Terraform: "terraform", + Helm: "helm", +} as const; +/** + * Setup source that imported this deployment + */ +export type DeploymentImportSource = ClosedEnum; + +/** + * Setup method that created the deployment record and owns setup-time resources. + */ +export const DeploymentSetupMethod1 = { + Cloudformation: "cloudformation", + GoogleOauth: "google-oauth", + Terraform: "terraform", + Helm: "helm", + Cli: "cli", + Manual: "manual", +} as const; +/** + * Setup method that created the deployment record and owns setup-time resources. + */ +export type DeploymentSetupMethod1 = ClosedEnum; + +/** + * Latest error information if the deployment is in a failed state + */ +export type DeploymentError = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +/** + * Snapshot of target environment variables for the deployment + */ +export type DeploymentTargetEnvironmentVariables = { + /** + * Environment variables in the snapshot + */ + variables: Array; + /** + * Deterministic hash of all variables for change detection + */ + hash: string; + /** + * ISO 8601 timestamp when snapshot was created + */ + createdAt: Date; +}; + +/** + * Snapshot of current environment variables for the deployment + */ +export type DeploymentCurrentEnvironmentVariables = { + /** + * Environment variables in the snapshot + */ + variables: Array; + /** + * Deterministic hash of all variables for change detection + */ + hash: string; + /** + * ISO 8601 timestamp when snapshot was created + */ + createdAt: Date; +}; + +export type Deployment = { + /** + * Unique identifier for the deployment. + */ + id: string; + /** + * Deployment name. + */ + name: string; + /** + * Public subdomain for auto-generated domains + */ + publicSubdomain?: string | null | undefined; + /** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ + status: DeploymentStatus; + /** + * Unique identifier for the project. + */ + projectId: string; + /** + * Target platform for the deployment + */ + platform: DeploymentPlatform; + /** + * Underlying cloud platform for Kubernetes deployments. + */ + basePlatform?: DeploymentBasePlatform | null | undefined; + /** + * Cloud region or location for the deployment. + */ + region?: string | null | undefined; + /** + * DeploymentState protocol version owned by the runtime/manager + */ + deploymentProtocolVersion: number; + /** + * ID of deployment group this deployment belongs to + */ + deploymentGroupId: string; + /** + * Cloud environment information + */ + environmentInfo?: + | DeploymentEnvironmentInfoGcp + | DeploymentEnvironmentInfoAzure + | DeploymentEnvironmentInfoLocal + | DeploymentEnvironmentInfoAws + | DeploymentEnvironmentInfoTest + | any + | null + | undefined; + /** + * User-provided configuration (network, deployment model, approvals) + */ + stackSettings: DeploymentStackSettings; + /** + * State of infrastructure components managed by this deployment + */ + stackState?: DeploymentStackState | null | undefined; + /** + * Runtime metadata for deployment state persistence + */ + runtimeMetadata?: DeploymentRuntimeMetadata | null | undefined; + /** + * ID of the currently deployed release (actual state) + */ + currentReleaseId?: string | null | undefined; + /** + * ID of the desired release for deployment/update (desired state) + */ + desiredReleaseId?: string | null | undefined; + /** + * ID of the pinned release + */ + pinnedReleaseId?: string | null | undefined; + /** + * Setup source that imported this deployment + */ + importSource?: DeploymentImportSource | null | undefined; + /** + * Setup method that created the deployment record and owns setup-time resources. + */ + setupMethod?: DeploymentSetupMethod1 | null | undefined; + /** + * Setup method metadata needed to guide privileged teardown. + */ + setupMetadata?: { [k: string]: any | null } | null | undefined; + /** + * Imported setup target for compatibility checks + */ + setupTarget?: string | null | undefined; + /** + * Imported setup compatibility fingerprint + */ + setupFingerprint?: string | null | undefined; + /** + * Imported setup fingerprint algorithm version + */ + setupFingerprintVersion?: number | null | undefined; + /** + * Display-only scope reported by the Operator manifest + */ + operatorScope?: string | null | undefined; + /** + * Display-only permission tier reported by the Operator manifest + */ + operatorPermission?: string | null | undefined; + /** + * Version reported by the Operator + */ + operatorVersion?: string | null | undefined; + /** + * Capability state reported by the Operator + */ + capabilities?: Array | null | undefined; + /** + * Whether a retry has been requested for a failed deployment + */ + retryRequested: boolean; + /** + * Timestamp of the last received heartbeat from the deployment + */ + lastHeartbeatAt?: Date | null | undefined; + /** + * Latest error information if the deployment is in a failed state + */ + error?: DeploymentError | null | undefined; + /** + * Configuration of environment variables for the deployment + */ + environmentVariables?: Array | null | undefined; + /** + * Snapshot of target environment variables for the deployment + */ + targetEnvironmentVariables?: + | DeploymentTargetEnvironmentVariables + | null + | undefined; + /** + * Snapshot of current environment variables for the deployment + */ + currentEnvironmentVariables?: + | DeploymentCurrentEnvironmentVariables + | null + | undefined; + createdAt: Date; + updatedAt: Date; + managerId: string; + /** + * Unique identifier for the workspace. + */ + workspaceId: string; +}; + +/** @internal */ +export const DeploymentStatus$inboundSchema: z.ZodEnum< + typeof DeploymentStatus +> = z.enum(DeploymentStatus); + +/** @internal */ +export const DeploymentPlatform$inboundSchema: z.ZodEnum< + typeof DeploymentPlatform +> = z.enum(DeploymentPlatform); + +/** @internal */ +export const DeploymentBasePlatform$inboundSchema: z.ZodEnum< + typeof DeploymentBasePlatform +> = z.enum(DeploymentBasePlatform); + +/** @internal */ +export const DeploymentPlatformTest$inboundSchema: z.ZodEnum< + typeof DeploymentPlatformTest +> = z.enum(DeploymentPlatformTest); + +/** @internal */ +export const DeploymentEnvironmentInfoTest$inboundSchema: z.ZodType< + DeploymentEnvironmentInfoTest, + unknown +> = z.object({ + testId: z.string(), + platform: DeploymentPlatformTest$inboundSchema, +}); + +export function deploymentEnvironmentInfoTestFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentEnvironmentInfoTest$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentEnvironmentInfoTest' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPlatformLocal$inboundSchema: z.ZodEnum< + typeof DeploymentPlatformLocal +> = z.enum(DeploymentPlatformLocal); + +/** @internal */ +export const DeploymentEnvironmentInfoLocal$inboundSchema: z.ZodType< + DeploymentEnvironmentInfoLocal, + unknown +> = z.object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: DeploymentPlatformLocal$inboundSchema, +}); + +export function deploymentEnvironmentInfoLocalFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentEnvironmentInfoLocal$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentEnvironmentInfoLocal' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPlatformAzure$inboundSchema: z.ZodEnum< + typeof DeploymentPlatformAzure +> = z.enum(DeploymentPlatformAzure); + +/** @internal */ +export const DeploymentEnvironmentInfoAzure$inboundSchema: z.ZodType< + DeploymentEnvironmentInfoAzure, + unknown +> = z.object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: DeploymentPlatformAzure$inboundSchema, +}); + +export function deploymentEnvironmentInfoAzureFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentEnvironmentInfoAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentEnvironmentInfoAzure' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPlatformGcp$inboundSchema: z.ZodEnum< + typeof DeploymentPlatformGcp +> = z.enum(DeploymentPlatformGcp); + +/** @internal */ +export const DeploymentEnvironmentInfoGcp$inboundSchema: z.ZodType< + DeploymentEnvironmentInfoGcp, + unknown +> = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: DeploymentPlatformGcp$inboundSchema, +}); + +export function deploymentEnvironmentInfoGcpFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentEnvironmentInfoGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentEnvironmentInfoGcp' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPlatformAws$inboundSchema: z.ZodEnum< + typeof DeploymentPlatformAws +> = z.enum(DeploymentPlatformAws); + +/** @internal */ +export const DeploymentEnvironmentInfoAws$inboundSchema: z.ZodType< + DeploymentEnvironmentInfoAws, + unknown +> = z.object({ + accountId: z.string(), + region: z.string(), + platform: DeploymentPlatformAws$inboundSchema, +}); + +export function deploymentEnvironmentInfoAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentEnvironmentInfoAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentEnvironmentInfoAws' from JSON`, + ); +} + +/** @internal */ +export const DeploymentEnvironmentInfoUnion$inboundSchema: z.ZodType< + DeploymentEnvironmentInfoUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentEnvironmentInfoGcp$inboundSchema), + z.lazy(() => DeploymentEnvironmentInfoAzure$inboundSchema), + z.lazy(() => DeploymentEnvironmentInfoLocal$inboundSchema), + z.lazy(() => DeploymentEnvironmentInfoAws$inboundSchema), + z.lazy(() => DeploymentEnvironmentInfoTest$inboundSchema), + z.any(), +]); + +export function deploymentEnvironmentInfoUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentEnvironmentInfoUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentEnvironmentInfoUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentFailureDomains2$inboundSchema: z.ZodType< + DeploymentFailureDomains2, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function deploymentFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentFailureDomains2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentFailureDomainsUnion2$inboundSchema: z.ZodType< + DeploymentFailureDomainsUnion2, + unknown +> = z.union([z.lazy(() => DeploymentFailureDomains2$inboundSchema), z.any()]); + +export function deploymentFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentFailureDomainsUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentFailureDomainsUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPoolsAutoscale$inboundSchema: z.ZodType< + DeploymentPoolsAutoscale, + unknown +> = z.object({ + failure_domains: z.nullable( + z.union([z.lazy(() => DeploymentFailureDomains2$inboundSchema), z.any()]), + ).optional(), + machine: z.nullable(z.string()).optional(), + max: z.int(), + min: z.int(), + mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); +}); + +export function deploymentPoolsAutoscaleFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentPoolsAutoscale$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPoolsAutoscale' from JSON`, + ); +} + +/** @internal */ +export const DeploymentFailureDomains1$inboundSchema: z.ZodType< + DeploymentFailureDomains1, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function deploymentFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentFailureDomains1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentFailureDomainsUnion1$inboundSchema: z.ZodType< + DeploymentFailureDomainsUnion1, + unknown +> = z.union([z.lazy(() => DeploymentFailureDomains1$inboundSchema), z.any()]); + +export function deploymentFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentFailureDomainsUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentFailureDomainsUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPoolsFixed$inboundSchema: z.ZodType< + DeploymentPoolsFixed, + unknown +> = z.object({ + failure_domains: z.nullable( + z.union([z.lazy(() => DeploymentFailureDomains1$inboundSchema), z.any()]), + ).optional(), + machine: z.nullable(z.string()).optional(), + machines: z.int(), + mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); +}); + +export function deploymentPoolsFixedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentPoolsFixed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPoolsFixed' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPoolsUnion$inboundSchema: z.ZodType< + DeploymentPoolsUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentPoolsFixed$inboundSchema), + z.lazy(() => DeploymentPoolsAutoscale$inboundSchema), +]); + +export function deploymentPoolsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentPoolsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPoolsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCompute$inboundSchema: z.ZodType< + DeploymentCompute, + unknown +> = z.object({ + pools: z.record( + z.string(), + z.union([ + z.lazy(() => DeploymentPoolsFixed$inboundSchema), + z.lazy(() => DeploymentPoolsAutoscale$inboundSchema), + ]), + ).optional(), +}); + +export function deploymentComputeFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCompute$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCompute' from JSON`, + ); +} + +/** @internal */ +export const DeploymentComputeUnion$inboundSchema: z.ZodType< + DeploymentComputeUnion, + unknown +> = z.union([z.lazy(() => DeploymentCompute$inboundSchema), z.any()]); + +export function deploymentComputeUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentComputeUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentComputeUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDeploymentModel$inboundSchema: z.ZodEnum< + typeof DeploymentDeploymentModel +> = z.enum(DeploymentDeploymentModel); + +/** @internal */ +export const DeploymentAws$inboundSchema: z.ZodType = z + .object({ + certificateArn: z.string(), + }); + +export function deploymentAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentAws' from JSON`, + ); +} + +/** @internal */ +export const DeploymentAwsUnion$inboundSchema: z.ZodType< + DeploymentAwsUnion, + unknown +> = z.union([z.lazy(() => DeploymentAws$inboundSchema), z.any()]); + +export function deploymentAwsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentAwsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentAwsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentAzureStackSettings$inboundSchema: z.ZodType< + DeploymentAzureStackSettings, + unknown +> = z.object({ + keyVaultCertificateId: z.string(), + keyVaultResourceId: z.nullable(z.string()).optional(), +}); + +export function deploymentAzureStackSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentAzureStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentAzureStackSettings' from JSON`, + ); +} + +/** @internal */ +export const DeploymentAzureUnion$inboundSchema: z.ZodType< + DeploymentAzureUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentAzureStackSettings$inboundSchema), + z.any(), +]); + +export function deploymentAzureUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentAzureUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentAzureUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentGcpStackSettings$inboundSchema: z.ZodType< + DeploymentGcpStackSettings, + unknown +> = z.object({ + certificateName: z.string(), +}); + +export function deploymentGcpStackSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentGcpStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentGcpStackSettings' from JSON`, + ); +} + +/** @internal */ +export const DeploymentGcpUnion$inboundSchema: z.ZodType< + DeploymentGcpUnion, + unknown +> = z.union([z.lazy(() => DeploymentGcpStackSettings$inboundSchema), z.any()]); + +export function deploymentGcpUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentGcpUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentGcpUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentTlsSecretRef$inboundSchema: z.ZodType< + DeploymentTlsSecretRef, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), +}); + +export function deploymentTlsSecretRefFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentTlsSecretRef$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentTlsSecretRef' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDomainsKubernetes$inboundSchema: z.ZodType< + DeploymentDomainsKubernetes, + unknown +> = z.object({ + tlsSecretRef: z.lazy(() => DeploymentTlsSecretRef$inboundSchema), +}); + +export function deploymentDomainsKubernetesFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDomainsKubernetes$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDomainsKubernetes' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDomainsKubernetesUnion$inboundSchema: z.ZodType< + DeploymentDomainsKubernetesUnion, + unknown +> = z.union([z.lazy(() => DeploymentDomainsKubernetes$inboundSchema), z.any()]); + +export function deploymentDomainsKubernetesUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDomainsKubernetesUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDomainsKubernetesUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDomainsCertificate$inboundSchema: z.ZodType< + DeploymentDomainsCertificate, + unknown +> = z.object({ + aws: z.nullable(z.union([z.lazy(() => DeploymentAws$inboundSchema), z.any()])) + .optional(), + azure: z.nullable( + z.union([ + z.lazy(() => DeploymentAzureStackSettings$inboundSchema), + z.any(), + ]), + ).optional(), + gcp: z.nullable( + z.union([z.lazy(() => DeploymentGcpStackSettings$inboundSchema), z.any()]), + ).optional(), + kubernetes: z.nullable( + z.union([z.lazy(() => DeploymentDomainsKubernetes$inboundSchema), z.any()]), + ).optional(), +}); + +export function deploymentDomainsCertificateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDomainsCertificate$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDomainsCertificate' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCustomDomains$inboundSchema: z.ZodType< + DeploymentCustomDomains, + unknown +> = z.object({ + certificate: z.lazy(() => DeploymentDomainsCertificate$inboundSchema), + domain: z.string(), +}); + +export function deploymentCustomDomainsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCustomDomains$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCustomDomains' from JSON`, + ); +} + +/** @internal */ +export const DeploymentModeLoadBalancer$inboundSchema: z.ZodEnum< + typeof DeploymentModeLoadBalancer +> = z.enum(DeploymentModeLoadBalancer); + +/** @internal */ +export const DeploymentPublicEndpointTargetLoadBalancer$inboundSchema: + z.ZodType = z.object({ + cnameTarget: z.string(), + mode: DeploymentModeLoadBalancer$inboundSchema, + }); + +export function deploymentPublicEndpointTargetLoadBalancerFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentPublicEndpointTargetLoadBalancer, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentPublicEndpointTargetLoadBalancer$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPublicEndpointTargetLoadBalancer' from JSON`, + ); +} + +/** @internal */ +export const DeploymentModeMachineAddresses$inboundSchema: z.ZodEnum< + typeof DeploymentModeMachineAddresses +> = z.enum(DeploymentModeMachineAddresses); + +/** @internal */ +export const DeploymentPublicEndpointTargetMachineAddresses$inboundSchema: + z.ZodType = z.object( + { + mode: DeploymentModeMachineAddresses$inboundSchema, + }, + ); + +export function deploymentPublicEndpointTargetMachineAddressesFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentPublicEndpointTargetMachineAddresses, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentPublicEndpointTargetMachineAddresses$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPublicEndpointTargetMachineAddresses' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPublicEndpointTargetUnion$inboundSchema: z.ZodType< + DeploymentPublicEndpointTargetUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentPublicEndpointTargetLoadBalancer$inboundSchema), + z.lazy(() => DeploymentPublicEndpointTargetMachineAddresses$inboundSchema), + z.any(), +]); + +export function deploymentPublicEndpointTargetUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentPublicEndpointTargetUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPublicEndpointTargetUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDomains$inboundSchema: z.ZodType< + DeploymentDomains, + unknown +> = z.object({ + customDomains: z.nullable( + z.record(z.string(), z.lazy(() => DeploymentCustomDomains$inboundSchema)), + ).optional(), + publicEndpointTarget: z.nullable( + z.union([ + z.lazy(() => DeploymentPublicEndpointTargetLoadBalancer$inboundSchema), + z.lazy(() => + DeploymentPublicEndpointTargetMachineAddresses$inboundSchema + ), + z.any(), + ]), + ).optional(), +}); + +export function deploymentDomainsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDomains$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDomains' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDomainsUnion$inboundSchema: z.ZodType< + DeploymentDomainsUnion, + unknown +> = z.union([z.lazy(() => DeploymentDomains$inboundSchema), z.any()]); + +export function deploymentDomainsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDomainsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDomainsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentExternalBindings$inboundSchema: z.ZodType< + DeploymentExternalBindings, + unknown +> = z.object({}); + +export function deploymentExternalBindingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentExternalBindings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentExternalBindings' from JSON`, + ); +} + +/** @internal */ +export const DeploymentHeartbeats$inboundSchema: z.ZodEnum< + typeof DeploymentHeartbeats +> = z.enum(DeploymentHeartbeats); + +/** @internal */ +export const DeploymentCloud$inboundSchema: z.ZodType< + DeploymentCloud, + unknown +> = z.object({ + accountId: z.nullable(z.string()).optional(), + clusterId: z.nullable(z.string()).optional(), + clusterName: z.nullable(z.string()).optional(), + projectId: z.nullable(z.string()).optional(), + region: z.nullable(z.string()).optional(), + resourceGroup: z.nullable(z.string()).optional(), + subscriptionId: z.nullable(z.string()).optional(), +}); + +export function deploymentCloudFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCloud$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCloud' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCloudUnion$inboundSchema: z.ZodType< + DeploymentCloudUnion, + unknown +> = z.union([z.lazy(() => DeploymentCloud$inboundSchema), z.any()]); + +export function deploymentCloudUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCloudUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCloudUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentOwnership$inboundSchema: z.ZodEnum< + typeof DeploymentOwnership +> = z.enum(DeploymentOwnership); + +/** @internal */ +export const DeploymentCluster$inboundSchema: z.ZodType< + DeploymentCluster, + unknown +> = z.object({ + cloud: z.nullable( + z.union([z.lazy(() => DeploymentCloud$inboundSchema), z.any()]), + ).optional(), + namespace: z.nullable(z.string()).optional(), + ownership: DeploymentOwnership$inboundSchema, +}); + +export function deploymentClusterFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCluster$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCluster' from JSON`, + ); +} + +/** @internal */ +export const DeploymentClusterUnion$inboundSchema: z.ZodType< + DeploymentClusterUnion, + unknown +> = z.union([z.lazy(() => DeploymentCluster$inboundSchema), z.any()]); + +export function deploymentClusterUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentClusterUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentClusterUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateNone2$inboundSchema: z.ZodType< + DeploymentCertificateNone2, + unknown +> = z.object({ + mode: z.literal("none"), +}); + +export function deploymentCertificateNone2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCertificateNone2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateNone2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateManagedTLSSecret2$inboundSchema: z.ZodType< + DeploymentCertificateManagedTLSSecret2, + unknown +> = z.object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), +}); + +export function deploymentCertificateManagedTLSSecret2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentCertificateManagedTLSSecret2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateManagedTLSSecret2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateAwsAcmArn2$inboundSchema: z.ZodType< + DeploymentCertificateAwsAcmArn2, + unknown +> = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), +}); + +export function deploymentCertificateAwsAcmArn2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCertificateAwsAcmArn2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateAwsAcmArn2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateManagedAcmImport2$inboundSchema: z.ZodType< + DeploymentCertificateManagedAcmImport2, + unknown +> = z.object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), +}); + +export function deploymentCertificateManagedAcmImport2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentCertificateManagedAcmImport2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateManagedAcmImport2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateTLSSecretRef2$inboundSchema: z.ZodType< + DeploymentCertificateTLSSecretRef2, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), +}); + +export function deploymentCertificateTLSSecretRef2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentCertificateTLSSecretRef2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateTLSSecretRef2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateUnion2$inboundSchema: z.ZodType< + DeploymentCertificateUnion2, + unknown +> = z.union([ + z.lazy(() => DeploymentCertificateTLSSecretRef2$inboundSchema), + z.lazy(() => DeploymentCertificateManagedAcmImport2$inboundSchema), + z.lazy(() => DeploymentCertificateAwsAcmArn2$inboundSchema), + z.lazy(() => DeploymentCertificateManagedTLSSecret2$inboundSchema), + z.lazy(() => DeploymentCertificateNone2$inboundSchema), +]); + +export function deploymentCertificateUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCertificateUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentModeCustom$inboundSchema: z.ZodEnum< + typeof DeploymentModeCustom +> = z.enum(DeploymentModeCustom); + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainersEnum4$inboundSchema: + z.ZodEnum< + typeof DeploymentProviderAzureApplicationGatewayForContainersEnum4 + > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum4); + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema: + z.ZodType = + z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentProviderAzureApplicationGatewayForContainersEnum4$inboundSchema, + }); + +export function deploymentProviderAzureApplicationGatewayForContainers4FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentProviderAzureApplicationGatewayForContainers4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderGkeGatewayEnum4$inboundSchema: z.ZodEnum< + typeof DeploymentProviderGkeGatewayEnum4 +> = z.enum(DeploymentProviderGkeGatewayEnum4); + +/** @internal */ +export const DeploymentProviderGkeGateway4$inboundSchema: z.ZodType< + DeploymentProviderGkeGateway4, + unknown +> = z.object({ + provider: DeploymentProviderGkeGatewayEnum4$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function deploymentProviderGkeGateway4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderGkeGateway4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderGkeGateway4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderAwsAlbEnum4$inboundSchema: z.ZodEnum< + typeof DeploymentProviderAwsAlbEnum4 +> = z.enum(DeploymentProviderAwsAlbEnum4); + +/** @internal */ +export const DeploymentProviderAwsAlb4$inboundSchema: z.ZodType< + DeploymentProviderAwsAlb4, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentProviderAwsAlbEnum4$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentProviderAwsAlb4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderAwsAlb4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAwsAlb4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderUnion4$inboundSchema: z.ZodType< + DeploymentProviderUnion4, + unknown +> = z.union([ + z.lazy(() => DeploymentProviderAwsAlb4$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway4$inboundSchema), + z.any(), +]); + +export function deploymentProviderUnion4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderUnion4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderUnion4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentRouteGateway2$inboundSchema: z.ZodType< + DeploymentRouteGateway2, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentProviderAwsAlb4$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway4$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), +}); + +export function deploymentRouteGateway2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentRouteGateway2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentRouteGateway2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainersEnum3$inboundSchema: + z.ZodEnum< + typeof DeploymentProviderAzureApplicationGatewayForContainersEnum3 + > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum3); + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema: + z.ZodType = + z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentProviderAzureApplicationGatewayForContainersEnum3$inboundSchema, + }); + +export function deploymentProviderAzureApplicationGatewayForContainers3FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentProviderAzureApplicationGatewayForContainers3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderGkeGatewayEnum3$inboundSchema: z.ZodEnum< + typeof DeploymentProviderGkeGatewayEnum3 +> = z.enum(DeploymentProviderGkeGatewayEnum3); + +/** @internal */ +export const DeploymentProviderGkeGateway3$inboundSchema: z.ZodType< + DeploymentProviderGkeGateway3, + unknown +> = z.object({ + provider: DeploymentProviderGkeGatewayEnum3$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function deploymentProviderGkeGateway3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderGkeGateway3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderGkeGateway3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderAwsAlbEnum3$inboundSchema: z.ZodEnum< + typeof DeploymentProviderAwsAlbEnum3 +> = z.enum(DeploymentProviderAwsAlbEnum3); + +/** @internal */ +export const DeploymentProviderAwsAlb3$inboundSchema: z.ZodType< + DeploymentProviderAwsAlb3, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentProviderAwsAlbEnum3$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentProviderAwsAlb3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderAwsAlb3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAwsAlb3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderUnion3$inboundSchema: z.ZodType< + DeploymentProviderUnion3, + unknown +> = z.union([ + z.lazy(() => DeploymentProviderAwsAlb3$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway3$inboundSchema), + z.any(), +]); + +export function deploymentProviderUnion3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderUnion3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderUnion3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentRouteIngress2$inboundSchema: z.ZodType< + DeploymentRouteIngress2, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentProviderAwsAlb3$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway3$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), +}); + +export function deploymentRouteIngress2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentRouteIngress2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentRouteIngress2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentRouteUnion2$inboundSchema: z.ZodType< + DeploymentRouteUnion2, + unknown +> = z.union([ + z.lazy(() => DeploymentRouteIngress2$inboundSchema), + z.lazy(() => DeploymentRouteGateway2$inboundSchema), +]); + +export function deploymentRouteUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentRouteUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentRouteUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentExposureCustom$inboundSchema: z.ZodType< + DeploymentExposureCustom, + unknown +> = z.object({ + certificate: z.union([ + z.lazy(() => DeploymentCertificateTLSSecretRef2$inboundSchema), + z.lazy(() => DeploymentCertificateManagedAcmImport2$inboundSchema), + z.lazy(() => DeploymentCertificateAwsAcmArn2$inboundSchema), + z.lazy(() => DeploymentCertificateManagedTLSSecret2$inboundSchema), + z.lazy(() => DeploymentCertificateNone2$inboundSchema), + ]), + domain: z.string(), + mode: DeploymentModeCustom$inboundSchema, + route: z.union([ + z.lazy(() => DeploymentRouteIngress2$inboundSchema), + z.lazy(() => DeploymentRouteGateway2$inboundSchema), + ]), +}); + +export function deploymentExposureCustomFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentExposureCustom$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentExposureCustom' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateNone1$inboundSchema: z.ZodType< + DeploymentCertificateNone1, + unknown +> = z.object({ + mode: z.literal("none"), +}); + +export function deploymentCertificateNone1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCertificateNone1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateNone1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateManagedTLSSecret1$inboundSchema: z.ZodType< + DeploymentCertificateManagedTLSSecret1, + unknown +> = z.object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), +}); + +export function deploymentCertificateManagedTLSSecret1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentCertificateManagedTLSSecret1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateManagedTLSSecret1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateAwsAcmArn1$inboundSchema: z.ZodType< + DeploymentCertificateAwsAcmArn1, + unknown +> = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), +}); + +export function deploymentCertificateAwsAcmArn1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCertificateAwsAcmArn1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateAwsAcmArn1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateManagedAcmImport1$inboundSchema: z.ZodType< + DeploymentCertificateManagedAcmImport1, + unknown +> = z.object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), +}); + +export function deploymentCertificateManagedAcmImport1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentCertificateManagedAcmImport1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateManagedAcmImport1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateTLSSecretRef1$inboundSchema: z.ZodType< + DeploymentCertificateTLSSecretRef1, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), +}); + +export function deploymentCertificateTLSSecretRef1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentCertificateTLSSecretRef1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateTLSSecretRef1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentCertificateUnion1$inboundSchema: z.ZodType< + DeploymentCertificateUnion1, + unknown +> = z.union([ + z.lazy(() => DeploymentCertificateTLSSecretRef1$inboundSchema), + z.lazy(() => DeploymentCertificateManagedAcmImport1$inboundSchema), + z.lazy(() => DeploymentCertificateAwsAcmArn1$inboundSchema), + z.lazy(() => DeploymentCertificateManagedTLSSecret1$inboundSchema), + z.lazy(() => DeploymentCertificateNone1$inboundSchema), +]); + +export function deploymentCertificateUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentCertificateUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentCertificateUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentModeGenerated$inboundSchema: z.ZodEnum< + typeof DeploymentModeGenerated +> = z.enum(DeploymentModeGenerated); + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainersEnum2$inboundSchema: + z.ZodEnum< + typeof DeploymentProviderAzureApplicationGatewayForContainersEnum2 + > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum2); + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema: + z.ZodType = + z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentProviderAzureApplicationGatewayForContainersEnum2$inboundSchema, + }); + +export function deploymentProviderAzureApplicationGatewayForContainers2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentProviderAzureApplicationGatewayForContainers2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderGkeGatewayEnum2$inboundSchema: z.ZodEnum< + typeof DeploymentProviderGkeGatewayEnum2 +> = z.enum(DeploymentProviderGkeGatewayEnum2); + +/** @internal */ +export const DeploymentProviderGkeGateway2$inboundSchema: z.ZodType< + DeploymentProviderGkeGateway2, + unknown +> = z.object({ + provider: DeploymentProviderGkeGatewayEnum2$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function deploymentProviderGkeGateway2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderGkeGateway2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderGkeGateway2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderAwsAlbEnum2$inboundSchema: z.ZodEnum< + typeof DeploymentProviderAwsAlbEnum2 +> = z.enum(DeploymentProviderAwsAlbEnum2); + +/** @internal */ +export const DeploymentProviderAwsAlb2$inboundSchema: z.ZodType< + DeploymentProviderAwsAlb2, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentProviderAwsAlbEnum2$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentProviderAwsAlb2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderAwsAlb2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAwsAlb2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderUnion2$inboundSchema: z.ZodType< + DeploymentProviderUnion2, + unknown +> = z.union([ + z.lazy(() => DeploymentProviderAwsAlb2$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway2$inboundSchema), + z.any(), +]); + +export function deploymentProviderUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentRouteGateway1$inboundSchema: z.ZodType< + DeploymentRouteGateway1, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentProviderAwsAlb2$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway2$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), +}); + +export function deploymentRouteGateway1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentRouteGateway1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentRouteGateway1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainersEnum1$inboundSchema: + z.ZodEnum< + typeof DeploymentProviderAzureApplicationGatewayForContainersEnum1 + > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum1); + +/** @internal */ +export const DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema: + z.ZodType = + z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentProviderAzureApplicationGatewayForContainersEnum1$inboundSchema, + }); + +export function deploymentProviderAzureApplicationGatewayForContainers1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentProviderAzureApplicationGatewayForContainers1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderGkeGatewayEnum1$inboundSchema: z.ZodEnum< + typeof DeploymentProviderGkeGatewayEnum1 +> = z.enum(DeploymentProviderGkeGatewayEnum1); + +/** @internal */ +export const DeploymentProviderGkeGateway1$inboundSchema: z.ZodType< + DeploymentProviderGkeGateway1, + unknown +> = z.object({ + provider: DeploymentProviderGkeGatewayEnum1$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function deploymentProviderGkeGateway1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderGkeGateway1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderGkeGateway1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderAwsAlbEnum1$inboundSchema: z.ZodEnum< + typeof DeploymentProviderAwsAlbEnum1 +> = z.enum(DeploymentProviderAwsAlbEnum1); + +/** @internal */ +export const DeploymentProviderAwsAlb1$inboundSchema: z.ZodType< + DeploymentProviderAwsAlb1, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentProviderAwsAlbEnum1$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentProviderAwsAlb1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderAwsAlb1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderAwsAlb1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentProviderUnion1$inboundSchema: z.ZodType< + DeploymentProviderUnion1, + unknown +> = z.union([ + z.lazy(() => DeploymentProviderAwsAlb1$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway1$inboundSchema), + z.any(), +]); + +export function deploymentProviderUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentProviderUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentProviderUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentRouteIngress1$inboundSchema: z.ZodType< + DeploymentRouteIngress1, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentProviderAwsAlb1$inboundSchema), + z.lazy(() => + DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema + ), + z.lazy(() => DeploymentProviderGkeGateway1$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), +}); + +export function deploymentRouteIngress1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentRouteIngress1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentRouteIngress1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentRouteUnion1$inboundSchema: z.ZodType< + DeploymentRouteUnion1, + unknown +> = z.union([ + z.lazy(() => DeploymentRouteIngress1$inboundSchema), + z.lazy(() => DeploymentRouteGateway1$inboundSchema), +]); + +export function deploymentRouteUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentRouteUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentRouteUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentExposureGenerated$inboundSchema: z.ZodType< + DeploymentExposureGenerated, + unknown +> = z.object({ + certificate: z.union([ + z.lazy(() => DeploymentCertificateTLSSecretRef1$inboundSchema), + z.lazy(() => DeploymentCertificateManagedAcmImport1$inboundSchema), + z.lazy(() => DeploymentCertificateAwsAcmArn1$inboundSchema), + z.lazy(() => DeploymentCertificateManagedTLSSecret1$inboundSchema), + z.lazy(() => DeploymentCertificateNone1$inboundSchema), + ]), + mode: DeploymentModeGenerated$inboundSchema, + route: z.union([ + z.lazy(() => DeploymentRouteIngress1$inboundSchema), + z.lazy(() => DeploymentRouteGateway1$inboundSchema), + ]), +}); + +export function deploymentExposureGeneratedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentExposureGenerated$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentExposureGenerated' from JSON`, + ); +} + +/** @internal */ +export const DeploymentModeDisabled$inboundSchema: z.ZodEnum< + typeof DeploymentModeDisabled +> = z.enum(DeploymentModeDisabled); + +/** @internal */ +export const DeploymentExposureDisabled$inboundSchema: z.ZodType< + DeploymentExposureDisabled, + unknown +> = z.object({ + mode: DeploymentModeDisabled$inboundSchema, +}); + +export function deploymentExposureDisabledFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentExposureDisabled$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentExposureDisabled' from JSON`, + ); +} + +/** @internal */ +export const DeploymentExposureUnion$inboundSchema: z.ZodType< + DeploymentExposureUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentExposureCustom$inboundSchema), + z.lazy(() => DeploymentExposureGenerated$inboundSchema), + z.lazy(() => DeploymentExposureDisabled$inboundSchema), + z.any(), +]); + +export function deploymentExposureUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentExposureUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentExposureUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentKubernetes$inboundSchema: z.ZodType< + DeploymentKubernetes, + unknown +> = z.object({ + cluster: z.nullable( + z.union([z.lazy(() => DeploymentCluster$inboundSchema), z.any()]), + ).optional(), + exposure: z.nullable( + z.union([ + z.lazy(() => DeploymentExposureCustom$inboundSchema), + z.lazy(() => DeploymentExposureGenerated$inboundSchema), + z.lazy(() => DeploymentExposureDisabled$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function deploymentKubernetesFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentKubernetes$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentKubernetes' from JSON`, + ); +} + +/** @internal */ +export const DeploymentKubernetesUnion$inboundSchema: z.ZodType< + DeploymentKubernetesUnion, + unknown +> = z.union([z.lazy(() => DeploymentKubernetes$inboundSchema), z.any()]); + +export function deploymentKubernetesUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentKubernetesUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentKubernetesUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentTypeByoVnetAzure$inboundSchema: z.ZodEnum< + typeof DeploymentTypeByoVnetAzure +> = z.enum(DeploymentTypeByoVnetAzure); + +/** @internal */ +export const DeploymentNetworkByoVnetAzure$inboundSchema: z.ZodType< + DeploymentNetworkByoVnetAzure, + unknown +> = z.object({ + application_gateway_subnet_name: z.nullable(z.string()).optional(), + private_endpoint_subnet_name: z.nullable(z.string()).optional(), + private_subnet_name: z.string(), + public_subnet_name: z.string(), + type: DeploymentTypeByoVnetAzure$inboundSchema, + vnet_resource_id: z.string(), +}).transform((v) => { + return remap$(v, { + "application_gateway_subnet_name": "applicationGatewaySubnetName", + "private_endpoint_subnet_name": "privateEndpointSubnetName", + "private_subnet_name": "privateSubnetName", + "public_subnet_name": "publicSubnetName", + "vnet_resource_id": "vnetResourceId", + }); +}); + +export function deploymentNetworkByoVnetAzureFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentNetworkByoVnetAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentNetworkByoVnetAzure' from JSON`, + ); +} + +/** @internal */ +export const DeploymentTypeByoVpcGcp$inboundSchema: z.ZodEnum< + typeof DeploymentTypeByoVpcGcp +> = z.enum(DeploymentTypeByoVpcGcp); + +/** @internal */ +export const DeploymentNetworkByoVpcGcp$inboundSchema: z.ZodType< + DeploymentNetworkByoVpcGcp, + unknown +> = z.object({ + network_name: z.string(), + region: z.string(), + subnet_name: z.string(), + type: DeploymentTypeByoVpcGcp$inboundSchema, +}).transform((v) => { + return remap$(v, { + "network_name": "networkName", + "subnet_name": "subnetName", + }); +}); + +export function deploymentNetworkByoVpcGcpFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentNetworkByoVpcGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentNetworkByoVpcGcp' from JSON`, + ); +} + /** @internal */ -export const DeploymentStatus$inboundSchema: z.ZodEnum< - typeof DeploymentStatus -> = z.enum(DeploymentStatus); +export const DeploymentTypeByoVpcAws$inboundSchema: z.ZodEnum< + typeof DeploymentTypeByoVpcAws +> = z.enum(DeploymentTypeByoVpcAws); /** @internal */ -export const DeploymentPlatform$inboundSchema: z.ZodEnum< - typeof DeploymentPlatform -> = z.enum(DeploymentPlatform); +export const DeploymentNetworkByoVpcAws$inboundSchema: z.ZodType< + DeploymentNetworkByoVpcAws, + unknown +> = z.object({ + private_subnet_ids: z.array(z.string()), + public_subnet_ids: z.array(z.string()), + security_group_ids: z.array(z.string()).optional(), + type: DeploymentTypeByoVpcAws$inboundSchema, + vpc_id: z.string(), +}).transform((v) => { + return remap$(v, { + "private_subnet_ids": "privateSubnetIds", + "public_subnet_ids": "publicSubnetIds", + "security_group_ids": "securityGroupIds", + "vpc_id": "vpcId", + }); +}); + +export function deploymentNetworkByoVpcAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentNetworkByoVpcAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentNetworkByoVpcAws' from JSON`, + ); +} /** @internal */ -export const DeploymentBasePlatform$inboundSchema: z.ZodEnum< - typeof DeploymentBasePlatform -> = z.enum(DeploymentBasePlatform); +export const DeploymentTypeCreate$inboundSchema: z.ZodEnum< + typeof DeploymentTypeCreate +> = z.enum(DeploymentTypeCreate); /** @internal */ -export const DeploymentPlatformTest$inboundSchema: z.ZodEnum< - typeof DeploymentPlatformTest -> = z.enum(DeploymentPlatformTest); +export const DeploymentNetworkCreate$inboundSchema: z.ZodType< + DeploymentNetworkCreate, + unknown +> = z.object({ + availability_zones: z.int().optional(), + cidr: z.nullable(z.string()).optional(), + type: DeploymentTypeCreate$inboundSchema, +}).transform((v) => { + return remap$(v, { + "availability_zones": "availabilityZones", + }); +}); + +export function deploymentNetworkCreateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentNetworkCreate$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentNetworkCreate' from JSON`, + ); +} /** @internal */ -export const DeploymentEnvironmentInfoTest$inboundSchema: z.ZodType< - DeploymentEnvironmentInfoTest, +export const DeploymentTypeUseDefault$inboundSchema: z.ZodEnum< + typeof DeploymentTypeUseDefault +> = z.enum(DeploymentTypeUseDefault); + +/** @internal */ +export const DeploymentNetworkUseDefault$inboundSchema: z.ZodType< + DeploymentNetworkUseDefault, unknown > = z.object({ - testId: z.string(), - platform: DeploymentPlatformTest$inboundSchema, + type: DeploymentTypeUseDefault$inboundSchema, }); -export function deploymentEnvironmentInfoTestFromJSON( +export function deploymentNetworkUseDefaultFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnvironmentInfoTest$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnvironmentInfoTest' from JSON`, + (x) => DeploymentNetworkUseDefault$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentNetworkUseDefault' from JSON`, ); } /** @internal */ -export const DeploymentPlatformLocal$inboundSchema: z.ZodEnum< - typeof DeploymentPlatformLocal -> = z.enum(DeploymentPlatformLocal); +export const DeploymentNetworkUnion$inboundSchema: z.ZodType< + DeploymentNetworkUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentNetworkByoVpcAws$inboundSchema), + z.lazy(() => DeploymentNetworkByoVpcGcp$inboundSchema), + z.lazy(() => DeploymentNetworkByoVnetAzure$inboundSchema), + z.lazy(() => DeploymentNetworkUseDefault$inboundSchema), + z.lazy(() => DeploymentNetworkCreate$inboundSchema), + z.any(), +]); + +export function deploymentNetworkUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentNetworkUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentNetworkUnion' from JSON`, + ); +} /** @internal */ -export const DeploymentEnvironmentInfoLocal$inboundSchema: z.ZodType< - DeploymentEnvironmentInfoLocal, +export const DeploymentTelemetry$inboundSchema: z.ZodEnum< + typeof DeploymentTelemetry +> = z.enum(DeploymentTelemetry); + +/** @internal */ +export const DeploymentUpdates$inboundSchema: z.ZodEnum< + typeof DeploymentUpdates +> = z.enum(DeploymentUpdates); + +/** @internal */ +export const DeploymentStackSettings$inboundSchema: z.ZodType< + DeploymentStackSettings, unknown > = z.object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: DeploymentPlatformLocal$inboundSchema, + compute: z.nullable( + z.union([z.lazy(() => DeploymentCompute$inboundSchema), z.any()]), + ).optional(), + deploymentModel: DeploymentDeploymentModel$inboundSchema.optional(), + domains: z.nullable( + z.union([z.lazy(() => DeploymentDomains$inboundSchema), z.any()]), + ).optional(), + externalBindings: z.nullable( + z.lazy(() => DeploymentExternalBindings$inboundSchema), + ).optional(), + heartbeats: DeploymentHeartbeats$inboundSchema.optional(), + kubernetes: z.nullable( + z.union([z.lazy(() => DeploymentKubernetes$inboundSchema), z.any()]), + ).optional(), + network: z.nullable( + z.union([ + z.lazy(() => DeploymentNetworkByoVpcAws$inboundSchema), + z.lazy(() => DeploymentNetworkByoVpcGcp$inboundSchema), + z.lazy(() => DeploymentNetworkByoVnetAzure$inboundSchema), + z.lazy(() => DeploymentNetworkUseDefault$inboundSchema), + z.lazy(() => DeploymentNetworkCreate$inboundSchema), + z.any(), + ]), + ).optional(), + telemetry: DeploymentTelemetry$inboundSchema.optional(), + updates: DeploymentUpdates$inboundSchema.optional(), }); -export function deploymentEnvironmentInfoLocalFromJSON( +export function deploymentStackSettingsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnvironmentInfoLocal$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnvironmentInfoLocal' from JSON`, + (x) => DeploymentStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentStackSettings' from JSON`, ); } /** @internal */ -export const DeploymentPlatformAzure$inboundSchema: z.ZodEnum< - typeof DeploymentPlatformAzure -> = z.enum(DeploymentPlatformAzure); +export const DeploymentStackStatePlatform$inboundSchema: z.ZodEnum< + typeof DeploymentStackStatePlatform +> = z.enum(DeploymentStackStatePlatform); /** @internal */ -export const DeploymentEnvironmentInfoAzure$inboundSchema: z.ZodType< - DeploymentEnvironmentInfoAzure, +export const DeploymentStackStateConfig$inboundSchema: z.ZodType< + DeploymentStackStateConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function deploymentStackStateConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentStackStateConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentStackStateConfig' from JSON`, + ); +} + +/** @internal */ +export const DeploymentControllerPlatformEnum$inboundSchema: z.ZodEnum< + typeof DeploymentControllerPlatformEnum +> = z.enum(DeploymentControllerPlatformEnum); + +/** @internal */ +export const DeploymentControllerPlatformUnion$inboundSchema: z.ZodType< + DeploymentControllerPlatformUnion, + unknown +> = z.union([DeploymentControllerPlatformEnum$inboundSchema, z.any()]); + +export function deploymentControllerPlatformUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentControllerPlatformUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentControllerPlatformUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentStackStateDependency$inboundSchema: z.ZodType< + DeploymentStackStateDependency, unknown > = z.object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: DeploymentPlatformAzure$inboundSchema, + id: z.string(), + type: z.string(), }); -export function deploymentEnvironmentInfoAzureFromJSON( +export function deploymentStackStateDependencyFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnvironmentInfoAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnvironmentInfoAzure' from JSON`, + (x) => DeploymentStackStateDependency$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentStackStateDependency' from JSON`, + ); +} + +/** @internal */ +export const DeploymentErrorStackState$inboundSchema: z.ZodType< + DeploymentErrorStackState, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function deploymentErrorStackStateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentErrorStackState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentErrorStackState' from JSON`, ); } /** @internal */ -export const DeploymentPlatformGcp$inboundSchema: z.ZodEnum< - typeof DeploymentPlatformGcp -> = z.enum(DeploymentPlatformGcp); - -/** @internal */ -export const DeploymentEnvironmentInfoGcp$inboundSchema: z.ZodType< - DeploymentEnvironmentInfoGcp, +export const DeploymentErrorUnion$inboundSchema: z.ZodType< + DeploymentErrorUnion, unknown -> = z.object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: DeploymentPlatformGcp$inboundSchema, -}); +> = z.union([z.lazy(() => DeploymentErrorStackState$inboundSchema), z.any()]); -export function deploymentEnvironmentInfoGcpFromJSON( +export function deploymentErrorUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnvironmentInfoGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnvironmentInfoGcp' from JSON`, + (x) => DeploymentErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentErrorUnion' from JSON`, ); } /** @internal */ -export const DeploymentPlatformAws$inboundSchema: z.ZodEnum< - typeof DeploymentPlatformAws -> = z.enum(DeploymentPlatformAws); +export const DeploymentLifecycleStackStateEnum$inboundSchema: z.ZodEnum< + typeof DeploymentLifecycleStackStateEnum +> = z.enum(DeploymentLifecycleStackStateEnum); /** @internal */ -export const DeploymentEnvironmentInfoAws$inboundSchema: z.ZodType< - DeploymentEnvironmentInfoAws, +export const DeploymentLifecycleUnion$inboundSchema: z.ZodType< + DeploymentLifecycleUnion, unknown -> = z.object({ - accountId: z.string(), - region: z.string(), - platform: DeploymentPlatformAws$inboundSchema, -}); +> = z.union([DeploymentLifecycleStackStateEnum$inboundSchema, z.any()]); -export function deploymentEnvironmentInfoAwsFromJSON( +export function deploymentLifecycleUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnvironmentInfoAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnvironmentInfoAws' from JSON`, + (x) => DeploymentLifecycleUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentLifecycleUnion' from JSON`, ); } /** @internal */ -export const DeploymentEnvironmentInfoUnion$inboundSchema: z.ZodType< - DeploymentEnvironmentInfoUnion, +export const DeploymentOutputs$inboundSchema: z.ZodType< + DeploymentOutputs, unknown -> = z.union([ - z.lazy(() => DeploymentEnvironmentInfoGcp$inboundSchema), - z.lazy(() => DeploymentEnvironmentInfoAzure$inboundSchema), - z.lazy(() => DeploymentEnvironmentInfoLocal$inboundSchema), - z.lazy(() => DeploymentEnvironmentInfoAws$inboundSchema), - z.lazy(() => DeploymentEnvironmentInfoTest$inboundSchema), - z.any(), -]); +> = collectExtraKeys$( + z.object({ + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); -export function deploymentEnvironmentInfoUnionFromJSON( +export function deploymentOutputsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnvironmentInfoUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnvironmentInfoUnion' from JSON`, + (x) => DeploymentOutputs$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentOutputs' from JSON`, ); } /** @internal */ -export const DeploymentPoolsAutoscale$inboundSchema: z.ZodType< - DeploymentPoolsAutoscale, +export const DeploymentOutputsUnion$inboundSchema: z.ZodType< + DeploymentOutputsUnion, unknown -> = z.object({ - machine: z.nullable(z.string()).optional(), - max: z.int(), - min: z.int(), - mode: z.literal("autoscale"), -}); +> = z.union([z.lazy(() => DeploymentOutputs$inboundSchema), z.any()]); -export function deploymentPoolsAutoscaleFromJSON( +export function deploymentOutputsUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentPoolsAutoscale$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPoolsAutoscale' from JSON`, + (x) => DeploymentOutputsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentOutputsUnion' from JSON`, ); } /** @internal */ -export const DeploymentPoolsFixed$inboundSchema: z.ZodType< - DeploymentPoolsFixed, +export const DeploymentPreviousConfig$inboundSchema: z.ZodType< + DeploymentPreviousConfig, unknown -> = z.object({ - machine: z.nullable(z.string()).optional(), - machines: z.int(), - mode: z.literal("fixed"), -}); +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); -export function deploymentPoolsFixedFromJSON( +export function deploymentPreviousConfigFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentPoolsFixed$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPoolsFixed' from JSON`, + (x) => DeploymentPreviousConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreviousConfig' from JSON`, ); } /** @internal */ -export const DeploymentPoolsUnion$inboundSchema: z.ZodType< - DeploymentPoolsUnion, +export const DeploymentPreviousConfigUnion$inboundSchema: z.ZodType< + DeploymentPreviousConfigUnion, unknown -> = z.union([ - z.lazy(() => DeploymentPoolsFixed$inboundSchema), - z.lazy(() => DeploymentPoolsAutoscale$inboundSchema), -]); +> = z.union([z.lazy(() => DeploymentPreviousConfig$inboundSchema), z.any()]); -export function deploymentPoolsUnionFromJSON( +export function deploymentPreviousConfigUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentPoolsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPoolsUnion' from JSON`, + (x) => DeploymentPreviousConfigUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreviousConfigUnion' from JSON`, ); } /** @internal */ -export const DeploymentCompute$inboundSchema: z.ZodType< - DeploymentCompute, +export const DeploymentStackStateStatus$inboundSchema: z.ZodEnum< + typeof DeploymentStackStateStatus +> = z.enum(DeploymentStackStateStatus); + +/** @internal */ +export const DeploymentStackStateResources$inboundSchema: z.ZodType< + DeploymentStackStateResources, unknown > = z.object({ - pools: z.record( - z.string(), - z.union([ - z.lazy(() => DeploymentPoolsFixed$inboundSchema), - z.lazy(() => DeploymentPoolsAutoscale$inboundSchema), - ]), + _internal: z.nullable(z.any()).optional(), + config: z.lazy(() => DeploymentStackStateConfig$inboundSchema), + controllerPlatform: z.nullable( + z.union([DeploymentControllerPlatformEnum$inboundSchema, z.any()]), + ).optional(), + dependencies: z.array( + z.lazy(() => DeploymentStackStateDependency$inboundSchema), + ).optional(), + error: z.nullable( + z.union([z.lazy(() => DeploymentErrorStackState$inboundSchema), z.any()]), + ).optional(), + lastFailedState: z.nullable(z.any()).optional(), + lifecycle: z.nullable( + z.union([DeploymentLifecycleStackStateEnum$inboundSchema, z.any()]), + ).optional(), + outputs: z.nullable( + z.union([z.lazy(() => DeploymentOutputs$inboundSchema), z.any()]), ).optional(), + previousConfig: z.nullable( + z.union([z.lazy(() => DeploymentPreviousConfig$inboundSchema), z.any()]), + ).optional(), + remoteBindingParams: z.nullable(z.any()).optional(), + retryAttempt: z.int().optional(), + status: DeploymentStackStateStatus$inboundSchema, + type: z.string(), +}).transform((v) => { + return remap$(v, { + "_internal": "internal", + }); }); -export function deploymentComputeFromJSON( +export function deploymentStackStateResourcesFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentCompute$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCompute' from JSON`, + (x) => DeploymentStackStateResources$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentStackStateResources' from JSON`, ); } /** @internal */ -export const DeploymentComputeUnion$inboundSchema: z.ZodType< - DeploymentComputeUnion, +export const DeploymentStackState$inboundSchema: z.ZodType< + DeploymentStackState, unknown -> = z.union([z.lazy(() => DeploymentCompute$inboundSchema), z.any()]); +> = z.object({ + platform: DeploymentStackStatePlatform$inboundSchema, + resourcePrefix: z.string(), + resources: z.record( + z.string(), + z.lazy(() => DeploymentStackStateResources$inboundSchema), + ), +}); -export function deploymentComputeUnionFromJSON( +export function deploymentStackStateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentComputeUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentComputeUnion' from JSON`, + (x) => DeploymentStackState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentStackState' from JSON`, ); } /** @internal */ -export const DeploymentDeploymentModel$inboundSchema: z.ZodEnum< - typeof DeploymentDeploymentModel -> = z.enum(DeploymentDeploymentModel); +export const DeploymentPendingPreparedStackTypeStringList$inboundSchema: + z.ZodEnum = z.enum( + DeploymentPendingPreparedStackTypeStringList, + ); /** @internal */ -export const DeploymentAws$inboundSchema: z.ZodType = z - .object({ - certificateArn: z.string(), - }); +export const DeploymentPendingPreparedStackDefaultStringList$inboundSchema: + z.ZodType = z + .object({ + type: DeploymentPendingPreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }); -export function deploymentAwsFromJSON( +export function deploymentPendingPreparedStackDefaultStringListFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackDefaultStringList, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentAws' from JSON`, + (x) => + DeploymentPendingPreparedStackDefaultStringList$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const DeploymentAwsUnion$inboundSchema: z.ZodType< - DeploymentAwsUnion, - unknown -> = z.union([z.lazy(() => DeploymentAws$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackTypeBoolean$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackTypeBoolean +> = z.enum(DeploymentPendingPreparedStackTypeBoolean); -export function deploymentAwsUnionFromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackDefaultBoolean$inboundSchema: + z.ZodType = z.object({ + type: DeploymentPendingPreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), + }); + +export function deploymentPendingPreparedStackDefaultBooleanFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackDefaultBoolean, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentAwsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentAwsUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackDefaultBoolean$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const DeploymentAzureStackSettings$inboundSchema: z.ZodType< - DeploymentAzureStackSettings, - unknown -> = z.object({ - keyVaultCertificateId: z.string(), - keyVaultResourceId: z.nullable(z.string()).optional(), -}); +export const DeploymentPendingPreparedStackTypeNumber$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackTypeNumber +> = z.enum(DeploymentPendingPreparedStackTypeNumber); -export function deploymentAzureStackSettingsFromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackDefaultNumber$inboundSchema: + z.ZodType = z.object({ + type: DeploymentPendingPreparedStackTypeNumber$inboundSchema, + value: z.string(), + }); + +export function deploymentPendingPreparedStackDefaultNumberFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackDefaultNumber, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentAzureStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentAzureStackSettings' from JSON`, + (x) => + DeploymentPendingPreparedStackDefaultNumber$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const DeploymentAzureUnion$inboundSchema: z.ZodType< - DeploymentAzureUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentAzureStackSettings$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackTypeString$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackTypeString +> = z.enum(DeploymentPendingPreparedStackTypeString); -export function deploymentAzureUnionFromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackDefaultString$inboundSchema: + z.ZodType = z.object({ + type: DeploymentPendingPreparedStackTypeString$inboundSchema, + value: z.string(), + }); + +export function deploymentPendingPreparedStackDefaultStringFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackDefaultString, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentAzureUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentAzureUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackDefaultString$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const DeploymentGcpStackSettings$inboundSchema: z.ZodType< - DeploymentGcpStackSettings, - unknown -> = z.object({ - certificateName: z.string(), -}); +export const DeploymentPendingPreparedStackDefaultUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentPendingPreparedStackDefaultString$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackDefaultNumber$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackDefaultBoolean$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackDefaultStringList$inboundSchema), + z.any(), + ]); -export function deploymentGcpStackSettingsFromJSON( +export function deploymentPendingPreparedStackDefaultUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackDefaultUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentGcpStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentGcpStackSettings' from JSON`, + (x) => + DeploymentPendingPreparedStackDefaultUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const DeploymentGcpUnion$inboundSchema: z.ZodType< - DeploymentGcpUnion, +export const DeploymentPendingPreparedStackTypeEnvEnum$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackTypeEnvEnum +> = z.enum(DeploymentPendingPreparedStackTypeEnvEnum); + +/** @internal */ +export const DeploymentPendingPreparedStackTypeUnion$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackTypeUnion, unknown -> = z.union([z.lazy(() => DeploymentGcpStackSettings$inboundSchema), z.any()]); +> = z.union([DeploymentPendingPreparedStackTypeEnvEnum$inboundSchema, z.any()]); -export function deploymentGcpUnionFromJSON( +export function deploymentPendingPreparedStackTypeUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackTypeUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentGcpUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentGcpUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackTypeUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const DeploymentTlsSecretRef$inboundSchema: z.ZodType< - DeploymentTlsSecretRef, +export const DeploymentPendingPreparedStackEnv$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackEnv, unknown > = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([DeploymentPendingPreparedStackTypeEnvEnum$inboundSchema, z.any()]), + ).optional(), }); -export function deploymentTlsSecretRefFromJSON( +export function deploymentPendingPreparedStackEnvFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentTlsSecretRef$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentTlsSecretRef' from JSON`, + (x) => DeploymentPendingPreparedStackEnv$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackEnv' from JSON`, ); } /** @internal */ -export const DeploymentDomainsKubernetes$inboundSchema: z.ZodType< - DeploymentDomainsKubernetes, +export const DeploymentPendingPreparedStackKind$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackKind +> = z.enum(DeploymentPendingPreparedStackKind); + +/** @internal */ +export const DeploymentPendingPreparedStackPlatform$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackPlatform +> = z.enum(DeploymentPendingPreparedStackPlatform); + +/** @internal */ +export const DeploymentPendingPreparedStackProvidedBy$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackProvidedBy +> = z.enum(DeploymentPendingPreparedStackProvidedBy); + +/** @internal */ +export const DeploymentPendingPreparedStackValidation$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackValidation, unknown > = z.object({ - tlsSecretRef: z.lazy(() => DeploymentTlsSecretRef$inboundSchema), + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), }); -export function deploymentDomainsKubernetesFromJSON( +export function deploymentPendingPreparedStackValidationFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackValidation, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDomainsKubernetes$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDomainsKubernetes' from JSON`, + (x) => + DeploymentPendingPreparedStackValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackValidation' from JSON`, ); } /** @internal */ -export const DeploymentDomainsKubernetesUnion$inboundSchema: z.ZodType< - DeploymentDomainsKubernetesUnion, - unknown -> = z.union([z.lazy(() => DeploymentDomainsKubernetes$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackValidationUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentPendingPreparedStackValidation$inboundSchema), + z.any(), + ]); -export function deploymentDomainsKubernetesUnionFromJSON( +export function deploymentPendingPreparedStackValidationUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackValidationUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDomainsKubernetesUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDomainsKubernetesUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackValidationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const DeploymentDomainsCertificate$inboundSchema: z.ZodType< - DeploymentDomainsCertificate, +export const DeploymentPendingPreparedStackInput$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackInput, unknown > = z.object({ - aws: z.nullable(z.union([z.lazy(() => DeploymentAws$inboundSchema), z.any()])) - .optional(), - azure: z.nullable( + default: z.nullable( z.union([ - z.lazy(() => DeploymentAzureStackSettings$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackDefaultString$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackDefaultNumber$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackDefaultBoolean$inboundSchema), + z.lazy(() => + DeploymentPendingPreparedStackDefaultStringList$inboundSchema + ), z.any(), ]), ).optional(), - gcp: z.nullable( - z.union([z.lazy(() => DeploymentGcpStackSettings$inboundSchema), z.any()]), + description: z.string(), + env: z.array(z.lazy(() => DeploymentPendingPreparedStackEnv$inboundSchema)) + .optional(), + id: z.string(), + kind: DeploymentPendingPreparedStackKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array(DeploymentPendingPreparedStackPlatform$inboundSchema), ).optional(), - kubernetes: z.nullable( - z.union([z.lazy(() => DeploymentDomainsKubernetes$inboundSchema), z.any()]), + providedBy: z.array(DeploymentPendingPreparedStackProvidedBy$inboundSchema), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => DeploymentPendingPreparedStackValidation$inboundSchema), + z.any(), + ]), ).optional(), }); -export function deploymentDomainsCertificateFromJSON( +export function deploymentPendingPreparedStackInputFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentDomainsCertificate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDomainsCertificate' from JSON`, + (x) => + DeploymentPendingPreparedStackInput$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackInput' from JSON`, ); } /** @internal */ -export const DeploymentCustomDomains$inboundSchema: z.ZodType< - DeploymentCustomDomains, - unknown -> = z.object({ - certificate: z.lazy(() => DeploymentDomainsCertificate$inboundSchema), - domain: z.string(), -}); +export const DeploymentPendingPreparedStackManagementEnum$inboundSchema: + z.ZodEnum = z.enum( + DeploymentPendingPreparedStackManagementEnum, + ); -export function deploymentCustomDomainsFromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackOverrideAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function deploymentPendingPreparedStackOverrideAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCustomDomains$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCustomDomains' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const DeploymentModeLoadBalancer$inboundSchema: z.ZodEnum< - typeof DeploymentModeLoadBalancer -> = z.enum(DeploymentModeLoadBalancer); - -/** @internal */ -export const DeploymentPublicEndpointTargetLoadBalancer$inboundSchema: - z.ZodType = z.object({ - cnameTarget: z.string(), - mode: DeploymentModeLoadBalancer$inboundSchema, +export const DeploymentPendingPreparedStackOverrideAwStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function deploymentPublicEndpointTargetLoadBalancerFromJSON( +export function deploymentPendingPreparedStackOverrideAwStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentPublicEndpointTargetLoadBalancer, + DeploymentPendingPreparedStackOverrideAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentPublicEndpointTargetLoadBalancer$inboundSchema.parse( + DeploymentPendingPreparedStackOverrideAwStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentPublicEndpointTargetLoadBalancer' from JSON`, + `Failed to parse 'DeploymentPendingPreparedStackOverrideAwStack' from JSON`, ); } /** @internal */ -export const DeploymentModeMachineAddresses$inboundSchema: z.ZodEnum< - typeof DeploymentModeMachineAddresses -> = z.enum(DeploymentModeMachineAddresses); - -/** @internal */ -export const DeploymentPublicEndpointTargetMachineAddresses$inboundSchema: - z.ZodType = z.object( - { - mode: DeploymentModeMachineAddresses$inboundSchema, - }, - ); +export const DeploymentPendingPreparedStackOverrideAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackOverrideAwStack$inboundSchema + ).optional(), + }); -export function deploymentPublicEndpointTargetMachineAddressesFromJSON( +export function deploymentPendingPreparedStackOverrideAwBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentPublicEndpointTargetMachineAddresses, + DeploymentPendingPreparedStackOverrideAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentPublicEndpointTargetMachineAddresses$inboundSchema.parse( + DeploymentPendingPreparedStackOverrideAwBinding$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentPublicEndpointTargetMachineAddresses' from JSON`, + `Failed to parse 'DeploymentPendingPreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentPublicEndpointTargetUnion$inboundSchema: z.ZodType< - DeploymentPublicEndpointTargetUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentPublicEndpointTargetLoadBalancer$inboundSchema), - z.lazy(() => DeploymentPublicEndpointTargetMachineAddresses$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackOverrideEffect$inboundSchema: + z.ZodEnum = z.enum( + DeploymentPendingPreparedStackOverrideEffect, + ); -export function deploymentPublicEndpointTargetUnionFromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackOverrideAwGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function deploymentPendingPreparedStackOverrideAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAwGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentPublicEndpointTargetUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPublicEndpointTargetUnion' from JSON`, + DeploymentPendingPreparedStackOverrideAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDomains$inboundSchema: z.ZodType< - DeploymentDomains, +export const DeploymentPendingPreparedStackOverrideAw$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackOverrideAw, unknown > = z.object({ - customDomains: z.nullable( - z.record(z.string(), z.lazy(() => DeploymentCustomDomains$inboundSchema)), - ).optional(), - publicEndpointTarget: z.nullable( - z.union([ - z.lazy(() => DeploymentPublicEndpointTargetLoadBalancer$inboundSchema), - z.lazy(() => - DeploymentPublicEndpointTargetMachineAddresses$inboundSchema - ), - z.any(), - ]), - ).optional(), + binding: z.lazy(() => + DeploymentPendingPreparedStackOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: DeploymentPendingPreparedStackOverrideEffect$inboundSchema.optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentDomainsFromJSON( +export function deploymentPendingPreparedStackOverrideAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAw, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDomains$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDomains' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const DeploymentDomainsUnion$inboundSchema: z.ZodType< - DeploymentDomainsUnion, - unknown -> = z.union([z.lazy(() => DeploymentDomains$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackOverrideAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); + +export function deploymentPendingPreparedStackOverrideAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentPendingPreparedStackOverrideAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAzureResource' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPendingPreparedStackOverrideAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function deploymentDomainsUnionFromJSON( +export function deploymentPendingPreparedStackOverrideAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDomainsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDomainsUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentExternalBindings$inboundSchema: z.ZodType< - DeploymentExternalBindings, - unknown -> = z.object({}); +export const DeploymentPendingPreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackOverrideAzureStack$inboundSchema + ).optional(), + }); -export function deploymentExternalBindingsFromJSON( +export function deploymentPendingPreparedStackOverrideAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExternalBindings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExternalBindings' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentHeartbeats$inboundSchema: z.ZodEnum< - typeof DeploymentHeartbeats -> = z.enum(DeploymentHeartbeats); - -/** @internal */ -export const DeploymentCloud$inboundSchema: z.ZodType< - DeploymentCloud, - unknown -> = z.object({ - accountId: z.nullable(z.string()).optional(), - clusterId: z.nullable(z.string()).optional(), - clusterName: z.nullable(z.string()).optional(), - projectId: z.nullable(z.string()).optional(), - region: z.nullable(z.string()).optional(), - resourceGroup: z.nullable(z.string()).optional(), - subscriptionId: z.nullable(z.string()).optional(), -}); +export const DeploymentPendingPreparedStackOverrideAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentCloudFromJSON( +export function deploymentPendingPreparedStackOverrideAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCloud$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCloud' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentCloudUnion$inboundSchema: z.ZodType< - DeploymentCloudUnion, - unknown -> = z.union([z.lazy(() => DeploymentCloud$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackOverrideAzure$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + DeploymentPendingPreparedStackOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentCloudUnionFromJSON( +export function deploymentPendingPreparedStackOverrideAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCloudUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCloudUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const DeploymentOwnership$inboundSchema: z.ZodEnum< - typeof DeploymentOwnership -> = z.enum(DeploymentOwnership); - -/** @internal */ -export const DeploymentCluster$inboundSchema: z.ZodType< - DeploymentCluster, - unknown -> = z.object({ - cloud: z.nullable( - z.union([z.lazy(() => DeploymentCloud$inboundSchema), z.any()]), - ).optional(), - namespace: z.nullable(z.string()).optional(), - ownership: DeploymentOwnership$inboundSchema, -}); +export const DeploymentPendingPreparedStackOverrideConditionResource$inboundSchema: + z.ZodType = + z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentClusterFromJSON( +export function deploymentPendingPreparedStackOverrideConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideConditionResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCluster$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCluster' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentClusterUnion$inboundSchema: z.ZodType< - DeploymentClusterUnion, - unknown -> = z.union([z.lazy(() => DeploymentCluster$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentPendingPreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentPendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentClusterUnionFromJSON( +export function deploymentPendingPreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideResourceConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentClusterUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentClusterUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentCertificateNone2$inboundSchema: z.ZodType< - DeploymentCertificateNone2, - unknown -> = z.object({ - mode: z.literal("none"), -}); +export const DeploymentPendingPreparedStackOverrideGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentCertificateNone2FromJSON( +export function deploymentPendingPreparedStackOverrideGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCertificateNone2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateNone2' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentCertificateManagedTLSSecret2$inboundSchema: z.ZodType< - DeploymentCertificateManagedTLSSecret2, - unknown -> = z.object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), -}); +export const DeploymentPendingPreparedStackOverrideConditionStack$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentCertificateManagedTLSSecret2FromJSON( +export function deploymentPendingPreparedStackOverrideConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideConditionStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentCertificateManagedTLSSecret2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateManagedTLSSecret2' from JSON`, + DeploymentPendingPreparedStackOverrideConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentCertificateAwsAcmArn2$inboundSchema: z.ZodType< - DeploymentCertificateAwsAcmArn2, - unknown -> = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), -}); +export const DeploymentPendingPreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentPendingPreparedStackOverrideStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentPendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentCertificateAwsAcmArn2FromJSON( +export function deploymentPendingPreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCertificateAwsAcmArn2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateAwsAcmArn2' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentCertificateManagedAcmImport2$inboundSchema: z.ZodType< - DeploymentCertificateManagedAcmImport2, - unknown -> = z.object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), -}); +export const DeploymentPendingPreparedStackOverrideGcpStack$inboundSchema: + z.ZodType = z.object( + { + condition: z.nullable(z.union([ + z.lazy(() => + DeploymentPendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ])).optional(), + scope: z.string(), + }, + ); -export function deploymentCertificateManagedAcmImport2FromJSON( +export function deploymentPendingPreparedStackOverrideGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideGcpStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentCertificateManagedAcmImport2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateManagedAcmImport2' from JSON`, + DeploymentPendingPreparedStackOverrideGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentCertificateTLSSecretRef2$inboundSchema: z.ZodType< - DeploymentCertificateTLSSecretRef2, - unknown -> = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), -}); +export const DeploymentPendingPreparedStackOverrideGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackOverrideGcpStack$inboundSchema + ).optional(), + }); -export function deploymentCertificateTLSSecretRef2FromJSON( +export function deploymentPendingPreparedStackOverrideGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideGcpBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentCertificateTLSSecretRef2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateTLSSecretRef2' from JSON`, + DeploymentPendingPreparedStackOverrideGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentCertificateUnion2$inboundSchema: z.ZodType< - DeploymentCertificateUnion2, - unknown -> = z.union([ - z.lazy(() => DeploymentCertificateTLSSecretRef2$inboundSchema), - z.lazy(() => DeploymentCertificateManagedAcmImport2$inboundSchema), - z.lazy(() => DeploymentCertificateAwsAcmArn2$inboundSchema), - z.lazy(() => DeploymentCertificateManagedTLSSecret2$inboundSchema), - z.lazy(() => DeploymentCertificateNone2$inboundSchema), -]); +export const DeploymentPendingPreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType = z.object( + { + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }, + ); -export function deploymentCertificateUnion2FromJSON( +export function deploymentPendingPreparedStackOverrideGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackOverrideGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCertificateUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateUnion2' from JSON`, + (x) => + DeploymentPendingPreparedStackOverrideGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentModeCustom$inboundSchema: z.ZodEnum< - typeof DeploymentModeCustom -> = z.enum(DeploymentModeCustom); - -/** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainersEnum4$inboundSchema: - z.ZodEnum< - typeof DeploymentProviderAzureApplicationGatewayForContainersEnum4 - > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum4); +export const DeploymentPendingPreparedStackOverrideGcp$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackOverrideGcp, + unknown +> = z.object({ + binding: z.lazy(() => + DeploymentPendingPreparedStackOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), +}); -/** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema: - z.ZodType = - z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentProviderAzureApplicationGatewayForContainersEnum4$inboundSchema, +export function deploymentPendingPreparedStackOverrideGcpFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentPendingPreparedStackOverrideGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentPendingPreparedStackOverrideGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideGcp' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPendingPreparedStackOverridePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentPendingPreparedStackOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentPendingPreparedStackOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentPendingPreparedStackOverrideGcp$inboundSchema + )), + ).optional(), }); -export function deploymentProviderAzureApplicationGatewayForContainers4FromJSON( +export function deploymentPendingPreparedStackOverridePlatformsFromJSON( jsonString: string, ): SafeParseResult< - DeploymentProviderAzureApplicationGatewayForContainers4, + DeploymentPendingPreparedStackOverridePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers4' from JSON`, + DeploymentPendingPreparedStackOverridePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentProviderGkeGatewayEnum4$inboundSchema: z.ZodEnum< - typeof DeploymentProviderGkeGatewayEnum4 -> = z.enum(DeploymentProviderGkeGatewayEnum4); - -/** @internal */ -export const DeploymentProviderGkeGateway4$inboundSchema: z.ZodType< - DeploymentProviderGkeGateway4, +export const DeploymentPendingPreparedStackOverride$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackOverride, unknown > = z.object({ - provider: DeploymentProviderGkeGatewayEnum4$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentPendingPreparedStackOverridePlatforms$inboundSchema + ), }); -export function deploymentProviderGkeGateway4FromJSON( +export function deploymentPendingPreparedStackOverrideFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProviderGkeGateway4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderGkeGateway4' from JSON`, + (x) => + DeploymentPendingPreparedStackOverride$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackOverride' from JSON`, ); } /** @internal */ -export const DeploymentProviderAwsAlbEnum4$inboundSchema: z.ZodEnum< - typeof DeploymentProviderAwsAlbEnum4 -> = z.enum(DeploymentProviderAwsAlbEnum4); +export const DeploymentPendingPreparedStackOverrideUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentPendingPreparedStackOverride$inboundSchema), + z.string(), + ]); + +export function deploymentPendingPreparedStackOverrideUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentPendingPreparedStackOverrideUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentPendingPreparedStackOverrideUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackOverrideUnion' from JSON`, + ); +} /** @internal */ -export const DeploymentProviderAwsAlb4$inboundSchema: z.ZodType< - DeploymentProviderAwsAlb4, +export const DeploymentPendingPreparedStackManagement2$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackManagement2, unknown > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentProviderAwsAlbEnum4$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => DeploymentPendingPreparedStackOverride$inboundSchema), + z.string(), + ])), + ), }); -export function deploymentProviderAwsAlb4FromJSON( +export function deploymentPendingPreparedStackManagement2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackManagement2, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderAwsAlb4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAwsAlb4' from JSON`, + (x) => + DeploymentPendingPreparedStackManagement2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackManagement2' from JSON`, ); } /** @internal */ -export const DeploymentProviderUnion4$inboundSchema: z.ZodType< - DeploymentProviderUnion4, - unknown -> = z.union([ - z.lazy(() => DeploymentProviderAwsAlb4$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway4$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackExtendAwResource$inboundSchema: + z.ZodType = z.object( + { + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }, + ); -export function deploymentProviderUnion4FromJSON( +export function deploymentPendingPreparedStackExtendAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderUnion4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderUnion4' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const DeploymentRouteGateway2$inboundSchema: z.ZodType< - DeploymentRouteGateway2, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentProviderAwsAlb4$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers4$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway4$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), -}); +export const DeploymentPendingPreparedStackExtendAwStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentRouteGateway2FromJSON( +export function deploymentPendingPreparedStackExtendAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAwStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentRouteGateway2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentRouteGateway2' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainersEnum3$inboundSchema: - z.ZodEnum< - typeof DeploymentProviderAzureApplicationGatewayForContainersEnum3 - > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum3); - -/** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema: - z.ZodType = - z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentProviderAzureApplicationGatewayForContainersEnum3$inboundSchema, - }); +export const DeploymentPendingPreparedStackExtendAwBinding$inboundSchema: + z.ZodType = z.object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackExtendAwStack$inboundSchema + ).optional(), + }); -export function deploymentProviderAzureApplicationGatewayForContainers3FromJSON( +export function deploymentPendingPreparedStackExtendAwBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentProviderAzureApplicationGatewayForContainers3, + DeploymentPendingPreparedStackExtendAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers3' from JSON`, + DeploymentPendingPreparedStackExtendAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentProviderGkeGatewayEnum3$inboundSchema: z.ZodEnum< - typeof DeploymentProviderGkeGatewayEnum3 -> = z.enum(DeploymentProviderGkeGatewayEnum3); +export const DeploymentPendingPreparedStackExtendEffect$inboundSchema: + z.ZodEnum = z.enum( + DeploymentPendingPreparedStackExtendEffect, + ); /** @internal */ -export const DeploymentProviderGkeGateway3$inboundSchema: z.ZodType< - DeploymentProviderGkeGateway3, - unknown -> = z.object({ - provider: DeploymentProviderGkeGatewayEnum3$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), -}); +export const DeploymentPendingPreparedStackExtendAwGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentProviderGkeGateway3FromJSON( +export function deploymentPendingPreparedStackExtendAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderGkeGateway3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderGkeGateway3' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentProviderAwsAlbEnum3$inboundSchema: z.ZodEnum< - typeof DeploymentProviderAwsAlbEnum3 -> = z.enum(DeploymentProviderAwsAlbEnum3); - -/** @internal */ -export const DeploymentProviderAwsAlb3$inboundSchema: z.ZodType< - DeploymentProviderAwsAlb3, +export const DeploymentPendingPreparedStackExtendAw$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackExtendAw, unknown > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentProviderAwsAlbEnum3$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + binding: z.lazy(() => + DeploymentPendingPreparedStackExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: DeploymentPendingPreparedStackExtendEffect$inboundSchema.optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentProviderAwsAlb3FromJSON( +export function deploymentPendingPreparedStackExtendAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProviderAwsAlb3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAwsAlb3' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAw$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const DeploymentProviderUnion3$inboundSchema: z.ZodType< - DeploymentProviderUnion3, - unknown -> = z.union([ - z.lazy(() => DeploymentProviderAwsAlb3$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway3$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackExtendAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function deploymentProviderUnion3FromJSON( +export function deploymentPendingPreparedStackExtendAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderUnion3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderUnion3' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentRouteIngress2$inboundSchema: z.ZodType< - DeploymentRouteIngress2, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentProviderAwsAlb3$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers3$inboundSchema +export const DeploymentPendingPreparedStackExtendAzureStack$inboundSchema: + z.ZodType = z.object( + { + scope: z.string(), + }, + ); + +export function deploymentPendingPreparedStackExtendAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentPendingPreparedStackExtendAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentPendingPreparedStackExtendAzureStack$inboundSchema.parse( + JSON.parse(x), ), - z.lazy(() => DeploymentProviderGkeGateway3$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), -}); + `Failed to parse 'DeploymentPendingPreparedStackExtendAzureStack' from JSON`, + ); +} -export function deploymentRouteIngress2FromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackExtendAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackExtendAzureStack$inboundSchema + ).optional(), + }); + +export function deploymentPendingPreparedStackExtendAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentRouteIngress2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentRouteIngress2' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentRouteUnion2$inboundSchema: z.ZodType< - DeploymentRouteUnion2, - unknown -> = z.union([ - z.lazy(() => DeploymentRouteIngress2$inboundSchema), - z.lazy(() => DeploymentRouteGateway2$inboundSchema), -]); +export const DeploymentPendingPreparedStackExtendAzureGrant$inboundSchema: + z.ZodType = z.object( + { + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }, + ); -export function deploymentRouteUnion2FromJSON( +export function deploymentPendingPreparedStackExtendAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentRouteUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentRouteUnion2' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentExposureCustom$inboundSchema: z.ZodType< - DeploymentExposureCustom, +export const DeploymentPendingPreparedStackExtendAzure$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackExtendAzure, unknown > = z.object({ - certificate: z.union([ - z.lazy(() => DeploymentCertificateTLSSecretRef2$inboundSchema), - z.lazy(() => DeploymentCertificateManagedAcmImport2$inboundSchema), - z.lazy(() => DeploymentCertificateAwsAcmArn2$inboundSchema), - z.lazy(() => DeploymentCertificateManagedTLSSecret2$inboundSchema), - z.lazy(() => DeploymentCertificateNone2$inboundSchema), - ]), - domain: z.string(), - mode: DeploymentModeCustom$inboundSchema, - route: z.union([ - z.lazy(() => DeploymentRouteIngress2$inboundSchema), - z.lazy(() => DeploymentRouteGateway2$inboundSchema), - ]), + binding: z.lazy(() => + DeploymentPendingPreparedStackExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentExposureCustomFromJSON( +export function deploymentPendingPreparedStackExtendAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExposureCustom$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExposureCustom' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const DeploymentCertificateNone1$inboundSchema: z.ZodType< - DeploymentCertificateNone1, - unknown -> = z.object({ - mode: z.literal("none"), -}); +export const DeploymentPendingPreparedStackExtendConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentCertificateNone1FromJSON( +export function deploymentPendingPreparedStackExtendConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendConditionResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCertificateNone1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateNone1' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendConditionResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentCertificateManagedTLSSecret1$inboundSchema: z.ZodType< - DeploymentCertificateManagedTLSSecret1, - unknown -> = z.object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), -}); +export const DeploymentPendingPreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentPendingPreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentPendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentCertificateManagedTLSSecret1FromJSON( +export function deploymentPendingPreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendResourceConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentCertificateManagedTLSSecret1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateManagedTLSSecret1' from JSON`, + DeploymentPendingPreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentCertificateAwsAcmArn1$inboundSchema: z.ZodType< - DeploymentCertificateAwsAcmArn1, - unknown -> = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), -}); +export const DeploymentPendingPreparedStackExtendGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentCertificateAwsAcmArn1FromJSON( +export function deploymentPendingPreparedStackExtendGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCertificateAwsAcmArn1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateAwsAcmArn1' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentCertificateManagedAcmImport1$inboundSchema: z.ZodType< - DeploymentCertificateManagedAcmImport1, - unknown -> = z.object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), -}); +export const DeploymentPendingPreparedStackExtendConditionStack$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentCertificateManagedAcmImport1FromJSON( +export function deploymentPendingPreparedStackExtendConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendConditionStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentCertificateManagedAcmImport1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateManagedAcmImport1' from JSON`, + DeploymentPendingPreparedStackExtendConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentCertificateTLSSecretRef1$inboundSchema: z.ZodType< - DeploymentCertificateTLSSecretRef1, - unknown -> = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), -}); +export const DeploymentPendingPreparedStackExtendStackConditionUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentCertificateTLSSecretRef1FromJSON( +export function deploymentPendingPreparedStackExtendStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentCertificateTLSSecretRef1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateTLSSecretRef1' from JSON`, + DeploymentPendingPreparedStackExtendStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentCertificateUnion1$inboundSchema: z.ZodType< - DeploymentCertificateUnion1, - unknown -> = z.union([ - z.lazy(() => DeploymentCertificateTLSSecretRef1$inboundSchema), - z.lazy(() => DeploymentCertificateManagedAcmImport1$inboundSchema), - z.lazy(() => DeploymentCertificateAwsAcmArn1$inboundSchema), - z.lazy(() => DeploymentCertificateManagedTLSSecret1$inboundSchema), - z.lazy(() => DeploymentCertificateNone1$inboundSchema), -]); +export const DeploymentPendingPreparedStackExtendGcpStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentCertificateUnion1FromJSON( +export function deploymentPendingPreparedStackExtendGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentCertificateUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentCertificateUnion1' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentModeGenerated$inboundSchema: z.ZodEnum< - typeof DeploymentModeGenerated -> = z.enum(DeploymentModeGenerated); - -/** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainersEnum2$inboundSchema: - z.ZodEnum< - typeof DeploymentProviderAzureApplicationGatewayForContainersEnum2 - > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum2); - -/** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema: - z.ZodType = - z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentProviderAzureApplicationGatewayForContainersEnum2$inboundSchema, - }); +export const DeploymentPendingPreparedStackExtendGcpBinding$inboundSchema: + z.ZodType = z.object( + { + resource: z.lazy(() => + DeploymentPendingPreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackExtendGcpStack$inboundSchema + ).optional(), + }, + ); -export function deploymentProviderAzureApplicationGatewayForContainers2FromJSON( +export function deploymentPendingPreparedStackExtendGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentProviderAzureApplicationGatewayForContainers2, + DeploymentPendingPreparedStackExtendGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers2' from JSON`, + DeploymentPendingPreparedStackExtendGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentProviderGkeGatewayEnum2$inboundSchema: z.ZodEnum< - typeof DeploymentProviderGkeGatewayEnum2 -> = z.enum(DeploymentProviderGkeGatewayEnum2); - -/** @internal */ -export const DeploymentProviderGkeGateway2$inboundSchema: z.ZodType< - DeploymentProviderGkeGateway2, - unknown -> = z.object({ - provider: DeploymentProviderGkeGatewayEnum2$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), -}); +export const DeploymentPendingPreparedStackExtendGcpGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentProviderGkeGateway2FromJSON( +export function deploymentPendingPreparedStackExtendGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderGkeGateway2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderGkeGateway2' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentProviderAwsAlbEnum2$inboundSchema: z.ZodEnum< - typeof DeploymentProviderAwsAlbEnum2 -> = z.enum(DeploymentProviderAwsAlbEnum2); - -/** @internal */ -export const DeploymentProviderAwsAlb2$inboundSchema: z.ZodType< - DeploymentProviderAwsAlb2, +export const DeploymentPendingPreparedStackExtendGcp$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackExtendGcp, unknown > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentProviderAwsAlbEnum2$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + binding: z.lazy(() => + DeploymentPendingPreparedStackExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentProviderAwsAlb2FromJSON( +export function deploymentPendingPreparedStackExtendGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendGcp, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderAwsAlb2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAwsAlb2' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendGcp' from JSON`, ); } -/** @internal */ -export const DeploymentProviderUnion2$inboundSchema: z.ZodType< - DeploymentProviderUnion2, - unknown -> = z.union([ - z.lazy(() => DeploymentProviderAwsAlb2$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway2$inboundSchema), - z.any(), -]); - -export function deploymentProviderUnion2FromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackExtendPlatforms$inboundSchema: + z.ZodType = z.object({ + aws: z.nullable( + z.array( + z.lazy(() => DeploymentPendingPreparedStackExtendAw$inboundSchema), + ), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentPendingPreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array( + z.lazy(() => DeploymentPendingPreparedStackExtendGcp$inboundSchema), + ), + ).optional(), + }); + +export function deploymentPendingPreparedStackExtendPlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackExtendPlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderUnion2' from JSON`, + (x) => + DeploymentPendingPreparedStackExtendPlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const DeploymentRouteGateway1$inboundSchema: z.ZodType< - DeploymentRouteGateway1, +export const DeploymentPendingPreparedStackExtend$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackExtend, unknown > = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentProviderAwsAlb2$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers2$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway2$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentPendingPreparedStackExtendPlatforms$inboundSchema + ), }); -export function deploymentRouteGateway1FromJSON( +export function deploymentPendingPreparedStackExtendFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentRouteGateway1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentRouteGateway1' from JSON`, + (x) => + DeploymentPendingPreparedStackExtend$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackExtend' from JSON`, ); } /** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainersEnum1$inboundSchema: - z.ZodEnum< - typeof DeploymentProviderAzureApplicationGatewayForContainersEnum1 - > = z.enum(DeploymentProviderAzureApplicationGatewayForContainersEnum1); - -/** @internal */ -export const DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema: - z.ZodType = - z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentProviderAzureApplicationGatewayForContainersEnum1$inboundSchema, - }); +export const DeploymentPendingPreparedStackExtendUnion$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackExtendUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentPendingPreparedStackExtend$inboundSchema), + z.string(), +]); -export function deploymentProviderAzureApplicationGatewayForContainers1FromJSON( +export function deploymentPendingPreparedStackExtendUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentProviderAzureApplicationGatewayForContainers1, + DeploymentPendingPreparedStackExtendUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAzureApplicationGatewayForContainers1' from JSON`, + DeploymentPendingPreparedStackExtendUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const DeploymentProviderGkeGatewayEnum1$inboundSchema: z.ZodEnum< - typeof DeploymentProviderGkeGatewayEnum1 -> = z.enum(DeploymentProviderGkeGatewayEnum1); - -/** @internal */ -export const DeploymentProviderGkeGateway1$inboundSchema: z.ZodType< - DeploymentProviderGkeGateway1, +export const DeploymentPendingPreparedStackManagement1$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackManagement1, unknown > = z.object({ - provider: DeploymentProviderGkeGatewayEnum1$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => DeploymentPendingPreparedStackExtend$inboundSchema), + z.string(), + ])), + ), }); -export function deploymentProviderGkeGateway1FromJSON( +export function deploymentPendingPreparedStackManagement1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackManagement1, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderGkeGateway1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderGkeGateway1' from JSON`, + (x) => + DeploymentPendingPreparedStackManagement1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackManagement1' from JSON`, ); } /** @internal */ -export const DeploymentProviderAwsAlbEnum1$inboundSchema: z.ZodEnum< - typeof DeploymentProviderAwsAlbEnum1 -> = z.enum(DeploymentProviderAwsAlbEnum1); - -/** @internal */ -export const DeploymentProviderAwsAlb1$inboundSchema: z.ZodType< - DeploymentProviderAwsAlb1, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentProviderAwsAlbEnum1$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const DeploymentPendingPreparedStackManagementUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentPendingPreparedStackManagement1$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackManagement2$inboundSchema), + DeploymentPendingPreparedStackManagementEnum$inboundSchema, + ]); -export function deploymentProviderAwsAlb1FromJSON( +export function deploymentPendingPreparedStackManagementUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackManagementUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderAwsAlb1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderAwsAlb1' from JSON`, + (x) => + DeploymentPendingPreparedStackManagementUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const DeploymentProviderUnion1$inboundSchema: z.ZodType< - DeploymentProviderUnion1, - unknown -> = z.union([ - z.lazy(() => DeploymentProviderAwsAlb1$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway1$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackProfileAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentProviderUnion1FromJSON( +export function deploymentPendingPreparedStackProfileAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProviderUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProviderUnion1' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const DeploymentRouteIngress1$inboundSchema: z.ZodType< - DeploymentRouteIngress1, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentProviderAwsAlb1$inboundSchema), - z.lazy(() => - DeploymentProviderAzureApplicationGatewayForContainers1$inboundSchema - ), - z.lazy(() => DeploymentProviderGkeGateway1$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), -}); +export const DeploymentPendingPreparedStackProfileAwStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentRouteIngress1FromJSON( +export function deploymentPendingPreparedStackProfileAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAwStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentRouteIngress1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentRouteIngress1' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const DeploymentRouteUnion1$inboundSchema: z.ZodType< - DeploymentRouteUnion1, - unknown -> = z.union([ - z.lazy(() => DeploymentRouteIngress1$inboundSchema), - z.lazy(() => DeploymentRouteGateway1$inboundSchema), -]); +export const DeploymentPendingPreparedStackProfileAwBinding$inboundSchema: + z.ZodType = z.object( + { + resource: z.lazy(() => + DeploymentPendingPreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackProfileAwStack$inboundSchema + ).optional(), + }, + ); -export function deploymentRouteUnion1FromJSON( +export function deploymentPendingPreparedStackProfileAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentRouteUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentRouteUnion1' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentExposureGenerated$inboundSchema: z.ZodType< - DeploymentExposureGenerated, - unknown -> = z.object({ - certificate: z.union([ - z.lazy(() => DeploymentCertificateTLSSecretRef1$inboundSchema), - z.lazy(() => DeploymentCertificateManagedAcmImport1$inboundSchema), - z.lazy(() => DeploymentCertificateAwsAcmArn1$inboundSchema), - z.lazy(() => DeploymentCertificateManagedTLSSecret1$inboundSchema), - z.lazy(() => DeploymentCertificateNone1$inboundSchema), - ]), - mode: DeploymentModeGenerated$inboundSchema, - route: z.union([ - z.lazy(() => DeploymentRouteIngress1$inboundSchema), - z.lazy(() => DeploymentRouteGateway1$inboundSchema), - ]), -}); +export const DeploymentPendingPreparedStackProfileEffect$inboundSchema: + z.ZodEnum = z.enum( + DeploymentPendingPreparedStackProfileEffect, + ); -export function deploymentExposureGeneratedFromJSON( +/** @internal */ +export const DeploymentPendingPreparedStackProfileAwGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function deploymentPendingPreparedStackProfileAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExposureGenerated$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExposureGenerated' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentModeDisabled$inboundSchema: z.ZodEnum< - typeof DeploymentModeDisabled -> = z.enum(DeploymentModeDisabled); - -/** @internal */ -export const DeploymentExposureDisabled$inboundSchema: z.ZodType< - DeploymentExposureDisabled, +export const DeploymentPendingPreparedStackProfileAw$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackProfileAw, unknown > = z.object({ - mode: DeploymentModeDisabled$inboundSchema, + binding: z.lazy(() => + DeploymentPendingPreparedStackProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: DeploymentPendingPreparedStackProfileEffect$inboundSchema.optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentExposureDisabledFromJSON( +export function deploymentPendingPreparedStackProfileAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAw, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExposureDisabled$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExposureDisabled' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const DeploymentExposureUnion$inboundSchema: z.ZodType< - DeploymentExposureUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentExposureCustom$inboundSchema), - z.lazy(() => DeploymentExposureGenerated$inboundSchema), - z.lazy(() => DeploymentExposureDisabled$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackProfileAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function deploymentExposureUnionFromJSON( +export function deploymentPendingPreparedStackProfileAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExposureUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExposureUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentKubernetes$inboundSchema: z.ZodType< - DeploymentKubernetes, - unknown -> = z.object({ - cluster: z.nullable( - z.union([z.lazy(() => DeploymentCluster$inboundSchema), z.any()]), - ).optional(), - exposure: z.nullable( - z.union([ - z.lazy(() => DeploymentExposureCustom$inboundSchema), - z.lazy(() => DeploymentExposureGenerated$inboundSchema), - z.lazy(() => DeploymentExposureDisabled$inboundSchema), - z.any(), - ]), - ).optional(), -}); +export const DeploymentPendingPreparedStackProfileAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function deploymentKubernetesFromJSON( +export function deploymentPendingPreparedStackProfileAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentKubernetes$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentKubernetes' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentKubernetesUnion$inboundSchema: z.ZodType< - DeploymentKubernetesUnion, - unknown -> = z.union([z.lazy(() => DeploymentKubernetes$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackProfileAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackProfileAzureStack$inboundSchema + ).optional(), + }); -export function deploymentKubernetesUnionFromJSON( +export function deploymentPendingPreparedStackProfileAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentKubernetesUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentKubernetesUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentTypeByoVnetAzure$inboundSchema: z.ZodEnum< - typeof DeploymentTypeByoVnetAzure -> = z.enum(DeploymentTypeByoVnetAzure); - -/** @internal */ -export const DeploymentNetworkByoVnetAzure$inboundSchema: z.ZodType< - DeploymentNetworkByoVnetAzure, - unknown -> = z.object({ - application_gateway_subnet_name: z.nullable(z.string()).optional(), - private_endpoint_subnet_name: z.nullable(z.string()).optional(), - private_subnet_name: z.string(), - public_subnet_name: z.string(), - type: DeploymentTypeByoVnetAzure$inboundSchema, - vnet_resource_id: z.string(), -}).transform((v) => { - return remap$(v, { - "application_gateway_subnet_name": "applicationGatewaySubnetName", - "private_endpoint_subnet_name": "privateEndpointSubnetName", - "private_subnet_name": "privateSubnetName", - "public_subnet_name": "publicSubnetName", - "vnet_resource_id": "vnetResourceId", - }); -}); +export const DeploymentPendingPreparedStackProfileAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentNetworkByoVnetAzureFromJSON( +export function deploymentPendingPreparedStackProfileAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentNetworkByoVnetAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentNetworkByoVnetAzure' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentTypeByoVpcGcp$inboundSchema: z.ZodEnum< - typeof DeploymentTypeByoVpcGcp -> = z.enum(DeploymentTypeByoVpcGcp); - -/** @internal */ -export const DeploymentNetworkByoVpcGcp$inboundSchema: z.ZodType< - DeploymentNetworkByoVpcGcp, - unknown -> = z.object({ - network_name: z.string(), - region: z.string(), - subnet_name: z.string(), - type: DeploymentTypeByoVpcGcp$inboundSchema, -}).transform((v) => { - return remap$(v, { - "network_name": "networkName", - "subnet_name": "subnetName", +export const DeploymentPendingPreparedStackProfileAzure$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + DeploymentPendingPreparedStackProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -}); -export function deploymentNetworkByoVpcGcpFromJSON( +export function deploymentPendingPreparedStackProfileAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentNetworkByoVpcGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentNetworkByoVpcGcp' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const DeploymentTypeByoVpcAws$inboundSchema: z.ZodEnum< - typeof DeploymentTypeByoVpcAws -> = z.enum(DeploymentTypeByoVpcAws); - -/** @internal */ -export const DeploymentNetworkByoVpcAws$inboundSchema: z.ZodType< - DeploymentNetworkByoVpcAws, - unknown -> = z.object({ - private_subnet_ids: z.array(z.string()), - public_subnet_ids: z.array(z.string()), - security_group_ids: z.array(z.string()).optional(), - type: DeploymentTypeByoVpcAws$inboundSchema, - vpc_id: z.string(), -}).transform((v) => { - return remap$(v, { - "private_subnet_ids": "privateSubnetIds", - "public_subnet_ids": "publicSubnetIds", - "security_group_ids": "securityGroupIds", - "vpc_id": "vpcId", - }); -}); +export const DeploymentPendingPreparedStackProfileConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentNetworkByoVpcAwsFromJSON( +export function deploymentPendingPreparedStackProfileConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileConditionResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentNetworkByoVpcAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentNetworkByoVpcAws' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentTypeCreate$inboundSchema: z.ZodEnum< - typeof DeploymentTypeCreate -> = z.enum(DeploymentTypeCreate); - -/** @internal */ -export const DeploymentNetworkCreate$inboundSchema: z.ZodType< - DeploymentNetworkCreate, - unknown -> = z.object({ - availability_zones: z.int().optional(), - cidr: z.nullable(z.string()).optional(), - type: DeploymentTypeCreate$inboundSchema, -}).transform((v) => { - return remap$(v, { - "availability_zones": "availabilityZones", - }); -}); +export const DeploymentPendingPreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentPendingPreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentPendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentNetworkCreateFromJSON( +export function deploymentPendingPreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileResourceConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentNetworkCreate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentNetworkCreate' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentTypeUseDefault$inboundSchema: z.ZodEnum< - typeof DeploymentTypeUseDefault -> = z.enum(DeploymentTypeUseDefault); - -/** @internal */ -export const DeploymentNetworkUseDefault$inboundSchema: z.ZodType< - DeploymentNetworkUseDefault, - unknown -> = z.object({ - type: DeploymentTypeUseDefault$inboundSchema, -}); +export const DeploymentPendingPreparedStackProfileGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentNetworkUseDefaultFromJSON( +export function deploymentPendingPreparedStackProfileGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentNetworkUseDefault$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentNetworkUseDefault' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentNetworkUnion$inboundSchema: z.ZodType< - DeploymentNetworkUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentNetworkByoVpcAws$inboundSchema), - z.lazy(() => DeploymentNetworkByoVpcGcp$inboundSchema), - z.lazy(() => DeploymentNetworkByoVnetAzure$inboundSchema), - z.lazy(() => DeploymentNetworkUseDefault$inboundSchema), - z.lazy(() => DeploymentNetworkCreate$inboundSchema), - z.any(), -]); +export const DeploymentPendingPreparedStackProfileConditionStack$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentNetworkUnionFromJSON( +export function deploymentPendingPreparedStackProfileConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentNetworkUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentNetworkUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileConditionStack' from JSON`, ); } -/** @internal */ -export const DeploymentTelemetry$inboundSchema: z.ZodEnum< - typeof DeploymentTelemetry -> = z.enum(DeploymentTelemetry); - -/** @internal */ -export const DeploymentUpdates$inboundSchema: z.ZodEnum< - typeof DeploymentUpdates -> = z.enum(DeploymentUpdates); - -/** @internal */ -export const DeploymentStackSettings$inboundSchema: z.ZodType< - DeploymentStackSettings, - unknown -> = z.object({ - compute: z.nullable( - z.union([z.lazy(() => DeploymentCompute$inboundSchema), z.any()]), - ).optional(), - deploymentModel: DeploymentDeploymentModel$inboundSchema.optional(), - domains: z.nullable( - z.union([z.lazy(() => DeploymentDomains$inboundSchema), z.any()]), - ).optional(), - externalBindings: z.nullable( - z.lazy(() => DeploymentExternalBindings$inboundSchema), - ).optional(), - heartbeats: DeploymentHeartbeats$inboundSchema.optional(), - kubernetes: z.nullable( - z.union([z.lazy(() => DeploymentKubernetes$inboundSchema), z.any()]), - ).optional(), - network: z.nullable( - z.union([ - z.lazy(() => DeploymentNetworkByoVpcAws$inboundSchema), - z.lazy(() => DeploymentNetworkByoVpcGcp$inboundSchema), - z.lazy(() => DeploymentNetworkByoVnetAzure$inboundSchema), - z.lazy(() => DeploymentNetworkUseDefault$inboundSchema), - z.lazy(() => DeploymentNetworkCreate$inboundSchema), +/** @internal */ +export const DeploymentPendingPreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackProfileConditionStack$inboundSchema + ), z.any(), - ]), - ).optional(), - telemetry: DeploymentTelemetry$inboundSchema.optional(), - updates: DeploymentUpdates$inboundSchema.optional(), -}); + ]); -export function deploymentStackSettingsFromJSON( +export function deploymentPendingPreparedStackProfileStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentStackSettings' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentStackStatePlatform$inboundSchema: z.ZodEnum< - typeof DeploymentStackStatePlatform -> = z.enum(DeploymentStackStatePlatform); - -/** @internal */ -export const DeploymentStackStateConfig$inboundSchema: z.ZodType< - DeploymentStackStateConfig, - unknown -> = collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const DeploymentPendingPreparedStackProfileGcpStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentPendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentStackStateConfigFromJSON( +export function deploymentPendingPreparedStackProfileGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentStackStateConfig$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentStackStateConfig' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentControllerPlatformEnum$inboundSchema: z.ZodEnum< - typeof DeploymentControllerPlatformEnum -> = z.enum(DeploymentControllerPlatformEnum); - -/** @internal */ -export const DeploymentControllerPlatformUnion$inboundSchema: z.ZodType< - DeploymentControllerPlatformUnion, - unknown -> = z.union([DeploymentControllerPlatformEnum$inboundSchema, z.any()]); +export const DeploymentPendingPreparedStackProfileGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentPendingPreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentPendingPreparedStackProfileGcpStack$inboundSchema + ).optional(), + }); -export function deploymentControllerPlatformUnionFromJSON( +export function deploymentPendingPreparedStackProfileGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentControllerPlatformUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentControllerPlatformUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentStackStateDependency$inboundSchema: z.ZodType< - DeploymentStackStateDependency, - unknown -> = z.object({ - id: z.string(), - type: z.string(), -}); +export const DeploymentPendingPreparedStackProfileGcpGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentStackStateDependencyFromJSON( +export function deploymentPendingPreparedStackProfileGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentStackStateDependency$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentStackStateDependency' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentErrorStackState$inboundSchema: z.ZodType< - DeploymentErrorStackState, +export const DeploymentPendingPreparedStackProfileGcp$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackProfileGcp, unknown > = z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), + binding: z.lazy(() => + DeploymentPendingPreparedStackProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentPendingPreparedStackProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentErrorStackStateFromJSON( +export function deploymentPendingPreparedStackProfileGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileGcp, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentErrorStackState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentErrorStackState' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const DeploymentErrorUnion$inboundSchema: z.ZodType< - DeploymentErrorUnion, - unknown -> = z.union([z.lazy(() => DeploymentErrorStackState$inboundSchema), z.any()]); +export const DeploymentPendingPreparedStackProfilePlatforms$inboundSchema: + z.ZodType = z.object( + { + aws: z.nullable(z.array(z.lazy(() => + DeploymentPendingPreparedStackProfileAw$inboundSchema + ))).optional(), + azure: z.nullable(z.array(z.lazy(() => + DeploymentPendingPreparedStackProfileAzure$inboundSchema + ))).optional(), + gcp: z.nullable(z.array(z.lazy(() => + DeploymentPendingPreparedStackProfileGcp$inboundSchema + ))).optional(), + }, + ); -export function deploymentErrorUnionFromJSON( +export function deploymentPendingPreparedStackProfilePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfilePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentErrorUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackProfilePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentLifecycleStackStateEnum$inboundSchema: z.ZodEnum< - typeof DeploymentLifecycleStackStateEnum -> = z.enum(DeploymentLifecycleStackStateEnum); - -/** @internal */ -export const DeploymentLifecycleUnion$inboundSchema: z.ZodType< - DeploymentLifecycleUnion, +export const DeploymentPendingPreparedStackProfile$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackProfile, unknown -> = z.union([DeploymentLifecycleStackStateEnum$inboundSchema, z.any()]); +> = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentPendingPreparedStackProfilePlatforms$inboundSchema + ), +}); -export function deploymentLifecycleUnionFromJSON( +export function deploymentPendingPreparedStackProfileFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentLifecycleUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentLifecycleUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackProfile$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackProfile' from JSON`, ); } /** @internal */ -export const DeploymentOutputs$inboundSchema: z.ZodType< - DeploymentOutputs, - unknown -> = collectExtraKeys$( - z.object({ - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const DeploymentPendingPreparedStackProfileUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentPendingPreparedStackProfile$inboundSchema), + z.string(), + ]); -export function deploymentOutputsFromJSON( +export function deploymentPendingPreparedStackProfileUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackProfileUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOutputs$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOutputs' from JSON`, + (x) => + DeploymentPendingPreparedStackProfileUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const DeploymentOutputsUnion$inboundSchema: z.ZodType< - DeploymentOutputsUnion, +export const DeploymentPendingPreparedStackPermissions$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackPermissions, unknown -> = z.union([z.lazy(() => DeploymentOutputs$inboundSchema), z.any()]); +> = z.object({ + management: z.union([ + z.lazy(() => DeploymentPendingPreparedStackManagement1$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackManagement2$inboundSchema), + DeploymentPendingPreparedStackManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => DeploymentPendingPreparedStackProfile$inboundSchema), + z.string(), + ]), + ), + ), + ), +}); -export function deploymentOutputsUnionFromJSON( +export function deploymentPendingPreparedStackPermissionsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackPermissions, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOutputsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOutputsUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackPermissions$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackPermissions' from JSON`, ); } /** @internal */ -export const DeploymentPreviousConfig$inboundSchema: z.ZodType< - DeploymentPreviousConfig, +export const DeploymentPendingPreparedStackConfig$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackConfig, unknown > = collectExtraKeys$( z.object({ @@ -5462,267 +9545,309 @@ export const DeploymentPreviousConfig$inboundSchema: z.ZodType< true, ); -export function deploymentPreviousConfigFromJSON( +export function deploymentPendingPreparedStackConfigFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentPreviousConfig$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPreviousConfig' from JSON`, + (x) => + DeploymentPendingPreparedStackConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackConfig' from JSON`, ); } /** @internal */ -export const DeploymentPreviousConfigUnion$inboundSchema: z.ZodType< - DeploymentPreviousConfigUnion, +export const DeploymentPendingPreparedStackDependency$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackDependency, unknown -> = z.union([z.lazy(() => DeploymentPreviousConfig$inboundSchema), z.any()]); +> = z.object({ + id: z.string(), + type: z.string(), +}); -export function deploymentPreviousConfigUnionFromJSON( +export function deploymentPendingPreparedStackDependencyFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackDependency, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentPreviousConfigUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPreviousConfigUnion' from JSON`, + (x) => + DeploymentPendingPreparedStackDependency$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackDependency' from JSON`, ); } - -/** @internal */ -export const DeploymentStackStateStatus$inboundSchema: z.ZodEnum< - typeof DeploymentStackStateStatus -> = z.enum(DeploymentStackStateStatus); - -/** @internal */ -export const DeploymentStackStateResources$inboundSchema: z.ZodType< - DeploymentStackStateResources, - unknown -> = z.object({ - _internal: z.nullable(z.any()).optional(), - config: z.lazy(() => DeploymentStackStateConfig$inboundSchema), - controllerPlatform: z.nullable( - z.union([DeploymentControllerPlatformEnum$inboundSchema, z.any()]), - ).optional(), - dependencies: z.array( - z.lazy(() => DeploymentStackStateDependency$inboundSchema), - ).optional(), - error: z.nullable( - z.union([z.lazy(() => DeploymentErrorStackState$inboundSchema), z.any()]), - ).optional(), - lastFailedState: z.nullable(z.any()).optional(), - lifecycle: z.nullable( - z.union([DeploymentLifecycleStackStateEnum$inboundSchema, z.any()]), - ).optional(), - outputs: z.nullable( - z.union([z.lazy(() => DeploymentOutputs$inboundSchema), z.any()]), - ).optional(), - previousConfig: z.nullable( - z.union([z.lazy(() => DeploymentPreviousConfig$inboundSchema), z.any()]), - ).optional(), - remoteBindingParams: z.nullable(z.any()).optional(), - retryAttempt: z.int().optional(), - status: DeploymentStackStateStatus$inboundSchema, - type: z.string(), -}).transform((v) => { - return remap$(v, { - "_internal": "internal", - }); + +/** @internal */ +export const DeploymentPendingPreparedStackLifecycle$inboundSchema: z.ZodEnum< + typeof DeploymentPendingPreparedStackLifecycle +> = z.enum(DeploymentPendingPreparedStackLifecycle); + +/** @internal */ +export const DeploymentPendingPreparedStackResources$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackResources, + unknown +> = z.object({ + config: z.lazy(() => DeploymentPendingPreparedStackConfig$inboundSchema), + dependencies: z.array( + z.lazy(() => DeploymentPendingPreparedStackDependency$inboundSchema), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: DeploymentPendingPreparedStackLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), }); -export function deploymentStackStateResourcesFromJSON( +export function deploymentPendingPreparedStackResourcesFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPendingPreparedStackResources, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentStackStateResources$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentStackStateResources' from JSON`, + (x) => + DeploymentPendingPreparedStackResources$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPendingPreparedStackResources' from JSON`, ); } /** @internal */ -export const DeploymentStackState$inboundSchema: z.ZodType< - DeploymentStackState, +export const DeploymentPendingPreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum = z.enum( + DeploymentPendingPreparedStackSupportedPlatform, + ); + +/** @internal */ +export const DeploymentPendingPreparedStack$inboundSchema: z.ZodType< + DeploymentPendingPreparedStack, unknown > = z.object({ - platform: DeploymentStackStatePlatform$inboundSchema, - resourcePrefix: z.string(), + id: z.string(), + inputs: z.array( + z.lazy(() => DeploymentPendingPreparedStackInput$inboundSchema), + ).optional(), + permissions: z.lazy(() => + DeploymentPendingPreparedStackPermissions$inboundSchema + ).optional(), resources: z.record( z.string(), - z.lazy(() => DeploymentStackStateResources$inboundSchema), + z.lazy(() => DeploymentPendingPreparedStackResources$inboundSchema), ), + supportedPlatforms: z.nullable( + z.array(DeploymentPendingPreparedStackSupportedPlatform$inboundSchema), + ).optional(), }); -export function deploymentStackStateFromJSON( +export function deploymentPendingPreparedStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentStackState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentStackState' from JSON`, + (x) => DeploymentPendingPreparedStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStack' from JSON`, + ); +} + +/** @internal */ +export const DeploymentPendingPreparedStackUnion$inboundSchema: z.ZodType< + DeploymentPendingPreparedStackUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentPendingPreparedStack$inboundSchema), + z.any(), +]); + +export function deploymentPendingPreparedStackUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentPendingPreparedStackUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPendingPreparedStackUnion' from JSON`, ); } /** @internal */ -export const DeploymentTypeStringList$inboundSchema: z.ZodEnum< - typeof DeploymentTypeStringList -> = z.enum(DeploymentTypeStringList); +export const DeploymentPreparedStackTypeStringList$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackTypeStringList +> = z.enum(DeploymentPreparedStackTypeStringList); /** @internal */ -export const DeploymentDefaultStringList$inboundSchema: z.ZodType< - DeploymentDefaultStringList, +export const DeploymentPreparedStackDefaultStringList$inboundSchema: z.ZodType< + DeploymentPreparedStackDefaultStringList, unknown > = z.object({ - type: DeploymentTypeStringList$inboundSchema, + type: DeploymentPreparedStackTypeStringList$inboundSchema, value: z.array(z.string()), }); -export function deploymentDefaultStringListFromJSON( +export function deploymentPreparedStackDefaultStringListFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackDefaultStringList, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDefaultStringList$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDefaultStringList' from JSON`, + (x) => + DeploymentPreparedStackDefaultStringList$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const DeploymentTypeBoolean$inboundSchema: z.ZodEnum< - typeof DeploymentTypeBoolean -> = z.enum(DeploymentTypeBoolean); +export const DeploymentPreparedStackTypeBoolean$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackTypeBoolean +> = z.enum(DeploymentPreparedStackTypeBoolean); /** @internal */ -export const DeploymentDefaultBoolean$inboundSchema: z.ZodType< - DeploymentDefaultBoolean, +export const DeploymentPreparedStackDefaultBoolean$inboundSchema: z.ZodType< + DeploymentPreparedStackDefaultBoolean, unknown > = z.object({ - type: DeploymentTypeBoolean$inboundSchema, + type: DeploymentPreparedStackTypeBoolean$inboundSchema, value: z.boolean(), }); -export function deploymentDefaultBooleanFromJSON( +export function deploymentPreparedStackDefaultBooleanFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentDefaultBoolean$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDefaultBoolean' from JSON`, + (x) => + DeploymentPreparedStackDefaultBoolean$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const DeploymentTypeNumber$inboundSchema: z.ZodEnum< - typeof DeploymentTypeNumber -> = z.enum(DeploymentTypeNumber); +export const DeploymentPreparedStackTypeNumber$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackTypeNumber +> = z.enum(DeploymentPreparedStackTypeNumber); /** @internal */ -export const DeploymentDefaultNumber$inboundSchema: z.ZodType< - DeploymentDefaultNumber, +export const DeploymentPreparedStackDefaultNumber$inboundSchema: z.ZodType< + DeploymentPreparedStackDefaultNumber, unknown > = z.object({ - type: DeploymentTypeNumber$inboundSchema, + type: DeploymentPreparedStackTypeNumber$inboundSchema, value: z.string(), }); -export function deploymentDefaultNumberFromJSON( +export function deploymentPreparedStackDefaultNumberFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentDefaultNumber$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDefaultNumber' from JSON`, + (x) => + DeploymentPreparedStackDefaultNumber$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const DeploymentTypeString$inboundSchema: z.ZodEnum< - typeof DeploymentTypeString -> = z.enum(DeploymentTypeString); +export const DeploymentPreparedStackTypeString$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackTypeString +> = z.enum(DeploymentPreparedStackTypeString); /** @internal */ -export const DeploymentDefaultString$inboundSchema: z.ZodType< - DeploymentDefaultString, +export const DeploymentPreparedStackDefaultString$inboundSchema: z.ZodType< + DeploymentPreparedStackDefaultString, unknown > = z.object({ - type: DeploymentTypeString$inboundSchema, + type: DeploymentPreparedStackTypeString$inboundSchema, value: z.string(), }); -export function deploymentDefaultStringFromJSON( +export function deploymentPreparedStackDefaultStringFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentDefaultString$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDefaultString' from JSON`, + (x) => + DeploymentPreparedStackDefaultString$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const DeploymentDefaultUnion$inboundSchema: z.ZodType< - DeploymentDefaultUnion, +export const DeploymentPreparedStackDefaultUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackDefaultUnion, unknown > = z.union([ - z.lazy(() => DeploymentDefaultString$inboundSchema), - z.lazy(() => DeploymentDefaultNumber$inboundSchema), - z.lazy(() => DeploymentDefaultBoolean$inboundSchema), - z.lazy(() => DeploymentDefaultStringList$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultString$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultNumber$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultBoolean$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultStringList$inboundSchema), z.any(), ]); -export function deploymentDefaultUnionFromJSON( +export function deploymentPreparedStackDefaultUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentDefaultUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDefaultUnion' from JSON`, + (x) => + DeploymentPreparedStackDefaultUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const DeploymentTypeEnvEnum$inboundSchema: z.ZodEnum< - typeof DeploymentTypeEnvEnum -> = z.enum(DeploymentTypeEnvEnum); +export const DeploymentPreparedStackTypeEnvEnum$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackTypeEnvEnum +> = z.enum(DeploymentPreparedStackTypeEnvEnum); /** @internal */ -export const DeploymentTypeUnion$inboundSchema: z.ZodType< - DeploymentTypeUnion, +export const DeploymentPreparedStackTypeUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackTypeUnion, unknown -> = z.union([DeploymentTypeEnvEnum$inboundSchema, z.any()]); +> = z.union([DeploymentPreparedStackTypeEnvEnum$inboundSchema, z.any()]); -export function deploymentTypeUnionFromJSON( +export function deploymentPreparedStackTypeUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentTypeUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentTypeUnion' from JSON`, + (x) => DeploymentPreparedStackTypeUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const DeploymentEnv$inboundSchema: z.ZodType = z - .object({ - name: z.string(), - targetResources: z.nullable(z.array(z.string())).optional(), - type: z.nullable(z.union([DeploymentTypeEnvEnum$inboundSchema, z.any()])) - .optional(), - }); +export const DeploymentPreparedStackEnv$inboundSchema: z.ZodType< + DeploymentPreparedStackEnv, + unknown +> = z.object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([DeploymentPreparedStackTypeEnvEnum$inboundSchema, z.any()]), + ).optional(), +}); -export function deploymentEnvFromJSON( +export function deploymentPreparedStackEnvFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentEnv$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentEnv' from JSON`, + (x) => DeploymentPreparedStackEnv$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackEnv' from JSON`, ); } /** @internal */ -export const DeploymentKind$inboundSchema: z.ZodEnum = z - .enum(DeploymentKind); +export const DeploymentPreparedStackKind$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackKind +> = z.enum(DeploymentPreparedStackKind); /** @internal */ export const DeploymentPreparedStackPlatform$inboundSchema: z.ZodEnum< @@ -5730,13 +9855,13 @@ export const DeploymentPreparedStackPlatform$inboundSchema: z.ZodEnum< > = z.enum(DeploymentPreparedStackPlatform); /** @internal */ -export const DeploymentProvidedBy$inboundSchema: z.ZodEnum< - typeof DeploymentProvidedBy -> = z.enum(DeploymentProvidedBy); +export const DeploymentPreparedStackProvidedBy$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackProvidedBy +> = z.enum(DeploymentPreparedStackProvidedBy); /** @internal */ -export const DeploymentValidation$inboundSchema: z.ZodType< - DeploymentValidation, +export const DeploymentPreparedStackValidation$inboundSchema: z.ZodType< + DeploymentPreparedStackValidation, unknown > = z.object({ format: z.nullable(z.string()).optional(), @@ -5750,79 +9875,87 @@ export const DeploymentValidation$inboundSchema: z.ZodType< values: z.nullable(z.array(z.string())).optional(), }); -export function deploymentValidationFromJSON( +export function deploymentPreparedStackValidationFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentValidation$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentValidation' from JSON`, + (x) => DeploymentPreparedStackValidation$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackValidation' from JSON`, ); } /** @internal */ -export const DeploymentValidationUnion$inboundSchema: z.ZodType< - DeploymentValidationUnion, +export const DeploymentPreparedStackValidationUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackValidationUnion, unknown -> = z.union([z.lazy(() => DeploymentValidation$inboundSchema), z.any()]); +> = z.union([ + z.lazy(() => DeploymentPreparedStackValidation$inboundSchema), + z.any(), +]); -export function deploymentValidationUnionFromJSON( +export function deploymentPreparedStackValidationUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentValidationUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentValidationUnion' from JSON`, + (x) => + DeploymentPreparedStackValidationUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const DeploymentInput$inboundSchema: z.ZodType< - DeploymentInput, +export const DeploymentPreparedStackInput$inboundSchema: z.ZodType< + DeploymentPreparedStackInput, unknown > = z.object({ default: z.nullable( z.union([ - z.lazy(() => DeploymentDefaultString$inboundSchema), - z.lazy(() => DeploymentDefaultNumber$inboundSchema), - z.lazy(() => DeploymentDefaultBoolean$inboundSchema), - z.lazy(() => DeploymentDefaultStringList$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultString$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultNumber$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultBoolean$inboundSchema), + z.lazy(() => DeploymentPreparedStackDefaultStringList$inboundSchema), z.any(), ]), ).optional(), description: z.string(), - env: z.array(z.lazy(() => DeploymentEnv$inboundSchema)).optional(), + env: z.array(z.lazy(() => DeploymentPreparedStackEnv$inboundSchema)) + .optional(), id: z.string(), - kind: DeploymentKind$inboundSchema, + kind: DeploymentPreparedStackKind$inboundSchema, label: z.string(), placeholder: z.nullable(z.string()).optional(), platforms: z.nullable(z.array(DeploymentPreparedStackPlatform$inboundSchema)) .optional(), - providedBy: z.array(DeploymentProvidedBy$inboundSchema), + providedBy: z.array(DeploymentPreparedStackProvidedBy$inboundSchema), required: z.boolean(), validation: z.nullable( - z.union([z.lazy(() => DeploymentValidation$inboundSchema), z.any()]), + z.union([ + z.lazy(() => DeploymentPreparedStackValidation$inboundSchema), + z.any(), + ]), ).optional(), }); -export function deploymentInputFromJSON( +export function deploymentPreparedStackInputFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentInput$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentInput' from JSON`, + (x) => DeploymentPreparedStackInput$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackInput' from JSON`, ); } /** @internal */ -export const DeploymentManagementEnum$inboundSchema: z.ZodEnum< - typeof DeploymentManagementEnum -> = z.enum(DeploymentManagementEnum); +export const DeploymentPreparedStackManagementEnum$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackManagementEnum +> = z.enum(DeploymentPreparedStackManagementEnum); /** @internal */ -export const DeploymentOverrideAwResource$inboundSchema: z.ZodType< - DeploymentOverrideAwResource, +export const DeploymentPreparedStackOverrideAwResource$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAwResource, unknown > = z.object({ condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) @@ -5830,19 +9963,25 @@ export const DeploymentOverrideAwResource$inboundSchema: z.ZodType< resources: z.array(z.string()), }); -export function deploymentOverrideAwResourceFromJSON( +export function deploymentPreparedStackOverrideAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideAwResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAwResource' from JSON`, + (x) => + DeploymentPreparedStackOverrideAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAwStack$inboundSchema: z.ZodType< - DeploymentOverrideAwStack, +export const DeploymentPreparedStackOverrideAwStack$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAwStack, unknown > = z.object({ condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) @@ -5850,43 +9989,53 @@ export const DeploymentOverrideAwStack$inboundSchema: z.ZodType< resources: z.array(z.string()), }); -export function deploymentOverrideAwStackFromJSON( +export function deploymentPreparedStackOverrideAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverrideAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAwStack' from JSON`, + (x) => + DeploymentPreparedStackOverrideAwStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverrideAwStack' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAwBinding$inboundSchema: z.ZodType< - DeploymentOverrideAwBinding, +export const DeploymentPreparedStackOverrideAwBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAwBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentOverrideAwResource$inboundSchema).optional(), - stack: z.lazy(() => DeploymentOverrideAwStack$inboundSchema).optional(), + resource: z.lazy(() => + DeploymentPreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => DeploymentPreparedStackOverrideAwStack$inboundSchema) + .optional(), }); -export function deploymentOverrideAwBindingFromJSON( +export function deploymentPreparedStackOverrideAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideAwBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAwBinding' from JSON`, + (x) => + DeploymentPreparedStackOverrideAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentOverrideEffect$inboundSchema: z.ZodEnum< - typeof DeploymentOverrideEffect -> = z.enum(DeploymentOverrideEffect); +export const DeploymentPreparedStackOverrideEffect$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackOverrideEffect +> = z.enum(DeploymentPreparedStackOverrideEffect); /** @internal */ -export const DeploymentOverrideAwGrant$inboundSchema: z.ZodType< - DeploymentOverrideAwGrant, +export const DeploymentPreparedStackOverrideAwGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAwGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -5896,97 +10045,114 @@ export const DeploymentOverrideAwGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentOverrideAwGrantFromJSON( +export function deploymentPreparedStackOverrideAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverrideAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAwGrant' from JSON`, + (x) => + DeploymentPreparedStackOverrideAwGrant$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAw$inboundSchema: z.ZodType< - DeploymentOverrideAw, +export const DeploymentPreparedStackOverrideAw$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAw, unknown > = z.object({ - binding: z.lazy(() => DeploymentOverrideAwBinding$inboundSchema), + binding: z.lazy(() => DeploymentPreparedStackOverrideAwBinding$inboundSchema), description: z.nullable(z.string()).optional(), - effect: DeploymentOverrideEffect$inboundSchema.optional(), - grant: z.lazy(() => DeploymentOverrideAwGrant$inboundSchema), + effect: DeploymentPreparedStackOverrideEffect$inboundSchema.optional(), + grant: z.lazy(() => DeploymentPreparedStackOverrideAwGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentOverrideAwFromJSON( +export function deploymentPreparedStackOverrideAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverrideAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAw' from JSON`, + (x) => DeploymentPreparedStackOverrideAw$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAzureResource$inboundSchema: z.ZodType< - DeploymentOverrideAzureResource, - unknown -> = z.object({ - scope: z.string(), -}); +export const DeploymentPreparedStackOverrideAzureResource$inboundSchema: + z.ZodType = z.object({ + scope: z.string(), + }); -export function deploymentOverrideAzureResourceFromJSON( +export function deploymentPreparedStackOverrideAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideAzureResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAzureResource' from JSON`, + (x) => + DeploymentPreparedStackOverrideAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAzureStack$inboundSchema: z.ZodType< - DeploymentOverrideAzureStack, +export const DeploymentPreparedStackOverrideAzureStack$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAzureStack, unknown > = z.object({ scope: z.string(), }); -export function deploymentOverrideAzureStackFromJSON( +export function deploymentPreparedStackOverrideAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideAzureStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAzureStack' from JSON`, + (x) => + DeploymentPreparedStackOverrideAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAzureBinding$inboundSchema: z.ZodType< - DeploymentOverrideAzureBinding, - unknown -> = z.object({ - resource: z.lazy(() => DeploymentOverrideAzureResource$inboundSchema) - .optional(), - stack: z.lazy(() => DeploymentOverrideAzureStack$inboundSchema).optional(), -}); +export const DeploymentPreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType = z.object({ + resource: z.lazy(() => + DeploymentPreparedStackOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => DeploymentPreparedStackOverrideAzureStack$inboundSchema) + .optional(), + }); -export function deploymentOverrideAzureBindingFromJSON( +export function deploymentPreparedStackOverrideAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideAzureBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAzureBinding' from JSON`, + (x) => + DeploymentPreparedStackOverrideAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAzureGrant$inboundSchema: z.ZodType< - DeploymentOverrideAzureGrant, +export const DeploymentPreparedStackOverrideAzureGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAzureGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -5996,192 +10162,234 @@ export const DeploymentOverrideAzureGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentOverrideAzureGrantFromJSON( +export function deploymentPreparedStackOverrideAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideAzureGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAzureGrant' from JSON`, + (x) => + DeploymentPreparedStackOverrideAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentOverrideAzure$inboundSchema: z.ZodType< - DeploymentOverrideAzure, +export const DeploymentPreparedStackOverrideAzure$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideAzure, unknown > = z.object({ - binding: z.lazy(() => DeploymentOverrideAzureBinding$inboundSchema), + binding: z.lazy(() => + DeploymentPreparedStackOverrideAzureBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentOverrideAzureGrant$inboundSchema), + grant: z.lazy(() => DeploymentPreparedStackOverrideAzureGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentOverrideAzureFromJSON( +export function deploymentPreparedStackOverrideAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverrideAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideAzure' from JSON`, + (x) => + DeploymentPreparedStackOverrideAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const DeploymentOverrideConditionResource$inboundSchema: z.ZodType< - DeploymentOverrideConditionResource, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const DeploymentPreparedStackOverrideConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentOverrideConditionResourceFromJSON( +export function deploymentPreparedStackOverrideConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideConditionResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentOverrideConditionResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideConditionResource' from JSON`, + DeploymentPreparedStackOverrideConditionResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentOverrideResourceConditionUnion$inboundSchema: z.ZodType< - DeploymentOverrideResourceConditionUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentOverrideConditionResource$inboundSchema), - z.any(), -]); +export const DeploymentPreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentOverrideResourceConditionUnionFromJSON( +export function deploymentPreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentOverrideResourceConditionUnion, + DeploymentPreparedStackOverrideResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentOverrideResourceConditionUnion$inboundSchema.parse( + DeploymentPreparedStackOverrideResourceConditionUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentOverrideResourceConditionUnion' from JSON`, + `Failed to parse 'DeploymentPreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentOverrideGcpResource$inboundSchema: z.ZodType< - DeploymentOverrideGcpResource, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => DeploymentOverrideConditionResource$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const DeploymentPreparedStackOverrideGcpResource$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentOverrideGcpResourceFromJSON( +export function deploymentPreparedStackOverrideGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideGcpResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideGcpResource' from JSON`, + (x) => + DeploymentPreparedStackOverrideGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentOverrideConditionStack$inboundSchema: z.ZodType< - DeploymentOverrideConditionStack, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const DeploymentPreparedStackOverrideConditionStack$inboundSchema: + z.ZodType = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentOverrideConditionStackFromJSON( +export function deploymentPreparedStackOverrideConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideConditionStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideConditionStack' from JSON`, + (x) => + DeploymentPreparedStackOverrideConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentOverrideStackConditionUnion$inboundSchema: z.ZodType< - DeploymentOverrideStackConditionUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentOverrideConditionStack$inboundSchema), - z.any(), -]); +export const DeploymentPreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentPreparedStackOverrideConditionStack$inboundSchema), + z.any(), + ]); -export function deploymentOverrideStackConditionUnionFromJSON( +export function deploymentPreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentOverrideStackConditionUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideStackConditionUnion' from JSON`, + DeploymentPreparedStackOverrideStackConditionUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentOverrideGcpStack$inboundSchema: z.ZodType< - DeploymentOverrideGcpStack, +export const DeploymentPreparedStackOverrideGcpStack$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideGcpStack, unknown > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => DeploymentOverrideConditionStack$inboundSchema), + z.lazy(() => DeploymentPreparedStackOverrideConditionStack$inboundSchema), z.any(), ]), ).optional(), scope: z.string(), }); -export function deploymentOverrideGcpStackFromJSON( +export function deploymentPreparedStackOverrideGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideGcpStack' from JSON`, + (x) => + DeploymentPreparedStackOverrideGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentOverrideGcpBinding$inboundSchema: z.ZodType< - DeploymentOverrideGcpBinding, +export const DeploymentPreparedStackOverrideGcpBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideGcpBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentOverrideGcpResource$inboundSchema) + resource: z.lazy(() => + DeploymentPreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => DeploymentPreparedStackOverrideGcpStack$inboundSchema) .optional(), - stack: z.lazy(() => DeploymentOverrideGcpStack$inboundSchema).optional(), }); -export function deploymentOverrideGcpBindingFromJSON( +export function deploymentPreparedStackOverrideGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideGcpBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideGcpBinding' from JSON`, + (x) => + DeploymentPreparedStackOverrideGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentOverrideGcpGrant$inboundSchema: z.ZodType< - DeploymentOverrideGcpGrant, +export const DeploymentPreparedStackOverrideGcpGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideGcpGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -6191,123 +10399,148 @@ export const DeploymentOverrideGcpGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentOverrideGcpGrantFromJSON( +export function deploymentPreparedStackOverrideGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverrideGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverrideGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideGcpGrant' from JSON`, + (x) => + DeploymentPreparedStackOverrideGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentOverrideGcp$inboundSchema: z.ZodType< - DeploymentOverrideGcp, +export const DeploymentPreparedStackOverrideGcp$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideGcp, unknown > = z.object({ - binding: z.lazy(() => DeploymentOverrideGcpBinding$inboundSchema), + binding: z.lazy(() => + DeploymentPreparedStackOverrideGcpBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentOverrideGcpGrant$inboundSchema), + grant: z.lazy(() => DeploymentPreparedStackOverrideGcpGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentOverrideGcpFromJSON( +export function deploymentPreparedStackOverrideGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverrideGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideGcp' from JSON`, + (x) => + DeploymentPreparedStackOverrideGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const DeploymentOverridePlatforms$inboundSchema: z.ZodType< - DeploymentOverridePlatforms, +export const DeploymentPreparedStackOverridePlatforms$inboundSchema: z.ZodType< + DeploymentPreparedStackOverridePlatforms, unknown > = z.object({ - aws: z.nullable(z.array(z.lazy(() => DeploymentOverrideAw$inboundSchema))) - .optional(), + aws: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackOverrideAw$inboundSchema)), + ).optional(), azure: z.nullable( - z.array(z.lazy(() => DeploymentOverrideAzure$inboundSchema)), + z.array(z.lazy(() => DeploymentPreparedStackOverrideAzure$inboundSchema)), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackOverrideGcp$inboundSchema)), ).optional(), - gcp: z.nullable(z.array(z.lazy(() => DeploymentOverrideGcp$inboundSchema))) - .optional(), }); -export function deploymentOverridePlatformsFromJSON( +export function deploymentPreparedStackOverridePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackOverridePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentOverridePlatforms$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverridePlatforms' from JSON`, + (x) => + DeploymentPreparedStackOverridePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentOverride$inboundSchema: z.ZodType< - DeploymentOverride, +export const DeploymentPreparedStackOverride$inboundSchema: z.ZodType< + DeploymentPreparedStackOverride, unknown > = z.object({ description: z.string(), id: z.string(), - platforms: z.lazy(() => DeploymentOverridePlatforms$inboundSchema), + platforms: z.lazy(() => + DeploymentPreparedStackOverridePlatforms$inboundSchema + ), }); -export function deploymentOverrideFromJSON( +export function deploymentPreparedStackOverrideFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverride$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverride' from JSON`, + (x) => DeploymentPreparedStackOverride$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverride' from JSON`, ); } /** @internal */ -export const DeploymentOverrideUnion$inboundSchema: z.ZodType< - DeploymentOverrideUnion, +export const DeploymentPreparedStackOverrideUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackOverrideUnion, unknown -> = z.union([z.lazy(() => DeploymentOverride$inboundSchema), z.string()]); +> = z.union([ + z.lazy(() => DeploymentPreparedStackOverride$inboundSchema), + z.string(), +]); -export function deploymentOverrideUnionFromJSON( +export function deploymentPreparedStackOverrideUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentOverrideUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentOverrideUnion' from JSON`, + (x) => + DeploymentPreparedStackOverrideUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const DeploymentManagement2$inboundSchema: z.ZodType< - DeploymentManagement2, +export const DeploymentPreparedStackManagement2$inboundSchema: z.ZodType< + DeploymentPreparedStackManagement2, unknown > = z.object({ override: z.record( z.string(), - z.array( - z.union([z.lazy(() => DeploymentOverride$inboundSchema), z.string()]), - ), + z.array(z.union([ + z.lazy(() => DeploymentPreparedStackOverride$inboundSchema), + z.string(), + ])), ), }); -export function deploymentManagement2FromJSON( +export function deploymentPreparedStackManagement2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentManagement2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentManagement2' from JSON`, + (x) => + DeploymentPreparedStackManagement2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackManagement2' from JSON`, ); } /** @internal */ -export const DeploymentExtendAwResource$inboundSchema: z.ZodType< - DeploymentExtendAwResource, +export const DeploymentPreparedStackExtendAwResource$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAwResource, unknown > = z.object({ condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) @@ -6315,19 +10548,25 @@ export const DeploymentExtendAwResource$inboundSchema: z.ZodType< resources: z.array(z.string()), }); -export function deploymentExtendAwResourceFromJSON( +export function deploymentPreparedStackExtendAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendAwResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAwResource' from JSON`, + (x) => + DeploymentPreparedStackExtendAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const DeploymentExtendAwStack$inboundSchema: z.ZodType< - DeploymentExtendAwStack, +export const DeploymentPreparedStackExtendAwStack$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAwStack, unknown > = z.object({ condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) @@ -6335,43 +10574,47 @@ export const DeploymentExtendAwStack$inboundSchema: z.ZodType< resources: z.array(z.string()), }); -export function deploymentExtendAwStackFromJSON( +export function deploymentPreparedStackExtendAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAwStack' from JSON`, + (x) => + DeploymentPreparedStackExtendAwStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const DeploymentExtendAwBinding$inboundSchema: z.ZodType< - DeploymentExtendAwBinding, +export const DeploymentPreparedStackExtendAwBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAwBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentExtendAwResource$inboundSchema).optional(), - stack: z.lazy(() => DeploymentExtendAwStack$inboundSchema).optional(), + resource: z.lazy(() => DeploymentPreparedStackExtendAwResource$inboundSchema) + .optional(), + stack: z.lazy(() => DeploymentPreparedStackExtendAwStack$inboundSchema) + .optional(), }); -export function deploymentExtendAwBindingFromJSON( +export function deploymentPreparedStackExtendAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendAwBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAwBinding' from JSON`, + (x) => + DeploymentPreparedStackExtendAwBinding$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentExtendEffect$inboundSchema: z.ZodEnum< - typeof DeploymentExtendEffect -> = z.enum(DeploymentExtendEffect); +export const DeploymentPreparedStackExtendEffect$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackExtendEffect +> = z.enum(DeploymentPreparedStackExtendEffect); /** @internal */ -export const DeploymentExtendAwGrant$inboundSchema: z.ZodType< - DeploymentExtendAwGrant, +export const DeploymentPreparedStackExtendAwGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAwGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -6381,97 +10624,116 @@ export const DeploymentExtendAwGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentExtendAwGrantFromJSON( +export function deploymentPreparedStackExtendAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAwGrant' from JSON`, + (x) => + DeploymentPreparedStackExtendAwGrant$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentExtendAw$inboundSchema: z.ZodType< - DeploymentExtendAw, +export const DeploymentPreparedStackExtendAw$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAw, unknown > = z.object({ - binding: z.lazy(() => DeploymentExtendAwBinding$inboundSchema), + binding: z.lazy(() => DeploymentPreparedStackExtendAwBinding$inboundSchema), description: z.nullable(z.string()).optional(), - effect: DeploymentExtendEffect$inboundSchema.optional(), - grant: z.lazy(() => DeploymentExtendAwGrant$inboundSchema), + effect: DeploymentPreparedStackExtendEffect$inboundSchema.optional(), + grant: z.lazy(() => DeploymentPreparedStackExtendAwGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentExtendAwFromJSON( +export function deploymentPreparedStackExtendAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAw' from JSON`, + (x) => DeploymentPreparedStackExtendAw$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const DeploymentExtendAzureResource$inboundSchema: z.ZodType< - DeploymentExtendAzureResource, - unknown -> = z.object({ - scope: z.string(), -}); +export const DeploymentPreparedStackExtendAzureResource$inboundSchema: + z.ZodType = z.object({ + scope: z.string(), + }); -export function deploymentExtendAzureResourceFromJSON( +export function deploymentPreparedStackExtendAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendAzureResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAzureResource' from JSON`, + (x) => + DeploymentPreparedStackExtendAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentExtendAzureStack$inboundSchema: z.ZodType< - DeploymentExtendAzureStack, +export const DeploymentPreparedStackExtendAzureStack$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAzureStack, unknown > = z.object({ scope: z.string(), }); -export function deploymentExtendAzureStackFromJSON( +export function deploymentPreparedStackExtendAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendAzureStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAzureStack' from JSON`, + (x) => + DeploymentPreparedStackExtendAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentExtendAzureBinding$inboundSchema: z.ZodType< - DeploymentExtendAzureBinding, +export const DeploymentPreparedStackExtendAzureBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAzureBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentExtendAzureResource$inboundSchema) + resource: z.lazy(() => + DeploymentPreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => DeploymentPreparedStackExtendAzureStack$inboundSchema) .optional(), - stack: z.lazy(() => DeploymentExtendAzureStack$inboundSchema).optional(), }); -export function deploymentExtendAzureBindingFromJSON( +export function deploymentPreparedStackExtendAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendAzureBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAzureBinding' from JSON`, + (x) => + DeploymentPreparedStackExtendAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentExtendAzureGrant$inboundSchema: z.ZodType< - DeploymentExtendAzureGrant, +export const DeploymentPreparedStackExtendAzureGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAzureGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -6481,185 +10743,231 @@ export const DeploymentExtendAzureGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentExtendAzureGrantFromJSON( +export function deploymentPreparedStackExtendAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendAzureGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAzureGrant' from JSON`, + (x) => + DeploymentPreparedStackExtendAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentExtendAzure$inboundSchema: z.ZodType< - DeploymentExtendAzure, +export const DeploymentPreparedStackExtendAzure$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendAzure, unknown > = z.object({ - binding: z.lazy(() => DeploymentExtendAzureBinding$inboundSchema), + binding: z.lazy(() => + DeploymentPreparedStackExtendAzureBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentExtendAzureGrant$inboundSchema), + grant: z.lazy(() => DeploymentPreparedStackExtendAzureGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentExtendAzureFromJSON( +export function deploymentPreparedStackExtendAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendAzure' from JSON`, + (x) => + DeploymentPreparedStackExtendAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const DeploymentExtendConditionResource$inboundSchema: z.ZodType< - DeploymentExtendConditionResource, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const DeploymentPreparedStackExtendConditionResource$inboundSchema: + z.ZodType = z.object( + { + expression: z.string(), + title: z.string(), + }, + ); -export function deploymentExtendConditionResourceFromJSON( +export function deploymentPreparedStackExtendConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendConditionResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendConditionResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendConditionResource' from JSON`, + (x) => + DeploymentPreparedStackExtendConditionResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentExtendResourceConditionUnion$inboundSchema: z.ZodType< - DeploymentExtendResourceConditionUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentExtendConditionResource$inboundSchema), - z.any(), -]); +export const DeploymentPreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentExtendResourceConditionUnionFromJSON( +export function deploymentPreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendResourceConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentExtendResourceConditionUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendResourceConditionUnion' from JSON`, + DeploymentPreparedStackExtendResourceConditionUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentExtendGcpResource$inboundSchema: z.ZodType< - DeploymentExtendGcpResource, +export const DeploymentPreparedStackExtendGcpResource$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendGcpResource, unknown > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => DeploymentExtendConditionResource$inboundSchema), + z.lazy(() => + DeploymentPreparedStackExtendConditionResource$inboundSchema + ), z.any(), ]), ).optional(), scope: z.string(), }); -export function deploymentExtendGcpResourceFromJSON( +export function deploymentPreparedStackExtendGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendGcpResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendGcpResource' from JSON`, + (x) => + DeploymentPreparedStackExtendGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentExtendConditionStack$inboundSchema: z.ZodType< - DeploymentExtendConditionStack, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const DeploymentPreparedStackExtendConditionStack$inboundSchema: + z.ZodType = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentExtendConditionStackFromJSON( +export function deploymentPreparedStackExtendConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendConditionStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendConditionStack' from JSON`, + (x) => + DeploymentPreparedStackExtendConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentExtendStackConditionUnion$inboundSchema: z.ZodType< - DeploymentExtendStackConditionUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentExtendConditionStack$inboundSchema), - z.any(), -]); +export const DeploymentPreparedStackExtendStackConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentPreparedStackExtendConditionStack$inboundSchema), + z.any(), + ]); -export function deploymentExtendStackConditionUnionFromJSON( +export function deploymentPreparedStackExtendStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentExtendStackConditionUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendStackConditionUnion' from JSON`, + DeploymentPreparedStackExtendStackConditionUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentExtendGcpStack$inboundSchema: z.ZodType< - DeploymentExtendGcpStack, +export const DeploymentPreparedStackExtendGcpStack$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendGcpStack, unknown > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => DeploymentExtendConditionStack$inboundSchema), + z.lazy(() => DeploymentPreparedStackExtendConditionStack$inboundSchema), z.any(), ]), ).optional(), scope: z.string(), }); -export function deploymentExtendGcpStackFromJSON( +export function deploymentPreparedStackExtendGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendGcpStack' from JSON`, + (x) => + DeploymentPreparedStackExtendGcpStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentExtendGcpBinding$inboundSchema: z.ZodType< - DeploymentExtendGcpBinding, +export const DeploymentPreparedStackExtendGcpBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendGcpBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentExtendGcpResource$inboundSchema).optional(), - stack: z.lazy(() => DeploymentExtendGcpStack$inboundSchema).optional(), + resource: z.lazy(() => DeploymentPreparedStackExtendGcpResource$inboundSchema) + .optional(), + stack: z.lazy(() => DeploymentPreparedStackExtendGcpStack$inboundSchema) + .optional(), }); -export function deploymentExtendGcpBindingFromJSON( +export function deploymentPreparedStackExtendGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackExtendGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentExtendGcpBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendGcpBinding' from JSON`, + (x) => + DeploymentPreparedStackExtendGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentExtendGcpGrant$inboundSchema: z.ZodType< - DeploymentExtendGcpGrant, +export const DeploymentPreparedStackExtendGcpGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendGcpGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -6669,142 +10977,154 @@ export const DeploymentExtendGcpGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentExtendGcpGrantFromJSON( +export function deploymentPreparedStackExtendGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendGcpGrant' from JSON`, + (x) => + DeploymentPreparedStackExtendGcpGrant$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentExtendGcp$inboundSchema: z.ZodType< - DeploymentExtendGcp, +export const DeploymentPreparedStackExtendGcp$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendGcp, unknown > = z.object({ - binding: z.lazy(() => DeploymentExtendGcpBinding$inboundSchema), + binding: z.lazy(() => DeploymentPreparedStackExtendGcpBinding$inboundSchema), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentExtendGcpGrant$inboundSchema), + grant: z.lazy(() => DeploymentPreparedStackExtendGcpGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentExtendGcpFromJSON( +export function deploymentPreparedStackExtendGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendGcp' from JSON`, + (x) => DeploymentPreparedStackExtendGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const DeploymentExtendPlatforms$inboundSchema: z.ZodType< - DeploymentExtendPlatforms, +export const DeploymentPreparedStackExtendPlatforms$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendPlatforms, unknown > = z.object({ - aws: z.nullable(z.array(z.lazy(() => DeploymentExtendAw$inboundSchema))) - .optional(), - azure: z.nullable(z.array(z.lazy(() => DeploymentExtendAzure$inboundSchema))) - .optional(), - gcp: z.nullable(z.array(z.lazy(() => DeploymentExtendGcp$inboundSchema))) - .optional(), + aws: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackExtendAw$inboundSchema)), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackExtendAzure$inboundSchema)), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackExtendGcp$inboundSchema)), + ).optional(), }); -export function deploymentExtendPlatformsFromJSON( +export function deploymentPreparedStackExtendPlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendPlatforms$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendPlatforms' from JSON`, + (x) => + DeploymentPreparedStackExtendPlatforms$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const DeploymentExtend$inboundSchema: z.ZodType< - DeploymentExtend, +export const DeploymentPreparedStackExtend$inboundSchema: z.ZodType< + DeploymentPreparedStackExtend, unknown > = z.object({ description: z.string(), id: z.string(), - platforms: z.lazy(() => DeploymentExtendPlatforms$inboundSchema), + platforms: z.lazy(() => DeploymentPreparedStackExtendPlatforms$inboundSchema), }); -export function deploymentExtendFromJSON( +export function deploymentPreparedStackExtendFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtend$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtend' from JSON`, + (x) => DeploymentPreparedStackExtend$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtend' from JSON`, ); } /** @internal */ -export const DeploymentExtendUnion$inboundSchema: z.ZodType< - DeploymentExtendUnion, +export const DeploymentPreparedStackExtendUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackExtendUnion, unknown -> = z.union([z.lazy(() => DeploymentExtend$inboundSchema), z.string()]); +> = z.union([ + z.lazy(() => DeploymentPreparedStackExtend$inboundSchema), + z.string(), +]); -export function deploymentExtendUnionFromJSON( +export function deploymentPreparedStackExtendUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentExtendUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentExtendUnion' from JSON`, + (x) => + DeploymentPreparedStackExtendUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const DeploymentManagement1$inboundSchema: z.ZodType< - DeploymentManagement1, +export const DeploymentPreparedStackManagement1$inboundSchema: z.ZodType< + DeploymentPreparedStackManagement1, unknown > = z.object({ extend: z.record( z.string(), - z.array( - z.union([z.lazy(() => DeploymentExtend$inboundSchema), z.string()]), - ), + z.array(z.union([ + z.lazy(() => DeploymentPreparedStackExtend$inboundSchema), + z.string(), + ])), ), }); -export function deploymentManagement1FromJSON( +export function deploymentPreparedStackManagement1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentManagement1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentManagement1' from JSON`, + (x) => + DeploymentPreparedStackManagement1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackManagement1' from JSON`, ); } /** @internal */ -export const DeploymentManagementUnion$inboundSchema: z.ZodType< - DeploymentManagementUnion, +export const DeploymentPreparedStackManagementUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackManagementUnion, unknown > = z.union([ - z.lazy(() => DeploymentManagement1$inboundSchema), - z.lazy(() => DeploymentManagement2$inboundSchema), - DeploymentManagementEnum$inboundSchema, + z.lazy(() => DeploymentPreparedStackManagement1$inboundSchema), + z.lazy(() => DeploymentPreparedStackManagement2$inboundSchema), + DeploymentPreparedStackManagementEnum$inboundSchema, ]); -export function deploymentManagementUnionFromJSON( +export function deploymentPreparedStackManagementUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentManagementUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentManagementUnion' from JSON`, + (x) => + DeploymentPreparedStackManagementUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const DeploymentProfileAwResource$inboundSchema: z.ZodType< - DeploymentProfileAwResource, +export const DeploymentPreparedStackProfileAwResource$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAwResource, unknown > = z.object({ condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) @@ -6812,19 +11132,25 @@ export const DeploymentProfileAwResource$inboundSchema: z.ZodType< resources: z.array(z.string()), }); -export function deploymentProfileAwResourceFromJSON( +export function deploymentPreparedStackProfileAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileAwResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAwResource' from JSON`, + (x) => + DeploymentPreparedStackProfileAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const DeploymentProfileAwStack$inboundSchema: z.ZodType< - DeploymentProfileAwStack, +export const DeploymentPreparedStackProfileAwStack$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAwStack, unknown > = z.object({ condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) @@ -6832,43 +11158,52 @@ export const DeploymentProfileAwStack$inboundSchema: z.ZodType< resources: z.array(z.string()), }); -export function deploymentProfileAwStackFromJSON( +export function deploymentPreparedStackProfileAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAwStack' from JSON`, + (x) => + DeploymentPreparedStackProfileAwStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const DeploymentProfileAwBinding$inboundSchema: z.ZodType< - DeploymentProfileAwBinding, +export const DeploymentPreparedStackProfileAwBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAwBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentProfileAwResource$inboundSchema).optional(), - stack: z.lazy(() => DeploymentProfileAwStack$inboundSchema).optional(), + resource: z.lazy(() => DeploymentPreparedStackProfileAwResource$inboundSchema) + .optional(), + stack: z.lazy(() => DeploymentPreparedStackProfileAwStack$inboundSchema) + .optional(), }); -export function deploymentProfileAwBindingFromJSON( +export function deploymentPreparedStackProfileAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileAwBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAwBinding' from JSON`, + (x) => + DeploymentPreparedStackProfileAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentProfileEffect$inboundSchema: z.ZodEnum< - typeof DeploymentProfileEffect -> = z.enum(DeploymentProfileEffect); +export const DeploymentPreparedStackProfileEffect$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackProfileEffect +> = z.enum(DeploymentPreparedStackProfileEffect); /** @internal */ -export const DeploymentProfileAwGrant$inboundSchema: z.ZodType< - DeploymentProfileAwGrant, +export const DeploymentPreparedStackProfileAwGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAwGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -6878,97 +11213,114 @@ export const DeploymentProfileAwGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentProfileAwGrantFromJSON( +export function deploymentPreparedStackProfileAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAwGrant' from JSON`, + (x) => + DeploymentPreparedStackProfileAwGrant$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentProfileAw$inboundSchema: z.ZodType< - DeploymentProfileAw, +export const DeploymentPreparedStackProfileAw$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAw, unknown > = z.object({ - binding: z.lazy(() => DeploymentProfileAwBinding$inboundSchema), + binding: z.lazy(() => DeploymentPreparedStackProfileAwBinding$inboundSchema), description: z.nullable(z.string()).optional(), - effect: DeploymentProfileEffect$inboundSchema.optional(), - grant: z.lazy(() => DeploymentProfileAwGrant$inboundSchema), + effect: DeploymentPreparedStackProfileEffect$inboundSchema.optional(), + grant: z.lazy(() => DeploymentPreparedStackProfileAwGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentProfileAwFromJSON( +export function deploymentPreparedStackProfileAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAw' from JSON`, + (x) => DeploymentPreparedStackProfileAw$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const DeploymentProfileAzureResource$inboundSchema: z.ZodType< - DeploymentProfileAzureResource, - unknown -> = z.object({ - scope: z.string(), -}); +export const DeploymentPreparedStackProfileAzureResource$inboundSchema: + z.ZodType = z.object({ + scope: z.string(), + }); -export function deploymentProfileAzureResourceFromJSON( +export function deploymentPreparedStackProfileAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileAzureResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAzureResource' from JSON`, + (x) => + DeploymentPreparedStackProfileAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentProfileAzureStack$inboundSchema: z.ZodType< - DeploymentProfileAzureStack, +export const DeploymentPreparedStackProfileAzureStack$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAzureStack, unknown > = z.object({ scope: z.string(), }); -export function deploymentProfileAzureStackFromJSON( +export function deploymentPreparedStackProfileAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileAzureStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAzureStack' from JSON`, + (x) => + DeploymentPreparedStackProfileAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentProfileAzureBinding$inboundSchema: z.ZodType< - DeploymentProfileAzureBinding, - unknown -> = z.object({ - resource: z.lazy(() => DeploymentProfileAzureResource$inboundSchema) - .optional(), - stack: z.lazy(() => DeploymentProfileAzureStack$inboundSchema).optional(), -}); +export const DeploymentPreparedStackProfileAzureBinding$inboundSchema: + z.ZodType = z.object({ + resource: z.lazy(() => + DeploymentPreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => DeploymentPreparedStackProfileAzureStack$inboundSchema) + .optional(), + }); -export function deploymentProfileAzureBindingFromJSON( +export function deploymentPreparedStackProfileAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileAzureBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAzureBinding' from JSON`, + (x) => + DeploymentPreparedStackProfileAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentProfileAzureGrant$inboundSchema: z.ZodType< - DeploymentProfileAzureGrant, +export const DeploymentPreparedStackProfileAzureGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAzureGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -6978,191 +11330,231 @@ export const DeploymentProfileAzureGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentProfileAzureGrantFromJSON( +export function deploymentPreparedStackProfileAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileAzureGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAzureGrant' from JSON`, + (x) => + DeploymentPreparedStackProfileAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentProfileAzure$inboundSchema: z.ZodType< - DeploymentProfileAzure, +export const DeploymentPreparedStackProfileAzure$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileAzure, unknown > = z.object({ - binding: z.lazy(() => DeploymentProfileAzureBinding$inboundSchema), + binding: z.lazy(() => + DeploymentPreparedStackProfileAzureBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentProfileAzureGrant$inboundSchema), + grant: z.lazy(() => DeploymentPreparedStackProfileAzureGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentProfileAzureFromJSON( +export function deploymentPreparedStackProfileAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileAzure' from JSON`, + (x) => + DeploymentPreparedStackProfileAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const DeploymentProfileConditionResource$inboundSchema: z.ZodType< - DeploymentProfileConditionResource, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const DeploymentPreparedStackProfileConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentProfileConditionResourceFromJSON( +export function deploymentPreparedStackProfileConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileConditionResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentProfileConditionResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileConditionResource' from JSON`, + DeploymentPreparedStackProfileConditionResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentProfileResourceConditionUnion$inboundSchema: z.ZodType< - DeploymentProfileResourceConditionUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentProfileConditionResource$inboundSchema), - z.any(), -]); +export const DeploymentPreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentProfileResourceConditionUnionFromJSON( +export function deploymentPreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentProfileResourceConditionUnion, + DeploymentPreparedStackProfileResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentProfileResourceConditionUnion$inboundSchema.parse( + DeploymentPreparedStackProfileResourceConditionUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentProfileResourceConditionUnion' from JSON`, + `Failed to parse 'DeploymentPreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentProfileGcpResource$inboundSchema: z.ZodType< - DeploymentProfileGcpResource, +export const DeploymentPreparedStackProfileGcpResource$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileGcpResource, unknown > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => DeploymentProfileConditionResource$inboundSchema), + z.lazy(() => + DeploymentPreparedStackProfileConditionResource$inboundSchema + ), z.any(), ]), ).optional(), scope: z.string(), }); -export function deploymentProfileGcpResourceFromJSON( +export function deploymentPreparedStackProfileGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileGcpResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileGcpResource' from JSON`, + (x) => + DeploymentPreparedStackProfileGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentProfileConditionStack$inboundSchema: z.ZodType< - DeploymentProfileConditionStack, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const DeploymentPreparedStackProfileConditionStack$inboundSchema: + z.ZodType = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentProfileConditionStackFromJSON( +export function deploymentPreparedStackProfileConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileConditionStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileConditionStack' from JSON`, + (x) => + DeploymentPreparedStackProfileConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentProfileStackConditionUnion$inboundSchema: z.ZodType< - DeploymentProfileStackConditionUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentProfileConditionStack$inboundSchema), - z.any(), -]); +export const DeploymentPreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentPreparedStackProfileConditionStack$inboundSchema), + z.any(), + ]); -export function deploymentProfileStackConditionUnionFromJSON( +export function deploymentPreparedStackProfileStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentProfileStackConditionUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileStackConditionUnion' from JSON`, + DeploymentPreparedStackProfileStackConditionUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentProfileGcpStack$inboundSchema: z.ZodType< - DeploymentProfileGcpStack, +export const DeploymentPreparedStackProfileGcpStack$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileGcpStack, unknown > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => DeploymentProfileConditionStack$inboundSchema), + z.lazy(() => DeploymentPreparedStackProfileConditionStack$inboundSchema), z.any(), ]), ).optional(), scope: z.string(), }); -export function deploymentProfileGcpStackFromJSON( +export function deploymentPreparedStackProfileGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileGcpStack' from JSON`, + (x) => + DeploymentPreparedStackProfileGcpStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentProfileGcpBinding$inboundSchema: z.ZodType< - DeploymentProfileGcpBinding, +export const DeploymentPreparedStackProfileGcpBinding$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileGcpBinding, unknown > = z.object({ - resource: z.lazy(() => DeploymentProfileGcpResource$inboundSchema).optional(), - stack: z.lazy(() => DeploymentProfileGcpStack$inboundSchema).optional(), + resource: z.lazy(() => + DeploymentPreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => DeploymentPreparedStackProfileGcpStack$inboundSchema) + .optional(), }); -export function deploymentProfileGcpBindingFromJSON( +export function deploymentPreparedStackProfileGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfileGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfileGcpBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileGcpBinding' from JSON`, + (x) => + DeploymentPreparedStackProfileGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentProfileGcpGrant$inboundSchema: z.ZodType< - DeploymentProfileGcpGrant, +export const DeploymentPreparedStackProfileGcpGrant$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileGcpGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -7172,124 +11564,144 @@ export const DeploymentProfileGcpGrant$inboundSchema: z.ZodType< residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentProfileGcpGrantFromJSON( +export function deploymentPreparedStackProfileGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileGcpGrant' from JSON`, + (x) => + DeploymentPreparedStackProfileGcpGrant$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentProfileGcp$inboundSchema: z.ZodType< - DeploymentProfileGcp, +export const DeploymentPreparedStackProfileGcp$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileGcp, unknown > = z.object({ - binding: z.lazy(() => DeploymentProfileGcpBinding$inboundSchema), + binding: z.lazy(() => DeploymentPreparedStackProfileGcpBinding$inboundSchema), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentProfileGcpGrant$inboundSchema), + grant: z.lazy(() => DeploymentPreparedStackProfileGcpGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function deploymentProfileGcpFromJSON( +export function deploymentPreparedStackProfileGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileGcp' from JSON`, + (x) => DeploymentPreparedStackProfileGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const DeploymentProfilePlatforms$inboundSchema: z.ZodType< - DeploymentProfilePlatforms, +export const DeploymentPreparedStackProfilePlatforms$inboundSchema: z.ZodType< + DeploymentPreparedStackProfilePlatforms, unknown > = z.object({ - aws: z.nullable(z.array(z.lazy(() => DeploymentProfileAw$inboundSchema))) - .optional(), - azure: z.nullable(z.array(z.lazy(() => DeploymentProfileAzure$inboundSchema))) - .optional(), - gcp: z.nullable(z.array(z.lazy(() => DeploymentProfileGcp$inboundSchema))) - .optional(), + aws: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackProfileAw$inboundSchema)), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackProfileAzure$inboundSchema)), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => DeploymentPreparedStackProfileGcp$inboundSchema)), + ).optional(), }); -export function deploymentProfilePlatformsFromJSON( +export function deploymentPreparedStackProfilePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentPreparedStackProfilePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentProfilePlatforms$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfilePlatforms' from JSON`, + (x) => + DeploymentPreparedStackProfilePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentPreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentProfile$inboundSchema: z.ZodType< - DeploymentProfile, +export const DeploymentPreparedStackProfile$inboundSchema: z.ZodType< + DeploymentPreparedStackProfile, unknown > = z.object({ description: z.string(), id: z.string(), - platforms: z.lazy(() => DeploymentProfilePlatforms$inboundSchema), + platforms: z.lazy(() => + DeploymentPreparedStackProfilePlatforms$inboundSchema + ), }); -export function deploymentProfileFromJSON( +export function deploymentPreparedStackProfileFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfile$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfile' from JSON`, + (x) => DeploymentPreparedStackProfile$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfile' from JSON`, ); } /** @internal */ -export const DeploymentProfileUnion$inboundSchema: z.ZodType< - DeploymentProfileUnion, +export const DeploymentPreparedStackProfileUnion$inboundSchema: z.ZodType< + DeploymentPreparedStackProfileUnion, unknown -> = z.union([z.lazy(() => DeploymentProfile$inboundSchema), z.string()]); +> = z.union([ + z.lazy(() => DeploymentPreparedStackProfile$inboundSchema), + z.string(), +]); -export function deploymentProfileUnionFromJSON( +export function deploymentPreparedStackProfileUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentProfileUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentProfileUnion' from JSON`, + (x) => + DeploymentPreparedStackProfileUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const DeploymentPermissions$inboundSchema: z.ZodType< - DeploymentPermissions, +export const DeploymentPreparedStackPermissions$inboundSchema: z.ZodType< + DeploymentPreparedStackPermissions, unknown > = z.object({ management: z.union([ - z.lazy(() => DeploymentManagement1$inboundSchema), - z.lazy(() => DeploymentManagement2$inboundSchema), - DeploymentManagementEnum$inboundSchema, + z.lazy(() => DeploymentPreparedStackManagement1$inboundSchema), + z.lazy(() => DeploymentPreparedStackManagement2$inboundSchema), + DeploymentPreparedStackManagementEnum$inboundSchema, ]).optional(), profiles: z.record( z.string(), z.record( z.string(), z.array( - z.union([z.lazy(() => DeploymentProfile$inboundSchema), z.string()]), + z.union([ + z.lazy(() => DeploymentPreparedStackProfile$inboundSchema), + z.string(), + ]), ), ), ), }); -export function deploymentPermissionsFromJSON( +export function deploymentPreparedStackPermissionsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DeploymentPermissions$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentPermissions' from JSON`, + (x) => + DeploymentPreparedStackPermissions$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentPreparedStackPermissions' from JSON`, ); } @@ -7349,6 +11761,7 @@ export const DeploymentPreparedStackResources$inboundSchema: z.ZodType< dependencies: z.array( z.lazy(() => DeploymentPreparedStackDependency$inboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: DeploymentPreparedStackLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }); @@ -7364,9 +11777,9 @@ export function deploymentPreparedStackResourcesFromJSON( } /** @internal */ -export const DeploymentSupportedPlatform$inboundSchema: z.ZodEnum< - typeof DeploymentSupportedPlatform -> = z.enum(DeploymentSupportedPlatform); +export const DeploymentPreparedStackSupportedPlatform$inboundSchema: z.ZodEnum< + typeof DeploymentPreparedStackSupportedPlatform +> = z.enum(DeploymentPreparedStackSupportedPlatform); /** @internal */ export const DeploymentPreparedStack$inboundSchema: z.ZodType< @@ -7374,14 +11787,16 @@ export const DeploymentPreparedStack$inboundSchema: z.ZodType< unknown > = z.object({ id: z.string(), - inputs: z.array(z.lazy(() => DeploymentInput$inboundSchema)).optional(), - permissions: z.lazy(() => DeploymentPermissions$inboundSchema).optional(), + inputs: z.array(z.lazy(() => DeploymentPreparedStackInput$inboundSchema)) + .optional(), + permissions: z.lazy(() => DeploymentPreparedStackPermissions$inboundSchema) + .optional(), resources: z.record( z.string(), z.lazy(() => DeploymentPreparedStackResources$inboundSchema), ), supportedPlatforms: z.nullable( - z.array(DeploymentSupportedPlatform$inboundSchema), + z.array(DeploymentPreparedStackSupportedPlatform$inboundSchema), ).optional(), }); @@ -7411,6 +11826,56 @@ export function deploymentPreparedStackUnionFromJSON( ); } +/** @internal */ +export const DeploymentSetupUpdateAuthorization$inboundSchema: z.ZodType< + DeploymentSetupUpdateAuthorization, + unknown +> = z.object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), +}); + +export function deploymentSetupUpdateAuthorizationFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentSetupUpdateAuthorization$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentSetupUpdateAuthorization' from JSON`, + ); +} + +/** @internal */ +export const DeploymentSetupUpdateAuthorizationUnion$inboundSchema: z.ZodType< + DeploymentSetupUpdateAuthorizationUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentSetupUpdateAuthorization$inboundSchema), + z.any(), +]); + +export function deploymentSetupUpdateAuthorizationUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentSetupUpdateAuthorizationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentSetupUpdateAuthorizationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentSetupUpdateAuthorizationUnion' from JSON`, + ); +} + /** @internal */ export const DeploymentRuntimeMetadata$inboundSchema: z.ZodType< DeploymentRuntimeMetadata, @@ -7418,10 +11883,22 @@ export const DeploymentRuntimeMetadata$inboundSchema: z.ZodType< > = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => DeploymentPendingPreparedStack$inboundSchema), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([z.lazy(() => DeploymentPreparedStack$inboundSchema), z.any()]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => DeploymentSetupUpdateAuthorization$inboundSchema), + z.any(), + ]), + ).optional(), }); export function deploymentRuntimeMetadataFromJSON( diff --git a/client-sdks/platform/typescript/src/models/deploymentconnectioninfo.ts b/client-sdks/platform/typescript/src/models/deploymentconnectioninfo.ts index ac3c0dd3e..7b04b32ed 100644 --- a/client-sdks/platform/typescript/src/models/deploymentconnectioninfo.ts +++ b/client-sdks/platform/typescript/src/models/deploymentconnectioninfo.ts @@ -19,9 +19,17 @@ export type Arc = { deploymentId: string; }; +export const Protocol = { + Http: "http", + Tcp: "tcp", +} as const; +export type Protocol = ClosedEnum; + export type PublicEndpoints = { url: string; - host?: string | undefined; + protocol: Protocol; + host: string; + port: number; wildcardHost?: string | undefined; }; @@ -114,13 +122,20 @@ export function arcFromJSON( ); } +/** @internal */ +export const Protocol$inboundSchema: z.ZodEnum = z.enum( + Protocol, +); + /** @internal */ export const PublicEndpoints$inboundSchema: z.ZodType< PublicEndpoints, unknown > = z.object({ url: z.string(), - host: z.string().optional(), + protocol: Protocol$inboundSchema, + host: z.string(), + port: z.int(), wildcardHost: z.string().optional(), }); diff --git a/client-sdks/platform/typescript/src/models/deploymentdetailresponse.ts b/client-sdks/platform/typescript/src/models/deploymentdetailresponse.ts index 1f9d107e8..bf98e4c32 100644 --- a/client-sdks/platform/typescript/src/models/deploymentdetailresponse.ts +++ b/client-sdks/platform/typescript/src/models/deploymentdetailresponse.ts @@ -238,7 +238,33 @@ export type DeploymentDetailResponseEnvironmentInfoUnion = | DeploymentDetailResponseEnvironmentInfoTest | any; +/** + * Failure-domain policy selected for a compute pool. + */ +export type DeploymentDetailResponseFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type DeploymentDetailResponseFailureDomainsUnion2 = + | DeploymentDetailResponseFailureDomains2 + | any; + export type DeploymentDetailResponsePoolsAutoscale = { + failureDomains?: + | DeploymentDetailResponseFailureDomains2 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -254,7 +280,33 @@ export type DeploymentDetailResponsePoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type DeploymentDetailResponseFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type DeploymentDetailResponseFailureDomainsUnion1 = + | DeploymentDetailResponseFailureDomains1 + | any; + export type DeploymentDetailResponsePoolsFixed = { + failureDomains?: + | DeploymentDetailResponseFailureDomains1 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -1708,95 +1760,92 @@ export type DeploymentDetailResponseStackState = { resources: { [k: string]: DeploymentDetailResponseStackStateResources }; }; -export const DeploymentDetailResponseTypeStringList = { +export const DeploymentDetailResponsePendingPreparedStackTypeStringList = { StringList: "stringList", } as const; -export type DeploymentDetailResponseTypeStringList = ClosedEnum< - typeof DeploymentDetailResponseTypeStringList ->; +export type DeploymentDetailResponsePendingPreparedStackTypeStringList = + ClosedEnum; -export type DeploymentDetailResponseDefaultStringList = { - type: DeploymentDetailResponseTypeStringList; +export type DeploymentDetailResponsePendingPreparedStackDefaultStringList = { + type: DeploymentDetailResponsePendingPreparedStackTypeStringList; /** * String list default. */ value: Array; }; -export const DeploymentDetailResponseTypeBoolean = { +export const DeploymentDetailResponsePendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type DeploymentDetailResponseTypeBoolean = ClosedEnum< - typeof DeploymentDetailResponseTypeBoolean ->; +export type DeploymentDetailResponsePendingPreparedStackTypeBoolean = + ClosedEnum; -export type DeploymentDetailResponseDefaultBoolean = { - type: DeploymentDetailResponseTypeBoolean; +export type DeploymentDetailResponsePendingPreparedStackDefaultBoolean = { + type: DeploymentDetailResponsePendingPreparedStackTypeBoolean; /** * Boolean default. */ value: boolean; }; -export const DeploymentDetailResponseTypeNumber = { +export const DeploymentDetailResponsePendingPreparedStackTypeNumber = { Number: "number", } as const; -export type DeploymentDetailResponseTypeNumber = ClosedEnum< - typeof DeploymentDetailResponseTypeNumber +export type DeploymentDetailResponsePendingPreparedStackTypeNumber = ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackTypeNumber >; -export type DeploymentDetailResponseDefaultNumber = { - type: DeploymentDetailResponseTypeNumber; +export type DeploymentDetailResponsePendingPreparedStackDefaultNumber = { + type: DeploymentDetailResponsePendingPreparedStackTypeNumber; /** * Number default. */ value: string; }; -export const DeploymentDetailResponseTypeString = { +export const DeploymentDetailResponsePendingPreparedStackTypeString = { String: "string", } as const; -export type DeploymentDetailResponseTypeString = ClosedEnum< - typeof DeploymentDetailResponseTypeString +export type DeploymentDetailResponsePendingPreparedStackTypeString = ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackTypeString >; -export type DeploymentDetailResponseDefaultString = { - type: DeploymentDetailResponseTypeString; +export type DeploymentDetailResponsePendingPreparedStackDefaultString = { + type: DeploymentDetailResponsePendingPreparedStackTypeString; /** * String default. */ value: string; }; -export type DeploymentDetailResponseDefaultUnion = - | DeploymentDetailResponseDefaultString - | DeploymentDetailResponseDefaultNumber - | DeploymentDetailResponseDefaultBoolean - | DeploymentDetailResponseDefaultStringList +export type DeploymentDetailResponsePendingPreparedStackDefaultUnion = + | DeploymentDetailResponsePendingPreparedStackDefaultString + | DeploymentDetailResponsePendingPreparedStackDefaultNumber + | DeploymentDetailResponsePendingPreparedStackDefaultBoolean + | DeploymentDetailResponsePendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const DeploymentDetailResponseTypeEnvEnum = { +export const DeploymentDetailResponsePendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type DeploymentDetailResponseTypeEnvEnum = ClosedEnum< - typeof DeploymentDetailResponseTypeEnvEnum ->; +export type DeploymentDetailResponsePendingPreparedStackTypeEnvEnum = + ClosedEnum; -export type DeploymentDetailResponseTypeUnion = - | DeploymentDetailResponseTypeEnvEnum +export type DeploymentDetailResponsePendingPreparedStackTypeUnion = + | DeploymentDetailResponsePendingPreparedStackTypeEnvEnum | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type DeploymentDetailResponseEnv = { +export type DeploymentDetailResponsePendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1805,13 +1854,17 @@ export type DeploymentDetailResponseEnv = { * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: DeploymentDetailResponseTypeEnvEnum | any | null | undefined; + type?: + | DeploymentDetailResponsePendingPreparedStackTypeEnvEnum + | any + | null + | undefined; }; /** * Primitive stack input kind. */ -export const DeploymentDetailResponseKind = { +export const DeploymentDetailResponsePendingPreparedStackKind = { String: "string", Secret: "secret", Number: "number", @@ -1823,14 +1876,14 @@ export const DeploymentDetailResponseKind = { /** * Primitive stack input kind. */ -export type DeploymentDetailResponseKind = ClosedEnum< - typeof DeploymentDetailResponseKind +export type DeploymentDetailResponsePendingPreparedStackKind = ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackKind >; /** * Represents the target cloud platform. */ -export const DeploymentDetailResponsePreparedStackPlatform = { +export const DeploymentDetailResponsePendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1842,28 +1895,28 @@ export const DeploymentDetailResponsePreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type DeploymentDetailResponsePreparedStackPlatform = ClosedEnum< - typeof DeploymentDetailResponsePreparedStackPlatform +export type DeploymentDetailResponsePendingPreparedStackPlatform = ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackPlatform >; /** * Who can provide a stack input value. */ -export const DeploymentDetailResponseProvidedBy = { +export const DeploymentDetailResponsePendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type DeploymentDetailResponseProvidedBy = ClosedEnum< - typeof DeploymentDetailResponseProvidedBy +export type DeploymentDetailResponsePendingPreparedStackProvidedBy = ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackProvidedBy >; /** * Portable stack input validation constraints. */ -export type DeploymentDetailResponseValidation = { +export type DeploymentDetailResponsePendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -1902,19 +1955,19 @@ export type DeploymentDetailResponseValidation = { values?: Array | null | undefined; }; -export type DeploymentDetailResponseValidationUnion = - | DeploymentDetailResponseValidation +export type DeploymentDetailResponsePendingPreparedStackValidationUnion = + | DeploymentDetailResponsePendingPreparedStackValidation | any; /** * Stack input definition serialized into a release stack. */ -export type DeploymentDetailResponseInput = { +export type DeploymentDetailResponsePendingPreparedStackInput = { default?: - | DeploymentDetailResponseDefaultString - | DeploymentDetailResponseDefaultNumber - | DeploymentDetailResponseDefaultBoolean - | DeploymentDetailResponseDefaultStringList + | DeploymentDetailResponsePendingPreparedStackDefaultString + | DeploymentDetailResponsePendingPreparedStackDefaultNumber + | DeploymentDetailResponsePendingPreparedStackDefaultBoolean + | DeploymentDetailResponsePendingPreparedStackDefaultStringList | any | null | undefined; @@ -1925,7 +1978,7 @@ export type DeploymentDetailResponseInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -1933,7 +1986,7 @@ export type DeploymentDetailResponseInput = { /** * Primitive stack input kind. */ - kind: DeploymentDetailResponseKind; + kind: DeploymentDetailResponsePendingPreparedStackKind; /** * Human-facing field label. */ @@ -1946,31 +1999,34 @@ export type DeploymentDetailResponseInput = { * Platforms where this input applies. */ platforms?: - | Array + | Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; - validation?: DeploymentDetailResponseValidation | any | null | undefined; + validation?: + | DeploymentDetailResponsePendingPreparedStackValidation + | any + | null + | undefined; }; -export const DeploymentDetailResponseManagementEnum = { +export const DeploymentDetailResponsePendingPreparedStackManagementEnum = { Auto: "auto", } as const; -export type DeploymentDetailResponseManagementEnum = ClosedEnum< - typeof DeploymentDetailResponseManagementEnum ->; +export type DeploymentDetailResponsePendingPreparedStackManagementEnum = + ClosedEnum; /** * AWS-specific binding specification */ -export type DeploymentDetailResponseOverrideAwResource = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -1984,7 +2040,7 @@ export type DeploymentDetailResponseOverrideAwResource = { /** * AWS-specific binding specification */ -export type DeploymentDetailResponseOverrideAwStack = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -1998,35 +2054,38 @@ export type DeploymentDetailResponseOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseOverrideAwBinding = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAwBinding = { /** * AWS-specific binding specification */ - resource?: DeploymentDetailResponseOverrideAwResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackOverrideAwResource + | undefined; /** * AWS-specific binding specification */ - stack?: DeploymentDetailResponseOverrideAwStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackOverrideAwStack + | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const DeploymentDetailResponseOverrideEffect = { +export const DeploymentDetailResponsePendingPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type DeploymentDetailResponseOverrideEffect = ClosedEnum< - typeof DeploymentDetailResponseOverrideEffect ->; +export type DeploymentDetailResponsePendingPreparedStackOverrideEffect = + ClosedEnum; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseOverrideAwGrant = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2052,11 +2111,11 @@ export type DeploymentDetailResponseOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type DeploymentDetailResponseOverrideAw = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseOverrideAwBinding; + binding: DeploymentDetailResponsePendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2064,11 +2123,13 @@ export type DeploymentDetailResponseOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: DeploymentDetailResponseOverrideEffect | undefined; + effect?: + | DeploymentDetailResponsePendingPreparedStackOverrideEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseOverrideAwGrant; + grant: DeploymentDetailResponsePendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2078,17 +2139,18 @@ export type DeploymentDetailResponseOverrideAw = { /** * Azure-specific binding specification */ -export type DeploymentDetailResponseOverrideAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type DeploymentDetailResponsePendingPreparedStackOverrideAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type DeploymentDetailResponseOverrideAzureStack = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2098,21 +2160,25 @@ export type DeploymentDetailResponseOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseOverrideAzureBinding = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding = { /** * Azure-specific binding specification */ - resource?: DeploymentDetailResponseOverrideAzureResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackOverrideAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: DeploymentDetailResponseOverrideAzureStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackOverrideAzureStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseOverrideAzureGrant = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2138,11 +2204,11 @@ export type DeploymentDetailResponseOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type DeploymentDetailResponseOverrideAzure = { +export type DeploymentDetailResponsePendingPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseOverrideAzureBinding; + binding: DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2150,7 +2216,7 @@ export type DeploymentDetailResponseOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseOverrideAzureGrant; + grant: DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2160,21 +2226,22 @@ export type DeploymentDetailResponseOverrideAzure = { /** * GCP IAM condition */ -export type DeploymentDetailResponseOverrideConditionResource = { - expression: string; - title: string; -}; +export type DeploymentDetailResponsePendingPreparedStackOverrideConditionResource = + { + expression: string; + title: string; + }; -export type DeploymentDetailResponseOverrideResourceConditionUnion = - | DeploymentDetailResponseOverrideConditionResource +export type DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion = + | DeploymentDetailResponsePendingPreparedStackOverrideConditionResource | any; /** * GCP-specific binding specification */ -export type DeploymentDetailResponseOverrideGcpResource = { +export type DeploymentDetailResponsePendingPreparedStackOverrideGcpResource = { condition?: - | DeploymentDetailResponseOverrideConditionResource + | DeploymentDetailResponsePendingPreparedStackOverrideConditionResource | any | null | undefined; @@ -2187,21 +2254,22 @@ export type DeploymentDetailResponseOverrideGcpResource = { /** * GCP IAM condition */ -export type DeploymentDetailResponseOverrideConditionStack = { - expression: string; - title: string; -}; +export type DeploymentDetailResponsePendingPreparedStackOverrideConditionStack = + { + expression: string; + title: string; + }; -export type DeploymentDetailResponseOverrideStackConditionUnion = - | DeploymentDetailResponseOverrideConditionStack +export type DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion = + | DeploymentDetailResponsePendingPreparedStackOverrideConditionStack | any; /** * GCP-specific binding specification */ -export type DeploymentDetailResponseOverrideGcpStack = { +export type DeploymentDetailResponsePendingPreparedStackOverrideGcpStack = { condition?: - | DeploymentDetailResponseOverrideConditionStack + | DeploymentDetailResponsePendingPreparedStackOverrideConditionStack | any | null | undefined; @@ -2214,21 +2282,25 @@ export type DeploymentDetailResponseOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseOverrideGcpBinding = { +export type DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding = { /** * GCP-specific binding specification */ - resource?: DeploymentDetailResponseOverrideGcpResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackOverrideGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: DeploymentDetailResponseOverrideGcpStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackOverrideGcpStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseOverrideGcpGrant = { +export type DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2254,11 +2326,11 @@ export type DeploymentDetailResponseOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type DeploymentDetailResponseOverrideGcp = { +export type DeploymentDetailResponsePendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseOverrideGcpBinding; + binding: DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2266,7 +2338,7 @@ export type DeploymentDetailResponseOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseOverrideGcpGrant; + grant: DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2276,25 +2348,34 @@ export type DeploymentDetailResponseOverrideGcp = { /** * Platform-specific permission configurations */ -export type DeploymentDetailResponseOverridePlatforms = { +export type DeploymentDetailResponsePendingPreparedStackOverridePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: + | Array + | null + | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type DeploymentDetailResponseOverride = { +export type DeploymentDetailResponsePendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -2306,30 +2387,34 @@ export type DeploymentDetailResponseOverride = { /** * Platform-specific permission configurations */ - platforms: DeploymentDetailResponseOverridePlatforms; + platforms: DeploymentDetailResponsePendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type DeploymentDetailResponseOverrideUnion = - | DeploymentDetailResponseOverride +export type DeploymentDetailResponsePendingPreparedStackOverrideUnion = + | DeploymentDetailResponsePendingPreparedStackOverride | string; -export type DeploymentDetailResponseManagement2 = { +export type DeploymentDetailResponsePendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - override: { [k: string]: Array }; + override: { + [k: string]: Array< + DeploymentDetailResponsePendingPreparedStackOverride | string + >; + }; }; /** * AWS-specific binding specification */ -export type DeploymentDetailResponseExtendAwResource = { +export type DeploymentDetailResponsePendingPreparedStackExtendAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2343,7 +2428,7 @@ export type DeploymentDetailResponseExtendAwResource = { /** * AWS-specific binding specification */ -export type DeploymentDetailResponseExtendAwStack = { +export type DeploymentDetailResponsePendingPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2357,35 +2442,36 @@ export type DeploymentDetailResponseExtendAwStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseExtendAwBinding = { +export type DeploymentDetailResponsePendingPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: DeploymentDetailResponseExtendAwResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackExtendAwResource + | undefined; /** * AWS-specific binding specification */ - stack?: DeploymentDetailResponseExtendAwStack | undefined; + stack?: DeploymentDetailResponsePendingPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const DeploymentDetailResponseExtendEffect = { +export const DeploymentDetailResponsePendingPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type DeploymentDetailResponseExtendEffect = ClosedEnum< - typeof DeploymentDetailResponseExtendEffect ->; +export type DeploymentDetailResponsePendingPreparedStackExtendEffect = + ClosedEnum; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseExtendAwGrant = { +export type DeploymentDetailResponsePendingPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2411,11 +2497,11 @@ export type DeploymentDetailResponseExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type DeploymentDetailResponseExtendAw = { +export type DeploymentDetailResponsePendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseExtendAwBinding; + binding: DeploymentDetailResponsePendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2423,11 +2509,11 @@ export type DeploymentDetailResponseExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: DeploymentDetailResponseExtendEffect | undefined; + effect?: DeploymentDetailResponsePendingPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseExtendAwGrant; + grant: DeploymentDetailResponsePendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2437,7 +2523,7 @@ export type DeploymentDetailResponseExtendAw = { /** * Azure-specific binding specification */ -export type DeploymentDetailResponseExtendAzureResource = { +export type DeploymentDetailResponsePendingPreparedStackExtendAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2447,7 +2533,7 @@ export type DeploymentDetailResponseExtendAzureResource = { /** * Azure-specific binding specification */ -export type DeploymentDetailResponseExtendAzureStack = { +export type DeploymentDetailResponsePendingPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2457,21 +2543,25 @@ export type DeploymentDetailResponseExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseExtendAzureBinding = { +export type DeploymentDetailResponsePendingPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: DeploymentDetailResponseExtendAzureResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackExtendAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: DeploymentDetailResponseExtendAzureStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackExtendAzureStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseExtendAzureGrant = { +export type DeploymentDetailResponsePendingPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2497,11 +2587,11 @@ export type DeploymentDetailResponseExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type DeploymentDetailResponseExtendAzure = { +export type DeploymentDetailResponsePendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseExtendAzureBinding; + binding: DeploymentDetailResponsePendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2509,7 +2599,7 @@ export type DeploymentDetailResponseExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseExtendAzureGrant; + grant: DeploymentDetailResponsePendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2519,21 +2609,22 @@ export type DeploymentDetailResponseExtendAzure = { /** * GCP IAM condition */ -export type DeploymentDetailResponseExtendConditionResource = { - expression: string; - title: string; -}; +export type DeploymentDetailResponsePendingPreparedStackExtendConditionResource = + { + expression: string; + title: string; + }; -export type DeploymentDetailResponseExtendResourceConditionUnion = - | DeploymentDetailResponseExtendConditionResource +export type DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion = + | DeploymentDetailResponsePendingPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type DeploymentDetailResponseExtendGcpResource = { +export type DeploymentDetailResponsePendingPreparedStackExtendGcpResource = { condition?: - | DeploymentDetailResponseExtendConditionResource + | DeploymentDetailResponsePendingPreparedStackExtendConditionResource | any | null | undefined; @@ -2546,21 +2637,21 @@ export type DeploymentDetailResponseExtendGcpResource = { /** * GCP IAM condition */ -export type DeploymentDetailResponseExtendConditionStack = { +export type DeploymentDetailResponsePendingPreparedStackExtendConditionStack = { expression: string; title: string; }; -export type DeploymentDetailResponseExtendStackConditionUnion = - | DeploymentDetailResponseExtendConditionStack +export type DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion = + | DeploymentDetailResponsePendingPreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type DeploymentDetailResponseExtendGcpStack = { +export type DeploymentDetailResponsePendingPreparedStackExtendGcpStack = { condition?: - | DeploymentDetailResponseExtendConditionStack + | DeploymentDetailResponsePendingPreparedStackExtendConditionStack | any | null | undefined; @@ -2573,21 +2664,25 @@ export type DeploymentDetailResponseExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseExtendGcpBinding = { +export type DeploymentDetailResponsePendingPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: DeploymentDetailResponseExtendGcpResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackExtendGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: DeploymentDetailResponseExtendGcpStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackExtendGcpStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseExtendGcpGrant = { +export type DeploymentDetailResponsePendingPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2613,11 +2708,11 @@ export type DeploymentDetailResponseExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type DeploymentDetailResponseExtendGcp = { +export type DeploymentDetailResponsePendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseExtendGcpBinding; + binding: DeploymentDetailResponsePendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2625,7 +2720,7 @@ export type DeploymentDetailResponseExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseExtendGcpGrant; + grant: DeploymentDetailResponsePendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2635,25 +2730,34 @@ export type DeploymentDetailResponseExtendGcp = { /** * Platform-specific permission configurations */ -export type DeploymentDetailResponseExtendPlatforms = { +export type DeploymentDetailResponsePendingPreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: + | Array + | null + | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type DeploymentDetailResponseExtend = { +export type DeploymentDetailResponsePendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -2665,38 +2769,42 @@ export type DeploymentDetailResponseExtend = { /** * Platform-specific permission configurations */ - platforms: DeploymentDetailResponseExtendPlatforms; + platforms: DeploymentDetailResponsePendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type DeploymentDetailResponseExtendUnion = - | DeploymentDetailResponseExtend +export type DeploymentDetailResponsePendingPreparedStackExtendUnion = + | DeploymentDetailResponsePendingPreparedStackExtend | string; -export type DeploymentDetailResponseManagement1 = { +export type DeploymentDetailResponsePendingPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - extend: { [k: string]: Array }; + extend: { + [k: string]: Array< + DeploymentDetailResponsePendingPreparedStackExtend | string + >; + }; }; /** * Management permissions configuration for stack management access */ -export type DeploymentDetailResponseManagementUnion = - | DeploymentDetailResponseManagement1 - | DeploymentDetailResponseManagement2 - | DeploymentDetailResponseManagementEnum; +export type DeploymentDetailResponsePendingPreparedStackManagementUnion = + | DeploymentDetailResponsePendingPreparedStackManagement1 + | DeploymentDetailResponsePendingPreparedStackManagement2 + | DeploymentDetailResponsePendingPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type DeploymentDetailResponseProfileAwResource = { +export type DeploymentDetailResponsePendingPreparedStackProfileAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2710,7 +2818,7 @@ export type DeploymentDetailResponseProfileAwResource = { /** * AWS-specific binding specification */ -export type DeploymentDetailResponseProfileAwStack = { +export type DeploymentDetailResponsePendingPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2724,35 +2832,38 @@ export type DeploymentDetailResponseProfileAwStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseProfileAwBinding = { +export type DeploymentDetailResponsePendingPreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ - resource?: DeploymentDetailResponseProfileAwResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackProfileAwResource + | undefined; /** * AWS-specific binding specification */ - stack?: DeploymentDetailResponseProfileAwStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackProfileAwStack + | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const DeploymentDetailResponseProfileEffect = { +export const DeploymentDetailResponsePendingPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type DeploymentDetailResponseProfileEffect = ClosedEnum< - typeof DeploymentDetailResponseProfileEffect ->; +export type DeploymentDetailResponsePendingPreparedStackProfileEffect = + ClosedEnum; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseProfileAwGrant = { +export type DeploymentDetailResponsePendingPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2778,11 +2889,11 @@ export type DeploymentDetailResponseProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type DeploymentDetailResponseProfileAw = { +export type DeploymentDetailResponsePendingPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseProfileAwBinding; + binding: DeploymentDetailResponsePendingPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2790,11 +2901,13 @@ export type DeploymentDetailResponseProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: DeploymentDetailResponseProfileEffect | undefined; + effect?: + | DeploymentDetailResponsePendingPreparedStackProfileEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseProfileAwGrant; + grant: DeploymentDetailResponsePendingPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2804,7 +2917,7 @@ export type DeploymentDetailResponseProfileAw = { /** * Azure-specific binding specification */ -export type DeploymentDetailResponseProfileAzureResource = { +export type DeploymentDetailResponsePendingPreparedStackProfileAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2814,7 +2927,7 @@ export type DeploymentDetailResponseProfileAzureResource = { /** * Azure-specific binding specification */ -export type DeploymentDetailResponseProfileAzureStack = { +export type DeploymentDetailResponsePendingPreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2824,21 +2937,25 @@ export type DeploymentDetailResponseProfileAzureStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseProfileAzureBinding = { +export type DeploymentDetailResponsePendingPreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ - resource?: DeploymentDetailResponseProfileAzureResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackProfileAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: DeploymentDetailResponseProfileAzureStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackProfileAzureStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseProfileAzureGrant = { +export type DeploymentDetailResponsePendingPreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2864,11 +2981,11 @@ export type DeploymentDetailResponseProfileAzureGrant = { /** * Azure-specific platform permission configuration */ -export type DeploymentDetailResponseProfileAzure = { +export type DeploymentDetailResponsePendingPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseProfileAzureBinding; + binding: DeploymentDetailResponsePendingPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2876,7 +2993,7 @@ export type DeploymentDetailResponseProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseProfileAzureGrant; + grant: DeploymentDetailResponsePendingPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2886,21 +3003,22 @@ export type DeploymentDetailResponseProfileAzure = { /** * GCP IAM condition */ -export type DeploymentDetailResponseProfileConditionResource = { - expression: string; - title: string; -}; +export type DeploymentDetailResponsePendingPreparedStackProfileConditionResource = + { + expression: string; + title: string; + }; -export type DeploymentDetailResponseProfileResourceConditionUnion = - | DeploymentDetailResponseProfileConditionResource +export type DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion = + | DeploymentDetailResponsePendingPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type DeploymentDetailResponseProfileGcpResource = { +export type DeploymentDetailResponsePendingPreparedStackProfileGcpResource = { condition?: - | DeploymentDetailResponseProfileConditionResource + | DeploymentDetailResponsePendingPreparedStackProfileConditionResource | any | null | undefined; @@ -2913,21 +3031,22 @@ export type DeploymentDetailResponseProfileGcpResource = { /** * GCP IAM condition */ -export type DeploymentDetailResponseProfileConditionStack = { - expression: string; - title: string; -}; +export type DeploymentDetailResponsePendingPreparedStackProfileConditionStack = + { + expression: string; + title: string; + }; -export type DeploymentDetailResponseProfileStackConditionUnion = - | DeploymentDetailResponseProfileConditionStack +export type DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion = + | DeploymentDetailResponsePendingPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type DeploymentDetailResponseProfileGcpStack = { +export type DeploymentDetailResponsePendingPreparedStackProfileGcpStack = { condition?: - | DeploymentDetailResponseProfileConditionStack + | DeploymentDetailResponsePendingPreparedStackProfileConditionStack | any | null | undefined; @@ -2940,21 +3059,25 @@ export type DeploymentDetailResponseProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type DeploymentDetailResponseProfileGcpBinding = { +export type DeploymentDetailResponsePendingPreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ - resource?: DeploymentDetailResponseProfileGcpResource | undefined; + resource?: + | DeploymentDetailResponsePendingPreparedStackProfileGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: DeploymentDetailResponseProfileGcpStack | undefined; + stack?: + | DeploymentDetailResponsePendingPreparedStackProfileGcpStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type DeploymentDetailResponseProfileGcpGrant = { +export type DeploymentDetailResponsePendingPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2980,11 +3103,11 @@ export type DeploymentDetailResponseProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type DeploymentDetailResponseProfileGcp = { +export type DeploymentDetailResponsePendingPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: DeploymentDetailResponseProfileGcpBinding; + binding: DeploymentDetailResponsePendingPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2992,7 +3115,7 @@ export type DeploymentDetailResponseProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: DeploymentDetailResponseProfileGcpGrant; + grant: DeploymentDetailResponsePendingPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -3002,25 +3125,34 @@ export type DeploymentDetailResponseProfileGcp = { /** * Platform-specific permission configurations */ -export type DeploymentDetailResponseProfilePlatforms = { +export type DeploymentDetailResponsePendingPreparedStackProfilePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: + | Array + | null + | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type DeploymentDetailResponseProfile = { +export type DeploymentDetailResponsePendingPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -3032,27 +3164,27 @@ export type DeploymentDetailResponseProfile = { /** * Platform-specific permission configurations */ - platforms: DeploymentDetailResponseProfilePlatforms; + platforms: DeploymentDetailResponsePendingPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type DeploymentDetailResponseProfileUnion = - | DeploymentDetailResponseProfile +export type DeploymentDetailResponsePendingPreparedStackProfileUnion = + | DeploymentDetailResponsePendingPreparedStackProfile | string; /** * Combined permissions configuration that contains both profiles and management */ -export type DeploymentDetailResponsePermissions = { +export type DeploymentDetailResponsePendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | DeploymentDetailResponseManagement1 - | DeploymentDetailResponseManagement2 - | DeploymentDetailResponseManagementEnum + | DeploymentDetailResponsePendingPreparedStackManagement1 + | DeploymentDetailResponsePendingPreparedStackManagement2 + | DeploymentDetailResponsePendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -3062,7 +3194,9 @@ export type DeploymentDetailResponsePermissions = { */ profiles: { [k: string]: { - [k: string]: Array; + [k: string]: Array< + DeploymentDetailResponsePendingPreparedStackProfile | string + >; }; }; }; @@ -3070,7 +3204,7 @@ export type DeploymentDetailResponsePermissions = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type DeploymentDetailResponsePreparedStackConfig = { +export type DeploymentDetailResponsePendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -3085,7 +3219,7 @@ export type DeploymentDetailResponsePreparedStackConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type DeploymentDetailResponsePreparedStackDependency = { +export type DeploymentDetailResponsePendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -3096,33 +3230,44 @@ export type DeploymentDetailResponsePreparedStackDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const DeploymentDetailResponsePreparedStackLifecycle = { +export const DeploymentDetailResponsePendingPreparedStackLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type DeploymentDetailResponsePreparedStackLifecycle = ClosedEnum< - typeof DeploymentDetailResponsePreparedStackLifecycle +export type DeploymentDetailResponsePendingPreparedStackLifecycle = ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackLifecycle >; -export type DeploymentDetailResponsePreparedStackResources = { +export type DeploymentDetailResponsePendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: DeploymentDetailResponsePreparedStackConfig; + config: DeploymentDetailResponsePendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: DeploymentDetailResponsePreparedStackLifecycle; + lifecycle: DeploymentDetailResponsePendingPreparedStackLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -3136,7 +3281,7 @@ export type DeploymentDetailResponsePreparedStackResources = { /** * Represents the target cloud platform. */ -export const DeploymentDetailResponseSupportedPlatform = { +export const DeploymentDetailResponsePendingPreparedStackSupportedPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3148,14 +3293,15 @@ export const DeploymentDetailResponseSupportedPlatform = { /** * Represents the target cloud platform. */ -export type DeploymentDetailResponseSupportedPlatform = ClosedEnum< - typeof DeploymentDetailResponseSupportedPlatform ->; +export type DeploymentDetailResponsePendingPreparedStackSupportedPlatform = + ClosedEnum< + typeof DeploymentDetailResponsePendingPreparedStackSupportedPlatform + >; /** * A bag of resources, unaware of any cloud. */ -export type DeploymentDetailResponsePreparedStack = { +export type DeploymentDetailResponsePendingPreparedStack = { /** * Unique identifier for the stack */ @@ -3163,3149 +3309,7433 @@ export type DeploymentDetailResponsePreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: Array | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: DeploymentDetailResponsePermissions | undefined; + permissions?: + | DeploymentDetailResponsePendingPreparedStackPermissions + | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: DeploymentDetailResponsePreparedStackResources }; + resources: { + [k: string]: DeploymentDetailResponsePendingPreparedStackResources; + }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array | null | undefined; }; -export type DeploymentDetailResponsePreparedStackUnion = - | DeploymentDetailResponsePreparedStack +export type DeploymentDetailResponsePendingPreparedStackUnion = + | DeploymentDetailResponsePendingPreparedStack | any; -/** - * Runtime metadata for deployment state persistence - */ -export type DeploymentDetailResponseRuntimeMetadata = { +export const DeploymentDetailResponsePreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type DeploymentDetailResponsePreparedStackTypeStringList = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackTypeStringList +>; + +export type DeploymentDetailResponsePreparedStackDefaultStringList = { + type: DeploymentDetailResponsePreparedStackTypeStringList; /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * String list default. */ - lastSyncedEnvVarsHash?: string | null | undefined; + value: Array; +}; + +export const DeploymentDetailResponsePreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type DeploymentDetailResponsePreparedStackTypeBoolean = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackTypeBoolean +>; + +export type DeploymentDetailResponsePreparedStackDefaultBoolean = { + type: DeploymentDetailResponsePreparedStackTypeBoolean; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Boolean default. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: - | DeploymentDetailResponsePreparedStack - | any - | null - | undefined; + value: boolean; +}; + +export const DeploymentDetailResponsePreparedStackTypeNumber = { + Number: "number", +} as const; +export type DeploymentDetailResponsePreparedStackTypeNumber = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackTypeNumber +>; + +export type DeploymentDetailResponsePreparedStackDefaultNumber = { + type: DeploymentDetailResponsePreparedStackTypeNumber; /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. + * Number default. */ - registryAccessGranted?: boolean | undefined; + value: string; }; -/** - * Setup source that imported this deployment - */ -export const DeploymentDetailResponseImportSource = { - Cloudformation: "cloudformation", - Terraform: "terraform", - Helm: "helm", +export const DeploymentDetailResponsePreparedStackTypeString = { + String: "string", } as const; -/** - * Setup source that imported this deployment - */ -export type DeploymentDetailResponseImportSource = ClosedEnum< - typeof DeploymentDetailResponseImportSource +export type DeploymentDetailResponsePreparedStackTypeString = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackTypeString >; +export type DeploymentDetailResponsePreparedStackDefaultString = { + type: DeploymentDetailResponsePreparedStackTypeString; + /** + * String default. + */ + value: string; +}; + +export type DeploymentDetailResponsePreparedStackDefaultUnion = + | DeploymentDetailResponsePreparedStackDefaultString + | DeploymentDetailResponsePreparedStackDefaultNumber + | DeploymentDetailResponsePreparedStackDefaultBoolean + | DeploymentDetailResponsePreparedStackDefaultStringList + | any; + /** - * Setup method that created the deployment record and owns setup-time resources. + * Environment variable handling for a stack input mapping. */ -export const DeploymentDetailResponseSetupMethod = { - Cloudformation: "cloudformation", - GoogleOauth: "google-oauth", - Terraform: "terraform", - Helm: "helm", - Cli: "cli", - Manual: "manual", +export const DeploymentDetailResponsePreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; /** - * Setup method that created the deployment record and owns setup-time resources. + * Environment variable handling for a stack input mapping. */ -export type DeploymentDetailResponseSetupMethod = ClosedEnum< - typeof DeploymentDetailResponseSetupMethod +export type DeploymentDetailResponsePreparedStackTypeEnvEnum = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackTypeEnvEnum >; +export type DeploymentDetailResponsePreparedStackTypeUnion = + | DeploymentDetailResponsePreparedStackTypeEnvEnum + | any; + /** - * Latest error information if the deployment is in a failed state + * How a resolved stack input is injected into runtime environment variables. */ -export type DeploymentDetailResponseError = { - /** - * A unique identifier for the type of error. - * - * @remarks - * - * This should be a short, machine-readable string that can be used - * by clients to programmatically handle different error types. - * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" - */ - code: string; +export type DeploymentDetailResponsePreparedStackEnv = { /** - * Additional diagnostic information about the error context. - * - * @remarks - * - * This optional field can contain structured data providing more details - * about the error, such as validation errors, request parameters that - * caused the issue, or other relevant context information. + * Environment variable name. */ - context?: any | null | undefined; + name: string; /** - * Optional human-facing remediation hint. + * Target resource IDs or patterns. None means every env-capable resource. */ - hint?: string | null | undefined; + targetResources?: Array | null | undefined; + type?: + | DeploymentDetailResponsePreparedStackTypeEnvEnum + | any + | null + | undefined; +}; + +/** + * Primitive stack input kind. + */ +export const DeploymentDetailResponsePreparedStackKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; +/** + * Primitive stack input kind. + */ +export type DeploymentDetailResponsePreparedStackKind = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackKind +>; + +/** + * Represents the target cloud platform. + */ +export const DeploymentDetailResponsePreparedStackPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type DeploymentDetailResponsePreparedStackPlatform = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackPlatform +>; + +/** + * Who can provide a stack input value. + */ +export const DeploymentDetailResponsePreparedStackProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type DeploymentDetailResponsePreparedStackProvidedBy = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackProvidedBy +>; + +/** + * Portable stack input validation constraints. + */ +export type DeploymentDetailResponsePreparedStackValidation = { /** - * HTTP status code for this error. - * - * @remarks - * - * Used when converting the error to an HTTP response. If None, falls back to - * the error type's default status code or 500. + * Semantic format hint such as url. */ - httpStatusCode?: number | null | undefined; + format?: string | null | undefined; /** - * Indicates if this is an internal error that should not be exposed to users. - * - * @remarks - * - * When `true`, this error contains sensitive information or implementation - * details that should not be shown to end-users. Such errors should be - * logged for debugging but replaced with generic error messages in responses. + * Maximum number. */ - internal: boolean; + max?: string | null | undefined; /** - * Human-readable error message. - * - * @remarks - * - * This message should be clear and actionable for developers or end-users, - * providing context about what went wrong and potentially how to fix it. + * Maximum string-list items. */ - message: string; + maxItems?: number | null | undefined; /** - * Indicates whether the operation that caused the error should be retried. - * - * @remarks - * - * When `true`, the error is transient and the operation might succeed - * if attempted again. When `false`, retrying the same operation is - * unlikely to succeed without changes. + * Maximum string length. */ - retryable: boolean; + maxLength?: number | null | undefined; /** - * The underlying error that caused this error, creating an error chain. - * - * @remarks - * - * This allows for proper error propagation and debugging by maintaining - * the full context of how an error occurred through multiple layers - * of an application. + * Minimum number. */ - source?: any | null | undefined; -}; - -/** - * Snapshot of target environment variables for the deployment - */ -export type DeploymentDetailResponseTargetEnvironmentVariables = { + min?: string | null | undefined; /** - * Environment variables in the snapshot + * Minimum string-list items. */ - variables: Array; + minItems?: number | null | undefined; /** - * Deterministic hash of all variables for change detection + * Minimum string length. */ - hash: string; + minLength?: number | null | undefined; /** - * ISO 8601 timestamp when snapshot was created + * Portable whole-value regex pattern. */ - createdAt: Date; + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; +export type DeploymentDetailResponsePreparedStackValidationUnion = + | DeploymentDetailResponsePreparedStackValidation + | any; + /** - * Snapshot of current environment variables for the deployment + * Stack input definition serialized into a release stack. */ -export type DeploymentDetailResponseCurrentEnvironmentVariables = { +export type DeploymentDetailResponsePreparedStackInput = { + default?: + | DeploymentDetailResponsePreparedStackDefaultString + | DeploymentDetailResponsePreparedStackDefaultNumber + | DeploymentDetailResponsePreparedStackDefaultBoolean + | DeploymentDetailResponsePreparedStackDefaultStringList + | any + | null + | undefined; /** - * Environment variables in the snapshot + * Human-facing helper text. */ - variables: Array; + description: string; /** - * Deterministic hash of all variables for change detection + * Runtime env-var mappings for v1 input resolution. */ - hash: string; + env?: Array | undefined; /** - * ISO 8601 timestamp when snapshot was created + * Stable input ID used by CLI/API calls. */ - createdAt: Date; -}; - -export type DeploymentDetailResponse = { + id: string; /** - * Unique identifier for the deployment. + * Primitive stack input kind. */ - id: string; + kind: DeploymentDetailResponsePreparedStackKind; /** - * Deployment name. + * Human-facing field label. */ - name: string; + label: string; /** - * Public subdomain for auto-generated domains + * Example placeholder shown in UI. */ - publicSubdomain?: string | null | undefined; + placeholder?: string | null | undefined; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Platforms where this input applies. */ - status: DeploymentDetailResponseStatus; + platforms?: + | Array + | null + | undefined; /** - * Unique identifier for the project. + * Who can provide this value. */ - projectId: string; + providedBy: Array; /** - * Target platform for the deployment + * Whether a resolved value is required before deployment can proceed. */ - platform: DeploymentDetailResponsePlatform; + required: boolean; + validation?: + | DeploymentDetailResponsePreparedStackValidation + | any + | null + | undefined; +}; + +export const DeploymentDetailResponsePreparedStackManagementEnum = { + Auto: "auto", +} as const; +export type DeploymentDetailResponsePreparedStackManagementEnum = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackManagementEnum +>; + +/** + * AWS-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackOverrideAwResource = { /** - * Underlying cloud platform for Kubernetes deployments. + * Optional condition for additional filtering (rare) */ - basePlatform?: DeploymentDetailResponseBasePlatform | null | undefined; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * Cloud region or location for the deployment. + * Resource ARNs to bind to */ - region?: string | null | undefined; + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackOverrideAwStack = { /** - * DeploymentState protocol version owned by the runtime/manager + * Optional condition for additional filtering (rare) */ - deploymentProtocolVersion: number; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * ID of deployment group this deployment belongs to + * Resource ARNs to bind to */ - deploymentGroupId: string; + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackOverrideAwBinding = { /** - * Cloud environment information + * AWS-specific binding specification */ - environmentInfo?: - | DeploymentDetailResponseEnvironmentInfoGcp - | DeploymentDetailResponseEnvironmentInfoAzure - | DeploymentDetailResponseEnvironmentInfoLocal - | DeploymentDetailResponseEnvironmentInfoAws - | DeploymentDetailResponseEnvironmentInfoTest - | any - | null + resource?: + | DeploymentDetailResponsePreparedStackOverrideAwResource | undefined; /** - * User-provided configuration (network, deployment model, approvals) + * AWS-specific binding specification */ - stackSettings: DeploymentDetailResponseStackSettings; + stack?: DeploymentDetailResponsePreparedStackOverrideAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const DeploymentDetailResponsePreparedStackOverrideEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type DeploymentDetailResponsePreparedStackOverrideEffect = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackOverrideEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackOverrideAwGrant = { /** - * State of infrastructure components managed by this deployment + * AWS IAM actions (only for AWS) */ - stackState?: DeploymentDetailResponseStackState | null | undefined; + actions?: Array | null | undefined; /** - * Runtime metadata for deployment state persistence + * Azure actions (only for Azure) */ - runtimeMetadata?: DeploymentDetailResponseRuntimeMetadata | null | undefined; + dataActions?: Array | null | undefined; /** - * ID of the currently deployed release (actual state) + * GCP permissions that require an exact residual custom role. */ - currentReleaseId?: string | null | undefined; + permissions?: Array | null | undefined; /** - * ID of the desired release for deployment/update (desired state) + * Provider predefined roles to bind directly. */ - desiredReleaseId?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * ID of the pinned release + * GCP residual custom permissions to pair with predefined roles. */ - pinnedReleaseId?: string | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackOverrideAw = { /** - * Setup source that imported this deployment + * Generic binding configuration for permissions */ - importSource?: DeploymentDetailResponseImportSource | null | undefined; + binding: DeploymentDetailResponsePreparedStackOverrideAwBinding; /** - * Setup method that created the deployment record and owns setup-time resources. + * Short admin-facing description of why this entry exists. */ - setupMethod?: DeploymentDetailResponseSetupMethod | null | undefined; + description?: string | null | undefined; /** - * Setup method metadata needed to guide privileged teardown. + * IAM effect. Defaults to Allow. */ - setupMetadata?: { [k: string]: any | null } | null | undefined; + effect?: DeploymentDetailResponsePreparedStackOverrideEffect | undefined; /** - * Imported setup target for compatibility checks + * Grant permissions for a specific cloud platform */ - setupTarget?: string | null | undefined; + grant: DeploymentDetailResponsePreparedStackOverrideAwGrant; /** - * Imported setup compatibility fingerprint + * Stable admin-facing label for this permission entry. */ - setupFingerprint?: string | null | undefined; + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackOverrideAzureResource = { /** - * Imported setup fingerprint algorithm version + * Scope (subscription/resource group/resource level) */ - setupFingerprintVersion?: number | null | undefined; + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackOverrideAzureStack = { /** - * Display-only scope reported by the Operator manifest + * Scope (subscription/resource group/resource level) */ - operatorScope?: string | null | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackOverrideAzureBinding = { /** - * Display-only permission tier reported by the Operator manifest + * Azure-specific binding specification */ - operatorPermission?: string | null | undefined; + resource?: + | DeploymentDetailResponsePreparedStackOverrideAzureResource + | undefined; /** - * Version reported by the Operator + * Azure-specific binding specification */ - operatorVersion?: string | null | undefined; + stack?: DeploymentDetailResponsePreparedStackOverrideAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackOverrideAzureGrant = { /** - * Capability state reported by the Operator + * AWS IAM actions (only for AWS) */ - capabilities?: Array | null | undefined; + actions?: Array | null | undefined; /** - * Whether a retry has been requested for a failed deployment + * Azure actions (only for Azure) */ - retryRequested: boolean; + dataActions?: Array | null | undefined; /** - * Timestamp of the last received heartbeat from the deployment + * GCP permissions that require an exact residual custom role. */ - lastHeartbeatAt?: Date | null | undefined; + permissions?: Array | null | undefined; /** - * Latest error information if the deployment is in a failed state + * Provider predefined roles to bind directly. */ - error?: DeploymentDetailResponseError | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Configuration of environment variables for the deployment + * GCP residual custom permissions to pair with predefined roles. */ - environmentVariables?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackOverrideAzure = { /** - * Snapshot of target environment variables for the deployment + * Generic binding configuration for permissions */ - targetEnvironmentVariables?: - | DeploymentDetailResponseTargetEnvironmentVariables + binding: DeploymentDetailResponsePreparedStackOverrideAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type DeploymentDetailResponsePreparedStackOverrideConditionResource = { + expression: string; + title: string; +}; + +export type DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion = + | DeploymentDetailResponsePreparedStackOverrideConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackOverrideGcpResource = { + condition?: + | DeploymentDetailResponsePreparedStackOverrideConditionResource + | any | null | undefined; /** - * Snapshot of current environment variables for the deployment + * Scope (project/resource level) */ - currentEnvironmentVariables?: - | DeploymentDetailResponseCurrentEnvironmentVariables + scope: string; +}; + +/** + * GCP IAM condition + */ +export type DeploymentDetailResponsePreparedStackOverrideConditionStack = { + expression: string; + title: string; +}; + +export type DeploymentDetailResponsePreparedStackOverrideStackConditionUnion = + | DeploymentDetailResponsePreparedStackOverrideConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackOverrideGcpStack = { + condition?: + | DeploymentDetailResponsePreparedStackOverrideConditionStack + | any | null | undefined; - createdAt: Date; - updatedAt: Date; - managerId: string; /** - * Unique identifier for the workspace. + * Scope (project/resource level) */ - workspaceId: string; - release?: DeploymentReleaseInfo | null | undefined; - deploymentGroup?: DeploymentGroupInfo | undefined; - project?: DeploymentProjectInfo | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackOverrideGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: + | DeploymentDetailResponsePreparedStackOverrideGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackOverrideGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackOverrideGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackOverrideGcp = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackOverrideGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackOverrideGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type DeploymentDetailResponsePreparedStackOverridePlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type DeploymentDetailResponsePreparedStackOverride = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: DeploymentDetailResponsePreparedStackOverridePlatforms; }; -/** @internal */ -export const DeploymentDetailResponseStatus$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseStatus -> = z.enum(DeploymentDetailResponseStatus); +/** + * Reference to a permission set - either by name or inline definition + */ +export type DeploymentDetailResponsePreparedStackOverrideUnion = + | DeploymentDetailResponsePreparedStackOverride + | string; + +export type DeploymentDetailResponsePreparedStackManagement2 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + override: { + [k: string]: Array; + }; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackExtendAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackExtendAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackExtendAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: DeploymentDetailResponsePreparedStackExtendAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackExtendAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const DeploymentDetailResponsePreparedStackExtendEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type DeploymentDetailResponsePreparedStackExtendEffect = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackExtendEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackExtendAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackExtendAw = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackExtendAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: DeploymentDetailResponsePreparedStackExtendEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackExtendAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackExtendAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | DeploymentDetailResponsePreparedStackExtendAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackExtendAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackExtendAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackExtendAzure = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type DeploymentDetailResponsePreparedStackExtendConditionResource = { + expression: string; + title: string; +}; + +export type DeploymentDetailResponsePreparedStackExtendResourceConditionUnion = + | DeploymentDetailResponsePreparedStackExtendConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackExtendGcpResource = { + condition?: + | DeploymentDetailResponsePreparedStackExtendConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type DeploymentDetailResponsePreparedStackExtendConditionStack = { + expression: string; + title: string; +}; + +export type DeploymentDetailResponsePreparedStackExtendStackConditionUnion = + | DeploymentDetailResponsePreparedStackExtendConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackExtendGcpStack = { + condition?: + | DeploymentDetailResponsePreparedStackExtendConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackExtendGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: DeploymentDetailResponsePreparedStackExtendGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackExtendGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackExtendGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackExtendGcp = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type DeploymentDetailResponsePreparedStackExtendPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type DeploymentDetailResponsePreparedStackExtend = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: DeploymentDetailResponsePreparedStackExtendPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type DeploymentDetailResponsePreparedStackExtendUnion = + | DeploymentDetailResponsePreparedStackExtend + | string; + +export type DeploymentDetailResponsePreparedStackManagement1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { + [k: string]: Array; + }; +}; + +/** + * Management permissions configuration for stack management access + */ +export type DeploymentDetailResponsePreparedStackManagementUnion = + | DeploymentDetailResponsePreparedStackManagement1 + | DeploymentDetailResponsePreparedStackManagement2 + | DeploymentDetailResponsePreparedStackManagementEnum; + +/** + * AWS-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackProfileAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackProfileAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: DeploymentDetailResponsePreparedStackProfileAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackProfileAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const DeploymentDetailResponsePreparedStackProfileEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type DeploymentDetailResponsePreparedStackProfileEffect = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackProfileEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackProfileAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackProfileAw = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: DeploymentDetailResponsePreparedStackProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackProfileAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackProfileAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | DeploymentDetailResponsePreparedStackProfileAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackProfileAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackProfileAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type DeploymentDetailResponsePreparedStackProfileConditionResource = { + expression: string; + title: string; +}; + +export type DeploymentDetailResponsePreparedStackProfileResourceConditionUnion = + | DeploymentDetailResponsePreparedStackProfileConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackProfileGcpResource = { + condition?: + | DeploymentDetailResponsePreparedStackProfileConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type DeploymentDetailResponsePreparedStackProfileConditionStack = { + expression: string; + title: string; +}; + +export type DeploymentDetailResponsePreparedStackProfileStackConditionUnion = + | DeploymentDetailResponsePreparedStackProfileConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type DeploymentDetailResponsePreparedStackProfileGcpStack = { + condition?: + | DeploymentDetailResponsePreparedStackProfileConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type DeploymentDetailResponsePreparedStackProfileGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: + | DeploymentDetailResponsePreparedStackProfileGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: DeploymentDetailResponsePreparedStackProfileGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type DeploymentDetailResponsePreparedStackProfileGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type DeploymentDetailResponsePreparedStackProfileGcp = { + /** + * Generic binding configuration for permissions + */ + binding: DeploymentDetailResponsePreparedStackProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: DeploymentDetailResponsePreparedStackProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type DeploymentDetailResponsePreparedStackProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type DeploymentDetailResponsePreparedStackProfile = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: DeploymentDetailResponsePreparedStackProfilePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type DeploymentDetailResponsePreparedStackProfileUnion = + | DeploymentDetailResponsePreparedStackProfile + | string; + +/** + * Combined permissions configuration that contains both profiles and management + */ +export type DeploymentDetailResponsePreparedStackPermissions = { + /** + * Management permissions configuration for stack management access + */ + management?: + | DeploymentDetailResponsePreparedStackManagement1 + | DeploymentDetailResponsePreparedStackManagement2 + | DeploymentDetailResponsePreparedStackManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; +}; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type DeploymentDetailResponsePreparedStackConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +/** + * Reference to a resource by its stable id and resource type. + */ +export type DeploymentDetailResponsePreparedStackDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; + +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const DeploymentDetailResponsePreparedStackLifecycle = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type DeploymentDetailResponsePreparedStackLifecycle = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackLifecycle +>; + +export type DeploymentDetailResponsePreparedStackResources = { + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: DeploymentDetailResponsePreparedStackConfig; + /** + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list + */ + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: DeploymentDetailResponsePreparedStackLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; +}; + +/** + * Represents the target cloud platform. + */ +export const DeploymentDetailResponsePreparedStackSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type DeploymentDetailResponsePreparedStackSupportedPlatform = ClosedEnum< + typeof DeploymentDetailResponsePreparedStackSupportedPlatform +>; + +/** + * A bag of resources, unaware of any cloud. + */ +export type DeploymentDetailResponsePreparedStack = { + /** + * Unique identifier for the stack + */ + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: DeploymentDetailResponsePreparedStackPermissions | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { [k: string]: DeploymentDetailResponsePreparedStackResources }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; +}; + +export type DeploymentDetailResponsePreparedStackUnion = + | DeploymentDetailResponsePreparedStack + | any; + +/** + * One-shot authority for a setup re-import to replace setup-owned resources. + */ +export type DeploymentDetailResponseSetupUpdateAuthorization = { + /** + * Frozen resource projection from the last successful deployment. + */ + baselineFrozenDigest: string; + /** + * Unique revision used by persistence layers for compare-and-swap updates. + */ + nonce: string; + /** + * Release whose stack was prepared by setup. + */ + releaseId: string; + /** + * Exact setup artifact revision that authored this authority. + */ + setupFingerprint: string; + /** + * Setup fingerprint contract version. + */ + setupFingerprintVersion: number; + /** + * Stable setup target recorded on the imported deployment. + */ + setupTarget: string; + /** + * Frozen resource projection prepared by the setup re-import. + */ + targetFrozenDigest: string; +}; + +export type DeploymentDetailResponseSetupUpdateAuthorizationUnion = + | DeploymentDetailResponseSetupUpdateAuthorization + | any; + +/** + * Runtime metadata for deployment state persistence + */ +export type DeploymentDetailResponseRuntimeMetadata = { + /** + * Hash of the environment variables snapshot that was last synced to the vault + * + * @remarks + * Used to avoid redundant sync operations during incremental deployment + */ + lastSyncedEnvVarsHash?: string | null | undefined; + /** + * Exact vault keys owned by the deployment secret synchronizer. This + * + * @remarks + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. + */ + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | DeploymentDetailResponsePendingPreparedStack + | any + | null + | undefined; + preparedStack?: + | DeploymentDetailResponsePreparedStack + | any + | null + | undefined; + /** + * Whether cross-account registry access has been successfully granted. + * + * @remarks + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. + */ + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | DeploymentDetailResponseSetupUpdateAuthorization + | any + | null + | undefined; +}; + +/** + * Setup source that imported this deployment + */ +export const DeploymentDetailResponseImportSource = { + Cloudformation: "cloudformation", + Terraform: "terraform", + Helm: "helm", +} as const; +/** + * Setup source that imported this deployment + */ +export type DeploymentDetailResponseImportSource = ClosedEnum< + typeof DeploymentDetailResponseImportSource +>; + +/** + * Setup method that created the deployment record and owns setup-time resources. + */ +export const DeploymentDetailResponseSetupMethod = { + Cloudformation: "cloudformation", + GoogleOauth: "google-oauth", + Terraform: "terraform", + Helm: "helm", + Cli: "cli", + Manual: "manual", +} as const; +/** + * Setup method that created the deployment record and owns setup-time resources. + */ +export type DeploymentDetailResponseSetupMethod = ClosedEnum< + typeof DeploymentDetailResponseSetupMethod +>; + +/** + * Latest error information if the deployment is in a failed state + */ +export type DeploymentDetailResponseError = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +/** + * Snapshot of target environment variables for the deployment + */ +export type DeploymentDetailResponseTargetEnvironmentVariables = { + /** + * Environment variables in the snapshot + */ + variables: Array; + /** + * Deterministic hash of all variables for change detection + */ + hash: string; + /** + * ISO 8601 timestamp when snapshot was created + */ + createdAt: Date; +}; + +/** + * Snapshot of current environment variables for the deployment + */ +export type DeploymentDetailResponseCurrentEnvironmentVariables = { + /** + * Environment variables in the snapshot + */ + variables: Array; + /** + * Deterministic hash of all variables for change detection + */ + hash: string; + /** + * ISO 8601 timestamp when snapshot was created + */ + createdAt: Date; +}; + +export type DeploymentDetailResponse = { + /** + * Unique identifier for the deployment. + */ + id: string; + /** + * Deployment name. + */ + name: string; + /** + * Public subdomain for auto-generated domains + */ + publicSubdomain?: string | null | undefined; + /** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ + status: DeploymentDetailResponseStatus; + /** + * Unique identifier for the project. + */ + projectId: string; + /** + * Target platform for the deployment + */ + platform: DeploymentDetailResponsePlatform; + /** + * Underlying cloud platform for Kubernetes deployments. + */ + basePlatform?: DeploymentDetailResponseBasePlatform | null | undefined; + /** + * Cloud region or location for the deployment. + */ + region?: string | null | undefined; + /** + * DeploymentState protocol version owned by the runtime/manager + */ + deploymentProtocolVersion: number; + /** + * ID of deployment group this deployment belongs to + */ + deploymentGroupId: string; + /** + * Cloud environment information + */ + environmentInfo?: + | DeploymentDetailResponseEnvironmentInfoGcp + | DeploymentDetailResponseEnvironmentInfoAzure + | DeploymentDetailResponseEnvironmentInfoLocal + | DeploymentDetailResponseEnvironmentInfoAws + | DeploymentDetailResponseEnvironmentInfoTest + | any + | null + | undefined; + /** + * User-provided configuration (network, deployment model, approvals) + */ + stackSettings: DeploymentDetailResponseStackSettings; + /** + * State of infrastructure components managed by this deployment + */ + stackState?: DeploymentDetailResponseStackState | null | undefined; + /** + * Runtime metadata for deployment state persistence + */ + runtimeMetadata?: DeploymentDetailResponseRuntimeMetadata | null | undefined; + /** + * ID of the currently deployed release (actual state) + */ + currentReleaseId?: string | null | undefined; + /** + * ID of the desired release for deployment/update (desired state) + */ + desiredReleaseId?: string | null | undefined; + /** + * ID of the pinned release + */ + pinnedReleaseId?: string | null | undefined; + /** + * Setup source that imported this deployment + */ + importSource?: DeploymentDetailResponseImportSource | null | undefined; + /** + * Setup method that created the deployment record and owns setup-time resources. + */ + setupMethod?: DeploymentDetailResponseSetupMethod | null | undefined; + /** + * Setup method metadata needed to guide privileged teardown. + */ + setupMetadata?: { [k: string]: any | null } | null | undefined; + /** + * Imported setup target for compatibility checks + */ + setupTarget?: string | null | undefined; + /** + * Imported setup compatibility fingerprint + */ + setupFingerprint?: string | null | undefined; + /** + * Imported setup fingerprint algorithm version + */ + setupFingerprintVersion?: number | null | undefined; + /** + * Display-only scope reported by the Operator manifest + */ + operatorScope?: string | null | undefined; + /** + * Display-only permission tier reported by the Operator manifest + */ + operatorPermission?: string | null | undefined; + /** + * Version reported by the Operator + */ + operatorVersion?: string | null | undefined; + /** + * Capability state reported by the Operator + */ + capabilities?: Array | null | undefined; + /** + * Whether a retry has been requested for a failed deployment + */ + retryRequested: boolean; + /** + * Timestamp of the last received heartbeat from the deployment + */ + lastHeartbeatAt?: Date | null | undefined; + /** + * Latest error information if the deployment is in a failed state + */ + error?: DeploymentDetailResponseError | null | undefined; + /** + * Configuration of environment variables for the deployment + */ + environmentVariables?: Array | null | undefined; + /** + * Snapshot of target environment variables for the deployment + */ + targetEnvironmentVariables?: + | DeploymentDetailResponseTargetEnvironmentVariables + | null + | undefined; + /** + * Snapshot of current environment variables for the deployment + */ + currentEnvironmentVariables?: + | DeploymentDetailResponseCurrentEnvironmentVariables + | null + | undefined; + createdAt: Date; + updatedAt: Date; + managerId: string; + /** + * Unique identifier for the workspace. + */ + workspaceId: string; + release?: DeploymentReleaseInfo | null | undefined; + deploymentGroup?: DeploymentGroupInfo | undefined; + project?: DeploymentProjectInfo | undefined; +}; + +/** @internal */ +export const DeploymentDetailResponseStatus$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseStatus +> = z.enum(DeploymentDetailResponseStatus); + +/** @internal */ +export const DeploymentDetailResponsePlatform$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePlatform +> = z.enum(DeploymentDetailResponsePlatform); + +/** @internal */ +export const DeploymentDetailResponseBasePlatform$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseBasePlatform +> = z.enum(DeploymentDetailResponseBasePlatform); + +/** @internal */ +export const DeploymentDetailResponsePlatformTest$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePlatformTest +> = z.enum(DeploymentDetailResponsePlatformTest); + +/** @internal */ +export const DeploymentDetailResponseEnvironmentInfoTest$inboundSchema: + z.ZodType = z.object({ + testId: z.string(), + platform: DeploymentDetailResponsePlatformTest$inboundSchema, + }); + +export function deploymentDetailResponseEnvironmentInfoTestFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseEnvironmentInfoTest, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseEnvironmentInfoTest$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseEnvironmentInfoTest' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePlatformLocal$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePlatformLocal +> = z.enum(DeploymentDetailResponsePlatformLocal); + +/** @internal */ +export const DeploymentDetailResponseEnvironmentInfoLocal$inboundSchema: + z.ZodType = z.object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: DeploymentDetailResponsePlatformLocal$inboundSchema, + }); + +export function deploymentDetailResponseEnvironmentInfoLocalFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseEnvironmentInfoLocal, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseEnvironmentInfoLocal$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseEnvironmentInfoLocal' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePlatformAzure$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePlatformAzure +> = z.enum(DeploymentDetailResponsePlatformAzure); + +/** @internal */ +export const DeploymentDetailResponseEnvironmentInfoAzure$inboundSchema: + z.ZodType = z.object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: DeploymentDetailResponsePlatformAzure$inboundSchema, + }); + +export function deploymentDetailResponseEnvironmentInfoAzureFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseEnvironmentInfoAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseEnvironmentInfoAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseEnvironmentInfoAzure' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePlatformGcp$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePlatformGcp +> = z.enum(DeploymentDetailResponsePlatformGcp); + +/** @internal */ +export const DeploymentDetailResponseEnvironmentInfoGcp$inboundSchema: + z.ZodType = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: DeploymentDetailResponsePlatformGcp$inboundSchema, + }); + +export function deploymentDetailResponseEnvironmentInfoGcpFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseEnvironmentInfoGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseEnvironmentInfoGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseEnvironmentInfoGcp' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePlatformAws$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePlatformAws +> = z.enum(DeploymentDetailResponsePlatformAws); + +/** @internal */ +export const DeploymentDetailResponseEnvironmentInfoAws$inboundSchema: + z.ZodType = z.object({ + accountId: z.string(), + region: z.string(), + platform: DeploymentDetailResponsePlatformAws$inboundSchema, + }); + +export function deploymentDetailResponseEnvironmentInfoAwsFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseEnvironmentInfoAws, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseEnvironmentInfoAws$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseEnvironmentInfoAws' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseEnvironmentInfoUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentDetailResponseEnvironmentInfoGcp$inboundSchema), + z.lazy(() => DeploymentDetailResponseEnvironmentInfoAzure$inboundSchema), + z.lazy(() => DeploymentDetailResponseEnvironmentInfoLocal$inboundSchema), + z.lazy(() => DeploymentDetailResponseEnvironmentInfoAws$inboundSchema), + z.lazy(() => DeploymentDetailResponseEnvironmentInfoTest$inboundSchema), + z.any(), + ]); + +export function deploymentDetailResponseEnvironmentInfoUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseEnvironmentInfoUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseEnvironmentInfoUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseEnvironmentInfoUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseFailureDomains2$inboundSchema: z.ZodType< + DeploymentDetailResponseFailureDomains2, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function deploymentDetailResponseFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseFailureDomains2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseFailureDomains2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseFailureDomainsUnion2$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentDetailResponseFailureDomains2$inboundSchema), + z.any(), + ]); + +export function deploymentDetailResponseFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseFailureDomainsUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseFailureDomainsUnion2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseFailureDomainsUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePoolsAutoscale$inboundSchema: z.ZodType< + DeploymentDetailResponsePoolsAutoscale, + unknown +> = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseFailureDomains2$inboundSchema), + z.any(), + ]), + ).optional(), + machine: z.nullable(z.string()).optional(), + max: z.int(), + min: z.int(), + mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); +}); + +export function deploymentDetailResponsePoolsAutoscaleFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePoolsAutoscale$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePoolsAutoscale' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseFailureDomains1$inboundSchema: z.ZodType< + DeploymentDetailResponseFailureDomains1, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function deploymentDetailResponseFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseFailureDomains1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseFailureDomains1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseFailureDomainsUnion1$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentDetailResponseFailureDomains1$inboundSchema), + z.any(), + ]); + +export function deploymentDetailResponseFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseFailureDomainsUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseFailureDomainsUnion1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseFailureDomainsUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePoolsFixed$inboundSchema: z.ZodType< + DeploymentDetailResponsePoolsFixed, + unknown +> = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseFailureDomains1$inboundSchema), + z.any(), + ]), + ).optional(), + machine: z.nullable(z.string()).optional(), + machines: z.int(), + mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); +}); + +export function deploymentDetailResponsePoolsFixedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePoolsFixed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePoolsFixed' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePoolsUnion$inboundSchema: z.ZodType< + DeploymentDetailResponsePoolsUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponsePoolsFixed$inboundSchema), + z.lazy(() => DeploymentDetailResponsePoolsAutoscale$inboundSchema), +]); + +export function deploymentDetailResponsePoolsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePoolsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePoolsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCompute$inboundSchema: z.ZodType< + DeploymentDetailResponseCompute, + unknown +> = z.object({ + pools: z.record( + z.string(), + z.union([ + z.lazy(() => DeploymentDetailResponsePoolsFixed$inboundSchema), + z.lazy(() => DeploymentDetailResponsePoolsAutoscale$inboundSchema), + ]), + ).optional(), +}); + +export function deploymentDetailResponseComputeFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseCompute$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseCompute' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseComputeUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseComputeUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseCompute$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseComputeUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseComputeUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseComputeUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseDeploymentModel$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseDeploymentModel +> = z.enum(DeploymentDetailResponseDeploymentModel); + +/** @internal */ +export const DeploymentDetailResponseAws$inboundSchema: z.ZodType< + DeploymentDetailResponseAws, + unknown +> = z.object({ + certificateArn: z.string(), +}); + +export function deploymentDetailResponseAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseAws' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseAwsUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseAwsUnion, + unknown +> = z.union([z.lazy(() => DeploymentDetailResponseAws$inboundSchema), z.any()]); + +export function deploymentDetailResponseAwsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseAwsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseAwsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseAzureStackSettings$inboundSchema: + z.ZodType = z.object({ + keyVaultCertificateId: z.string(), + keyVaultResourceId: z.nullable(z.string()).optional(), + }); + +export function deploymentDetailResponseAzureStackSettingsFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseAzureStackSettings, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseAzureStackSettings$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseAzureStackSettings' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseAzureUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseAzureUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseAzureStackSettings$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseAzureUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseAzureUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseAzureUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseGcpStackSettings$inboundSchema: z.ZodType< + DeploymentDetailResponseGcpStackSettings, + unknown +> = z.object({ + certificateName: z.string(), +}); + +export function deploymentDetailResponseGcpStackSettingsFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseGcpStackSettings, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseGcpStackSettings$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseGcpStackSettings' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseGcpUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseGcpUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseGcpStackSettings$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseGcpUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseGcpUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseGcpUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTlsSecretRef$inboundSchema: z.ZodType< + DeploymentDetailResponseTlsSecretRef, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), +}); + +export function deploymentDetailResponseTlsSecretRefFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseTlsSecretRef$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseTlsSecretRef' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseDomainsKubernetes$inboundSchema: z.ZodType< + DeploymentDetailResponseDomainsKubernetes, + unknown +> = z.object({ + tlsSecretRef: z.lazy(() => + DeploymentDetailResponseTlsSecretRef$inboundSchema + ), +}); + +export function deploymentDetailResponseDomainsKubernetesFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseDomainsKubernetes, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseDomainsKubernetes$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseDomainsKubernetes' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseDomainsKubernetesUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentDetailResponseDomainsKubernetes$inboundSchema), + z.any(), + ]); + +export function deploymentDetailResponseDomainsKubernetesUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseDomainsKubernetesUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseDomainsKubernetesUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseDomainsKubernetesUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseDomainsCertificate$inboundSchema: + z.ZodType = z.object({ + aws: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseAws$inboundSchema), + z.any(), + ]), + ).optional(), + azure: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseAzureStackSettings$inboundSchema), + z.any(), + ]), + ).optional(), + gcp: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseGcpStackSettings$inboundSchema), + z.any(), + ]), + ).optional(), + kubernetes: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseDomainsKubernetes$inboundSchema), + z.any(), + ]), + ).optional(), + }); + +export function deploymentDetailResponseDomainsCertificateFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseDomainsCertificate, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseDomainsCertificate$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseDomainsCertificate' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCustomDomains$inboundSchema: z.ZodType< + DeploymentDetailResponseCustomDomains, + unknown +> = z.object({ + certificate: z.lazy(() => + DeploymentDetailResponseDomainsCertificate$inboundSchema + ), + domain: z.string(), +}); + +export function deploymentDetailResponseCustomDomainsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCustomDomains$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseCustomDomains' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseModeLoadBalancer$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseModeLoadBalancer +> = z.enum(DeploymentDetailResponseModeLoadBalancer); + +/** @internal */ +export const DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema: + z.ZodType = + z.object({ + cnameTarget: z.string(), + mode: DeploymentDetailResponseModeLoadBalancer$inboundSchema, + }); + +export function deploymentDetailResponsePublicEndpointTargetLoadBalancerFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponsePublicEndpointTargetLoadBalancer, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePublicEndpointTargetLoadBalancer' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseModeMachineAddresses$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseModeMachineAddresses, + ); + +/** @internal */ +export const DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema: + z.ZodType< + DeploymentDetailResponsePublicEndpointTargetMachineAddresses, + unknown + > = z.object({ + mode: DeploymentDetailResponseModeMachineAddresses$inboundSchema, + }); + +export function deploymentDetailResponsePublicEndpointTargetMachineAddressesFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponsePublicEndpointTargetMachineAddresses, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePublicEndpointTargetMachineAddresses' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePublicEndpointTargetUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema + ), + z.any(), + ]); + +export function deploymentDetailResponsePublicEndpointTargetUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponsePublicEndpointTargetUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePublicEndpointTargetUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePublicEndpointTargetUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseDomains$inboundSchema: z.ZodType< + DeploymentDetailResponseDomains, + unknown +> = z.object({ + customDomains: z.nullable( + z.record( + z.string(), + z.lazy(() => DeploymentDetailResponseCustomDomains$inboundSchema), + ), + ).optional(), + publicEndpointTarget: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema + ), + z.any(), + ]), + ).optional(), +}); + +export function deploymentDetailResponseDomainsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseDomains$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseDomains' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseDomainsUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseDomainsUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseDomains$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseDomainsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseDomainsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseDomainsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseExternalBindings$inboundSchema: z.ZodType< + DeploymentDetailResponseExternalBindings, + unknown +> = z.object({}); + +export function deploymentDetailResponseExternalBindingsFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseExternalBindings, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseExternalBindings$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseExternalBindings' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseHeartbeats$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseHeartbeats +> = z.enum(DeploymentDetailResponseHeartbeats); + +/** @internal */ +export const DeploymentDetailResponseCloud$inboundSchema: z.ZodType< + DeploymentDetailResponseCloud, + unknown +> = z.object({ + accountId: z.nullable(z.string()).optional(), + clusterId: z.nullable(z.string()).optional(), + clusterName: z.nullable(z.string()).optional(), + projectId: z.nullable(z.string()).optional(), + region: z.nullable(z.string()).optional(), + resourceGroup: z.nullable(z.string()).optional(), + subscriptionId: z.nullable(z.string()).optional(), +}); + +export function deploymentDetailResponseCloudFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseCloud$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseCloud' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCloudUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseCloudUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseCloud$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseCloudUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCloudUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseCloudUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseOwnership$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseOwnership +> = z.enum(DeploymentDetailResponseOwnership); + +/** @internal */ +export const DeploymentDetailResponseCluster$inboundSchema: z.ZodType< + DeploymentDetailResponseCluster, + unknown +> = z.object({ + cloud: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseCloud$inboundSchema), + z.any(), + ]), + ).optional(), + namespace: z.nullable(z.string()).optional(), + ownership: DeploymentDetailResponseOwnership$inboundSchema, +}); + +export function deploymentDetailResponseClusterFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseCluster$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseCluster' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseClusterUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseClusterUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseCluster$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseClusterUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseClusterUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseClusterUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateNone2$inboundSchema: z.ZodType< + DeploymentDetailResponseCertificateNone2, + unknown +> = z.object({ + mode: z.literal("none"), +}); + +export function deploymentDetailResponseCertificateNone2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateNone2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateNone2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateNone2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema: + z.ZodType = z + .object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), + }); + +export function deploymentDetailResponseCertificateManagedTLSSecret2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateManagedTLSSecret2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateManagedTLSSecret2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema: + z.ZodType = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), + }); + +export function deploymentDetailResponseCertificateAwsAcmArn2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateAwsAcmArn2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateAwsAcmArn2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema: + z.ZodType = z + .object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), + }); + +export function deploymentDetailResponseCertificateManagedAcmImport2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateManagedAcmImport2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateManagedAcmImport2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema: + z.ZodType = z + .object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), + }); + +export function deploymentDetailResponseCertificateTLSSecretRef2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateTLSSecretRef2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateTLSSecretRef2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateUnion2$inboundSchema: z.ZodType< + DeploymentDetailResponseCertificateUnion2, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema), + z.lazy(() => + DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema), + z.lazy(() => + DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateNone2$inboundSchema), +]); + +export function deploymentDetailResponseCertificateUnion2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateUnion2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseModeCustom$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseModeCustom +> = z.enum(DeploymentDetailResponseModeCustom); + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema: + z.ZodEnum< + typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4 + > = z.enum( + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema: + z.ZodType< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema, + }); + +export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers4FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGatewayEnum4$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderGkeGatewayEnum4, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGateway4$inboundSchema: + z.ZodType = z.object({ + provider: DeploymentDetailResponseProviderGkeGatewayEnum4$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function deploymentDetailResponseProviderGkeGateway4FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderGkeGateway4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderGkeGateway4$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderGkeGateway4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlbEnum4$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderAwsAlbEnum4, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlb4$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderAwsAlb4, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentDetailResponseProviderAwsAlbEnum4$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentDetailResponseProviderAwsAlb4FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAwsAlb4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAwsAlb4$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderAwsAlb4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderUnion4$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderUnion4, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb4$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway4$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseProviderUnion4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderUnion4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderUnion4' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseRouteGateway2$inboundSchema: z.ZodType< + DeploymentDetailResponseRouteGateway2, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb4$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway4$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), +}); + +export function deploymentDetailResponseRouteGateway2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseRouteGateway2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseRouteGateway2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema: + z.ZodEnum< + typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3 + > = z.enum( + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema: + z.ZodType< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema, + }); + +export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers3FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGatewayEnum3$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderGkeGatewayEnum3, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGateway3$inboundSchema: + z.ZodType = z.object({ + provider: DeploymentDetailResponseProviderGkeGatewayEnum3$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function deploymentDetailResponseProviderGkeGateway3FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderGkeGateway3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderGkeGateway3$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderGkeGateway3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlbEnum3$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderAwsAlbEnum3, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlb3$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderAwsAlb3, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentDetailResponseProviderAwsAlbEnum3$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentDetailResponseProviderAwsAlb3FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAwsAlb3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAwsAlb3$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderAwsAlb3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderUnion3$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderUnion3, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb3$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway3$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseProviderUnion3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderUnion3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderUnion3' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseRouteIngress2$inboundSchema: z.ZodType< + DeploymentDetailResponseRouteIngress2, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb3$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway3$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), +}); + +export function deploymentDetailResponseRouteIngress2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseRouteIngress2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseRouteIngress2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseRouteUnion2$inboundSchema: z.ZodType< + DeploymentDetailResponseRouteUnion2, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseRouteIngress2$inboundSchema), + z.lazy(() => DeploymentDetailResponseRouteGateway2$inboundSchema), +]); + +export function deploymentDetailResponseRouteUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseRouteUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseRouteUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseExposureCustom$inboundSchema: z.ZodType< + DeploymentDetailResponseExposureCustom, + unknown +> = z.object({ + certificate: z.union([ + z.lazy(() => + DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema), + z.lazy(() => + DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateNone2$inboundSchema), + ]), + domain: z.string(), + mode: DeploymentDetailResponseModeCustom$inboundSchema, + route: z.union([ + z.lazy(() => DeploymentDetailResponseRouteIngress2$inboundSchema), + z.lazy(() => DeploymentDetailResponseRouteGateway2$inboundSchema), + ]), +}); + +export function deploymentDetailResponseExposureCustomFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseExposureCustom$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseExposureCustom' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateNone1$inboundSchema: z.ZodType< + DeploymentDetailResponseCertificateNone1, + unknown +> = z.object({ + mode: z.literal("none"), +}); + +export function deploymentDetailResponseCertificateNone1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateNone1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateNone1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateNone1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema: + z.ZodType = z + .object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), + }); + +export function deploymentDetailResponseCertificateManagedTLSSecret1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateManagedTLSSecret1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateManagedTLSSecret1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema: + z.ZodType = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), + }); + +export function deploymentDetailResponseCertificateAwsAcmArn1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateAwsAcmArn1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateAwsAcmArn1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema: + z.ZodType = z + .object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), + }); + +export function deploymentDetailResponseCertificateManagedAcmImport1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateManagedAcmImport1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateManagedAcmImport1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema: + z.ZodType = z + .object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), + }); + +export function deploymentDetailResponseCertificateTLSSecretRef1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateTLSSecretRef1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateTLSSecretRef1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseCertificateUnion1$inboundSchema: z.ZodType< + DeploymentDetailResponseCertificateUnion1, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema), + z.lazy(() => + DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema), + z.lazy(() => + DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateNone1$inboundSchema), +]); + +export function deploymentDetailResponseCertificateUnion1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseCertificateUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseCertificateUnion1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseCertificateUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseModeGenerated$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseModeGenerated +> = z.enum(DeploymentDetailResponseModeGenerated); + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema: + z.ZodEnum< + typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2 + > = z.enum( + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema: + z.ZodType< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema, + }); + +export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGatewayEnum2$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderGkeGatewayEnum2, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGateway2$inboundSchema: + z.ZodType = z.object({ + provider: DeploymentDetailResponseProviderGkeGatewayEnum2$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function deploymentDetailResponseProviderGkeGateway2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderGkeGateway2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderGkeGateway2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderGkeGateway2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlbEnum2$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderAwsAlbEnum2, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlb2$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderAwsAlb2, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentDetailResponseProviderAwsAlbEnum2$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentDetailResponseProviderAwsAlb2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAwsAlb2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAwsAlb2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderAwsAlb2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderUnion2$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderUnion2, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb2$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway2$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseProviderUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderUnion2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseRouteGateway1$inboundSchema: z.ZodType< + DeploymentDetailResponseRouteGateway1, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb2$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway2$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), +}); + +export function deploymentDetailResponseRouteGateway1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseRouteGateway1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseRouteGateway1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema: + z.ZodEnum< + typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1 + > = z.enum( + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema: + z.ZodType< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema, + }); + +export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGatewayEnum1$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderGkeGatewayEnum1, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderGkeGateway1$inboundSchema: + z.ZodType = z.object({ + provider: DeploymentDetailResponseProviderGkeGatewayEnum1$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function deploymentDetailResponseProviderGkeGateway1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderGkeGateway1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderGkeGateway1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderGkeGateway1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlbEnum1$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseProviderAwsAlbEnum1, + ); + +/** @internal */ +export const DeploymentDetailResponseProviderAwsAlb1$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderAwsAlb1, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: DeploymentDetailResponseProviderAwsAlbEnum1$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function deploymentDetailResponseProviderAwsAlb1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseProviderAwsAlb1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderAwsAlb1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseProviderAwsAlb1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseProviderUnion1$inboundSchema: z.ZodType< + DeploymentDetailResponseProviderUnion1, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb1$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway1$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseProviderUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseProviderUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseProviderUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseRouteIngress1$inboundSchema: z.ZodType< + DeploymentDetailResponseRouteIngress1, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseProviderAwsAlb1$inboundSchema), + z.lazy(() => + DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseProviderGkeGateway1$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), +}); + +export function deploymentDetailResponseRouteIngress1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseRouteIngress1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseRouteIngress1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseRouteUnion1$inboundSchema: z.ZodType< + DeploymentDetailResponseRouteUnion1, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseRouteIngress1$inboundSchema), + z.lazy(() => DeploymentDetailResponseRouteGateway1$inboundSchema), +]); + +export function deploymentDetailResponseRouteUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseRouteUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseRouteUnion1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseExposureGenerated$inboundSchema: z.ZodType< + DeploymentDetailResponseExposureGenerated, + unknown +> = z.object({ + certificate: z.union([ + z.lazy(() => + DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema), + z.lazy(() => + DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema + ), + z.lazy(() => DeploymentDetailResponseCertificateNone1$inboundSchema), + ]), + mode: DeploymentDetailResponseModeGenerated$inboundSchema, + route: z.union([ + z.lazy(() => DeploymentDetailResponseRouteIngress1$inboundSchema), + z.lazy(() => DeploymentDetailResponseRouteGateway1$inboundSchema), + ]), +}); + +export function deploymentDetailResponseExposureGeneratedFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseExposureGenerated, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseExposureGenerated$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseExposureGenerated' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseModeDisabled$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseModeDisabled +> = z.enum(DeploymentDetailResponseModeDisabled); + +/** @internal */ +export const DeploymentDetailResponseExposureDisabled$inboundSchema: z.ZodType< + DeploymentDetailResponseExposureDisabled, + unknown +> = z.object({ + mode: DeploymentDetailResponseModeDisabled$inboundSchema, +}); + +export function deploymentDetailResponseExposureDisabledFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseExposureDisabled, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseExposureDisabled$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseExposureDisabled' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseExposureUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseExposureUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseExposureCustom$inboundSchema), + z.lazy(() => DeploymentDetailResponseExposureGenerated$inboundSchema), + z.lazy(() => DeploymentDetailResponseExposureDisabled$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseExposureUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseExposureUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseExposureUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseKubernetes$inboundSchema: z.ZodType< + DeploymentDetailResponseKubernetes, + unknown +> = z.object({ + cluster: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseCluster$inboundSchema), + z.any(), + ]), + ).optional(), + exposure: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseExposureCustom$inboundSchema), + z.lazy(() => DeploymentDetailResponseExposureGenerated$inboundSchema), + z.lazy(() => DeploymentDetailResponseExposureDisabled$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function deploymentDetailResponseKubernetesFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseKubernetes$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseKubernetes' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseKubernetesUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseKubernetesUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseKubernetes$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseKubernetesUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseKubernetesUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseKubernetesUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseKubernetesUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTypeByoVnetAzure$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseTypeByoVnetAzure +> = z.enum(DeploymentDetailResponseTypeByoVnetAzure); + +/** @internal */ +export const DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema: + z.ZodType = z.object({ + application_gateway_subnet_name: z.nullable(z.string()).optional(), + private_endpoint_subnet_name: z.nullable(z.string()).optional(), + private_subnet_name: z.string(), + public_subnet_name: z.string(), + type: DeploymentDetailResponseTypeByoVnetAzure$inboundSchema, + vnet_resource_id: z.string(), + }).transform((v) => { + return remap$(v, { + "application_gateway_subnet_name": "applicationGatewaySubnetName", + "private_endpoint_subnet_name": "privateEndpointSubnetName", + "private_subnet_name": "privateSubnetName", + "public_subnet_name": "publicSubnetName", + "vnet_resource_id": "vnetResourceId", + }); + }); + +export function deploymentDetailResponseNetworkByoVnetAzureFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseNetworkByoVnetAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseNetworkByoVnetAzure' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTypeByoVpcGcp$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseTypeByoVpcGcp +> = z.enum(DeploymentDetailResponseTypeByoVpcGcp); + +/** @internal */ +export const DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema: z.ZodType< + DeploymentDetailResponseNetworkByoVpcGcp, + unknown +> = z.object({ + network_name: z.string(), + region: z.string(), + subnet_name: z.string(), + type: DeploymentDetailResponseTypeByoVpcGcp$inboundSchema, +}).transform((v) => { + return remap$(v, { + "network_name": "networkName", + "subnet_name": "subnetName", + }); +}); + +export function deploymentDetailResponseNetworkByoVpcGcpFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseNetworkByoVpcGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseNetworkByoVpcGcp' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTypeByoVpcAws$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseTypeByoVpcAws +> = z.enum(DeploymentDetailResponseTypeByoVpcAws); + +/** @internal */ +export const DeploymentDetailResponseNetworkByoVpcAws$inboundSchema: z.ZodType< + DeploymentDetailResponseNetworkByoVpcAws, + unknown +> = z.object({ + private_subnet_ids: z.array(z.string()), + public_subnet_ids: z.array(z.string()), + security_group_ids: z.array(z.string()).optional(), + type: DeploymentDetailResponseTypeByoVpcAws$inboundSchema, + vpc_id: z.string(), +}).transform((v) => { + return remap$(v, { + "private_subnet_ids": "privateSubnetIds", + "public_subnet_ids": "publicSubnetIds", + "security_group_ids": "securityGroupIds", + "vpc_id": "vpcId", + }); +}); + +export function deploymentDetailResponseNetworkByoVpcAwsFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseNetworkByoVpcAws, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseNetworkByoVpcAws$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseNetworkByoVpcAws' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTypeCreate$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseTypeCreate +> = z.enum(DeploymentDetailResponseTypeCreate); + +/** @internal */ +export const DeploymentDetailResponseNetworkCreate$inboundSchema: z.ZodType< + DeploymentDetailResponseNetworkCreate, + unknown +> = z.object({ + availability_zones: z.int().optional(), + cidr: z.nullable(z.string()).optional(), + type: DeploymentDetailResponseTypeCreate$inboundSchema, +}).transform((v) => { + return remap$(v, { + "availability_zones": "availabilityZones", + }); +}); + +export function deploymentDetailResponseNetworkCreateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseNetworkCreate$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseNetworkCreate' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTypeUseDefault$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseTypeUseDefault +> = z.enum(DeploymentDetailResponseTypeUseDefault); + +/** @internal */ +export const DeploymentDetailResponseNetworkUseDefault$inboundSchema: z.ZodType< + DeploymentDetailResponseNetworkUseDefault, + unknown +> = z.object({ + type: DeploymentDetailResponseTypeUseDefault$inboundSchema, +}); + +export function deploymentDetailResponseNetworkUseDefaultFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseNetworkUseDefault, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseNetworkUseDefault$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseNetworkUseDefault' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseNetworkUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseNetworkUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseNetworkByoVpcAws$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkUseDefault$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkCreate$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseNetworkUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseNetworkUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseNetworkUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseTelemetry$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseTelemetry +> = z.enum(DeploymentDetailResponseTelemetry); + +/** @internal */ +export const DeploymentDetailResponseUpdates$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseUpdates +> = z.enum(DeploymentDetailResponseUpdates); + +/** @internal */ +export const DeploymentDetailResponseStackSettings$inboundSchema: z.ZodType< + DeploymentDetailResponseStackSettings, + unknown +> = z.object({ + compute: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseCompute$inboundSchema), + z.any(), + ]), + ).optional(), + deploymentModel: DeploymentDetailResponseDeploymentModel$inboundSchema + .optional(), + domains: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseDomains$inboundSchema), + z.any(), + ]), + ).optional(), + externalBindings: z.nullable( + z.lazy(() => DeploymentDetailResponseExternalBindings$inboundSchema), + ).optional(), + heartbeats: DeploymentDetailResponseHeartbeats$inboundSchema.optional(), + kubernetes: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseKubernetes$inboundSchema), + z.any(), + ]), + ).optional(), + network: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseNetworkByoVpcAws$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkUseDefault$inboundSchema), + z.lazy(() => DeploymentDetailResponseNetworkCreate$inboundSchema), + z.any(), + ]), + ).optional(), + telemetry: DeploymentDetailResponseTelemetry$inboundSchema.optional(), + updates: DeploymentDetailResponseUpdates$inboundSchema.optional(), +}); + +export function deploymentDetailResponseStackSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseStackSettings' from JSON`, + ); +} /** @internal */ -export const DeploymentDetailResponsePlatform$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponsePlatform -> = z.enum(DeploymentDetailResponsePlatform); +export const DeploymentDetailResponseStackStatePlatform$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseStackStatePlatform, + ); /** @internal */ -export const DeploymentDetailResponseBasePlatform$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseBasePlatform -> = z.enum(DeploymentDetailResponseBasePlatform); +export const DeploymentDetailResponseStackStateConfig$inboundSchema: z.ZodType< + DeploymentDetailResponseStackStateConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function deploymentDetailResponseStackStateConfigFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseStackStateConfig, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseStackStateConfig$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseStackStateConfig' from JSON`, + ); +} /** @internal */ -export const DeploymentDetailResponsePlatformTest$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponsePlatformTest -> = z.enum(DeploymentDetailResponsePlatformTest); +export const DeploymentDetailResponseControllerPlatformEnum$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseControllerPlatformEnum, + ); /** @internal */ -export const DeploymentDetailResponseEnvironmentInfoTest$inboundSchema: - z.ZodType = z.object({ - testId: z.string(), - platform: DeploymentDetailResponsePlatformTest$inboundSchema, - }); +export const DeploymentDetailResponseControllerPlatformUnion$inboundSchema: + z.ZodType = z.union( + [DeploymentDetailResponseControllerPlatformEnum$inboundSchema, z.any()], + ); -export function deploymentDetailResponseEnvironmentInfoTestFromJSON( +export function deploymentDetailResponseControllerPlatformUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseEnvironmentInfoTest, + DeploymentDetailResponseControllerPlatformUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseEnvironmentInfoTest$inboundSchema.parse( + DeploymentDetailResponseControllerPlatformUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseEnvironmentInfoTest' from JSON`, + `Failed to parse 'DeploymentDetailResponseControllerPlatformUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePlatformLocal$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponsePlatformLocal -> = z.enum(DeploymentDetailResponsePlatformLocal); - -/** @internal */ -export const DeploymentDetailResponseEnvironmentInfoLocal$inboundSchema: - z.ZodType = z.object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: DeploymentDetailResponsePlatformLocal$inboundSchema, +export const DeploymentDetailResponseStackStateDependency$inboundSchema: + z.ZodType = z.object({ + id: z.string(), + type: z.string(), }); -export function deploymentDetailResponseEnvironmentInfoLocalFromJSON( +export function deploymentDetailResponseStackStateDependencyFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseEnvironmentInfoLocal, + DeploymentDetailResponseStackStateDependency, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseEnvironmentInfoLocal$inboundSchema.parse( + DeploymentDetailResponseStackStateDependency$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseEnvironmentInfoLocal' from JSON`, + `Failed to parse 'DeploymentDetailResponseStackStateDependency' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePlatformAzure$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponsePlatformAzure -> = z.enum(DeploymentDetailResponsePlatformAzure); - -/** @internal */ -export const DeploymentDetailResponseEnvironmentInfoAzure$inboundSchema: - z.ZodType = z.object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: DeploymentDetailResponsePlatformAzure$inboundSchema, - }); +export const DeploymentDetailResponseErrorStackState$inboundSchema: z.ZodType< + DeploymentDetailResponseErrorStackState, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function deploymentDetailResponseEnvironmentInfoAzureFromJSON( +export function deploymentDetailResponseErrorStackStateFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseEnvironmentInfoAzure, + DeploymentDetailResponseErrorStackState, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseEnvironmentInfoAzure$inboundSchema.parse( + DeploymentDetailResponseErrorStackState$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseEnvironmentInfoAzure' from JSON`, + `Failed to parse 'DeploymentDetailResponseErrorStackState' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePlatformGcp$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponsePlatformGcp -> = z.enum(DeploymentDetailResponsePlatformGcp); +export const DeploymentDetailResponseErrorUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseErrorUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseErrorStackState$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseErrorUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseErrorUnion' from JSON`, + ); +} /** @internal */ -export const DeploymentDetailResponseEnvironmentInfoGcp$inboundSchema: - z.ZodType = z.object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: DeploymentDetailResponsePlatformGcp$inboundSchema, - }); +export const DeploymentDetailResponseLifecycleStackStateEnum$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponseLifecycleStackStateEnum, + ); + +/** @internal */ +export const DeploymentDetailResponseLifecycleUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseLifecycleUnion, + unknown +> = z.union([ + DeploymentDetailResponseLifecycleStackStateEnum$inboundSchema, + z.any(), +]); + +export function deploymentDetailResponseLifecycleUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseLifecycleUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseLifecycleUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseOutputs$inboundSchema: z.ZodType< + DeploymentDetailResponseOutputs, + unknown +> = collectExtraKeys$( + z.object({ + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function deploymentDetailResponseOutputsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => DeploymentDetailResponseOutputs$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseOutputs' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseOutputsUnion$inboundSchema: z.ZodType< + DeploymentDetailResponseOutputsUnion, + unknown +> = z.union([ + z.lazy(() => DeploymentDetailResponseOutputs$inboundSchema), + z.any(), +]); + +export function deploymentDetailResponseOutputsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseOutputsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseOutputsUnion' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePreviousConfig$inboundSchema: z.ZodType< + DeploymentDetailResponsePreviousConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); -export function deploymentDetailResponseEnvironmentInfoGcpFromJSON( +export function deploymentDetailResponsePreviousConfigFromJSON( jsonString: string, -): SafeParseResult< - DeploymentDetailResponseEnvironmentInfoGcp, - SDKValidationError -> { +): SafeParseResult { return safeParse( jsonString, (x) => - DeploymentDetailResponseEnvironmentInfoGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseEnvironmentInfoGcp' from JSON`, + DeploymentDetailResponsePreviousConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreviousConfig' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePlatformAws$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponsePlatformAws -> = z.enum(DeploymentDetailResponsePlatformAws); - -/** @internal */ -export const DeploymentDetailResponseEnvironmentInfoAws$inboundSchema: - z.ZodType = z.object({ - accountId: z.string(), - region: z.string(), - platform: DeploymentDetailResponsePlatformAws$inboundSchema, - }); +export const DeploymentDetailResponsePreviousConfigUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => DeploymentDetailResponsePreviousConfig$inboundSchema), + z.any(), + ]); -export function deploymentDetailResponseEnvironmentInfoAwsFromJSON( +export function deploymentDetailResponsePreviousConfigUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseEnvironmentInfoAws, + DeploymentDetailResponsePreviousConfigUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseEnvironmentInfoAws$inboundSchema.parse( + DeploymentDetailResponsePreviousConfigUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseEnvironmentInfoAws' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreviousConfigUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseEnvironmentInfoUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => DeploymentDetailResponseEnvironmentInfoGcp$inboundSchema), - z.lazy(() => DeploymentDetailResponseEnvironmentInfoAzure$inboundSchema), - z.lazy(() => DeploymentDetailResponseEnvironmentInfoLocal$inboundSchema), - z.lazy(() => DeploymentDetailResponseEnvironmentInfoAws$inboundSchema), - z.lazy(() => DeploymentDetailResponseEnvironmentInfoTest$inboundSchema), - z.any(), - ]); +export const DeploymentDetailResponseStackStateStatus$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponseStackStateStatus +> = z.enum(DeploymentDetailResponseStackStateStatus); -export function deploymentDetailResponseEnvironmentInfoUnionFromJSON( +/** @internal */ +export const DeploymentDetailResponseStackStateResources$inboundSchema: + z.ZodType = z.object({ + _internal: z.nullable(z.any()).optional(), + config: z.lazy(() => + DeploymentDetailResponseStackStateConfig$inboundSchema + ), + controllerPlatform: z.nullable( + z.union([ + DeploymentDetailResponseControllerPlatformEnum$inboundSchema, + z.any(), + ]), + ).optional(), + dependencies: z.array( + z.lazy(() => DeploymentDetailResponseStackStateDependency$inboundSchema), + ).optional(), + error: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseErrorStackState$inboundSchema), + z.any(), + ]), + ).optional(), + lastFailedState: z.nullable(z.any()).optional(), + lifecycle: z.nullable( + z.union([ + DeploymentDetailResponseLifecycleStackStateEnum$inboundSchema, + z.any(), + ]), + ).optional(), + outputs: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponseOutputs$inboundSchema), + z.any(), + ]), + ).optional(), + previousConfig: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponsePreviousConfig$inboundSchema), + z.any(), + ]), + ).optional(), + remoteBindingParams: z.nullable(z.any()).optional(), + retryAttempt: z.int().optional(), + status: DeploymentDetailResponseStackStateStatus$inboundSchema, + type: z.string(), + }).transform((v) => { + return remap$(v, { + "_internal": "internal", + }); + }); + +export function deploymentDetailResponseStackStateResourcesFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseEnvironmentInfoUnion, + DeploymentDetailResponseStackStateResources, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseEnvironmentInfoUnion$inboundSchema.parse( + DeploymentDetailResponseStackStateResources$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseEnvironmentInfoUnion' from JSON`, + `Failed to parse 'DeploymentDetailResponseStackStateResources' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePoolsAutoscale$inboundSchema: z.ZodType< - DeploymentDetailResponsePoolsAutoscale, +export const DeploymentDetailResponseStackState$inboundSchema: z.ZodType< + DeploymentDetailResponseStackState, unknown > = z.object({ - machine: z.nullable(z.string()).optional(), - max: z.int(), - min: z.int(), - mode: z.literal("autoscale"), + platform: DeploymentDetailResponseStackStatePlatform$inboundSchema, + resourcePrefix: z.string(), + resources: z.record( + z.string(), + z.lazy(() => DeploymentDetailResponseStackStateResources$inboundSchema), + ), }); -export function deploymentDetailResponsePoolsAutoscaleFromJSON( +export function deploymentDetailResponseStackStateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, (x) => - DeploymentDetailResponsePoolsAutoscale$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePoolsAutoscale' from JSON`, + DeploymentDetailResponseStackState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponseStackState' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePoolsFixed$inboundSchema: z.ZodType< - DeploymentDetailResponsePoolsFixed, - unknown -> = z.object({ - machine: z.nullable(z.string()).optional(), - machines: z.int(), - mode: z.literal("fixed"), -}); +export const DeploymentDetailResponsePendingPreparedStackTypeStringList$inboundSchema: + z.ZodEnum = + z.enum(DeploymentDetailResponsePendingPreparedStackTypeStringList); -export function deploymentDetailResponsePoolsFixedFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackDefaultStringList$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackDefaultStringList, + unknown + > = z.object({ + type: + DeploymentDetailResponsePendingPreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }); + +export function deploymentDetailResponsePendingPreparedStackDefaultStringListFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackDefaultStringList, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponsePoolsFixed$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePoolsFixed' from JSON`, + DeploymentDetailResponsePendingPreparedStackDefaultStringList$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePoolsUnion$inboundSchema: z.ZodType< - DeploymentDetailResponsePoolsUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponsePoolsFixed$inboundSchema), - z.lazy(() => DeploymentDetailResponsePoolsAutoscale$inboundSchema), -]); +export const DeploymentDetailResponsePendingPreparedStackTypeBoolean$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackTypeBoolean); -export function deploymentDetailResponsePoolsUnionFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackDefaultBoolean$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackDefaultBoolean, + unknown + > = z.object({ + type: DeploymentDetailResponsePendingPreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), + }); + +export function deploymentDetailResponsePendingPreparedStackDefaultBooleanFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackDefaultBoolean, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponsePoolsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePoolsUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackDefaultBoolean$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCompute$inboundSchema: z.ZodType< - DeploymentDetailResponseCompute, - unknown -> = z.object({ - pools: z.record( - z.string(), - z.union([ - z.lazy(() => DeploymentDetailResponsePoolsFixed$inboundSchema), - z.lazy(() => DeploymentDetailResponsePoolsAutoscale$inboundSchema), - ]), - ).optional(), -}); - -export function deploymentDetailResponseComputeFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => DeploymentDetailResponseCompute$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseCompute' from JSON`, - ); -} +export const DeploymentDetailResponsePendingPreparedStackTypeNumber$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackTypeNumber); /** @internal */ -export const DeploymentDetailResponseComputeUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseComputeUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseCompute$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackDefaultNumber$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackDefaultNumber, + unknown + > = z.object({ + type: DeploymentDetailResponsePendingPreparedStackTypeNumber$inboundSchema, + value: z.string(), + }); -export function deploymentDetailResponseComputeUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackDefaultNumberFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackDefaultNumber, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseComputeUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseComputeUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackDefaultNumber$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDeploymentModel$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseDeploymentModel -> = z.enum(DeploymentDetailResponseDeploymentModel); +export const DeploymentDetailResponsePendingPreparedStackTypeString$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackTypeString); /** @internal */ -export const DeploymentDetailResponseAws$inboundSchema: z.ZodType< - DeploymentDetailResponseAws, - unknown -> = z.object({ - certificateArn: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackDefaultString$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackDefaultString, + unknown + > = z.object({ + type: DeploymentDetailResponsePendingPreparedStackTypeString$inboundSchema, + value: z.string(), + }); -export function deploymentDetailResponseAwsFromJSON( +export function deploymentDetailResponsePendingPreparedStackDefaultStringFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackDefaultString, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseAws' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackDefaultString$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseAwsUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseAwsUnion, - unknown -> = z.union([z.lazy(() => DeploymentDetailResponseAws$inboundSchema), z.any()]); +export const DeploymentDetailResponsePendingPreparedStackDefaultUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseAwsUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackDefaultUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackDefaultUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseAwsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseAwsUnion' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackDefaultUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseAzureStackSettings$inboundSchema: - z.ZodType = z.object({ - keyVaultCertificateId: z.string(), - keyVaultResourceId: z.nullable(z.string()).optional(), - }); +export const DeploymentDetailResponsePendingPreparedStackTypeEnvEnum$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackTypeEnvEnum); -export function deploymentDetailResponseAzureStackSettingsFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackTypeUnion$inboundSchema: + z.ZodType = z + .union([ + DeploymentDetailResponsePendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]); + +export function deploymentDetailResponsePendingPreparedStackTypeUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseAzureStackSettings, + DeploymentDetailResponsePendingPreparedStackTypeUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseAzureStackSettings$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStackTypeUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseAzureStackSettings' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseAzureUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseAzureUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseAzureStackSettings$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackEnv$inboundSchema: + z.ZodType = z + .object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + DeploymentDetailResponsePendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]), + ).optional(), + }); -export function deploymentDetailResponseAzureUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackEnvFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackEnv, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseAzureUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseAzureUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackEnv$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackEnv' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseGcpStackSettings$inboundSchema: z.ZodType< - DeploymentDetailResponseGcpStackSettings, - unknown -> = z.object({ - certificateName: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackKind$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePendingPreparedStackKind, + ); -export function deploymentDetailResponseGcpStackSettingsFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackPlatform$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackPlatform); + +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackProvidedBy$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackProvidedBy); + +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackValidation$inboundSchema: + z.ZodType = z + .object({ + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), + }); + +export function deploymentDetailResponsePendingPreparedStackValidationFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseGcpStackSettings, + DeploymentDetailResponsePendingPreparedStackValidation, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseGcpStackSettings$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseGcpStackSettings' from JSON`, + DeploymentDetailResponsePendingPreparedStackValidation$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackValidation' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseGcpUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseGcpUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseGcpStackSettings$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackValidationUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackValidationUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackValidation$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseGcpUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackValidationUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackValidationUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseGcpUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseGcpUnion' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackValidationUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTlsSecretRef$inboundSchema: z.ZodType< - DeploymentDetailResponseTlsSecretRef, - unknown -> = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackInput$inboundSchema: + z.ZodType = z + .object({ + default: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackEnv$inboundSchema + ), + ).optional(), + id: z.string(), + kind: DeploymentDetailResponsePendingPreparedStackKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array( + DeploymentDetailResponsePendingPreparedStackPlatform$inboundSchema, + ), + ).optional(), + providedBy: z.array( + DeploymentDetailResponsePendingPreparedStackProvidedBy$inboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackValidation$inboundSchema + ), + z.any(), + ]), + ).optional(), + }); -export function deploymentDetailResponseTlsSecretRefFromJSON( +export function deploymentDetailResponsePendingPreparedStackInputFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackInput, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseTlsSecretRef$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseTlsSecretRef' from JSON`, + DeploymentDetailResponsePendingPreparedStackInput$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackInput' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDomainsKubernetes$inboundSchema: z.ZodType< - DeploymentDetailResponseDomainsKubernetes, - unknown -> = z.object({ - tlsSecretRef: z.lazy(() => - DeploymentDetailResponseTlsSecretRef$inboundSchema - ), -}); +export const DeploymentDetailResponsePendingPreparedStackManagementEnum$inboundSchema: + z.ZodEnum = + z.enum(DeploymentDetailResponsePendingPreparedStackManagementEnum); -export function deploymentDetailResponseDomainsKubernetesFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackOverrideAwResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function deploymentDetailResponsePendingPreparedStackOverrideAwResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseDomainsKubernetes, + DeploymentDetailResponsePendingPreparedStackOverrideAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseDomainsKubernetes$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseDomainsKubernetes' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDomainsKubernetesUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => DeploymentDetailResponseDomainsKubernetes$inboundSchema), - z.any(), - ]); +export const DeploymentDetailResponsePendingPreparedStackOverrideAwStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAwStack, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseDomainsKubernetesUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAwStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseDomainsKubernetesUnion, + DeploymentDetailResponsePendingPreparedStackOverrideAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseDomainsKubernetesUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseDomainsKubernetesUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAwStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDomainsCertificate$inboundSchema: - z.ZodType = z.object({ - aws: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseAws$inboundSchema), - z.any(), - ]), - ).optional(), - azure: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseAzureStackSettings$inboundSchema), - z.any(), - ]), - ).optional(), - gcp: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseGcpStackSettings$inboundSchema), - z.any(), - ]), +export const DeploymentDetailResponsePendingPreparedStackOverrideAwBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAwBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAwResource$inboundSchema ).optional(), - kubernetes: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseDomainsKubernetes$inboundSchema), - z.any(), - ]), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAwStack$inboundSchema ).optional(), }); -export function deploymentDetailResponseDomainsCertificateFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAwBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseDomainsCertificate, + DeploymentDetailResponsePendingPreparedStackOverrideAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseDomainsCertificate$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseDomainsCertificate' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCustomDomains$inboundSchema: z.ZodType< - DeploymentDetailResponseCustomDomains, - unknown -> = z.object({ - certificate: z.lazy(() => - DeploymentDetailResponseDomainsCertificate$inboundSchema - ), - domain: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackOverrideEffect$inboundSchema: + z.ZodEnum = + z.enum(DeploymentDetailResponsePendingPreparedStackOverrideEffect); -export function deploymentDetailResponseCustomDomainsFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackOverrideAwGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAwGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function deploymentDetailResponsePendingPreparedStackOverrideAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideAwGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseCustomDomains$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseCustomDomains' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideAwGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseModeLoadBalancer$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseModeLoadBalancer -> = z.enum(DeploymentDetailResponseModeLoadBalancer); - -/** @internal */ -export const DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema: - z.ZodType = - z.object({ - cnameTarget: z.string(), - mode: DeploymentDetailResponseModeLoadBalancer$inboundSchema, +export const DeploymentDetailResponsePendingPreparedStackOverrideAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + DeploymentDetailResponsePendingPreparedStackOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentDetailResponsePublicEndpointTargetLoadBalancerFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAwFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponsePublicEndpointTargetLoadBalancer, + DeploymentDetailResponsePendingPreparedStackOverrideAw, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema + DeploymentDetailResponsePendingPreparedStackOverrideAw$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePublicEndpointTargetLoadBalancer' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseModeMachineAddresses$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseModeMachineAddresses, +export const DeploymentDetailResponsePendingPreparedStackOverrideAzureResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); + +export function deploymentDetailResponsePendingPreparedStackOverrideAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePendingPreparedStackOverrideAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAzureResource' from JSON`, ); +} /** @internal */ -export const DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema: +export const DeploymentDetailResponsePendingPreparedStackOverrideAzureStack$inboundSchema: z.ZodType< - DeploymentDetailResponsePublicEndpointTargetMachineAddresses, + DeploymentDetailResponsePendingPreparedStackOverrideAzureStack, unknown > = z.object({ - mode: DeploymentDetailResponseModeMachineAddresses$inboundSchema, + scope: z.string(), }); -export function deploymentDetailResponsePublicEndpointTargetMachineAddressesFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAzureStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponsePublicEndpointTargetMachineAddresses, + DeploymentDetailResponsePendingPreparedStackOverrideAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema + DeploymentDetailResponsePendingPreparedStackOverrideAzureStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePublicEndpointTargetMachineAddresses' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePublicEndpointTargetUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema - ), - z.lazy(() => - DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema - ), - z.any(), - ]); +export const DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAzureStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponsePublicEndpointTargetUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponsePublicEndpointTargetUnion, + DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponsePublicEndpointTargetUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponsePublicEndpointTargetUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDomains$inboundSchema: z.ZodType< - DeploymentDetailResponseDomains, - unknown -> = z.object({ - customDomains: z.nullable( - z.record( - z.string(), - z.lazy(() => DeploymentDetailResponseCustomDomains$inboundSchema), - ), - ).optional(), - publicEndpointTarget: z.nullable( - z.union([ - z.lazy(() => - DeploymentDetailResponsePublicEndpointTargetLoadBalancer$inboundSchema - ), - z.lazy(() => - DeploymentDetailResponsePublicEndpointTargetMachineAddresses$inboundSchema - ), - z.any(), - ]), - ).optional(), -}); +export const DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseDomainsFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseDomains$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseDomains' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDomainsUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseDomainsUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseDomains$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackOverrideAzure$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideAzure, + unknown + > = z.object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseDomainsUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideAzure, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseDomainsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseDomainsUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExternalBindings$inboundSchema: z.ZodType< - DeploymentDetailResponseExternalBindings, - unknown -> = z.object({}); +export const DeploymentDetailResponsePendingPreparedStackOverrideConditionResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseExternalBindingsFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExternalBindings, + DeploymentDetailResponsePendingPreparedStackOverrideConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExternalBindings$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExternalBindings' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseHeartbeats$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseHeartbeats -> = z.enum(DeploymentDetailResponseHeartbeats); - -/** @internal */ -export const DeploymentDetailResponseCloud$inboundSchema: z.ZodType< - DeploymentDetailResponseCloud, - unknown -> = z.object({ - accountId: z.nullable(z.string()).optional(), - clusterId: z.nullable(z.string()).optional(), - clusterName: z.nullable(z.string()).optional(), - projectId: z.nullable(z.string()).optional(), - region: z.nullable(z.string()).optional(), - resourceGroup: z.nullable(z.string()).optional(), - subscriptionId: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseCloudFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseCloud$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseCloud' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCloudUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseCloudUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseCloud$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackOverrideGcpResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseCloudUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideGcpResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseCloudUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseCloudUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOwnership$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseOwnership -> = z.enum(DeploymentDetailResponseOwnership); - -/** @internal */ -export const DeploymentDetailResponseCluster$inboundSchema: z.ZodType< - DeploymentDetailResponseCluster, - unknown -> = z.object({ - cloud: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseCloud$inboundSchema), - z.any(), - ]), - ).optional(), - namespace: z.nullable(z.string()).optional(), - ownership: DeploymentDetailResponseOwnership$inboundSchema, -}); +export const DeploymentDetailResponsePendingPreparedStackOverrideConditionStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseClusterFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseCluster$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseCluster' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackOverrideConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseClusterUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseClusterUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseCluster$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseClusterUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseClusterUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseClusterUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateNone2$inboundSchema: z.ZodType< - DeploymentDetailResponseCertificateNone2, - unknown -> = z.object({ - mode: z.literal("none"), -}); +export const DeploymentDetailResponsePendingPreparedStackOverrideGcpStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseCertificateNone2FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideGcpStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateNone2, + DeploymentDetailResponsePendingPreparedStackOverrideGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateNone2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateNone2' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideGcpStack' from JSON`, ); } -/** @internal */ -export const DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema: - z.ZodType = z - .object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), - }); +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideGcpStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseCertificateManagedTLSSecret2FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateManagedTLSSecret2, + DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateManagedTLSSecret2' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema: - z.ZodType = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), +export const DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentDetailResponseCertificateAwsAcmArn2FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateAwsAcmArn2, + DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateAwsAcmArn2' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema: - z.ZodType = z - .object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), +export const DeploymentDetailResponsePendingPreparedStackOverrideGcp$inboundSchema: + z.ZodType = + z.object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentDetailResponseCertificateManagedAcmImport2FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideGcpFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateManagedAcmImport2, + DeploymentDetailResponsePendingPreparedStackOverrideGcp, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateManagedAcmImport2' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverrideGcp$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema: - z.ZodType = z - .object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), - }); +export const DeploymentDetailResponsePendingPreparedStackOverridePlatforms$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackOverridePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverrideGcp$inboundSchema + )), + ).optional(), + }); -export function deploymentDetailResponseCertificateTLSSecretRef2FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverridePlatformsFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateTLSSecretRef2, + DeploymentDetailResponsePendingPreparedStackOverridePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateTLSSecretRef2' from JSON`, + DeploymentDetailResponsePendingPreparedStackOverridePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateUnion2$inboundSchema: z.ZodType< - DeploymentDetailResponseCertificateUnion2, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema), - z.lazy(() => - DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema), - z.lazy(() => - DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateNone2$inboundSchema), -]); +export const DeploymentDetailResponsePendingPreparedStackOverride$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverridePlatforms$inboundSchema + ), + }); -export function deploymentDetailResponseCertificateUnion2FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateUnion2, + DeploymentDetailResponsePendingPreparedStackOverride, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateUnion2$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStackOverride$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseCertificateUnion2' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverride' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseModeCustom$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseModeCustom -> = z.enum(DeploymentDetailResponseModeCustom); - -/** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema: - z.ZodEnum< - typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4 - > = z.enum( - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema: +export const DeploymentDetailResponsePendingPreparedStackOverrideUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4, + DeploymentDetailResponsePendingPreparedStackOverrideUnion, unknown - > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema, - }); + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverride$inboundSchema + ), + z.string(), + ]); -export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers4FromJSON( +export function deploymentDetailResponsePendingPreparedStackOverrideUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4, + DeploymentDetailResponsePendingPreparedStackOverrideUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + DeploymentDetailResponsePendingPreparedStackOverrideUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderGkeGatewayEnum4$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderGkeGatewayEnum4, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderGkeGateway4$inboundSchema: - z.ZodType = z.object({ - provider: DeploymentDetailResponseProviderGkeGatewayEnum4$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), - }); +export const DeploymentDetailResponsePendingPreparedStackManagement2$inboundSchema: + z.ZodType = + z.object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackOverride$inboundSchema + ), + z.string(), + ])), + ), + }); -export function deploymentDetailResponseProviderGkeGateway4FromJSON( +export function deploymentDetailResponsePendingPreparedStackManagement2FromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderGkeGateway4, + DeploymentDetailResponsePendingPreparedStackManagement2, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderGkeGateway4$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProviderGkeGateway4' from JSON`, + DeploymentDetailResponsePendingPreparedStackManagement2$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackManagement2' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderAwsAlbEnum4$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderAwsAlbEnum4, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAwsAlb4$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAwsAlb4, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentDetailResponseProviderAwsAlbEnum4$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendAwResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseProviderAwsAlb4FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAwResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAwsAlb4, + DeploymentDetailResponsePendingPreparedStackExtendAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAwsAlb4$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProviderAwsAlb4' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderUnion4$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderUnion4, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb4$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway4$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackExtendAwStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAwStack, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseProviderUnion4FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendAwStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderUnion4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderUnion4' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseRouteGateway2$inboundSchema: z.ZodType< - DeploymentDetailResponseRouteGateway2, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb4$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers4$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway4$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendAwBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAwBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAwStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseRouteGateway2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => - DeploymentDetailResponseRouteGateway2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseRouteGateway2' from JSON`, - ); -} - -/** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema: - z.ZodEnum< - typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3 - > = z.enum( - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3, + (x) => + DeploymentDetailResponsePendingPreparedStackExtendAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAwBinding' from JSON`, ); +} /** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema: +export const DeploymentDetailResponsePendingPreparedStackExtendEffect$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackExtendEffect); + +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackExtendAwGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3, + DeploymentDetailResponsePendingPreparedStackExtendAwGrant, unknown > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema, + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers3FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAwGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3, + DeploymentDetailResponsePendingPreparedStackExtendAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + DeploymentDetailResponsePendingPreparedStackExtendAwGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderGkeGatewayEnum3$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderGkeGatewayEnum3, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderGkeGateway3$inboundSchema: - z.ZodType = z.object({ - provider: DeploymentDetailResponseProviderGkeGatewayEnum3$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), - }); +export const DeploymentDetailResponsePendingPreparedStackExtendAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + DeploymentDetailResponsePendingPreparedStackExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseProviderGkeGateway3FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAwFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderGkeGateway3, + DeploymentDetailResponsePendingPreparedStackExtendAw, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderGkeGateway3$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStackExtendAw$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProviderGkeGateway3' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderAwsAlbEnum3$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderAwsAlbEnum3, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAwsAlb3$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAwsAlb3, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentDetailResponseProviderAwsAlbEnum3$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendAzureResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); -export function deploymentDetailResponseProviderAwsAlb3FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAwsAlb3, + DeploymentDetailResponsePendingPreparedStackExtendAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAwsAlb3$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProviderAwsAlb3' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderUnion3$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderUnion3, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb3$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway3$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackExtendAzureStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); -export function deploymentDetailResponseProviderUnion3FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendAzureStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderUnion3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderUnion3' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseRouteIngress2$inboundSchema: z.ZodType< - DeploymentDetailResponseRouteIngress2, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb3$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers3$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway3$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendAzureBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAzureStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseRouteIngress2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendAzureBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseRouteIngress2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseRouteIngress2' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseRouteUnion2$inboundSchema: z.ZodType< - DeploymentDetailResponseRouteUnion2, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseRouteIngress2$inboundSchema), - z.lazy(() => DeploymentDetailResponseRouteGateway2$inboundSchema), -]); +export const DeploymentDetailResponsePendingPreparedStackExtendAzureGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseRouteUnion2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendAzureGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseRouteUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseRouteUnion2' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExposureCustom$inboundSchema: z.ZodType< - DeploymentDetailResponseExposureCustom, - unknown -> = z.object({ - certificate: z.union([ - z.lazy(() => - DeploymentDetailResponseCertificateTLSSecretRef2$inboundSchema - ), - z.lazy(() => - DeploymentDetailResponseCertificateManagedAcmImport2$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn2$inboundSchema), - z.lazy(() => - DeploymentDetailResponseCertificateManagedTLSSecret2$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateNone2$inboundSchema), - ]), - domain: z.string(), - mode: DeploymentDetailResponseModeCustom$inboundSchema, - route: z.union([ - z.lazy(() => DeploymentDetailResponseRouteIngress2$inboundSchema), - z.lazy(() => DeploymentDetailResponseRouteGateway2$inboundSchema), - ]), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendAzure$inboundSchema: + z.ZodType = + z.object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseExposureCustomFromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendAzure, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExposureCustom$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExposureCustom' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateNone1$inboundSchema: z.ZodType< - DeploymentDetailResponseCertificateNone1, - unknown -> = z.object({ - mode: z.literal("none"), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendConditionResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseCertificateNone1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateNone1, + DeploymentDetailResponsePendingPreparedStackExtendConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateNone1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateNone1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema: - z.ZodType = z - .object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), - }); +export const DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseCertificateManagedTLSSecret1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateManagedTLSSecret1, + DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateManagedTLSSecret1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema: - z.ZodType = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), +export const DeploymentDetailResponsePendingPreparedStackExtendGcpResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -export function deploymentDetailResponseCertificateAwsAcmArn1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateAwsAcmArn1, + DeploymentDetailResponsePendingPreparedStackExtendGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateAwsAcmArn1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema: - z.ZodType = z - .object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), - }); +export const DeploymentDetailResponsePendingPreparedStackExtendConditionStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseCertificateManagedAcmImport1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendConditionStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateManagedAcmImport1, + DeploymentDetailResponsePendingPreparedStackExtendConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateManagedAcmImport1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema: - z.ZodType = z - .object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), - }); +export const DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseCertificateTLSSecretRef1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateTLSSecretRef1, + DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateTLSSecretRef1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseCertificateUnion1$inboundSchema: z.ZodType< - DeploymentDetailResponseCertificateUnion1, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema), - z.lazy(() => - DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema), - z.lazy(() => - DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateNone1$inboundSchema), -]); +export const DeploymentDetailResponsePendingPreparedStackExtendGcpStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseCertificateUnion1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendGcpStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseCertificateUnion1, + DeploymentDetailResponsePendingPreparedStackExtendGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseCertificateUnion1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseCertificateUnion1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseModeGenerated$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseModeGenerated -> = z.enum(DeploymentDetailResponseModeGenerated); - -/** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema: - z.ZodEnum< - typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2 - > = z.enum( - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema: +export const DeploymentDetailResponsePendingPreparedStackExtendGcpBinding$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2, + DeploymentDetailResponsePendingPreparedStackExtendGcpBinding, unknown > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema, + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendGcpStack$inboundSchema + ).optional(), }); -export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2, + DeploymentDetailResponsePendingPreparedStackExtendGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + DeploymentDetailResponsePendingPreparedStackExtendGcpBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderGkeGatewayEnum2$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderGkeGatewayEnum2, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderGkeGateway2$inboundSchema: - z.ZodType = z.object({ - provider: DeploymentDetailResponseProviderGkeGatewayEnum2$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), +export const DeploymentDetailResponsePendingPreparedStackExtendGcpGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function deploymentDetailResponseProviderGkeGateway2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderGkeGateway2, + DeploymentDetailResponsePendingPreparedStackExtendGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderGkeGateway2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProviderGkeGateway2' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderAwsAlbEnum2$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderAwsAlbEnum2, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAwsAlb2$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAwsAlb2, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentDetailResponseProviderAwsAlbEnum2$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackExtendGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseProviderAwsAlb2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendGcpFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAwsAlb2, + DeploymentDetailResponsePendingPreparedStackExtendGcp, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAwsAlb2$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStackExtendGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProviderAwsAlb2' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderUnion2$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderUnion2, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb2$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway2$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackExtendPlatforms$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackExtendPlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendGcp$inboundSchema + )), + ).optional(), + }); -export function deploymentDetailResponseProviderUnion2FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendPlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtendPlatforms, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderUnion2' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtendPlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseRouteGateway1$inboundSchema: z.ZodType< - DeploymentDetailResponseRouteGateway1, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb2$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers2$inboundSchema +export const DeploymentDetailResponsePendingPreparedStackExtend$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtendPlatforms$inboundSchema ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway2$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), -}); + }); -export function deploymentDetailResponseRouteGateway1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackExtend, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseRouteGateway1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseRouteGateway1' from JSON`, + DeploymentDetailResponsePendingPreparedStackExtend$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtend' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema: - z.ZodEnum< - typeof DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1 - > = z.enum( - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema: - z.ZodType< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1, - unknown - > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - DeploymentDetailResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema, - }); +export const DeploymentDetailResponsePendingPreparedStackExtendUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtend$inboundSchema + ), + z.string(), + ]); -export function deploymentDetailResponseProviderAzureApplicationGatewayForContainers1FromJSON( +export function deploymentDetailResponsePendingPreparedStackExtendUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1, + DeploymentDetailResponsePendingPreparedStackExtendUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + DeploymentDetailResponsePendingPreparedStackExtendUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderGkeGatewayEnum1$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderGkeGatewayEnum1, - ); +export const DeploymentDetailResponsePendingPreparedStackManagement1$inboundSchema: + z.ZodType = + z.object({ + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackExtend$inboundSchema + ), + z.string(), + ])), + ), + }); -/** @internal */ -export const DeploymentDetailResponseProviderGkeGateway1$inboundSchema: - z.ZodType = z.object({ - provider: DeploymentDetailResponseProviderGkeGatewayEnum1$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), - }); +export function deploymentDetailResponsePendingPreparedStackManagement1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackManagement1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePendingPreparedStackManagement1$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackManagement1' from JSON`, + ); +} -export function deploymentDetailResponseProviderGkeGateway1FromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackManagementUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackManagementUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackManagement2$inboundSchema + ), + DeploymentDetailResponsePendingPreparedStackManagementEnum$inboundSchema, + ]); + +export function deploymentDetailResponsePendingPreparedStackManagementUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderGkeGateway1, + DeploymentDetailResponsePendingPreparedStackManagementUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderGkeGateway1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProviderGkeGateway1' from JSON`, + DeploymentDetailResponsePendingPreparedStackManagementUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderAwsAlbEnum1$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseProviderAwsAlbEnum1, - ); - -/** @internal */ -export const DeploymentDetailResponseProviderAwsAlb1$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderAwsAlb1, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: DeploymentDetailResponseProviderAwsAlbEnum1$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const DeploymentDetailResponsePendingPreparedStackProfileAwResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseProviderAwsAlb1FromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAwResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProviderAwsAlb1, + DeploymentDetailResponsePendingPreparedStackProfileAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderAwsAlb1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProviderAwsAlb1' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProviderUnion1$inboundSchema: z.ZodType< - DeploymentDetailResponseProviderUnion1, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb1$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway1$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackProfileAwStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAwStack, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseProviderUnion1FromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileAwStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProviderUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProviderUnion1' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseRouteIngress1$inboundSchema: z.ZodType< - DeploymentDetailResponseRouteIngress1, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseProviderAwsAlb1$inboundSchema), - z.lazy(() => - DeploymentDetailResponseProviderAzureApplicationGatewayForContainers1$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseProviderGkeGateway1$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), -}); +export const DeploymentDetailResponsePendingPreparedStackProfileAwBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAwBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAwStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseRouteIngress1FromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileAwBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseRouteIngress1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseRouteIngress1' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseRouteUnion1$inboundSchema: z.ZodType< - DeploymentDetailResponseRouteUnion1, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseRouteIngress1$inboundSchema), - z.lazy(() => DeploymentDetailResponseRouteGateway1$inboundSchema), -]); +export const DeploymentDetailResponsePendingPreparedStackProfileEffect$inboundSchema: + z.ZodEnum = + z.enum(DeploymentDetailResponsePendingPreparedStackProfileEffect); -export function deploymentDetailResponseRouteUnion1FromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackProfileAwGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAwGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function deploymentDetailResponsePendingPreparedStackProfileAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileAwGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseRouteUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseRouteUnion1' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAwGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExposureGenerated$inboundSchema: z.ZodType< - DeploymentDetailResponseExposureGenerated, - unknown -> = z.object({ - certificate: z.union([ - z.lazy(() => - DeploymentDetailResponseCertificateTLSSecretRef1$inboundSchema - ), - z.lazy(() => - DeploymentDetailResponseCertificateManagedAcmImport1$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateAwsAcmArn1$inboundSchema), - z.lazy(() => - DeploymentDetailResponseCertificateManagedTLSSecret1$inboundSchema - ), - z.lazy(() => DeploymentDetailResponseCertificateNone1$inboundSchema), - ]), - mode: DeploymentDetailResponseModeGenerated$inboundSchema, - route: z.union([ - z.lazy(() => DeploymentDetailResponseRouteIngress1$inboundSchema), - z.lazy(() => DeploymentDetailResponseRouteGateway1$inboundSchema), - ]), -}); +export const DeploymentDetailResponsePendingPreparedStackProfileAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + DeploymentDetailResponsePendingPreparedStackProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseExposureGeneratedFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAwFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExposureGenerated, + DeploymentDetailResponsePendingPreparedStackProfileAw, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExposureGenerated$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStackProfileAw$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExposureGenerated' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseModeDisabled$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseModeDisabled -> = z.enum(DeploymentDetailResponseModeDisabled); - -/** @internal */ -export const DeploymentDetailResponseExposureDisabled$inboundSchema: z.ZodType< - DeploymentDetailResponseExposureDisabled, - unknown -> = z.object({ - mode: DeploymentDetailResponseModeDisabled$inboundSchema, -}); +export const DeploymentDetailResponsePendingPreparedStackProfileAzureResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); -export function deploymentDetailResponseExposureDisabledFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExposureDisabled, + DeploymentDetailResponsePendingPreparedStackProfileAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExposureDisabled$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExposureDisabled' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExposureUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseExposureUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseExposureCustom$inboundSchema), - z.lazy(() => DeploymentDetailResponseExposureGenerated$inboundSchema), - z.lazy(() => DeploymentDetailResponseExposureDisabled$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackProfileAzureStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); -export function deploymentDetailResponseExposureUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileAzureStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExposureUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExposureUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseKubernetes$inboundSchema: z.ZodType< - DeploymentDetailResponseKubernetes, - unknown -> = z.object({ - cluster: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseCluster$inboundSchema), - z.any(), - ]), - ).optional(), - exposure: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseExposureCustom$inboundSchema), - z.lazy(() => DeploymentDetailResponseExposureGenerated$inboundSchema), - z.lazy(() => DeploymentDetailResponseExposureDisabled$inboundSchema), - z.any(), - ]), - ).optional(), -}); +export const DeploymentDetailResponsePendingPreparedStackProfileAzureBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAzureStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseKubernetesFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileAzureBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseKubernetes$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseKubernetes' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseKubernetesUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseKubernetesUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseKubernetes$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackProfileAzureGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseKubernetesUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseKubernetesUnion, + DeploymentDetailResponsePendingPreparedStackProfileAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseKubernetesUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseKubernetesUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeByoVnetAzure$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeByoVnetAzure -> = z.enum(DeploymentDetailResponseTypeByoVnetAzure); - -/** @internal */ -export const DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema: - z.ZodType = z.object({ - application_gateway_subnet_name: z.nullable(z.string()).optional(), - private_endpoint_subnet_name: z.nullable(z.string()).optional(), - private_subnet_name: z.string(), - public_subnet_name: z.string(), - type: DeploymentDetailResponseTypeByoVnetAzure$inboundSchema, - vnet_resource_id: z.string(), - }).transform((v) => { - return remap$(v, { - "application_gateway_subnet_name": "applicationGatewaySubnetName", - "private_endpoint_subnet_name": "privateEndpointSubnetName", - "private_subnet_name": "privateSubnetName", - "public_subnet_name": "publicSubnetName", - "vnet_resource_id": "vnetResourceId", +export const DeploymentDetailResponsePendingPreparedStackProfileAzure$inboundSchema: + z.ZodType = + z.object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); - }); -export function deploymentDetailResponseNetworkByoVnetAzureFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileAzureFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseNetworkByoVnetAzure, + DeploymentDetailResponsePendingPreparedStackProfileAzure, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseNetworkByoVnetAzure' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeByoVpcGcp$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeByoVpcGcp -> = z.enum(DeploymentDetailResponseTypeByoVpcGcp); - -/** @internal */ -export const DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema: z.ZodType< - DeploymentDetailResponseNetworkByoVpcGcp, - unknown -> = z.object({ - network_name: z.string(), - region: z.string(), - subnet_name: z.string(), - type: DeploymentDetailResponseTypeByoVpcGcp$inboundSchema, -}).transform((v) => { - return remap$(v, { - "network_name": "networkName", - "subnet_name": "subnetName", +export const DeploymentDetailResponsePendingPreparedStackProfileConditionResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), }); -}); -export function deploymentDetailResponseNetworkByoVpcGcpFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseNetworkByoVpcGcp, + DeploymentDetailResponsePendingPreparedStackProfileConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseNetworkByoVpcGcp' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeByoVpcAws$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeByoVpcAws -> = z.enum(DeploymentDetailResponseTypeByoVpcAws); - -/** @internal */ -export const DeploymentDetailResponseNetworkByoVpcAws$inboundSchema: z.ZodType< - DeploymentDetailResponseNetworkByoVpcAws, - unknown -> = z.object({ - private_subnet_ids: z.array(z.string()), - public_subnet_ids: z.array(z.string()), - security_group_ids: z.array(z.string()).optional(), - type: DeploymentDetailResponseTypeByoVpcAws$inboundSchema, - vpc_id: z.string(), -}).transform((v) => { - return remap$(v, { - "private_subnet_ids": "privateSubnetIds", - "public_subnet_ids": "publicSubnetIds", - "security_group_ids": "securityGroupIds", - "vpc_id": "vpcId", - }); -}); +export const DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseNetworkByoVpcAwsFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseNetworkByoVpcAws, + DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseNetworkByoVpcAws$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseNetworkByoVpcAws' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeCreate$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeCreate -> = z.enum(DeploymentDetailResponseTypeCreate); - -/** @internal */ -export const DeploymentDetailResponseNetworkCreate$inboundSchema: z.ZodType< - DeploymentDetailResponseNetworkCreate, - unknown -> = z.object({ - availability_zones: z.int().optional(), - cidr: z.nullable(z.string()).optional(), - type: DeploymentDetailResponseTypeCreate$inboundSchema, -}).transform((v) => { - return remap$(v, { - "availability_zones": "availabilityZones", +export const DeploymentDetailResponsePendingPreparedStackProfileGcpResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -}); -export function deploymentDetailResponseNetworkCreateFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileGcpResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseNetworkCreate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseNetworkCreate' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeUseDefault$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeUseDefault -> = z.enum(DeploymentDetailResponseTypeUseDefault); - -/** @internal */ -export const DeploymentDetailResponseNetworkUseDefault$inboundSchema: z.ZodType< - DeploymentDetailResponseNetworkUseDefault, - unknown -> = z.object({ - type: DeploymentDetailResponseTypeUseDefault$inboundSchema, -}); +export const DeploymentDetailResponsePendingPreparedStackProfileConditionStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseNetworkUseDefaultFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileConditionStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseNetworkUseDefault, + DeploymentDetailResponsePendingPreparedStackProfileConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseNetworkUseDefault$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseNetworkUseDefault' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseNetworkUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseNetworkUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseNetworkByoVpcAws$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkUseDefault$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkCreate$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseNetworkUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseNetworkUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseNetworkUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTelemetry$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTelemetry -> = z.enum(DeploymentDetailResponseTelemetry); - -/** @internal */ -export const DeploymentDetailResponseUpdates$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseUpdates -> = z.enum(DeploymentDetailResponseUpdates); - -/** @internal */ -export const DeploymentDetailResponseStackSettings$inboundSchema: z.ZodType< - DeploymentDetailResponseStackSettings, - unknown -> = z.object({ - compute: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseCompute$inboundSchema), - z.any(), - ]), - ).optional(), - deploymentModel: DeploymentDetailResponseDeploymentModel$inboundSchema - .optional(), - domains: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseDomains$inboundSchema), - z.any(), - ]), - ).optional(), - externalBindings: z.nullable( - z.lazy(() => DeploymentDetailResponseExternalBindings$inboundSchema), - ).optional(), - heartbeats: DeploymentDetailResponseHeartbeats$inboundSchema.optional(), - kubernetes: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseKubernetes$inboundSchema), - z.any(), - ]), - ).optional(), - network: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseNetworkByoVpcAws$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkByoVpcGcp$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkByoVnetAzure$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkUseDefault$inboundSchema), - z.lazy(() => DeploymentDetailResponseNetworkCreate$inboundSchema), - z.any(), - ]), - ).optional(), - telemetry: DeploymentDetailResponseTelemetry$inboundSchema.optional(), - updates: DeploymentDetailResponseUpdates$inboundSchema.optional(), -}); +export const DeploymentDetailResponsePendingPreparedStackProfileGcpStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseStackSettingsFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileGcpStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseStackSettings' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseStackStatePlatform$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseStackStatePlatform, - ); - -/** @internal */ -export const DeploymentDetailResponseStackStateConfig$inboundSchema: z.ZodType< - DeploymentDetailResponseStackStateConfig, - unknown -> = collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const DeploymentDetailResponsePendingPreparedStackProfileGcpBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileGcpStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseStackStateConfigFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseStackStateConfig, + DeploymentDetailResponsePendingPreparedStackProfileGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseStackStateConfig$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseStackStateConfig' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseControllerPlatformEnum$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseControllerPlatformEnum, - ); - -/** @internal */ -export const DeploymentDetailResponseControllerPlatformUnion$inboundSchema: - z.ZodType = z.union( - [DeploymentDetailResponseControllerPlatformEnum$inboundSchema, z.any()], - ); +export const DeploymentDetailResponsePendingPreparedStackProfileGcpGrant$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfileGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseControllerPlatformUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseControllerPlatformUnion, + DeploymentDetailResponsePendingPreparedStackProfileGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseControllerPlatformUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseControllerPlatformUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseStackStateDependency$inboundSchema: - z.ZodType = z.object({ - id: z.string(), - type: z.string(), - }); +export const DeploymentDetailResponsePendingPreparedStackProfileGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseStackStateDependencyFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileGcpFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseStackStateDependency, + DeploymentDetailResponsePendingPreparedStackProfileGcp, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseStackStateDependency$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseStackStateDependency' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileGcp$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseErrorStackState$inboundSchema: z.ZodType< - DeploymentDetailResponseErrorStackState, - unknown -> = z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), -}); +export const DeploymentDetailResponsePendingPreparedStackProfilePlatforms$inboundSchema: + z.ZodType< + DeploymentDetailResponsePendingPreparedStackProfilePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfileGcp$inboundSchema + )), + ).optional(), + }); -export function deploymentDetailResponseErrorStackStateFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfilePlatformsFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseErrorStackState, + DeploymentDetailResponsePendingPreparedStackProfilePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseErrorStackState$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseErrorStackState' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfilePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseErrorUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseErrorUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseErrorStackState$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackProfile$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfilePlatforms$inboundSchema + ), + }); -export function deploymentDetailResponseErrorUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfile, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseErrorUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfile$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfile' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseLifecycleStackStateEnum$inboundSchema: - z.ZodEnum = z.enum( - DeploymentDetailResponseLifecycleStackStateEnum, - ); - -/** @internal */ -export const DeploymentDetailResponseLifecycleUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseLifecycleUnion, - unknown -> = z.union([ - DeploymentDetailResponseLifecycleStackStateEnum$inboundSchema, - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackProfileUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]); -export function deploymentDetailResponseLifecycleUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackProfileUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackProfileUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseLifecycleUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseLifecycleUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackProfileUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOutputs$inboundSchema: z.ZodType< - DeploymentDetailResponseOutputs, - unknown -> = collectExtraKeys$( - z.object({ - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const DeploymentDetailResponsePendingPreparedStackPermissions$inboundSchema: + z.ZodType = + z.object({ + management: z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackManagement2$inboundSchema + ), + DeploymentDetailResponsePendingPreparedStackManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]), + ), + ), + ), + }); -export function deploymentDetailResponseOutputsFromJSON( +export function deploymentDetailResponsePendingPreparedStackPermissionsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackPermissions, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseOutputs$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOutputs' from JSON`, + (x) => + DeploymentDetailResponsePendingPreparedStackPermissions$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackPermissions' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOutputsUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseOutputsUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseOutputs$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePendingPreparedStackConfig$inboundSchema: + z.ZodType = + collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, + ); -export function deploymentDetailResponseOutputsUnionFromJSON( +export function deploymentDetailResponsePendingPreparedStackConfigFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackConfig, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseOutputsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOutputsUnion' from JSON`, + DeploymentDetailResponsePendingPreparedStackConfig$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackConfig' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePreviousConfig$inboundSchema: z.ZodType< - DeploymentDetailResponsePreviousConfig, - unknown -> = collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const DeploymentDetailResponsePendingPreparedStackDependency$inboundSchema: + z.ZodType = z + .object({ + id: z.string(), + type: z.string(), + }); -export function deploymentDetailResponsePreviousConfigFromJSON( +export function deploymentDetailResponsePendingPreparedStackDependencyFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackDependency, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponsePreviousConfig$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePreviousConfig' from JSON`, + DeploymentDetailResponsePendingPreparedStackDependency$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackDependency' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePreviousConfigUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => DeploymentDetailResponsePreviousConfig$inboundSchema), - z.any(), - ]); +export const DeploymentDetailResponsePendingPreparedStackLifecycle$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePendingPreparedStackLifecycle); -export function deploymentDetailResponsePreviousConfigUnionFromJSON( +/** @internal */ +export const DeploymentDetailResponsePendingPreparedStackResources$inboundSchema: + z.ZodType = z + .object({ + config: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackConfig$inboundSchema + ), + dependencies: z.array( + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackDependency$inboundSchema + ), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: + DeploymentDetailResponsePendingPreparedStackLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), + }); + +export function deploymentDetailResponsePendingPreparedStackResourcesFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponsePreviousConfigUnion, + DeploymentDetailResponsePendingPreparedStackResources, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponsePreviousConfigUnion$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStackResources$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponsePreviousConfigUnion' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackResources' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseStackStateStatus$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseStackStateStatus -> = z.enum(DeploymentDetailResponseStackStateStatus); +export const DeploymentDetailResponsePendingPreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum< + typeof DeploymentDetailResponsePendingPreparedStackSupportedPlatform + > = z.enum(DeploymentDetailResponsePendingPreparedStackSupportedPlatform); /** @internal */ -export const DeploymentDetailResponseStackStateResources$inboundSchema: - z.ZodType = z.object({ - _internal: z.nullable(z.any()).optional(), - config: z.lazy(() => - DeploymentDetailResponseStackStateConfig$inboundSchema - ), - controllerPlatform: z.nullable( - z.union([ - DeploymentDetailResponseControllerPlatformEnum$inboundSchema, - z.any(), - ]), - ).optional(), - dependencies: z.array( - z.lazy(() => DeploymentDetailResponseStackStateDependency$inboundSchema), - ).optional(), - error: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseErrorStackState$inboundSchema), - z.any(), - ]), - ).optional(), - lastFailedState: z.nullable(z.any()).optional(), - lifecycle: z.nullable( - z.union([ - DeploymentDetailResponseLifecycleStackStateEnum$inboundSchema, - z.any(), - ]), +export const DeploymentDetailResponsePendingPreparedStack$inboundSchema: + z.ZodType = z.object({ + id: z.string(), + inputs: z.array( + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackInput$inboundSchema + ), ).optional(), - outputs: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseOutputs$inboundSchema), - z.any(), - ]), + permissions: z.lazy(() => + DeploymentDetailResponsePendingPreparedStackPermissions$inboundSchema ).optional(), - previousConfig: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponsePreviousConfig$inboundSchema), - z.any(), - ]), + resources: z.record( + z.string(), + z.lazy(() => + DeploymentDetailResponsePendingPreparedStackResources$inboundSchema + ), + ), + supportedPlatforms: z.nullable( + z.array( + DeploymentDetailResponsePendingPreparedStackSupportedPlatform$inboundSchema, + ), ).optional(), - remoteBindingParams: z.nullable(z.any()).optional(), - retryAttempt: z.int().optional(), - status: DeploymentDetailResponseStackStateStatus$inboundSchema, - type: z.string(), - }).transform((v) => { - return remap$(v, { - "_internal": "internal", - }); }); -export function deploymentDetailResponseStackStateResourcesFromJSON( +export function deploymentDetailResponsePendingPreparedStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseStackStateResources, + DeploymentDetailResponsePendingPreparedStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseStackStateResources$inboundSchema.parse( + DeploymentDetailResponsePendingPreparedStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseStackStateResources' from JSON`, + `Failed to parse 'DeploymentDetailResponsePendingPreparedStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseStackState$inboundSchema: z.ZodType< - DeploymentDetailResponseStackState, - unknown -> = z.object({ - platform: DeploymentDetailResponseStackStatePlatform$inboundSchema, - resourcePrefix: z.string(), - resources: z.record( - z.string(), - z.lazy(() => DeploymentDetailResponseStackStateResources$inboundSchema), - ), -}); +export const DeploymentDetailResponsePendingPreparedStackUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentDetailResponsePendingPreparedStack$inboundSchema), + z.any(), + ]); -export function deploymentDetailResponseStackStateFromJSON( +export function deploymentDetailResponsePendingPreparedStackUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePendingPreparedStackUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseStackState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseStackState' from JSON`, + DeploymentDetailResponsePendingPreparedStackUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePendingPreparedStackUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeStringList$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeStringList -> = z.enum(DeploymentDetailResponseTypeStringList); +export const DeploymentDetailResponsePreparedStackTypeStringList$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePreparedStackTypeStringList); /** @internal */ -export const DeploymentDetailResponseDefaultStringList$inboundSchema: z.ZodType< - DeploymentDetailResponseDefaultStringList, - unknown -> = z.object({ - type: DeploymentDetailResponseTypeStringList$inboundSchema, - value: z.array(z.string()), -}); +export const DeploymentDetailResponsePreparedStackDefaultStringList$inboundSchema: + z.ZodType = z + .object({ + type: DeploymentDetailResponsePreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }); -export function deploymentDetailResponseDefaultStringListFromJSON( +export function deploymentDetailResponsePreparedStackDefaultStringListFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseDefaultStringList, + DeploymentDetailResponsePreparedStackDefaultStringList, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseDefaultStringList$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseDefaultStringList' from JSON`, + DeploymentDetailResponsePreparedStackDefaultStringList$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeBoolean$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeBoolean -> = z.enum(DeploymentDetailResponseTypeBoolean); +export const DeploymentDetailResponsePreparedStackTypeBoolean$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackTypeBoolean, + ); /** @internal */ -export const DeploymentDetailResponseDefaultBoolean$inboundSchema: z.ZodType< - DeploymentDetailResponseDefaultBoolean, - unknown -> = z.object({ - type: DeploymentDetailResponseTypeBoolean$inboundSchema, - value: z.boolean(), -}); +export const DeploymentDetailResponsePreparedStackDefaultBoolean$inboundSchema: + z.ZodType = z + .object({ + type: DeploymentDetailResponsePreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), + }); -export function deploymentDetailResponseDefaultBooleanFromJSON( +export function deploymentDetailResponsePreparedStackDefaultBooleanFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackDefaultBoolean, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseDefaultBoolean$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseDefaultBoolean' from JSON`, + DeploymentDetailResponsePreparedStackDefaultBoolean$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeNumber$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeNumber -> = z.enum(DeploymentDetailResponseTypeNumber); +export const DeploymentDetailResponsePreparedStackTypeNumber$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackTypeNumber, + ); /** @internal */ -export const DeploymentDetailResponseDefaultNumber$inboundSchema: z.ZodType< - DeploymentDetailResponseDefaultNumber, - unknown -> = z.object({ - type: DeploymentDetailResponseTypeNumber$inboundSchema, - value: z.string(), -}); +export const DeploymentDetailResponsePreparedStackDefaultNumber$inboundSchema: + z.ZodType = z + .object({ + type: DeploymentDetailResponsePreparedStackTypeNumber$inboundSchema, + value: z.string(), + }); -export function deploymentDetailResponseDefaultNumberFromJSON( +export function deploymentDetailResponsePreparedStackDefaultNumberFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackDefaultNumber, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseDefaultNumber$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseDefaultNumber' from JSON`, + DeploymentDetailResponsePreparedStackDefaultNumber$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeString$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeString -> = z.enum(DeploymentDetailResponseTypeString); +export const DeploymentDetailResponsePreparedStackTypeString$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackTypeString, + ); /** @internal */ -export const DeploymentDetailResponseDefaultString$inboundSchema: z.ZodType< - DeploymentDetailResponseDefaultString, - unknown -> = z.object({ - type: DeploymentDetailResponseTypeString$inboundSchema, - value: z.string(), -}); +export const DeploymentDetailResponsePreparedStackDefaultString$inboundSchema: + z.ZodType = z + .object({ + type: DeploymentDetailResponsePreparedStackTypeString$inboundSchema, + value: z.string(), + }); -export function deploymentDetailResponseDefaultStringFromJSON( +export function deploymentDetailResponsePreparedStackDefaultStringFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackDefaultString, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseDefaultString$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseDefaultString' from JSON`, + DeploymentDetailResponsePreparedStackDefaultString$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseDefaultUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseDefaultUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseDefaultString$inboundSchema), - z.lazy(() => DeploymentDetailResponseDefaultNumber$inboundSchema), - z.lazy(() => DeploymentDetailResponseDefaultBoolean$inboundSchema), - z.lazy(() => DeploymentDetailResponseDefaultStringList$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePreparedStackDefaultUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseDefaultUnionFromJSON( +export function deploymentDetailResponsePreparedStackDefaultUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackDefaultUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseDefaultUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseDefaultUnion' from JSON`, + DeploymentDetailResponsePreparedStackDefaultUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseTypeEnvEnum$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseTypeEnvEnum -> = z.enum(DeploymentDetailResponseTypeEnvEnum); +export const DeploymentDetailResponsePreparedStackTypeEnvEnum$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackTypeEnvEnum, + ); /** @internal */ -export const DeploymentDetailResponseTypeUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseTypeUnion, - unknown -> = z.union([DeploymentDetailResponseTypeEnvEnum$inboundSchema, z.any()]); +export const DeploymentDetailResponsePreparedStackTypeUnion$inboundSchema: + z.ZodType = z.union([ + DeploymentDetailResponsePreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]); -export function deploymentDetailResponseTypeUnionFromJSON( +export function deploymentDetailResponsePreparedStackTypeUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackTypeUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseTypeUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseTypeUnion' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackTypeUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseEnv$inboundSchema: z.ZodType< - DeploymentDetailResponseEnv, +export const DeploymentDetailResponsePreparedStackEnv$inboundSchema: z.ZodType< + DeploymentDetailResponsePreparedStackEnv, unknown > = z.object({ name: z.string(), targetResources: z.nullable(z.array(z.string())).optional(), type: z.nullable( - z.union([DeploymentDetailResponseTypeEnvEnum$inboundSchema, z.any()]), + z.union([ + DeploymentDetailResponsePreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]), ).optional(), }); -export function deploymentDetailResponseEnvFromJSON( +export function deploymentDetailResponsePreparedStackEnvFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackEnv, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseEnv$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseEnv' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackEnv$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackEnv' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseKind$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseKind -> = z.enum(DeploymentDetailResponseKind); +export const DeploymentDetailResponsePreparedStackKind$inboundSchema: z.ZodEnum< + typeof DeploymentDetailResponsePreparedStackKind +> = z.enum(DeploymentDetailResponsePreparedStackKind); /** @internal */ export const DeploymentDetailResponsePreparedStackPlatform$inboundSchema: @@ -6314,1899 +10744,2096 @@ export const DeploymentDetailResponsePreparedStackPlatform$inboundSchema: ); /** @internal */ -export const DeploymentDetailResponseProvidedBy$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseProvidedBy -> = z.enum(DeploymentDetailResponseProvidedBy); +export const DeploymentDetailResponsePreparedStackProvidedBy$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackProvidedBy, + ); /** @internal */ -export const DeploymentDetailResponseValidation$inboundSchema: z.ZodType< - DeploymentDetailResponseValidation, - unknown -> = z.object({ - format: z.nullable(z.string()).optional(), - max: z.nullable(z.string()).optional(), - maxItems: z.nullable(z.int()).optional(), - maxLength: z.nullable(z.int()).optional(), - min: z.nullable(z.string()).optional(), - minItems: z.nullable(z.int()).optional(), - minLength: z.nullable(z.int()).optional(), - pattern: z.nullable(z.string()).optional(), - values: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackValidation$inboundSchema: + z.ZodType = z + .object({ + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseValidationFromJSON( +export function deploymentDetailResponsePreparedStackValidationFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackValidation, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseValidation$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseValidation' from JSON`, + DeploymentDetailResponsePreparedStackValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackValidation' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseValidationUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseValidationUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseValidation$inboundSchema), - z.any(), -]); +export const DeploymentDetailResponsePreparedStackValidationUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackValidation$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseValidationUnionFromJSON( +export function deploymentDetailResponsePreparedStackValidationUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseValidationUnion, + DeploymentDetailResponsePreparedStackValidationUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseValidationUnion$inboundSchema.parse( + DeploymentDetailResponsePreparedStackValidationUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseValidationUnion' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseInput$inboundSchema: z.ZodType< - DeploymentDetailResponseInput, - unknown -> = z.object({ - default: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseDefaultString$inboundSchema), - z.lazy(() => DeploymentDetailResponseDefaultNumber$inboundSchema), - z.lazy(() => DeploymentDetailResponseDefaultBoolean$inboundSchema), - z.lazy(() => DeploymentDetailResponseDefaultStringList$inboundSchema), - z.any(), - ]), - ).optional(), - description: z.string(), - env: z.array(z.lazy(() => DeploymentDetailResponseEnv$inboundSchema)) - .optional(), - id: z.string(), - kind: DeploymentDetailResponseKind$inboundSchema, - label: z.string(), - placeholder: z.nullable(z.string()).optional(), - platforms: z.nullable( - z.array(DeploymentDetailResponsePreparedStackPlatform$inboundSchema), - ).optional(), - providedBy: z.array(DeploymentDetailResponseProvidedBy$inboundSchema), - required: z.boolean(), - validation: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseValidation$inboundSchema), - z.any(), - ]), - ).optional(), -}); +export const DeploymentDetailResponsePreparedStackInput$inboundSchema: + z.ZodType = z.object({ + default: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => DeploymentDetailResponsePreparedStackEnv$inboundSchema), + ).optional(), + id: z.string(), + kind: DeploymentDetailResponsePreparedStackKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array(DeploymentDetailResponsePreparedStackPlatform$inboundSchema), + ).optional(), + providedBy: z.array( + DeploymentDetailResponsePreparedStackProvidedBy$inboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackValidation$inboundSchema + ), + z.any(), + ]), + ).optional(), + }); -export function deploymentDetailResponseInputFromJSON( +export function deploymentDetailResponsePreparedStackInputFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackInput, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseInput$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseInput' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackInput$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackInput' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseManagementEnum$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseManagementEnum -> = z.enum(DeploymentDetailResponseManagementEnum); +export const DeploymentDetailResponsePreparedStackManagementEnum$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePreparedStackManagementEnum); /** @internal */ -export const DeploymentDetailResponseOverrideAwResource$inboundSchema: - z.ZodType = z.object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); +export const DeploymentDetailResponsePreparedStackOverrideAwResource$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseOverrideAwResourceFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAwResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAwResource, + DeploymentDetailResponsePreparedStackOverrideAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAwResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideAwResource' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAwStack$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideAwStack, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const DeploymentDetailResponsePreparedStackOverrideAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseOverrideAwStackFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAwStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAwStack, + DeploymentDetailResponsePreparedStackOverrideAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAwStack$inboundSchema.parse( + DeploymentDetailResponsePreparedStackOverrideAwStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseOverrideAwStack' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAwStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAwBinding$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideAwBinding, - unknown -> = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseOverrideAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseOverrideAwStack$inboundSchema) - .optional(), -}); +export const DeploymentDetailResponsePreparedStackOverrideAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAwStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseOverrideAwBindingFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAwBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAwBinding, + DeploymentDetailResponsePreparedStackOverrideAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAwBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideAwBinding' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideEffect$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseOverrideEffect -> = z.enum(DeploymentDetailResponseOverrideEffect); +export const DeploymentDetailResponsePreparedStackOverrideEffect$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePreparedStackOverrideEffect); /** @internal */ -export const DeploymentDetailResponseOverrideAwGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideAwGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackOverrideAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseOverrideAwGrantFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAwGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAwGrant, + DeploymentDetailResponsePreparedStackOverrideAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAwGrant$inboundSchema.parse( + DeploymentDetailResponsePreparedStackOverrideAwGrant$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseOverrideAwGrant' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAw$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideAw, - unknown -> = z.object({ - binding: z.lazy(() => - DeploymentDetailResponseOverrideAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: DeploymentDetailResponseOverrideEffect$inboundSchema.optional(), - grant: z.lazy(() => DeploymentDetailResponseOverrideAwGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackOverrideAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: DeploymentDetailResponsePreparedStackOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseOverrideAwFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackOverrideAw, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOverrideAw' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAzureResource$inboundSchema: - z.ZodType = z.object({ +export const DeploymentDetailResponsePreparedStackOverrideAzureResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackOverrideAzureResource, + unknown + > = z.object({ scope: z.string(), }); -export function deploymentDetailResponseOverrideAzureResourceFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAzureResource, + DeploymentDetailResponsePreparedStackOverrideAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAzureResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideAzureResource' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAzureStack$inboundSchema: - z.ZodType = z.object({ - scope: z.string(), - }); +export const DeploymentDetailResponsePreparedStackOverrideAzureStack$inboundSchema: + z.ZodType = + z.object({ + scope: z.string(), + }); -export function deploymentDetailResponseOverrideAzureStackFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAzureStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAzureStack, + DeploymentDetailResponsePreparedStackOverrideAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAzureStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideAzureStack' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAzureBinding$inboundSchema: - z.ZodType = z.object({ +export const DeploymentDetailResponsePreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackOverrideAzureBinding, + unknown + > = z.object({ resource: z.lazy(() => - DeploymentDetailResponseOverrideAzureResource$inboundSchema + DeploymentDetailResponsePreparedStackOverrideAzureResource$inboundSchema ).optional(), stack: z.lazy(() => - DeploymentDetailResponseOverrideAzureStack$inboundSchema + DeploymentDetailResponsePreparedStackOverrideAzureStack$inboundSchema ).optional(), }); -export function deploymentDetailResponseOverrideAzureBindingFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAzureBinding, + DeploymentDetailResponsePreparedStackOverrideAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAzureBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideAzureBinding' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideAzureGrant$inboundSchema: - z.ZodType = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const DeploymentDetailResponsePreparedStackOverrideAzureGrant$inboundSchema: + z.ZodType = + z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseOverrideAzureGrantFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideAzureGrant, + DeploymentDetailResponsePreparedStackOverrideAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideAzureGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideAzureGrant' from JSON`, - ); -} - -/** @internal */ -export const DeploymentDetailResponseOverrideAzure$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideAzure, - unknown -> = z.object({ - binding: z.lazy(() => - DeploymentDetailResponseOverrideAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentDetailResponseOverrideAzureGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); - -export function deploymentDetailResponseOverrideAzureFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => - DeploymentDetailResponseOverrideAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOverrideAzure' from JSON`, + DeploymentDetailResponsePreparedStackOverrideAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideConditionResource$inboundSchema: - z.ZodType = z +export const DeploymentDetailResponsePreparedStackOverrideAzure$inboundSchema: + z.ZodType = z .object({ - expression: z.string(), - title: z.string(), + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentDetailResponseOverrideConditionResourceFromJSON( +export function deploymentDetailResponsePreparedStackOverrideAzureFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideConditionResource, + DeploymentDetailResponsePreparedStackOverrideAzure, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideConditionResource$inboundSchema.parse( + DeploymentDetailResponsePreparedStackOverrideAzure$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseOverrideConditionResource' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideResourceConditionUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - DeploymentDetailResponseOverrideConditionResource$inboundSchema - ), - z.any(), - ]); +export const DeploymentDetailResponsePreparedStackOverrideConditionResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackOverrideConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseOverrideResourceConditionUnionFromJSON( +export function deploymentDetailResponsePreparedStackOverrideConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideResourceConditionUnion, + DeploymentDetailResponsePreparedStackOverrideConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideResourceConditionUnion$inboundSchema + DeploymentDetailResponsePreparedStackOverrideConditionResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOverrideResourceConditionUnion' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideGcpResource$inboundSchema: - z.ZodType = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - DeploymentDetailResponseOverrideConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), - }); +export const DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseOverrideGcpResourceFromJSON( +export function deploymentDetailResponsePreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideGcpResource, + DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideGcpResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideGcpResource' from JSON`, + DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideConditionStack$inboundSchema: - z.ZodType = z.object( - { - expression: z.string(), - title: z.string(), - }, - ); +export const DeploymentDetailResponsePreparedStackOverrideGcpResource$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseOverrideConditionStackFromJSON( +export function deploymentDetailResponsePreparedStackOverrideGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideConditionStack, + DeploymentDetailResponsePreparedStackOverrideGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideConditionStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideConditionStack' from JSON`, + DeploymentDetailResponsePreparedStackOverrideGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideStackConditionUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - DeploymentDetailResponseOverrideConditionStack$inboundSchema - ), - z.any(), - ]); +export const DeploymentDetailResponsePreparedStackOverrideConditionStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackOverrideConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseOverrideStackConditionUnionFromJSON( +export function deploymentDetailResponsePreparedStackOverrideConditionStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideStackConditionUnion, + DeploymentDetailResponsePreparedStackOverrideConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideStackConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideStackConditionUnion' from JSON`, + DeploymentDetailResponsePreparedStackOverrideConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideGcpStack$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideGcpStack, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - DeploymentDetailResponseOverrideConditionStack$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const DeploymentDetailResponsePreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackOverrideStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseOverrideGcpStackFromJSON( +export function deploymentDetailResponsePreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideGcpStack, + DeploymentDetailResponsePreparedStackOverrideStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideGcpStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideGcpStack' from JSON`, + DeploymentDetailResponsePreparedStackOverrideStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideGcpBinding$inboundSchema: - z.ZodType = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseOverrideGcpResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseOverrideGcpStack$inboundSchema) - .optional(), - }); +export const DeploymentDetailResponsePreparedStackOverrideGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseOverrideGcpBindingFromJSON( +export function deploymentDetailResponsePreparedStackOverrideGcpStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideGcpBinding, + DeploymentDetailResponsePreparedStackOverrideGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideGcpBinding$inboundSchema.parse( + DeploymentDetailResponsePreparedStackOverrideGcpStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseOverrideGcpBinding' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideGcpGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideGcpGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackOverrideGcpBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideGcpStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseOverrideGcpGrantFromJSON( +export function deploymentDetailResponsePreparedStackOverrideGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverrideGcpGrant, + DeploymentDetailResponsePreparedStackOverrideGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideGcpGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseOverrideGcpGrant' from JSON`, + DeploymentDetailResponsePreparedStackOverrideGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideGcp$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideGcp, - unknown -> = z.object({ - binding: z.lazy(() => - DeploymentDetailResponseOverrideGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentDetailResponseOverrideGcpGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseOverrideGcpFromJSON( +export function deploymentDetailResponsePreparedStackOverrideGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackOverrideGcpGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOverrideGcp' from JSON`, + DeploymentDetailResponsePreparedStackOverrideGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverridePlatforms$inboundSchema: z.ZodType< - DeploymentDetailResponseOverridePlatforms, - unknown -> = z.object({ - aws: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseOverrideAw$inboundSchema)), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseOverrideAzure$inboundSchema)), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseOverrideGcp$inboundSchema)), - ).optional(), -}); +export const DeploymentDetailResponsePreparedStackOverrideGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseOverridePlatformsFromJSON( +export function deploymentDetailResponsePreparedStackOverrideGcpFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseOverridePlatforms, + DeploymentDetailResponsePreparedStackOverrideGcp, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverridePlatforms$inboundSchema.parse( + DeploymentDetailResponsePreparedStackOverrideGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseOverridePlatforms' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverride$inboundSchema: z.ZodType< - DeploymentDetailResponseOverride, - unknown -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - DeploymentDetailResponseOverridePlatforms$inboundSchema - ), -}); +export const DeploymentDetailResponsePreparedStackOverridePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackOverrideGcp$inboundSchema + )), + ).optional(), + }); -export function deploymentDetailResponseOverrideFromJSON( +export function deploymentDetailResponsePreparedStackOverridePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackOverridePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseOverride$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOverride' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackOverridePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseOverrideUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseOverrideUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseOverride$inboundSchema), - z.string(), -]); +export const DeploymentDetailResponsePreparedStackOverride$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentDetailResponsePreparedStackOverridePlatforms$inboundSchema + ), + }); -export function deploymentDetailResponseOverrideUnionFromJSON( +export function deploymentDetailResponsePreparedStackOverrideFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackOverride, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseOverrideUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseOverrideUnion' from JSON`, + DeploymentDetailResponsePreparedStackOverride$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverride' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseManagement2$inboundSchema: z.ZodType< - DeploymentDetailResponseManagement2, - unknown -> = z.object({ - override: z.record( - z.string(), - z.array(z.union([ - z.lazy(() => DeploymentDetailResponseOverride$inboundSchema), +export const DeploymentDetailResponsePreparedStackOverrideUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentDetailResponsePreparedStackOverride$inboundSchema), z.string(), - ])), - ), -}); + ]); -export function deploymentDetailResponseManagement2FromJSON( +export function deploymentDetailResponsePreparedStackOverrideUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackOverrideUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseManagement2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseManagement2' from JSON`, + DeploymentDetailResponsePreparedStackOverrideUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAwResource$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAwResource, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const DeploymentDetailResponsePreparedStackManagement2$inboundSchema: + z.ZodType = z + .object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackOverride$inboundSchema + ), + z.string(), + ])), + ), + }); -export function deploymentDetailResponseExtendAwResourceFromJSON( +export function deploymentDetailResponsePreparedStackManagement2FromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendAwResource, + DeploymentDetailResponsePreparedStackManagement2, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAwResource$inboundSchema.parse( + DeploymentDetailResponsePreparedStackManagement2$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendAwResource' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackManagement2' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAwStack$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAwStack, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const DeploymentDetailResponsePreparedStackExtendAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseExtendAwStackFromJSON( +export function deploymentDetailResponsePreparedStackExtendAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendAwResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendAwStack' from JSON`, + DeploymentDetailResponsePreparedStackExtendAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAwBinding$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAwBinding, - unknown -> = z.object({ - resource: z.lazy(() => DeploymentDetailResponseExtendAwResource$inboundSchema) - .optional(), - stack: z.lazy(() => DeploymentDetailResponseExtendAwStack$inboundSchema) - .optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseExtendAwBindingFromJSON( +export function deploymentDetailResponsePreparedStackExtendAwStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendAwBinding, + DeploymentDetailResponsePreparedStackExtendAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAwBinding$inboundSchema.parse( + DeploymentDetailResponsePreparedStackExtendAwStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendAwBinding' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendEffect$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseExtendEffect -> = z.enum(DeploymentDetailResponseExtendEffect); - -/** @internal */ -export const DeploymentDetailResponseExtendAwGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAwGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAwStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseExtendAwGrantFromJSON( +export function deploymentDetailResponsePreparedStackExtendAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendAwBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendAwGrant' from JSON`, + DeploymentDetailResponsePreparedStackExtendAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAw$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAw, - unknown -> = z.object({ - binding: z.lazy(() => DeploymentDetailResponseExtendAwBinding$inboundSchema), - description: z.nullable(z.string()).optional(), - effect: DeploymentDetailResponseExtendEffect$inboundSchema.optional(), - grant: z.lazy(() => DeploymentDetailResponseExtendAwGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendEffect$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackExtendEffect, + ); -export function deploymentDetailResponseExtendAwFromJSON( +/** @internal */ +export const DeploymentDetailResponsePreparedStackExtendAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function deploymentDetailResponsePreparedStackExtendAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseExtendAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendAw' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackExtendAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAzureResource$inboundSchema: - z.ZodType = z.object({ - scope: z.string(), +export const DeploymentDetailResponsePreparedStackExtendAw$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: DeploymentDetailResponsePreparedStackExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentDetailResponseExtendAzureResourceFromJSON( +export function deploymentDetailResponsePreparedStackExtendAwFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendAzureResource, + DeploymentDetailResponsePreparedStackExtendAw, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAzureResource$inboundSchema.parse( + DeploymentDetailResponsePreparedStackExtendAw$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendAzureResource' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAzureStack$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAzureStack, - unknown -> = z.object({ - scope: z.string(), -}); +export const DeploymentDetailResponsePreparedStackExtendAzureResource$inboundSchema: + z.ZodType = + z.object({ + scope: z.string(), + }); -export function deploymentDetailResponseExtendAzureStackFromJSON( +export function deploymentDetailResponsePreparedStackExtendAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendAzureStack, + DeploymentDetailResponsePreparedStackExtendAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAzureStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExtendAzureStack' from JSON`, + DeploymentDetailResponsePreparedStackExtendAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAzureBinding$inboundSchema: - z.ZodType = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseExtendAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseExtendAzureStack$inboundSchema) - .optional(), - }); +export const DeploymentDetailResponsePreparedStackExtendAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function deploymentDetailResponseExtendAzureBindingFromJSON( +export function deploymentDetailResponsePreparedStackExtendAzureStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendAzureBinding, + DeploymentDetailResponsePreparedStackExtendAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAzureBinding$inboundSchema.parse( + DeploymentDetailResponsePreparedStackExtendAzureStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendAzureBinding' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAzureGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAzureGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendAzureBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAzureStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseExtendAzureGrantFromJSON( +export function deploymentDetailResponsePreparedStackExtendAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendAzureGrant, + DeploymentDetailResponsePreparedStackExtendAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAzureGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExtendAzureGrant' from JSON`, + DeploymentDetailResponsePreparedStackExtendAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendAzure$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendAzure, - unknown -> = z.object({ - binding: z.lazy(() => - DeploymentDetailResponseExtendAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentDetailResponseExtendAzureGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseExtendAzureFromJSON( +export function deploymentDetailResponsePreparedStackExtendAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendAzureGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendAzure' from JSON`, + DeploymentDetailResponsePreparedStackExtendAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendConditionResource$inboundSchema: - z.ZodType = z +export const DeploymentDetailResponsePreparedStackExtendAzure$inboundSchema: + z.ZodType = z .object({ - expression: z.string(), - title: z.string(), + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function deploymentDetailResponseExtendConditionResourceFromJSON( +export function deploymentDetailResponsePreparedStackExtendAzureFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendConditionResource, + DeploymentDetailResponsePreparedStackExtendAzure, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendConditionResource$inboundSchema.parse( + DeploymentDetailResponsePreparedStackExtendAzure$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendConditionResource' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendResourceConditionUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - DeploymentDetailResponseExtendConditionResource$inboundSchema - ), - z.any(), - ]); +export const DeploymentDetailResponsePreparedStackExtendConditionResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackExtendConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseExtendResourceConditionUnionFromJSON( +export function deploymentDetailResponsePreparedStackExtendConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendResourceConditionUnion, + DeploymentDetailResponsePreparedStackExtendConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendResourceConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExtendResourceConditionUnion' from JSON`, + DeploymentDetailResponsePreparedStackExtendConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendGcpResource$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendGcpResource, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - DeploymentDetailResponseExtendConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const DeploymentDetailResponsePreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseExtendGcpResourceFromJSON( +export function deploymentDetailResponsePreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendGcpResource, + DeploymentDetailResponsePreparedStackExtendResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendGcpResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExtendGcpResource' from JSON`, + DeploymentDetailResponsePreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendConditionStack$inboundSchema: - z.ZodType = z.object({ - expression: z.string(), - title: z.string(), - }); +export const DeploymentDetailResponsePreparedStackExtendGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseExtendConditionStackFromJSON( +export function deploymentDetailResponsePreparedStackExtendGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendConditionStack, + DeploymentDetailResponsePreparedStackExtendGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendConditionStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExtendConditionStack' from JSON`, + DeploymentDetailResponsePreparedStackExtendGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendStackConditionUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => DeploymentDetailResponseExtendConditionStack$inboundSchema), - z.any(), - ]); +export const DeploymentDetailResponsePreparedStackExtendConditionStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackExtendConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseExtendStackConditionUnionFromJSON( +export function deploymentDetailResponsePreparedStackExtendConditionStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendStackConditionUnion, + DeploymentDetailResponsePreparedStackExtendConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendStackConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseExtendStackConditionUnion' from JSON`, + DeploymentDetailResponsePreparedStackExtendConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendGcpStack$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendGcpStack, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseExtendConditionStack$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const DeploymentDetailResponsePreparedStackExtendStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackExtendStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseExtendGcpStackFromJSON( +export function deploymentDetailResponsePreparedStackExtendStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendGcpStack' from JSON`, + DeploymentDetailResponsePreparedStackExtendStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendGcpBinding$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendGcpBinding, - unknown -> = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseExtendGcpResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseExtendGcpStack$inboundSchema) - .optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseExtendGcpBindingFromJSON( +export function deploymentDetailResponsePreparedStackExtendGcpStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendGcpBinding, + DeploymentDetailResponsePreparedStackExtendGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendGcpBinding$inboundSchema.parse( + DeploymentDetailResponsePreparedStackExtendGcpStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendGcpBinding' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendGcpGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendGcpGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendGcpStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseExtendGcpGrantFromJSON( +export function deploymentDetailResponsePreparedStackExtendGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendGcpBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendGcpGrant' from JSON`, + DeploymentDetailResponsePreparedStackExtendGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendGcp$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendGcp, - unknown -> = z.object({ - binding: z.lazy(() => DeploymentDetailResponseExtendGcpBinding$inboundSchema), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentDetailResponseExtendGcpGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseExtendGcpFromJSON( +export function deploymentDetailResponsePreparedStackExtendGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseExtendGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendGcp' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackExtendGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendPlatforms$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendPlatforms, - unknown -> = z.object({ - aws: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseExtendAw$inboundSchema)), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseExtendAzure$inboundSchema)), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseExtendGcp$inboundSchema)), - ).optional(), -}); +export const DeploymentDetailResponsePreparedStackExtendGcp$inboundSchema: + z.ZodType = z.object( + { + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }, + ); -export function deploymentDetailResponseExtendPlatformsFromJSON( +export function deploymentDetailResponsePreparedStackExtendGcpFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseExtendPlatforms, + DeploymentDetailResponsePreparedStackExtendGcp, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendPlatforms$inboundSchema.parse( + DeploymentDetailResponsePreparedStackExtendGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseExtendPlatforms' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtend$inboundSchema: z.ZodType< - DeploymentDetailResponseExtend, - unknown -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - DeploymentDetailResponseExtendPlatforms$inboundSchema - ), -}); +export const DeploymentDetailResponsePreparedStackExtendPlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackExtendGcp$inboundSchema + )), + ).optional(), + }); -export function deploymentDetailResponseExtendFromJSON( +export function deploymentDetailResponsePreparedStackExtendPlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendPlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseExtend$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtend' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackExtendPlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseExtendUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseExtendUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseExtend$inboundSchema), - z.string(), -]); +export const DeploymentDetailResponsePreparedStackExtend$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentDetailResponsePreparedStackExtendPlatforms$inboundSchema + ), + }); -export function deploymentDetailResponseExtendUnionFromJSON( +export function deploymentDetailResponsePreparedStackExtendFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtend, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseExtendUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseExtendUnion' from JSON`, + DeploymentDetailResponsePreparedStackExtend$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtend' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseManagement1$inboundSchema: z.ZodType< - DeploymentDetailResponseManagement1, - unknown -> = z.object({ - extend: z.record( - z.string(), - z.array(z.union([ - z.lazy(() => DeploymentDetailResponseExtend$inboundSchema), +export const DeploymentDetailResponsePreparedStackExtendUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentDetailResponsePreparedStackExtend$inboundSchema), z.string(), - ])), - ), -}); + ]); -export function deploymentDetailResponseManagement1FromJSON( +export function deploymentDetailResponsePreparedStackExtendUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackExtendUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseManagement1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseManagement1' from JSON`, + DeploymentDetailResponsePreparedStackExtendUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseManagementUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseManagementUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseManagement1$inboundSchema), - z.lazy(() => DeploymentDetailResponseManagement2$inboundSchema), - DeploymentDetailResponseManagementEnum$inboundSchema, -]); +export const DeploymentDetailResponsePreparedStackManagement1$inboundSchema: + z.ZodType = z + .object({ + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackExtend$inboundSchema + ), + z.string(), + ])), + ), + }); -export function deploymentDetailResponseManagementUnionFromJSON( +export function deploymentDetailResponsePreparedStackManagement1FromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseManagementUnion, + DeploymentDetailResponsePreparedStackManagement1, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseManagementUnion$inboundSchema.parse( + DeploymentDetailResponsePreparedStackManagement1$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseManagementUnion' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackManagement1' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAwResource$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAwResource, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const DeploymentDetailResponsePreparedStackManagementUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackManagement1$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackManagement2$inboundSchema + ), + DeploymentDetailResponsePreparedStackManagementEnum$inboundSchema, + ]); -export function deploymentDetailResponseProfileAwResourceFromJSON( +export function deploymentDetailResponsePreparedStackManagementUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileAwResource, + DeploymentDetailResponsePreparedStackManagementUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAwResource$inboundSchema.parse( + DeploymentDetailResponsePreparedStackManagementUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProfileAwResource' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAwStack$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAwStack, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const DeploymentDetailResponsePreparedStackProfileAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function deploymentDetailResponseProfileAwStackFromJSON( +export function deploymentDetailResponsePreparedStackProfileAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileAwResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfileAwStack' from JSON`, + DeploymentDetailResponsePreparedStackProfileAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAwBinding$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAwBinding, - unknown -> = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseProfileAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseProfileAwStack$inboundSchema) - .optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function deploymentDetailResponsePreparedStackProfileAwStackFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponsePreparedStackProfileAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAwStack' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponsePreparedStackProfileAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAwStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseProfileAwBindingFromJSON( +export function deploymentDetailResponsePreparedStackProfileAwBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileAwBinding, + DeploymentDetailResponsePreparedStackProfileAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAwBinding$inboundSchema.parse( + DeploymentDetailResponsePreparedStackProfileAwBinding$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProfileAwBinding' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileEffect$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseProfileEffect -> = z.enum(DeploymentDetailResponseProfileEffect); +export const DeploymentDetailResponsePreparedStackProfileEffect$inboundSchema: + z.ZodEnum = z.enum( + DeploymentDetailResponsePreparedStackProfileEffect, + ); /** @internal */ -export const DeploymentDetailResponseProfileAwGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAwGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseProfileAwGrantFromJSON( +export function deploymentDetailResponsePreparedStackProfileAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileAwGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfileAwGrant' from JSON`, + DeploymentDetailResponsePreparedStackProfileAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAw$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAw, - unknown -> = z.object({ - binding: z.lazy(() => DeploymentDetailResponseProfileAwBinding$inboundSchema), - description: z.nullable(z.string()).optional(), - effect: DeploymentDetailResponseProfileEffect$inboundSchema.optional(), - grant: z.lazy(() => DeploymentDetailResponseProfileAwGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileAw$inboundSchema: + z.ZodType = z.object( + { + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: DeploymentDetailResponsePreparedStackProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }, + ); -export function deploymentDetailResponseProfileAwFromJSON( +export function deploymentDetailResponsePreparedStackProfileAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileAw, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseProfileAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfileAw' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackProfileAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAzureResource$inboundSchema: - z.ZodType = z.object({ +export const DeploymentDetailResponsePreparedStackProfileAzureResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackProfileAzureResource, + unknown + > = z.object({ scope: z.string(), }); -export function deploymentDetailResponseProfileAzureResourceFromJSON( +export function deploymentDetailResponsePreparedStackProfileAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileAzureResource, + DeploymentDetailResponsePreparedStackProfileAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAzureResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileAzureResource' from JSON`, + DeploymentDetailResponsePreparedStackProfileAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAzureStack$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAzureStack, - unknown -> = z.object({ - scope: z.string(), -}); +export const DeploymentDetailResponsePreparedStackProfileAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function deploymentDetailResponseProfileAzureStackFromJSON( +export function deploymentDetailResponsePreparedStackProfileAzureStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileAzureStack, + DeploymentDetailResponsePreparedStackProfileAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAzureStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileAzureStack' from JSON`, + DeploymentDetailResponsePreparedStackProfileAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAzureBinding$inboundSchema: - z.ZodType = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseProfileAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseProfileAzureStack$inboundSchema) - .optional(), - }); +export const DeploymentDetailResponsePreparedStackProfileAzureBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAzureStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseProfileAzureBindingFromJSON( +export function deploymentDetailResponsePreparedStackProfileAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileAzureBinding, + DeploymentDetailResponsePreparedStackProfileAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAzureBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileAzureBinding' from JSON`, + DeploymentDetailResponsePreparedStackProfileAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAzureGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAzureGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseProfileAzureGrantFromJSON( +export function deploymentDetailResponsePreparedStackProfileAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileAzureGrant, + DeploymentDetailResponsePreparedStackProfileAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAzureGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileAzureGrant' from JSON`, + DeploymentDetailResponsePreparedStackProfileAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileAzure$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileAzure, - unknown -> = z.object({ - binding: z.lazy(() => - DeploymentDetailResponseProfileAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentDetailResponseProfileAzureGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseProfileAzureFromJSON( +export function deploymentDetailResponsePreparedStackProfileAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileAzure, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfileAzure' from JSON`, + DeploymentDetailResponsePreparedStackProfileAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileConditionResource$inboundSchema: - z.ZodType = z - .object({ - expression: z.string(), - title: z.string(), - }); +export const DeploymentDetailResponsePreparedStackProfileConditionResource$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackProfileConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function deploymentDetailResponseProfileConditionResourceFromJSON( +export function deploymentDetailResponsePreparedStackProfileConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileConditionResource, + DeploymentDetailResponsePreparedStackProfileConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileConditionResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileConditionResource' from JSON`, + DeploymentDetailResponsePreparedStackProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileResourceConditionUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - DeploymentDetailResponseProfileConditionResource$inboundSchema - ), - z.any(), - ]); +export const DeploymentDetailResponsePreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseProfileResourceConditionUnionFromJSON( +export function deploymentDetailResponsePreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileResourceConditionUnion, + DeploymentDetailResponsePreparedStackProfileResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileResourceConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileResourceConditionUnion' from JSON`, + DeploymentDetailResponsePreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileGcpResource$inboundSchema: - z.ZodType = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - DeploymentDetailResponseProfileConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), - }); +export const DeploymentDetailResponsePreparedStackProfileGcpResource$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseProfileGcpResourceFromJSON( +export function deploymentDetailResponsePreparedStackProfileGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileGcpResource, + DeploymentDetailResponsePreparedStackProfileGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileGcpResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileGcpResource' from JSON`, + DeploymentDetailResponsePreparedStackProfileGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileConditionStack$inboundSchema: - z.ZodType = z.object({ +export const DeploymentDetailResponsePreparedStackProfileConditionStack$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackProfileConditionStack, + unknown + > = z.object({ expression: z.string(), title: z.string(), }); -export function deploymentDetailResponseProfileConditionStackFromJSON( +export function deploymentDetailResponsePreparedStackProfileConditionStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileConditionStack, + DeploymentDetailResponsePreparedStackProfileConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileConditionStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileConditionStack' from JSON`, + DeploymentDetailResponsePreparedStackProfileConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileStackConditionUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => DeploymentDetailResponseProfileConditionStack$inboundSchema), - z.any(), - ]); +export const DeploymentDetailResponsePreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType< + DeploymentDetailResponsePreparedStackProfileStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]); -export function deploymentDetailResponseProfileStackConditionUnionFromJSON( +export function deploymentDetailResponsePreparedStackProfileStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileStackConditionUnion, + DeploymentDetailResponsePreparedStackProfileStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileStackConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileStackConditionUnion' from JSON`, + DeploymentDetailResponsePreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileGcpStack$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileGcpStack, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => DeploymentDetailResponseProfileConditionStack$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const DeploymentDetailResponsePreparedStackProfileGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function deploymentDetailResponseProfileGcpStackFromJSON( +export function deploymentDetailResponsePreparedStackProfileGcpStackFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileGcpStack, + DeploymentDetailResponsePreparedStackProfileGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileGcpStack$inboundSchema.parse( + DeploymentDetailResponsePreparedStackProfileGcpStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProfileGcpStack' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileGcpBinding$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileGcpBinding, - unknown -> = z.object({ - resource: z.lazy(() => - DeploymentDetailResponseProfileGcpResource$inboundSchema - ).optional(), - stack: z.lazy(() => DeploymentDetailResponseProfileGcpStack$inboundSchema) - .optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileGcpStack$inboundSchema + ).optional(), + }); -export function deploymentDetailResponseProfileGcpBindingFromJSON( +export function deploymentDetailResponsePreparedStackProfileGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileGcpBinding, + DeploymentDetailResponsePreparedStackProfileGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileGcpBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'DeploymentDetailResponseProfileGcpBinding' from JSON`, + DeploymentDetailResponsePreparedStackProfileGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileGcpGrant$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileGcpGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function deploymentDetailResponseProfileGcpGrantFromJSON( +export function deploymentDetailResponsePreparedStackProfileGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfileGcpGrant, + DeploymentDetailResponsePreparedStackProfileGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileGcpGrant$inboundSchema.parse( + DeploymentDetailResponsePreparedStackProfileGcpGrant$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProfileGcpGrant' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileGcp$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileGcp, - unknown -> = z.object({ - binding: z.lazy(() => - DeploymentDetailResponseProfileGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => DeploymentDetailResponseProfileGcpGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfileGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + DeploymentDetailResponsePreparedStackProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function deploymentDetailResponseProfileGcpFromJSON( +export function deploymentDetailResponsePreparedStackProfileGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileGcp, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfileGcp' from JSON`, + DeploymentDetailResponsePreparedStackProfileGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfilePlatforms$inboundSchema: z.ZodType< - DeploymentDetailResponseProfilePlatforms, - unknown -> = z.object({ - aws: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseProfileAw$inboundSchema)), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseProfileAzure$inboundSchema)), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => DeploymentDetailResponseProfileGcp$inboundSchema)), - ).optional(), -}); +export const DeploymentDetailResponsePreparedStackProfilePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + DeploymentDetailResponsePreparedStackProfileGcp$inboundSchema + )), + ).optional(), + }); -export function deploymentDetailResponseProfilePlatformsFromJSON( +export function deploymentDetailResponsePreparedStackProfilePlatformsFromJSON( jsonString: string, ): SafeParseResult< - DeploymentDetailResponseProfilePlatforms, + DeploymentDetailResponsePreparedStackProfilePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfilePlatforms$inboundSchema.parse( + DeploymentDetailResponsePreparedStackProfilePlatforms$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DeploymentDetailResponseProfilePlatforms' from JSON`, + `Failed to parse 'DeploymentDetailResponsePreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfile$inboundSchema: z.ZodType< - DeploymentDetailResponseProfile, - unknown -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - DeploymentDetailResponseProfilePlatforms$inboundSchema - ), -}); +export const DeploymentDetailResponsePreparedStackProfile$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + DeploymentDetailResponsePreparedStackProfilePlatforms$inboundSchema + ), + }); -export function deploymentDetailResponseProfileFromJSON( +export function deploymentDetailResponsePreparedStackProfileFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfile, + SDKValidationError +> { return safeParse( jsonString, - (x) => DeploymentDetailResponseProfile$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfile' from JSON`, + (x) => + DeploymentDetailResponsePreparedStackProfile$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfile' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponseProfileUnion$inboundSchema: z.ZodType< - DeploymentDetailResponseProfileUnion, - unknown -> = z.union([ - z.lazy(() => DeploymentDetailResponseProfile$inboundSchema), - z.string(), -]); +export const DeploymentDetailResponsePreparedStackProfileUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => DeploymentDetailResponsePreparedStackProfile$inboundSchema), + z.string(), + ]); -export function deploymentDetailResponseProfileUnionFromJSON( +export function deploymentDetailResponsePreparedStackProfileUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackProfileUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponseProfileUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponseProfileUnion' from JSON`, + DeploymentDetailResponsePreparedStackProfileUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const DeploymentDetailResponsePermissions$inboundSchema: z.ZodType< - DeploymentDetailResponsePermissions, - unknown -> = z.object({ - management: z.union([ - z.lazy(() => DeploymentDetailResponseManagement1$inboundSchema), - z.lazy(() => DeploymentDetailResponseManagement2$inboundSchema), - DeploymentDetailResponseManagementEnum$inboundSchema, - ]).optional(), - profiles: z.record( - z.string(), - z.record( - z.string(), - z.array( - z.union([ - z.lazy(() => DeploymentDetailResponseProfile$inboundSchema), +export const DeploymentDetailResponsePreparedStackPermissions$inboundSchema: + z.ZodType = z + .object({ + management: z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackManagement1$inboundSchema + ), + z.lazy(() => + DeploymentDetailResponsePreparedStackManagement2$inboundSchema + ), + DeploymentDetailResponsePreparedStackManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( z.string(), - ]), + z.array( + z.union([ + z.lazy(() => + DeploymentDetailResponsePreparedStackProfile$inboundSchema + ), + z.string(), + ]), + ), + ), ), - ), - ), -}); + }); -export function deploymentDetailResponsePermissionsFromJSON( +export function deploymentDetailResponsePreparedStackPermissionsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + DeploymentDetailResponsePreparedStackPermissions, + SDKValidationError +> { return safeParse( jsonString, (x) => - DeploymentDetailResponsePermissions$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DeploymentDetailResponsePermissions' from JSON`, + DeploymentDetailResponsePreparedStackPermissions$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponsePreparedStackPermissions' from JSON`, ); } @@ -8278,6 +12905,7 @@ export const DeploymentDetailResponsePreparedStackResources$inboundSchema: dependencies: z.array(z.lazy(() => DeploymentDetailResponsePreparedStackDependency$inboundSchema )), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: DeploymentDetailResponsePreparedStackLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }, @@ -8300,9 +12928,9 @@ export function deploymentDetailResponsePreparedStackResourcesFromJSON( } /** @internal */ -export const DeploymentDetailResponseSupportedPlatform$inboundSchema: z.ZodEnum< - typeof DeploymentDetailResponseSupportedPlatform -> = z.enum(DeploymentDetailResponseSupportedPlatform); +export const DeploymentDetailResponsePreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum = z + .enum(DeploymentDetailResponsePreparedStackSupportedPlatform); /** @internal */ export const DeploymentDetailResponsePreparedStack$inboundSchema: z.ZodType< @@ -8310,16 +12938,20 @@ export const DeploymentDetailResponsePreparedStack$inboundSchema: z.ZodType< unknown > = z.object({ id: z.string(), - inputs: z.array(z.lazy(() => DeploymentDetailResponseInput$inboundSchema)) - .optional(), - permissions: z.lazy(() => DeploymentDetailResponsePermissions$inboundSchema) - .optional(), + inputs: z.array( + z.lazy(() => DeploymentDetailResponsePreparedStackInput$inboundSchema), + ).optional(), + permissions: z.lazy(() => + DeploymentDetailResponsePreparedStackPermissions$inboundSchema + ).optional(), resources: z.record( z.string(), z.lazy(() => DeploymentDetailResponsePreparedStackResources$inboundSchema), ), supportedPlatforms: z.nullable( - z.array(DeploymentDetailResponseSupportedPlatform$inboundSchema), + z.array( + DeploymentDetailResponsePreparedStackSupportedPlatform$inboundSchema, + ), ).optional(), }); @@ -8357,6 +12989,61 @@ export function deploymentDetailResponsePreparedStackUnionFromJSON( ); } +/** @internal */ +export const DeploymentDetailResponseSetupUpdateAuthorization$inboundSchema: + z.ZodType = z + .object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), + }); + +export function deploymentDetailResponseSetupUpdateAuthorizationFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseSetupUpdateAuthorization, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseSetupUpdateAuthorization$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseSetupUpdateAuthorization' from JSON`, + ); +} + +/** @internal */ +export const DeploymentDetailResponseSetupUpdateAuthorizationUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentDetailResponseSetupUpdateAuthorization$inboundSchema + ), + z.any(), + ]); + +export function deploymentDetailResponseSetupUpdateAuthorizationUnionFromJSON( + jsonString: string, +): SafeParseResult< + DeploymentDetailResponseSetupUpdateAuthorizationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentDetailResponseSetupUpdateAuthorizationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentDetailResponseSetupUpdateAuthorizationUnion' from JSON`, + ); +} + /** @internal */ export const DeploymentDetailResponseRuntimeMetadata$inboundSchema: z.ZodType< DeploymentDetailResponseRuntimeMetadata, @@ -8364,6 +13051,12 @@ export const DeploymentDetailResponseRuntimeMetadata$inboundSchema: z.ZodType< > = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => DeploymentDetailResponsePendingPreparedStack$inboundSchema), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([ z.lazy(() => DeploymentDetailResponsePreparedStack$inboundSchema), @@ -8371,6 +13064,14 @@ export const DeploymentDetailResponseRuntimeMetadata$inboundSchema: z.ZodType< ]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => + DeploymentDetailResponseSetupUpdateAuthorization$inboundSchema + ), + z.any(), + ]), + ).optional(), }); export function deploymentDetailResponseRuntimeMetadataFromJSON( diff --git a/client-sdks/platform/typescript/src/models/deploymentsetupstacksettingspolicy.ts b/client-sdks/platform/typescript/src/models/deploymentsetupstacksettingspolicy.ts index 8eca47b0e..5a7ee31f0 100644 --- a/client-sdks/platform/typescript/src/models/deploymentsetupstacksettingspolicy.ts +++ b/client-sdks/platform/typescript/src/models/deploymentsetupstacksettingspolicy.ts @@ -9,7 +9,33 @@ import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +/** + * Failure-domain policy selected for a compute pool. + */ +export type DeploymentSetupStackSettingsPolicyFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type DeploymentSetupStackSettingsPolicyFailureDomainsUnion2 = + | DeploymentSetupStackSettingsPolicyFailureDomains2 + | any; + export type DeploymentSetupStackSettingsPolicyPoolsAutoscale = { + failureDomains?: + | DeploymentSetupStackSettingsPolicyFailureDomains2 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -25,7 +51,33 @@ export type DeploymentSetupStackSettingsPolicyPoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type DeploymentSetupStackSettingsPolicyFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type DeploymentSetupStackSettingsPolicyFailureDomainsUnion1 = + | DeploymentSetupStackSettingsPolicyFailureDomains1 + | any; + export type DeploymentSetupStackSettingsPolicyPoolsFixed = { + failureDomains?: + | DeploymentSetupStackSettingsPolicyFailureDomains1 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -1225,17 +1277,134 @@ export type DeploymentSetupStackSettingsPolicy = { allowCustomRegistry?: boolean | undefined; }; +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomains2$inboundSchema: + z.ZodType = z + .object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); +/** @internal */ +export type DeploymentSetupStackSettingsPolicyFailureDomains2$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomains2$outboundSchema: + z.ZodType< + DeploymentSetupStackSettingsPolicyFailureDomains2$Outbound, + DeploymentSetupStackSettingsPolicyFailureDomains2 + > = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function deploymentSetupStackSettingsPolicyFailureDomains2ToJSON( + deploymentSetupStackSettingsPolicyFailureDomains2: + DeploymentSetupStackSettingsPolicyFailureDomains2, +): string { + return JSON.stringify( + DeploymentSetupStackSettingsPolicyFailureDomains2$outboundSchema.parse( + deploymentSetupStackSettingsPolicyFailureDomains2, + ), + ); +} +export function deploymentSetupStackSettingsPolicyFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentSetupStackSettingsPolicyFailureDomains2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentSetupStackSettingsPolicyFailureDomains2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentSetupStackSettingsPolicyFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomainsUnion2$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains2$inboundSchema + ), + z.any(), + ]); +/** @internal */ +export type DeploymentSetupStackSettingsPolicyFailureDomainsUnion2$Outbound = + | DeploymentSetupStackSettingsPolicyFailureDomains2$Outbound + | any; + +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomainsUnion2$outboundSchema: + z.ZodType< + DeploymentSetupStackSettingsPolicyFailureDomainsUnion2$Outbound, + DeploymentSetupStackSettingsPolicyFailureDomainsUnion2 + > = z.union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains2$outboundSchema + ), + z.any(), + ]); + +export function deploymentSetupStackSettingsPolicyFailureDomainsUnion2ToJSON( + deploymentSetupStackSettingsPolicyFailureDomainsUnion2: + DeploymentSetupStackSettingsPolicyFailureDomainsUnion2, +): string { + return JSON.stringify( + DeploymentSetupStackSettingsPolicyFailureDomainsUnion2$outboundSchema.parse( + deploymentSetupStackSettingsPolicyFailureDomainsUnion2, + ), + ); +} +export function deploymentSetupStackSettingsPolicyFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentSetupStackSettingsPolicyFailureDomainsUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentSetupStackSettingsPolicyFailureDomainsUnion2$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentSetupStackSettingsPolicyFailureDomainsUnion2' from JSON`, + ); +} + /** @internal */ export const DeploymentSetupStackSettingsPolicyPoolsAutoscale$inboundSchema: z.ZodType = z .object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains2$inboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), + }).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); /** @internal */ export type DeploymentSetupStackSettingsPolicyPoolsAutoscale$Outbound = { + failure_domains?: + | DeploymentSetupStackSettingsPolicyFailureDomains2$Outbound + | any + | null + | undefined; machine?: string | null | undefined; max: number; min: number; @@ -1248,10 +1417,22 @@ export const DeploymentSetupStackSettingsPolicyPoolsAutoscale$outboundSchema: DeploymentSetupStackSettingsPolicyPoolsAutoscale$Outbound, DeploymentSetupStackSettingsPolicyPoolsAutoscale > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains2$outboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), + }).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function deploymentSetupStackSettingsPolicyPoolsAutoscaleToJSON( @@ -1280,15 +1461,132 @@ export function deploymentSetupStackSettingsPolicyPoolsAutoscaleFromJSON( ); } +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomains1$inboundSchema: + z.ZodType = z + .object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); +/** @internal */ +export type DeploymentSetupStackSettingsPolicyFailureDomains1$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomains1$outboundSchema: + z.ZodType< + DeploymentSetupStackSettingsPolicyFailureDomains1$Outbound, + DeploymentSetupStackSettingsPolicyFailureDomains1 + > = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function deploymentSetupStackSettingsPolicyFailureDomains1ToJSON( + deploymentSetupStackSettingsPolicyFailureDomains1: + DeploymentSetupStackSettingsPolicyFailureDomains1, +): string { + return JSON.stringify( + DeploymentSetupStackSettingsPolicyFailureDomains1$outboundSchema.parse( + deploymentSetupStackSettingsPolicyFailureDomains1, + ), + ); +} +export function deploymentSetupStackSettingsPolicyFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentSetupStackSettingsPolicyFailureDomains1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentSetupStackSettingsPolicyFailureDomains1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'DeploymentSetupStackSettingsPolicyFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomainsUnion1$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains1$inboundSchema + ), + z.any(), + ]); +/** @internal */ +export type DeploymentSetupStackSettingsPolicyFailureDomainsUnion1$Outbound = + | DeploymentSetupStackSettingsPolicyFailureDomains1$Outbound + | any; + +/** @internal */ +export const DeploymentSetupStackSettingsPolicyFailureDomainsUnion1$outboundSchema: + z.ZodType< + DeploymentSetupStackSettingsPolicyFailureDomainsUnion1$Outbound, + DeploymentSetupStackSettingsPolicyFailureDomainsUnion1 + > = z.union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains1$outboundSchema + ), + z.any(), + ]); + +export function deploymentSetupStackSettingsPolicyFailureDomainsUnion1ToJSON( + deploymentSetupStackSettingsPolicyFailureDomainsUnion1: + DeploymentSetupStackSettingsPolicyFailureDomainsUnion1, +): string { + return JSON.stringify( + DeploymentSetupStackSettingsPolicyFailureDomainsUnion1$outboundSchema.parse( + deploymentSetupStackSettingsPolicyFailureDomainsUnion1, + ), + ); +} +export function deploymentSetupStackSettingsPolicyFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult< + DeploymentSetupStackSettingsPolicyFailureDomainsUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + DeploymentSetupStackSettingsPolicyFailureDomainsUnion1$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'DeploymentSetupStackSettingsPolicyFailureDomainsUnion1' from JSON`, + ); +} + /** @internal */ export const DeploymentSetupStackSettingsPolicyPoolsFixed$inboundSchema: z.ZodType = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains1$inboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), + }).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); /** @internal */ export type DeploymentSetupStackSettingsPolicyPoolsFixed$Outbound = { + failure_domains?: + | DeploymentSetupStackSettingsPolicyFailureDomains1$Outbound + | any + | null + | undefined; machine?: string | null | undefined; machines: number; mode: "fixed"; @@ -1300,9 +1598,21 @@ export const DeploymentSetupStackSettingsPolicyPoolsFixed$outboundSchema: DeploymentSetupStackSettingsPolicyPoolsFixed$Outbound, DeploymentSetupStackSettingsPolicyPoolsFixed > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => + DeploymentSetupStackSettingsPolicyFailureDomains1$outboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), + }).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function deploymentSetupStackSettingsPolicyPoolsFixedToJSON( diff --git a/client-sdks/platform/typescript/src/models/event.ts b/client-sdks/platform/typescript/src/models/event.ts index 856e8086b..b91230b10 100644 --- a/client-sdks/platform/typescript/src/models/event.ts +++ b/client-sdks/platform/typescript/src/models/event.ts @@ -12,7 +12,7 @@ import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export type DataDeploymentDeletionRequested = { +export type EventDataDeploymentDeletionRequested = { /** * ID of the deployment */ @@ -35,7 +35,7 @@ export type EventKind2 = ClosedEnum; /** * Authenticated principal that requested a deployment intent event. */ -export type Actor2 = { +export type EventActor2 = { /** * User email when the principal is a user. */ @@ -50,10 +50,10 @@ export type Actor2 = { kind: EventKind2; }; -export type ActorUnion2 = Actor2 | any; +export type EventActorUnion2 = EventActor2 | any; -export type DataDeploymentEnvironmentUpdated = { - actor?: Actor2 | any | null | undefined; +export type EventDataDeploymentEnvironmentUpdated = { + actor?: EventActor2 | any | null | undefined; /** * Names of the environment variables that changed (added, removed, or modified) */ @@ -65,7 +65,7 @@ export type DataDeploymentEnvironmentUpdated = { type: "DeploymentEnvironmentUpdated"; }; -export type DataDeploymentReleaseUnpinned = { +export type EventDataDeploymentReleaseUnpinned = { /** * ID of the deployment */ @@ -77,7 +77,7 @@ export type DataDeploymentReleaseUnpinned = { type: "DeploymentReleaseUnpinned"; }; -export type DataDeploymentReleasePinned = { +export type EventDataDeploymentReleasePinned = { /** * ID of the deployment */ @@ -93,7 +93,7 @@ export type DataDeploymentReleasePinned = { type: "DeploymentReleasePinned"; }; -export type DataDeploymentRedeployRequested = { +export type EventDataDeploymentRedeployRequested = { /** * ID of the deployment */ @@ -120,7 +120,7 @@ export type EventKind1 = ClosedEnum; /** * Authenticated principal that requested a deployment intent event. */ -export type Actor1 = { +export type EventActor1 = { /** * User email when the principal is a user. */ @@ -135,7 +135,7 @@ export type Actor1 = { kind: EventKind1; }; -export type ActorUnion1 = Actor1 | any; +export type EventActorUnion1 = EventActor1 | any; /** * Canonical error container that provides a structured way to represent errors @@ -148,7 +148,7 @@ export type ActorUnion1 = Actor1 | any; * supporting serialization for API responses and detailed error reporting * in distributed systems. */ -export type PreviousError = { +export type EventPreviousError = { /** * A unique identifier for the type of error. * @@ -223,10 +223,10 @@ export type PreviousError = { source?: any | null | undefined; }; -export type PreviousErrorUnion = PreviousError | any; +export type EventPreviousErrorUnion = EventPreviousError | any; -export type DataDeploymentRetryRequested = { - actor?: Actor1 | any | null | undefined; +export type EventDataDeploymentRetryRequested = { + actor?: EventActor1 | any | null | undefined; /** * ID of the release that the failed attempt was targeting, if known */ @@ -235,11 +235,11 @@ export type DataDeploymentRetryRequested = { * ID of the deployment */ deploymentId: string; - previousError?: PreviousError | any | null | undefined; + previousError?: EventPreviousError | any | null | undefined; type: "DeploymentRetryRequested"; }; -export type DataDeploymentDeleted = { +export type EventDataDeploymentDeleted = { /** * ID of the deployment that was deleted */ @@ -247,7 +247,7 @@ export type DataDeploymentDeleted = { type: "DeploymentDeleted"; }; -export type DataDeploymentRecovered = { +export type EventDataDeploymentRecovered = { /** * ID of the deployment */ @@ -270,7 +270,7 @@ export type DataDeploymentRecovered = { * supporting serialization for API responses and detailed error reporting * in distributed systems. */ -export type DataError2 = { +export type EventDataError2 = { /** * A unique identifier for the type of error. * @@ -345,7 +345,7 @@ export type DataError2 = { source?: any | null | undefined; }; -export type DataDeploymentDegraded = { +export type EventDataDeploymentDegraded = { /** * ID of the deployment */ @@ -361,7 +361,7 @@ export type DataDeploymentDegraded = { * supporting serialization for API responses and detailed error reporting * in distributed systems. */ - error: DataError2; + error: EventDataError2; type: "DeploymentDegraded"; }; @@ -376,7 +376,7 @@ export type DataDeploymentDegraded = { * supporting serialization for API responses and detailed error reporting * in distributed systems. */ -export type DataError1 = { +export type EventDataError1 = { /** * A unique identifier for the type of error. * @@ -461,7 +461,7 @@ export type DataError1 = { * `Updating`, `delete-failed` → `Deleting`. * `refresh-failed` is modelled separately via `DeploymentDegraded`. */ -export const Phase = { +export const EventPhase = { Preflights: "preflights", Provisioning: "provisioning", Updating: "updating", @@ -477,9 +477,9 @@ export const Phase = { * `Updating`, `delete-failed` → `Deleting`. * `refresh-failed` is modelled separately via `DeploymentDegraded`. */ -export type Phase = ClosedEnum; +export type EventPhase = ClosedEnum; -export type DataDeploymentFailed = { +export type EventDataDeploymentFailed = { /** * ID of the release the platform was trying to deploy, if known */ @@ -499,7 +499,7 @@ export type DataDeploymentFailed = { * supporting serialization for API responses and detailed error reporting * in distributed systems. */ - error: DataError1; + error: EventDataError1; /** * Phase of a deployment at which a failure occurred. * @@ -510,11 +510,11 @@ export type DataDeploymentFailed = { * `Updating`, `delete-failed` → `Deleting`. * `refresh-failed` is modelled separately via `DeploymentDegraded`. */ - phase: Phase; + phase: EventPhase; type: "DeploymentFailed"; }; -export type DataDeploymentReleased = { +export type EventDataDeploymentReleased = { /** * ID of the deployment */ @@ -530,7 +530,7 @@ export type DataDeploymentReleased = { type: "DeploymentReleased"; }; -export type DataDeploymentCreated = { +export type EventDataDeploymentCreated = { /** * ID of the deployment group this slot belongs to */ @@ -546,7 +546,7 @@ export type DataDeploymentCreated = { type: "DeploymentCreated"; }; -export type DataEmptyingBuckets = { +export type EventDataEmptyingBuckets = { /** * Names of the S3 buckets being emptied */ @@ -554,7 +554,7 @@ export type DataEmptyingBuckets = { type: "EmptyingBuckets"; }; -export type DataDeletingCloudFormationStack = { +export type EventDataDeletingCloudFormationStack = { /** * Name of the CloudFormation stack */ @@ -566,7 +566,7 @@ export type DataDeletingCloudFormationStack = { type: "DeletingCloudFormationStack"; }; -export type DataImportingStackStateFromCloudFormation = { +export type EventDataImportingStackStateFromCloudFormation = { /** * Name of the CloudFormation stack */ @@ -574,7 +574,7 @@ export type DataImportingStackStateFromCloudFormation = { type: "ImportingStackStateFromCloudFormation"; }; -export type DataAssumingRole = { +export type EventDataAssumingRole = { /** * ARN of the role to assume */ @@ -582,7 +582,7 @@ export type DataAssumingRole = { type: "AssumingRole"; }; -export type DataDeployingCloudFormationStack = { +export type EventDataDeployingCloudFormationStack = { /** * Name of the CloudFormation stack */ @@ -594,7 +594,7 @@ export type DataDeployingCloudFormationStack = { type: "DeployingCloudFormationStack"; }; -export type DataEnsuringDockerRepository = { +export type EventDataEnsuringDockerRepository = { /** * Name of the docker repository */ @@ -602,7 +602,7 @@ export type DataEnsuringDockerRepository = { type: "EnsuringDockerRepository"; }; -export type DataSettingUpPlatformContext = { +export type EventDataSettingUpPlatformContext = { /** * Name of the platform (e.g., "AWS", "GCP") */ @@ -610,7 +610,7 @@ export type DataSettingUpPlatformContext = { type: "SettingUpPlatformContext"; }; -export type DataCleaningUpEnvironment = { +export type EventDataCleaningUpEnvironment = { /** * Name of the stack being cleaned up */ @@ -622,7 +622,7 @@ export type DataCleaningUpEnvironment = { type: "CleaningUpEnvironment"; }; -export type DataCleaningUpStack = { +export type EventDataCleaningUpStack = { /** * Name of the stack being cleaned up */ @@ -634,7 +634,7 @@ export type DataCleaningUpStack = { type: "CleaningUpStack"; }; -export type DataRunningTestWorker = { +export type EventDataRunningTestWorker = { /** * Name of the stack being tested */ @@ -642,7 +642,7 @@ export type DataRunningTestWorker = { type: "RunningTestWorker"; }; -export type DataDeployingStack = { +export type EventDataDeployingStack = { /** * Name of the stack being deployed */ @@ -650,7 +650,7 @@ export type DataDeployingStack = { type: "DeployingStack"; }; -export type DataPreparingEnvironment = { +export type EventDataPreparingEnvironment = { /** * Name of the deployment strategy being used */ @@ -658,7 +658,7 @@ export type DataPreparingEnvironment = { type: "PreparingEnvironment"; }; -export type DataDebuggingAgent = { +export type EventDataDebuggingAgent = { /** * ID of the agent being debugged */ @@ -670,7 +670,7 @@ export type DataDebuggingAgent = { type: "DebuggingAgent"; }; -export type DataDeletingAgent = { +export type EventDataDeletingAgent = { /** * ID of the agent being deleted */ @@ -682,7 +682,7 @@ export type DataDeletingAgent = { type: "DeletingAgent"; }; -export type DataUpdatingAgent = { +export type EventDataUpdatingAgent = { /** * ID of the agent being updated */ @@ -694,7 +694,7 @@ export type DataUpdatingAgent = { type: "UpdatingAgent"; }; -export type DataProvisioningAgent = { +export type EventDataProvisioningAgent = { /** * ID of the agent being provisioned */ @@ -706,7 +706,7 @@ export type DataProvisioningAgent = { type: "ProvisioningAgent"; }; -export type DataGeneratingTemplate = { +export type EventDataGeneratingTemplate = { /** * Platform for which the template is being generated */ @@ -714,7 +714,7 @@ export type DataGeneratingTemplate = { type: "GeneratingTemplate"; }; -export type DataGeneratingCloudFormationTemplate = { +export type EventDataGeneratingCloudFormationTemplate = { type: "GeneratingCloudFormationTemplate"; }; @@ -793,7 +793,7 @@ export type EventDependency = { * supporting serialization for API responses and detailed error reporting * in distributed systems. */ -export type ErrorNextState = { +export type EventErrorNextState = { /** * A unique identifier for the type of error. * @@ -868,7 +868,7 @@ export type ErrorNextState = { source?: any | null | undefined; }; -export type NextStateErrorUnion = ErrorNextState | any; +export type EventNextStateErrorUnion = EventErrorNextState | any; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. @@ -959,7 +959,7 @@ export type EventResources = { * This preserves the full dependency information from the stack definition. */ dependencies?: Array | undefined; - error?: ErrorNextState | any | null | undefined; + error?: EventErrorNextState | any | null | undefined; /** * Stores the controller state that failed, used for manual retry operations. * @@ -997,7 +997,7 @@ export type EventResources = { /** * Represents the collective state of all resources in a stack, including platform and pending actions. */ -export type NextState = { +export type EventNextState = { /** * Represents the target cloud platform. */ @@ -1012,11 +1012,11 @@ export type NextState = { resources: { [k: string]: EventResources }; }; -export type DataStackStep = { +export type EventDataStackStep = { /** * Represents the collective state of all resources in a stack, including platform and pending actions. */ - nextState: NextState; + nextState: EventNextState; /** * An suggested duration to wait before executing the next step. */ @@ -1024,7 +1024,7 @@ export type DataStackStep = { type: "StackStep"; }; -export type DataCompilingCode = { +export type EventDataCompilingCode = { /** * Language being compiled (rust, typescript, etc.) */ @@ -1036,7 +1036,7 @@ export type DataCompilingCode = { type: "CompilingCode"; }; -export type DataCreatingRelease = { +export type EventDataCreatingRelease = { /** * Project name */ @@ -1044,7 +1044,7 @@ export type DataCreatingRelease = { type: "CreatingRelease"; }; -export type DataPushingResource = { +export type EventDataPushingResource = { /** * Name of the resource being pushed */ @@ -1056,7 +1056,7 @@ export type DataPushingResource = { type: "PushingResource"; }; -export type DataPushingStack = { +export type EventDataPushingStack = { /** * Human-readable destination for pushed images */ @@ -1075,7 +1075,7 @@ export type DataPushingStack = { /** * Progress information for image push operations */ -export type Progress = { +export type EventProgress = { /** * Bytes uploaded so far */ @@ -1098,18 +1098,18 @@ export type Progress = { totalLayers: number; }; -export type ProgressUnion = Progress | any; +export type EventProgressUnion = EventProgress | any; -export type DataPushingImage = { +export type EventDataPushingImage = { /** * Name of the image being pushed */ image: string; - progress?: Progress | any | null | undefined; + progress?: EventProgress | any | null | undefined; type: "PushingImage"; }; -export type DataBuildingImage = { +export type EventDataBuildingImage = { /** * Name of the image being built */ @@ -1117,7 +1117,7 @@ export type DataBuildingImage = { type: "BuildingImage"; }; -export type DataBuildingResource = { +export type EventDataBuildingResource = { /** * All resource names sharing this build (for deduped container groups) */ @@ -1133,7 +1133,7 @@ export type DataBuildingResource = { type: "BuildingResource"; }; -export type DataDownloadingAlienRuntime = { +export type EventDataDownloadingAlienRuntime = { /** * Target triple for the runtime */ @@ -1145,7 +1145,7 @@ export type DataDownloadingAlienRuntime = { url: string; }; -export type DataRunningPreflights = { +export type EventDataRunningPreflights = { /** * Platform being targeted */ @@ -1157,7 +1157,7 @@ export type DataRunningPreflights = { type: "RunningPreflights"; }; -export type DataBuildingStack = { +export type EventDataBuildingStack = { /** * Name of the stack being built */ @@ -1165,73 +1165,73 @@ export type DataBuildingStack = { type: "BuildingStack"; }; -export type DataFinished = { +export type EventDataFinished = { type: "Finished"; }; -export type DataLoadingConfiguration = { +export type EventDataLoadingConfiguration = { type: "LoadingConfiguration"; }; export type EventDataUnion = - | DataLoadingConfiguration - | DataFinished - | DataBuildingStack - | DataRunningPreflights - | DataDownloadingAlienRuntime - | DataBuildingResource - | DataBuildingImage - | DataPushingImage - | DataPushingStack - | DataPushingResource - | DataCreatingRelease - | DataCompilingCode - | DataStackStep - | DataGeneratingCloudFormationTemplate - | DataGeneratingTemplate - | DataProvisioningAgent - | DataUpdatingAgent - | DataDeletingAgent - | DataDebuggingAgent - | DataPreparingEnvironment - | DataDeployingStack - | DataRunningTestWorker - | DataCleaningUpStack - | DataCleaningUpEnvironment - | DataSettingUpPlatformContext - | DataEnsuringDockerRepository - | DataDeployingCloudFormationStack - | DataAssumingRole - | DataImportingStackStateFromCloudFormation - | DataDeletingCloudFormationStack - | DataEmptyingBuckets - | DataDeploymentCreated - | DataDeploymentReleased - | DataDeploymentFailed - | DataDeploymentDegraded - | DataDeploymentRecovered - | DataDeploymentDeleted - | DataDeploymentRetryRequested - | DataDeploymentRedeployRequested - | DataDeploymentReleasePinned - | DataDeploymentReleaseUnpinned - | DataDeploymentEnvironmentUpdated - | DataDeploymentDeletionRequested; - -export const StateSuccess = { + | EventDataLoadingConfiguration + | EventDataFinished + | EventDataBuildingStack + | EventDataRunningPreflights + | EventDataDownloadingAlienRuntime + | EventDataBuildingResource + | EventDataBuildingImage + | EventDataPushingImage + | EventDataPushingStack + | EventDataPushingResource + | EventDataCreatingRelease + | EventDataCompilingCode + | EventDataStackStep + | EventDataGeneratingCloudFormationTemplate + | EventDataGeneratingTemplate + | EventDataProvisioningAgent + | EventDataUpdatingAgent + | EventDataDeletingAgent + | EventDataDebuggingAgent + | EventDataPreparingEnvironment + | EventDataDeployingStack + | EventDataRunningTestWorker + | EventDataCleaningUpStack + | EventDataCleaningUpEnvironment + | EventDataSettingUpPlatformContext + | EventDataEnsuringDockerRepository + | EventDataDeployingCloudFormationStack + | EventDataAssumingRole + | EventDataImportingStackStateFromCloudFormation + | EventDataDeletingCloudFormationStack + | EventDataEmptyingBuckets + | EventDataDeploymentCreated + | EventDataDeploymentReleased + | EventDataDeploymentFailed + | EventDataDeploymentDegraded + | EventDataDeploymentRecovered + | EventDataDeploymentDeleted + | EventDataDeploymentRetryRequested + | EventDataDeploymentRedeployRequested + | EventDataDeploymentReleasePinned + | EventDataDeploymentReleaseUnpinned + | EventDataDeploymentEnvironmentUpdated + | EventDataDeploymentDeletionRequested; + +export const EventStateSuccess = { Success: "success", } as const; -export type StateSuccess = ClosedEnum; +export type EventStateSuccess = ClosedEnum; -export const StateStarted = { +export const EventStateStarted = { Started: "started", } as const; -export type StateStarted = ClosedEnum; +export type EventStateStarted = ClosedEnum; -export const StateNone = { +export const EventStateNone = { None: "none", } as const; -export type StateNone = ClosedEnum; +export type EventStateNone = ClosedEnum; /** * Canonical error container that provides a structured way to represent errors @@ -1244,7 +1244,7 @@ export type StateNone = ClosedEnum; * supporting serialization for API responses and detailed error reporting * in distributed systems. */ -export type ErrorFailed = { +export type EventErrorFailed = { /** * A unique identifier for the type of error. * @@ -1319,26 +1319,30 @@ export type ErrorFailed = { source?: any | null | undefined; }; -export type FailedErrorUnion = ErrorFailed | any; +export type EventFailedErrorUnion = EventErrorFailed | any; /** * Event failed with an error */ -export type Failed = { - error?: ErrorFailed | any | null | undefined; +export type EventFailed = { + error?: EventErrorFailed | any | null | undefined; }; export type EventState = { /** * Event failed with an error */ - failed: Failed; + failed: EventFailed; }; /** * Represents the state of an event */ -export type State = EventState | StateNone | StateStarted | StateSuccess; +export type EventStateUnion = + | EventState + | EventStateNone + | EventStateStarted + | EventStateSuccess; export type Event = { /** @@ -1358,53 +1362,53 @@ export type Event = { */ debugSessionId?: string | null | undefined; data: - | DataLoadingConfiguration - | DataFinished - | DataBuildingStack - | DataRunningPreflights - | DataDownloadingAlienRuntime - | DataBuildingResource - | DataBuildingImage - | DataPushingImage - | DataPushingStack - | DataPushingResource - | DataCreatingRelease - | DataCompilingCode - | DataStackStep - | DataGeneratingCloudFormationTemplate - | DataGeneratingTemplate - | DataProvisioningAgent - | DataUpdatingAgent - | DataDeletingAgent - | DataDebuggingAgent - | DataPreparingEnvironment - | DataDeployingStack - | DataRunningTestWorker - | DataCleaningUpStack - | DataCleaningUpEnvironment - | DataSettingUpPlatformContext - | DataEnsuringDockerRepository - | DataDeployingCloudFormationStack - | DataAssumingRole - | DataImportingStackStateFromCloudFormation - | DataDeletingCloudFormationStack - | DataEmptyingBuckets - | DataDeploymentCreated - | DataDeploymentReleased - | DataDeploymentFailed - | DataDeploymentDegraded - | DataDeploymentRecovered - | DataDeploymentDeleted - | DataDeploymentRetryRequested - | DataDeploymentRedeployRequested - | DataDeploymentReleasePinned - | DataDeploymentReleaseUnpinned - | DataDeploymentEnvironmentUpdated - | DataDeploymentDeletionRequested; + | EventDataLoadingConfiguration + | EventDataFinished + | EventDataBuildingStack + | EventDataRunningPreflights + | EventDataDownloadingAlienRuntime + | EventDataBuildingResource + | EventDataBuildingImage + | EventDataPushingImage + | EventDataPushingStack + | EventDataPushingResource + | EventDataCreatingRelease + | EventDataCompilingCode + | EventDataStackStep + | EventDataGeneratingCloudFormationTemplate + | EventDataGeneratingTemplate + | EventDataProvisioningAgent + | EventDataUpdatingAgent + | EventDataDeletingAgent + | EventDataDebuggingAgent + | EventDataPreparingEnvironment + | EventDataDeployingStack + | EventDataRunningTestWorker + | EventDataCleaningUpStack + | EventDataCleaningUpEnvironment + | EventDataSettingUpPlatformContext + | EventDataEnsuringDockerRepository + | EventDataDeployingCloudFormationStack + | EventDataAssumingRole + | EventDataImportingStackStateFromCloudFormation + | EventDataDeletingCloudFormationStack + | EventDataEmptyingBuckets + | EventDataDeploymentCreated + | EventDataDeploymentReleased + | EventDataDeploymentFailed + | EventDataDeploymentDegraded + | EventDataDeploymentRecovered + | EventDataDeploymentDeleted + | EventDataDeploymentRetryRequested + | EventDataDeploymentRedeployRequested + | EventDataDeploymentReleasePinned + | EventDataDeploymentReleaseUnpinned + | EventDataDeploymentEnvironmentUpdated + | EventDataDeploymentDeletionRequested; /** * Represents the state of an event */ - state: EventState | StateNone | StateStarted | StateSuccess; + state: EventState | EventStateNone | EventStateStarted | EventStateSuccess; /** * Unique identifier for the project. */ @@ -1417,21 +1421,22 @@ export type Event = { }; /** @internal */ -export const DataDeploymentDeletionRequested$inboundSchema: z.ZodType< - DataDeploymentDeletionRequested, +export const EventDataDeploymentDeletionRequested$inboundSchema: z.ZodType< + EventDataDeploymentDeletionRequested, unknown > = z.object({ deploymentId: z.string(), type: z.literal("DeploymentDeletionRequested"), }); -export function dataDeploymentDeletionRequestedFromJSON( +export function eventDataDeploymentDeletionRequestedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentDeletionRequested$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentDeletionRequested' from JSON`, + (x) => + EventDataDeploymentDeletionRequested$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentDeletionRequested' from JSON`, ); } @@ -1441,61 +1446,65 @@ export const EventKind2$inboundSchema: z.ZodEnum = z.enum( ); /** @internal */ -export const Actor2$inboundSchema: z.ZodType = z.object({ - email: z.nullable(z.string()).optional(), - id: z.string(), - kind: EventKind2$inboundSchema, -}); +export const EventActor2$inboundSchema: z.ZodType = z + .object({ + email: z.nullable(z.string()).optional(), + id: z.string(), + kind: EventKind2$inboundSchema, + }); -export function actor2FromJSON( +export function eventActor2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => Actor2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'Actor2' from JSON`, + (x) => EventActor2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventActor2' from JSON`, ); } /** @internal */ -export const ActorUnion2$inboundSchema: z.ZodType = z - .union([z.lazy(() => Actor2$inboundSchema), z.any()]); +export const EventActorUnion2$inboundSchema: z.ZodType< + EventActorUnion2, + unknown +> = z.union([z.lazy(() => EventActor2$inboundSchema), z.any()]); -export function actorUnion2FromJSON( +export function eventActorUnion2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => ActorUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ActorUnion2' from JSON`, + (x) => EventActorUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventActorUnion2' from JSON`, ); } /** @internal */ -export const DataDeploymentEnvironmentUpdated$inboundSchema: z.ZodType< - DataDeploymentEnvironmentUpdated, +export const EventDataDeploymentEnvironmentUpdated$inboundSchema: z.ZodType< + EventDataDeploymentEnvironmentUpdated, unknown > = z.object({ - actor: z.nullable(z.union([z.lazy(() => Actor2$inboundSchema), z.any()])) + actor: z.nullable(z.union([z.lazy(() => EventActor2$inboundSchema), z.any()])) .optional(), changedKeys: z.array(z.string()), deploymentId: z.string(), type: z.literal("DeploymentEnvironmentUpdated"), }); -export function dataDeploymentEnvironmentUpdatedFromJSON( +export function eventDataDeploymentEnvironmentUpdatedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentEnvironmentUpdated$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentEnvironmentUpdated' from JSON`, + (x) => + EventDataDeploymentEnvironmentUpdated$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentEnvironmentUpdated' from JSON`, ); } /** @internal */ -export const DataDeploymentReleaseUnpinned$inboundSchema: z.ZodType< - DataDeploymentReleaseUnpinned, +export const EventDataDeploymentReleaseUnpinned$inboundSchema: z.ZodType< + EventDataDeploymentReleaseUnpinned, unknown > = z.object({ deploymentId: z.string(), @@ -1503,19 +1512,20 @@ export const DataDeploymentReleaseUnpinned$inboundSchema: z.ZodType< type: z.literal("DeploymentReleaseUnpinned"), }); -export function dataDeploymentReleaseUnpinnedFromJSON( +export function eventDataDeploymentReleaseUnpinnedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentReleaseUnpinned$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentReleaseUnpinned' from JSON`, + (x) => + EventDataDeploymentReleaseUnpinned$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentReleaseUnpinned' from JSON`, ); } /** @internal */ -export const DataDeploymentReleasePinned$inboundSchema: z.ZodType< - DataDeploymentReleasePinned, +export const EventDataDeploymentReleasePinned$inboundSchema: z.ZodType< + EventDataDeploymentReleasePinned, unknown > = z.object({ deploymentId: z.string(), @@ -1524,19 +1534,19 @@ export const DataDeploymentReleasePinned$inboundSchema: z.ZodType< type: z.literal("DeploymentReleasePinned"), }); -export function dataDeploymentReleasePinnedFromJSON( +export function eventDataDeploymentReleasePinnedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentReleasePinned$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentReleasePinned' from JSON`, + (x) => EventDataDeploymentReleasePinned$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentReleasePinned' from JSON`, ); } /** @internal */ -export const DataDeploymentRedeployRequested$inboundSchema: z.ZodType< - DataDeploymentRedeployRequested, +export const EventDataDeploymentRedeployRequested$inboundSchema: z.ZodType< + EventDataDeploymentRedeployRequested, unknown > = z.object({ deploymentId: z.string(), @@ -1544,13 +1554,14 @@ export const DataDeploymentRedeployRequested$inboundSchema: z.ZodType< type: z.literal("DeploymentRedeployRequested"), }); -export function dataDeploymentRedeployRequestedFromJSON( +export function eventDataDeploymentRedeployRequestedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentRedeployRequested$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentRedeployRequested' from JSON`, + (x) => + EventDataDeploymentRedeployRequested$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentRedeployRequested' from JSON`, ); } @@ -1560,122 +1571,127 @@ export const EventKind1$inboundSchema: z.ZodEnum = z.enum( ); /** @internal */ -export const Actor1$inboundSchema: z.ZodType = z.object({ - email: z.nullable(z.string()).optional(), - id: z.string(), - kind: EventKind1$inboundSchema, -}); +export const EventActor1$inboundSchema: z.ZodType = z + .object({ + email: z.nullable(z.string()).optional(), + id: z.string(), + kind: EventKind1$inboundSchema, + }); -export function actor1FromJSON( +export function eventActor1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => Actor1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'Actor1' from JSON`, + (x) => EventActor1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventActor1' from JSON`, ); } /** @internal */ -export const ActorUnion1$inboundSchema: z.ZodType = z - .union([z.lazy(() => Actor1$inboundSchema), z.any()]); +export const EventActorUnion1$inboundSchema: z.ZodType< + EventActorUnion1, + unknown +> = z.union([z.lazy(() => EventActor1$inboundSchema), z.any()]); -export function actorUnion1FromJSON( +export function eventActorUnion1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => ActorUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ActorUnion1' from JSON`, + (x) => EventActorUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventActorUnion1' from JSON`, ); } /** @internal */ -export const PreviousError$inboundSchema: z.ZodType = z - .object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), - }); +export const EventPreviousError$inboundSchema: z.ZodType< + EventPreviousError, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function previousErrorFromJSON( +export function eventPreviousErrorFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => PreviousError$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'PreviousError' from JSON`, + (x) => EventPreviousError$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventPreviousError' from JSON`, ); } /** @internal */ -export const PreviousErrorUnion$inboundSchema: z.ZodType< - PreviousErrorUnion, +export const EventPreviousErrorUnion$inboundSchema: z.ZodType< + EventPreviousErrorUnion, unknown -> = z.union([z.lazy(() => PreviousError$inboundSchema), z.any()]); +> = z.union([z.lazy(() => EventPreviousError$inboundSchema), z.any()]); -export function previousErrorUnionFromJSON( +export function eventPreviousErrorUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => PreviousErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'PreviousErrorUnion' from JSON`, + (x) => EventPreviousErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventPreviousErrorUnion' from JSON`, ); } /** @internal */ -export const DataDeploymentRetryRequested$inboundSchema: z.ZodType< - DataDeploymentRetryRequested, +export const EventDataDeploymentRetryRequested$inboundSchema: z.ZodType< + EventDataDeploymentRetryRequested, unknown > = z.object({ - actor: z.nullable(z.union([z.lazy(() => Actor1$inboundSchema), z.any()])) + actor: z.nullable(z.union([z.lazy(() => EventActor1$inboundSchema), z.any()])) .optional(), attemptedReleaseId: z.nullable(z.string()).optional(), deploymentId: z.string(), previousError: z.nullable( - z.union([z.lazy(() => PreviousError$inboundSchema), z.any()]), + z.union([z.lazy(() => EventPreviousError$inboundSchema), z.any()]), ).optional(), type: z.literal("DeploymentRetryRequested"), }); -export function dataDeploymentRetryRequestedFromJSON( +export function eventDataDeploymentRetryRequestedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentRetryRequested$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentRetryRequested' from JSON`, + (x) => EventDataDeploymentRetryRequested$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentRetryRequested' from JSON`, ); } /** @internal */ -export const DataDeploymentDeleted$inboundSchema: z.ZodType< - DataDeploymentDeleted, +export const EventDataDeploymentDeleted$inboundSchema: z.ZodType< + EventDataDeploymentDeleted, unknown > = z.object({ deploymentId: z.string(), type: z.literal("DeploymentDeleted"), }); -export function dataDeploymentDeletedFromJSON( +export function eventDataDeploymentDeletedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentDeleted$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentDeleted' from JSON`, + (x) => EventDataDeploymentDeleted$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentDeleted' from JSON`, ); } /** @internal */ -export const DataDeploymentRecovered$inboundSchema: z.ZodType< - DataDeploymentRecovered, +export const EventDataDeploymentRecovered$inboundSchema: z.ZodType< + EventDataDeploymentRecovered, unknown > = z.object({ deploymentId: z.string(), @@ -1683,110 +1699,116 @@ export const DataDeploymentRecovered$inboundSchema: z.ZodType< type: z.literal("DeploymentRecovered"), }); -export function dataDeploymentRecoveredFromJSON( +export function eventDataDeploymentRecoveredFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentRecovered$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentRecovered' from JSON`, + (x) => EventDataDeploymentRecovered$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentRecovered' from JSON`, ); } /** @internal */ -export const DataError2$inboundSchema: z.ZodType = z - .object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), - }); +export const EventDataError2$inboundSchema: z.ZodType< + EventDataError2, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function dataError2FromJSON( +export function eventDataError2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataError2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataError2' from JSON`, + (x) => EventDataError2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataError2' from JSON`, ); } /** @internal */ -export const DataDeploymentDegraded$inboundSchema: z.ZodType< - DataDeploymentDegraded, +export const EventDataDeploymentDegraded$inboundSchema: z.ZodType< + EventDataDeploymentDegraded, unknown > = z.object({ deploymentId: z.string(), - error: z.lazy(() => DataError2$inboundSchema), + error: z.lazy(() => EventDataError2$inboundSchema), type: z.literal("DeploymentDegraded"), }); -export function dataDeploymentDegradedFromJSON( +export function eventDataDeploymentDegradedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentDegraded$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentDegraded' from JSON`, + (x) => EventDataDeploymentDegraded$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentDegraded' from JSON`, ); } /** @internal */ -export const DataError1$inboundSchema: z.ZodType = z - .object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), - }); +export const EventDataError1$inboundSchema: z.ZodType< + EventDataError1, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function dataError1FromJSON( +export function eventDataError1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataError1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataError1' from JSON`, + (x) => EventDataError1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataError1' from JSON`, ); } /** @internal */ -export const Phase$inboundSchema: z.ZodEnum = z.enum(Phase); +export const EventPhase$inboundSchema: z.ZodEnum = z.enum( + EventPhase, +); /** @internal */ -export const DataDeploymentFailed$inboundSchema: z.ZodType< - DataDeploymentFailed, +export const EventDataDeploymentFailed$inboundSchema: z.ZodType< + EventDataDeploymentFailed, unknown > = z.object({ attemptedReleaseId: z.nullable(z.string()).optional(), deploymentId: z.string(), - error: z.lazy(() => DataError1$inboundSchema), - phase: Phase$inboundSchema, + error: z.lazy(() => EventDataError1$inboundSchema), + phase: EventPhase$inboundSchema, type: z.literal("DeploymentFailed"), }); -export function dataDeploymentFailedFromJSON( +export function eventDataDeploymentFailedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentFailed$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentFailed' from JSON`, + (x) => EventDataDeploymentFailed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentFailed' from JSON`, ); } /** @internal */ -export const DataDeploymentReleased$inboundSchema: z.ZodType< - DataDeploymentReleased, +export const EventDataDeploymentReleased$inboundSchema: z.ZodType< + EventDataDeploymentReleased, unknown > = z.object({ deploymentId: z.string(), @@ -1795,19 +1817,19 @@ export const DataDeploymentReleased$inboundSchema: z.ZodType< type: z.literal("DeploymentReleased"), }); -export function dataDeploymentReleasedFromJSON( +export function eventDataDeploymentReleasedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentReleased$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentReleased' from JSON`, + (x) => EventDataDeploymentReleased$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentReleased' from JSON`, ); } /** @internal */ -export const DataDeploymentCreated$inboundSchema: z.ZodType< - DataDeploymentCreated, +export const EventDataDeploymentCreated$inboundSchema: z.ZodType< + EventDataDeploymentCreated, unknown > = z.object({ deploymentGroupId: z.string(), @@ -1816,38 +1838,38 @@ export const DataDeploymentCreated$inboundSchema: z.ZodType< type: z.literal("DeploymentCreated"), }); -export function dataDeploymentCreatedFromJSON( +export function eventDataDeploymentCreatedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeploymentCreated$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeploymentCreated' from JSON`, + (x) => EventDataDeploymentCreated$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeploymentCreated' from JSON`, ); } /** @internal */ -export const DataEmptyingBuckets$inboundSchema: z.ZodType< - DataEmptyingBuckets, +export const EventDataEmptyingBuckets$inboundSchema: z.ZodType< + EventDataEmptyingBuckets, unknown > = z.object({ bucketNames: z.array(z.string()), type: z.literal("EmptyingBuckets"), }); -export function dataEmptyingBucketsFromJSON( +export function eventDataEmptyingBucketsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataEmptyingBuckets$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataEmptyingBuckets' from JSON`, + (x) => EventDataEmptyingBuckets$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataEmptyingBuckets' from JSON`, ); } /** @internal */ -export const DataDeletingCloudFormationStack$inboundSchema: z.ZodType< - DataDeletingCloudFormationStack, +export const EventDataDeletingCloudFormationStack$inboundSchema: z.ZodType< + EventDataDeletingCloudFormationStack, unknown > = z.object({ cfnStackName: z.string(), @@ -1855,63 +1877,64 @@ export const DataDeletingCloudFormationStack$inboundSchema: z.ZodType< type: z.literal("DeletingCloudFormationStack"), }); -export function dataDeletingCloudFormationStackFromJSON( +export function eventDataDeletingCloudFormationStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeletingCloudFormationStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeletingCloudFormationStack' from JSON`, + (x) => + EventDataDeletingCloudFormationStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeletingCloudFormationStack' from JSON`, ); } /** @internal */ -export const DataImportingStackStateFromCloudFormation$inboundSchema: z.ZodType< - DataImportingStackStateFromCloudFormation, - unknown -> = z.object({ - cfnStackName: z.string(), - type: z.literal("ImportingStackStateFromCloudFormation"), -}); +export const EventDataImportingStackStateFromCloudFormation$inboundSchema: + z.ZodType = z.object( + { + cfnStackName: z.string(), + type: z.literal("ImportingStackStateFromCloudFormation"), + }, + ); -export function dataImportingStackStateFromCloudFormationFromJSON( +export function eventDataImportingStackStateFromCloudFormationFromJSON( jsonString: string, ): SafeParseResult< - DataImportingStackStateFromCloudFormation, + EventDataImportingStackStateFromCloudFormation, SDKValidationError > { return safeParse( jsonString, (x) => - DataImportingStackStateFromCloudFormation$inboundSchema.parse( + EventDataImportingStackStateFromCloudFormation$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'DataImportingStackStateFromCloudFormation' from JSON`, + `Failed to parse 'EventDataImportingStackStateFromCloudFormation' from JSON`, ); } /** @internal */ -export const DataAssumingRole$inboundSchema: z.ZodType< - DataAssumingRole, +export const EventDataAssumingRole$inboundSchema: z.ZodType< + EventDataAssumingRole, unknown > = z.object({ roleArn: z.string(), type: z.literal("AssumingRole"), }); -export function dataAssumingRoleFromJSON( +export function eventDataAssumingRoleFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataAssumingRole$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataAssumingRole' from JSON`, + (x) => EventDataAssumingRole$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataAssumingRole' from JSON`, ); } /** @internal */ -export const DataDeployingCloudFormationStack$inboundSchema: z.ZodType< - DataDeployingCloudFormationStack, +export const EventDataDeployingCloudFormationStack$inboundSchema: z.ZodType< + EventDataDeployingCloudFormationStack, unknown > = z.object({ cfnStackName: z.string(), @@ -1919,57 +1942,58 @@ export const DataDeployingCloudFormationStack$inboundSchema: z.ZodType< type: z.literal("DeployingCloudFormationStack"), }); -export function dataDeployingCloudFormationStackFromJSON( +export function eventDataDeployingCloudFormationStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeployingCloudFormationStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeployingCloudFormationStack' from JSON`, + (x) => + EventDataDeployingCloudFormationStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeployingCloudFormationStack' from JSON`, ); } /** @internal */ -export const DataEnsuringDockerRepository$inboundSchema: z.ZodType< - DataEnsuringDockerRepository, +export const EventDataEnsuringDockerRepository$inboundSchema: z.ZodType< + EventDataEnsuringDockerRepository, unknown > = z.object({ repositoryName: z.string(), type: z.literal("EnsuringDockerRepository"), }); -export function dataEnsuringDockerRepositoryFromJSON( +export function eventDataEnsuringDockerRepositoryFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataEnsuringDockerRepository$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataEnsuringDockerRepository' from JSON`, + (x) => EventDataEnsuringDockerRepository$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataEnsuringDockerRepository' from JSON`, ); } /** @internal */ -export const DataSettingUpPlatformContext$inboundSchema: z.ZodType< - DataSettingUpPlatformContext, +export const EventDataSettingUpPlatformContext$inboundSchema: z.ZodType< + EventDataSettingUpPlatformContext, unknown > = z.object({ platformName: z.string(), type: z.literal("SettingUpPlatformContext"), }); -export function dataSettingUpPlatformContextFromJSON( +export function eventDataSettingUpPlatformContextFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataSettingUpPlatformContext$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataSettingUpPlatformContext' from JSON`, + (x) => EventDataSettingUpPlatformContext$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataSettingUpPlatformContext' from JSON`, ); } /** @internal */ -export const DataCleaningUpEnvironment$inboundSchema: z.ZodType< - DataCleaningUpEnvironment, +export const EventDataCleaningUpEnvironment$inboundSchema: z.ZodType< + EventDataCleaningUpEnvironment, unknown > = z.object({ stackName: z.string(), @@ -1977,19 +2001,19 @@ export const DataCleaningUpEnvironment$inboundSchema: z.ZodType< type: z.literal("CleaningUpEnvironment"), }); -export function dataCleaningUpEnvironmentFromJSON( +export function eventDataCleaningUpEnvironmentFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataCleaningUpEnvironment$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataCleaningUpEnvironment' from JSON`, + (x) => EventDataCleaningUpEnvironment$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataCleaningUpEnvironment' from JSON`, ); } /** @internal */ -export const DataCleaningUpStack$inboundSchema: z.ZodType< - DataCleaningUpStack, +export const EventDataCleaningUpStack$inboundSchema: z.ZodType< + EventDataCleaningUpStack, unknown > = z.object({ stackName: z.string(), @@ -1997,76 +2021,76 @@ export const DataCleaningUpStack$inboundSchema: z.ZodType< type: z.literal("CleaningUpStack"), }); -export function dataCleaningUpStackFromJSON( +export function eventDataCleaningUpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataCleaningUpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataCleaningUpStack' from JSON`, + (x) => EventDataCleaningUpStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataCleaningUpStack' from JSON`, ); } /** @internal */ -export const DataRunningTestWorker$inboundSchema: z.ZodType< - DataRunningTestWorker, +export const EventDataRunningTestWorker$inboundSchema: z.ZodType< + EventDataRunningTestWorker, unknown > = z.object({ stackName: z.string(), type: z.literal("RunningTestWorker"), }); -export function dataRunningTestWorkerFromJSON( +export function eventDataRunningTestWorkerFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataRunningTestWorker$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataRunningTestWorker' from JSON`, + (x) => EventDataRunningTestWorker$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataRunningTestWorker' from JSON`, ); } /** @internal */ -export const DataDeployingStack$inboundSchema: z.ZodType< - DataDeployingStack, +export const EventDataDeployingStack$inboundSchema: z.ZodType< + EventDataDeployingStack, unknown > = z.object({ stackName: z.string(), type: z.literal("DeployingStack"), }); -export function dataDeployingStackFromJSON( +export function eventDataDeployingStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeployingStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeployingStack' from JSON`, + (x) => EventDataDeployingStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeployingStack' from JSON`, ); } /** @internal */ -export const DataPreparingEnvironment$inboundSchema: z.ZodType< - DataPreparingEnvironment, +export const EventDataPreparingEnvironment$inboundSchema: z.ZodType< + EventDataPreparingEnvironment, unknown > = z.object({ strategyName: z.string(), type: z.literal("PreparingEnvironment"), }); -export function dataPreparingEnvironmentFromJSON( +export function eventDataPreparingEnvironmentFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataPreparingEnvironment$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataPreparingEnvironment' from JSON`, + (x) => EventDataPreparingEnvironment$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataPreparingEnvironment' from JSON`, ); } /** @internal */ -export const DataDebuggingAgent$inboundSchema: z.ZodType< - DataDebuggingAgent, +export const EventDataDebuggingAgent$inboundSchema: z.ZodType< + EventDataDebuggingAgent, unknown > = z.object({ agentId: z.string(), @@ -2074,19 +2098,19 @@ export const DataDebuggingAgent$inboundSchema: z.ZodType< type: z.literal("DebuggingAgent"), }); -export function dataDebuggingAgentFromJSON( +export function eventDataDebuggingAgentFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDebuggingAgent$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDebuggingAgent' from JSON`, + (x) => EventDataDebuggingAgent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDebuggingAgent' from JSON`, ); } /** @internal */ -export const DataDeletingAgent$inboundSchema: z.ZodType< - DataDeletingAgent, +export const EventDataDeletingAgent$inboundSchema: z.ZodType< + EventDataDeletingAgent, unknown > = z.object({ agentId: z.string(), @@ -2094,19 +2118,19 @@ export const DataDeletingAgent$inboundSchema: z.ZodType< type: z.literal("DeletingAgent"), }); -export function dataDeletingAgentFromJSON( +export function eventDataDeletingAgentFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDeletingAgent$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDeletingAgent' from JSON`, + (x) => EventDataDeletingAgent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDeletingAgent' from JSON`, ); } /** @internal */ -export const DataUpdatingAgent$inboundSchema: z.ZodType< - DataUpdatingAgent, +export const EventDataUpdatingAgent$inboundSchema: z.ZodType< + EventDataUpdatingAgent, unknown > = z.object({ agentId: z.string(), @@ -2114,19 +2138,19 @@ export const DataUpdatingAgent$inboundSchema: z.ZodType< type: z.literal("UpdatingAgent"), }); -export function dataUpdatingAgentFromJSON( +export function eventDataUpdatingAgentFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataUpdatingAgent$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataUpdatingAgent' from JSON`, + (x) => EventDataUpdatingAgent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataUpdatingAgent' from JSON`, ); } /** @internal */ -export const DataProvisioningAgent$inboundSchema: z.ZodType< - DataProvisioningAgent, +export const EventDataProvisioningAgent$inboundSchema: z.ZodType< + EventDataProvisioningAgent, unknown > = z.object({ agentId: z.string(), @@ -2134,51 +2158,56 @@ export const DataProvisioningAgent$inboundSchema: z.ZodType< type: z.literal("ProvisioningAgent"), }); -export function dataProvisioningAgentFromJSON( +export function eventDataProvisioningAgentFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataProvisioningAgent$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataProvisioningAgent' from JSON`, + (x) => EventDataProvisioningAgent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataProvisioningAgent' from JSON`, ); } /** @internal */ -export const DataGeneratingTemplate$inboundSchema: z.ZodType< - DataGeneratingTemplate, +export const EventDataGeneratingTemplate$inboundSchema: z.ZodType< + EventDataGeneratingTemplate, unknown > = z.object({ platform: z.string(), type: z.literal("GeneratingTemplate"), }); -export function dataGeneratingTemplateFromJSON( +export function eventDataGeneratingTemplateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataGeneratingTemplate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataGeneratingTemplate' from JSON`, + (x) => EventDataGeneratingTemplate$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataGeneratingTemplate' from JSON`, ); } /** @internal */ -export const DataGeneratingCloudFormationTemplate$inboundSchema: z.ZodType< - DataGeneratingCloudFormationTemplate, +export const EventDataGeneratingCloudFormationTemplate$inboundSchema: z.ZodType< + EventDataGeneratingCloudFormationTemplate, unknown > = z.object({ type: z.literal("GeneratingCloudFormationTemplate"), }); -export function dataGeneratingCloudFormationTemplateFromJSON( +export function eventDataGeneratingCloudFormationTemplateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + EventDataGeneratingCloudFormationTemplate, + SDKValidationError +> { return safeParse( jsonString, (x) => - DataGeneratingCloudFormationTemplate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataGeneratingCloudFormationTemplate' from JSON`, + EventDataGeneratingCloudFormationTemplate$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventDataGeneratingCloudFormationTemplate' from JSON`, ); } @@ -2248,41 +2277,43 @@ export function eventDependencyFromJSON( } /** @internal */ -export const ErrorNextState$inboundSchema: z.ZodType = - z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), - }); +export const EventErrorNextState$inboundSchema: z.ZodType< + EventErrorNextState, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function errorNextStateFromJSON( +export function eventErrorNextStateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => ErrorNextState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ErrorNextState' from JSON`, + (x) => EventErrorNextState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventErrorNextState' from JSON`, ); } /** @internal */ -export const NextStateErrorUnion$inboundSchema: z.ZodType< - NextStateErrorUnion, +export const EventNextStateErrorUnion$inboundSchema: z.ZodType< + EventNextStateErrorUnion, unknown -> = z.union([z.lazy(() => ErrorNextState$inboundSchema), z.any()]); +> = z.union([z.lazy(() => EventErrorNextState$inboundSchema), z.any()]); -export function nextStateErrorUnionFromJSON( +export function eventNextStateErrorUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => NextStateErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'NextStateErrorUnion' from JSON`, + (x) => EventNextStateErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventNextStateErrorUnion' from JSON`, ); } @@ -2398,7 +2429,7 @@ export const EventResources$inboundSchema: z.ZodType = dependencies: z.array(z.lazy(() => EventDependency$inboundSchema)) .optional(), error: z.nullable( - z.union([z.lazy(() => ErrorNextState$inboundSchema), z.any()]), + z.union([z.lazy(() => EventErrorNextState$inboundSchema), z.any()]), ).optional(), lastFailedState: z.nullable(z.any()).optional(), lifecycle: z.nullable(z.union([EventLifecycleEnum$inboundSchema, z.any()])) @@ -2430,43 +2461,46 @@ export function eventResourcesFromJSON( } /** @internal */ -export const NextState$inboundSchema: z.ZodType = z.object({ - platform: EventPlatform$inboundSchema, - resourcePrefix: z.string(), - resources: z.record(z.string(), z.lazy(() => EventResources$inboundSchema)), -}); +export const EventNextState$inboundSchema: z.ZodType = + z.object({ + platform: EventPlatform$inboundSchema, + resourcePrefix: z.string(), + resources: z.record(z.string(), z.lazy(() => EventResources$inboundSchema)), + }); -export function nextStateFromJSON( +export function eventNextStateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => NextState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'NextState' from JSON`, + (x) => EventNextState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventNextState' from JSON`, ); } /** @internal */ -export const DataStackStep$inboundSchema: z.ZodType = z - .object({ - nextState: z.lazy(() => NextState$inboundSchema), - suggestedDelayMs: z.nullable(z.int()).optional(), - type: z.literal("StackStep"), - }); +export const EventDataStackStep$inboundSchema: z.ZodType< + EventDataStackStep, + unknown +> = z.object({ + nextState: z.lazy(() => EventNextState$inboundSchema), + suggestedDelayMs: z.nullable(z.int()).optional(), + type: z.literal("StackStep"), +}); -export function dataStackStepFromJSON( +export function eventDataStackStepFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataStackStep$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataStackStep' from JSON`, + (x) => EventDataStackStep$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataStackStep' from JSON`, ); } /** @internal */ -export const DataCompilingCode$inboundSchema: z.ZodType< - DataCompilingCode, +export const EventDataCompilingCode$inboundSchema: z.ZodType< + EventDataCompilingCode, unknown > = z.object({ language: z.string(), @@ -2474,38 +2508,38 @@ export const DataCompilingCode$inboundSchema: z.ZodType< type: z.literal("CompilingCode"), }); -export function dataCompilingCodeFromJSON( +export function eventDataCompilingCodeFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataCompilingCode$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataCompilingCode' from JSON`, + (x) => EventDataCompilingCode$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataCompilingCode' from JSON`, ); } /** @internal */ -export const DataCreatingRelease$inboundSchema: z.ZodType< - DataCreatingRelease, +export const EventDataCreatingRelease$inboundSchema: z.ZodType< + EventDataCreatingRelease, unknown > = z.object({ project: z.string(), type: z.literal("CreatingRelease"), }); -export function dataCreatingReleaseFromJSON( +export function eventDataCreatingReleaseFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataCreatingRelease$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataCreatingRelease' from JSON`, + (x) => EventDataCreatingRelease$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataCreatingRelease' from JSON`, ); } /** @internal */ -export const DataPushingResource$inboundSchema: z.ZodType< - DataPushingResource, +export const EventDataPushingResource$inboundSchema: z.ZodType< + EventDataPushingResource, unknown > = z.object({ resourceName: z.string(), @@ -2513,19 +2547,19 @@ export const DataPushingResource$inboundSchema: z.ZodType< type: z.literal("PushingResource"), }); -export function dataPushingResourceFromJSON( +export function eventDataPushingResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataPushingResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataPushingResource' from JSON`, + (x) => EventDataPushingResource$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataPushingResource' from JSON`, ); } /** @internal */ -export const DataPushingStack$inboundSchema: z.ZodType< - DataPushingStack, +export const EventDataPushingStack$inboundSchema: z.ZodType< + EventDataPushingStack, unknown > = z.object({ destination: z.nullable(z.string()).optional(), @@ -2534,92 +2568,96 @@ export const DataPushingStack$inboundSchema: z.ZodType< type: z.literal("PushingStack"), }); -export function dataPushingStackFromJSON( +export function eventDataPushingStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataPushingStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataPushingStack' from JSON`, + (x) => EventDataPushingStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataPushingStack' from JSON`, ); } /** @internal */ -export const Progress$inboundSchema: z.ZodType = z.object({ - bytesUploaded: z.int(), - layersUploaded: z.int(), - operation: z.string(), - totalBytes: z.int(), - totalLayers: z.int(), -}); +export const EventProgress$inboundSchema: z.ZodType = z + .object({ + bytesUploaded: z.int(), + layersUploaded: z.int(), + operation: z.string(), + totalBytes: z.int(), + totalLayers: z.int(), + }); -export function progressFromJSON( +export function eventProgressFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => Progress$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'Progress' from JSON`, + (x) => EventProgress$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventProgress' from JSON`, ); } /** @internal */ -export const ProgressUnion$inboundSchema: z.ZodType = z - .union([z.lazy(() => Progress$inboundSchema), z.any()]); +export const EventProgressUnion$inboundSchema: z.ZodType< + EventProgressUnion, + unknown +> = z.union([z.lazy(() => EventProgress$inboundSchema), z.any()]); -export function progressUnionFromJSON( +export function eventProgressUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => ProgressUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ProgressUnion' from JSON`, + (x) => EventProgressUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventProgressUnion' from JSON`, ); } /** @internal */ -export const DataPushingImage$inboundSchema: z.ZodType< - DataPushingImage, +export const EventDataPushingImage$inboundSchema: z.ZodType< + EventDataPushingImage, unknown > = z.object({ image: z.string(), - progress: z.nullable(z.union([z.lazy(() => Progress$inboundSchema), z.any()])) - .optional(), + progress: z.nullable( + z.union([z.lazy(() => EventProgress$inboundSchema), z.any()]), + ).optional(), type: z.literal("PushingImage"), }); -export function dataPushingImageFromJSON( +export function eventDataPushingImageFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataPushingImage$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataPushingImage' from JSON`, + (x) => EventDataPushingImage$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataPushingImage' from JSON`, ); } /** @internal */ -export const DataBuildingImage$inboundSchema: z.ZodType< - DataBuildingImage, +export const EventDataBuildingImage$inboundSchema: z.ZodType< + EventDataBuildingImage, unknown > = z.object({ image: z.string(), type: z.literal("BuildingImage"), }); -export function dataBuildingImageFromJSON( +export function eventDataBuildingImageFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataBuildingImage$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataBuildingImage' from JSON`, + (x) => EventDataBuildingImage$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataBuildingImage' from JSON`, ); } /** @internal */ -export const DataBuildingResource$inboundSchema: z.ZodType< - DataBuildingResource, +export const EventDataBuildingResource$inboundSchema: z.ZodType< + EventDataBuildingResource, unknown > = z.object({ relatedResources: z.array(z.string()).optional(), @@ -2628,19 +2666,19 @@ export const DataBuildingResource$inboundSchema: z.ZodType< type: z.literal("BuildingResource"), }); -export function dataBuildingResourceFromJSON( +export function eventDataBuildingResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataBuildingResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataBuildingResource' from JSON`, + (x) => EventDataBuildingResource$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataBuildingResource' from JSON`, ); } /** @internal */ -export const DataDownloadingAlienRuntime$inboundSchema: z.ZodType< - DataDownloadingAlienRuntime, +export const EventDataDownloadingAlienRuntime$inboundSchema: z.ZodType< + EventDataDownloadingAlienRuntime, unknown > = z.object({ targetTriple: z.string(), @@ -2648,19 +2686,19 @@ export const DataDownloadingAlienRuntime$inboundSchema: z.ZodType< url: z.string(), }); -export function dataDownloadingAlienRuntimeFromJSON( +export function eventDataDownloadingAlienRuntimeFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataDownloadingAlienRuntime$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataDownloadingAlienRuntime' from JSON`, + (x) => EventDataDownloadingAlienRuntime$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataDownloadingAlienRuntime' from JSON`, ); } /** @internal */ -export const DataRunningPreflights$inboundSchema: z.ZodType< - DataRunningPreflights, +export const EventDataRunningPreflights$inboundSchema: z.ZodType< + EventDataRunningPreflights, unknown > = z.object({ platform: z.string(), @@ -2668,115 +2706,117 @@ export const DataRunningPreflights$inboundSchema: z.ZodType< type: z.literal("RunningPreflights"), }); -export function dataRunningPreflightsFromJSON( +export function eventDataRunningPreflightsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataRunningPreflights$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataRunningPreflights' from JSON`, + (x) => EventDataRunningPreflights$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataRunningPreflights' from JSON`, ); } /** @internal */ -export const DataBuildingStack$inboundSchema: z.ZodType< - DataBuildingStack, +export const EventDataBuildingStack$inboundSchema: z.ZodType< + EventDataBuildingStack, unknown > = z.object({ stack: z.string(), type: z.literal("BuildingStack"), }); -export function dataBuildingStackFromJSON( +export function eventDataBuildingStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataBuildingStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataBuildingStack' from JSON`, + (x) => EventDataBuildingStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataBuildingStack' from JSON`, ); } /** @internal */ -export const DataFinished$inboundSchema: z.ZodType = z - .object({ - type: z.literal("Finished"), - }); +export const EventDataFinished$inboundSchema: z.ZodType< + EventDataFinished, + unknown +> = z.object({ + type: z.literal("Finished"), +}); -export function dataFinishedFromJSON( +export function eventDataFinishedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataFinished$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataFinished' from JSON`, + (x) => EventDataFinished$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataFinished' from JSON`, ); } /** @internal */ -export const DataLoadingConfiguration$inboundSchema: z.ZodType< - DataLoadingConfiguration, +export const EventDataLoadingConfiguration$inboundSchema: z.ZodType< + EventDataLoadingConfiguration, unknown > = z.object({ type: z.literal("LoadingConfiguration"), }); -export function dataLoadingConfigurationFromJSON( +export function eventDataLoadingConfigurationFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => DataLoadingConfiguration$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'DataLoadingConfiguration' from JSON`, + (x) => EventDataLoadingConfiguration$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventDataLoadingConfiguration' from JSON`, ); } /** @internal */ export const EventDataUnion$inboundSchema: z.ZodType = z.union([ - z.lazy(() => DataLoadingConfiguration$inboundSchema), - z.lazy(() => DataFinished$inboundSchema), - z.lazy(() => DataBuildingStack$inboundSchema), - z.lazy(() => DataRunningPreflights$inboundSchema), - z.lazy(() => DataDownloadingAlienRuntime$inboundSchema), - z.lazy(() => DataBuildingResource$inboundSchema), - z.lazy(() => DataBuildingImage$inboundSchema), - z.lazy(() => DataPushingImage$inboundSchema), - z.lazy(() => DataPushingStack$inboundSchema), - z.lazy(() => DataPushingResource$inboundSchema), - z.lazy(() => DataCreatingRelease$inboundSchema), - z.lazy(() => DataCompilingCode$inboundSchema), - z.lazy(() => DataStackStep$inboundSchema), - z.lazy(() => DataGeneratingCloudFormationTemplate$inboundSchema), - z.lazy(() => DataGeneratingTemplate$inboundSchema), - z.lazy(() => DataProvisioningAgent$inboundSchema), - z.lazy(() => DataUpdatingAgent$inboundSchema), - z.lazy(() => DataDeletingAgent$inboundSchema), - z.lazy(() => DataDebuggingAgent$inboundSchema), - z.lazy(() => DataPreparingEnvironment$inboundSchema), - z.lazy(() => DataDeployingStack$inboundSchema), - z.lazy(() => DataRunningTestWorker$inboundSchema), - z.lazy(() => DataCleaningUpStack$inboundSchema), - z.lazy(() => DataCleaningUpEnvironment$inboundSchema), - z.lazy(() => DataSettingUpPlatformContext$inboundSchema), - z.lazy(() => DataEnsuringDockerRepository$inboundSchema), - z.lazy(() => DataDeployingCloudFormationStack$inboundSchema), - z.lazy(() => DataAssumingRole$inboundSchema), - z.lazy(() => DataImportingStackStateFromCloudFormation$inboundSchema), - z.lazy(() => DataDeletingCloudFormationStack$inboundSchema), - z.lazy(() => DataEmptyingBuckets$inboundSchema), - z.lazy(() => DataDeploymentCreated$inboundSchema), - z.lazy(() => DataDeploymentReleased$inboundSchema), - z.lazy(() => DataDeploymentFailed$inboundSchema), - z.lazy(() => DataDeploymentDegraded$inboundSchema), - z.lazy(() => DataDeploymentRecovered$inboundSchema), - z.lazy(() => DataDeploymentDeleted$inboundSchema), - z.lazy(() => DataDeploymentRetryRequested$inboundSchema), - z.lazy(() => DataDeploymentRedeployRequested$inboundSchema), - z.lazy(() => DataDeploymentReleasePinned$inboundSchema), - z.lazy(() => DataDeploymentReleaseUnpinned$inboundSchema), - z.lazy(() => DataDeploymentEnvironmentUpdated$inboundSchema), - z.lazy(() => DataDeploymentDeletionRequested$inboundSchema), + z.lazy(() => EventDataLoadingConfiguration$inboundSchema), + z.lazy(() => EventDataFinished$inboundSchema), + z.lazy(() => EventDataBuildingStack$inboundSchema), + z.lazy(() => EventDataRunningPreflights$inboundSchema), + z.lazy(() => EventDataDownloadingAlienRuntime$inboundSchema), + z.lazy(() => EventDataBuildingResource$inboundSchema), + z.lazy(() => EventDataBuildingImage$inboundSchema), + z.lazy(() => EventDataPushingImage$inboundSchema), + z.lazy(() => EventDataPushingStack$inboundSchema), + z.lazy(() => EventDataPushingResource$inboundSchema), + z.lazy(() => EventDataCreatingRelease$inboundSchema), + z.lazy(() => EventDataCompilingCode$inboundSchema), + z.lazy(() => EventDataStackStep$inboundSchema), + z.lazy(() => EventDataGeneratingCloudFormationTemplate$inboundSchema), + z.lazy(() => EventDataGeneratingTemplate$inboundSchema), + z.lazy(() => EventDataProvisioningAgent$inboundSchema), + z.lazy(() => EventDataUpdatingAgent$inboundSchema), + z.lazy(() => EventDataDeletingAgent$inboundSchema), + z.lazy(() => EventDataDebuggingAgent$inboundSchema), + z.lazy(() => EventDataPreparingEnvironment$inboundSchema), + z.lazy(() => EventDataDeployingStack$inboundSchema), + z.lazy(() => EventDataRunningTestWorker$inboundSchema), + z.lazy(() => EventDataCleaningUpStack$inboundSchema), + z.lazy(() => EventDataCleaningUpEnvironment$inboundSchema), + z.lazy(() => EventDataSettingUpPlatformContext$inboundSchema), + z.lazy(() => EventDataEnsuringDockerRepository$inboundSchema), + z.lazy(() => EventDataDeployingCloudFormationStack$inboundSchema), + z.lazy(() => EventDataAssumingRole$inboundSchema), + z.lazy(() => EventDataImportingStackStateFromCloudFormation$inboundSchema), + z.lazy(() => EventDataDeletingCloudFormationStack$inboundSchema), + z.lazy(() => EventDataEmptyingBuckets$inboundSchema), + z.lazy(() => EventDataDeploymentCreated$inboundSchema), + z.lazy(() => EventDataDeploymentReleased$inboundSchema), + z.lazy(() => EventDataDeploymentFailed$inboundSchema), + z.lazy(() => EventDataDeploymentDegraded$inboundSchema), + z.lazy(() => EventDataDeploymentRecovered$inboundSchema), + z.lazy(() => EventDataDeploymentDeleted$inboundSchema), + z.lazy(() => EventDataDeploymentRetryRequested$inboundSchema), + z.lazy(() => EventDataDeploymentRedeployRequested$inboundSchema), + z.lazy(() => EventDataDeploymentReleasePinned$inboundSchema), + z.lazy(() => EventDataDeploymentReleaseUnpinned$inboundSchema), + z.lazy(() => EventDataDeploymentEnvironmentUpdated$inboundSchema), + z.lazy(() => EventDataDeploymentDeletionRequested$inboundSchema), ]); export function eventDataUnionFromJSON( @@ -2790,77 +2830,82 @@ export function eventDataUnionFromJSON( } /** @internal */ -export const StateSuccess$inboundSchema: z.ZodEnum = z - .enum(StateSuccess); +export const EventStateSuccess$inboundSchema: z.ZodEnum< + typeof EventStateSuccess +> = z.enum(EventStateSuccess); /** @internal */ -export const StateStarted$inboundSchema: z.ZodEnum = z - .enum(StateStarted); +export const EventStateStarted$inboundSchema: z.ZodEnum< + typeof EventStateStarted +> = z.enum(EventStateStarted); /** @internal */ -export const StateNone$inboundSchema: z.ZodEnum = z.enum( - StateNone, -); +export const EventStateNone$inboundSchema: z.ZodEnum = z + .enum(EventStateNone); /** @internal */ -export const ErrorFailed$inboundSchema: z.ZodType = z - .object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), - }); +export const EventErrorFailed$inboundSchema: z.ZodType< + EventErrorFailed, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function errorFailedFromJSON( +export function eventErrorFailedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => ErrorFailed$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ErrorFailed' from JSON`, + (x) => EventErrorFailed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventErrorFailed' from JSON`, ); } /** @internal */ -export const FailedErrorUnion$inboundSchema: z.ZodType< - FailedErrorUnion, +export const EventFailedErrorUnion$inboundSchema: z.ZodType< + EventFailedErrorUnion, unknown -> = z.union([z.lazy(() => ErrorFailed$inboundSchema), z.any()]); +> = z.union([z.lazy(() => EventErrorFailed$inboundSchema), z.any()]); -export function failedErrorUnionFromJSON( +export function eventFailedErrorUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => FailedErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'FailedErrorUnion' from JSON`, + (x) => EventFailedErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventFailedErrorUnion' from JSON`, ); } /** @internal */ -export const Failed$inboundSchema: z.ZodType = z.object({ - error: z.nullable(z.union([z.lazy(() => ErrorFailed$inboundSchema), z.any()])) - .optional(), -}); +export const EventFailed$inboundSchema: z.ZodType = z + .object({ + error: z.nullable( + z.union([z.lazy(() => EventErrorFailed$inboundSchema), z.any()]), + ).optional(), + }); -export function failedFromJSON( +export function eventFailedFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => Failed$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'Failed' from JSON`, + (x) => EventFailed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventFailed' from JSON`, ); } /** @internal */ export const EventState$inboundSchema: z.ZodType = z .object({ - failed: z.lazy(() => Failed$inboundSchema), + failed: z.lazy(() => EventFailed$inboundSchema), }); export function eventStateFromJSON( @@ -2874,20 +2919,23 @@ export function eventStateFromJSON( } /** @internal */ -export const State$inboundSchema: z.ZodType = z.union([ +export const EventStateUnion$inboundSchema: z.ZodType< + EventStateUnion, + unknown +> = z.union([ z.lazy(() => EventState$inboundSchema), - StateNone$inboundSchema, - StateStarted$inboundSchema, - StateSuccess$inboundSchema, + EventStateNone$inboundSchema, + EventStateStarted$inboundSchema, + EventStateSuccess$inboundSchema, ]); -export function stateFromJSON( +export function eventStateUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => State$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'State' from JSON`, + (x) => EventStateUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventStateUnion' from JSON`, ); } @@ -2898,55 +2946,55 @@ export const Event$inboundSchema: z.ZodType = z.object({ releaseId: z.nullable(z.string()).optional(), debugSessionId: z.nullable(z.string()).optional(), data: z.union([ - z.lazy(() => DataLoadingConfiguration$inboundSchema), - z.lazy(() => DataFinished$inboundSchema), - z.lazy(() => DataBuildingStack$inboundSchema), - z.lazy(() => DataRunningPreflights$inboundSchema), - z.lazy(() => DataDownloadingAlienRuntime$inboundSchema), - z.lazy(() => DataBuildingResource$inboundSchema), - z.lazy(() => DataBuildingImage$inboundSchema), - z.lazy(() => DataPushingImage$inboundSchema), - z.lazy(() => DataPushingStack$inboundSchema), - z.lazy(() => DataPushingResource$inboundSchema), - z.lazy(() => DataCreatingRelease$inboundSchema), - z.lazy(() => DataCompilingCode$inboundSchema), - z.lazy(() => DataStackStep$inboundSchema), - z.lazy(() => DataGeneratingCloudFormationTemplate$inboundSchema), - z.lazy(() => DataGeneratingTemplate$inboundSchema), - z.lazy(() => DataProvisioningAgent$inboundSchema), - z.lazy(() => DataUpdatingAgent$inboundSchema), - z.lazy(() => DataDeletingAgent$inboundSchema), - z.lazy(() => DataDebuggingAgent$inboundSchema), - z.lazy(() => DataPreparingEnvironment$inboundSchema), - z.lazy(() => DataDeployingStack$inboundSchema), - z.lazy(() => DataRunningTestWorker$inboundSchema), - z.lazy(() => DataCleaningUpStack$inboundSchema), - z.lazy(() => DataCleaningUpEnvironment$inboundSchema), - z.lazy(() => DataSettingUpPlatformContext$inboundSchema), - z.lazy(() => DataEnsuringDockerRepository$inboundSchema), - z.lazy(() => DataDeployingCloudFormationStack$inboundSchema), - z.lazy(() => DataAssumingRole$inboundSchema), - z.lazy(() => DataImportingStackStateFromCloudFormation$inboundSchema), - z.lazy(() => DataDeletingCloudFormationStack$inboundSchema), - z.lazy(() => DataEmptyingBuckets$inboundSchema), - z.lazy(() => DataDeploymentCreated$inboundSchema), - z.lazy(() => DataDeploymentReleased$inboundSchema), - z.lazy(() => DataDeploymentFailed$inboundSchema), - z.lazy(() => DataDeploymentDegraded$inboundSchema), - z.lazy(() => DataDeploymentRecovered$inboundSchema), - z.lazy(() => DataDeploymentDeleted$inboundSchema), - z.lazy(() => DataDeploymentRetryRequested$inboundSchema), - z.lazy(() => DataDeploymentRedeployRequested$inboundSchema), - z.lazy(() => DataDeploymentReleasePinned$inboundSchema), - z.lazy(() => DataDeploymentReleaseUnpinned$inboundSchema), - z.lazy(() => DataDeploymentEnvironmentUpdated$inboundSchema), - z.lazy(() => DataDeploymentDeletionRequested$inboundSchema), + z.lazy(() => EventDataLoadingConfiguration$inboundSchema), + z.lazy(() => EventDataFinished$inboundSchema), + z.lazy(() => EventDataBuildingStack$inboundSchema), + z.lazy(() => EventDataRunningPreflights$inboundSchema), + z.lazy(() => EventDataDownloadingAlienRuntime$inboundSchema), + z.lazy(() => EventDataBuildingResource$inboundSchema), + z.lazy(() => EventDataBuildingImage$inboundSchema), + z.lazy(() => EventDataPushingImage$inboundSchema), + z.lazy(() => EventDataPushingStack$inboundSchema), + z.lazy(() => EventDataPushingResource$inboundSchema), + z.lazy(() => EventDataCreatingRelease$inboundSchema), + z.lazy(() => EventDataCompilingCode$inboundSchema), + z.lazy(() => EventDataStackStep$inboundSchema), + z.lazy(() => EventDataGeneratingCloudFormationTemplate$inboundSchema), + z.lazy(() => EventDataGeneratingTemplate$inboundSchema), + z.lazy(() => EventDataProvisioningAgent$inboundSchema), + z.lazy(() => EventDataUpdatingAgent$inboundSchema), + z.lazy(() => EventDataDeletingAgent$inboundSchema), + z.lazy(() => EventDataDebuggingAgent$inboundSchema), + z.lazy(() => EventDataPreparingEnvironment$inboundSchema), + z.lazy(() => EventDataDeployingStack$inboundSchema), + z.lazy(() => EventDataRunningTestWorker$inboundSchema), + z.lazy(() => EventDataCleaningUpStack$inboundSchema), + z.lazy(() => EventDataCleaningUpEnvironment$inboundSchema), + z.lazy(() => EventDataSettingUpPlatformContext$inboundSchema), + z.lazy(() => EventDataEnsuringDockerRepository$inboundSchema), + z.lazy(() => EventDataDeployingCloudFormationStack$inboundSchema), + z.lazy(() => EventDataAssumingRole$inboundSchema), + z.lazy(() => EventDataImportingStackStateFromCloudFormation$inboundSchema), + z.lazy(() => EventDataDeletingCloudFormationStack$inboundSchema), + z.lazy(() => EventDataEmptyingBuckets$inboundSchema), + z.lazy(() => EventDataDeploymentCreated$inboundSchema), + z.lazy(() => EventDataDeploymentReleased$inboundSchema), + z.lazy(() => EventDataDeploymentFailed$inboundSchema), + z.lazy(() => EventDataDeploymentDegraded$inboundSchema), + z.lazy(() => EventDataDeploymentRecovered$inboundSchema), + z.lazy(() => EventDataDeploymentDeleted$inboundSchema), + z.lazy(() => EventDataDeploymentRetryRequested$inboundSchema), + z.lazy(() => EventDataDeploymentRedeployRequested$inboundSchema), + z.lazy(() => EventDataDeploymentReleasePinned$inboundSchema), + z.lazy(() => EventDataDeploymentReleaseUnpinned$inboundSchema), + z.lazy(() => EventDataDeploymentEnvironmentUpdated$inboundSchema), + z.lazy(() => EventDataDeploymentDeletionRequested$inboundSchema), ]), state: z.union([ z.lazy(() => EventState$inboundSchema), - StateNone$inboundSchema, - StateStarted$inboundSchema, - StateSuccess$inboundSchema, + EventStateNone$inboundSchema, + EventStateStarted$inboundSchema, + EventStateSuccess$inboundSchema, ]), projectId: z.string(), createdAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), diff --git a/client-sdks/platform/typescript/src/models/eventlistitemresponse.ts b/client-sdks/platform/typescript/src/models/eventlistitemresponse.ts new file mode 100644 index 000000000..efc71a760 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/eventlistitemresponse.ts @@ -0,0 +1,3371 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; +import { + collectExtraKeys as collectExtraKeys$, + safeParse, +} from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type EventListItemResponseDataDeploymentDeletionRequested = { + /** + * ID of the deployment + */ + deploymentId: string; + type: "DeploymentDeletionRequested"; +}; + +/** + * Type of authenticated principal that requested an event. + */ +export const EventListItemResponseKind2 = { + User: "user", + ServiceAccount: "serviceAccount", +} as const; +/** + * Type of authenticated principal that requested an event. + */ +export type EventListItemResponseKind2 = ClosedEnum< + typeof EventListItemResponseKind2 +>; + +/** + * Authenticated principal that requested a deployment intent event. + */ +export type EventListItemResponseActor2 = { + /** + * User email when the principal is a user. + */ + email?: string | null | undefined; + /** + * Stable user or service-account identifier. + */ + id: string; + /** + * Type of authenticated principal that requested an event. + */ + kind: EventListItemResponseKind2; +}; + +export type EventListItemResponseActorUnion2 = + | EventListItemResponseActor2 + | any; + +export type EventListItemResponseDataDeploymentEnvironmentUpdated = { + actor?: EventListItemResponseActor2 | any | null | undefined; + /** + * Names of the environment variables that changed (added, removed, or modified) + */ + changedKeys: Array; + /** + * ID of the deployment + */ + deploymentId: string; + type: "DeploymentEnvironmentUpdated"; +}; + +export type EventListItemResponseDataDeploymentReleaseUnpinned = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * ID of the release that was previously pinned + */ + previousPinnedReleaseId: string; + type: "DeploymentReleaseUnpinned"; +}; + +export type EventListItemResponseDataDeploymentReleasePinned = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * ID of the release that is now pinned + */ + pinnedReleaseId: string; + /** + * ID of the previously pinned release, if any + */ + previousPinnedReleaseId?: string | null | undefined; + type: "DeploymentReleasePinned"; +}; + +export type EventListItemResponseDataDeploymentRedeployRequested = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * ID of the release being redeployed + */ + releaseId: string; + type: "DeploymentRedeployRequested"; +}; + +/** + * Type of authenticated principal that requested an event. + */ +export const EventListItemResponseKind1 = { + User: "user", + ServiceAccount: "serviceAccount", +} as const; +/** + * Type of authenticated principal that requested an event. + */ +export type EventListItemResponseKind1 = ClosedEnum< + typeof EventListItemResponseKind1 +>; + +/** + * Authenticated principal that requested a deployment intent event. + */ +export type EventListItemResponseActor1 = { + /** + * User email when the principal is a user. + */ + email?: string | null | undefined; + /** + * Stable user or service-account identifier. + */ + id: string; + /** + * Type of authenticated principal that requested an event. + */ + kind: EventListItemResponseKind1; +}; + +export type EventListItemResponseActorUnion1 = + | EventListItemResponseActor1 + | any; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type EventListItemResponsePreviousError = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +export type EventListItemResponsePreviousErrorUnion = + | EventListItemResponsePreviousError + | any; + +export type EventListItemResponseDataDeploymentRetryRequested = { + actor?: EventListItemResponseActor1 | any | null | undefined; + /** + * ID of the release that the failed attempt was targeting, if known + */ + attemptedReleaseId?: string | null | undefined; + /** + * ID of the deployment + */ + deploymentId: string; + previousError?: EventListItemResponsePreviousError | any | null | undefined; + type: "DeploymentRetryRequested"; +}; + +export type EventListItemResponseDataDeploymentDeleted = { + /** + * ID of the deployment that was deleted + */ + deploymentId: string; + type: "DeploymentDeleted"; +}; + +export type EventListItemResponseDataDeploymentRecovered = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * ID of the release that is now live + */ + releaseId: string; + type: "DeploymentRecovered"; +}; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type EventListItemResponseDataError2 = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +export type EventListItemResponseDataDeploymentDegraded = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ + error: EventListItemResponseDataError2; + type: "DeploymentDegraded"; +}; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type EventListItemResponseDataError1 = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +/** + * Phase of a deployment at which a failure occurred. + * + * @remarks + * + * Derived from the source deployment status: `preflights-failed` → + * `Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` → + * `Updating`, `delete-failed` → `Deleting`. + * `refresh-failed` is modelled separately via `DeploymentDegraded`. + */ +export const EventListItemResponsePhase = { + Preflights: "preflights", + Provisioning: "provisioning", + Updating: "updating", + Deleting: "deleting", +} as const; +/** + * Phase of a deployment at which a failure occurred. + * + * @remarks + * + * Derived from the source deployment status: `preflights-failed` → + * `Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` → + * `Updating`, `delete-failed` → `Deleting`. + * `refresh-failed` is modelled separately via `DeploymentDegraded`. + */ +export type EventListItemResponsePhase = ClosedEnum< + typeof EventListItemResponsePhase +>; + +export type EventListItemResponseDataDeploymentFailed = { + /** + * ID of the release the platform was trying to deploy, if known + */ + attemptedReleaseId?: string | null | undefined; + /** + * ID of the deployment + */ + deploymentId: string; + /** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ + error: EventListItemResponseDataError1; + /** + * Phase of a deployment at which a failure occurred. + * + * @remarks + * + * Derived from the source deployment status: `preflights-failed` → + * `Preflights`, `provisioning-failed` → `Provisioning`, `update-failed` → + * `Updating`, `delete-failed` → `Deleting`. + * `refresh-failed` is modelled separately via `DeploymentDegraded`. + */ + phase: EventListItemResponsePhase; + type: "DeploymentFailed"; +}; + +export type EventListItemResponseDataDeploymentReleased = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * ID of the release that was previously live, if any + */ + previousReleaseId?: string | null | undefined; + /** + * ID of the release that is now live + */ + releaseId: string; + type: "DeploymentReleased"; +}; + +export type EventListItemResponseDataDeploymentCreated = { + /** + * ID of the deployment group this slot belongs to + */ + deploymentGroupId: string; + /** + * ID of the deployment that was created + */ + deploymentId: string; + /** + * Initial release the slot was created with, if any + */ + releaseId?: string | null | undefined; + type: "DeploymentCreated"; +}; + +export type EventListItemResponseDataEmptyingBuckets = { + /** + * Names of the S3 buckets being emptied + */ + bucketNames: Array; + type: "EmptyingBuckets"; +}; + +export type EventListItemResponseDataDeletingCloudFormationStack = { + /** + * Name of the CloudFormation stack + */ + cfnStackName: string; + /** + * Current stack status + */ + currentStatus: string; + type: "DeletingCloudFormationStack"; +}; + +export type EventListItemResponseDataImportingStackStateFromCloudFormation = { + /** + * Name of the CloudFormation stack + */ + cfnStackName: string; + type: "ImportingStackStateFromCloudFormation"; +}; + +export type EventListItemResponseDataAssumingRole = { + /** + * ARN of the role to assume + */ + roleArn: string; + type: "AssumingRole"; +}; + +export type EventListItemResponseDataDeployingCloudFormationStack = { + /** + * Name of the CloudFormation stack + */ + cfnStackName: string; + /** + * Current stack status + */ + currentStatus: string; + type: "DeployingCloudFormationStack"; +}; + +export type EventListItemResponseDataEnsuringDockerRepository = { + /** + * Name of the docker repository + */ + repositoryName: string; + type: "EnsuringDockerRepository"; +}; + +export type EventListItemResponseDataSettingUpPlatformContext = { + /** + * Name of the platform (e.g., "AWS", "GCP") + */ + platformName: string; + type: "SettingUpPlatformContext"; +}; + +export type EventListItemResponseDataCleaningUpEnvironment = { + /** + * Name of the stack being cleaned up + */ + stackName: string; + /** + * Name of the deployment strategy being used for cleanup + */ + strategyName: string; + type: "CleaningUpEnvironment"; +}; + +export type EventListItemResponseDataCleaningUpStack = { + /** + * Name of the stack being cleaned up + */ + stackName: string; + /** + * Name of the deployment strategy being used for cleanup + */ + strategyName: string; + type: "CleaningUpStack"; +}; + +export type EventListItemResponseDataRunningTestWorker = { + /** + * Name of the stack being tested + */ + stackName: string; + type: "RunningTestWorker"; +}; + +export type EventListItemResponseDataDeployingStack = { + /** + * Name of the stack being deployed + */ + stackName: string; + type: "DeployingStack"; +}; + +export type EventListItemResponseDataPreparingEnvironment = { + /** + * Name of the deployment strategy being used + */ + strategyName: string; + type: "PreparingEnvironment"; +}; + +export type EventListItemResponseDataDebuggingAgent = { + /** + * ID of the agent being debugged + */ + agentId: string; + /** + * ID of the debug session + */ + debugSessionId: string; + type: "DebuggingAgent"; +}; + +export type EventListItemResponseDataDeletingAgent = { + /** + * ID of the agent being deleted + */ + agentId: string; + /** + * ID of the release that was running on the agent + */ + releaseId: string; + type: "DeletingAgent"; +}; + +export type EventListItemResponseDataUpdatingAgent = { + /** + * ID of the agent being updated + */ + agentId: string; + /** + * ID of the new release being deployed to the agent + */ + releaseId: string; + type: "UpdatingAgent"; +}; + +export type EventListItemResponseDataProvisioningAgent = { + /** + * ID of the agent being provisioned + */ + agentId: string; + /** + * ID of the release being deployed to the agent + */ + releaseId: string; + type: "ProvisioningAgent"; +}; + +export type EventListItemResponseDataGeneratingTemplate = { + /** + * Platform for which the template is being generated + */ + platform: string; + type: "GeneratingTemplate"; +}; + +export type EventListItemResponseDataGeneratingCloudFormationTemplate = { + type: "GeneratingCloudFormationTemplate"; +}; + +/** + * Represents the target cloud platform. + */ +export const EventListItemResponsePlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type EventListItemResponsePlatform = ClosedEnum< + typeof EventListItemResponsePlatform +>; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type EventListItemResponseConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +/** + * Represents the target cloud platform. + */ +export const EventListItemResponseControllerPlatformEnum = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type EventListItemResponseControllerPlatformEnum = ClosedEnum< + typeof EventListItemResponseControllerPlatformEnum +>; + +export type EventListItemResponseControllerPlatformUnion = + | EventListItemResponseControllerPlatformEnum + | any; + +/** + * Reference to a resource by its stable id and resource type. + */ +export type EventListItemResponseDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type EventListItemResponseErrorNextState = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +export type EventListItemResponseNextStateErrorUnion = + | EventListItemResponseErrorNextState + | any; + +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const EventListItemResponseLifecycleEnum = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type EventListItemResponseLifecycleEnum = ClosedEnum< + typeof EventListItemResponseLifecycleEnum +>; + +export type EventListItemResponseLifecycleUnion = + | EventListItemResponseLifecycleEnum + | any; + +/** + * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. + */ +export type EventListItemResponseOutputs = { + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +export type EventListItemResponseOutputsUnion = + | EventListItemResponseOutputs + | any; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type EventListItemResponsePreviousConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +export type EventListItemResponsePreviousConfigUnion = + | EventListItemResponsePreviousConfig + | any; + +/** + * Represents the high-level status of a resource during its lifecycle. + */ +export const EventListItemResponseStatus = { + Pending: "pending", + Provisioning: "provisioning", + ProvisionFailed: "provision-failed", + Running: "running", + Updating: "updating", + UpdateFailed: "update-failed", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + Deleted: "deleted", + RefreshFailed: "refresh-failed", +} as const; +/** + * Represents the high-level status of a resource during its lifecycle. + */ +export type EventListItemResponseStatus = ClosedEnum< + typeof EventListItemResponseStatus +>; + +/** + * Represents the state of a single resource within the stack for a specific platform. + */ +export type EventListItemResponseResources = { + /** + * The platform-specific resource controller that manages this resource's lifecycle. + * + * @remarks + * This is None when the resource status is Pending. + * Stored as JSON to make the struct serializable and movable to alien-core. + */ + internal?: any | null | undefined; + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: EventListItemResponseConfig; + controllerPlatform?: + | EventListItemResponseControllerPlatformEnum + | any + | null + | undefined; + /** + * Complete list of dependencies for this resource, including infrastructure dependencies. + * + * @remarks + * This preserves the full dependency information from the stack definition. + */ + dependencies?: Array | undefined; + error?: EventListItemResponseErrorNextState | any | null | undefined; + /** + * Stores the controller state that failed, used for manual retry operations. + * + * @remarks + * This allows resuming from the exact point where the failure occurred. + * Stored as JSON to make the struct serializable and movable to alien-core. + */ + lastFailedState?: any | null | undefined; + lifecycle?: EventListItemResponseLifecycleEnum | any | null | undefined; + outputs?: EventListItemResponseOutputs | any | null | undefined; + previousConfig?: EventListItemResponsePreviousConfig | any | null | undefined; + /** + * Binding parameters for remote access. + * + * @remarks + * Only populated when the resource has `remote_access: true` in its ResourceEntry. + * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). + * Populated by controllers during provisioning using get_binding_params(). + */ + remoteBindingParams?: any | null | undefined; + /** + * Tracks consecutive retry attempts for the current state transition. + */ + retryAttempt?: number | undefined; + /** + * Represents the high-level status of a resource during its lifecycle. + */ + status: EventListItemResponseStatus; + /** + * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). + */ + type: string; +}; + +/** + * Represents the collective state of all resources in a stack, including platform and pending actions. + */ +export type EventListItemResponseNextState = { + /** + * Represents the target cloud platform. + */ + platform: EventListItemResponsePlatform; + /** + * A prefix used for resource naming to ensure uniqueness across deployments. + */ + resourcePrefix: string; + /** + * The state of individual resources, keyed by resource ID. + */ + resources: { [k: string]: EventListItemResponseResources }; +}; + +export type EventListItemResponseDataStackStep = { + /** + * Represents the collective state of all resources in a stack, including platform and pending actions. + */ + nextState: EventListItemResponseNextState; + /** + * An suggested duration to wait before executing the next step. + */ + suggestedDelayMs?: number | null | undefined; + type: "StackStep"; +}; + +export type EventListItemResponseDataCompilingCode = { + /** + * Language being compiled (rust, typescript, etc.) + */ + language: string; + /** + * Current progress/status line from the build output + */ + progress?: string | null | undefined; + type: "CompilingCode"; +}; + +export type EventListItemResponseDataCreatingRelease = { + /** + * Project name + */ + project: string; + type: "CreatingRelease"; +}; + +export type EventListItemResponseDataPushingResource = { + /** + * Name of the resource being pushed + */ + resourceName: string; + /** + * Type of the resource: "worker", "container" + */ + resourceType: string; + type: "PushingResource"; +}; + +export type EventListItemResponseDataPushingStack = { + /** + * Human-readable destination for pushed images + */ + destination?: string | null | undefined; + /** + * Target platform + */ + platform: string; + /** + * Name of the stack being pushed + */ + stack: string; + type: "PushingStack"; +}; + +/** + * Progress information for image push operations + */ +export type EventListItemResponseProgress = { + /** + * Bytes uploaded so far + */ + bytesUploaded: number; + /** + * Number of layers uploaded so far + */ + layersUploaded: number; + /** + * Current operation being performed + */ + operation: string; + /** + * Total bytes to upload + */ + totalBytes: number; + /** + * Total number of layers to upload + */ + totalLayers: number; +}; + +export type EventListItemResponseProgressUnion = + | EventListItemResponseProgress + | any; + +export type EventListItemResponseDataPushingImage = { + /** + * Name of the image being pushed + */ + image: string; + progress?: EventListItemResponseProgress | any | null | undefined; + type: "PushingImage"; +}; + +export type EventListItemResponseDataBuildingImage = { + /** + * Name of the image being built + */ + image: string; + type: "BuildingImage"; +}; + +export type EventListItemResponseDataBuildingResource = { + /** + * All resource names sharing this build (for deduped container groups) + */ + relatedResources?: Array | undefined; + /** + * Name of the resource being built + */ + resourceName: string; + /** + * Type of the resource: "worker", "container" + */ + resourceType: string; + type: "BuildingResource"; +}; + +export type EventListItemResponseDataDownloadingAlienRuntime = { + /** + * Target triple for the runtime + */ + targetTriple: string; + type: "DownloadingAlienRuntime"; + /** + * URL being downloaded from + */ + url: string; +}; + +export type EventListItemResponseDataRunningPreflights = { + /** + * Platform being targeted + */ + platform: string; + /** + * Name of the stack being checked + */ + stack: string; + type: "RunningPreflights"; +}; + +export type EventListItemResponseDataBuildingStack = { + /** + * Name of the stack being built + */ + stack: string; + type: "BuildingStack"; +}; + +export type EventListItemResponseDataFinished = { + type: "Finished"; +}; + +export type EventListItemResponseDataLoadingConfiguration = { + type: "LoadingConfiguration"; +}; + +export type EventListItemResponseDataUnion = + | EventListItemResponseDataLoadingConfiguration + | EventListItemResponseDataFinished + | EventListItemResponseDataBuildingStack + | EventListItemResponseDataRunningPreflights + | EventListItemResponseDataDownloadingAlienRuntime + | EventListItemResponseDataBuildingResource + | EventListItemResponseDataBuildingImage + | EventListItemResponseDataPushingImage + | EventListItemResponseDataPushingStack + | EventListItemResponseDataPushingResource + | EventListItemResponseDataCreatingRelease + | EventListItemResponseDataCompilingCode + | EventListItemResponseDataStackStep + | EventListItemResponseDataGeneratingCloudFormationTemplate + | EventListItemResponseDataGeneratingTemplate + | EventListItemResponseDataProvisioningAgent + | EventListItemResponseDataUpdatingAgent + | EventListItemResponseDataDeletingAgent + | EventListItemResponseDataDebuggingAgent + | EventListItemResponseDataPreparingEnvironment + | EventListItemResponseDataDeployingStack + | EventListItemResponseDataRunningTestWorker + | EventListItemResponseDataCleaningUpStack + | EventListItemResponseDataCleaningUpEnvironment + | EventListItemResponseDataSettingUpPlatformContext + | EventListItemResponseDataEnsuringDockerRepository + | EventListItemResponseDataDeployingCloudFormationStack + | EventListItemResponseDataAssumingRole + | EventListItemResponseDataImportingStackStateFromCloudFormation + | EventListItemResponseDataDeletingCloudFormationStack + | EventListItemResponseDataEmptyingBuckets + | EventListItemResponseDataDeploymentCreated + | EventListItemResponseDataDeploymentReleased + | EventListItemResponseDataDeploymentFailed + | EventListItemResponseDataDeploymentDegraded + | EventListItemResponseDataDeploymentRecovered + | EventListItemResponseDataDeploymentDeleted + | EventListItemResponseDataDeploymentRetryRequested + | EventListItemResponseDataDeploymentRedeployRequested + | EventListItemResponseDataDeploymentReleasePinned + | EventListItemResponseDataDeploymentReleaseUnpinned + | EventListItemResponseDataDeploymentEnvironmentUpdated + | EventListItemResponseDataDeploymentDeletionRequested; + +export const EventListItemResponseStateSuccess = { + Success: "success", +} as const; +export type EventListItemResponseStateSuccess = ClosedEnum< + typeof EventListItemResponseStateSuccess +>; + +export const EventListItemResponseStateStarted = { + Started: "started", +} as const; +export type EventListItemResponseStateStarted = ClosedEnum< + typeof EventListItemResponseStateStarted +>; + +export const EventListItemResponseStateNone = { + None: "none", +} as const; +export type EventListItemResponseStateNone = ClosedEnum< + typeof EventListItemResponseStateNone +>; + +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type EventListItemResponseErrorFailed = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +export type EventListItemResponseFailedErrorUnion = + | EventListItemResponseErrorFailed + | any; + +/** + * Event failed with an error + */ +export type EventListItemResponseFailed = { + error?: EventListItemResponseErrorFailed | any | null | undefined; +}; + +export type EventListItemResponseState = { + /** + * Event failed with an error + */ + failed: EventListItemResponseFailed; +}; + +/** + * Represents the state of an event + */ +export type EventListItemResponseStateUnion = + | EventListItemResponseState + | EventListItemResponseStateNone + | EventListItemResponseStateStarted + | EventListItemResponseStateSuccess; + +export type EventListItemResponse = { + /** + * Unique identifier for the event. + */ + id: string; + /** + * Unique identifier for the deployment. + */ + deploymentId?: string | null | undefined; + /** + * Unique identifier for the release. + */ + releaseId?: string | null | undefined; + /** + * Unique identifier for the debug session. + */ + debugSessionId?: string | null | undefined; + data: + | EventListItemResponseDataLoadingConfiguration + | EventListItemResponseDataFinished + | EventListItemResponseDataBuildingStack + | EventListItemResponseDataRunningPreflights + | EventListItemResponseDataDownloadingAlienRuntime + | EventListItemResponseDataBuildingResource + | EventListItemResponseDataBuildingImage + | EventListItemResponseDataPushingImage + | EventListItemResponseDataPushingStack + | EventListItemResponseDataPushingResource + | EventListItemResponseDataCreatingRelease + | EventListItemResponseDataCompilingCode + | EventListItemResponseDataStackStep + | EventListItemResponseDataGeneratingCloudFormationTemplate + | EventListItemResponseDataGeneratingTemplate + | EventListItemResponseDataProvisioningAgent + | EventListItemResponseDataUpdatingAgent + | EventListItemResponseDataDeletingAgent + | EventListItemResponseDataDebuggingAgent + | EventListItemResponseDataPreparingEnvironment + | EventListItemResponseDataDeployingStack + | EventListItemResponseDataRunningTestWorker + | EventListItemResponseDataCleaningUpStack + | EventListItemResponseDataCleaningUpEnvironment + | EventListItemResponseDataSettingUpPlatformContext + | EventListItemResponseDataEnsuringDockerRepository + | EventListItemResponseDataDeployingCloudFormationStack + | EventListItemResponseDataAssumingRole + | EventListItemResponseDataImportingStackStateFromCloudFormation + | EventListItemResponseDataDeletingCloudFormationStack + | EventListItemResponseDataEmptyingBuckets + | EventListItemResponseDataDeploymentCreated + | EventListItemResponseDataDeploymentReleased + | EventListItemResponseDataDeploymentFailed + | EventListItemResponseDataDeploymentDegraded + | EventListItemResponseDataDeploymentRecovered + | EventListItemResponseDataDeploymentDeleted + | EventListItemResponseDataDeploymentRetryRequested + | EventListItemResponseDataDeploymentRedeployRequested + | EventListItemResponseDataDeploymentReleasePinned + | EventListItemResponseDataDeploymentReleaseUnpinned + | EventListItemResponseDataDeploymentEnvironmentUpdated + | EventListItemResponseDataDeploymentDeletionRequested; + /** + * Represents the state of an event + */ + state: + | EventListItemResponseState + | EventListItemResponseStateNone + | EventListItemResponseStateStarted + | EventListItemResponseStateSuccess; + /** + * Unique identifier for the project. + */ + projectId: string; + createdAt: Date; + /** + * Unique identifier for the workspace. + */ + workspaceId: string; + /** + * createdAt of the event's referenced release, included when ?include=releaseCreatedAt is used + */ + releaseCreatedAt?: Date | undefined; +}; + +/** @internal */ +export const EventListItemResponseDataDeploymentDeletionRequested$inboundSchema: + z.ZodType = z + .object({ + deploymentId: z.string(), + type: z.literal("DeploymentDeletionRequested"), + }); + +export function eventListItemResponseDataDeploymentDeletionRequestedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentDeletionRequested, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentDeletionRequested$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentDeletionRequested' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseKind2$inboundSchema: z.ZodEnum< + typeof EventListItemResponseKind2 +> = z.enum(EventListItemResponseKind2); + +/** @internal */ +export const EventListItemResponseActor2$inboundSchema: z.ZodType< + EventListItemResponseActor2, + unknown +> = z.object({ + email: z.nullable(z.string()).optional(), + id: z.string(), + kind: EventListItemResponseKind2$inboundSchema, +}); + +export function eventListItemResponseActor2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseActor2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseActor2' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseActorUnion2$inboundSchema: z.ZodType< + EventListItemResponseActorUnion2, + unknown +> = z.union([z.lazy(() => EventListItemResponseActor2$inboundSchema), z.any()]); + +export function eventListItemResponseActorUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseActorUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseActorUnion2' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentEnvironmentUpdated$inboundSchema: + z.ZodType = z + .object({ + actor: z.nullable( + z.union([ + z.lazy(() => EventListItemResponseActor2$inboundSchema), + z.any(), + ]), + ).optional(), + changedKeys: z.array(z.string()), + deploymentId: z.string(), + type: z.literal("DeploymentEnvironmentUpdated"), + }); + +export function eventListItemResponseDataDeploymentEnvironmentUpdatedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentEnvironmentUpdated, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentEnvironmentUpdated$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentEnvironmentUpdated' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentReleaseUnpinned$inboundSchema: + z.ZodType = z + .object({ + deploymentId: z.string(), + previousPinnedReleaseId: z.string(), + type: z.literal("DeploymentReleaseUnpinned"), + }); + +export function eventListItemResponseDataDeploymentReleaseUnpinnedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentReleaseUnpinned, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentReleaseUnpinned$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentReleaseUnpinned' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentReleasePinned$inboundSchema: + z.ZodType = z + .object({ + deploymentId: z.string(), + pinnedReleaseId: z.string(), + previousPinnedReleaseId: z.nullable(z.string()).optional(), + type: z.literal("DeploymentReleasePinned"), + }); + +export function eventListItemResponseDataDeploymentReleasePinnedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentReleasePinned, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentReleasePinned$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentReleasePinned' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentRedeployRequested$inboundSchema: + z.ZodType = z + .object({ + deploymentId: z.string(), + releaseId: z.string(), + type: z.literal("DeploymentRedeployRequested"), + }); + +export function eventListItemResponseDataDeploymentRedeployRequestedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentRedeployRequested, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentRedeployRequested$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentRedeployRequested' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseKind1$inboundSchema: z.ZodEnum< + typeof EventListItemResponseKind1 +> = z.enum(EventListItemResponseKind1); + +/** @internal */ +export const EventListItemResponseActor1$inboundSchema: z.ZodType< + EventListItemResponseActor1, + unknown +> = z.object({ + email: z.nullable(z.string()).optional(), + id: z.string(), + kind: EventListItemResponseKind1$inboundSchema, +}); + +export function eventListItemResponseActor1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseActor1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseActor1' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseActorUnion1$inboundSchema: z.ZodType< + EventListItemResponseActorUnion1, + unknown +> = z.union([z.lazy(() => EventListItemResponseActor1$inboundSchema), z.any()]); + +export function eventListItemResponseActorUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseActorUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseActorUnion1' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponsePreviousError$inboundSchema: z.ZodType< + EventListItemResponsePreviousError, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function eventListItemResponsePreviousErrorFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponsePreviousError$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponsePreviousError' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponsePreviousErrorUnion$inboundSchema: z.ZodType< + EventListItemResponsePreviousErrorUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponsePreviousError$inboundSchema), + z.any(), +]); + +export function eventListItemResponsePreviousErrorUnionFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponsePreviousErrorUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponsePreviousErrorUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponsePreviousErrorUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentRetryRequested$inboundSchema: + z.ZodType = z + .object({ + actor: z.nullable( + z.union([ + z.lazy(() => EventListItemResponseActor1$inboundSchema), + z.any(), + ]), + ).optional(), + attemptedReleaseId: z.nullable(z.string()).optional(), + deploymentId: z.string(), + previousError: z.nullable( + z.union([ + z.lazy(() => EventListItemResponsePreviousError$inboundSchema), + z.any(), + ]), + ).optional(), + type: z.literal("DeploymentRetryRequested"), + }); + +export function eventListItemResponseDataDeploymentRetryRequestedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentRetryRequested, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentRetryRequested$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentRetryRequested' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentDeleted$inboundSchema: + z.ZodType = z.object({ + deploymentId: z.string(), + type: z.literal("DeploymentDeleted"), + }); + +export function eventListItemResponseDataDeploymentDeletedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentDeleted, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentDeleted$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentDeleted' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentRecovered$inboundSchema: + z.ZodType = z.object({ + deploymentId: z.string(), + releaseId: z.string(), + type: z.literal("DeploymentRecovered"), + }); + +export function eventListItemResponseDataDeploymentRecoveredFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentRecovered, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentRecovered$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentRecovered' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataError2$inboundSchema: z.ZodType< + EventListItemResponseDataError2, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function eventListItemResponseDataError2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseDataError2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataError2' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentDegraded$inboundSchema: + z.ZodType = z.object({ + deploymentId: z.string(), + error: z.lazy(() => EventListItemResponseDataError2$inboundSchema), + type: z.literal("DeploymentDegraded"), + }); + +export function eventListItemResponseDataDeploymentDegradedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentDegraded, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentDegraded$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentDegraded' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataError1$inboundSchema: z.ZodType< + EventListItemResponseDataError1, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function eventListItemResponseDataError1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseDataError1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataError1' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponsePhase$inboundSchema: z.ZodEnum< + typeof EventListItemResponsePhase +> = z.enum(EventListItemResponsePhase); + +/** @internal */ +export const EventListItemResponseDataDeploymentFailed$inboundSchema: z.ZodType< + EventListItemResponseDataDeploymentFailed, + unknown +> = z.object({ + attemptedReleaseId: z.nullable(z.string()).optional(), + deploymentId: z.string(), + error: z.lazy(() => EventListItemResponseDataError1$inboundSchema), + phase: EventListItemResponsePhase$inboundSchema, + type: z.literal("DeploymentFailed"), +}); + +export function eventListItemResponseDataDeploymentFailedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentFailed, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentFailed$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentFailed' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentReleased$inboundSchema: + z.ZodType = z.object({ + deploymentId: z.string(), + previousReleaseId: z.nullable(z.string()).optional(), + releaseId: z.string(), + type: z.literal("DeploymentReleased"), + }); + +export function eventListItemResponseDataDeploymentReleasedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentReleased, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentReleased$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentReleased' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeploymentCreated$inboundSchema: + z.ZodType = z.object({ + deploymentGroupId: z.string(), + deploymentId: z.string(), + releaseId: z.nullable(z.string()).optional(), + type: z.literal("DeploymentCreated"), + }); + +export function eventListItemResponseDataDeploymentCreatedFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeploymentCreated, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeploymentCreated$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeploymentCreated' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataEmptyingBuckets$inboundSchema: z.ZodType< + EventListItemResponseDataEmptyingBuckets, + unknown +> = z.object({ + bucketNames: z.array(z.string()), + type: z.literal("EmptyingBuckets"), +}); + +export function eventListItemResponseDataEmptyingBucketsFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataEmptyingBuckets, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataEmptyingBuckets$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataEmptyingBuckets' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeletingCloudFormationStack$inboundSchema: + z.ZodType = z + .object({ + cfnStackName: z.string(), + currentStatus: z.string(), + type: z.literal("DeletingCloudFormationStack"), + }); + +export function eventListItemResponseDataDeletingCloudFormationStackFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeletingCloudFormationStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeletingCloudFormationStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeletingCloudFormationStack' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataImportingStackStateFromCloudFormation$inboundSchema: + z.ZodType< + EventListItemResponseDataImportingStackStateFromCloudFormation, + unknown + > = z.object({ + cfnStackName: z.string(), + type: z.literal("ImportingStackStateFromCloudFormation"), + }); + +export function eventListItemResponseDataImportingStackStateFromCloudFormationFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataImportingStackStateFromCloudFormation, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataImportingStackStateFromCloudFormation$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataImportingStackStateFromCloudFormation' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataAssumingRole$inboundSchema: z.ZodType< + EventListItemResponseDataAssumingRole, + unknown +> = z.object({ + roleArn: z.string(), + type: z.literal("AssumingRole"), +}); + +export function eventListItemResponseDataAssumingRoleFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataAssumingRole$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataAssumingRole' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeployingCloudFormationStack$inboundSchema: + z.ZodType = z + .object({ + cfnStackName: z.string(), + currentStatus: z.string(), + type: z.literal("DeployingCloudFormationStack"), + }); + +export function eventListItemResponseDataDeployingCloudFormationStackFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeployingCloudFormationStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeployingCloudFormationStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeployingCloudFormationStack' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataEnsuringDockerRepository$inboundSchema: + z.ZodType = z + .object({ + repositoryName: z.string(), + type: z.literal("EnsuringDockerRepository"), + }); + +export function eventListItemResponseDataEnsuringDockerRepositoryFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataEnsuringDockerRepository, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataEnsuringDockerRepository$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataEnsuringDockerRepository' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataSettingUpPlatformContext$inboundSchema: + z.ZodType = z + .object({ + platformName: z.string(), + type: z.literal("SettingUpPlatformContext"), + }); + +export function eventListItemResponseDataSettingUpPlatformContextFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataSettingUpPlatformContext, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataSettingUpPlatformContext$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataSettingUpPlatformContext' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataCleaningUpEnvironment$inboundSchema: + z.ZodType = z.object( + { + stackName: z.string(), + strategyName: z.string(), + type: z.literal("CleaningUpEnvironment"), + }, + ); + +export function eventListItemResponseDataCleaningUpEnvironmentFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataCleaningUpEnvironment, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataCleaningUpEnvironment$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataCleaningUpEnvironment' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataCleaningUpStack$inboundSchema: z.ZodType< + EventListItemResponseDataCleaningUpStack, + unknown +> = z.object({ + stackName: z.string(), + strategyName: z.string(), + type: z.literal("CleaningUpStack"), +}); + +export function eventListItemResponseDataCleaningUpStackFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataCleaningUpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataCleaningUpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataCleaningUpStack' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataRunningTestWorker$inboundSchema: + z.ZodType = z.object({ + stackName: z.string(), + type: z.literal("RunningTestWorker"), + }); + +export function eventListItemResponseDataRunningTestWorkerFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataRunningTestWorker, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataRunningTestWorker$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataRunningTestWorker' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeployingStack$inboundSchema: z.ZodType< + EventListItemResponseDataDeployingStack, + unknown +> = z.object({ + stackName: z.string(), + type: z.literal("DeployingStack"), +}); + +export function eventListItemResponseDataDeployingStackFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDeployingStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeployingStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDeployingStack' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataPreparingEnvironment$inboundSchema: + z.ZodType = z.object({ + strategyName: z.string(), + type: z.literal("PreparingEnvironment"), + }); + +export function eventListItemResponseDataPreparingEnvironmentFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataPreparingEnvironment, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataPreparingEnvironment$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataPreparingEnvironment' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDebuggingAgent$inboundSchema: z.ZodType< + EventListItemResponseDataDebuggingAgent, + unknown +> = z.object({ + agentId: z.string(), + debugSessionId: z.string(), + type: z.literal("DebuggingAgent"), +}); + +export function eventListItemResponseDataDebuggingAgentFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDebuggingAgent, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDebuggingAgent$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDebuggingAgent' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDeletingAgent$inboundSchema: z.ZodType< + EventListItemResponseDataDeletingAgent, + unknown +> = z.object({ + agentId: z.string(), + releaseId: z.string(), + type: z.literal("DeletingAgent"), +}); + +export function eventListItemResponseDataDeletingAgentFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDeletingAgent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataDeletingAgent' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataUpdatingAgent$inboundSchema: z.ZodType< + EventListItemResponseDataUpdatingAgent, + unknown +> = z.object({ + agentId: z.string(), + releaseId: z.string(), + type: z.literal("UpdatingAgent"), +}); + +export function eventListItemResponseDataUpdatingAgentFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataUpdatingAgent$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataUpdatingAgent' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataProvisioningAgent$inboundSchema: + z.ZodType = z.object({ + agentId: z.string(), + releaseId: z.string(), + type: z.literal("ProvisioningAgent"), + }); + +export function eventListItemResponseDataProvisioningAgentFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataProvisioningAgent, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataProvisioningAgent$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataProvisioningAgent' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataGeneratingTemplate$inboundSchema: + z.ZodType = z.object({ + platform: z.string(), + type: z.literal("GeneratingTemplate"), + }); + +export function eventListItemResponseDataGeneratingTemplateFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataGeneratingTemplate, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataGeneratingTemplate$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataGeneratingTemplate' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataGeneratingCloudFormationTemplate$inboundSchema: + z.ZodType< + EventListItemResponseDataGeneratingCloudFormationTemplate, + unknown + > = z.object({ + type: z.literal("GeneratingCloudFormationTemplate"), + }); + +export function eventListItemResponseDataGeneratingCloudFormationTemplateFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataGeneratingCloudFormationTemplate, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataGeneratingCloudFormationTemplate$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataGeneratingCloudFormationTemplate' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponsePlatform$inboundSchema: z.ZodEnum< + typeof EventListItemResponsePlatform +> = z.enum(EventListItemResponsePlatform); + +/** @internal */ +export const EventListItemResponseConfig$inboundSchema: z.ZodType< + EventListItemResponseConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function eventListItemResponseConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseConfig' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseControllerPlatformEnum$inboundSchema: + z.ZodEnum = z.enum( + EventListItemResponseControllerPlatformEnum, + ); + +/** @internal */ +export const EventListItemResponseControllerPlatformUnion$inboundSchema: + z.ZodType = z.union([ + EventListItemResponseControllerPlatformEnum$inboundSchema, + z.any(), + ]); + +export function eventListItemResponseControllerPlatformUnionFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseControllerPlatformUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseControllerPlatformUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseControllerPlatformUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDependency$inboundSchema: z.ZodType< + EventListItemResponseDependency, + unknown +> = z.object({ + id: z.string(), + type: z.string(), +}); + +export function eventListItemResponseDependencyFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseDependency$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDependency' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseErrorNextState$inboundSchema: z.ZodType< + EventListItemResponseErrorNextState, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function eventListItemResponseErrorNextStateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseErrorNextState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseErrorNextState' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseNextStateErrorUnion$inboundSchema: z.ZodType< + EventListItemResponseNextStateErrorUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponseErrorNextState$inboundSchema), + z.any(), +]); + +export function eventListItemResponseNextStateErrorUnionFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseNextStateErrorUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseNextStateErrorUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseNextStateErrorUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseLifecycleEnum$inboundSchema: z.ZodEnum< + typeof EventListItemResponseLifecycleEnum +> = z.enum(EventListItemResponseLifecycleEnum); + +/** @internal */ +export const EventListItemResponseLifecycleUnion$inboundSchema: z.ZodType< + EventListItemResponseLifecycleUnion, + unknown +> = z.union([EventListItemResponseLifecycleEnum$inboundSchema, z.any()]); + +export function eventListItemResponseLifecycleUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseLifecycleUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseLifecycleUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseOutputs$inboundSchema: z.ZodType< + EventListItemResponseOutputs, + unknown +> = collectExtraKeys$( + z.object({ + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function eventListItemResponseOutputsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseOutputs$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseOutputs' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseOutputsUnion$inboundSchema: z.ZodType< + EventListItemResponseOutputsUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponseOutputs$inboundSchema), + z.any(), +]); + +export function eventListItemResponseOutputsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseOutputsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseOutputsUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponsePreviousConfig$inboundSchema: z.ZodType< + EventListItemResponsePreviousConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function eventListItemResponsePreviousConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponsePreviousConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponsePreviousConfig' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponsePreviousConfigUnion$inboundSchema: z.ZodType< + EventListItemResponsePreviousConfigUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponsePreviousConfig$inboundSchema), + z.any(), +]); + +export function eventListItemResponsePreviousConfigUnionFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponsePreviousConfigUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponsePreviousConfigUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponsePreviousConfigUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseStatus$inboundSchema: z.ZodEnum< + typeof EventListItemResponseStatus +> = z.enum(EventListItemResponseStatus); + +/** @internal */ +export const EventListItemResponseResources$inboundSchema: z.ZodType< + EventListItemResponseResources, + unknown +> = z.object({ + _internal: z.nullable(z.any()).optional(), + config: z.lazy(() => EventListItemResponseConfig$inboundSchema), + controllerPlatform: z.nullable( + z.union([ + EventListItemResponseControllerPlatformEnum$inboundSchema, + z.any(), + ]), + ).optional(), + dependencies: z.array( + z.lazy(() => EventListItemResponseDependency$inboundSchema), + ).optional(), + error: z.nullable( + z.union([ + z.lazy(() => EventListItemResponseErrorNextState$inboundSchema), + z.any(), + ]), + ).optional(), + lastFailedState: z.nullable(z.any()).optional(), + lifecycle: z.nullable( + z.union([EventListItemResponseLifecycleEnum$inboundSchema, z.any()]), + ).optional(), + outputs: z.nullable( + z.union([ + z.lazy(() => EventListItemResponseOutputs$inboundSchema), + z.any(), + ]), + ).optional(), + previousConfig: z.nullable( + z.union([ + z.lazy(() => EventListItemResponsePreviousConfig$inboundSchema), + z.any(), + ]), + ).optional(), + remoteBindingParams: z.nullable(z.any()).optional(), + retryAttempt: z.int().optional(), + status: EventListItemResponseStatus$inboundSchema, + type: z.string(), +}).transform((v) => { + return remap$(v, { + "_internal": "internal", + }); +}); + +export function eventListItemResponseResourcesFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseResources$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseResources' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseNextState$inboundSchema: z.ZodType< + EventListItemResponseNextState, + unknown +> = z.object({ + platform: EventListItemResponsePlatform$inboundSchema, + resourcePrefix: z.string(), + resources: z.record( + z.string(), + z.lazy(() => EventListItemResponseResources$inboundSchema), + ), +}); + +export function eventListItemResponseNextStateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseNextState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseNextState' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataStackStep$inboundSchema: z.ZodType< + EventListItemResponseDataStackStep, + unknown +> = z.object({ + nextState: z.lazy(() => EventListItemResponseNextState$inboundSchema), + suggestedDelayMs: z.nullable(z.int()).optional(), + type: z.literal("StackStep"), +}); + +export function eventListItemResponseDataStackStepFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataStackStep$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataStackStep' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataCompilingCode$inboundSchema: z.ZodType< + EventListItemResponseDataCompilingCode, + unknown +> = z.object({ + language: z.string(), + progress: z.nullable(z.string()).optional(), + type: z.literal("CompilingCode"), +}); + +export function eventListItemResponseDataCompilingCodeFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataCompilingCode$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataCompilingCode' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataCreatingRelease$inboundSchema: z.ZodType< + EventListItemResponseDataCreatingRelease, + unknown +> = z.object({ + project: z.string(), + type: z.literal("CreatingRelease"), +}); + +export function eventListItemResponseDataCreatingReleaseFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataCreatingRelease, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataCreatingRelease$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataCreatingRelease' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataPushingResource$inboundSchema: z.ZodType< + EventListItemResponseDataPushingResource, + unknown +> = z.object({ + resourceName: z.string(), + resourceType: z.string(), + type: z.literal("PushingResource"), +}); + +export function eventListItemResponseDataPushingResourceFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataPushingResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataPushingResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataPushingResource' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataPushingStack$inboundSchema: z.ZodType< + EventListItemResponseDataPushingStack, + unknown +> = z.object({ + destination: z.nullable(z.string()).optional(), + platform: z.string(), + stack: z.string(), + type: z.literal("PushingStack"), +}); + +export function eventListItemResponseDataPushingStackFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataPushingStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataPushingStack' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseProgress$inboundSchema: z.ZodType< + EventListItemResponseProgress, + unknown +> = z.object({ + bytesUploaded: z.int(), + layersUploaded: z.int(), + operation: z.string(), + totalBytes: z.int(), + totalLayers: z.int(), +}); + +export function eventListItemResponseProgressFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseProgress$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseProgress' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseProgressUnion$inboundSchema: z.ZodType< + EventListItemResponseProgressUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponseProgress$inboundSchema), + z.any(), +]); + +export function eventListItemResponseProgressUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseProgressUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseProgressUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataPushingImage$inboundSchema: z.ZodType< + EventListItemResponseDataPushingImage, + unknown +> = z.object({ + image: z.string(), + progress: z.nullable( + z.union([ + z.lazy(() => EventListItemResponseProgress$inboundSchema), + z.any(), + ]), + ).optional(), + type: z.literal("PushingImage"), +}); + +export function eventListItemResponseDataPushingImageFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataPushingImage$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataPushingImage' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataBuildingImage$inboundSchema: z.ZodType< + EventListItemResponseDataBuildingImage, + unknown +> = z.object({ + image: z.string(), + type: z.literal("BuildingImage"), +}); + +export function eventListItemResponseDataBuildingImageFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataBuildingImage$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataBuildingImage' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataBuildingResource$inboundSchema: z.ZodType< + EventListItemResponseDataBuildingResource, + unknown +> = z.object({ + relatedResources: z.array(z.string()).optional(), + resourceName: z.string(), + resourceType: z.string(), + type: z.literal("BuildingResource"), +}); + +export function eventListItemResponseDataBuildingResourceFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataBuildingResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataBuildingResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataBuildingResource' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataDownloadingAlienRuntime$inboundSchema: + z.ZodType = z + .object({ + targetTriple: z.string(), + type: z.literal("DownloadingAlienRuntime"), + url: z.string(), + }); + +export function eventListItemResponseDataDownloadingAlienRuntimeFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataDownloadingAlienRuntime, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataDownloadingAlienRuntime$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataDownloadingAlienRuntime' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataRunningPreflights$inboundSchema: + z.ZodType = z.object({ + platform: z.string(), + stack: z.string(), + type: z.literal("RunningPreflights"), + }); + +export function eventListItemResponseDataRunningPreflightsFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataRunningPreflights, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataRunningPreflights$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataRunningPreflights' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataBuildingStack$inboundSchema: z.ZodType< + EventListItemResponseDataBuildingStack, + unknown +> = z.object({ + stack: z.string(), + type: z.literal("BuildingStack"), +}); + +export function eventListItemResponseDataBuildingStackFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataBuildingStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataBuildingStack' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataFinished$inboundSchema: z.ZodType< + EventListItemResponseDataFinished, + unknown +> = z.object({ + type: z.literal("Finished"), +}); + +export function eventListItemResponseDataFinishedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseDataFinished$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataFinished' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataLoadingConfiguration$inboundSchema: + z.ZodType = z.object({ + type: z.literal("LoadingConfiguration"), + }); + +export function eventListItemResponseDataLoadingConfigurationFromJSON( + jsonString: string, +): SafeParseResult< + EventListItemResponseDataLoadingConfiguration, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + EventListItemResponseDataLoadingConfiguration$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'EventListItemResponseDataLoadingConfiguration' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseDataUnion$inboundSchema: z.ZodType< + EventListItemResponseDataUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponseDataLoadingConfiguration$inboundSchema), + z.lazy(() => EventListItemResponseDataFinished$inboundSchema), + z.lazy(() => EventListItemResponseDataBuildingStack$inboundSchema), + z.lazy(() => EventListItemResponseDataRunningPreflights$inboundSchema), + z.lazy(() => EventListItemResponseDataDownloadingAlienRuntime$inboundSchema), + z.lazy(() => EventListItemResponseDataBuildingResource$inboundSchema), + z.lazy(() => EventListItemResponseDataBuildingImage$inboundSchema), + z.lazy(() => EventListItemResponseDataPushingImage$inboundSchema), + z.lazy(() => EventListItemResponseDataPushingStack$inboundSchema), + z.lazy(() => EventListItemResponseDataPushingResource$inboundSchema), + z.lazy(() => EventListItemResponseDataCreatingRelease$inboundSchema), + z.lazy(() => EventListItemResponseDataCompilingCode$inboundSchema), + z.lazy(() => EventListItemResponseDataStackStep$inboundSchema), + z.lazy(() => + EventListItemResponseDataGeneratingCloudFormationTemplate$inboundSchema + ), + z.lazy(() => EventListItemResponseDataGeneratingTemplate$inboundSchema), + z.lazy(() => EventListItemResponseDataProvisioningAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataUpdatingAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataDeletingAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataDebuggingAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataPreparingEnvironment$inboundSchema), + z.lazy(() => EventListItemResponseDataDeployingStack$inboundSchema), + z.lazy(() => EventListItemResponseDataRunningTestWorker$inboundSchema), + z.lazy(() => EventListItemResponseDataCleaningUpStack$inboundSchema), + z.lazy(() => EventListItemResponseDataCleaningUpEnvironment$inboundSchema), + z.lazy(() => EventListItemResponseDataSettingUpPlatformContext$inboundSchema), + z.lazy(() => EventListItemResponseDataEnsuringDockerRepository$inboundSchema), + z.lazy(() => + EventListItemResponseDataDeployingCloudFormationStack$inboundSchema + ), + z.lazy(() => EventListItemResponseDataAssumingRole$inboundSchema), + z.lazy(() => + EventListItemResponseDataImportingStackStateFromCloudFormation$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeletingCloudFormationStack$inboundSchema + ), + z.lazy(() => EventListItemResponseDataEmptyingBuckets$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentCreated$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentReleased$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentFailed$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentDegraded$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentRecovered$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentDeleted$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentRetryRequested$inboundSchema), + z.lazy(() => + EventListItemResponseDataDeploymentRedeployRequested$inboundSchema + ), + z.lazy(() => EventListItemResponseDataDeploymentReleasePinned$inboundSchema), + z.lazy(() => + EventListItemResponseDataDeploymentReleaseUnpinned$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentEnvironmentUpdated$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentDeletionRequested$inboundSchema + ), +]); + +export function eventListItemResponseDataUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseDataUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseDataUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseStateSuccess$inboundSchema: z.ZodEnum< + typeof EventListItemResponseStateSuccess +> = z.enum(EventListItemResponseStateSuccess); + +/** @internal */ +export const EventListItemResponseStateStarted$inboundSchema: z.ZodEnum< + typeof EventListItemResponseStateStarted +> = z.enum(EventListItemResponseStateStarted); + +/** @internal */ +export const EventListItemResponseStateNone$inboundSchema: z.ZodEnum< + typeof EventListItemResponseStateNone +> = z.enum(EventListItemResponseStateNone); + +/** @internal */ +export const EventListItemResponseErrorFailed$inboundSchema: z.ZodType< + EventListItemResponseErrorFailed, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function eventListItemResponseErrorFailedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseErrorFailed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseErrorFailed' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseFailedErrorUnion$inboundSchema: z.ZodType< + EventListItemResponseFailedErrorUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponseErrorFailed$inboundSchema), + z.any(), +]); + +export function eventListItemResponseFailedErrorUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + EventListItemResponseFailedErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseFailedErrorUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseFailed$inboundSchema: z.ZodType< + EventListItemResponseFailed, + unknown +> = z.object({ + error: z.nullable( + z.union([ + z.lazy(() => EventListItemResponseErrorFailed$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function eventListItemResponseFailedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseFailed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseFailed' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseState$inboundSchema: z.ZodType< + EventListItemResponseState, + unknown +> = z.object({ + failed: z.lazy(() => EventListItemResponseFailed$inboundSchema), +}); + +export function eventListItemResponseStateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseState' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponseStateUnion$inboundSchema: z.ZodType< + EventListItemResponseStateUnion, + unknown +> = z.union([ + z.lazy(() => EventListItemResponseState$inboundSchema), + EventListItemResponseStateNone$inboundSchema, + EventListItemResponseStateStarted$inboundSchema, + EventListItemResponseStateSuccess$inboundSchema, +]); + +export function eventListItemResponseStateUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponseStateUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponseStateUnion' from JSON`, + ); +} + +/** @internal */ +export const EventListItemResponse$inboundSchema: z.ZodType< + EventListItemResponse, + unknown +> = z.object({ + id: z.string(), + deploymentId: z.nullable(z.string()).optional(), + releaseId: z.nullable(z.string()).optional(), + debugSessionId: z.nullable(z.string()).optional(), + data: z.union([ + z.lazy(() => EventListItemResponseDataLoadingConfiguration$inboundSchema), + z.lazy(() => EventListItemResponseDataFinished$inboundSchema), + z.lazy(() => EventListItemResponseDataBuildingStack$inboundSchema), + z.lazy(() => EventListItemResponseDataRunningPreflights$inboundSchema), + z.lazy(() => + EventListItemResponseDataDownloadingAlienRuntime$inboundSchema + ), + z.lazy(() => EventListItemResponseDataBuildingResource$inboundSchema), + z.lazy(() => EventListItemResponseDataBuildingImage$inboundSchema), + z.lazy(() => EventListItemResponseDataPushingImage$inboundSchema), + z.lazy(() => EventListItemResponseDataPushingStack$inboundSchema), + z.lazy(() => EventListItemResponseDataPushingResource$inboundSchema), + z.lazy(() => EventListItemResponseDataCreatingRelease$inboundSchema), + z.lazy(() => EventListItemResponseDataCompilingCode$inboundSchema), + z.lazy(() => EventListItemResponseDataStackStep$inboundSchema), + z.lazy(() => + EventListItemResponseDataGeneratingCloudFormationTemplate$inboundSchema + ), + z.lazy(() => EventListItemResponseDataGeneratingTemplate$inboundSchema), + z.lazy(() => EventListItemResponseDataProvisioningAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataUpdatingAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataDeletingAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataDebuggingAgent$inboundSchema), + z.lazy(() => EventListItemResponseDataPreparingEnvironment$inboundSchema), + z.lazy(() => EventListItemResponseDataDeployingStack$inboundSchema), + z.lazy(() => EventListItemResponseDataRunningTestWorker$inboundSchema), + z.lazy(() => EventListItemResponseDataCleaningUpStack$inboundSchema), + z.lazy(() => EventListItemResponseDataCleaningUpEnvironment$inboundSchema), + z.lazy(() => + EventListItemResponseDataSettingUpPlatformContext$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataEnsuringDockerRepository$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeployingCloudFormationStack$inboundSchema + ), + z.lazy(() => EventListItemResponseDataAssumingRole$inboundSchema), + z.lazy(() => + EventListItemResponseDataImportingStackStateFromCloudFormation$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeletingCloudFormationStack$inboundSchema + ), + z.lazy(() => EventListItemResponseDataEmptyingBuckets$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentCreated$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentReleased$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentFailed$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentDegraded$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentRecovered$inboundSchema), + z.lazy(() => EventListItemResponseDataDeploymentDeleted$inboundSchema), + z.lazy(() => + EventListItemResponseDataDeploymentRetryRequested$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentRedeployRequested$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentReleasePinned$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentReleaseUnpinned$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentEnvironmentUpdated$inboundSchema + ), + z.lazy(() => + EventListItemResponseDataDeploymentDeletionRequested$inboundSchema + ), + ]), + state: z.union([ + z.lazy(() => EventListItemResponseState$inboundSchema), + EventListItemResponseStateNone$inboundSchema, + EventListItemResponseStateStarted$inboundSchema, + EventListItemResponseStateSuccess$inboundSchema, + ]), + projectId: z.string(), + createdAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + workspaceId: z.string(), + releaseCreatedAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)) + .optional(), +}); + +export function eventListItemResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventListItemResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventListItemResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/generatemanagerbindingtokenrequest.ts b/client-sdks/platform/typescript/src/models/generatemanagerbindingtokenrequest.ts new file mode 100644 index 000000000..dfcc9576f --- /dev/null +++ b/client-sdks/platform/typescript/src/models/generatemanagerbindingtokenrequest.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type GenerateManagerBindingTokenRequest = { + /** + * Exact deployment whose remote bindings may be resolved. + */ + deploymentId: string; +}; + +/** @internal */ +export type GenerateManagerBindingTokenRequest$Outbound = { + deploymentId: string; +}; + +/** @internal */ +export const GenerateManagerBindingTokenRequest$outboundSchema: z.ZodType< + GenerateManagerBindingTokenRequest$Outbound, + GenerateManagerBindingTokenRequest +> = z.object({ + deploymentId: z.string(), +}); + +export function generateManagerBindingTokenRequestToJSON( + generateManagerBindingTokenRequest: GenerateManagerBindingTokenRequest, +): string { + return JSON.stringify( + GenerateManagerBindingTokenRequest$outboundSchema.parse( + generateManagerBindingTokenRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/generatemanagercommandtokenrequest.ts b/client-sdks/platform/typescript/src/models/generatemanagercommandtokenrequest.ts new file mode 100644 index 000000000..5453d8fb7 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/generatemanagercommandtokenrequest.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type GenerateManagerCommandTokenRequest = { + /** + * Exact command whose encrypted payload may be read. + */ + commandId: string; +}; + +/** @internal */ +export type GenerateManagerCommandTokenRequest$Outbound = { + commandId: string; +}; + +/** @internal */ +export const GenerateManagerCommandTokenRequest$outboundSchema: z.ZodType< + GenerateManagerCommandTokenRequest$Outbound, + GenerateManagerCommandTokenRequest +> = z.object({ + commandId: z.string(), +}); + +export function generateManagerCommandTokenRequestToJSON( + generateManagerCommandTokenRequest: GenerateManagerCommandTokenRequest, +): string { + return JSON.stringify( + GenerateManagerCommandTokenRequest$outboundSchema.parse( + generateManagerCommandTokenRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/importsource.ts b/client-sdks/platform/typescript/src/models/importsource.ts index 296afaf1c..bfa7668d8 100644 --- a/client-sdks/platform/typescript/src/models/importsource.ts +++ b/client-sdks/platform/typescript/src/models/importsource.ts @@ -36,7 +36,29 @@ export const ImportSourcePlatform = { */ export type ImportSourcePlatform = ClosedEnum; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ImportSourceFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ImportSourceFailureDomainsUnion2 = + | ImportSourceFailureDomains2 + | any; + export type ImportSourcePoolsAutoscale = { + failureDomains?: ImportSourceFailureDomains2 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -52,7 +74,29 @@ export type ImportSourcePoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ImportSourceFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ImportSourceFailureDomainsUnion1 = + | ImportSourceFailureDomains1 + | any; + export type ImportSourcePoolsFixed = { + failureDomains?: ImportSourceFailureDomains1 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -1293,8 +1337,62 @@ export const ImportSourcePlatform$outboundSchema: z.ZodEnum< typeof ImportSourcePlatform > = z.enum(ImportSourcePlatform); +/** @internal */ +export type ImportSourceFailureDomains2$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const ImportSourceFailureDomains2$outboundSchema: z.ZodType< + ImportSourceFailureDomains2$Outbound, + ImportSourceFailureDomains2 +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function importSourceFailureDomains2ToJSON( + importSourceFailureDomains2: ImportSourceFailureDomains2, +): string { + return JSON.stringify( + ImportSourceFailureDomains2$outboundSchema.parse( + importSourceFailureDomains2, + ), + ); +} + +/** @internal */ +export type ImportSourceFailureDomainsUnion2$Outbound = + | ImportSourceFailureDomains2$Outbound + | any; + +/** @internal */ +export const ImportSourceFailureDomainsUnion2$outboundSchema: z.ZodType< + ImportSourceFailureDomainsUnion2$Outbound, + ImportSourceFailureDomainsUnion2 +> = z.union([ + z.lazy(() => ImportSourceFailureDomains2$outboundSchema), + z.any(), +]); + +export function importSourceFailureDomainsUnion2ToJSON( + importSourceFailureDomainsUnion2: ImportSourceFailureDomainsUnion2, +): string { + return JSON.stringify( + ImportSourceFailureDomainsUnion2$outboundSchema.parse( + importSourceFailureDomainsUnion2, + ), + ); +} + /** @internal */ export type ImportSourcePoolsAutoscale$Outbound = { + failure_domains?: + | ImportSourceFailureDomains2$Outbound + | any + | null + | undefined; machine?: string | null | undefined; max: number; min: number; @@ -1306,10 +1404,20 @@ export const ImportSourcePoolsAutoscale$outboundSchema: z.ZodType< ImportSourcePoolsAutoscale$Outbound, ImportSourcePoolsAutoscale > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => ImportSourceFailureDomains2$outboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function importSourcePoolsAutoscaleToJSON( @@ -1320,8 +1428,62 @@ export function importSourcePoolsAutoscaleToJSON( ); } +/** @internal */ +export type ImportSourceFailureDomains1$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const ImportSourceFailureDomains1$outboundSchema: z.ZodType< + ImportSourceFailureDomains1$Outbound, + ImportSourceFailureDomains1 +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function importSourceFailureDomains1ToJSON( + importSourceFailureDomains1: ImportSourceFailureDomains1, +): string { + return JSON.stringify( + ImportSourceFailureDomains1$outboundSchema.parse( + importSourceFailureDomains1, + ), + ); +} + +/** @internal */ +export type ImportSourceFailureDomainsUnion1$Outbound = + | ImportSourceFailureDomains1$Outbound + | any; + +/** @internal */ +export const ImportSourceFailureDomainsUnion1$outboundSchema: z.ZodType< + ImportSourceFailureDomainsUnion1$Outbound, + ImportSourceFailureDomainsUnion1 +> = z.union([ + z.lazy(() => ImportSourceFailureDomains1$outboundSchema), + z.any(), +]); + +export function importSourceFailureDomainsUnion1ToJSON( + importSourceFailureDomainsUnion1: ImportSourceFailureDomainsUnion1, +): string { + return JSON.stringify( + ImportSourceFailureDomainsUnion1$outboundSchema.parse( + importSourceFailureDomainsUnion1, + ), + ); +} + /** @internal */ export type ImportSourcePoolsFixed$Outbound = { + failure_domains?: + | ImportSourceFailureDomains1$Outbound + | any + | null + | undefined; machine?: string | null | undefined; machines: number; mode: "fixed"; @@ -1332,9 +1494,19 @@ export const ImportSourcePoolsFixed$outboundSchema: z.ZodType< ImportSourcePoolsFixed$Outbound, ImportSourcePoolsFixed > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => ImportSourceFailureDomains1$outboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function importSourcePoolsFixedToJSON( diff --git a/client-sdks/platform/typescript/src/models/index.ts b/client-sdks/platform/typescript/src/models/index.ts index 1ac5d670d..c64e4be8f 100644 --- a/client-sdks/platform/typescript/src/models/index.ts +++ b/client-sdks/platform/typescript/src/models/index.ts @@ -2,6 +2,25 @@ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ +export * from "./acceptworkspaceinvitationresponse.js"; +export * from "./agentsessionapprovalgrantedevent.js"; +export * from "./agentsessionapprovalrequestedevent.js"; +export * from "./agentsessionapproveresponse.js"; +export * from "./agentsessiondetail.js"; +export * from "./agentsessionevent.js"; +export * from "./agentsessioneventsresponse.js"; +export * from "./agentsessioneventstruncatedevent.js"; +export * from "./agentsessionlistitem.js"; +export * from "./agentsessionlistresponse.js"; +export * from "./agentsessionmarkdownevent.js"; +export * from "./agentsessionrestartedevent.js"; +export * from "./agentsessionstatusevent.js"; +export * from "./agentsessionstepevent.js"; +export * from "./agentsessionstopresponse.js"; +export * from "./agentsessionsubject.js"; +export * from "./agentsessiontoolcallevent.js"; +export * from "./agentsessiontoolresultevent.js"; +export * from "./agentsettings.js"; export * from "./apierror.js"; export * from "./apikey.js"; export * from "./apikeydeploymentsetupconfig.js"; @@ -37,7 +56,11 @@ export * from "./createreleaserequest.js"; export * from "./createsetupregistrationoperationrequest.js"; export * from "./debugpackagepresignedurls.js"; export * from "./debugsession.js"; +export * from "./debugsessiondeployment.js"; export * from "./debugsessionlistresponse.js"; +export * from "./debugsessionpublicerror.js"; +export * from "./debugsessionpublicerrorcause.js"; +export * from "./debugsessionpublicerrorcontext.js"; export * from "./debugsessionstate.js"; export * from "./deleteapikeysrequest.js"; export * from "./deletedeploymentrequest.js"; @@ -85,7 +108,10 @@ export * from "./ensuredeploymentgroupbynamerequest.js"; export * from "./environmentvariableconfig.js"; export * from "./environmentvariabletype.js"; export * from "./event.js"; +export * from "./eventlistitemresponse.js"; export * from "./forwardimportrequest.js"; +export * from "./generatemanagerbindingtokenrequest.js"; +export * from "./generatemanagercommandtokenrequest.js"; export * from "./generatemanagertokenrequest.js"; export * from "./generatemanagertokenresponse.js"; export * from "./githubprovider.js"; @@ -111,6 +137,8 @@ export * from "./machinesinventoryitem.js"; export * from "./machinesjointokensummary.js"; export * from "./machineslocaloverrideobservation.js"; export * from "./manager.js"; +export * from "./manageractivedebugsession.js"; +export * from "./manageractivedebugsessionlistresponse.js"; export * from "./managerdeployment.js"; export * from "./managerdomainbindingresponse.js"; export * from "./managerheartbeatrequest.js"; @@ -166,6 +194,12 @@ export * from "./setupregistrationcloudformationtarget.js"; export * from "./setupregistrationoperationresponse.js"; export * from "./setupregistrationoperationresult.js"; export * from "./setupregistrationoperationstatus.js"; +export * from "./slackchannel.js"; +export * from "./slackchannelsresponse.js"; +export * from "./slackinstallurlresponse.js"; +export * from "./slackintegrationstatus.js"; +export * from "./slacknotificationchannelrequest.js"; +export * from "./slacknotificationchannelresponse.js"; export * from "./stackbyplatform.js"; export * from "./stackinputvaluerequest.js"; export * from "./subject.js"; @@ -192,12 +226,16 @@ export * from "./updatemanagerdomainbinding.js"; export * from "./updatemanagerrequest.js"; export * from "./updateproject.js"; export * from "./updateprojectgcpoauthprovider.js"; +export * from "./updateworkspacesettingsrequest.js"; export * from "./userprofile.js"; export * from "./userprofilesetuprequest.js"; export * from "./userrole.js"; export * from "./usersubject.js"; export * from "./workspace.js"; export * from "./workspacebillingentitlements.js"; +export * from "./workspaceinvitation.js"; +export * from "./workspaceinvitationpreview.js"; +export * from "./workspaceinvitelink.js"; export * from "./workspacemember.js"; export * from "./workspacerole.js"; export * from "./workspacescope.js"; diff --git a/client-sdks/platform/typescript/src/models/manageractivedebugsession.ts b/client-sdks/platform/typescript/src/models/manageractivedebugsession.ts new file mode 100644 index 000000000..4e03ef019 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/manageractivedebugsession.ts @@ -0,0 +1,48 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + DebugSessionState, + DebugSessionState$inboundSchema, +} from "./debugsessionstate.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type ManagerActiveDebugSession = { + /** + * Unique identifier for the debug session. + */ + id: string; + /** + * Unique identifier for the deployment. + */ + deploymentId: string; + state: DebugSessionState; + expiresAt: Date; + backendTargetId?: string | null | undefined; +}; + +/** @internal */ +export const ManagerActiveDebugSession$inboundSchema: z.ZodType< + ManagerActiveDebugSession, + unknown +> = z.object({ + id: z.string(), + deploymentId: z.string(), + state: DebugSessionState$inboundSchema, + expiresAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + backendTargetId: z.nullable(z.string()).optional(), +}); + +export function managerActiveDebugSessionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ManagerActiveDebugSession$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerActiveDebugSession' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/manageractivedebugsessionlistresponse.ts b/client-sdks/platform/typescript/src/models/manageractivedebugsessionlistresponse.ts new file mode 100644 index 000000000..d004fc9c6 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/manageractivedebugsessionlistresponse.ts @@ -0,0 +1,46 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { + ManagerActiveDebugSession, + ManagerActiveDebugSession$inboundSchema, +} from "./manageractivedebugsession.js"; + +/** + * Paginated response + */ +export type ManagerActiveDebugSessionListResponse = { + /** + * Items in this page + */ + items: Array; + /** + * Cursor for the next page, null if last page + */ + nextCursor: string | null; +}; + +/** @internal */ +export const ManagerActiveDebugSessionListResponse$inboundSchema: z.ZodType< + ManagerActiveDebugSessionListResponse, + unknown +> = z.object({ + items: z.array(ManagerActiveDebugSession$inboundSchema), + nextCursor: z.nullable(z.string()), +}); + +export function managerActiveDebugSessionListResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerActiveDebugSessionListResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerActiveDebugSessionListResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/managerretryresponse.ts b/client-sdks/platform/typescript/src/models/managerretryresponse.ts index 843f325f6..54b3e0163 100644 --- a/client-sdks/platform/typescript/src/models/managerretryresponse.ts +++ b/client-sdks/platform/typescript/src/models/managerretryresponse.ts @@ -46,7 +46,29 @@ export type ManagerRetryResponseSetupConfig = { environmentVariables: Array; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ManagerRetryResponseFailureDomains6 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ManagerRetryResponseFailureDomainsUnion6 = + | ManagerRetryResponseFailureDomains6 + | any; + export type ManagerRetryResponsePoolsAutoscale3 = { + failureDomains?: ManagerRetryResponseFailureDomains6 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -62,7 +84,29 @@ export type ManagerRetryResponsePoolsAutoscale3 = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ManagerRetryResponseFailureDomains5 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ManagerRetryResponseFailureDomainsUnion5 = + | ManagerRetryResponseFailureDomains5 + | any; + export type ManagerRetryResponsePoolsFixed3 = { + failureDomains?: ManagerRetryResponseFailureDomains5 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -1208,7 +1252,29 @@ export type ManagerRetryResponseSetupTerraform = { stackSettings: ManagerRetryResponseStackSettings3; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ManagerRetryResponseFailureDomains4 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ManagerRetryResponseFailureDomainsUnion4 = + | ManagerRetryResponseFailureDomains4 + | any; + export type ManagerRetryResponsePoolsAutoscale2 = { + failureDomains?: ManagerRetryResponseFailureDomains4 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -1224,7 +1290,29 @@ export type ManagerRetryResponsePoolsAutoscale2 = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ManagerRetryResponseFailureDomains3 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ManagerRetryResponseFailureDomainsUnion3 = + | ManagerRetryResponseFailureDomains3 + | any; + export type ManagerRetryResponsePoolsFixed2 = { + failureDomains?: ManagerRetryResponseFailureDomains3 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -2365,7 +2453,29 @@ export type ManagerRetryResponseSetupGoogleOauth = { stackSettings: ManagerRetryResponseStackSettings2; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ManagerRetryResponseFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ManagerRetryResponseFailureDomainsUnion2 = + | ManagerRetryResponseFailureDomains2 + | any; + export type ManagerRetryResponsePoolsAutoscale1 = { + failureDomains?: ManagerRetryResponseFailureDomains2 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -2381,7 +2491,29 @@ export type ManagerRetryResponsePoolsAutoscale1 = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type ManagerRetryResponseFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type ManagerRetryResponseFailureDomainsUnion1 = + | ManagerRetryResponseFailureDomains1 + | any; + export type ManagerRetryResponsePoolsFixed1 = { + failureDomains?: ManagerRetryResponseFailureDomains1 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -3608,15 +3740,70 @@ export function managerRetryResponseSetupConfigFromJSON( ); } +/** @internal */ +export const ManagerRetryResponseFailureDomains6$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomains6, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function managerRetryResponseFailureDomains6FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomains6$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerRetryResponseFailureDomains6' from JSON`, + ); +} + +/** @internal */ +export const ManagerRetryResponseFailureDomainsUnion6$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomainsUnion6, + unknown +> = z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains6$inboundSchema), + z.any(), +]); + +export function managerRetryResponseFailureDomainsUnion6FromJSON( + jsonString: string, +): SafeParseResult< + ManagerRetryResponseFailureDomainsUnion6, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomainsUnion6$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'ManagerRetryResponseFailureDomainsUnion6' from JSON`, + ); +} + /** @internal */ export const ManagerRetryResponsePoolsAutoscale3$inboundSchema: z.ZodType< ManagerRetryResponsePoolsAutoscale3, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains6$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function managerRetryResponsePoolsAutoscale3FromJSON( @@ -3630,14 +3817,69 @@ export function managerRetryResponsePoolsAutoscale3FromJSON( ); } +/** @internal */ +export const ManagerRetryResponseFailureDomains5$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomains5, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function managerRetryResponseFailureDomains5FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomains5$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerRetryResponseFailureDomains5' from JSON`, + ); +} + +/** @internal */ +export const ManagerRetryResponseFailureDomainsUnion5$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomainsUnion5, + unknown +> = z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains5$inboundSchema), + z.any(), +]); + +export function managerRetryResponseFailureDomainsUnion5FromJSON( + jsonString: string, +): SafeParseResult< + ManagerRetryResponseFailureDomainsUnion5, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomainsUnion5$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'ManagerRetryResponseFailureDomainsUnion5' from JSON`, + ); +} + /** @internal */ export const ManagerRetryResponsePoolsFixed3$inboundSchema: z.ZodType< ManagerRetryResponsePoolsFixed3, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains5$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function managerRetryResponsePoolsFixed3FromJSON( @@ -5567,15 +5809,70 @@ export function managerRetryResponseSetupTerraformFromJSON( ); } +/** @internal */ +export const ManagerRetryResponseFailureDomains4$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomains4, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function managerRetryResponseFailureDomains4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomains4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerRetryResponseFailureDomains4' from JSON`, + ); +} + +/** @internal */ +export const ManagerRetryResponseFailureDomainsUnion4$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomainsUnion4, + unknown +> = z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains4$inboundSchema), + z.any(), +]); + +export function managerRetryResponseFailureDomainsUnion4FromJSON( + jsonString: string, +): SafeParseResult< + ManagerRetryResponseFailureDomainsUnion4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomainsUnion4$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'ManagerRetryResponseFailureDomainsUnion4' from JSON`, + ); +} + /** @internal */ export const ManagerRetryResponsePoolsAutoscale2$inboundSchema: z.ZodType< ManagerRetryResponsePoolsAutoscale2, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains4$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function managerRetryResponsePoolsAutoscale2FromJSON( @@ -5589,14 +5886,69 @@ export function managerRetryResponsePoolsAutoscale2FromJSON( ); } +/** @internal */ +export const ManagerRetryResponseFailureDomains3$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomains3, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function managerRetryResponseFailureDomains3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomains3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerRetryResponseFailureDomains3' from JSON`, + ); +} + +/** @internal */ +export const ManagerRetryResponseFailureDomainsUnion3$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomainsUnion3, + unknown +> = z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains3$inboundSchema), + z.any(), +]); + +export function managerRetryResponseFailureDomainsUnion3FromJSON( + jsonString: string, +): SafeParseResult< + ManagerRetryResponseFailureDomainsUnion3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomainsUnion3$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'ManagerRetryResponseFailureDomainsUnion3' from JSON`, + ); +} + /** @internal */ export const ManagerRetryResponsePoolsFixed2$inboundSchema: z.ZodType< ManagerRetryResponsePoolsFixed2, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains3$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function managerRetryResponsePoolsFixed2FromJSON( @@ -7521,15 +7873,70 @@ export function managerRetryResponseSetupGoogleOauthFromJSON( ); } +/** @internal */ +export const ManagerRetryResponseFailureDomains2$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomains2, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function managerRetryResponseFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomains2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerRetryResponseFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const ManagerRetryResponseFailureDomainsUnion2$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomainsUnion2, + unknown +> = z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains2$inboundSchema), + z.any(), +]); + +export function managerRetryResponseFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult< + ManagerRetryResponseFailureDomainsUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomainsUnion2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'ManagerRetryResponseFailureDomainsUnion2' from JSON`, + ); +} + /** @internal */ export const ManagerRetryResponsePoolsAutoscale1$inboundSchema: z.ZodType< ManagerRetryResponsePoolsAutoscale1, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains2$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function managerRetryResponsePoolsAutoscale1FromJSON( @@ -7543,14 +7950,69 @@ export function managerRetryResponsePoolsAutoscale1FromJSON( ); } +/** @internal */ +export const ManagerRetryResponseFailureDomains1$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomains1, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function managerRetryResponseFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomains1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ManagerRetryResponseFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const ManagerRetryResponseFailureDomainsUnion1$inboundSchema: z.ZodType< + ManagerRetryResponseFailureDomainsUnion1, + unknown +> = z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains1$inboundSchema), + z.any(), +]); + +export function managerRetryResponseFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult< + ManagerRetryResponseFailureDomainsUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + ManagerRetryResponseFailureDomainsUnion1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'ManagerRetryResponseFailureDomainsUnion1' from JSON`, + ); +} + /** @internal */ export const ManagerRetryResponsePoolsFixed1$inboundSchema: z.ZodType< ManagerRetryResponsePoolsFixed1, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => ManagerRetryResponseFailureDomains1$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function managerRetryResponsePoolsFixed1FromJSON( diff --git a/client-sdks/platform/typescript/src/models/newdeploymentrequest.ts b/client-sdks/platform/typescript/src/models/newdeploymentrequest.ts index e3ac6e076..26a27dc48 100644 --- a/client-sdks/platform/typescript/src/models/newdeploymentrequest.ts +++ b/client-sdks/platform/typescript/src/models/newdeploymentrequest.ts @@ -168,7 +168,29 @@ export type NewDeploymentRequestEnvironmentInfoUnion = | NewDeploymentRequestEnvironmentInfoTest | any; +/** + * Failure-domain policy selected for a compute pool. + */ +export type NewDeploymentRequestFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type NewDeploymentRequestFailureDomainsUnion2 = + | NewDeploymentRequestFailureDomains2 + | any; + export type NewDeploymentRequestPoolsAutoscale = { + failureDomains?: NewDeploymentRequestFailureDomains2 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -184,7 +206,29 @@ export type NewDeploymentRequestPoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type NewDeploymentRequestFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type NewDeploymentRequestFailureDomainsUnion1 = + | NewDeploymentRequestFailureDomains1 + | any; + export type NewDeploymentRequestPoolsFixed = { + failureDomains?: NewDeploymentRequestFailureDomains1 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -1587,8 +1631,63 @@ export function newDeploymentRequestEnvironmentInfoUnionToJSON( ); } +/** @internal */ +export type NewDeploymentRequestFailureDomains2$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const NewDeploymentRequestFailureDomains2$outboundSchema: z.ZodType< + NewDeploymentRequestFailureDomains2$Outbound, + NewDeploymentRequestFailureDomains2 +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function newDeploymentRequestFailureDomains2ToJSON( + newDeploymentRequestFailureDomains2: NewDeploymentRequestFailureDomains2, +): string { + return JSON.stringify( + NewDeploymentRequestFailureDomains2$outboundSchema.parse( + newDeploymentRequestFailureDomains2, + ), + ); +} + +/** @internal */ +export type NewDeploymentRequestFailureDomainsUnion2$Outbound = + | NewDeploymentRequestFailureDomains2$Outbound + | any; + +/** @internal */ +export const NewDeploymentRequestFailureDomainsUnion2$outboundSchema: z.ZodType< + NewDeploymentRequestFailureDomainsUnion2$Outbound, + NewDeploymentRequestFailureDomainsUnion2 +> = z.union([ + z.lazy(() => NewDeploymentRequestFailureDomains2$outboundSchema), + z.any(), +]); + +export function newDeploymentRequestFailureDomainsUnion2ToJSON( + newDeploymentRequestFailureDomainsUnion2: + NewDeploymentRequestFailureDomainsUnion2, +): string { + return JSON.stringify( + NewDeploymentRequestFailureDomainsUnion2$outboundSchema.parse( + newDeploymentRequestFailureDomainsUnion2, + ), + ); +} + /** @internal */ export type NewDeploymentRequestPoolsAutoscale$Outbound = { + failure_domains?: + | NewDeploymentRequestFailureDomains2$Outbound + | any + | null + | undefined; machine?: string | null | undefined; max: number; min: number; @@ -1600,10 +1699,20 @@ export const NewDeploymentRequestPoolsAutoscale$outboundSchema: z.ZodType< NewDeploymentRequestPoolsAutoscale$Outbound, NewDeploymentRequestPoolsAutoscale > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => NewDeploymentRequestFailureDomains2$outboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function newDeploymentRequestPoolsAutoscaleToJSON( @@ -1616,8 +1725,63 @@ export function newDeploymentRequestPoolsAutoscaleToJSON( ); } +/** @internal */ +export type NewDeploymentRequestFailureDomains1$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const NewDeploymentRequestFailureDomains1$outboundSchema: z.ZodType< + NewDeploymentRequestFailureDomains1$Outbound, + NewDeploymentRequestFailureDomains1 +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function newDeploymentRequestFailureDomains1ToJSON( + newDeploymentRequestFailureDomains1: NewDeploymentRequestFailureDomains1, +): string { + return JSON.stringify( + NewDeploymentRequestFailureDomains1$outboundSchema.parse( + newDeploymentRequestFailureDomains1, + ), + ); +} + +/** @internal */ +export type NewDeploymentRequestFailureDomainsUnion1$Outbound = + | NewDeploymentRequestFailureDomains1$Outbound + | any; + +/** @internal */ +export const NewDeploymentRequestFailureDomainsUnion1$outboundSchema: z.ZodType< + NewDeploymentRequestFailureDomainsUnion1$Outbound, + NewDeploymentRequestFailureDomainsUnion1 +> = z.union([ + z.lazy(() => NewDeploymentRequestFailureDomains1$outboundSchema), + z.any(), +]); + +export function newDeploymentRequestFailureDomainsUnion1ToJSON( + newDeploymentRequestFailureDomainsUnion1: + NewDeploymentRequestFailureDomainsUnion1, +): string { + return JSON.stringify( + NewDeploymentRequestFailureDomainsUnion1$outboundSchema.parse( + newDeploymentRequestFailureDomainsUnion1, + ), + ); +} + /** @internal */ export type NewDeploymentRequestPoolsFixed$Outbound = { + failure_domains?: + | NewDeploymentRequestFailureDomains1$Outbound + | any + | null + | undefined; machine?: string | null | undefined; machines: number; mode: "fixed"; @@ -1628,9 +1792,19 @@ export const NewDeploymentRequestPoolsFixed$outboundSchema: z.ZodType< NewDeploymentRequestPoolsFixed$Outbound, NewDeploymentRequestPoolsFixed > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => NewDeploymentRequestFailureDomains1$outboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); }); export function newDeploymentRequestPoolsFixedToJSON( diff --git a/client-sdks/platform/typescript/src/models/operations/acceptworkspaceinvitation.ts b/client-sdks/platform/typescript/src/models/operations/acceptworkspaceinvitation.ts new file mode 100644 index 000000000..dc1d35fd7 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/acceptworkspaceinvitation.ts @@ -0,0 +1,32 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type AcceptWorkspaceInvitationRequest = { + token: string; +}; + +/** @internal */ +export type AcceptWorkspaceInvitationRequest$Outbound = { + token: string; +}; + +/** @internal */ +export const AcceptWorkspaceInvitationRequest$outboundSchema: z.ZodType< + AcceptWorkspaceInvitationRequest$Outbound, + AcceptWorkspaceInvitationRequest +> = z.object({ + token: z.string(), +}); + +export function acceptWorkspaceInvitationRequestToJSON( + acceptWorkspaceInvitationRequest: AcceptWorkspaceInvitationRequest, +): string { + return JSON.stringify( + AcceptWorkspaceInvitationRequest$outboundSchema.parse( + acceptWorkspaceInvitationRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/approveagentsession.ts b/client-sdks/platform/typescript/src/models/operations/approveagentsession.ts new file mode 100644 index 000000000..7e82a03d2 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/approveagentsession.ts @@ -0,0 +1,36 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type ApproveAgentSessionRequest = { + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type ApproveAgentSessionRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const ApproveAgentSessionRequest$outboundSchema: z.ZodType< + ApproveAgentSessionRequest$Outbound, + ApproveAgentSessionRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function approveAgentSessionRequestToJSON( + approveAgentSessionRequest: ApproveAgentSessionRequest, +): string { + return JSON.stringify( + ApproveAgentSessionRequest$outboundSchema.parse(approveAgentSessionRequest), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/createworkspaceinvitation.ts b/client-sdks/platform/typescript/src/models/operations/createworkspaceinvitation.ts new file mode 100644 index 000000000..1aff892b1 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/createworkspaceinvitation.ts @@ -0,0 +1,84 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type CreateWorkspaceInvitationRequestBody = { + email: string; + /** + * Role for workspace-scoped service accounts + */ + role: models.WorkspaceRole; +}; + +export type CreateWorkspaceInvitationRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + requestBody?: CreateWorkspaceInvitationRequestBody | undefined; +}; + +/** @internal */ +export type CreateWorkspaceInvitationRequestBody$Outbound = { + email: string; + role: string; +}; + +/** @internal */ +export const CreateWorkspaceInvitationRequestBody$outboundSchema: z.ZodType< + CreateWorkspaceInvitationRequestBody$Outbound, + CreateWorkspaceInvitationRequestBody +> = z.object({ + email: z.string(), + role: models.WorkspaceRole$outboundSchema, +}); + +export function createWorkspaceInvitationRequestBodyToJSON( + createWorkspaceInvitationRequestBody: CreateWorkspaceInvitationRequestBody, +): string { + return JSON.stringify( + CreateWorkspaceInvitationRequestBody$outboundSchema.parse( + createWorkspaceInvitationRequestBody, + ), + ); +} + +/** @internal */ +export type CreateWorkspaceInvitationRequest$Outbound = { + id: string; + workspace?: string | undefined; + RequestBody?: CreateWorkspaceInvitationRequestBody$Outbound | undefined; +}; + +/** @internal */ +export const CreateWorkspaceInvitationRequest$outboundSchema: z.ZodType< + CreateWorkspaceInvitationRequest$Outbound, + CreateWorkspaceInvitationRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), + requestBody: z.lazy(() => CreateWorkspaceInvitationRequestBody$outboundSchema) + .optional(), +}).transform((v) => { + return remap$(v, { + requestBody: "RequestBody", + }); +}); + +export function createWorkspaceInvitationRequestToJSON( + createWorkspaceInvitationRequest: CreateWorkspaceInvitationRequest, +): string { + return JSON.stringify( + CreateWorkspaceInvitationRequest$outboundSchema.parse( + createWorkspaceInvitationRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/createworkspaceinvitelink.ts b/client-sdks/platform/typescript/src/models/operations/createworkspaceinvitelink.ts new file mode 100644 index 000000000..18dab5428 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/createworkspaceinvitelink.ts @@ -0,0 +1,81 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type CreateWorkspaceInviteLinkRequestBody = { + /** + * Role for workspace-scoped service accounts + */ + role: models.WorkspaceRole; +}; + +export type CreateWorkspaceInviteLinkRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + requestBody?: CreateWorkspaceInviteLinkRequestBody | undefined; +}; + +/** @internal */ +export type CreateWorkspaceInviteLinkRequestBody$Outbound = { + role: string; +}; + +/** @internal */ +export const CreateWorkspaceInviteLinkRequestBody$outboundSchema: z.ZodType< + CreateWorkspaceInviteLinkRequestBody$Outbound, + CreateWorkspaceInviteLinkRequestBody +> = z.object({ + role: models.WorkspaceRole$outboundSchema, +}); + +export function createWorkspaceInviteLinkRequestBodyToJSON( + createWorkspaceInviteLinkRequestBody: CreateWorkspaceInviteLinkRequestBody, +): string { + return JSON.stringify( + CreateWorkspaceInviteLinkRequestBody$outboundSchema.parse( + createWorkspaceInviteLinkRequestBody, + ), + ); +} + +/** @internal */ +export type CreateWorkspaceInviteLinkRequest$Outbound = { + id: string; + workspace?: string | undefined; + RequestBody?: CreateWorkspaceInviteLinkRequestBody$Outbound | undefined; +}; + +/** @internal */ +export const CreateWorkspaceInviteLinkRequest$outboundSchema: z.ZodType< + CreateWorkspaceInviteLinkRequest$Outbound, + CreateWorkspaceInviteLinkRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), + requestBody: z.lazy(() => CreateWorkspaceInviteLinkRequestBody$outboundSchema) + .optional(), +}).transform((v) => { + return remap$(v, { + requestBody: "RequestBody", + }); +}); + +export function createWorkspaceInviteLinkRequestToJSON( + createWorkspaceInviteLinkRequest: CreateWorkspaceInviteLinkRequest, +): string { + return JSON.stringify( + CreateWorkspaceInviteLinkRequest$outboundSchema.parse( + createWorkspaceInviteLinkRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/generatemanagerbindingtoken.ts b/client-sdks/platform/typescript/src/models/operations/generatemanagerbindingtoken.ts new file mode 100644 index 000000000..926182b93 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/generatemanagerbindingtoken.ts @@ -0,0 +1,52 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type GenerateManagerBindingTokenRequest = { + /** + * Unique identifier for a manager. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + generateManagerBindingTokenRequest: models.GenerateManagerBindingTokenRequest; +}; + +/** @internal */ +export type GenerateManagerBindingTokenRequest$Outbound = { + id: string; + workspace?: string | undefined; + GenerateManagerBindingTokenRequest: + models.GenerateManagerBindingTokenRequest$Outbound; +}; + +/** @internal */ +export const GenerateManagerBindingTokenRequest$outboundSchema: z.ZodType< + GenerateManagerBindingTokenRequest$Outbound, + GenerateManagerBindingTokenRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), + generateManagerBindingTokenRequest: + models.GenerateManagerBindingTokenRequest$outboundSchema, +}).transform((v) => { + return remap$(v, { + generateManagerBindingTokenRequest: "GenerateManagerBindingTokenRequest", + }); +}); + +export function generateManagerBindingTokenRequestToJSON( + generateManagerBindingTokenRequest: GenerateManagerBindingTokenRequest, +): string { + return JSON.stringify( + GenerateManagerBindingTokenRequest$outboundSchema.parse( + generateManagerBindingTokenRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/generatemanagercommandtoken.ts b/client-sdks/platform/typescript/src/models/operations/generatemanagercommandtoken.ts new file mode 100644 index 000000000..ee84df9aa --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/generatemanagercommandtoken.ts @@ -0,0 +1,52 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type GenerateManagerCommandTokenRequest = { + /** + * Unique identifier for a manager. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + generateManagerCommandTokenRequest: models.GenerateManagerCommandTokenRequest; +}; + +/** @internal */ +export type GenerateManagerCommandTokenRequest$Outbound = { + id: string; + workspace?: string | undefined; + GenerateManagerCommandTokenRequest: + models.GenerateManagerCommandTokenRequest$Outbound; +}; + +/** @internal */ +export const GenerateManagerCommandTokenRequest$outboundSchema: z.ZodType< + GenerateManagerCommandTokenRequest$Outbound, + GenerateManagerCommandTokenRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), + generateManagerCommandTokenRequest: + models.GenerateManagerCommandTokenRequest$outboundSchema, +}).transform((v) => { + return remap$(v, { + generateManagerCommandTokenRequest: "GenerateManagerCommandTokenRequest", + }); +}); + +export function generateManagerCommandTokenRequestToJSON( + generateManagerCommandTokenRequest: GenerateManagerCommandTokenRequest, +): string { + return JSON.stringify( + GenerateManagerCommandTokenRequest$outboundSchema.parse( + generateManagerCommandTokenRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/generatemanagertoken.ts b/client-sdks/platform/typescript/src/models/operations/generatemanagertoken.ts index e2f349973..5d415bc21 100644 --- a/client-sdks/platform/typescript/src/models/operations/generatemanagertoken.ts +++ b/client-sdks/platform/typescript/src/models/operations/generatemanagertoken.ts @@ -15,16 +15,14 @@ export type GenerateManagerTokenRequest = { * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. */ workspace?: string | undefined; - generateManagerTokenRequest?: models.GenerateManagerTokenRequest | undefined; + generateManagerTokenRequest: models.GenerateManagerTokenRequest; }; /** @internal */ export type GenerateManagerTokenRequest$Outbound = { id: string; workspace?: string | undefined; - GenerateManagerTokenRequest?: - | models.GenerateManagerTokenRequest$Outbound - | undefined; + GenerateManagerTokenRequest: models.GenerateManagerTokenRequest$Outbound; }; /** @internal */ @@ -34,8 +32,8 @@ export const GenerateManagerTokenRequest$outboundSchema: z.ZodType< > = z.object({ id: z.string(), workspace: z.string().optional(), - generateManagerTokenRequest: models.GenerateManagerTokenRequest$outboundSchema - .optional(), + generateManagerTokenRequest: + models.GenerateManagerTokenRequest$outboundSchema, }).transform((v) => { return remap$(v, { generateManagerTokenRequest: "GenerateManagerTokenRequest", diff --git a/client-sdks/platform/typescript/src/models/operations/getagentsession.ts b/client-sdks/platform/typescript/src/models/operations/getagentsession.ts new file mode 100644 index 000000000..e59752a58 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/getagentsession.ts @@ -0,0 +1,36 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type GetAgentSessionRequest = { + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type GetAgentSessionRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const GetAgentSessionRequest$outboundSchema: z.ZodType< + GetAgentSessionRequest$Outbound, + GetAgentSessionRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function getAgentSessionRequestToJSON( + getAgentSessionRequest: GetAgentSessionRequest, +): string { + return JSON.stringify( + GetAgentSessionRequest$outboundSchema.parse(getAgentSessionRequest), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/getrelease.ts b/client-sdks/platform/typescript/src/models/operations/getrelease.ts index 4f2edd99c..e194f58c3 100644 --- a/client-sdks/platform/typescript/src/models/operations/getrelease.ts +++ b/client-sdks/platform/typescript/src/models/operations/getrelease.ts @@ -7,6 +7,7 @@ import { ClosedEnum } from "../../types/enums.js"; export const GetReleaseInclude = { Project: "project", + Rollout: "rollout", } as const; export type GetReleaseInclude = ClosedEnum; @@ -20,7 +21,7 @@ export type GetReleaseRequest = { */ workspace?: string | undefined; /** - * Optional fields to include: project + * Optional fields to include: project, rollout */ include?: Array | undefined; }; diff --git a/client-sdks/platform/typescript/src/models/operations/getresourcedeploymentdetail.ts b/client-sdks/platform/typescript/src/models/operations/getresourcedeploymentdetail.ts index fe30cfdc6..3dc3dc287 100644 --- a/client-sdks/platform/typescript/src/models/operations/getresourcedeploymentdetail.ts +++ b/client-sdks/platform/typescript/src/models/operations/getresourcedeploymentdetail.ts @@ -5021,6 +5021,7 @@ export type DataMachines1 = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: DataStatus16; unavailableInstances: number; backend: "machines"; @@ -5186,6 +5187,7 @@ export type DataAzure1 = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: DataStatus15; unavailableInstances: number; backend: "azure"; @@ -5351,6 +5353,7 @@ export type DataGcp1 = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: DataStatus14; unavailableInstances: number; backend: "gcp"; @@ -5516,6 +5519,7 @@ export type DataAws1 = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: DataStatus13; unavailableInstances: number; backend: "aws"; @@ -6161,7 +6165,9 @@ export type DataHorizonPlatform = { cpu?: Cpu3 | any | null | undefined; events: Array; image?: string | null | undefined; + latestUpdateTimestamp?: string | null | undefined; memory?: Memory3 | any | null | undefined; + observedImage?: string | null | undefined; replicaUnits: Array; replicas: Replicas2; schedulingMode: SchedulingMode; @@ -15399,6 +15405,7 @@ export const DataMachines1$inboundSchema: z.ZodType = z horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => DataStatus16$inboundSchema), unavailableInstances: z.int(), backend: z.literal("machines"), @@ -15726,6 +15733,7 @@ export const DataAzure1$inboundSchema: z.ZodType = z horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => DataStatus15$inboundSchema), unavailableInstances: z.int(), backend: z.literal("azure"), @@ -16052,6 +16060,7 @@ export const DataGcp1$inboundSchema: z.ZodType = z.object({ horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => DataStatus14$inboundSchema), unavailableInstances: z.int(), backend: z.literal("gcp"), @@ -16378,6 +16387,7 @@ export const DataAws1$inboundSchema: z.ZodType = z.object({ horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => DataStatus13$inboundSchema), unavailableInstances: z.int(), backend: z.literal("aws"), @@ -17677,8 +17687,10 @@ export const DataHorizonPlatform$inboundSchema: z.ZodType< .optional(), events: z.array(z.lazy(() => Event3$inboundSchema)), image: z.nullable(z.string()).optional(), + latestUpdateTimestamp: z.nullable(z.string()).optional(), memory: z.nullable(z.union([z.lazy(() => Memory3$inboundSchema), z.any()])) .optional(), + observedImage: z.nullable(z.string()).optional(), replicaUnits: z.array(z.lazy(() => ReplicaUnit$inboundSchema)), replicas: z.lazy(() => Replicas2$inboundSchema), schedulingMode: SchedulingMode$inboundSchema, diff --git a/client-sdks/platform/typescript/src/models/operations/getworkspaceinvitationpreview.ts b/client-sdks/platform/typescript/src/models/operations/getworkspaceinvitationpreview.ts new file mode 100644 index 000000000..bce40bbf3 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/getworkspaceinvitationpreview.ts @@ -0,0 +1,32 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type GetWorkspaceInvitationPreviewRequest = { + token: string; +}; + +/** @internal */ +export type GetWorkspaceInvitationPreviewRequest$Outbound = { + token: string; +}; + +/** @internal */ +export const GetWorkspaceInvitationPreviewRequest$outboundSchema: z.ZodType< + GetWorkspaceInvitationPreviewRequest$Outbound, + GetWorkspaceInvitationPreviewRequest +> = z.object({ + token: z.string(), +}); + +export function getWorkspaceInvitationPreviewRequestToJSON( + getWorkspaceInvitationPreviewRequest: GetWorkspaceInvitationPreviewRequest, +): string { + return JSON.stringify( + GetWorkspaceInvitationPreviewRequest$outboundSchema.parse( + getWorkspaceInvitationPreviewRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/getworkspaceinvitelink.ts b/client-sdks/platform/typescript/src/models/operations/getworkspaceinvitelink.ts new file mode 100644 index 000000000..8c4a2fb77 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/getworkspaceinvitelink.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type GetWorkspaceInviteLinkRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type GetWorkspaceInviteLinkRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const GetWorkspaceInviteLinkRequest$outboundSchema: z.ZodType< + GetWorkspaceInviteLinkRequest$Outbound, + GetWorkspaceInviteLinkRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function getWorkspaceInviteLinkRequestToJSON( + getWorkspaceInviteLinkRequest: GetWorkspaceInviteLinkRequest, +): string { + return JSON.stringify( + GetWorkspaceInviteLinkRequest$outboundSchema.parse( + getWorkspaceInviteLinkRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/getworkspacesettings.ts b/client-sdks/platform/typescript/src/models/operations/getworkspacesettings.ts new file mode 100644 index 000000000..dcb559b97 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/getworkspacesettings.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type GetWorkspaceSettingsRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type GetWorkspaceSettingsRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const GetWorkspaceSettingsRequest$outboundSchema: z.ZodType< + GetWorkspaceSettingsRequest$Outbound, + GetWorkspaceSettingsRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function getWorkspaceSettingsRequestToJSON( + getWorkspaceSettingsRequest: GetWorkspaceSettingsRequest, +): string { + return JSON.stringify( + GetWorkspaceSettingsRequest$outboundSchema.parse( + getWorkspaceSettingsRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/index.ts b/client-sdks/platform/typescript/src/models/operations/index.ts index 4c6420234..093498e99 100644 --- a/client-sdks/platform/typescript/src/models/operations/index.ts +++ b/client-sdks/platform/typescript/src/models/operations/index.ts @@ -2,7 +2,9 @@ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ +export * from "./acceptworkspaceinvitation.js"; export * from "./addworkspacemember.js"; +export * from "./approveagentsession.js"; export * from "./cancelmachinesmachinedrain.js"; export * from "./cancelmanagersetup.js"; export * from "./cancelpackage.js"; @@ -24,6 +26,8 @@ export * from "./createprojectfromtemplate.js"; export * from "./createrelease.js"; export * from "./createsetupregistrationoperation.js"; export * from "./createworkspace.js"; +export * from "./createworkspaceinvitation.js"; +export * from "./createworkspaceinvitelink.js"; export * from "./deleteapikeys.js"; export * from "./deletedeployment.js"; export * from "./deletedeploymentgroup.js"; @@ -35,7 +39,10 @@ export * from "./dismissworkspaceonboarding.js"; export * from "./dispatchcommand.js"; export * from "./drainmachinesmachine.js"; export * from "./ensuredeploymentgroupbyname.js"; +export * from "./generatemanagerbindingtoken.js"; +export * from "./generatemanagercommandtoken.js"; export * from "./generatemanagertoken.js"; +export * from "./getagentsession.js"; export * from "./getapikey.js"; export * from "./getcloudregions.js"; export * from "./getcommand.js"; @@ -64,8 +71,14 @@ export * from "./getresourcedeploymentdetail.js"; export * from "./getsetupregistrationoperation.js"; export * from "./getworkspace.js"; export * from "./getworkspacebillingentitlements.js"; +export * from "./getworkspaceinvitationpreview.js"; +export * from "./getworkspaceinvitelink.js"; +export * from "./getworkspacesettings.js"; export * from "./importdeployment.js"; export * from "./incrementcommandattempt.js"; +export * from "./listactivemanagerdebugsessions.js"; +export * from "./listagentsessionevents.js"; +export * from "./listagentsessions.js"; export * from "./listapikeys.js"; export * from "./listbillingauditlog.js"; export * from "./listcommanddeployments.js"; @@ -93,6 +106,7 @@ export * from "./listreleasebranches.js"; export * from "./listreleases.js"; export * from "./listresourcedeployments.js"; export * from "./listresourceoverview.js"; +export * from "./listworkspaceinvitations.js"; export * from "./listworkspacemembers.js"; export * from "./listworkspaces.js"; export * from "./pindeploymentrelease.js"; @@ -107,6 +121,7 @@ export * from "./removemachinesmachine.js"; export * from "./removeworkspacemember.js"; export * from "./renderoperatormanifest.js"; export * from "./reportmanagerheartbeat.js"; +export * from "./resendworkspaceinvitation.js"; export * from "./resolve.js"; export * from "./resolvecommandtarget.js"; export * from "./resolvemanagergcpoauthprovider.js"; @@ -115,7 +130,15 @@ export * from "./retrymanager.js"; export * from "./retrymanagersetup.js"; export * from "./revokeapikey.js"; export * from "./revokemachinesjointoken.js"; +export * from "./revokeworkspaceinvitation.js"; +export * from "./revokeworkspaceinvitelink.js"; export * from "./rotatemachinesjointoken.js"; +export * from "./slackintegrationchannels.js"; +export * from "./slackintegrationinstallurl.js"; +export * from "./slackintegrationsetnotificationchannel.js"; +export * from "./slackintegrationstatus.js"; +export * from "./slackintegrationuninstall.js"; +export * from "./stopagentsession.js"; export * from "./syncacquire.js"; export * from "./synccontext.js"; export * from "./syncgitnamespaces.js"; @@ -135,4 +158,5 @@ export * from "./updateprojectgcpoauthprovider.js"; export * from "./updateuserprofile.js"; export * from "./updateworkspace.js"; export * from "./updateworkspacemember.js"; +export * from "./updateworkspacesettings.js"; export * from "./whoami.js"; diff --git a/client-sdks/platform/typescript/src/models/operations/listactivemanagerdebugsessions.ts b/client-sdks/platform/typescript/src/models/operations/listactivemanagerdebugsessions.ts new file mode 100644 index 000000000..01c3309c7 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/listactivemanagerdebugsessions.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type ListActiveManagerDebugSessionsRequest = { + /** + * Maximum number of items to return per page + */ + limit?: number | undefined; + /** + * Cursor for pagination - omit for first page + */ + cursor?: string | undefined; +}; + +/** @internal */ +export type ListActiveManagerDebugSessionsRequest$Outbound = { + limit: number; + cursor?: string | undefined; +}; + +/** @internal */ +export const ListActiveManagerDebugSessionsRequest$outboundSchema: z.ZodType< + ListActiveManagerDebugSessionsRequest$Outbound, + ListActiveManagerDebugSessionsRequest +> = z.object({ + limit: z.int().default(20), + cursor: z.string().optional(), +}); + +export function listActiveManagerDebugSessionsRequestToJSON( + listActiveManagerDebugSessionsRequest: ListActiveManagerDebugSessionsRequest, +): string { + return JSON.stringify( + ListActiveManagerDebugSessionsRequest$outboundSchema.parse( + listActiveManagerDebugSessionsRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/listagentsessionevents.ts b/client-sdks/platform/typescript/src/models/operations/listagentsessionevents.ts new file mode 100644 index 000000000..356ffeb6a --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/listagentsessionevents.ts @@ -0,0 +1,44 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type ListAgentSessionEventsRequest = { + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + after?: number | null | undefined; + limit?: number | undefined; +}; + +/** @internal */ +export type ListAgentSessionEventsRequest$Outbound = { + id: string; + workspace?: string | undefined; + after: number | null; + limit: number; +}; + +/** @internal */ +export const ListAgentSessionEventsRequest$outboundSchema: z.ZodType< + ListAgentSessionEventsRequest$Outbound, + ListAgentSessionEventsRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), + after: z.nullable(z.int().default(0)), + limit: z.int().default(200), +}); + +export function listAgentSessionEventsRequestToJSON( + listAgentSessionEventsRequest: ListAgentSessionEventsRequest, +): string { + return JSON.stringify( + ListAgentSessionEventsRequest$outboundSchema.parse( + listAgentSessionEventsRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/listagentsessions.ts b/client-sdks/platform/typescript/src/models/operations/listagentsessions.ts new file mode 100644 index 000000000..54005b43d --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/listagentsessions.ts @@ -0,0 +1,33 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type ListAgentSessionsRequest = { + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type ListAgentSessionsRequest$Outbound = { + workspace?: string | undefined; +}; + +/** @internal */ +export const ListAgentSessionsRequest$outboundSchema: z.ZodType< + ListAgentSessionsRequest$Outbound, + ListAgentSessionsRequest +> = z.object({ + workspace: z.string().optional(), +}); + +export function listAgentSessionsRequestToJSON( + listAgentSessionsRequest: ListAgentSessionsRequest, +): string { + return JSON.stringify( + ListAgentSessionsRequest$outboundSchema.parse(listAgentSessionsRequest), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/listevents.ts b/client-sdks/platform/typescript/src/models/operations/listevents.ts index 7b5a0a39c..2a0076224 100644 --- a/client-sdks/platform/typescript/src/models/operations/listevents.ts +++ b/client-sdks/platform/typescript/src/models/operations/listevents.ts @@ -4,10 +4,16 @@ import * as z from "zod/v4"; import { safeParse } from "../../lib/schemas.js"; +import { ClosedEnum } from "../../types/enums.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; import * as models from "../index.js"; +export const ListEventsInclude = { + ReleaseCreatedAt: "releaseCreatedAt", +} as const; +export type ListEventsInclude = ClosedEnum; + export type ListEventsRequest = { /** * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. @@ -21,6 +27,10 @@ export type ListEventsRequest = { * Filter events to a single deployment. */ deploymentId?: string | undefined; + /** + * Optional fields to include: releaseCreatedAt + */ + include?: Array | undefined; /** * Maximum number of items to return per page */ @@ -38,18 +48,24 @@ export type ListEventsResponse = { /** * Items in this page */ - items: Array; + items: Array; /** * Cursor for the next page, null if last page */ nextCursor: string | null; }; +/** @internal */ +export const ListEventsInclude$outboundSchema: z.ZodEnum< + typeof ListEventsInclude +> = z.enum(ListEventsInclude); + /** @internal */ export type ListEventsRequest$Outbound = { workspace?: string | undefined; project?: string | undefined; deploymentId?: string | undefined; + include?: Array | undefined; limit: number; cursor?: string | undefined; }; @@ -62,6 +78,7 @@ export const ListEventsRequest$outboundSchema: z.ZodType< workspace: z.string().optional(), project: z.string().optional(), deploymentId: z.string().optional(), + include: z.array(ListEventsInclude$outboundSchema).optional(), limit: z.int().default(20), cursor: z.string().optional(), }); @@ -79,7 +96,7 @@ export const ListEventsResponse$inboundSchema: z.ZodType< ListEventsResponse, unknown > = z.object({ - items: z.array(models.Event$inboundSchema), + items: z.array(models.EventListItemResponse$inboundSchema), nextCursor: z.nullable(z.string()), }); diff --git a/client-sdks/platform/typescript/src/models/operations/listreleases.ts b/client-sdks/platform/typescript/src/models/operations/listreleases.ts index e2040f83f..890c155eb 100644 --- a/client-sdks/platform/typescript/src/models/operations/listreleases.ts +++ b/client-sdks/platform/typescript/src/models/operations/listreleases.ts @@ -11,6 +11,7 @@ import * as models from "../index.js"; export const ListReleasesInclude = { Project: "project", + Rollout: "rollout", } as const; export type ListReleasesInclude = ClosedEnum; @@ -24,7 +25,7 @@ export type ListReleasesRequest = { */ workspace?: string | undefined; /** - * Optional fields to include: project + * Optional fields to include: project, rollout */ include?: Array | undefined; /** diff --git a/client-sdks/platform/typescript/src/models/operations/listworkspaceinvitations.ts b/client-sdks/platform/typescript/src/models/operations/listworkspaceinvitations.ts new file mode 100644 index 000000000..9ff549c33 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/listworkspaceinvitations.ts @@ -0,0 +1,70 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../../lib/schemas.js"; +import { Result as SafeParseResult } from "../../types/fp.js"; +import { SDKValidationError } from "../errors/sdkvalidationerror.js"; +import * as models from "../index.js"; + +export type ListWorkspaceInvitationsRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** + * Pending invitations. + */ +export type ListWorkspaceInvitationsResponse = { + items: Array; +}; + +/** @internal */ +export type ListWorkspaceInvitationsRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const ListWorkspaceInvitationsRequest$outboundSchema: z.ZodType< + ListWorkspaceInvitationsRequest$Outbound, + ListWorkspaceInvitationsRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function listWorkspaceInvitationsRequestToJSON( + listWorkspaceInvitationsRequest: ListWorkspaceInvitationsRequest, +): string { + return JSON.stringify( + ListWorkspaceInvitationsRequest$outboundSchema.parse( + listWorkspaceInvitationsRequest, + ), + ); +} + +/** @internal */ +export const ListWorkspaceInvitationsResponse$inboundSchema: z.ZodType< + ListWorkspaceInvitationsResponse, + unknown +> = z.object({ + items: z.array(models.WorkspaceInvitation$inboundSchema), +}); + +export function listWorkspaceInvitationsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ListWorkspaceInvitationsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ListWorkspaceInvitationsResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/resendworkspaceinvitation.ts b/client-sdks/platform/typescript/src/models/operations/resendworkspaceinvitation.ts new file mode 100644 index 000000000..3948c657e --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/resendworkspaceinvitation.ts @@ -0,0 +1,44 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type ResendWorkspaceInvitationRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + invitationId: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type ResendWorkspaceInvitationRequest$Outbound = { + id: string; + invitationId: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const ResendWorkspaceInvitationRequest$outboundSchema: z.ZodType< + ResendWorkspaceInvitationRequest$Outbound, + ResendWorkspaceInvitationRequest +> = z.object({ + id: z.string(), + invitationId: z.string(), + workspace: z.string().optional(), +}); + +export function resendWorkspaceInvitationRequestToJSON( + resendWorkspaceInvitationRequest: ResendWorkspaceInvitationRequest, +): string { + return JSON.stringify( + ResendWorkspaceInvitationRequest$outboundSchema.parse( + resendWorkspaceInvitationRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/revokeworkspaceinvitation.ts b/client-sdks/platform/typescript/src/models/operations/revokeworkspaceinvitation.ts new file mode 100644 index 000000000..6d59366a6 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/revokeworkspaceinvitation.ts @@ -0,0 +1,44 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type RevokeWorkspaceInvitationRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + invitationId: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type RevokeWorkspaceInvitationRequest$Outbound = { + id: string; + invitationId: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const RevokeWorkspaceInvitationRequest$outboundSchema: z.ZodType< + RevokeWorkspaceInvitationRequest$Outbound, + RevokeWorkspaceInvitationRequest +> = z.object({ + id: z.string(), + invitationId: z.string(), + workspace: z.string().optional(), +}); + +export function revokeWorkspaceInvitationRequestToJSON( + revokeWorkspaceInvitationRequest: RevokeWorkspaceInvitationRequest, +): string { + return JSON.stringify( + RevokeWorkspaceInvitationRequest$outboundSchema.parse( + revokeWorkspaceInvitationRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/revokeworkspaceinvitelink.ts b/client-sdks/platform/typescript/src/models/operations/revokeworkspaceinvitelink.ts new file mode 100644 index 000000000..9627c742b --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/revokeworkspaceinvitelink.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type RevokeWorkspaceInviteLinkRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type RevokeWorkspaceInviteLinkRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const RevokeWorkspaceInviteLinkRequest$outboundSchema: z.ZodType< + RevokeWorkspaceInviteLinkRequest$Outbound, + RevokeWorkspaceInviteLinkRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function revokeWorkspaceInviteLinkRequestToJSON( + revokeWorkspaceInviteLinkRequest: RevokeWorkspaceInviteLinkRequest, +): string { + return JSON.stringify( + RevokeWorkspaceInviteLinkRequest$outboundSchema.parse( + revokeWorkspaceInviteLinkRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/slackintegrationchannels.ts b/client-sdks/platform/typescript/src/models/operations/slackintegrationchannels.ts new file mode 100644 index 000000000..da4ff22ae --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/slackintegrationchannels.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type SlackIntegrationChannelsRequest = { + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type SlackIntegrationChannelsRequest$Outbound = { + workspace?: string | undefined; +}; + +/** @internal */ +export const SlackIntegrationChannelsRequest$outboundSchema: z.ZodType< + SlackIntegrationChannelsRequest$Outbound, + SlackIntegrationChannelsRequest +> = z.object({ + workspace: z.string().optional(), +}); + +export function slackIntegrationChannelsRequestToJSON( + slackIntegrationChannelsRequest: SlackIntegrationChannelsRequest, +): string { + return JSON.stringify( + SlackIntegrationChannelsRequest$outboundSchema.parse( + slackIntegrationChannelsRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/slackintegrationinstallurl.ts b/client-sdks/platform/typescript/src/models/operations/slackintegrationinstallurl.ts new file mode 100644 index 000000000..1c95f45da --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/slackintegrationinstallurl.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type SlackIntegrationInstallUrlRequest = { + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type SlackIntegrationInstallUrlRequest$Outbound = { + workspace?: string | undefined; +}; + +/** @internal */ +export const SlackIntegrationInstallUrlRequest$outboundSchema: z.ZodType< + SlackIntegrationInstallUrlRequest$Outbound, + SlackIntegrationInstallUrlRequest +> = z.object({ + workspace: z.string().optional(), +}); + +export function slackIntegrationInstallUrlRequestToJSON( + slackIntegrationInstallUrlRequest: SlackIntegrationInstallUrlRequest, +): string { + return JSON.stringify( + SlackIntegrationInstallUrlRequest$outboundSchema.parse( + slackIntegrationInstallUrlRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/slackintegrationsetnotificationchannel.ts b/client-sdks/platform/typescript/src/models/operations/slackintegrationsetnotificationchannel.ts new file mode 100644 index 000000000..ef7e48066 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/slackintegrationsetnotificationchannel.ts @@ -0,0 +1,51 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type SlackIntegrationSetNotificationChannelRequest = { + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + slackNotificationChannelRequest?: + | models.SlackNotificationChannelRequest + | undefined; +}; + +/** @internal */ +export type SlackIntegrationSetNotificationChannelRequest$Outbound = { + workspace?: string | undefined; + SlackNotificationChannelRequest?: + | models.SlackNotificationChannelRequest$Outbound + | undefined; +}; + +/** @internal */ +export const SlackIntegrationSetNotificationChannelRequest$outboundSchema: + z.ZodType< + SlackIntegrationSetNotificationChannelRequest$Outbound, + SlackIntegrationSetNotificationChannelRequest + > = z.object({ + workspace: z.string().optional(), + slackNotificationChannelRequest: models + .SlackNotificationChannelRequest$outboundSchema.optional(), + }).transform((v) => { + return remap$(v, { + slackNotificationChannelRequest: "SlackNotificationChannelRequest", + }); + }); + +export function slackIntegrationSetNotificationChannelRequestToJSON( + slackIntegrationSetNotificationChannelRequest: + SlackIntegrationSetNotificationChannelRequest, +): string { + return JSON.stringify( + SlackIntegrationSetNotificationChannelRequest$outboundSchema.parse( + slackIntegrationSetNotificationChannelRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/slackintegrationstatus.ts b/client-sdks/platform/typescript/src/models/operations/slackintegrationstatus.ts new file mode 100644 index 000000000..a38984abf --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/slackintegrationstatus.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type SlackIntegrationStatusRequest = { + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type SlackIntegrationStatusRequest$Outbound = { + workspace?: string | undefined; +}; + +/** @internal */ +export const SlackIntegrationStatusRequest$outboundSchema: z.ZodType< + SlackIntegrationStatusRequest$Outbound, + SlackIntegrationStatusRequest +> = z.object({ + workspace: z.string().optional(), +}); + +export function slackIntegrationStatusRequestToJSON( + slackIntegrationStatusRequest: SlackIntegrationStatusRequest, +): string { + return JSON.stringify( + SlackIntegrationStatusRequest$outboundSchema.parse( + slackIntegrationStatusRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/slackintegrationuninstall.ts b/client-sdks/platform/typescript/src/models/operations/slackintegrationuninstall.ts new file mode 100644 index 000000000..190f0d14c --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/slackintegrationuninstall.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type SlackIntegrationUninstallRequest = { + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type SlackIntegrationUninstallRequest$Outbound = { + workspace?: string | undefined; +}; + +/** @internal */ +export const SlackIntegrationUninstallRequest$outboundSchema: z.ZodType< + SlackIntegrationUninstallRequest$Outbound, + SlackIntegrationUninstallRequest +> = z.object({ + workspace: z.string().optional(), +}); + +export function slackIntegrationUninstallRequestToJSON( + slackIntegrationUninstallRequest: SlackIntegrationUninstallRequest, +): string { + return JSON.stringify( + SlackIntegrationUninstallRequest$outboundSchema.parse( + slackIntegrationUninstallRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/stopagentsession.ts b/client-sdks/platform/typescript/src/models/operations/stopagentsession.ts new file mode 100644 index 000000000..a0ba6d4b1 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/stopagentsession.ts @@ -0,0 +1,36 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type StopAgentSessionRequest = { + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; +}; + +/** @internal */ +export type StopAgentSessionRequest$Outbound = { + id: string; + workspace?: string | undefined; +}; + +/** @internal */ +export const StopAgentSessionRequest$outboundSchema: z.ZodType< + StopAgentSessionRequest$Outbound, + StopAgentSessionRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), +}); + +export function stopAgentSessionRequestToJSON( + stopAgentSessionRequest: StopAgentSessionRequest, +): string { + return JSON.stringify( + StopAgentSessionRequest$outboundSchema.parse(stopAgentSessionRequest), + ); +} diff --git a/client-sdks/platform/typescript/src/models/operations/updateworkspacesettings.ts b/client-sdks/platform/typescript/src/models/operations/updateworkspacesettings.ts new file mode 100644 index 000000000..45ae5bb2a --- /dev/null +++ b/client-sdks/platform/typescript/src/models/operations/updateworkspacesettings.ts @@ -0,0 +1,55 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type UpdateWorkspaceSettingsRequest = { + /** + * Unique identifier for the workspace. + */ + id: string; + /** + * Workspace name. Required for user/session/OAuth requests. Optional for API keys because API keys are workspace-scoped; if provided with an API key, it must match the key's workspace. + */ + workspace?: string | undefined; + updateWorkspaceSettingsRequest?: + | models.UpdateWorkspaceSettingsRequest + | undefined; +}; + +/** @internal */ +export type UpdateWorkspaceSettingsRequest$Outbound = { + id: string; + workspace?: string | undefined; + UpdateWorkspaceSettingsRequest?: + | models.UpdateWorkspaceSettingsRequest$Outbound + | undefined; +}; + +/** @internal */ +export const UpdateWorkspaceSettingsRequest$outboundSchema: z.ZodType< + UpdateWorkspaceSettingsRequest$Outbound, + UpdateWorkspaceSettingsRequest +> = z.object({ + id: z.string(), + workspace: z.string().optional(), + updateWorkspaceSettingsRequest: models + .UpdateWorkspaceSettingsRequest$outboundSchema.optional(), +}).transform((v) => { + return remap$(v, { + updateWorkspaceSettingsRequest: "UpdateWorkspaceSettingsRequest", + }); +}); + +export function updateWorkspaceSettingsRequestToJSON( + updateWorkspaceSettingsRequest: UpdateWorkspaceSettingsRequest, +): string { + return JSON.stringify( + UpdateWorkspaceSettingsRequest$outboundSchema.parse( + updateWorkspaceSettingsRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/persistimporteddeploymentrequest.ts b/client-sdks/platform/typescript/src/models/persistimporteddeploymentrequest.ts index 62bb91cac..5ac0b0cec 100644 --- a/client-sdks/platform/typescript/src/models/persistimporteddeploymentrequest.ts +++ b/client-sdks/platform/typescript/src/models/persistimporteddeploymentrequest.ts @@ -43,7 +43,33 @@ export type PersistImportedDeploymentRequestPlatformEnum = ClosedEnum< typeof PersistImportedDeploymentRequestPlatformEnum >; +/** + * Failure-domain policy selected for a compute pool. + */ +export type PersistImportedDeploymentRequestFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type PersistImportedDeploymentRequestFailureDomainsUnion2 = + | PersistImportedDeploymentRequestFailureDomains2 + | any; + export type PersistImportedDeploymentRequestPoolsAutoscale = { + failureDomains?: + | PersistImportedDeploymentRequestFailureDomains2 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -59,7 +85,33 @@ export type PersistImportedDeploymentRequestPoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type PersistImportedDeploymentRequestFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type PersistImportedDeploymentRequestFailureDomainsUnion1 = + | PersistImportedDeploymentRequestFailureDomains1 + | any; + export type PersistImportedDeploymentRequestPoolsFixed = { + failureDomains?: + | PersistImportedDeploymentRequestFailureDomains1 + | any + | null + | undefined; /** * Provider machine type selected for this deployment. */ @@ -1335,95 +1387,105 @@ export type PersistImportedDeploymentRequestEnvironmentInfoUnion = | PersistImportedDeploymentRequestEnvironmentInfoTest | any; -export const PersistImportedDeploymentRequestTypeStringList = { - StringList: "stringList", -} as const; -export type PersistImportedDeploymentRequestTypeStringList = ClosedEnum< - typeof PersistImportedDeploymentRequestTypeStringList ->; +export const PersistImportedDeploymentRequestPendingPreparedStackTypeStringList = + { + StringList: "stringList", + } as const; +export type PersistImportedDeploymentRequestPendingPreparedStackTypeStringList = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeStringList + >; -export type PersistImportedDeploymentRequestDefaultStringList = { - type: PersistImportedDeploymentRequestTypeStringList; - /** - * String list default. - */ - value: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList = + { + type: PersistImportedDeploymentRequestPendingPreparedStackTypeStringList; + /** + * String list default. + */ + value: Array; + }; -export const PersistImportedDeploymentRequestTypeBoolean = { +export const PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type PersistImportedDeploymentRequestTypeBoolean = ClosedEnum< - typeof PersistImportedDeploymentRequestTypeBoolean ->; +export type PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean + >; -export type PersistImportedDeploymentRequestDefaultBoolean = { - type: PersistImportedDeploymentRequestTypeBoolean; - /** - * Boolean default. - */ - value: boolean; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean = + { + type: PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean; + /** + * Boolean default. + */ + value: boolean; + }; -export const PersistImportedDeploymentRequestTypeNumber = { +export const PersistImportedDeploymentRequestPendingPreparedStackTypeNumber = { Number: "number", } as const; -export type PersistImportedDeploymentRequestTypeNumber = ClosedEnum< - typeof PersistImportedDeploymentRequestTypeNumber ->; +export type PersistImportedDeploymentRequestPendingPreparedStackTypeNumber = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeNumber + >; -export type PersistImportedDeploymentRequestDefaultNumber = { - type: PersistImportedDeploymentRequestTypeNumber; - /** - * Number default. - */ - value: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber = + { + type: PersistImportedDeploymentRequestPendingPreparedStackTypeNumber; + /** + * Number default. + */ + value: string; + }; -export const PersistImportedDeploymentRequestTypeString = { +export const PersistImportedDeploymentRequestPendingPreparedStackTypeString = { String: "string", } as const; -export type PersistImportedDeploymentRequestTypeString = ClosedEnum< - typeof PersistImportedDeploymentRequestTypeString ->; +export type PersistImportedDeploymentRequestPendingPreparedStackTypeString = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeString + >; -export type PersistImportedDeploymentRequestDefaultString = { - type: PersistImportedDeploymentRequestTypeString; - /** - * String default. - */ - value: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultString = + { + type: PersistImportedDeploymentRequestPendingPreparedStackTypeString; + /** + * String default. + */ + value: string; + }; -export type PersistImportedDeploymentRequestDefaultUnion = - | PersistImportedDeploymentRequestDefaultString - | PersistImportedDeploymentRequestDefaultNumber - | PersistImportedDeploymentRequestDefaultBoolean - | PersistImportedDeploymentRequestDefaultStringList +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion = + | PersistImportedDeploymentRequestPendingPreparedStackDefaultString + | PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber + | PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean + | PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const PersistImportedDeploymentRequestTypeEnvEnum = { +export const PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type PersistImportedDeploymentRequestTypeEnvEnum = ClosedEnum< - typeof PersistImportedDeploymentRequestTypeEnvEnum ->; +export type PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum + >; -export type PersistImportedDeploymentRequestTypeUnion = - | PersistImportedDeploymentRequestTypeEnvEnum +export type PersistImportedDeploymentRequestPendingPreparedStackTypeUnion = + | PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type PersistImportedDeploymentRequestEnv = { +export type PersistImportedDeploymentRequestPendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1432,13 +1494,17 @@ export type PersistImportedDeploymentRequestEnv = { * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: PersistImportedDeploymentRequestTypeEnvEnum | any | null | undefined; + type?: + | PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum + | any + | null + | undefined; }; /** * Primitive stack input kind. */ -export const PersistImportedDeploymentRequestKind = { +export const PersistImportedDeploymentRequestPendingPreparedStackKind = { String: "string", Secret: "secret", Number: "number", @@ -1450,14 +1516,13 @@ export const PersistImportedDeploymentRequestKind = { /** * Primitive stack input kind. */ -export type PersistImportedDeploymentRequestKind = ClosedEnum< - typeof PersistImportedDeploymentRequestKind ->; +export type PersistImportedDeploymentRequestPendingPreparedStackKind = + ClosedEnum; /** * Represents the target cloud platform. */ -export const PersistImportedDeploymentRequestPreparedStackPlatform = { +export const PersistImportedDeploymentRequestPendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1469,28 +1534,30 @@ export const PersistImportedDeploymentRequestPreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type PersistImportedDeploymentRequestPreparedStackPlatform = ClosedEnum< - typeof PersistImportedDeploymentRequestPreparedStackPlatform ->; +export type PersistImportedDeploymentRequestPendingPreparedStackPlatform = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackPlatform + >; /** * Who can provide a stack input value. */ -export const PersistImportedDeploymentRequestProvidedBy = { +export const PersistImportedDeploymentRequestPendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type PersistImportedDeploymentRequestProvidedBy = ClosedEnum< - typeof PersistImportedDeploymentRequestProvidedBy ->; +export type PersistImportedDeploymentRequestPendingPreparedStackProvidedBy = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackProvidedBy + >; /** * Portable stack input validation constraints. */ -export type PersistImportedDeploymentRequestValidation = { +export type PersistImportedDeploymentRequestPendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -1529,19 +1596,19 @@ export type PersistImportedDeploymentRequestValidation = { values?: Array | null | undefined; }; -export type PersistImportedDeploymentRequestValidationUnion = - | PersistImportedDeploymentRequestValidation +export type PersistImportedDeploymentRequestPendingPreparedStackValidationUnion = + | PersistImportedDeploymentRequestPendingPreparedStackValidation | any; /** * Stack input definition serialized into a release stack. */ -export type PersistImportedDeploymentRequestInput = { +export type PersistImportedDeploymentRequestPendingPreparedStackInput = { default?: - | PersistImportedDeploymentRequestDefaultString - | PersistImportedDeploymentRequestDefaultNumber - | PersistImportedDeploymentRequestDefaultBoolean - | PersistImportedDeploymentRequestDefaultStringList + | PersistImportedDeploymentRequestPendingPreparedStackDefaultString + | PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber + | PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean + | PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList | any | null | undefined; @@ -1552,7 +1619,9 @@ export type PersistImportedDeploymentRequestInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: + | Array + | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -1560,7 +1629,7 @@ export type PersistImportedDeploymentRequestInput = { /** * Primitive stack input kind. */ - kind: PersistImportedDeploymentRequestKind; + kind: PersistImportedDeploymentRequestPendingPreparedStackKind; /** * Human-facing field label. */ @@ -1573,121 +1642,136 @@ export type PersistImportedDeploymentRequestInput = { * Platforms where this input applies. */ platforms?: - | Array + | Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array< + PersistImportedDeploymentRequestPendingPreparedStackProvidedBy + >; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; validation?: - | PersistImportedDeploymentRequestValidation + | PersistImportedDeploymentRequestPendingPreparedStackValidation | any | null | undefined; }; -export const PersistImportedDeploymentRequestManagementEnum = { - Auto: "auto", -} as const; -export type PersistImportedDeploymentRequestManagementEnum = ClosedEnum< - typeof PersistImportedDeploymentRequestManagementEnum ->; +export const PersistImportedDeploymentRequestPendingPreparedStackManagementEnum = + { + Auto: "auto", + } as const; +export type PersistImportedDeploymentRequestPendingPreparedStackManagementEnum = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackManagementEnum + >; /** * AWS-specific binding specification */ -export type PersistImportedDeploymentRequestOverrideAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * AWS-specific binding specification */ -export type PersistImportedDeploymentRequestOverrideAwStack = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestOverrideAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: PersistImportedDeploymentRequestOverrideAwResource | undefined; - /** - * AWS-specific binding specification - */ - stack?: PersistImportedDeploymentRequestOverrideAwStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding = + { + /** + * AWS-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack + | undefined; + }; /** * IAM effect. Defaults to Allow. */ -export const PersistImportedDeploymentRequestOverrideEffect = { - Allow: "Allow", - Deny: "Deny", -} as const; +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect = + { + Allow: "Allow", + Deny: "Deny", + } as const; /** * IAM effect. Defaults to Allow. */ -export type PersistImportedDeploymentRequestOverrideEffect = ClosedEnum< - typeof PersistImportedDeploymentRequestOverrideEffect ->; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect + >; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestOverrideAwGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * AWS-specific platform permission configuration */ -export type PersistImportedDeploymentRequestOverrideAw = { +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestOverrideAwBinding; + binding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -1695,11 +1779,13 @@ export type PersistImportedDeploymentRequestOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: PersistImportedDeploymentRequestOverrideEffect | undefined; + effect?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestOverrideAwGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -1709,187 +1795,209 @@ export type PersistImportedDeploymentRequestOverrideAw = { /** * Azure-specific binding specification */ -export type PersistImportedDeploymentRequestOverrideAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type PersistImportedDeploymentRequestOverrideAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestOverrideAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: PersistImportedDeploymentRequestOverrideAzureResource | undefined; - /** - * Azure-specific binding specification - */ - stack?: PersistImportedDeploymentRequestOverrideAzureStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestOverrideAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; - -/** - * Azure-specific platform permission configuration - */ -export type PersistImportedDeploymentRequestOverrideAzure = { - /** - * Generic binding configuration for permissions - */ - binding: PersistImportedDeploymentRequestOverrideAzureBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * Grant permissions for a specific cloud platform - */ - grant: PersistImportedDeploymentRequestOverrideAzureGrant; - /** - * Stable admin-facing label for this permission entry. - */ - label?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; + +/** + * Azure-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure = + { + /** + * Generic binding configuration for permissions + */ + binding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; + }; /** * GCP IAM condition */ -export type PersistImportedDeploymentRequestOverrideConditionResource = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource = + { + expression: string; + title: string; + }; -export type PersistImportedDeploymentRequestOverrideResourceConditionUnion = - | PersistImportedDeploymentRequestOverrideConditionResource +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion = + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource | any; /** * GCP-specific binding specification */ -export type PersistImportedDeploymentRequestOverrideGcpResource = { - condition?: - | PersistImportedDeploymentRequestOverrideConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * GCP IAM condition */ -export type PersistImportedDeploymentRequestOverrideConditionStack = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack = + { + expression: string; + title: string; + }; -export type PersistImportedDeploymentRequestOverrideStackConditionUnion = - | PersistImportedDeploymentRequestOverrideConditionStack +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion = + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack | any; /** * GCP-specific binding specification */ -export type PersistImportedDeploymentRequestOverrideGcpStack = { - condition?: - | PersistImportedDeploymentRequestOverrideConditionStack - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestOverrideGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: PersistImportedDeploymentRequestOverrideGcpResource | undefined; - /** - * GCP-specific binding specification - */ - stack?: PersistImportedDeploymentRequestOverrideGcpStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding = + { + /** + * GCP-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestOverrideGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * GCP-specific platform permission configuration */ -export type PersistImportedDeploymentRequestOverrideGcp = { +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestOverrideGcpBinding; + binding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -1897,7 +2005,7 @@ export type PersistImportedDeploymentRequestOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestOverrideGcpGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -1907,28 +2015,35 @@ export type PersistImportedDeploymentRequestOverrideGcp = { /** * Platform-specific permission configurations */ -export type PersistImportedDeploymentRequestOverridePlatforms = { - /** - * AWS permission configurations - */ - aws?: Array | null | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms = + { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; + }; /** * A permission set that can be applied across different cloud platforms */ -export type PersistImportedDeploymentRequestOverride = { +export type PersistImportedDeploymentRequestPendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -1940,17 +2055,18 @@ export type PersistImportedDeploymentRequestOverride = { /** * Platform-specific permission configurations */ - platforms: PersistImportedDeploymentRequestOverridePlatforms; + platforms: + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type PersistImportedDeploymentRequestOverrideUnion = - | PersistImportedDeploymentRequestOverride +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion = + | PersistImportedDeploymentRequestPendingPreparedStackOverride | string; -export type PersistImportedDeploymentRequestManagement2 = { +export type PersistImportedDeploymentRequestPendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * @@ -1958,100 +2074,112 @@ export type PersistImportedDeploymentRequestManagement2 = { * Key can be "*" for all resources or resource name for specific resource */ override: { - [k: string]: Array; + [k: string]: Array< + PersistImportedDeploymentRequestPendingPreparedStackOverride | string + >; }; }; /** * AWS-specific binding specification */ -export type PersistImportedDeploymentRequestExtendAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * AWS-specific binding specification */ -export type PersistImportedDeploymentRequestExtendAwStack = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestExtendAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: PersistImportedDeploymentRequestExtendAwResource | undefined; - /** - * AWS-specific binding specification - */ - stack?: PersistImportedDeploymentRequestExtendAwStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding = + { + /** + * AWS-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack + | undefined; + }; /** * IAM effect. Defaults to Allow. */ -export const PersistImportedDeploymentRequestExtendEffect = { - Allow: "Allow", - Deny: "Deny", -} as const; +export const PersistImportedDeploymentRequestPendingPreparedStackExtendEffect = + { + Allow: "Allow", + Deny: "Deny", + } as const; /** * IAM effect. Defaults to Allow. */ -export type PersistImportedDeploymentRequestExtendEffect = ClosedEnum< - typeof PersistImportedDeploymentRequestExtendEffect ->; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendEffect = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackExtendEffect + >; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestExtendAwGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * AWS-specific platform permission configuration */ -export type PersistImportedDeploymentRequestExtendAw = { +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestExtendAwBinding; + binding: PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2059,11 +2187,13 @@ export type PersistImportedDeploymentRequestExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: PersistImportedDeploymentRequestExtendEffect | undefined; + effect?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestExtendAwGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2073,71 +2203,80 @@ export type PersistImportedDeploymentRequestExtendAw = { /** * Azure-specific binding specification */ -export type PersistImportedDeploymentRequestExtendAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type PersistImportedDeploymentRequestExtendAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestExtendAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: PersistImportedDeploymentRequestExtendAzureResource | undefined; - /** - * Azure-specific binding specification - */ - stack?: PersistImportedDeploymentRequestExtendAzureStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestExtendAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * Azure-specific platform permission configuration */ -export type PersistImportedDeploymentRequestExtendAzure = { +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestExtendAzureBinding; + binding: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2145,7 +2284,7 @@ export type PersistImportedDeploymentRequestExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestExtendAzureGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2155,105 +2294,115 @@ export type PersistImportedDeploymentRequestExtendAzure = { /** * GCP IAM condition */ -export type PersistImportedDeploymentRequestExtendConditionResource = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource = + { + expression: string; + title: string; + }; -export type PersistImportedDeploymentRequestExtendResourceConditionUnion = - | PersistImportedDeploymentRequestExtendConditionResource +export type PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion = + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type PersistImportedDeploymentRequestExtendGcpResource = { - condition?: - | PersistImportedDeploymentRequestExtendConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * GCP IAM condition */ -export type PersistImportedDeploymentRequestExtendConditionStack = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack = + { + expression: string; + title: string; + }; -export type PersistImportedDeploymentRequestExtendStackConditionUnion = - | PersistImportedDeploymentRequestExtendConditionStack +export type PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion = + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type PersistImportedDeploymentRequestExtendGcpStack = { - condition?: - | PersistImportedDeploymentRequestExtendConditionStack - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestExtendGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: PersistImportedDeploymentRequestExtendGcpResource | undefined; - /** - * GCP-specific binding specification - */ - stack?: PersistImportedDeploymentRequestExtendGcpStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding = + { + /** + * GCP-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestExtendGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * GCP-specific platform permission configuration */ -export type PersistImportedDeploymentRequestExtendGcp = { +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestExtendGcpBinding; + binding: PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2261,7 +2410,7 @@ export type PersistImportedDeploymentRequestExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestExtendGcpGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2271,25 +2420,35 @@ export type PersistImportedDeploymentRequestExtendGcp = { /** * Platform-specific permission configurations */ -export type PersistImportedDeploymentRequestExtendPlatforms = { - /** - * AWS permission configurations - */ - aws?: Array | null | undefined; - /** - * Azure permission configurations - */ - azure?: Array | null | undefined; - /** - * GCP permission configurations - */ - gcp?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms = + { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; + }; /** * A permission set that can be applied across different cloud platforms */ -export type PersistImportedDeploymentRequestExtend = { +export type PersistImportedDeploymentRequestPendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -2301,17 +2460,18 @@ export type PersistImportedDeploymentRequestExtend = { /** * Platform-specific permission configurations */ - platforms: PersistImportedDeploymentRequestExtendPlatforms; + platforms: + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type PersistImportedDeploymentRequestExtendUnion = - | PersistImportedDeploymentRequestExtend +export type PersistImportedDeploymentRequestPendingPreparedStackExtendUnion = + | PersistImportedDeploymentRequestPendingPreparedStackExtend | string; -export type PersistImportedDeploymentRequestManagement1 = { +export type PersistImportedDeploymentRequestPendingPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * @@ -2319,108 +2479,120 @@ export type PersistImportedDeploymentRequestManagement1 = { * Key can be "*" for all resources or resource name for specific resource */ extend: { - [k: string]: Array; + [k: string]: Array< + PersistImportedDeploymentRequestPendingPreparedStackExtend | string + >; }; }; /** * Management permissions configuration for stack management access */ -export type PersistImportedDeploymentRequestManagementUnion = - | PersistImportedDeploymentRequestManagement1 - | PersistImportedDeploymentRequestManagement2 - | PersistImportedDeploymentRequestManagementEnum; +export type PersistImportedDeploymentRequestPendingPreparedStackManagementUnion = + | PersistImportedDeploymentRequestPendingPreparedStackManagement1 + | PersistImportedDeploymentRequestPendingPreparedStackManagement2 + | PersistImportedDeploymentRequestPendingPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type PersistImportedDeploymentRequestProfileAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * AWS-specific binding specification */ -export type PersistImportedDeploymentRequestProfileAwStack = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestProfileAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: PersistImportedDeploymentRequestProfileAwResource | undefined; - /** - * AWS-specific binding specification - */ - stack?: PersistImportedDeploymentRequestProfileAwStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding = + { + /** + * AWS-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack + | undefined; + }; /** * IAM effect. Defaults to Allow. */ -export const PersistImportedDeploymentRequestProfileEffect = { - Allow: "Allow", - Deny: "Deny", -} as const; +export const PersistImportedDeploymentRequestPendingPreparedStackProfileEffect = + { + Allow: "Allow", + Deny: "Deny", + } as const; /** * IAM effect. Defaults to Allow. */ -export type PersistImportedDeploymentRequestProfileEffect = ClosedEnum< - typeof PersistImportedDeploymentRequestProfileEffect ->; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileEffect = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackProfileEffect + >; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestProfileAwGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * AWS-specific platform permission configuration */ -export type PersistImportedDeploymentRequestProfileAw = { +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestProfileAwBinding; + binding: PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2428,11 +2600,13 @@ export type PersistImportedDeploymentRequestProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: PersistImportedDeploymentRequestProfileEffect | undefined; + effect?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestProfileAwGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2442,71 +2616,80 @@ export type PersistImportedDeploymentRequestProfileAw = { /** * Azure-specific binding specification */ -export type PersistImportedDeploymentRequestProfileAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type PersistImportedDeploymentRequestProfileAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestProfileAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: PersistImportedDeploymentRequestProfileAzureResource | undefined; - /** - * Azure-specific binding specification - */ - stack?: PersistImportedDeploymentRequestProfileAzureStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestProfileAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * Azure-specific platform permission configuration */ -export type PersistImportedDeploymentRequestProfileAzure = { +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestProfileAzureBinding; + binding: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2514,7 +2697,7 @@ export type PersistImportedDeploymentRequestProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestProfileAzureGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2524,105 +2707,116 @@ export type PersistImportedDeploymentRequestProfileAzure = { /** * GCP IAM condition */ -export type PersistImportedDeploymentRequestProfileConditionResource = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource = + { + expression: string; + title: string; + }; -export type PersistImportedDeploymentRequestProfileResourceConditionUnion = - | PersistImportedDeploymentRequestProfileConditionResource +export type PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion = + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type PersistImportedDeploymentRequestProfileGcpResource = { - condition?: - | PersistImportedDeploymentRequestProfileConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * GCP IAM condition */ -export type PersistImportedDeploymentRequestProfileConditionStack = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack = + { + expression: string; + title: string; + }; -export type PersistImportedDeploymentRequestProfileStackConditionUnion = - | PersistImportedDeploymentRequestProfileConditionStack +export type PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion = + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type PersistImportedDeploymentRequestProfileGcpStack = { - condition?: - | PersistImportedDeploymentRequestProfileConditionStack - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type PersistImportedDeploymentRequestProfileGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: PersistImportedDeploymentRequestProfileGcpResource | undefined; - /** - * GCP-specific binding specification - */ - stack?: PersistImportedDeploymentRequestProfileGcpStack | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding = + { + /** + * GCP-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type PersistImportedDeploymentRequestProfileGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * GCP-specific platform permission configuration */ -export type PersistImportedDeploymentRequestProfileGcp = { +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: PersistImportedDeploymentRequestProfileGcpBinding; + binding: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2630,7 +2824,7 @@ export type PersistImportedDeploymentRequestProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: PersistImportedDeploymentRequestProfileGcpGrant; + grant: PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2640,28 +2834,35 @@ export type PersistImportedDeploymentRequestProfileGcp = { /** * Platform-specific permission configurations */ -export type PersistImportedDeploymentRequestProfilePlatforms = { - /** - * AWS permission configurations - */ - aws?: Array | null | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms = + { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; + }; /** * A permission set that can be applied across different cloud platforms */ -export type PersistImportedDeploymentRequestProfile = { +export type PersistImportedDeploymentRequestPendingPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -2673,27 +2874,28 @@ export type PersistImportedDeploymentRequestProfile = { /** * Platform-specific permission configurations */ - platforms: PersistImportedDeploymentRequestProfilePlatforms; + platforms: + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type PersistImportedDeploymentRequestProfileUnion = - | PersistImportedDeploymentRequestProfile +export type PersistImportedDeploymentRequestPendingPreparedStackProfileUnion = + | PersistImportedDeploymentRequestPendingPreparedStackProfile | string; /** * Combined permissions configuration that contains both profiles and management */ -export type PersistImportedDeploymentRequestPermissions = { +export type PersistImportedDeploymentRequestPendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | PersistImportedDeploymentRequestManagement1 - | PersistImportedDeploymentRequestManagement2 - | PersistImportedDeploymentRequestManagementEnum + | PersistImportedDeploymentRequestPendingPreparedStackManagement1 + | PersistImportedDeploymentRequestPendingPreparedStackManagement2 + | PersistImportedDeploymentRequestPendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -2703,7 +2905,9 @@ export type PersistImportedDeploymentRequestPermissions = { */ profiles: { [k: string]: { - [k: string]: Array; + [k: string]: Array< + PersistImportedDeploymentRequestPendingPreparedStackProfile | string + >; }; }; }; @@ -2711,7 +2915,7 @@ export type PersistImportedDeploymentRequestPermissions = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type PersistImportedDeploymentRequestConfig = { +export type PersistImportedDeploymentRequestPendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -2726,7 +2930,7 @@ export type PersistImportedDeploymentRequestConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type PersistImportedDeploymentRequestDependency = { +export type PersistImportedDeploymentRequestPendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -2737,33 +2941,47 @@ export type PersistImportedDeploymentRequestDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const PersistImportedDeploymentRequestLifecycle = { +export const PersistImportedDeploymentRequestPendingPreparedStackLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type PersistImportedDeploymentRequestLifecycle = ClosedEnum< - typeof PersistImportedDeploymentRequestLifecycle ->; +export type PersistImportedDeploymentRequestPendingPreparedStackLifecycle = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackLifecycle + >; -export type PersistImportedDeploymentRequestResources = { +export type PersistImportedDeploymentRequestPendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: PersistImportedDeploymentRequestConfig; + config: PersistImportedDeploymentRequestPendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array< + PersistImportedDeploymentRequestPendingPreparedStackDependency + >; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: PersistImportedDeploymentRequestLifecycle; + lifecycle: PersistImportedDeploymentRequestPendingPreparedStackLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -2777,26 +2995,28 @@ export type PersistImportedDeploymentRequestResources = { /** * Represents the target cloud platform. */ -export const PersistImportedDeploymentRequestSupportedPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; +export const PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform = + { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", + } as const; /** * Represents the target cloud platform. */ -export type PersistImportedDeploymentRequestSupportedPlatform = ClosedEnum< - typeof PersistImportedDeploymentRequestSupportedPlatform ->; +export type PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform = + ClosedEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform + >; /** * A bag of resources, unaware of any cloud. */ -export type PersistImportedDeploymentRequestPreparedStack = { +export type PersistImportedDeploymentRequestPendingPreparedStack = { /** * Unique identifier for the stack */ @@ -2804,3437 +3024,8332 @@ export type PersistImportedDeploymentRequestPreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: + | Array + | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: PersistImportedDeploymentRequestPermissions | undefined; + permissions?: + | PersistImportedDeploymentRequestPendingPreparedStackPermissions + | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: PersistImportedDeploymentRequestResources }; + resources: { + [k: string]: PersistImportedDeploymentRequestPendingPreparedStackResources; + }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array< + PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform + > | null | undefined; }; -export type PersistImportedDeploymentRequestPreparedStackUnion = - | PersistImportedDeploymentRequestPreparedStack +export type PersistImportedDeploymentRequestPendingPreparedStackUnion = + | PersistImportedDeploymentRequestPendingPreparedStack + | any; + +export const PersistImportedDeploymentRequestPreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type PersistImportedDeploymentRequestPreparedStackTypeStringList = + ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackTypeStringList + >; + +export type PersistImportedDeploymentRequestPreparedStackDefaultStringList = { + type: PersistImportedDeploymentRequestPreparedStackTypeStringList; + /** + * String list default. + */ + value: Array; +}; + +export const PersistImportedDeploymentRequestPreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type PersistImportedDeploymentRequestPreparedStackTypeBoolean = + ClosedEnum; + +export type PersistImportedDeploymentRequestPreparedStackDefaultBoolean = { + type: PersistImportedDeploymentRequestPreparedStackTypeBoolean; + /** + * Boolean default. + */ + value: boolean; +}; + +export const PersistImportedDeploymentRequestPreparedStackTypeNumber = { + Number: "number", +} as const; +export type PersistImportedDeploymentRequestPreparedStackTypeNumber = + ClosedEnum; + +export type PersistImportedDeploymentRequestPreparedStackDefaultNumber = { + type: PersistImportedDeploymentRequestPreparedStackTypeNumber; + /** + * Number default. + */ + value: string; +}; + +export const PersistImportedDeploymentRequestPreparedStackTypeString = { + String: "string", +} as const; +export type PersistImportedDeploymentRequestPreparedStackTypeString = + ClosedEnum; + +export type PersistImportedDeploymentRequestPreparedStackDefaultString = { + type: PersistImportedDeploymentRequestPreparedStackTypeString; + /** + * String default. + */ + value: string; +}; + +export type PersistImportedDeploymentRequestPreparedStackDefaultUnion = + | PersistImportedDeploymentRequestPreparedStackDefaultString + | PersistImportedDeploymentRequestPreparedStackDefaultNumber + | PersistImportedDeploymentRequestPreparedStackDefaultBoolean + | PersistImportedDeploymentRequestPreparedStackDefaultStringList | any; /** - * Runtime metadata for deployment - * - * @remarks - * - * Stores deployment state that needs to persist across step calls. + * Environment variable handling for a stack input mapping. */ -export type PersistImportedDeploymentRequestRuntimeMetadata = { +export const PersistImportedDeploymentRequestPreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", +} as const; +/** + * Environment variable handling for a stack input mapping. + */ +export type PersistImportedDeploymentRequestPreparedStackTypeEnvEnum = + ClosedEnum; + +export type PersistImportedDeploymentRequestPreparedStackTypeUnion = + | PersistImportedDeploymentRequestPreparedStackTypeEnvEnum + | any; + +/** + * How a resolved stack input is injected into runtime environment variables. + */ +export type PersistImportedDeploymentRequestPreparedStackEnv = { /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * Environment variable name. */ - lastSyncedEnvVarsHash?: string | null | undefined; + name: string; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Target resource IDs or patterns. None means every env-capable resource. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: - | PersistImportedDeploymentRequestPreparedStack + targetResources?: Array | null | undefined; + type?: + | PersistImportedDeploymentRequestPreparedStackTypeEnvEnum | any | null | undefined; - /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. - */ - registryAccessGranted?: boolean | undefined; }; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Primitive stack input kind. */ -export const PersistImportedDeploymentRequestStatus = { - Pending: "pending", - PreflightsFailed: "preflights-failed", - InitialSetup: "initial-setup", - InitialSetupFailed: "initial-setup-failed", - Provisioning: "provisioning", - WaitingForMachines: "waiting-for-machines", - ProvisioningFailed: "provisioning-failed", - Running: "running", - RefreshFailed: "refresh-failed", - UpdatePending: "update-pending", - Updating: "updating", - UpdateFailed: "update-failed", - DeletePending: "delete-pending", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - TeardownFailed: "teardown-failed", - Deleted: "deleted", - Error: "error", +export const PersistImportedDeploymentRequestPreparedStackKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", } as const; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Primitive stack input kind. */ -export type PersistImportedDeploymentRequestStatus = ClosedEnum< - typeof PersistImportedDeploymentRequestStatus +export type PersistImportedDeploymentRequestPreparedStackKind = ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackKind >; -export type PersistImportedDeploymentRequestManagementConfigKubernetes = { - platform: "kubernetes"; -}; - /** - * Azure management configuration extracted from stack settings + * Represents the target cloud platform. */ -export type PersistImportedDeploymentRequestManagementConfigAzure = { - /** - * The managing Azure Tenant ID for cross-tenant access - */ - managingTenantId: string; - /** - * OIDC issuer URL trusted by the target-side managed identity. - */ - oidcIssuer: string; - /** - * OIDC subject claim trusted by the target-side managed identity. - */ - oidcSubject: string; - platform: "azure"; -}; - +export const PersistImportedDeploymentRequestPreparedStackPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; /** - * GCP management configuration extracted from stack settings + * Represents the target cloud platform. */ -export type PersistImportedDeploymentRequestManagementConfigGcp = { - /** - * Service account email for management roles - */ - serviceAccountEmail: string; - platform: "gcp"; -}; +export type PersistImportedDeploymentRequestPreparedStackPlatform = ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackPlatform +>; /** - * AWS management configuration extracted from stack settings + * Who can provide a stack input value. */ -export type PersistImportedDeploymentRequestManagementConfigAws = { - /** - * The managing AWS IAM role ARN that can assume cross-account roles - */ - managingRoleArn: string; - platform: "aws"; -}; - +export const PersistImportedDeploymentRequestPreparedStackProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; /** - * Management configuration for different cloud platforms. - * - * @remarks - * - * Platform-derived configuration for cross-account/cross-tenant access. - * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + * Who can provide a stack input value. */ -export type PersistImportedDeploymentRequestManagementConfigUnion = - | PersistImportedDeploymentRequestManagementConfigAws - | PersistImportedDeploymentRequestManagementConfigGcp - | PersistImportedDeploymentRequestManagementConfigAzure - | PersistImportedDeploymentRequestManagementConfigKubernetes; +export type PersistImportedDeploymentRequestPreparedStackProvidedBy = + ClosedEnum; -export type PersistImportedDeploymentRequest = { - mode: ModePersist; +/** + * Portable stack input validation constraints. + */ +export type PersistImportedDeploymentRequestPreparedStackValidation = { /** - * Deployment name. Must be unique within the deployment group. + * Semantic format hint such as url. */ - name: string; + format?: string | null | undefined; /** - * Unique identifier for the deployment group. + * Maximum number. */ - deploymentGroupId: string; - managerId: string; + max?: string | null | undefined; /** - * Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain. + * Maximum string-list items. */ - publicSubdomain?: string | undefined; + maxItems?: number | null | undefined; /** - * Represents the target cloud platform. + * Maximum string length. */ - platform: PersistImportedDeploymentRequestPlatformEnum; + maxLength?: number | null | undefined; /** - * Base cloud platform for cloud-backed Kubernetes imports. + * Minimum number. */ - basePlatform?: KubernetesBasePlatform | undefined; + min?: string | null | undefined; /** - * User-customizable deployment settings specified at deploy time. - * - * @remarks - * - * These settings are provided by the customer via CloudFormation parameters, - * Terraform attributes, CLI flags, or Helm values. They customize how the - * deployment runs and what capabilities are enabled. - * - * **Key distinction**: StackSettings is user-customizable, while ManagementConfig - * is platform-derived (from the Manager's ServiceAccount). + * Minimum string-list items. */ - stackSettings: PersistImportedDeploymentRequestStackSettings; - stackState?: any | null | undefined; + minItems?: number | null | undefined; /** - * Platform-specific environment information + * Minimum string length. */ - environmentInfo?: - | PersistImportedDeploymentRequestEnvironmentInfoGcp - | PersistImportedDeploymentRequestEnvironmentInfoAzure - | PersistImportedDeploymentRequestEnvironmentInfoLocal - | PersistImportedDeploymentRequestEnvironmentInfoAws - | PersistImportedDeploymentRequestEnvironmentInfoTest + minLength?: number | null | undefined; + /** + * Portable whole-value regex pattern. + */ + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; +}; + +export type PersistImportedDeploymentRequestPreparedStackValidationUnion = + | PersistImportedDeploymentRequestPreparedStackValidation + | any; + +/** + * Stack input definition serialized into a release stack. + */ +export type PersistImportedDeploymentRequestPreparedStackInput = { + default?: + | PersistImportedDeploymentRequestPreparedStackDefaultString + | PersistImportedDeploymentRequestPreparedStackDefaultNumber + | PersistImportedDeploymentRequestPreparedStackDefaultBoolean + | PersistImportedDeploymentRequestPreparedStackDefaultStringList | any | null | undefined; /** - * Runtime metadata for deployment - * - * @remarks - * - * Stores deployment state that needs to persist across step calls. + * Human-facing helper text. */ - runtimeMetadata: PersistImportedDeploymentRequestRuntimeMetadata; + description: string; /** - * DeploymentState protocol version owned by the runtime/manager + * Runtime env-var mappings for v1 input resolution. */ - deploymentProtocolVersion: number; + env?: Array | undefined; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Stable input ID used by CLI/API calls. */ - status?: PersistImportedDeploymentRequestStatus | undefined; + id: string; /** - * Unique identifier for the release. + * Primitive stack input kind. */ - currentReleaseId?: string | undefined; + kind: PersistImportedDeploymentRequestPreparedStackKind; /** - * Unique identifier for the release. + * Human-facing field label. */ - desiredReleaseId?: string | undefined; - importSource?: ImportSourceKind | undefined; - setupMetadata?: { [k: string]: any | null } | undefined; + label: string; /** - * Stable target key for the setup contract, e.g. aws/us-east-1 + * Example placeholder shown in UI. */ - setupTarget: string; + placeholder?: string | null | undefined; /** - * Deterministic setup contract fingerprint for one setup target + * Platforms where this input applies. */ - setupFingerprint: string; + platforms?: + | Array + | null + | undefined; /** - * Setup fingerprint algorithm version + * Who can provide this value. */ - setupFingerprintVersion: number; - deploymentToken?: string | undefined; + providedBy: Array; /** - * Management configuration for different cloud platforms. - * - * @remarks - * - * Platform-derived configuration for cross-account/cross-tenant access. - * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + * Whether a resolved value is required before deployment can proceed. */ - managementConfig?: - | PersistImportedDeploymentRequestManagementConfigAws - | PersistImportedDeploymentRequestManagementConfigGcp - | PersistImportedDeploymentRequestManagementConfigAzure - | PersistImportedDeploymentRequestManagementConfigKubernetes + required: boolean; + validation?: + | PersistImportedDeploymentRequestPreparedStackValidation + | any + | null | undefined; - inputValues?: { [k: string]: StackInputValueRequest } | undefined; }; -/** @internal */ -export const ModePersist$outboundSchema: z.ZodEnum = z.enum( - ModePersist, -); +export const PersistImportedDeploymentRequestPreparedStackManagementEnum = { + Auto: "auto", +} as const; +export type PersistImportedDeploymentRequestPreparedStackManagementEnum = + ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackManagementEnum + >; -/** @internal */ -export const PersistImportedDeploymentRequestPlatformEnum$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestPlatformEnum, - ); +/** + * AWS-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackOverrideAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackOverrideAwStack + | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const PersistImportedDeploymentRequestPreparedStackOverrideEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideEffect = + ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackOverrideEffect + >; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAw = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackOverrideAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: + | PersistImportedDeploymentRequestPreparedStackOverrideEffect + | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackOverrideAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; + +/** + * Azure-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackOverrideAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackOverrideAzureStack + | undefined; + }; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideAzure = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideConditionResource = + { + expression: string; + title: string; + }; + +export type PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion = + | PersistImportedDeploymentRequestPreparedStackOverrideConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpResource = { + condition?: + | PersistImportedDeploymentRequestPreparedStackOverrideConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideConditionStack = + { + expression: string; + title: string; + }; + +export type PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion = + | PersistImportedDeploymentRequestPreparedStackOverrideConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpStack = { + condition?: + | PersistImportedDeploymentRequestPreparedStackOverrideConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackOverrideGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackOverrideGcpStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideGcp = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type PersistImportedDeploymentRequestPreparedStackOverridePlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type PersistImportedDeploymentRequestPreparedStackOverride = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: PersistImportedDeploymentRequestPreparedStackOverridePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type PersistImportedDeploymentRequestPreparedStackOverrideUnion = + | PersistImportedDeploymentRequestPreparedStackOverride + | string; + +export type PersistImportedDeploymentRequestPreparedStackManagement2 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + override: { + [k: string]: Array< + PersistImportedDeploymentRequestPreparedStackOverride | string + >; + }; +}; + +/** + * AWS-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackExtendAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackExtendAwStack + | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const PersistImportedDeploymentRequestPreparedStackExtendEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type PersistImportedDeploymentRequestPreparedStackExtendEffect = + ClosedEnum; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAw = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackExtendAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: + | PersistImportedDeploymentRequestPreparedStackExtendEffect + | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackExtendAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackExtendAzureStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackExtendAzure = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type PersistImportedDeploymentRequestPreparedStackExtendConditionResource = + { + expression: string; + title: string; + }; + +export type PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion = + | PersistImportedDeploymentRequestPreparedStackExtendConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackExtendGcpResource = { + condition?: + | PersistImportedDeploymentRequestPreparedStackExtendConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type PersistImportedDeploymentRequestPreparedStackExtendConditionStack = + { + expression: string; + title: string; + }; + +export type PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion = + | PersistImportedDeploymentRequestPreparedStackExtendConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackExtendGcpStack = { + condition?: + | PersistImportedDeploymentRequestPreparedStackExtendConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackExtendGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackExtendGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackExtendGcpStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackExtendGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackExtendGcp = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type PersistImportedDeploymentRequestPreparedStackExtendPlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type PersistImportedDeploymentRequestPreparedStackExtend = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: PersistImportedDeploymentRequestPreparedStackExtendPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type PersistImportedDeploymentRequestPreparedStackExtendUnion = + | PersistImportedDeploymentRequestPreparedStackExtend + | string; + +export type PersistImportedDeploymentRequestPreparedStackManagement1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { + [k: string]: Array< + PersistImportedDeploymentRequestPreparedStackExtend | string + >; + }; +}; + +/** + * Management permissions configuration for stack management access + */ +export type PersistImportedDeploymentRequestPreparedStackManagementUnion = + | PersistImportedDeploymentRequestPreparedStackManagement1 + | PersistImportedDeploymentRequestPreparedStackManagement2 + | PersistImportedDeploymentRequestPreparedStackManagementEnum; + +/** + * AWS-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackProfileAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackProfileAwStack + | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const PersistImportedDeploymentRequestPreparedStackProfileEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type PersistImportedDeploymentRequestPreparedStackProfileEffect = + ClosedEnum; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAw = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: + | PersistImportedDeploymentRequestPreparedStackProfileEffect + | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; + +/** + * Azure-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackProfileAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackProfileAzureStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type PersistImportedDeploymentRequestPreparedStackProfileConditionResource = + { + expression: string; + title: string; + }; + +export type PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion = + | PersistImportedDeploymentRequestPreparedStackProfileConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackProfileGcpResource = { + condition?: + | PersistImportedDeploymentRequestPreparedStackProfileConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type PersistImportedDeploymentRequestPreparedStackProfileConditionStack = + { + expression: string; + title: string; + }; + +export type PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion = + | PersistImportedDeploymentRequestPreparedStackProfileConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type PersistImportedDeploymentRequestPreparedStackProfileGcpStack = { + condition?: + | PersistImportedDeploymentRequestPreparedStackProfileConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type PersistImportedDeploymentRequestPreparedStackProfileGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: + | PersistImportedDeploymentRequestPreparedStackProfileGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | PersistImportedDeploymentRequestPreparedStackProfileGcpStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type PersistImportedDeploymentRequestPreparedStackProfileGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type PersistImportedDeploymentRequestPreparedStackProfileGcp = { + /** + * Generic binding configuration for permissions + */ + binding: PersistImportedDeploymentRequestPreparedStackProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: PersistImportedDeploymentRequestPreparedStackProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type PersistImportedDeploymentRequestPreparedStackProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type PersistImportedDeploymentRequestPreparedStackProfile = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: PersistImportedDeploymentRequestPreparedStackProfilePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type PersistImportedDeploymentRequestPreparedStackProfileUnion = + | PersistImportedDeploymentRequestPreparedStackProfile + | string; + +/** + * Combined permissions configuration that contains both profiles and management + */ +export type PersistImportedDeploymentRequestPreparedStackPermissions = { + /** + * Management permissions configuration for stack management access + */ + management?: + | PersistImportedDeploymentRequestPreparedStackManagement1 + | PersistImportedDeploymentRequestPreparedStackManagement2 + | PersistImportedDeploymentRequestPreparedStackManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { + [k: string]: Array< + PersistImportedDeploymentRequestPreparedStackProfile | string + >; + }; + }; +}; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type PersistImportedDeploymentRequestPreparedStackConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +/** + * Reference to a resource by its stable id and resource type. + */ +export type PersistImportedDeploymentRequestPreparedStackDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; + +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const PersistImportedDeploymentRequestPreparedStackLifecycle = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type PersistImportedDeploymentRequestPreparedStackLifecycle = ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackLifecycle +>; + +export type PersistImportedDeploymentRequestPreparedStackResources = { + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: PersistImportedDeploymentRequestPreparedStackConfig; + /** + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list + */ + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: PersistImportedDeploymentRequestPreparedStackLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; +}; + +/** + * Represents the target cloud platform. + */ +export const PersistImportedDeploymentRequestPreparedStackSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type PersistImportedDeploymentRequestPreparedStackSupportedPlatform = + ClosedEnum< + typeof PersistImportedDeploymentRequestPreparedStackSupportedPlatform + >; + +/** + * A bag of resources, unaware of any cloud. + */ +export type PersistImportedDeploymentRequestPreparedStack = { + /** + * Unique identifier for the stack + */ + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: + | Array + | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: + | PersistImportedDeploymentRequestPreparedStackPermissions + | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { + [k: string]: PersistImportedDeploymentRequestPreparedStackResources; + }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; +}; + +export type PersistImportedDeploymentRequestPreparedStackUnion = + | PersistImportedDeploymentRequestPreparedStack + | any; + +/** + * One-shot authority for a setup re-import to replace setup-owned resources. + */ +export type PersistImportedDeploymentRequestSetupUpdateAuthorization = { + /** + * Frozen resource projection from the last successful deployment. + */ + baselineFrozenDigest: string; + /** + * Unique revision used by persistence layers for compare-and-swap updates. + */ + nonce: string; + /** + * Release whose stack was prepared by setup. + */ + releaseId: string; + /** + * Exact setup artifact revision that authored this authority. + */ + setupFingerprint: string; + /** + * Setup fingerprint contract version. + */ + setupFingerprintVersion: number; + /** + * Stable setup target recorded on the imported deployment. + */ + setupTarget: string; + /** + * Frozen resource projection prepared by the setup re-import. + */ + targetFrozenDigest: string; +}; + +export type PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion = + | PersistImportedDeploymentRequestSetupUpdateAuthorization + | any; + +/** + * Runtime metadata for deployment + * + * @remarks + * + * Stores deployment state that needs to persist across step calls. + */ +export type PersistImportedDeploymentRequestRuntimeMetadata = { + /** + * Hash of the environment variables snapshot that was last synced to the vault + * + * @remarks + * Used to avoid redundant sync operations during incremental deployment + */ + lastSyncedEnvVarsHash?: string | null | undefined; + /** + * Exact vault keys owned by the deployment secret synchronizer. This + * + * @remarks + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. + */ + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | PersistImportedDeploymentRequestPendingPreparedStack + | any + | null + | undefined; + preparedStack?: + | PersistImportedDeploymentRequestPreparedStack + | any + | null + | undefined; + /** + * Whether cross-account registry access has been successfully granted. + * + * @remarks + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. + */ + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | PersistImportedDeploymentRequestSetupUpdateAuthorization + | any + | null + | undefined; +}; + +/** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ +export const PersistImportedDeploymentRequestStatus = { + Pending: "pending", + PreflightsFailed: "preflights-failed", + InitialSetup: "initial-setup", + InitialSetupFailed: "initial-setup-failed", + Provisioning: "provisioning", + WaitingForMachines: "waiting-for-machines", + ProvisioningFailed: "provisioning-failed", + Running: "running", + RefreshFailed: "refresh-failed", + UpdatePending: "update-pending", + Updating: "updating", + UpdateFailed: "update-failed", + DeletePending: "delete-pending", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + TeardownFailed: "teardown-failed", + Deleted: "deleted", + Error: "error", +} as const; +/** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ +export type PersistImportedDeploymentRequestStatus = ClosedEnum< + typeof PersistImportedDeploymentRequestStatus +>; + +export type PersistImportedDeploymentRequestManagementConfigKubernetes = { + platform: "kubernetes"; +}; + +/** + * Azure management configuration extracted from stack settings + */ +export type PersistImportedDeploymentRequestManagementConfigAzure = { + /** + * The managing Azure Tenant ID for cross-tenant access + */ + managingTenantId: string; + /** + * OIDC issuer URL trusted by the target-side managed identity. + */ + oidcIssuer: string; + /** + * OIDC subject claim trusted by the target-side managed identity. + */ + oidcSubject: string; + platform: "azure"; +}; + +/** + * GCP management configuration extracted from stack settings + */ +export type PersistImportedDeploymentRequestManagementConfigGcp = { + /** + * Service account email for management roles + */ + serviceAccountEmail: string; + platform: "gcp"; +}; + +/** + * AWS management configuration extracted from stack settings + */ +export type PersistImportedDeploymentRequestManagementConfigAws = { + /** + * The managing AWS IAM role ARN that can assume cross-account roles + */ + managingRoleArn: string; + platform: "aws"; +}; + +/** + * Management configuration for different cloud platforms. + * + * @remarks + * + * Platform-derived configuration for cross-account/cross-tenant access. + * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + */ +export type PersistImportedDeploymentRequestManagementConfigUnion = + | PersistImportedDeploymentRequestManagementConfigAws + | PersistImportedDeploymentRequestManagementConfigGcp + | PersistImportedDeploymentRequestManagementConfigAzure + | PersistImportedDeploymentRequestManagementConfigKubernetes; + +export type PersistImportedDeploymentRequest = { + mode: ModePersist; + /** + * Deployment name. Must be unique within the deployment group. + */ + name: string; + /** + * Unique identifier for the deployment group. + */ + deploymentGroupId: string; + managerId: string; + /** + * Optional deployment subdomain under the project's generated-domain parent. Operator-only and requires a custom project domain; customer deploy-link tokens and the shared system domain are rejected. Omit to generate a random subdomain. + */ + publicSubdomain?: string | undefined; + /** + * Represents the target cloud platform. + */ + platform: PersistImportedDeploymentRequestPlatformEnum; + /** + * Base cloud platform for cloud-backed Kubernetes imports. + */ + basePlatform?: KubernetesBasePlatform | undefined; + /** + * User-customizable deployment settings specified at deploy time. + * + * @remarks + * + * These settings are provided by the customer via CloudFormation parameters, + * Terraform attributes, CLI flags, or Helm values. They customize how the + * deployment runs and what capabilities are enabled. + * + * **Key distinction**: StackSettings is user-customizable, while ManagementConfig + * is platform-derived (from the Manager's ServiceAccount). + */ + stackSettings: PersistImportedDeploymentRequestStackSettings; + stackState?: any | null | undefined; + /** + * Platform-specific environment information + */ + environmentInfo?: + | PersistImportedDeploymentRequestEnvironmentInfoGcp + | PersistImportedDeploymentRequestEnvironmentInfoAzure + | PersistImportedDeploymentRequestEnvironmentInfoLocal + | PersistImportedDeploymentRequestEnvironmentInfoAws + | PersistImportedDeploymentRequestEnvironmentInfoTest + | any + | null + | undefined; + /** + * Runtime metadata for deployment + * + * @remarks + * + * Stores deployment state that needs to persist across step calls. + */ + runtimeMetadata: PersistImportedDeploymentRequestRuntimeMetadata; + scheduleReconciliation?: boolean | undefined; + /** + * DeploymentState protocol version owned by the runtime/manager + */ + deploymentProtocolVersion: number; + /** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ + status?: PersistImportedDeploymentRequestStatus | undefined; + /** + * Unique identifier for the release. + */ + currentReleaseId?: string | undefined; + /** + * Unique identifier for the release. + */ + desiredReleaseId?: string | undefined; + importSource?: ImportSourceKind | undefined; + setupMetadata?: { [k: string]: any | null } | undefined; + /** + * Stable target key for the setup contract, e.g. aws/us-east-1 + */ + setupTarget: string; + /** + * Deterministic setup contract fingerprint for one setup target + */ + setupFingerprint: string; + /** + * Setup fingerprint algorithm version + */ + setupFingerprintVersion: number; + deploymentToken?: string | undefined; + /** + * Management configuration for different cloud platforms. + * + * @remarks + * + * Platform-derived configuration for cross-account/cross-tenant access. + * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + */ + managementConfig?: + | PersistImportedDeploymentRequestManagementConfigAws + | PersistImportedDeploymentRequestManagementConfigGcp + | PersistImportedDeploymentRequestManagementConfigAzure + | PersistImportedDeploymentRequestManagementConfigKubernetes + | undefined; + inputValues?: { [k: string]: StackInputValueRequest } | undefined; +}; + +/** @internal */ +export const ModePersist$outboundSchema: z.ZodEnum = z.enum( + ModePersist, +); + +/** @internal */ +export const PersistImportedDeploymentRequestPlatformEnum$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestPlatformEnum, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestFailureDomains2$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestFailureDomains2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestFailureDomains2$Outbound, + PersistImportedDeploymentRequestFailureDomains2 + > = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function persistImportedDeploymentRequestFailureDomains2ToJSON( + persistImportedDeploymentRequestFailureDomains2: + PersistImportedDeploymentRequestFailureDomains2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestFailureDomains2$outboundSchema.parse( + persistImportedDeploymentRequestFailureDomains2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestFailureDomainsUnion2$Outbound = + | PersistImportedDeploymentRequestFailureDomains2$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestFailureDomainsUnion2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestFailureDomainsUnion2$Outbound, + PersistImportedDeploymentRequestFailureDomainsUnion2 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestFailureDomains2$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestFailureDomainsUnion2ToJSON( + persistImportedDeploymentRequestFailureDomainsUnion2: + PersistImportedDeploymentRequestFailureDomainsUnion2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestFailureDomainsUnion2$outboundSchema.parse( + persistImportedDeploymentRequestFailureDomainsUnion2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPoolsAutoscale$Outbound = { + failure_domains?: + | PersistImportedDeploymentRequestFailureDomains2$Outbound + | any + | null + | undefined; + machine?: string | null | undefined; + max: number; + min: number; + mode: "autoscale"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPoolsAutoscale$Outbound, + PersistImportedDeploymentRequestPoolsAutoscale + > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestFailureDomains2$outboundSchema + ), + z.any(), + ]), + ).optional(), + machine: z.nullable(z.string()).optional(), + max: z.int(), + min: z.int(), + mode: z.literal("autoscale"), + }).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); + }); + +export function persistImportedDeploymentRequestPoolsAutoscaleToJSON( + persistImportedDeploymentRequestPoolsAutoscale: + PersistImportedDeploymentRequestPoolsAutoscale, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema.parse( + persistImportedDeploymentRequestPoolsAutoscale, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestFailureDomains1$Outbound = { + selectedFailureDomains?: Array | undefined; + spread: number; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestFailureDomains1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestFailureDomains1$Outbound, + PersistImportedDeploymentRequestFailureDomains1 + > = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function persistImportedDeploymentRequestFailureDomains1ToJSON( + persistImportedDeploymentRequestFailureDomains1: + PersistImportedDeploymentRequestFailureDomains1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestFailureDomains1$outboundSchema.parse( + persistImportedDeploymentRequestFailureDomains1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestFailureDomainsUnion1$Outbound = + | PersistImportedDeploymentRequestFailureDomains1$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestFailureDomainsUnion1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestFailureDomainsUnion1$Outbound, + PersistImportedDeploymentRequestFailureDomainsUnion1 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestFailureDomains1$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestFailureDomainsUnion1ToJSON( + persistImportedDeploymentRequestFailureDomainsUnion1: + PersistImportedDeploymentRequestFailureDomainsUnion1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestFailureDomainsUnion1$outboundSchema.parse( + persistImportedDeploymentRequestFailureDomainsUnion1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPoolsFixed$Outbound = { + failure_domains?: + | PersistImportedDeploymentRequestFailureDomains1$Outbound + | any + | null + | undefined; + machine?: string | null | undefined; + machines: number; + mode: "fixed"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestPoolsFixed$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPoolsFixed$Outbound, + PersistImportedDeploymentRequestPoolsFixed + > = z.object({ + failureDomains: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestFailureDomains1$outboundSchema + ), + z.any(), + ]), + ).optional(), + machine: z.nullable(z.string()).optional(), + machines: z.int(), + mode: z.literal("fixed"), + }).transform((v) => { + return remap$(v, { + failureDomains: "failure_domains", + }); + }); + +export function persistImportedDeploymentRequestPoolsFixedToJSON( + persistImportedDeploymentRequestPoolsFixed: + PersistImportedDeploymentRequestPoolsFixed, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPoolsFixed$outboundSchema.parse( + persistImportedDeploymentRequestPoolsFixed, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPoolsUnion$Outbound = + | PersistImportedDeploymentRequestPoolsFixed$Outbound + | PersistImportedDeploymentRequestPoolsAutoscale$Outbound; + +/** @internal */ +export const PersistImportedDeploymentRequestPoolsUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPoolsUnion$Outbound, + PersistImportedDeploymentRequestPoolsUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestPoolsFixed$outboundSchema), + z.lazy(() => PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema), + ]); + +export function persistImportedDeploymentRequestPoolsUnionToJSON( + persistImportedDeploymentRequestPoolsUnion: + PersistImportedDeploymentRequestPoolsUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPoolsUnion$outboundSchema.parse( + persistImportedDeploymentRequestPoolsUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCompute$Outbound = { + pools?: { + [k: string]: + | PersistImportedDeploymentRequestPoolsFixed$Outbound + | PersistImportedDeploymentRequestPoolsAutoscale$Outbound; + } | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCompute$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestCompute$Outbound, + PersistImportedDeploymentRequestCompute +> = z.object({ + pools: z.record( + z.string(), + z.union([ + z.lazy(() => PersistImportedDeploymentRequestPoolsFixed$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema + ), + ]), + ).optional(), +}); + +export function persistImportedDeploymentRequestComputeToJSON( + persistImportedDeploymentRequestCompute: + PersistImportedDeploymentRequestCompute, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCompute$outboundSchema.parse( + persistImportedDeploymentRequestCompute, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestComputeUnion$Outbound = + | PersistImportedDeploymentRequestCompute$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestComputeUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestComputeUnion$Outbound, + PersistImportedDeploymentRequestComputeUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestCompute$outboundSchema), + z.any(), + ]); + +export function persistImportedDeploymentRequestComputeUnionToJSON( + persistImportedDeploymentRequestComputeUnion: + PersistImportedDeploymentRequestComputeUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestComputeUnion$outboundSchema.parse( + persistImportedDeploymentRequestComputeUnion, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestDeploymentModel$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestDeploymentModel, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestAws$Outbound = { + certificateArn: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestAws$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestAws$Outbound, + PersistImportedDeploymentRequestAws +> = z.object({ + certificateArn: z.string(), +}); + +export function persistImportedDeploymentRequestAwsToJSON( + persistImportedDeploymentRequestAws: PersistImportedDeploymentRequestAws, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestAws$outboundSchema.parse( + persistImportedDeploymentRequestAws, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestAwsUnion$Outbound = + | PersistImportedDeploymentRequestAws$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestAwsUnion$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestAwsUnion$Outbound, + PersistImportedDeploymentRequestAwsUnion +> = z.union([ + z.lazy(() => PersistImportedDeploymentRequestAws$outboundSchema), + z.any(), +]); + +export function persistImportedDeploymentRequestAwsUnionToJSON( + persistImportedDeploymentRequestAwsUnion: + PersistImportedDeploymentRequestAwsUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestAwsUnion$outboundSchema.parse( + persistImportedDeploymentRequestAwsUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestAzureStackSettings$Outbound = { + keyVaultCertificateId: string; + keyVaultResourceId?: string | null | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestAzureStackSettings$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestAzureStackSettings$Outbound, + PersistImportedDeploymentRequestAzureStackSettings + > = z.object({ + keyVaultCertificateId: z.string(), + keyVaultResourceId: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestAzureStackSettingsToJSON( + persistImportedDeploymentRequestAzureStackSettings: + PersistImportedDeploymentRequestAzureStackSettings, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestAzureStackSettings$outboundSchema.parse( + persistImportedDeploymentRequestAzureStackSettings, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestAzureUnion$Outbound = + | PersistImportedDeploymentRequestAzureStackSettings$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestAzureUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestAzureUnion$Outbound, + PersistImportedDeploymentRequestAzureUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestAzureStackSettings$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestAzureUnionToJSON( + persistImportedDeploymentRequestAzureUnion: + PersistImportedDeploymentRequestAzureUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestAzureUnion$outboundSchema.parse( + persistImportedDeploymentRequestAzureUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestGcpStackSettings$Outbound = { + certificateName: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestGcpStackSettings$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestGcpStackSettings$Outbound, + PersistImportedDeploymentRequestGcpStackSettings + > = z.object({ + certificateName: z.string(), + }); + +export function persistImportedDeploymentRequestGcpStackSettingsToJSON( + persistImportedDeploymentRequestGcpStackSettings: + PersistImportedDeploymentRequestGcpStackSettings, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestGcpStackSettings$outboundSchema.parse( + persistImportedDeploymentRequestGcpStackSettings, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestGcpUnion$Outbound = + | PersistImportedDeploymentRequestGcpStackSettings$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestGcpUnion$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestGcpUnion$Outbound, + PersistImportedDeploymentRequestGcpUnion +> = z.union([ + z.lazy(() => PersistImportedDeploymentRequestGcpStackSettings$outboundSchema), + z.any(), +]); + +export function persistImportedDeploymentRequestGcpUnionToJSON( + persistImportedDeploymentRequestGcpUnion: + PersistImportedDeploymentRequestGcpUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestGcpUnion$outboundSchema.parse( + persistImportedDeploymentRequestGcpUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestTlsSecretRef$Outbound = { + namespace?: string | null | undefined; + secretName: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestTlsSecretRef$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestTlsSecretRef$Outbound, + PersistImportedDeploymentRequestTlsSecretRef + > = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + }); + +export function persistImportedDeploymentRequestTlsSecretRefToJSON( + persistImportedDeploymentRequestTlsSecretRef: + PersistImportedDeploymentRequestTlsSecretRef, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestTlsSecretRef$outboundSchema.parse( + persistImportedDeploymentRequestTlsSecretRef, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestDomainsKubernetes$Outbound = { + tlsSecretRef: PersistImportedDeploymentRequestTlsSecretRef$Outbound; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestDomainsKubernetes$Outbound, + PersistImportedDeploymentRequestDomainsKubernetes + > = z.object({ + tlsSecretRef: z.lazy(() => + PersistImportedDeploymentRequestTlsSecretRef$outboundSchema + ), + }); + +export function persistImportedDeploymentRequestDomainsKubernetesToJSON( + persistImportedDeploymentRequestDomainsKubernetes: + PersistImportedDeploymentRequestDomainsKubernetes, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema.parse( + persistImportedDeploymentRequestDomainsKubernetes, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestDomainsKubernetesUnion$Outbound = + | PersistImportedDeploymentRequestDomainsKubernetes$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestDomainsKubernetesUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestDomainsKubernetesUnion$Outbound, + PersistImportedDeploymentRequestDomainsKubernetesUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestDomainsKubernetesUnionToJSON( + persistImportedDeploymentRequestDomainsKubernetesUnion: + PersistImportedDeploymentRequestDomainsKubernetesUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestDomainsKubernetesUnion$outboundSchema.parse( + persistImportedDeploymentRequestDomainsKubernetesUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestDomainsCertificate$Outbound = { + aws?: PersistImportedDeploymentRequestAws$Outbound | any | null | undefined; + azure?: + | PersistImportedDeploymentRequestAzureStackSettings$Outbound + | any + | null + | undefined; + gcp?: + | PersistImportedDeploymentRequestGcpStackSettings$Outbound + | any + | null + | undefined; + kubernetes?: + | PersistImportedDeploymentRequestDomainsKubernetes$Outbound + | any + | null + | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestDomainsCertificate$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestDomainsCertificate$Outbound, + PersistImportedDeploymentRequestDomainsCertificate + > = z.object({ + aws: z.nullable( + z.union([ + z.lazy(() => PersistImportedDeploymentRequestAws$outboundSchema), + z.any(), + ]), + ).optional(), + azure: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestAzureStackSettings$outboundSchema + ), + z.any(), + ]), + ).optional(), + gcp: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestGcpStackSettings$outboundSchema + ), + z.any(), + ]), + ).optional(), + kubernetes: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema + ), + z.any(), + ]), + ).optional(), + }); + +export function persistImportedDeploymentRequestDomainsCertificateToJSON( + persistImportedDeploymentRequestDomainsCertificate: + PersistImportedDeploymentRequestDomainsCertificate, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestDomainsCertificate$outboundSchema.parse( + persistImportedDeploymentRequestDomainsCertificate, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCustomDomains$Outbound = { + certificate: PersistImportedDeploymentRequestDomainsCertificate$Outbound; + domain: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCustomDomains$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCustomDomains$Outbound, + PersistImportedDeploymentRequestCustomDomains + > = z.object({ + certificate: z.lazy(() => + PersistImportedDeploymentRequestDomainsCertificate$outboundSchema + ), + domain: z.string(), + }); + +export function persistImportedDeploymentRequestCustomDomainsToJSON( + persistImportedDeploymentRequestCustomDomains: + PersistImportedDeploymentRequestCustomDomains, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCustomDomains$outboundSchema.parse( + persistImportedDeploymentRequestCustomDomains, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestModeLoadBalancer$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestModeLoadBalancer, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound = + { + cnameTarget: string; + mode: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound, + PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer + > = z.object({ + cnameTarget: z.string(), + mode: PersistImportedDeploymentRequestModeLoadBalancer$outboundSchema, + }); + +export function persistImportedDeploymentRequestPublicEndpointTargetLoadBalancerToJSON( + persistImportedDeploymentRequestPublicEndpointTargetLoadBalancer: + PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema + .parse(persistImportedDeploymentRequestPublicEndpointTargetLoadBalancer), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestModeMachineAddresses$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestModeMachineAddresses); + +/** @internal */ +export type PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound = + { + mode: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound, + PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses + > = z.object({ + mode: PersistImportedDeploymentRequestModeMachineAddresses$outboundSchema, + }); + +export function persistImportedDeploymentRequestPublicEndpointTargetMachineAddressesToJSON( + persistImportedDeploymentRequestPublicEndpointTargetMachineAddresses: + PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema + .parse( + persistImportedDeploymentRequestPublicEndpointTargetMachineAddresses, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPublicEndpointTargetUnion$Outbound = + | PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound + | PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestPublicEndpointTargetUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPublicEndpointTargetUnion$Outbound, + PersistImportedDeploymentRequestPublicEndpointTargetUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestPublicEndpointTargetUnionToJSON( + persistImportedDeploymentRequestPublicEndpointTargetUnion: + PersistImportedDeploymentRequestPublicEndpointTargetUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPublicEndpointTargetUnion$outboundSchema + .parse(persistImportedDeploymentRequestPublicEndpointTargetUnion), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestDomains$Outbound = { + customDomains?: + | { [k: string]: PersistImportedDeploymentRequestCustomDomains$Outbound } + | null + | undefined; + publicEndpointTarget?: + | PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound + | PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound + | any + | null + | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestDomains$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestDomains$Outbound, + PersistImportedDeploymentRequestDomains +> = z.object({ + customDomains: z.nullable( + z.record( + z.string(), + z.lazy(() => + PersistImportedDeploymentRequestCustomDomains$outboundSchema + ), + ), + ).optional(), + publicEndpointTarget: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema + ), + z.any(), + ]), + ).optional(), +}); + +export function persistImportedDeploymentRequestDomainsToJSON( + persistImportedDeploymentRequestDomains: + PersistImportedDeploymentRequestDomains, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestDomains$outboundSchema.parse( + persistImportedDeploymentRequestDomains, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestDomainsUnion$Outbound = + | PersistImportedDeploymentRequestDomains$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestDomainsUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestDomainsUnion$Outbound, + PersistImportedDeploymentRequestDomainsUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestDomains$outboundSchema), + z.any(), + ]); + +export function persistImportedDeploymentRequestDomainsUnionToJSON( + persistImportedDeploymentRequestDomainsUnion: + PersistImportedDeploymentRequestDomainsUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestDomainsUnion$outboundSchema.parse( + persistImportedDeploymentRequestDomainsUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestExternalBindings$Outbound = {}; + +/** @internal */ +export const PersistImportedDeploymentRequestExternalBindings$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestExternalBindings$Outbound, + PersistImportedDeploymentRequestExternalBindings + > = z.object({}); + +export function persistImportedDeploymentRequestExternalBindingsToJSON( + persistImportedDeploymentRequestExternalBindings: + PersistImportedDeploymentRequestExternalBindings, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestExternalBindings$outboundSchema.parse( + persistImportedDeploymentRequestExternalBindings, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestHeartbeats$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestHeartbeats, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestCloud$Outbound = { + accountId?: string | null | undefined; + clusterId?: string | null | undefined; + clusterName?: string | null | undefined; + projectId?: string | null | undefined; + region?: string | null | undefined; + resourceGroup?: string | null | undefined; + subscriptionId?: string | null | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCloud$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestCloud$Outbound, + PersistImportedDeploymentRequestCloud +> = z.object({ + accountId: z.nullable(z.string()).optional(), + clusterId: z.nullable(z.string()).optional(), + clusterName: z.nullable(z.string()).optional(), + projectId: z.nullable(z.string()).optional(), + region: z.nullable(z.string()).optional(), + resourceGroup: z.nullable(z.string()).optional(), + subscriptionId: z.nullable(z.string()).optional(), +}); + +export function persistImportedDeploymentRequestCloudToJSON( + persistImportedDeploymentRequestCloud: PersistImportedDeploymentRequestCloud, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCloud$outboundSchema.parse( + persistImportedDeploymentRequestCloud, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCloudUnion$Outbound = + | PersistImportedDeploymentRequestCloud$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestCloudUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCloudUnion$Outbound, + PersistImportedDeploymentRequestCloudUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestCloud$outboundSchema), + z.any(), + ]); + +export function persistImportedDeploymentRequestCloudUnionToJSON( + persistImportedDeploymentRequestCloudUnion: + PersistImportedDeploymentRequestCloudUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCloudUnion$outboundSchema.parse( + persistImportedDeploymentRequestCloudUnion, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestOwnership$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestOwnership, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestCluster$Outbound = { + cloud?: + | PersistImportedDeploymentRequestCloud$Outbound + | any + | null + | undefined; + namespace?: string | null | undefined; + ownership: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCluster$outboundSchema: z.ZodType< + PersistImportedDeploymentRequestCluster$Outbound, + PersistImportedDeploymentRequestCluster +> = z.object({ + cloud: z.nullable( + z.union([ + z.lazy(() => PersistImportedDeploymentRequestCloud$outboundSchema), + z.any(), + ]), + ).optional(), + namespace: z.nullable(z.string()).optional(), + ownership: PersistImportedDeploymentRequestOwnership$outboundSchema, +}); + +export function persistImportedDeploymentRequestClusterToJSON( + persistImportedDeploymentRequestCluster: + PersistImportedDeploymentRequestCluster, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCluster$outboundSchema.parse( + persistImportedDeploymentRequestCluster, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestClusterUnion$Outbound = + | PersistImportedDeploymentRequestCluster$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestClusterUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestClusterUnion$Outbound, + PersistImportedDeploymentRequestClusterUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestCluster$outboundSchema), + z.any(), + ]); + +export function persistImportedDeploymentRequestClusterUnionToJSON( + persistImportedDeploymentRequestClusterUnion: + PersistImportedDeploymentRequestClusterUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestClusterUnion$outboundSchema.parse( + persistImportedDeploymentRequestClusterUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateNone2$Outbound = { + mode: "none"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateNone2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateNone2$Outbound, + PersistImportedDeploymentRequestCertificateNone2 + > = z.object({ + mode: z.literal("none"), + }); + +export function persistImportedDeploymentRequestCertificateNone2ToJSON( + persistImportedDeploymentRequestCertificateNone2: + PersistImportedDeploymentRequestCertificateNone2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateNone2$outboundSchema.parse( + persistImportedDeploymentRequestCertificateNone2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound = + { + mode: "managedTlsSecret"; + secretNameTemplate: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound, + PersistImportedDeploymentRequestCertificateManagedTLSSecret2 + > = z.object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), + }); + +export function persistImportedDeploymentRequestCertificateManagedTLSSecret2ToJSON( + persistImportedDeploymentRequestCertificateManagedTLSSecret2: + PersistImportedDeploymentRequestCertificateManagedTLSSecret2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema + .parse(persistImportedDeploymentRequestCertificateManagedTLSSecret2), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound = { + certificateArn: string; + mode: "awsAcmArn"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound, + PersistImportedDeploymentRequestCertificateAwsAcmArn2 + > = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), + }); + +export function persistImportedDeploymentRequestCertificateAwsAcmArn2ToJSON( + persistImportedDeploymentRequestCertificateAwsAcmArn2: + PersistImportedDeploymentRequestCertificateAwsAcmArn2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema.parse( + persistImportedDeploymentRequestCertificateAwsAcmArn2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound = + { + mode: "managedAcmImport"; + region?: string | null | undefined; + tags?: { [k: string]: string } | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound, + PersistImportedDeploymentRequestCertificateManagedAcmImport2 + > = z.object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), + }); + +export function persistImportedDeploymentRequestCertificateManagedAcmImport2ToJSON( + persistImportedDeploymentRequestCertificateManagedAcmImport2: + PersistImportedDeploymentRequestCertificateManagedAcmImport2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema + .parse(persistImportedDeploymentRequestCertificateManagedAcmImport2), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound = + { + namespace?: string | null | undefined; + secretName: string; + mode: "tlsSecretRef"; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound, + PersistImportedDeploymentRequestCertificateTLSSecretRef2 + > = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), + }); + +export function persistImportedDeploymentRequestCertificateTLSSecretRef2ToJSON( + persistImportedDeploymentRequestCertificateTLSSecretRef2: + PersistImportedDeploymentRequestCertificateTLSSecretRef2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema + .parse(persistImportedDeploymentRequestCertificateTLSSecretRef2), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateUnion2$Outbound = + | PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound + | PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound + | PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound + | PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound + | PersistImportedDeploymentRequestCertificateNone2$Outbound; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateUnion2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateUnion2$Outbound, + PersistImportedDeploymentRequestCertificateUnion2 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateNone2$outboundSchema + ), + ]); + +export function persistImportedDeploymentRequestCertificateUnion2ToJSON( + persistImportedDeploymentRequestCertificateUnion2: + PersistImportedDeploymentRequestCertificateUnion2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateUnion2$outboundSchema.parse( + persistImportedDeploymentRequestCertificateUnion2, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestModeCustom$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestModeCustom, + ); + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4 + > = z.enum( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound = + { + albName?: string | null | undefined; + albNamespace?: string | null | undefined; + frontend: string; + provider: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound, + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4 + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4$outboundSchema, + }); + +export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4ToJSON( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema + .parse( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGatewayEnum4$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum4); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderGkeGateway4$Outbound = { + provider: string; + staticAddressName?: string | null | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderGkeGateway4$Outbound, + PersistImportedDeploymentRequestProviderGkeGateway4 + > = z.object({ + provider: + PersistImportedDeploymentRequestProviderGkeGatewayEnum4$outboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestProviderGkeGateway4ToJSON( + persistImportedDeploymentRequestProviderGkeGateway4: + PersistImportedDeploymentRequestProviderGkeGateway4, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema.parse( + persistImportedDeploymentRequestProviderGkeGateway4, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlbEnum4$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum4); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAwsAlb4$Outbound = { + ipAddressType?: string | null | undefined; + provider: string; + scheme: string; + subnetIds?: Array | undefined; + targetType: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAwsAlb4$Outbound, + PersistImportedDeploymentRequestProviderAwsAlb4 + > = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: + PersistImportedDeploymentRequestProviderAwsAlbEnum4$outboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), + }); + +export function persistImportedDeploymentRequestProviderAwsAlb4ToJSON( + persistImportedDeploymentRequestProviderAwsAlb4: + PersistImportedDeploymentRequestProviderAwsAlb4, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema.parse( + persistImportedDeploymentRequestProviderAwsAlb4, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestProviderUnion4$Outbound = + | PersistImportedDeploymentRequestProviderAwsAlb4$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway4$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderUnion4$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderUnion4$Outbound, + PersistImportedDeploymentRequestProviderUnion4 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestProviderUnion4ToJSON( + persistImportedDeploymentRequestProviderUnion4: + PersistImportedDeploymentRequestProviderUnion4, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderUnion4$outboundSchema.parse( + persistImportedDeploymentRequestProviderUnion4, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestRouteGateway2$Outbound = { + annotations?: { [k: string]: string } | undefined; + controller?: string | null | undefined; + gatewayClassName: string; + labels?: { [k: string]: string } | undefined; + listenerPort: number; + provider?: + | PersistImportedDeploymentRequestProviderAwsAlb4$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway4$Outbound + | any + | null + | undefined; + routeApi: "gateway"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestRouteGateway2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestRouteGateway2$Outbound, + PersistImportedDeploymentRequestRouteGateway2 + > = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema + ), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), + }); + +export function persistImportedDeploymentRequestRouteGateway2ToJSON( + persistImportedDeploymentRequestRouteGateway2: + PersistImportedDeploymentRequestRouteGateway2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestRouteGateway2$outboundSchema.parse( + persistImportedDeploymentRequestRouteGateway2, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3 + > = z.enum( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound = + { + albName?: string | null | undefined; + albNamespace?: string | null | undefined; + frontend: string; + provider: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound, + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3 + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3$outboundSchema, + }); + +export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3ToJSON( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema + .parse( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGatewayEnum3$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum3); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderGkeGateway3$Outbound = { + provider: string; + staticAddressName?: string | null | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderGkeGateway3$Outbound, + PersistImportedDeploymentRequestProviderGkeGateway3 + > = z.object({ + provider: + PersistImportedDeploymentRequestProviderGkeGatewayEnum3$outboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestProviderGkeGateway3ToJSON( + persistImportedDeploymentRequestProviderGkeGateway3: + PersistImportedDeploymentRequestProviderGkeGateway3, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema.parse( + persistImportedDeploymentRequestProviderGkeGateway3, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlbEnum3$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum3); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAwsAlb3$Outbound = { + ipAddressType?: string | null | undefined; + provider: string; + scheme: string; + subnetIds?: Array | undefined; + targetType: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAwsAlb3$Outbound, + PersistImportedDeploymentRequestProviderAwsAlb3 + > = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: + PersistImportedDeploymentRequestProviderAwsAlbEnum3$outboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), + }); + +export function persistImportedDeploymentRequestProviderAwsAlb3ToJSON( + persistImportedDeploymentRequestProviderAwsAlb3: + PersistImportedDeploymentRequestProviderAwsAlb3, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema.parse( + persistImportedDeploymentRequestProviderAwsAlb3, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestProviderUnion3$Outbound = + | PersistImportedDeploymentRequestProviderAwsAlb3$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway3$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderUnion3$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderUnion3$Outbound, + PersistImportedDeploymentRequestProviderUnion3 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestProviderUnion3ToJSON( + persistImportedDeploymentRequestProviderUnion3: + PersistImportedDeploymentRequestProviderUnion3, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderUnion3$outboundSchema.parse( + persistImportedDeploymentRequestProviderUnion3, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestRouteIngress2$Outbound = { + annotations?: { [k: string]: string } | undefined; + controller?: string | null | undefined; + ingressClassName: string; + labels?: { [k: string]: string } | undefined; + provider?: + | PersistImportedDeploymentRequestProviderAwsAlb3$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway3$Outbound + | any + | null + | undefined; + routeApi: "ingress"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestRouteIngress2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestRouteIngress2$Outbound, + PersistImportedDeploymentRequestRouteIngress2 + > = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema + ), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), + }); + +export function persistImportedDeploymentRequestRouteIngress2ToJSON( + persistImportedDeploymentRequestRouteIngress2: + PersistImportedDeploymentRequestRouteIngress2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestRouteIngress2$outboundSchema.parse( + persistImportedDeploymentRequestRouteIngress2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestRouteUnion2$Outbound = + | PersistImportedDeploymentRequestRouteIngress2$Outbound + | PersistImportedDeploymentRequestRouteGateway2$Outbound; + +/** @internal */ +export const PersistImportedDeploymentRequestRouteUnion2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestRouteUnion2$Outbound, + PersistImportedDeploymentRequestRouteUnion2 + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestRouteIngress2$outboundSchema), + z.lazy(() => PersistImportedDeploymentRequestRouteGateway2$outboundSchema), + ]); + +export function persistImportedDeploymentRequestRouteUnion2ToJSON( + persistImportedDeploymentRequestRouteUnion2: + PersistImportedDeploymentRequestRouteUnion2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestRouteUnion2$outboundSchema.parse( + persistImportedDeploymentRequestRouteUnion2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestExposureCustom$Outbound = { + certificate: + | PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound + | PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound + | PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound + | PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound + | PersistImportedDeploymentRequestCertificateNone2$Outbound; + domain: string; + mode: string; + route: + | PersistImportedDeploymentRequestRouteIngress2$Outbound + | PersistImportedDeploymentRequestRouteGateway2$Outbound; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestExposureCustom$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestExposureCustom$Outbound, + PersistImportedDeploymentRequestExposureCustom + > = z.object({ + certificate: z.union([ + z.lazy(() => + PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateNone2$outboundSchema + ), + ]), + domain: z.string(), + mode: PersistImportedDeploymentRequestModeCustom$outboundSchema, + route: z.union([ + z.lazy(() => + PersistImportedDeploymentRequestRouteIngress2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestRouteGateway2$outboundSchema + ), + ]), + }); + +export function persistImportedDeploymentRequestExposureCustomToJSON( + persistImportedDeploymentRequestExposureCustom: + PersistImportedDeploymentRequestExposureCustom, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestExposureCustom$outboundSchema.parse( + persistImportedDeploymentRequestExposureCustom, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateNone1$Outbound = { + mode: "none"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateNone1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateNone1$Outbound, + PersistImportedDeploymentRequestCertificateNone1 + > = z.object({ + mode: z.literal("none"), + }); + +export function persistImportedDeploymentRequestCertificateNone1ToJSON( + persistImportedDeploymentRequestCertificateNone1: + PersistImportedDeploymentRequestCertificateNone1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateNone1$outboundSchema.parse( + persistImportedDeploymentRequestCertificateNone1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound = + { + mode: "managedTlsSecret"; + secretNameTemplate: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound, + PersistImportedDeploymentRequestCertificateManagedTLSSecret1 + > = z.object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), + }); + +export function persistImportedDeploymentRequestCertificateManagedTLSSecret1ToJSON( + persistImportedDeploymentRequestCertificateManagedTLSSecret1: + PersistImportedDeploymentRequestCertificateManagedTLSSecret1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema + .parse(persistImportedDeploymentRequestCertificateManagedTLSSecret1), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound = { + certificateArn: string; + mode: "awsAcmArn"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound, + PersistImportedDeploymentRequestCertificateAwsAcmArn1 + > = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), + }); + +export function persistImportedDeploymentRequestCertificateAwsAcmArn1ToJSON( + persistImportedDeploymentRequestCertificateAwsAcmArn1: + PersistImportedDeploymentRequestCertificateAwsAcmArn1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema.parse( + persistImportedDeploymentRequestCertificateAwsAcmArn1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound = + { + mode: "managedAcmImport"; + region?: string | null | undefined; + tags?: { [k: string]: string } | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound, + PersistImportedDeploymentRequestCertificateManagedAcmImport1 + > = z.object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), + }); + +export function persistImportedDeploymentRequestCertificateManagedAcmImport1ToJSON( + persistImportedDeploymentRequestCertificateManagedAcmImport1: + PersistImportedDeploymentRequestCertificateManagedAcmImport1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema + .parse(persistImportedDeploymentRequestCertificateManagedAcmImport1), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound = + { + namespace?: string | null | undefined; + secretName: string; + mode: "tlsSecretRef"; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound, + PersistImportedDeploymentRequestCertificateTLSSecretRef1 + > = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), + }); + +export function persistImportedDeploymentRequestCertificateTLSSecretRef1ToJSON( + persistImportedDeploymentRequestCertificateTLSSecretRef1: + PersistImportedDeploymentRequestCertificateTLSSecretRef1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema + .parse(persistImportedDeploymentRequestCertificateTLSSecretRef1), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestCertificateUnion1$Outbound = + | PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound + | PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound + | PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound + | PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound + | PersistImportedDeploymentRequestCertificateNone1$Outbound; + +/** @internal */ +export const PersistImportedDeploymentRequestCertificateUnion1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestCertificateUnion1$Outbound, + PersistImportedDeploymentRequestCertificateUnion1 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateNone1$outboundSchema + ), + ]); + +export function persistImportedDeploymentRequestCertificateUnion1ToJSON( + persistImportedDeploymentRequestCertificateUnion1: + PersistImportedDeploymentRequestCertificateUnion1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestCertificateUnion1$outboundSchema.parse( + persistImportedDeploymentRequestCertificateUnion1, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestModeGenerated$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestModeGenerated, + ); + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2 + > = z.enum( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound = + { + albName?: string | null | undefined; + albNamespace?: string | null | undefined; + frontend: string; + provider: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound, + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2 + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2$outboundSchema, + }); + +export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2ToJSON( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema + .parse( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGatewayEnum2$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum2); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderGkeGateway2$Outbound = { + provider: string; + staticAddressName?: string | null | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderGkeGateway2$Outbound, + PersistImportedDeploymentRequestProviderGkeGateway2 + > = z.object({ + provider: + PersistImportedDeploymentRequestProviderGkeGatewayEnum2$outboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestProviderGkeGateway2ToJSON( + persistImportedDeploymentRequestProviderGkeGateway2: + PersistImportedDeploymentRequestProviderGkeGateway2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema.parse( + persistImportedDeploymentRequestProviderGkeGateway2, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlbEnum2$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum2); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAwsAlb2$Outbound = { + ipAddressType?: string | null | undefined; + provider: string; + scheme: string; + subnetIds?: Array | undefined; + targetType: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAwsAlb2$Outbound, + PersistImportedDeploymentRequestProviderAwsAlb2 + > = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: + PersistImportedDeploymentRequestProviderAwsAlbEnum2$outboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), + }); + +export function persistImportedDeploymentRequestProviderAwsAlb2ToJSON( + persistImportedDeploymentRequestProviderAwsAlb2: + PersistImportedDeploymentRequestProviderAwsAlb2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema.parse( + persistImportedDeploymentRequestProviderAwsAlb2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestProviderUnion2$Outbound = + | PersistImportedDeploymentRequestProviderAwsAlb2$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway2$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderUnion2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderUnion2$Outbound, + PersistImportedDeploymentRequestProviderUnion2 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestProviderUnion2ToJSON( + persistImportedDeploymentRequestProviderUnion2: + PersistImportedDeploymentRequestProviderUnion2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderUnion2$outboundSchema.parse( + persistImportedDeploymentRequestProviderUnion2, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestRouteGateway1$Outbound = { + annotations?: { [k: string]: string } | undefined; + controller?: string | null | undefined; + gatewayClassName: string; + labels?: { [k: string]: string } | undefined; + listenerPort: number; + provider?: + | PersistImportedDeploymentRequestProviderAwsAlb2$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway2$Outbound + | any + | null + | undefined; + routeApi: "gateway"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestRouteGateway1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestRouteGateway1$Outbound, + PersistImportedDeploymentRequestRouteGateway1 + > = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema + ), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), + }); + +export function persistImportedDeploymentRequestRouteGateway1ToJSON( + persistImportedDeploymentRequestRouteGateway1: + PersistImportedDeploymentRequestRouteGateway1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestRouteGateway1$outboundSchema.parse( + persistImportedDeploymentRequestRouteGateway1, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1 + > = z.enum( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound = + { + albName?: string | null | undefined; + albNamespace?: string | null | undefined; + frontend: string; + provider: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound, + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1 + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1$outboundSchema, + }); + +export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1ToJSON( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1: + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema + .parse( + persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGatewayEnum1$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum1); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderGkeGateway1$Outbound = { + provider: string; + staticAddressName?: string | null | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderGkeGateway1$Outbound, + PersistImportedDeploymentRequestProviderGkeGateway1 + > = z.object({ + provider: + PersistImportedDeploymentRequestProviderGkeGatewayEnum1$outboundSchema, + staticAddressName: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestProviderGkeGateway1ToJSON( + persistImportedDeploymentRequestProviderGkeGateway1: + PersistImportedDeploymentRequestProviderGkeGateway1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema.parse( + persistImportedDeploymentRequestProviderGkeGateway1, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlbEnum1$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum1); + +/** @internal */ +export type PersistImportedDeploymentRequestProviderAwsAlb1$Outbound = { + ipAddressType?: string | null | undefined; + provider: string; + scheme: string; + subnetIds?: Array | undefined; + targetType: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderAwsAlb1$Outbound, + PersistImportedDeploymentRequestProviderAwsAlb1 + > = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: + PersistImportedDeploymentRequestProviderAwsAlbEnum1$outboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), + }); + +export function persistImportedDeploymentRequestProviderAwsAlb1ToJSON( + persistImportedDeploymentRequestProviderAwsAlb1: + PersistImportedDeploymentRequestProviderAwsAlb1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema.parse( + persistImportedDeploymentRequestProviderAwsAlb1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestProviderUnion1$Outbound = + | PersistImportedDeploymentRequestProviderAwsAlb1$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway1$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestProviderUnion1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestProviderUnion1$Outbound, + PersistImportedDeploymentRequestProviderUnion1 + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestProviderUnion1ToJSON( + persistImportedDeploymentRequestProviderUnion1: + PersistImportedDeploymentRequestProviderUnion1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestProviderUnion1$outboundSchema.parse( + persistImportedDeploymentRequestProviderUnion1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestRouteIngress1$Outbound = { + annotations?: { [k: string]: string } | undefined; + controller?: string | null | undefined; + ingressClassName: string; + labels?: { [k: string]: string } | undefined; + provider?: + | PersistImportedDeploymentRequestProviderAwsAlb1$Outbound + | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound + | PersistImportedDeploymentRequestProviderGkeGateway1$Outbound + | any + | null + | undefined; + routeApi: "ingress"; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestRouteIngress1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestRouteIngress1$Outbound, + PersistImportedDeploymentRequestRouteIngress1 + > = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema + ), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), + }); + +export function persistImportedDeploymentRequestRouteIngress1ToJSON( + persistImportedDeploymentRequestRouteIngress1: + PersistImportedDeploymentRequestRouteIngress1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestRouteIngress1$outboundSchema.parse( + persistImportedDeploymentRequestRouteIngress1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestRouteUnion1$Outbound = + | PersistImportedDeploymentRequestRouteIngress1$Outbound + | PersistImportedDeploymentRequestRouteGateway1$Outbound; + +/** @internal */ +export const PersistImportedDeploymentRequestRouteUnion1$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestRouteUnion1$Outbound, + PersistImportedDeploymentRequestRouteUnion1 + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestRouteIngress1$outboundSchema), + z.lazy(() => PersistImportedDeploymentRequestRouteGateway1$outboundSchema), + ]); + +export function persistImportedDeploymentRequestRouteUnion1ToJSON( + persistImportedDeploymentRequestRouteUnion1: + PersistImportedDeploymentRequestRouteUnion1, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestRouteUnion1$outboundSchema.parse( + persistImportedDeploymentRequestRouteUnion1, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestExposureGenerated$Outbound = { + certificate: + | PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound + | PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound + | PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound + | PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound + | PersistImportedDeploymentRequestCertificateNone1$Outbound; + mode: string; + route: + | PersistImportedDeploymentRequestRouteIngress1$Outbound + | PersistImportedDeploymentRequestRouteGateway1$Outbound; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestExposureGenerated$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestExposureGenerated$Outbound, + PersistImportedDeploymentRequestExposureGenerated + > = z.object({ + certificate: z.union([ + z.lazy(() => + PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestCertificateNone1$outboundSchema + ), + ]), + mode: PersistImportedDeploymentRequestModeGenerated$outboundSchema, + route: z.union([ + z.lazy(() => + PersistImportedDeploymentRequestRouteIngress1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestRouteGateway1$outboundSchema + ), + ]), + }); + +export function persistImportedDeploymentRequestExposureGeneratedToJSON( + persistImportedDeploymentRequestExposureGenerated: + PersistImportedDeploymentRequestExposureGenerated, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestExposureGenerated$outboundSchema.parse( + persistImportedDeploymentRequestExposureGenerated, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestModeDisabled$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestModeDisabled, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestExposureDisabled$Outbound = { + mode: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestExposureDisabled$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestExposureDisabled$Outbound, + PersistImportedDeploymentRequestExposureDisabled + > = z.object({ + mode: PersistImportedDeploymentRequestModeDisabled$outboundSchema, + }); + +export function persistImportedDeploymentRequestExposureDisabledToJSON( + persistImportedDeploymentRequestExposureDisabled: + PersistImportedDeploymentRequestExposureDisabled, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestExposureDisabled$outboundSchema.parse( + persistImportedDeploymentRequestExposureDisabled, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestExposureUnion$Outbound = + | PersistImportedDeploymentRequestExposureCustom$Outbound + | PersistImportedDeploymentRequestExposureGenerated$Outbound + | PersistImportedDeploymentRequestExposureDisabled$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestExposureUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestExposureUnion$Outbound, + PersistImportedDeploymentRequestExposureUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestExposureCustom$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestExposureGenerated$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestExposureDisabled$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestExposureUnionToJSON( + persistImportedDeploymentRequestExposureUnion: + PersistImportedDeploymentRequestExposureUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestExposureUnion$outboundSchema.parse( + persistImportedDeploymentRequestExposureUnion, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestKubernetes$Outbound = { + cluster?: + | PersistImportedDeploymentRequestCluster$Outbound + | any + | null + | undefined; + exposure?: + | PersistImportedDeploymentRequestExposureCustom$Outbound + | PersistImportedDeploymentRequestExposureGenerated$Outbound + | PersistImportedDeploymentRequestExposureDisabled$Outbound + | any + | null + | undefined; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestKubernetes$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestKubernetes$Outbound, + PersistImportedDeploymentRequestKubernetes + > = z.object({ + cluster: z.nullable( + z.union([ + z.lazy(() => PersistImportedDeploymentRequestCluster$outboundSchema), + z.any(), + ]), + ).optional(), + exposure: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestExposureCustom$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestExposureGenerated$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestExposureDisabled$outboundSchema + ), + z.any(), + ]), + ).optional(), + }); + +export function persistImportedDeploymentRequestKubernetesToJSON( + persistImportedDeploymentRequestKubernetes: + PersistImportedDeploymentRequestKubernetes, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestKubernetes$outboundSchema.parse( + persistImportedDeploymentRequestKubernetes, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestKubernetesUnion$Outbound = + | PersistImportedDeploymentRequestKubernetes$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestKubernetesUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestKubernetesUnion$Outbound, + PersistImportedDeploymentRequestKubernetesUnion + > = z.union([ + z.lazy(() => PersistImportedDeploymentRequestKubernetes$outboundSchema), + z.any(), + ]); + +export function persistImportedDeploymentRequestKubernetesUnionToJSON( + persistImportedDeploymentRequestKubernetesUnion: + PersistImportedDeploymentRequestKubernetesUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestKubernetesUnion$outboundSchema.parse( + persistImportedDeploymentRequestKubernetesUnion, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestTypeByoVnetAzure$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestTypeByoVnetAzure, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound = { + application_gateway_subnet_name?: string | null | undefined; + private_endpoint_subnet_name?: string | null | undefined; + private_subnet_name: string; + public_subnet_name: string; + type: string; + vnet_resource_id: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound, + PersistImportedDeploymentRequestNetworkByoVnetAzure + > = z.object({ + applicationGatewaySubnetName: z.nullable(z.string()).optional(), + privateEndpointSubnetName: z.nullable(z.string()).optional(), + privateSubnetName: z.string(), + publicSubnetName: z.string(), + type: PersistImportedDeploymentRequestTypeByoVnetAzure$outboundSchema, + vnetResourceId: z.string(), + }).transform((v) => { + return remap$(v, { + applicationGatewaySubnetName: "application_gateway_subnet_name", + privateEndpointSubnetName: "private_endpoint_subnet_name", + privateSubnetName: "private_subnet_name", + publicSubnetName: "public_subnet_name", + vnetResourceId: "vnet_resource_id", + }); + }); + +export function persistImportedDeploymentRequestNetworkByoVnetAzureToJSON( + persistImportedDeploymentRequestNetworkByoVnetAzure: + PersistImportedDeploymentRequestNetworkByoVnetAzure, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema.parse( + persistImportedDeploymentRequestNetworkByoVnetAzure, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestTypeByoVpcGcp$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestTypeByoVpcGcp, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound = { + network_name: string; + region: string; + subnet_name: string; + type: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound, + PersistImportedDeploymentRequestNetworkByoVpcGcp + > = z.object({ + networkName: z.string(), + region: z.string(), + subnetName: z.string(), + type: PersistImportedDeploymentRequestTypeByoVpcGcp$outboundSchema, + }).transform((v) => { + return remap$(v, { + networkName: "network_name", + subnetName: "subnet_name", + }); + }); + +export function persistImportedDeploymentRequestNetworkByoVpcGcpToJSON( + persistImportedDeploymentRequestNetworkByoVpcGcp: + PersistImportedDeploymentRequestNetworkByoVpcGcp, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema.parse( + persistImportedDeploymentRequestNetworkByoVpcGcp, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestTypeByoVpcAws$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestTypeByoVpcAws, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound = { + private_subnet_ids: Array; + public_subnet_ids: Array; + security_group_ids?: Array | undefined; + type: string; + vpc_id: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound, + PersistImportedDeploymentRequestNetworkByoVpcAws + > = z.object({ + privateSubnetIds: z.array(z.string()), + publicSubnetIds: z.array(z.string()), + securityGroupIds: z.array(z.string()).optional(), + type: PersistImportedDeploymentRequestTypeByoVpcAws$outboundSchema, + vpcId: z.string(), + }).transform((v) => { + return remap$(v, { + privateSubnetIds: "private_subnet_ids", + publicSubnetIds: "public_subnet_ids", + securityGroupIds: "security_group_ids", + vpcId: "vpc_id", + }); + }); + +export function persistImportedDeploymentRequestNetworkByoVpcAwsToJSON( + persistImportedDeploymentRequestNetworkByoVpcAws: + PersistImportedDeploymentRequestNetworkByoVpcAws, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema.parse( + persistImportedDeploymentRequestNetworkByoVpcAws, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestTypeCreate$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestTypeCreate, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestNetworkCreate$Outbound = { + availability_zones?: number | undefined; + cidr?: string | null | undefined; + type: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestNetworkCreate$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestNetworkCreate$Outbound, + PersistImportedDeploymentRequestNetworkCreate + > = z.object({ + availabilityZones: z.int().optional(), + cidr: z.nullable(z.string()).optional(), + type: PersistImportedDeploymentRequestTypeCreate$outboundSchema, + }).transform((v) => { + return remap$(v, { + availabilityZones: "availability_zones", + }); + }); + +export function persistImportedDeploymentRequestNetworkCreateToJSON( + persistImportedDeploymentRequestNetworkCreate: + PersistImportedDeploymentRequestNetworkCreate, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestNetworkCreate$outboundSchema.parse( + persistImportedDeploymentRequestNetworkCreate, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestTypeUseDefault$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestTypeUseDefault, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestNetworkUseDefault$Outbound = { + type: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestNetworkUseDefault$Outbound, + PersistImportedDeploymentRequestNetworkUseDefault + > = z.object({ + type: PersistImportedDeploymentRequestTypeUseDefault$outboundSchema, + }); + +export function persistImportedDeploymentRequestNetworkUseDefaultToJSON( + persistImportedDeploymentRequestNetworkUseDefault: + PersistImportedDeploymentRequestNetworkUseDefault, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema.parse( + persistImportedDeploymentRequestNetworkUseDefault, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestNetworkUnion$Outbound = + | PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound + | PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound + | PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound + | PersistImportedDeploymentRequestNetworkUseDefault$Outbound + | PersistImportedDeploymentRequestNetworkCreate$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestNetworkUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestNetworkUnion$Outbound, + PersistImportedDeploymentRequestNetworkUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema + ), + z.lazy(() => PersistImportedDeploymentRequestNetworkCreate$outboundSchema), + z.any(), + ]); + +export function persistImportedDeploymentRequestNetworkUnionToJSON( + persistImportedDeploymentRequestNetworkUnion: + PersistImportedDeploymentRequestNetworkUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestNetworkUnion$outboundSchema.parse( + persistImportedDeploymentRequestNetworkUnion, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestTelemetry$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestTelemetry, + ); + +/** @internal */ +export const PersistImportedDeploymentRequestUpdates$outboundSchema: z.ZodEnum< + typeof PersistImportedDeploymentRequestUpdates +> = z.enum(PersistImportedDeploymentRequestUpdates); + +/** @internal */ +export type PersistImportedDeploymentRequestStackSettings$Outbound = { + compute?: + | PersistImportedDeploymentRequestCompute$Outbound + | any + | null + | undefined; + deploymentModel?: string | undefined; + domains?: + | PersistImportedDeploymentRequestDomains$Outbound + | any + | null + | undefined; + externalBindings?: + | PersistImportedDeploymentRequestExternalBindings$Outbound + | null + | undefined; + heartbeats?: string | undefined; + kubernetes?: + | PersistImportedDeploymentRequestKubernetes$Outbound + | any + | null + | undefined; + network?: + | PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound + | PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound + | PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound + | PersistImportedDeploymentRequestNetworkUseDefault$Outbound + | PersistImportedDeploymentRequestNetworkCreate$Outbound + | any + | null + | undefined; + telemetry?: string | undefined; + updates?: string | undefined; +}; /** @internal */ -export type PersistImportedDeploymentRequestPoolsAutoscale$Outbound = { - machine?: string | null | undefined; - max: number; - min: number; - mode: "autoscale"; +export const PersistImportedDeploymentRequestStackSettings$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestStackSettings$Outbound, + PersistImportedDeploymentRequestStackSettings + > = z.object({ + compute: z.nullable( + z.union([ + z.lazy(() => PersistImportedDeploymentRequestCompute$outboundSchema), + z.any(), + ]), + ).optional(), + deploymentModel: + PersistImportedDeploymentRequestDeploymentModel$outboundSchema.optional(), + domains: z.nullable( + z.union([ + z.lazy(() => PersistImportedDeploymentRequestDomains$outboundSchema), + z.any(), + ]), + ).optional(), + externalBindings: z.nullable( + z.lazy(() => + PersistImportedDeploymentRequestExternalBindings$outboundSchema + ), + ).optional(), + heartbeats: PersistImportedDeploymentRequestHeartbeats$outboundSchema + .optional(), + kubernetes: z.nullable( + z.union([ + z.lazy(() => PersistImportedDeploymentRequestKubernetes$outboundSchema), + z.any(), + ]), + ).optional(), + network: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestNetworkCreate$outboundSchema + ), + z.any(), + ]), + ).optional(), + telemetry: PersistImportedDeploymentRequestTelemetry$outboundSchema + .optional(), + updates: PersistImportedDeploymentRequestUpdates$outboundSchema.optional(), + }); + +export function persistImportedDeploymentRequestStackSettingsToJSON( + persistImportedDeploymentRequestStackSettings: + PersistImportedDeploymentRequestStackSettings, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestStackSettings$outboundSchema.parse( + persistImportedDeploymentRequestStackSettings, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestPlatformTest$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestPlatformTest, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestEnvironmentInfoTest$Outbound = { + testId: string; + platform: string; }; /** @internal */ -export const PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema: +export const PersistImportedDeploymentRequestEnvironmentInfoTest$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPoolsAutoscale$Outbound, - PersistImportedDeploymentRequestPoolsAutoscale + PersistImportedDeploymentRequestEnvironmentInfoTest$Outbound, + PersistImportedDeploymentRequestEnvironmentInfoTest > = z.object({ - machine: z.nullable(z.string()).optional(), - max: z.int(), - min: z.int(), - mode: z.literal("autoscale"), + testId: z.string(), + platform: PersistImportedDeploymentRequestPlatformTest$outboundSchema, }); -export function persistImportedDeploymentRequestPoolsAutoscaleToJSON( - persistImportedDeploymentRequestPoolsAutoscale: - PersistImportedDeploymentRequestPoolsAutoscale, +export function persistImportedDeploymentRequestEnvironmentInfoTestToJSON( + persistImportedDeploymentRequestEnvironmentInfoTest: + PersistImportedDeploymentRequestEnvironmentInfoTest, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema.parse( - persistImportedDeploymentRequestPoolsAutoscale, + PersistImportedDeploymentRequestEnvironmentInfoTest$outboundSchema.parse( + persistImportedDeploymentRequestEnvironmentInfoTest, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestPoolsFixed$Outbound = { - machine?: string | null | undefined; - machines: number; - mode: "fixed"; +export const PersistImportedDeploymentRequestPlatformLocal$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestPlatformLocal, + ); + +/** @internal */ +export type PersistImportedDeploymentRequestEnvironmentInfoLocal$Outbound = { + arch: string; + hostname: string; + os: string; + platform: string; }; /** @internal */ -export const PersistImportedDeploymentRequestPoolsFixed$outboundSchema: +export const PersistImportedDeploymentRequestEnvironmentInfoLocal$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPoolsFixed$Outbound, - PersistImportedDeploymentRequestPoolsFixed + PersistImportedDeploymentRequestEnvironmentInfoLocal$Outbound, + PersistImportedDeploymentRequestEnvironmentInfoLocal > = z.object({ - machine: z.nullable(z.string()).optional(), - machines: z.int(), - mode: z.literal("fixed"), + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: PersistImportedDeploymentRequestPlatformLocal$outboundSchema, }); -export function persistImportedDeploymentRequestPoolsFixedToJSON( - persistImportedDeploymentRequestPoolsFixed: - PersistImportedDeploymentRequestPoolsFixed, +export function persistImportedDeploymentRequestEnvironmentInfoLocalToJSON( + persistImportedDeploymentRequestEnvironmentInfoLocal: + PersistImportedDeploymentRequestEnvironmentInfoLocal, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPoolsFixed$outboundSchema.parse( - persistImportedDeploymentRequestPoolsFixed, + PersistImportedDeploymentRequestEnvironmentInfoLocal$outboundSchema.parse( + persistImportedDeploymentRequestEnvironmentInfoLocal, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestPoolsUnion$Outbound = - | PersistImportedDeploymentRequestPoolsFixed$Outbound - | PersistImportedDeploymentRequestPoolsAutoscale$Outbound; +export const PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure + > = z.enum(PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure); /** @internal */ -export const PersistImportedDeploymentRequestPoolsUnion$outboundSchema: +export type PersistImportedDeploymentRequestEnvironmentInfoAzure$Outbound = { + location: string; + subscriptionId: string; + tenantId: string; + platform: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestEnvironmentInfoAzure$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPoolsUnion$Outbound, - PersistImportedDeploymentRequestPoolsUnion - > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestPoolsFixed$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema), - ]); + PersistImportedDeploymentRequestEnvironmentInfoAzure$Outbound, + PersistImportedDeploymentRequestEnvironmentInfoAzure + > = z.object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: + PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure$outboundSchema, + }); -export function persistImportedDeploymentRequestPoolsUnionToJSON( - persistImportedDeploymentRequestPoolsUnion: - PersistImportedDeploymentRequestPoolsUnion, +export function persistImportedDeploymentRequestEnvironmentInfoAzureToJSON( + persistImportedDeploymentRequestEnvironmentInfoAzure: + PersistImportedDeploymentRequestEnvironmentInfoAzure, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPoolsUnion$outboundSchema.parse( - persistImportedDeploymentRequestPoolsUnion, + PersistImportedDeploymentRequestEnvironmentInfoAzure$outboundSchema.parse( + persistImportedDeploymentRequestEnvironmentInfoAzure, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCompute$Outbound = { - pools?: { - [k: string]: - | PersistImportedDeploymentRequestPoolsFixed$Outbound - | PersistImportedDeploymentRequestPoolsAutoscale$Outbound; - } | undefined; +export const PersistImportedDeploymentRequestEnvironmentInfoPlatformGcp$outboundSchema: + z.ZodEnum = + z.enum(PersistImportedDeploymentRequestEnvironmentInfoPlatformGcp); + +/** @internal */ +export type PersistImportedDeploymentRequestEnvironmentInfoGcp$Outbound = { + projectId: string; + projectNumber: string; + region: string; + platform: string; }; /** @internal */ -export const PersistImportedDeploymentRequestCompute$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCompute$Outbound, - PersistImportedDeploymentRequestCompute -> = z.object({ - pools: z.record( - z.string(), - z.union([ - z.lazy(() => PersistImportedDeploymentRequestPoolsFixed$outboundSchema), - z.lazy(() => - PersistImportedDeploymentRequestPoolsAutoscale$outboundSchema - ), - ]), - ).optional(), -}); +export const PersistImportedDeploymentRequestEnvironmentInfoGcp$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestEnvironmentInfoGcp$Outbound, + PersistImportedDeploymentRequestEnvironmentInfoGcp + > = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: + PersistImportedDeploymentRequestEnvironmentInfoPlatformGcp$outboundSchema, + }); + +export function persistImportedDeploymentRequestEnvironmentInfoGcpToJSON( + persistImportedDeploymentRequestEnvironmentInfoGcp: + PersistImportedDeploymentRequestEnvironmentInfoGcp, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestEnvironmentInfoGcp$outboundSchema.parse( + persistImportedDeploymentRequestEnvironmentInfoGcp, + ), + ); +} + +/** @internal */ +export const PersistImportedDeploymentRequestEnvironmentInfoPlatformAws$outboundSchema: + z.ZodEnum = + z.enum(PersistImportedDeploymentRequestEnvironmentInfoPlatformAws); + +/** @internal */ +export type PersistImportedDeploymentRequestEnvironmentInfoAws$Outbound = { + accountId: string; + region: string; + platform: string; +}; + +/** @internal */ +export const PersistImportedDeploymentRequestEnvironmentInfoAws$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestEnvironmentInfoAws$Outbound, + PersistImportedDeploymentRequestEnvironmentInfoAws + > = z.object({ + accountId: z.string(), + region: z.string(), + platform: + PersistImportedDeploymentRequestEnvironmentInfoPlatformAws$outboundSchema, + }); -export function persistImportedDeploymentRequestComputeToJSON( - persistImportedDeploymentRequestCompute: - PersistImportedDeploymentRequestCompute, +export function persistImportedDeploymentRequestEnvironmentInfoAwsToJSON( + persistImportedDeploymentRequestEnvironmentInfoAws: + PersistImportedDeploymentRequestEnvironmentInfoAws, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCompute$outboundSchema.parse( - persistImportedDeploymentRequestCompute, + PersistImportedDeploymentRequestEnvironmentInfoAws$outboundSchema.parse( + persistImportedDeploymentRequestEnvironmentInfoAws, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestComputeUnion$Outbound = - | PersistImportedDeploymentRequestCompute$Outbound +export type PersistImportedDeploymentRequestEnvironmentInfoUnion$Outbound = + | PersistImportedDeploymentRequestEnvironmentInfoGcp$Outbound + | PersistImportedDeploymentRequestEnvironmentInfoAzure$Outbound + | PersistImportedDeploymentRequestEnvironmentInfoLocal$Outbound + | PersistImportedDeploymentRequestEnvironmentInfoAws$Outbound + | PersistImportedDeploymentRequestEnvironmentInfoTest$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestComputeUnion$outboundSchema: +export const PersistImportedDeploymentRequestEnvironmentInfoUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestComputeUnion$Outbound, - PersistImportedDeploymentRequestComputeUnion + PersistImportedDeploymentRequestEnvironmentInfoUnion$Outbound, + PersistImportedDeploymentRequestEnvironmentInfoUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestCompute$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestEnvironmentInfoGcp$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestEnvironmentInfoAzure$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestEnvironmentInfoLocal$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestEnvironmentInfoAws$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestEnvironmentInfoTest$outboundSchema + ), z.any(), ]); -export function persistImportedDeploymentRequestComputeUnionToJSON( - persistImportedDeploymentRequestComputeUnion: - PersistImportedDeploymentRequestComputeUnion, +export function persistImportedDeploymentRequestEnvironmentInfoUnionToJSON( + persistImportedDeploymentRequestEnvironmentInfoUnion: + PersistImportedDeploymentRequestEnvironmentInfoUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestComputeUnion$outboundSchema.parse( - persistImportedDeploymentRequestComputeUnion, + PersistImportedDeploymentRequestEnvironmentInfoUnion$outboundSchema.parse( + persistImportedDeploymentRequestEnvironmentInfoUnion, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestDeploymentModel$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestDeploymentModel, +export const PersistImportedDeploymentRequestPendingPreparedStackTypeStringList$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeStringList + > = z.enum( + PersistImportedDeploymentRequestPendingPreparedStackTypeStringList, ); /** @internal */ -export type PersistImportedDeploymentRequestAws$Outbound = { - certificateArn: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$Outbound = + { + type: string; + value: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestAws$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestAws$Outbound, - PersistImportedDeploymentRequestAws -> = z.object({ - certificateArn: z.string(), -}); +export const PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList + > = z.object({ + type: + PersistImportedDeploymentRequestPendingPreparedStackTypeStringList$outboundSchema, + value: z.array(z.string()), + }); -export function persistImportedDeploymentRequestAwsToJSON( - persistImportedDeploymentRequestAws: PersistImportedDeploymentRequestAws, +export function persistImportedDeploymentRequestPendingPreparedStackDefaultStringListToJSON( + persistImportedDeploymentRequestPendingPreparedStackDefaultStringList: + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList, ): string { return JSON.stringify( - PersistImportedDeploymentRequestAws$outboundSchema.parse( - persistImportedDeploymentRequestAws, - ), + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackDefaultStringList, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestAwsUnion$Outbound = - | PersistImportedDeploymentRequestAws$Outbound - | any; +export const PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean); /** @internal */ -export const PersistImportedDeploymentRequestAwsUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestAwsUnion$Outbound, - PersistImportedDeploymentRequestAwsUnion -> = z.union([ - z.lazy(() => PersistImportedDeploymentRequestAws$outboundSchema), - z.any(), -]); +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$Outbound = + { + type: string; + value: boolean; + }; -export function persistImportedDeploymentRequestAwsUnionToJSON( - persistImportedDeploymentRequestAwsUnion: - PersistImportedDeploymentRequestAwsUnion, +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean + > = z.object({ + type: + PersistImportedDeploymentRequestPendingPreparedStackTypeBoolean$outboundSchema, + value: z.boolean(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackDefaultBooleanToJSON( + persistImportedDeploymentRequestPendingPreparedStackDefaultBoolean: + PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean, ): string { return JSON.stringify( - PersistImportedDeploymentRequestAwsUnion$outboundSchema.parse( - persistImportedDeploymentRequestAwsUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackDefaultBoolean, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestAzureStackSettings$Outbound = { - keyVaultCertificateId: string; - keyVaultResourceId?: string | null | undefined; -}; +export const PersistImportedDeploymentRequestPendingPreparedStackTypeNumber$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeNumber + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackTypeNumber); /** @internal */ -export const PersistImportedDeploymentRequestAzureStackSettings$outboundSchema: +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$Outbound = + { + type: string; + value: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestAzureStackSettings$Outbound, - PersistImportedDeploymentRequestAzureStackSettings + PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber > = z.object({ - keyVaultCertificateId: z.string(), - keyVaultResourceId: z.nullable(z.string()).optional(), + type: + PersistImportedDeploymentRequestPendingPreparedStackTypeNumber$outboundSchema, + value: z.string(), }); -export function persistImportedDeploymentRequestAzureStackSettingsToJSON( - persistImportedDeploymentRequestAzureStackSettings: - PersistImportedDeploymentRequestAzureStackSettings, +export function persistImportedDeploymentRequestPendingPreparedStackDefaultNumberToJSON( + persistImportedDeploymentRequestPendingPreparedStackDefaultNumber: + PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber, ): string { return JSON.stringify( - PersistImportedDeploymentRequestAzureStackSettings$outboundSchema.parse( - persistImportedDeploymentRequestAzureStackSettings, - ), + PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackDefaultNumber), ); } /** @internal */ -export type PersistImportedDeploymentRequestAzureUnion$Outbound = - | PersistImportedDeploymentRequestAzureStackSettings$Outbound - | any; +export const PersistImportedDeploymentRequestPendingPreparedStackTypeString$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeString + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackTypeString); /** @internal */ -export const PersistImportedDeploymentRequestAzureUnion$outboundSchema: +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultString$Outbound = + { + type: string; + value: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackDefaultString$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestAzureUnion$Outbound, - PersistImportedDeploymentRequestAzureUnion - > = z.union([ - z.lazy(() => - PersistImportedDeploymentRequestAzureStackSettings$outboundSchema - ), - z.any(), - ]); + PersistImportedDeploymentRequestPendingPreparedStackDefaultString$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackDefaultString + > = z.object({ + type: + PersistImportedDeploymentRequestPendingPreparedStackTypeString$outboundSchema, + value: z.string(), + }); -export function persistImportedDeploymentRequestAzureUnionToJSON( - persistImportedDeploymentRequestAzureUnion: - PersistImportedDeploymentRequestAzureUnion, +export function persistImportedDeploymentRequestPendingPreparedStackDefaultStringToJSON( + persistImportedDeploymentRequestPendingPreparedStackDefaultString: + PersistImportedDeploymentRequestPendingPreparedStackDefaultString, ): string { return JSON.stringify( - PersistImportedDeploymentRequestAzureUnion$outboundSchema.parse( - persistImportedDeploymentRequestAzureUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackDefaultString$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackDefaultString), ); } /** @internal */ -export type PersistImportedDeploymentRequestGcpStackSettings$Outbound = { - certificateName: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackDefaultString$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$Outbound + | any; /** @internal */ -export const PersistImportedDeploymentRequestGcpStackSettings$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestGcpStackSettings$Outbound, - PersistImportedDeploymentRequestGcpStackSettings - > = z.object({ - certificateName: z.string(), - }); + PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDefaultString$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$outboundSchema + ), + z.any(), + ]); -export function persistImportedDeploymentRequestGcpStackSettingsToJSON( - persistImportedDeploymentRequestGcpStackSettings: - PersistImportedDeploymentRequestGcpStackSettings, +export function persistImportedDeploymentRequestPendingPreparedStackDefaultUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackDefaultUnion: + PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestGcpStackSettings$outboundSchema.parse( - persistImportedDeploymentRequestGcpStackSettings, - ), + PersistImportedDeploymentRequestPendingPreparedStackDefaultUnion$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackDefaultUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestGcpUnion$Outbound = - | PersistImportedDeploymentRequestGcpStackSettings$Outbound +export const PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum); + +/** @internal */ +export type PersistImportedDeploymentRequestPendingPreparedStackTypeUnion$Outbound = + | string | any; /** @internal */ -export const PersistImportedDeploymentRequestGcpUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestGcpUnion$Outbound, - PersistImportedDeploymentRequestGcpUnion -> = z.union([ - z.lazy(() => PersistImportedDeploymentRequestGcpStackSettings$outboundSchema), - z.any(), -]); +export const PersistImportedDeploymentRequestPendingPreparedStackTypeUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackTypeUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackTypeUnion + > = z.union([ + PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum$outboundSchema, + z.any(), + ]); -export function persistImportedDeploymentRequestGcpUnionToJSON( - persistImportedDeploymentRequestGcpUnion: - PersistImportedDeploymentRequestGcpUnion, +export function persistImportedDeploymentRequestPendingPreparedStackTypeUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackTypeUnion: + PersistImportedDeploymentRequestPendingPreparedStackTypeUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestGcpUnion$outboundSchema.parse( - persistImportedDeploymentRequestGcpUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackTypeUnion$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackTypeUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestTlsSecretRef$Outbound = { - namespace?: string | null | undefined; - secretName: string; +export type PersistImportedDeploymentRequestPendingPreparedStackEnv$Outbound = { + name: string; + targetResources?: Array | null | undefined; + type?: string | any | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestTlsSecretRef$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackEnv$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestTlsSecretRef$Outbound, - PersistImportedDeploymentRequestTlsSecretRef + PersistImportedDeploymentRequestPendingPreparedStackEnv$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackEnv > = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + PersistImportedDeploymentRequestPendingPreparedStackTypeEnvEnum$outboundSchema, + z.any(), + ]), + ).optional(), }); -export function persistImportedDeploymentRequestTlsSecretRefToJSON( - persistImportedDeploymentRequestTlsSecretRef: - PersistImportedDeploymentRequestTlsSecretRef, +export function persistImportedDeploymentRequestPendingPreparedStackEnvToJSON( + persistImportedDeploymentRequestPendingPreparedStackEnv: + PersistImportedDeploymentRequestPendingPreparedStackEnv, ): string { return JSON.stringify( - PersistImportedDeploymentRequestTlsSecretRef$outboundSchema.parse( - persistImportedDeploymentRequestTlsSecretRef, - ), + PersistImportedDeploymentRequestPendingPreparedStackEnv$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackEnv), ); } /** @internal */ -export type PersistImportedDeploymentRequestDomainsKubernetes$Outbound = { - tlsSecretRef: PersistImportedDeploymentRequestTlsSecretRef$Outbound; -}; +export const PersistImportedDeploymentRequestPendingPreparedStackKind$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPendingPreparedStackKind); /** @internal */ -export const PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackPlatform$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackPlatform + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackPlatform); + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackProvidedBy$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackProvidedBy + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackProvidedBy); + +/** @internal */ +export type PersistImportedDeploymentRequestPendingPreparedStackValidation$Outbound = + { + format?: string | null | undefined; + max?: string | null | undefined; + maxItems?: number | null | undefined; + maxLength?: number | null | undefined; + min?: string | null | undefined; + minItems?: number | null | undefined; + minLength?: number | null | undefined; + pattern?: string | null | undefined; + values?: Array | null | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackValidation$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDomainsKubernetes$Outbound, - PersistImportedDeploymentRequestDomainsKubernetes + PersistImportedDeploymentRequestPendingPreparedStackValidation$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackValidation > = z.object({ - tlsSecretRef: z.lazy(() => - PersistImportedDeploymentRequestTlsSecretRef$outboundSchema - ), + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestDomainsKubernetesToJSON( - persistImportedDeploymentRequestDomainsKubernetes: - PersistImportedDeploymentRequestDomainsKubernetes, +export function persistImportedDeploymentRequestPendingPreparedStackValidationToJSON( + persistImportedDeploymentRequestPendingPreparedStackValidation: + PersistImportedDeploymentRequestPendingPreparedStackValidation, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema.parse( - persistImportedDeploymentRequestDomainsKubernetes, - ), + PersistImportedDeploymentRequestPendingPreparedStackValidation$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackValidation), ); } /** @internal */ -export type PersistImportedDeploymentRequestDomainsKubernetesUnion$Outbound = - | PersistImportedDeploymentRequestDomainsKubernetes$Outbound +export type PersistImportedDeploymentRequestPendingPreparedStackValidationUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackValidation$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestDomainsKubernetesUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackValidationUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDomainsKubernetesUnion$Outbound, - PersistImportedDeploymentRequestDomainsKubernetesUnion + PersistImportedDeploymentRequestPendingPreparedStackValidationUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackValidationUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackValidation$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestDomainsKubernetesUnionToJSON( - persistImportedDeploymentRequestDomainsKubernetesUnion: - PersistImportedDeploymentRequestDomainsKubernetesUnion, +export function persistImportedDeploymentRequestPendingPreparedStackValidationUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackValidationUnion: + PersistImportedDeploymentRequestPendingPreparedStackValidationUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDomainsKubernetesUnion$outboundSchema.parse( - persistImportedDeploymentRequestDomainsKubernetesUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackValidationUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackValidationUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestDomainsCertificate$Outbound = { - aws?: PersistImportedDeploymentRequestAws$Outbound | any | null | undefined; - azure?: - | PersistImportedDeploymentRequestAzureStackSettings$Outbound - | any - | null - | undefined; - gcp?: - | PersistImportedDeploymentRequestGcpStackSettings$Outbound - | any - | null - | undefined; - kubernetes?: - | PersistImportedDeploymentRequestDomainsKubernetes$Outbound - | any - | null - | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackInput$Outbound = + { + default?: + | PersistImportedDeploymentRequestPendingPreparedStackDefaultString$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$Outbound + | any + | null + | undefined; + description: string; + env?: + | Array + | undefined; + id: string; + kind: string; + label: string; + placeholder?: string | null | undefined; + platforms?: Array | null | undefined; + providedBy: Array; + required: boolean; + validation?: + | PersistImportedDeploymentRequestPendingPreparedStackValidation$Outbound + | any + | null + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestDomainsCertificate$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackInput$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDomainsCertificate$Outbound, - PersistImportedDeploymentRequestDomainsCertificate + PersistImportedDeploymentRequestPendingPreparedStackInput$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackInput > = z.object({ - aws: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestAws$outboundSchema), - z.any(), - ]), - ).optional(), - azure: z.nullable( + default: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestAzureStackSettings$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackDefaultString$outboundSchema ), - z.any(), - ]), - ).optional(), - gcp: z.nullable( - z.union([ z.lazy(() => - PersistImportedDeploymentRequestGcpStackSettings$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackDefaultNumber$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDefaultBoolean$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDefaultStringList$outboundSchema ), z.any(), ]), ).optional(), - kubernetes: z.nullable( + description: z.string(), + env: z.array( + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackEnv$outboundSchema + ), + ).optional(), + id: z.string(), + kind: + PersistImportedDeploymentRequestPendingPreparedStackKind$outboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array( + PersistImportedDeploymentRequestPendingPreparedStackPlatform$outboundSchema, + ), + ).optional(), + providedBy: z.array( + PersistImportedDeploymentRequestPendingPreparedStackProvidedBy$outboundSchema, + ), + required: z.boolean(), + validation: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestDomainsKubernetes$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackValidation$outboundSchema ), z.any(), ]), ).optional(), }); -export function persistImportedDeploymentRequestDomainsCertificateToJSON( - persistImportedDeploymentRequestDomainsCertificate: - PersistImportedDeploymentRequestDomainsCertificate, +export function persistImportedDeploymentRequestPendingPreparedStackInputToJSON( + persistImportedDeploymentRequestPendingPreparedStackInput: + PersistImportedDeploymentRequestPendingPreparedStackInput, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDomainsCertificate$outboundSchema.parse( - persistImportedDeploymentRequestDomainsCertificate, - ), + PersistImportedDeploymentRequestPendingPreparedStackInput$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackInput), ); } /** @internal */ -export type PersistImportedDeploymentRequestCustomDomains$Outbound = { - certificate: PersistImportedDeploymentRequestDomainsCertificate$Outbound; - domain: string; -}; +export const PersistImportedDeploymentRequestPendingPreparedStackManagementEnum$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackManagementEnum + > = z.enum( + PersistImportedDeploymentRequestPendingPreparedStackManagementEnum, + ); /** @internal */ -export const PersistImportedDeploymentRequestCustomDomains$outboundSchema: +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCustomDomains$Outbound, - PersistImportedDeploymentRequestCustomDomains + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource > = z.object({ - certificate: z.lazy(() => - PersistImportedDeploymentRequestDomainsCertificate$outboundSchema - ), - domain: z.string(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestCustomDomainsToJSON( - persistImportedDeploymentRequestCustomDomains: - PersistImportedDeploymentRequestCustomDomains, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAwResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwResource: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCustomDomains$outboundSchema.parse( - persistImportedDeploymentRequestCustomDomains, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwResource, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestModeLoadBalancer$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestModeLoadBalancer, +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAwStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwStack: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwStack, + ), ); +} /** @internal */ -export type PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding$Outbound = { - cnameTarget: string; - mode: string; + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack$Outbound + | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound, - PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding > = z.object({ - cnameTarget: z.string(), - mode: PersistImportedDeploymentRequestModeLoadBalancer$outboundSchema, + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwStack$outboundSchema + ).optional(), }); -export function persistImportedDeploymentRequestPublicEndpointTargetLoadBalancerToJSON( - persistImportedDeploymentRequestPublicEndpointTargetLoadBalancer: - PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAwBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema - .parse(persistImportedDeploymentRequestPublicEndpointTargetLoadBalancer), + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestModeMachineAddresses$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestModeMachineAddresses); +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect + > = z.enum( + PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect, + ); /** @internal */ -export type PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant$Outbound = { - mode: string; + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound, - PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant > = z.object({ - mode: PersistImportedDeploymentRequestModeMachineAddresses$outboundSchema, + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestPublicEndpointTargetMachineAddressesToJSON( - persistImportedDeploymentRequestPublicEndpointTargetMachineAddresses: - PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAwGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant$outboundSchema .parse( - persistImportedDeploymentRequestPublicEndpointTargetMachineAddresses, + persistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestPublicEndpointTargetUnion$Outbound = - | PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound - | PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound - | any; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAw$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding$Outbound; + description?: string | null | undefined; + effect?: string | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestPublicEndpointTargetUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAw$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPublicEndpointTargetUnion$Outbound, - PersistImportedDeploymentRequestPublicEndpointTargetUnion - > = z.union([ - z.lazy(() => - PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackOverrideAw$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAw + > = z.object({ + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwBinding$outboundSchema ), - z.lazy(() => - PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema + description: z.nullable(z.string()).optional(), + effect: + PersistImportedDeploymentRequestPendingPreparedStackOverrideEffect$outboundSchema + .optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAwGrant$outboundSchema ), - z.any(), - ]); + label: z.nullable(z.string()).optional(), + }); -export function persistImportedDeploymentRequestPublicEndpointTargetUnionToJSON( - persistImportedDeploymentRequestPublicEndpointTargetUnion: - PersistImportedDeploymentRequestPublicEndpointTargetUnion, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAwToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAw: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAw, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPublicEndpointTargetUnion$outboundSchema - .parse(persistImportedDeploymentRequestPublicEndpointTargetUnion), + PersistImportedDeploymentRequestPendingPreparedStackOverrideAw$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackOverrideAw), ); } /** @internal */ -export type PersistImportedDeploymentRequestDomains$Outbound = { - customDomains?: - | { [k: string]: PersistImportedDeploymentRequestCustomDomains$Outbound } - | null - | undefined; - publicEndpointTarget?: - | PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$Outbound - | PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$Outbound - | any - | null - | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestDomains$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDomains$Outbound, - PersistImportedDeploymentRequestDomains -> = z.object({ - customDomains: z.nullable( - z.record( - z.string(), - z.lazy(() => - PersistImportedDeploymentRequestCustomDomains$outboundSchema - ), - ), - ).optional(), - publicEndpointTarget: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestPublicEndpointTargetLoadBalancer$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestPublicEndpointTargetMachineAddresses$outboundSchema +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource + > = z.object({ + scope: z.string(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAzureResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource, ), - z.any(), - ]), - ).optional(), -}); + ); +} -export function persistImportedDeploymentRequestDomainsToJSON( - persistImportedDeploymentRequestDomains: - PersistImportedDeploymentRequestDomains, +/** @internal */ +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack$Outbound = + { + scope: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack + > = z.object({ + scope: z.string(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAzureStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDomains$outboundSchema.parse( - persistImportedDeploymentRequestDomains, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestDomainsUnion$Outbound = - | PersistImportedDeploymentRequestDomains$Outbound - | any; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestDomainsUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDomainsUnion$Outbound, - PersistImportedDeploymentRequestDomainsUnion - > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestDomains$outboundSchema), - z.any(), - ]); + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding + > = z.object({ + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureStack$outboundSchema + ).optional(), + }); -export function persistImportedDeploymentRequestDomainsUnionToJSON( - persistImportedDeploymentRequestDomainsUnion: - PersistImportedDeploymentRequestDomainsUnion, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAzureBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDomainsUnion$outboundSchema.parse( - persistImportedDeploymentRequestDomainsUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExternalBindings$Outbound = {}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExternalBindings$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExternalBindings$Outbound, - PersistImportedDeploymentRequestExternalBindings - > = z.object({}); + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function persistImportedDeploymentRequestExternalBindingsToJSON( - persistImportedDeploymentRequestExternalBindings: - PersistImportedDeploymentRequestExternalBindings, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExternalBindings$outboundSchema.parse( - persistImportedDeploymentRequestExternalBindings, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestHeartbeats$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestHeartbeats, +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant$Outbound; + label?: string | null | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure + > = z.object({ + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzureGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackOverrideAzureToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideAzure: + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackOverrideAzure), ); +} /** @internal */ -export type PersistImportedDeploymentRequestCloud$Outbound = { - accountId?: string | null | undefined; - clusterId?: string | null | undefined; - clusterName?: string | null | undefined; - projectId?: string | null | undefined; - region?: string | null | undefined; - resourceGroup?: string | null | undefined; - subscriptionId?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestCloud$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCloud$Outbound, - PersistImportedDeploymentRequestCloud -> = z.object({ - accountId: z.nullable(z.string()).optional(), - clusterId: z.nullable(z.string()).optional(), - clusterName: z.nullable(z.string()).optional(), - projectId: z.nullable(z.string()).optional(), - region: z.nullable(z.string()).optional(), - resourceGroup: z.nullable(z.string()).optional(), - subscriptionId: z.nullable(z.string()).optional(), -}); +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function persistImportedDeploymentRequestCloudToJSON( - persistImportedDeploymentRequestCloud: PersistImportedDeploymentRequestCloud, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideConditionResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource: + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCloud$outboundSchema.parse( - persistImportedDeploymentRequestCloud, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCloudUnion$Outbound = - | PersistImportedDeploymentRequestCloud$Outbound +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestCloudUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCloudUnion$Outbound, - PersistImportedDeploymentRequestCloudUnion + PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestCloud$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$outboundSchema + ), z.any(), ]); -export function persistImportedDeploymentRequestCloudUnionToJSON( - persistImportedDeploymentRequestCloudUnion: - PersistImportedDeploymentRequestCloudUnion, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion: + PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCloudUnion$outboundSchema.parse( - persistImportedDeploymentRequestCloudUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideResourceConditionUnion, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestOwnership$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestOwnership, +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$Outbound + | any + | null + | undefined; + scope: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionResource$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackOverrideGcpResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource, + ), ); +} /** @internal */ -export type PersistImportedDeploymentRequestCluster$Outbound = { - cloud?: - | PersistImportedDeploymentRequestCloud$Outbound - | any - | null - | undefined; - namespace?: string | null | undefined; - ownership: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestCluster$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCluster$Outbound, - PersistImportedDeploymentRequestCluster -> = z.object({ - cloud: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestCloud$outboundSchema), - z.any(), - ]), - ).optional(), - namespace: z.nullable(z.string()).optional(), - ownership: PersistImportedDeploymentRequestOwnership$outboundSchema, -}); +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function persistImportedDeploymentRequestClusterToJSON( - persistImportedDeploymentRequestCluster: - PersistImportedDeploymentRequestCluster, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideConditionStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack: + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCluster$outboundSchema.parse( - persistImportedDeploymentRequestCluster, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestClusterUnion$Outbound = - | PersistImportedDeploymentRequestCluster$Outbound +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestClusterUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestClusterUnion$Outbound, - PersistImportedDeploymentRequestClusterUnion + PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestCluster$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$outboundSchema + ), z.any(), ]); -export function persistImportedDeploymentRequestClusterUnionToJSON( - persistImportedDeploymentRequestClusterUnion: - PersistImportedDeploymentRequestClusterUnion, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion: + PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestClusterUnion$outboundSchema.parse( - persistImportedDeploymentRequestClusterUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideStackConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateNone2$Outbound = { - mode: "none"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateNone2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateNone2$Outbound, - PersistImportedDeploymentRequestCertificateNone2 + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack > = z.object({ - mode: z.literal("none"), + condition: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideConditionStack$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -export function persistImportedDeploymentRequestCertificateNone2ToJSON( - persistImportedDeploymentRequestCertificateNone2: - PersistImportedDeploymentRequestCertificateNone2, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideGcpStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateNone2$outboundSchema.parse( - persistImportedDeploymentRequestCertificateNone2, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding$Outbound = { - mode: "managedTlsSecret"; - secretNameTemplate: string; + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack$Outbound + | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding + > = z.object({ + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpStack$outboundSchema + ).optional(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackOverrideGcpBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound, - PersistImportedDeploymentRequestCertificateManagedTLSSecret2 + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant > = z.object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestCertificateManagedTLSSecret2ToJSON( - persistImportedDeploymentRequestCertificateManagedTLSSecret2: - PersistImportedDeploymentRequestCertificateManagedTLSSecret2, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema - .parse(persistImportedDeploymentRequestCertificateManagedTLSSecret2), + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound = { - certificateArn: string; - mode: "awsAcmArn"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound, - PersistImportedDeploymentRequestCertificateAwsAcmArn2 + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp > = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcpGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestCertificateAwsAcmArn2ToJSON( - persistImportedDeploymentRequestCertificateAwsAcmArn2: - PersistImportedDeploymentRequestCertificateAwsAcmArn2, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideGcpToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideGcp: + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema.parse( - persistImportedDeploymentRequestCertificateAwsAcmArn2, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackOverrideGcp), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms$Outbound = { - mode: "managedAcmImport"; - region?: string | null | undefined; - tags?: { [k: string]: string } | undefined; + aws?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackOverrideAw$Outbound + > + | null + | undefined; + azure?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure$Outbound + > + | null + | undefined; + gcp?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp$Outbound + > + | null + | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound, - PersistImportedDeploymentRequestCertificateManagedAcmImport2 + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms > = z.object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), + aws: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAw$outboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideAzure$outboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverrideGcp$outboundSchema + )), + ).optional(), }); -export function persistImportedDeploymentRequestCertificateManagedAcmImport2ToJSON( - persistImportedDeploymentRequestCertificateManagedAcmImport2: - PersistImportedDeploymentRequestCertificateManagedAcmImport2, +export function persistImportedDeploymentRequestPendingPreparedStackOverridePlatformsToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverridePlatforms: + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema - .parse(persistImportedDeploymentRequestCertificateManagedAcmImport2), + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackOverridePlatforms, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackOverride$Outbound = { - namespace?: string | null | undefined; - secretName: string; - mode: "tlsSecretRef"; + description: string; + id: string; + platforms: + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms$Outbound; }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverride$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound, - PersistImportedDeploymentRequestCertificateTLSSecretRef2 + PersistImportedDeploymentRequestPendingPreparedStackOverride$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverride > = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverridePlatforms$outboundSchema + ), }); -export function persistImportedDeploymentRequestCertificateTLSSecretRef2ToJSON( - persistImportedDeploymentRequestCertificateTLSSecretRef2: - PersistImportedDeploymentRequestCertificateTLSSecretRef2, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverride: + PersistImportedDeploymentRequestPendingPreparedStackOverride, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema - .parse(persistImportedDeploymentRequestCertificateTLSSecretRef2), + PersistImportedDeploymentRequestPendingPreparedStackOverride$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackOverride), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateUnion2$Outbound = - | PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound - | PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound - | PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound - | PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound - | PersistImportedDeploymentRequestCertificateNone2$Outbound; +export type PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackOverride$Outbound + | string; /** @internal */ -export const PersistImportedDeploymentRequestCertificateUnion2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateUnion2$Outbound, - PersistImportedDeploymentRequestCertificateUnion2 + PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateNone2$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackOverride$outboundSchema ), + z.string(), ]); -export function persistImportedDeploymentRequestCertificateUnion2ToJSON( - persistImportedDeploymentRequestCertificateUnion2: - PersistImportedDeploymentRequestCertificateUnion2, +export function persistImportedDeploymentRequestPendingPreparedStackOverrideUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackOverrideUnion: + PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateUnion2$outboundSchema.parse( - persistImportedDeploymentRequestCertificateUnion2, - ), + PersistImportedDeploymentRequestPendingPreparedStackOverrideUnion$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackOverrideUnion), ); } /** @internal */ -export const PersistImportedDeploymentRequestModeCustom$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestModeCustom, - ); +export type PersistImportedDeploymentRequestPendingPreparedStackManagement2$Outbound = + { + override: { + [k: string]: Array< + | PersistImportedDeploymentRequestPendingPreparedStackOverride$Outbound + | string + >; + }; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4$outboundSchema: - z.ZodEnum< - typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4 - > = z.enum( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4, +export const PersistImportedDeploymentRequestPendingPreparedStackManagement2$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackManagement2$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackManagement2 + > = z.object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackOverride$outboundSchema + ), + z.string(), + ])), + ), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackManagement2ToJSON( + persistImportedDeploymentRequestPendingPreparedStackManagement2: + PersistImportedDeploymentRequestPendingPreparedStackManagement2, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackManagement2$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackManagement2), ); +} /** @internal */ -export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource$Outbound = { - albName?: string | null | undefined; - albNamespace?: string | null | undefined; - frontend: string; - provider: string; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound, - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4 + PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum4$outboundSchema, + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4ToJSON( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAwResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAwResource: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource$outboundSchema .parse( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4, + persistImportedDeploymentRequestPendingPreparedStackExtendAwResource, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGatewayEnum4$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum4); - -/** @internal */ -export type PersistImportedDeploymentRequestProviderGkeGateway4$Outbound = { - provider: string; - staticAddressName?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderGkeGateway4$Outbound, - PersistImportedDeploymentRequestProviderGkeGateway4 + PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack > = z.object({ - provider: - PersistImportedDeploymentRequestProviderGkeGatewayEnum4$outboundSchema, - staticAddressName: z.nullable(z.string()).optional(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestProviderGkeGateway4ToJSON( - persistImportedDeploymentRequestProviderGkeGateway4: - PersistImportedDeploymentRequestProviderGkeGateway4, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAwStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAwStack: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema.parse( - persistImportedDeploymentRequestProviderGkeGateway4, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtendAwStack), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlbEnum4$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum4); - -/** @internal */ -export type PersistImportedDeploymentRequestProviderAwsAlb4$Outbound = { - ipAddressType?: string | null | undefined; - provider: string; - scheme: string; - subnetIds?: Array | undefined; - targetType: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAwsAlb4$Outbound, - PersistImportedDeploymentRequestProviderAwsAlb4 + PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: - PersistImportedDeploymentRequestProviderAwsAlbEnum4$outboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAwResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAwStack$outboundSchema + ).optional(), }); -export function persistImportedDeploymentRequestProviderAwsAlb4ToJSON( - persistImportedDeploymentRequestProviderAwsAlb4: - PersistImportedDeploymentRequestProviderAwsAlb4, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAwBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAwBinding: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema.parse( - persistImportedDeploymentRequestProviderAwsAlb4, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendAwBinding, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProviderUnion4$Outbound = - | PersistImportedDeploymentRequestProviderAwsAlb4$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway4$Outbound - | any; +export const PersistImportedDeploymentRequestPendingPreparedStackExtendEffect$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackExtendEffect + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackExtendEffect); /** @internal */ -export const PersistImportedDeploymentRequestProviderUnion4$outboundSchema: +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderUnion4$Outbound, - PersistImportedDeploymentRequestProviderUnion4 - > = z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema - ), - z.any(), - ]); + PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function persistImportedDeploymentRequestProviderUnion4ToJSON( - persistImportedDeploymentRequestProviderUnion4: - PersistImportedDeploymentRequestProviderUnion4, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAwGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAwGrant: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderUnion4$outboundSchema.parse( - persistImportedDeploymentRequestProviderUnion4, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtendAwGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestRouteGateway2$Outbound = { - annotations?: { [k: string]: string } | undefined; - controller?: string | null | undefined; - gatewayClassName: string; - labels?: { [k: string]: string } | undefined; - listenerPort: number; - provider?: - | PersistImportedDeploymentRequestProviderAwsAlb4$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway4$Outbound - | any - | null - | undefined; - routeApi: "gateway"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAw$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding$Outbound; + description?: string | null | undefined; + effect?: string | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestRouteGateway2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAw$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestRouteGateway2$Outbound, - PersistImportedDeploymentRequestRouteGateway2 + PersistImportedDeploymentRequestPendingPreparedStackExtendAw$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAw > = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb4$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers4$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway4$outboundSchema - ), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAwBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + PersistImportedDeploymentRequestPendingPreparedStackExtendEffect$outboundSchema + .optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAwGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestRouteGateway2ToJSON( - persistImportedDeploymentRequestRouteGateway2: - PersistImportedDeploymentRequestRouteGateway2, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAwToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAw: + PersistImportedDeploymentRequestPendingPreparedStackExtendAw, ): string { return JSON.stringify( - PersistImportedDeploymentRequestRouteGateway2$outboundSchema.parse( - persistImportedDeploymentRequestRouteGateway2, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAw$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtendAw), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3$outboundSchema: - z.ZodEnum< - typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3 - > = z.enum( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3, +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource$Outbound = + { + scope: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource + > = z.object({ + scope: z.string(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackExtendAzureResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureResource: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureResource, + ), ); +} /** @internal */ -export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack$Outbound = { - albName?: string | null | undefined; - albNamespace?: string | null | undefined; - frontend: string; - provider: string; + scope: string; }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound, - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3 + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum3$outboundSchema, + scope: z.string(), }); -export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3ToJSON( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAzureStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureStack: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack$outboundSchema .parse( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3, + persistImportedDeploymentRequestPendingPreparedStackExtendAzureStack, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGatewayEnum3$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum3); - -/** @internal */ -export type PersistImportedDeploymentRequestProviderGkeGateway3$Outbound = { - provider: string; - staticAddressName?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderGkeGateway3$Outbound, - PersistImportedDeploymentRequestProviderGkeGateway3 + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding > = z.object({ - provider: - PersistImportedDeploymentRequestProviderGkeGatewayEnum3$outboundSchema, - staticAddressName: z.nullable(z.string()).optional(), + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureStack$outboundSchema + ).optional(), }); -export function persistImportedDeploymentRequestProviderGkeGateway3ToJSON( - persistImportedDeploymentRequestProviderGkeGateway3: - PersistImportedDeploymentRequestProviderGkeGateway3, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAzureBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema.parse( - persistImportedDeploymentRequestProviderGkeGateway3, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlbEnum3$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum3); - -/** @internal */ -export type PersistImportedDeploymentRequestProviderAwsAlb3$Outbound = { - ipAddressType?: string | null | undefined; - provider: string; - scheme: string; - subnetIds?: Array | undefined; - targetType: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAwsAlb3$Outbound, - PersistImportedDeploymentRequestProviderAwsAlb3 + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: - PersistImportedDeploymentRequestProviderAwsAlbEnum3$outboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestProviderAwsAlb3ToJSON( - persistImportedDeploymentRequestProviderAwsAlb3: - PersistImportedDeploymentRequestProviderAwsAlb3, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAzureGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema.parse( - persistImportedDeploymentRequestProviderAwsAlb3, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProviderUnion3$Outbound = - | PersistImportedDeploymentRequestProviderAwsAlb3$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway3$Outbound - | any; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendAzure$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderUnion3$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendAzure$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderUnion3$Outbound, - PersistImportedDeploymentRequestProviderUnion3 - > = z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackExtendAzure$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendAzure + > = z.object({ + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureBinding$outboundSchema ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAzureGrant$outboundSchema ), - z.any(), - ]); + label: z.nullable(z.string()).optional(), + }); -export function persistImportedDeploymentRequestProviderUnion3ToJSON( - persistImportedDeploymentRequestProviderUnion3: - PersistImportedDeploymentRequestProviderUnion3, +export function persistImportedDeploymentRequestPendingPreparedStackExtendAzureToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendAzure: + PersistImportedDeploymentRequestPendingPreparedStackExtendAzure, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderUnion3$outboundSchema.parse( - persistImportedDeploymentRequestProviderUnion3, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendAzure$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtendAzure), ); } /** @internal */ -export type PersistImportedDeploymentRequestRouteIngress2$Outbound = { - annotations?: { [k: string]: string } | undefined; - controller?: string | null | undefined; - ingressClassName: string; - labels?: { [k: string]: string } | undefined; - provider?: - | PersistImportedDeploymentRequestProviderAwsAlb3$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway3$Outbound - | any - | null - | undefined; - routeApi: "ingress"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestRouteIngress2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestRouteIngress2$Outbound, - PersistImportedDeploymentRequestRouteIngress2 + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource > = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb3$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers3$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway3$outboundSchema - ), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), + expression: z.string(), + title: z.string(), }); -export function persistImportedDeploymentRequestRouteIngress2ToJSON( - persistImportedDeploymentRequestRouteIngress2: - PersistImportedDeploymentRequestRouteIngress2, +export function persistImportedDeploymentRequestPendingPreparedStackExtendConditionResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendConditionResource: + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestRouteIngress2$outboundSchema.parse( - persistImportedDeploymentRequestRouteIngress2, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendConditionResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestRouteUnion2$Outbound = - | PersistImportedDeploymentRequestRouteIngress2$Outbound - | PersistImportedDeploymentRequestRouteGateway2$Outbound; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$Outbound + | any; /** @internal */ -export const PersistImportedDeploymentRequestRouteUnion2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestRouteUnion2$Outbound, - PersistImportedDeploymentRequestRouteUnion2 + PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestRouteIngress2$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestRouteGateway2$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$outboundSchema + ), + z.any(), ]); -export function persistImportedDeploymentRequestRouteUnion2ToJSON( - persistImportedDeploymentRequestRouteUnion2: - PersistImportedDeploymentRequestRouteUnion2, +export function persistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion: + PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestRouteUnion2$outboundSchema.parse( - persistImportedDeploymentRequestRouteUnion2, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendResourceConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExposureCustom$Outbound = { - certificate: - | PersistImportedDeploymentRequestCertificateTLSSecretRef2$Outbound - | PersistImportedDeploymentRequestCertificateManagedAcmImport2$Outbound - | PersistImportedDeploymentRequestCertificateAwsAcmArn2$Outbound - | PersistImportedDeploymentRequestCertificateManagedTLSSecret2$Outbound - | PersistImportedDeploymentRequestCertificateNone2$Outbound; - domain: string; - mode: string; - route: - | PersistImportedDeploymentRequestRouteIngress2$Outbound - | PersistImportedDeploymentRequestRouteGateway2$Outbound; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExposureCustom$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExposureCustom$Outbound, - PersistImportedDeploymentRequestExposureCustom + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource > = z.object({ - certificate: z.union([ - z.lazy(() => - PersistImportedDeploymentRequestCertificateTLSSecretRef2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedAcmImport2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateAwsAcmArn2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedTLSSecret2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateNone2$outboundSchema - ), - ]), - domain: z.string(), - mode: PersistImportedDeploymentRequestModeCustom$outboundSchema, - route: z.union([ - z.lazy(() => - PersistImportedDeploymentRequestRouteIngress2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestRouteGateway2$outboundSchema - ), - ]), + condition: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionResource$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -export function persistImportedDeploymentRequestExposureCustomToJSON( - persistImportedDeploymentRequestExposureCustom: - PersistImportedDeploymentRequestExposureCustom, +export function persistImportedDeploymentRequestPendingPreparedStackExtendGcpResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpResource: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExposureCustom$outboundSchema.parse( - persistImportedDeploymentRequestExposureCustom, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateNone1$Outbound = { - mode: "none"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateNone1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateNone1$Outbound, - PersistImportedDeploymentRequestCertificateNone1 + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack > = z.object({ - mode: z.literal("none"), + expression: z.string(), + title: z.string(), }); -export function persistImportedDeploymentRequestCertificateNone1ToJSON( - persistImportedDeploymentRequestCertificateNone1: - PersistImportedDeploymentRequestCertificateNone1, +export function persistImportedDeploymentRequestPendingPreparedStackExtendConditionStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendConditionStack: + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateNone1$outboundSchema.parse( - persistImportedDeploymentRequestCertificateNone1, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendConditionStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound = - { - mode: "managedTlsSecret"; - secretNameTemplate: string; - }; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$Outbound + | any; /** @internal */ -export const PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound, - PersistImportedDeploymentRequestCertificateManagedTLSSecret1 - > = z.object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), - }); + PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$outboundSchema + ), + z.any(), + ]); -export function persistImportedDeploymentRequestCertificateManagedTLSSecret1ToJSON( - persistImportedDeploymentRequestCertificateManagedTLSSecret1: - PersistImportedDeploymentRequestCertificateManagedTLSSecret1, +export function persistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion: + PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema - .parse(persistImportedDeploymentRequestCertificateManagedTLSSecret1), + PersistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendStackConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound = { - certificateArn: string; - mode: "awsAcmArn"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound, - PersistImportedDeploymentRequestCertificateAwsAcmArn1 + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack > = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), + condition: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendConditionStack$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -export function persistImportedDeploymentRequestCertificateAwsAcmArn1ToJSON( - persistImportedDeploymentRequestCertificateAwsAcmArn1: - PersistImportedDeploymentRequestCertificateAwsAcmArn1, +export function persistImportedDeploymentRequestPendingPreparedStackExtendGcpStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpStack: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema.parse( - persistImportedDeploymentRequestCertificateAwsAcmArn1, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding$Outbound = { - mode: "managedAcmImport"; - region?: string | null | undefined; - tags?: { [k: string]: string } | undefined; + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack$Outbound + | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound, - PersistImportedDeploymentRequestCertificateManagedAcmImport1 + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding > = z.object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpStack$outboundSchema + ).optional(), }); -export function persistImportedDeploymentRequestCertificateManagedAcmImport1ToJSON( - persistImportedDeploymentRequestCertificateManagedAcmImport1: - PersistImportedDeploymentRequestCertificateManagedAcmImport1, +export function persistImportedDeploymentRequestPendingPreparedStackExtendGcpBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema - .parse(persistImportedDeploymentRequestCertificateManagedAcmImport1), + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant$Outbound = { - namespace?: string | null | undefined; - secretName: string; - mode: "tlsSecretRef"; + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound, - PersistImportedDeploymentRequestCertificateTLSSecretRef1 + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant > = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestCertificateTLSSecretRef1ToJSON( - persistImportedDeploymentRequestCertificateTLSSecretRef1: - PersistImportedDeploymentRequestCertificateTLSSecretRef1, +export function persistImportedDeploymentRequestPendingPreparedStackExtendGcpGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema - .parse(persistImportedDeploymentRequestCertificateTLSSecretRef1), + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestCertificateUnion1$Outbound = - | PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound - | PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound - | PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound - | PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound - | PersistImportedDeploymentRequestCertificateNone1$Outbound; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendGcp$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestCertificateUnion1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendGcp$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestCertificateUnion1$Outbound, - PersistImportedDeploymentRequestCertificateUnion1 - > = z.union([ - z.lazy(() => - PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackExtendGcp$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendGcp + > = z.object({ + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpBinding$outboundSchema ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateNone1$outboundSchema + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendGcpGrant$outboundSchema ), - ]); + label: z.nullable(z.string()).optional(), + }); -export function persistImportedDeploymentRequestCertificateUnion1ToJSON( - persistImportedDeploymentRequestCertificateUnion1: - PersistImportedDeploymentRequestCertificateUnion1, +export function persistImportedDeploymentRequestPendingPreparedStackExtendGcpToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendGcp: + PersistImportedDeploymentRequestPendingPreparedStackExtendGcp, ): string { return JSON.stringify( - PersistImportedDeploymentRequestCertificateUnion1$outboundSchema.parse( - persistImportedDeploymentRequestCertificateUnion1, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendGcp$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtendGcp), ); } /** @internal */ -export const PersistImportedDeploymentRequestModeGenerated$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestModeGenerated, - ); +export type PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms$Outbound = + { + aws?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackExtendAw$Outbound + > + | null + | undefined; + azure?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackExtendAzure$Outbound + > + | null + | undefined; + gcp?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackExtendGcp$Outbound + > + | null + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2$outboundSchema: - z.ZodEnum< - typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2 - > = z.enum( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2, +export const PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAw$outboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendAzure$outboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendGcp$outboundSchema + )), + ).optional(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackExtendPlatformsToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendPlatforms: + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackExtendPlatforms, + ), ); +} /** @internal */ -export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackExtend$Outbound = { - albName?: string | null | undefined; - albNamespace?: string | null | undefined; - frontend: string; - provider: string; + description: string; + id: string; + platforms: + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms$Outbound; }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtend$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound, - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2 + PersistImportedDeploymentRequestPendingPreparedStackExtend$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtend > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum2$outboundSchema, + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtendPlatforms$outboundSchema + ), }); -export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2ToJSON( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2, +export function persistImportedDeploymentRequestPendingPreparedStackExtendToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtend: + PersistImportedDeploymentRequestPendingPreparedStackExtend, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema - .parse( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtend$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtend), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGatewayEnum2$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum2); - -/** @internal */ -export type PersistImportedDeploymentRequestProviderGkeGateway2$Outbound = { - provider: string; - staticAddressName?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackExtendUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackExtend$Outbound + | string; /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackExtendUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderGkeGateway2$Outbound, - PersistImportedDeploymentRequestProviderGkeGateway2 - > = z.object({ - provider: - PersistImportedDeploymentRequestProviderGkeGatewayEnum2$outboundSchema, - staticAddressName: z.nullable(z.string()).optional(), - }); + PersistImportedDeploymentRequestPendingPreparedStackExtendUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackExtendUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtend$outboundSchema + ), + z.string(), + ]); -export function persistImportedDeploymentRequestProviderGkeGateway2ToJSON( - persistImportedDeploymentRequestProviderGkeGateway2: - PersistImportedDeploymentRequestProviderGkeGateway2, +export function persistImportedDeploymentRequestPendingPreparedStackExtendUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackExtendUnion: + PersistImportedDeploymentRequestPendingPreparedStackExtendUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema.parse( - persistImportedDeploymentRequestProviderGkeGateway2, - ), + PersistImportedDeploymentRequestPendingPreparedStackExtendUnion$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackExtendUnion), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlbEnum2$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum2); - -/** @internal */ -export type PersistImportedDeploymentRequestProviderAwsAlb2$Outbound = { - ipAddressType?: string | null | undefined; - provider: string; - scheme: string; - subnetIds?: Array | undefined; - targetType: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackManagement1$Outbound = + { + extend: { + [k: string]: Array< + | PersistImportedDeploymentRequestPendingPreparedStackExtend$Outbound + | string + >; + }; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackManagement1$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAwsAlb2$Outbound, - PersistImportedDeploymentRequestProviderAwsAlb2 + PersistImportedDeploymentRequestPendingPreparedStackManagement1$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackManagement1 > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: - PersistImportedDeploymentRequestProviderAwsAlbEnum2$outboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackExtend$outboundSchema + ), + z.string(), + ])), + ), }); -export function persistImportedDeploymentRequestProviderAwsAlb2ToJSON( - persistImportedDeploymentRequestProviderAwsAlb2: - PersistImportedDeploymentRequestProviderAwsAlb2, +export function persistImportedDeploymentRequestPendingPreparedStackManagement1ToJSON( + persistImportedDeploymentRequestPendingPreparedStackManagement1: + PersistImportedDeploymentRequestPendingPreparedStackManagement1, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema.parse( - persistImportedDeploymentRequestProviderAwsAlb2, - ), + PersistImportedDeploymentRequestPendingPreparedStackManagement1$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackManagement1), ); } /** @internal */ -export type PersistImportedDeploymentRequestProviderUnion2$Outbound = - | PersistImportedDeploymentRequestProviderAwsAlb2$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway2$Outbound - | any; +export type PersistImportedDeploymentRequestPendingPreparedStackManagementUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackManagement1$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackManagement2$Outbound + | string; /** @internal */ -export const PersistImportedDeploymentRequestProviderUnion2$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackManagementUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderUnion2$Outbound, - PersistImportedDeploymentRequestProviderUnion2 + PersistImportedDeploymentRequestPendingPreparedStackManagementUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackManagementUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackManagement1$outboundSchema ), z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackManagement2$outboundSchema ), - z.any(), + PersistImportedDeploymentRequestPendingPreparedStackManagementEnum$outboundSchema, ]); -export function persistImportedDeploymentRequestProviderUnion2ToJSON( - persistImportedDeploymentRequestProviderUnion2: - PersistImportedDeploymentRequestProviderUnion2, +export function persistImportedDeploymentRequestPendingPreparedStackManagementUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackManagementUnion: + PersistImportedDeploymentRequestPendingPreparedStackManagementUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderUnion2$outboundSchema.parse( - persistImportedDeploymentRequestProviderUnion2, - ), + PersistImportedDeploymentRequestPendingPreparedStackManagementUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackManagementUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestRouteGateway1$Outbound = { - annotations?: { [k: string]: string } | undefined; - controller?: string | null | undefined; - gatewayClassName: string; - labels?: { [k: string]: string } | undefined; - listenerPort: number; - provider?: - | PersistImportedDeploymentRequestProviderAwsAlb2$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway2$Outbound - | any - | null - | undefined; - routeApi: "gateway"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestRouteGateway1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestRouteGateway1$Outbound, - PersistImportedDeploymentRequestRouteGateway1 + PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource > = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers2$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway2$outboundSchema - ), - z.any(), - ]), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), ).optional(), - routeApi: z.literal("gateway"), + resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestRouteGateway1ToJSON( - persistImportedDeploymentRequestRouteGateway1: - PersistImportedDeploymentRequestRouteGateway1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAwResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAwResource: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestRouteGateway1$outboundSchema.parse( - persistImportedDeploymentRequestRouteGateway1, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAwResource, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1$outboundSchema: - z.ZodEnum< - typeof PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1 - > = z.enum( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1, +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackProfileAwStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAwStack: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAwStack, + ), ); +} /** @internal */ -export type PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound = +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding$Outbound = { - albName?: string | null | undefined; - albNamespace?: string | null | undefined; - frontend: string; - provider: string; + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack$Outbound + | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound, - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1 + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainersEnum1$outboundSchema, + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAwResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAwStack$outboundSchema + ).optional(), }); -export function persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1ToJSON( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1: - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAwBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAwBinding: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding$outboundSchema .parse( - persistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1, + persistImportedDeploymentRequestPendingPreparedStackProfileAwBinding, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGatewayEnum1$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderGkeGatewayEnum1); +export const PersistImportedDeploymentRequestPendingPreparedStackProfileEffect$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackProfileEffect + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackProfileEffect); /** @internal */ -export type PersistImportedDeploymentRequestProviderGkeGateway1$Outbound = { - provider: string; - staticAddressName?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderGkeGateway1$Outbound, - PersistImportedDeploymentRequestProviderGkeGateway1 + PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant > = z.object({ - provider: - PersistImportedDeploymentRequestProviderGkeGatewayEnum1$outboundSchema, - staticAddressName: z.nullable(z.string()).optional(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestProviderGkeGateway1ToJSON( - persistImportedDeploymentRequestProviderGkeGateway1: - PersistImportedDeploymentRequestProviderGkeGateway1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAwGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAwGrant: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema.parse( - persistImportedDeploymentRequestProviderGkeGateway1, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAwGrant, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlbEnum1$outboundSchema: - z.ZodEnum = z - .enum(PersistImportedDeploymentRequestProviderAwsAlbEnum1); +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAw$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding$Outbound; + description?: string | null | undefined; + effect?: string | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant$Outbound; + label?: string | null | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAw$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackProfileAw$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAw + > = z.object({ + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAwBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + PersistImportedDeploymentRequestPendingPreparedStackProfileEffect$outboundSchema + .optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAwGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackProfileAwToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAw: + PersistImportedDeploymentRequestPendingPreparedStackProfileAw, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackProfileAw$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackProfileAw), + ); +} /** @internal */ -export type PersistImportedDeploymentRequestProviderAwsAlb1$Outbound = { - ipAddressType?: string | null | undefined; - provider: string; - scheme: string; - subnetIds?: Array | undefined; - targetType: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderAwsAlb1$Outbound, - PersistImportedDeploymentRequestProviderAwsAlb1 + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource > = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: - PersistImportedDeploymentRequestProviderAwsAlbEnum1$outboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), + scope: z.string(), }); -export function persistImportedDeploymentRequestProviderAwsAlb1ToJSON( - persistImportedDeploymentRequestProviderAwsAlb1: - PersistImportedDeploymentRequestProviderAwsAlb1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAzureResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureResource: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema.parse( - persistImportedDeploymentRequestProviderAwsAlb1, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProviderUnion1$Outbound = - | PersistImportedDeploymentRequestProviderAwsAlb1$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway1$Outbound - | any; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProviderUnion1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProviderUnion1$Outbound, - PersistImportedDeploymentRequestProviderUnion1 - > = z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema - ), - z.any(), - ]); + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack + > = z.object({ + scope: z.string(), + }); -export function persistImportedDeploymentRequestProviderUnion1ToJSON( - persistImportedDeploymentRequestProviderUnion1: - PersistImportedDeploymentRequestProviderUnion1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAzureStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureStack: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProviderUnion1$outboundSchema.parse( - persistImportedDeploymentRequestProviderUnion1, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestRouteIngress1$Outbound = { - annotations?: { [k: string]: string } | undefined; - controller?: string | null | undefined; - ingressClassName: string; - labels?: { [k: string]: string } | undefined; - provider?: - | PersistImportedDeploymentRequestProviderAwsAlb1$Outbound - | PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$Outbound - | PersistImportedDeploymentRequestProviderGkeGateway1$Outbound - | any - | null - | undefined; - routeApi: "ingress"; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestRouteIngress1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestRouteIngress1$Outbound, - PersistImportedDeploymentRequestRouteIngress1 + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding > = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestProviderAwsAlb1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderAzureApplicationGatewayForContainers1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestProviderGkeGateway1$outboundSchema - ), - z.any(), - ]), + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureStack$outboundSchema ).optional(), - routeApi: z.literal("ingress"), }); -export function persistImportedDeploymentRequestRouteIngress1ToJSON( - persistImportedDeploymentRequestRouteIngress1: - PersistImportedDeploymentRequestRouteIngress1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAzureBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestRouteIngress1$outboundSchema.parse( - persistImportedDeploymentRequestRouteIngress1, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestRouteUnion1$Outbound = - | PersistImportedDeploymentRequestRouteIngress1$Outbound - | PersistImportedDeploymentRequestRouteGateway1$Outbound; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestRouteUnion1$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestRouteUnion1$Outbound, - PersistImportedDeploymentRequestRouteUnion1 - > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestRouteIngress1$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestRouteGateway1$outboundSchema), - ]); + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function persistImportedDeploymentRequestRouteUnion1ToJSON( - persistImportedDeploymentRequestRouteUnion1: - PersistImportedDeploymentRequestRouteUnion1, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAzureGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestRouteUnion1$outboundSchema.parse( - persistImportedDeploymentRequestRouteUnion1, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExposureGenerated$Outbound = { - certificate: - | PersistImportedDeploymentRequestCertificateTLSSecretRef1$Outbound - | PersistImportedDeploymentRequestCertificateManagedAcmImport1$Outbound - | PersistImportedDeploymentRequestCertificateAwsAcmArn1$Outbound - | PersistImportedDeploymentRequestCertificateManagedTLSSecret1$Outbound - | PersistImportedDeploymentRequestCertificateNone1$Outbound; - mode: string; - route: - | PersistImportedDeploymentRequestRouteIngress1$Outbound - | PersistImportedDeploymentRequestRouteGateway1$Outbound; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileAzure$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExposureGenerated$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileAzure$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExposureGenerated$Outbound, - PersistImportedDeploymentRequestExposureGenerated + PersistImportedDeploymentRequestPendingPreparedStackProfileAzure$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileAzure > = z.object({ - certificate: z.union([ - z.lazy(() => - PersistImportedDeploymentRequestCertificateTLSSecretRef1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedAcmImport1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateAwsAcmArn1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateManagedTLSSecret1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestCertificateNone1$outboundSchema - ), - ]), - mode: PersistImportedDeploymentRequestModeGenerated$outboundSchema, - route: z.union([ - z.lazy(() => - PersistImportedDeploymentRequestRouteIngress1$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestRouteGateway1$outboundSchema - ), - ]), + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAzureGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestExposureGeneratedToJSON( - persistImportedDeploymentRequestExposureGenerated: - PersistImportedDeploymentRequestExposureGenerated, +export function persistImportedDeploymentRequestPendingPreparedStackProfileAzureToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileAzure: + PersistImportedDeploymentRequestPendingPreparedStackProfileAzure, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExposureGenerated$outboundSchema.parse( - persistImportedDeploymentRequestExposureGenerated, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileAzure$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackProfileAzure), ); } /** @internal */ -export const PersistImportedDeploymentRequestModeDisabled$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestModeDisabled, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestExposureDisabled$Outbound = { - mode: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExposureDisabled$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExposureDisabled$Outbound, - PersistImportedDeploymentRequestExposureDisabled + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource > = z.object({ - mode: PersistImportedDeploymentRequestModeDisabled$outboundSchema, + expression: z.string(), + title: z.string(), }); -export function persistImportedDeploymentRequestExposureDisabledToJSON( - persistImportedDeploymentRequestExposureDisabled: - PersistImportedDeploymentRequestExposureDisabled, +export function persistImportedDeploymentRequestPendingPreparedStackProfileConditionResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileConditionResource: + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExposureDisabled$outboundSchema.parse( - persistImportedDeploymentRequestExposureDisabled, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileConditionResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExposureUnion$Outbound = - | PersistImportedDeploymentRequestExposureCustom$Outbound - | PersistImportedDeploymentRequestExposureGenerated$Outbound - | PersistImportedDeploymentRequestExposureDisabled$Outbound +export type PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestExposureUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExposureUnion$Outbound, - PersistImportedDeploymentRequestExposureUnion + PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestExposureCustom$outboundSchema), - z.lazy(() => - PersistImportedDeploymentRequestExposureGenerated$outboundSchema - ), z.lazy(() => - PersistImportedDeploymentRequestExposureDisabled$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestExposureUnionToJSON( - persistImportedDeploymentRequestExposureUnion: - PersistImportedDeploymentRequestExposureUnion, +export function persistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion: + PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExposureUnion$outboundSchema.parse( - persistImportedDeploymentRequestExposureUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileResourceConditionUnion, + ), ); } -/** @internal */ -export type PersistImportedDeploymentRequestKubernetes$Outbound = { - cluster?: - | PersistImportedDeploymentRequestCluster$Outbound - | any - | null - | undefined; - exposure?: - | PersistImportedDeploymentRequestExposureCustom$Outbound - | PersistImportedDeploymentRequestExposureGenerated$Outbound - | PersistImportedDeploymentRequestExposureDisabled$Outbound - | any - | null - | undefined; -}; +/** @internal */ +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestKubernetes$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestKubernetes$Outbound, - PersistImportedDeploymentRequestKubernetes + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource > = z.object({ - cluster: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestCluster$outboundSchema), - z.any(), - ]), - ).optional(), - exposure: z.nullable( + condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestExposureCustom$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestExposureGenerated$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestExposureDisabled$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionResource$outboundSchema ), z.any(), ]), ).optional(), + scope: z.string(), }); -export function persistImportedDeploymentRequestKubernetesToJSON( - persistImportedDeploymentRequestKubernetes: - PersistImportedDeploymentRequestKubernetes, +export function persistImportedDeploymentRequestPendingPreparedStackProfileGcpResourceToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpResource: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestKubernetes$outboundSchema.parse( - persistImportedDeploymentRequestKubernetes, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestKubernetesUnion$Outbound = - | PersistImportedDeploymentRequestKubernetes$Outbound +export type PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$Outbound = + { + expression: string; + title: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackProfileConditionStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileConditionStack: + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileConditionStack, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestKubernetesUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestKubernetesUnion$Outbound, - PersistImportedDeploymentRequestKubernetesUnion + PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestKubernetes$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$outboundSchema + ), z.any(), ]); -export function persistImportedDeploymentRequestKubernetesUnionToJSON( - persistImportedDeploymentRequestKubernetesUnion: - PersistImportedDeploymentRequestKubernetesUnion, +export function persistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion: + PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestKubernetesUnion$outboundSchema.parse( - persistImportedDeploymentRequestKubernetesUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileStackConditionUnion, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeByoVnetAzure$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeByoVnetAzure, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound = { - application_gateway_subnet_name?: string | null | undefined; - private_endpoint_subnet_name?: string | null | undefined; - private_subnet_name: string; - public_subnet_name: string; - type: string; - vnet_resource_id: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound, - PersistImportedDeploymentRequestNetworkByoVnetAzure + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack > = z.object({ - applicationGatewaySubnetName: z.nullable(z.string()).optional(), - privateEndpointSubnetName: z.nullable(z.string()).optional(), - privateSubnetName: z.string(), - publicSubnetName: z.string(), - type: PersistImportedDeploymentRequestTypeByoVnetAzure$outboundSchema, - vnetResourceId: z.string(), - }).transform((v) => { - return remap$(v, { - applicationGatewaySubnetName: "application_gateway_subnet_name", - privateEndpointSubnetName: "private_endpoint_subnet_name", - privateSubnetName: "private_subnet_name", - publicSubnetName: "public_subnet_name", - vnetResourceId: "vnet_resource_id", - }); + condition: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileConditionStack$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -export function persistImportedDeploymentRequestNetworkByoVnetAzureToJSON( - persistImportedDeploymentRequestNetworkByoVnetAzure: - PersistImportedDeploymentRequestNetworkByoVnetAzure, +export function persistImportedDeploymentRequestPendingPreparedStackProfileGcpStackToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpStack: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema.parse( - persistImportedDeploymentRequestNetworkByoVnetAzure, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpStack, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeByoVpcGcp$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeByoVpcGcp, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound = { - network_name: string; - region: string; - subnet_name: string; - type: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound, - PersistImportedDeploymentRequestNetworkByoVpcGcp + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding > = z.object({ - networkName: z.string(), - region: z.string(), - subnetName: z.string(), - type: PersistImportedDeploymentRequestTypeByoVpcGcp$outboundSchema, - }).transform((v) => { - return remap$(v, { - networkName: "network_name", - subnetName: "subnet_name", - }); + resource: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpResource$outboundSchema + ).optional(), + stack: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpStack$outboundSchema + ).optional(), }); -export function persistImportedDeploymentRequestNetworkByoVpcGcpToJSON( - persistImportedDeploymentRequestNetworkByoVpcGcp: - PersistImportedDeploymentRequestNetworkByoVpcGcp, +export function persistImportedDeploymentRequestPendingPreparedStackProfileGcpBindingToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema.parse( - persistImportedDeploymentRequestNetworkByoVpcGcp, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeByoVpcAws$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeByoVpcAws, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound = { - private_subnet_ids: Array; - public_subnet_ids: Array; - security_group_ids?: Array | undefined; - type: string; - vpc_id: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound, - PersistImportedDeploymentRequestNetworkByoVpcAws + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant > = z.object({ - privateSubnetIds: z.array(z.string()), - publicSubnetIds: z.array(z.string()), - securityGroupIds: z.array(z.string()).optional(), - type: PersistImportedDeploymentRequestTypeByoVpcAws$outboundSchema, - vpcId: z.string(), - }).transform((v) => { - return remap$(v, { - privateSubnetIds: "private_subnet_ids", - publicSubnetIds: "public_subnet_ids", - securityGroupIds: "security_group_ids", - vpcId: "vpc_id", - }); + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestNetworkByoVpcAwsToJSON( - persistImportedDeploymentRequestNetworkByoVpcAws: - PersistImportedDeploymentRequestNetworkByoVpcAws, +export function persistImportedDeploymentRequestPendingPreparedStackProfileGcpGrantToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema.parse( - persistImportedDeploymentRequestNetworkByoVpcAws, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant, + ), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeCreate$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeCreate, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestNetworkCreate$Outbound = { - availability_zones?: number | undefined; - cidr?: string | null | undefined; - type: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileGcp$Outbound = + { + binding: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestNetworkCreate$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileGcp$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestNetworkCreate$Outbound, - PersistImportedDeploymentRequestNetworkCreate + PersistImportedDeploymentRequestPendingPreparedStackProfileGcp$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileGcp > = z.object({ - availabilityZones: z.int().optional(), - cidr: z.nullable(z.string()).optional(), - type: PersistImportedDeploymentRequestTypeCreate$outboundSchema, - }).transform((v) => { - return remap$(v, { - availabilityZones: "availability_zones", - }); + binding: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileGcpGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestNetworkCreateToJSON( - persistImportedDeploymentRequestNetworkCreate: - PersistImportedDeploymentRequestNetworkCreate, +export function persistImportedDeploymentRequestPendingPreparedStackProfileGcpToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileGcp: + PersistImportedDeploymentRequestPendingPreparedStackProfileGcp, ): string { return JSON.stringify( - PersistImportedDeploymentRequestNetworkCreate$outboundSchema.parse( - persistImportedDeploymentRequestNetworkCreate, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileGcp$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackProfileGcp), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeUseDefault$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeUseDefault, +export type PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms$Outbound = + { + aws?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackProfileAw$Outbound + > + | null + | undefined; + azure?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackProfileAzure$Outbound + > + | null + | undefined; + gcp?: + | Array< + PersistImportedDeploymentRequestPendingPreparedStackProfileGcp$Outbound + > + | null + | undefined; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAw$outboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileAzure$outboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfileGcp$outboundSchema + )), + ).optional(), + }); + +export function persistImportedDeploymentRequestPendingPreparedStackProfilePlatformsToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfilePlatforms: + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms$outboundSchema + .parse( + persistImportedDeploymentRequestPendingPreparedStackProfilePlatforms, + ), ); +} /** @internal */ -export type PersistImportedDeploymentRequestNetworkUseDefault$Outbound = { - type: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackProfile$Outbound = + { + description: string; + id: string; + platforms: + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms$Outbound; + }; /** @internal */ -export const PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfile$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestNetworkUseDefault$Outbound, - PersistImportedDeploymentRequestNetworkUseDefault + PersistImportedDeploymentRequestPendingPreparedStackProfile$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfile > = z.object({ - type: PersistImportedDeploymentRequestTypeUseDefault$outboundSchema, + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfilePlatforms$outboundSchema + ), }); -export function persistImportedDeploymentRequestNetworkUseDefaultToJSON( - persistImportedDeploymentRequestNetworkUseDefault: - PersistImportedDeploymentRequestNetworkUseDefault, +export function persistImportedDeploymentRequestPendingPreparedStackProfileToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfile: + PersistImportedDeploymentRequestPendingPreparedStackProfile, ): string { return JSON.stringify( - PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema.parse( - persistImportedDeploymentRequestNetworkUseDefault, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfile$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackProfile), ); } /** @internal */ -export type PersistImportedDeploymentRequestNetworkUnion$Outbound = - | PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound - | PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound - | PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound - | PersistImportedDeploymentRequestNetworkUseDefault$Outbound - | PersistImportedDeploymentRequestNetworkCreate$Outbound - | any; +export type PersistImportedDeploymentRequestPendingPreparedStackProfileUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStackProfile$Outbound + | string; /** @internal */ -export const PersistImportedDeploymentRequestNetworkUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackProfileUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestNetworkUnion$Outbound, - PersistImportedDeploymentRequestNetworkUnion + PersistImportedDeploymentRequestPendingPreparedStackProfileUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackProfileUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackProfile$outboundSchema ), - z.lazy(() => PersistImportedDeploymentRequestNetworkCreate$outboundSchema), - z.any(), + z.string(), ]); -export function persistImportedDeploymentRequestNetworkUnionToJSON( - persistImportedDeploymentRequestNetworkUnion: - PersistImportedDeploymentRequestNetworkUnion, +export function persistImportedDeploymentRequestPendingPreparedStackProfileUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackProfileUnion: + PersistImportedDeploymentRequestPendingPreparedStackProfileUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestNetworkUnion$outboundSchema.parse( - persistImportedDeploymentRequestNetworkUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackProfileUnion$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackProfileUnion), ); } /** @internal */ -export const PersistImportedDeploymentRequestTelemetry$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTelemetry, - ); - -/** @internal */ -export const PersistImportedDeploymentRequestUpdates$outboundSchema: z.ZodEnum< - typeof PersistImportedDeploymentRequestUpdates -> = z.enum(PersistImportedDeploymentRequestUpdates); - -/** @internal */ -export type PersistImportedDeploymentRequestStackSettings$Outbound = { - compute?: - | PersistImportedDeploymentRequestCompute$Outbound - | any - | null - | undefined; - deploymentModel?: string | undefined; - domains?: - | PersistImportedDeploymentRequestDomains$Outbound - | any - | null - | undefined; - externalBindings?: - | PersistImportedDeploymentRequestExternalBindings$Outbound - | null - | undefined; - heartbeats?: string | undefined; - kubernetes?: - | PersistImportedDeploymentRequestKubernetes$Outbound - | any - | null - | undefined; - network?: - | PersistImportedDeploymentRequestNetworkByoVpcAws$Outbound - | PersistImportedDeploymentRequestNetworkByoVpcGcp$Outbound - | PersistImportedDeploymentRequestNetworkByoVnetAzure$Outbound - | PersistImportedDeploymentRequestNetworkUseDefault$Outbound - | PersistImportedDeploymentRequestNetworkCreate$Outbound - | any - | null - | undefined; - telemetry?: string | undefined; - updates?: string | undefined; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackPermissions$Outbound = + { + management?: + | PersistImportedDeploymentRequestPendingPreparedStackManagement1$Outbound + | PersistImportedDeploymentRequestPendingPreparedStackManagement2$Outbound + | string + | undefined; + profiles: { + [k: string]: { + [k: string]: Array< + | PersistImportedDeploymentRequestPendingPreparedStackProfile$Outbound + | string + >; + }; + }; + }; /** @internal */ -export const PersistImportedDeploymentRequestStackSettings$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackPermissions$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestStackSettings$Outbound, - PersistImportedDeploymentRequestStackSettings + PersistImportedDeploymentRequestPendingPreparedStackPermissions$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackPermissions > = z.object({ - compute: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestCompute$outboundSchema), - z.any(), - ]), - ).optional(), - deploymentModel: - PersistImportedDeploymentRequestDeploymentModel$outboundSchema.optional(), - domains: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestDomains$outboundSchema), - z.any(), - ]), - ).optional(), - externalBindings: z.nullable( + management: z.union([ z.lazy(() => - PersistImportedDeploymentRequestExternalBindings$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStackManagement1$outboundSchema ), - ).optional(), - heartbeats: PersistImportedDeploymentRequestHeartbeats$outboundSchema - .optional(), - kubernetes: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestKubernetes$outboundSchema), - z.any(), - ]), - ).optional(), - network: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestNetworkByoVpcAws$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkByoVpcGcp$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkByoVnetAzure$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkUseDefault$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestNetworkCreate$outboundSchema + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackManagement2$outboundSchema + ), + PersistImportedDeploymentRequestPendingPreparedStackManagementEnum$outboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackProfile$outboundSchema + ), + z.string(), + ]), ), - z.any(), - ]), - ).optional(), - telemetry: PersistImportedDeploymentRequestTelemetry$outboundSchema - .optional(), - updates: PersistImportedDeploymentRequestUpdates$outboundSchema.optional(), - }); - -export function persistImportedDeploymentRequestStackSettingsToJSON( - persistImportedDeploymentRequestStackSettings: - PersistImportedDeploymentRequestStackSettings, -): string { - return JSON.stringify( - PersistImportedDeploymentRequestStackSettings$outboundSchema.parse( - persistImportedDeploymentRequestStackSettings, + ), ), - ); -} - -/** @internal */ -export const PersistImportedDeploymentRequestPlatformTest$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestPlatformTest, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestEnvironmentInfoTest$Outbound = { - testId: string; - platform: string; -}; - -/** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoTest$outboundSchema: - z.ZodType< - PersistImportedDeploymentRequestEnvironmentInfoTest$Outbound, - PersistImportedDeploymentRequestEnvironmentInfoTest - > = z.object({ - testId: z.string(), - platform: PersistImportedDeploymentRequestPlatformTest$outboundSchema, }); -export function persistImportedDeploymentRequestEnvironmentInfoTestToJSON( - persistImportedDeploymentRequestEnvironmentInfoTest: - PersistImportedDeploymentRequestEnvironmentInfoTest, +export function persistImportedDeploymentRequestPendingPreparedStackPermissionsToJSON( + persistImportedDeploymentRequestPendingPreparedStackPermissions: + PersistImportedDeploymentRequestPendingPreparedStackPermissions, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnvironmentInfoTest$outboundSchema.parse( - persistImportedDeploymentRequestEnvironmentInfoTest, - ), + PersistImportedDeploymentRequestPendingPreparedStackPermissions$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackPermissions), ); } /** @internal */ -export const PersistImportedDeploymentRequestPlatformLocal$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestPlatformLocal, - ); - -/** @internal */ -export type PersistImportedDeploymentRequestEnvironmentInfoLocal$Outbound = { - arch: string; - hostname: string; - os: string; - platform: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackConfig$Outbound = + { + id: string; + type: string; + [additionalProperties: string]: unknown; + }; /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoLocal$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackConfig$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestEnvironmentInfoLocal$Outbound, - PersistImportedDeploymentRequestEnvironmentInfoLocal + PersistImportedDeploymentRequestPendingPreparedStackConfig$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackConfig > = z.object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: PersistImportedDeploymentRequestPlatformLocal$outboundSchema, + id: z.string(), + type: z.string(), + additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(), + }).transform((v) => { + return { + ...v.additionalProperties, + ...remap$(v, { + additionalProperties: null, + }), + }; }); -export function persistImportedDeploymentRequestEnvironmentInfoLocalToJSON( - persistImportedDeploymentRequestEnvironmentInfoLocal: - PersistImportedDeploymentRequestEnvironmentInfoLocal, +export function persistImportedDeploymentRequestPendingPreparedStackConfigToJSON( + persistImportedDeploymentRequestPendingPreparedStackConfig: + PersistImportedDeploymentRequestPendingPreparedStackConfig, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnvironmentInfoLocal$outboundSchema.parse( - persistImportedDeploymentRequestEnvironmentInfoLocal, - ), + PersistImportedDeploymentRequestPendingPreparedStackConfig$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackConfig), ); } /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure$outboundSchema: - z.ZodEnum< - typeof PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure - > = z.enum(PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure); - -/** @internal */ -export type PersistImportedDeploymentRequestEnvironmentInfoAzure$Outbound = { - location: string; - subscriptionId: string; - tenantId: string; - platform: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackDependency$Outbound = + { + id: string; + type: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoAzure$outboundSchema: - z.ZodType< - PersistImportedDeploymentRequestEnvironmentInfoAzure$Outbound, - PersistImportedDeploymentRequestEnvironmentInfoAzure - > = z.object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: - PersistImportedDeploymentRequestEnvironmentInfoPlatformAzure$outboundSchema, +export const PersistImportedDeploymentRequestPendingPreparedStackDependency$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPendingPreparedStackDependency$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackDependency + > = z.object({ + id: z.string(), + type: z.string(), }); -export function persistImportedDeploymentRequestEnvironmentInfoAzureToJSON( - persistImportedDeploymentRequestEnvironmentInfoAzure: - PersistImportedDeploymentRequestEnvironmentInfoAzure, +export function persistImportedDeploymentRequestPendingPreparedStackDependencyToJSON( + persistImportedDeploymentRequestPendingPreparedStackDependency: + PersistImportedDeploymentRequestPendingPreparedStackDependency, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnvironmentInfoAzure$outboundSchema.parse( - persistImportedDeploymentRequestEnvironmentInfoAzure, - ), + PersistImportedDeploymentRequestPendingPreparedStackDependency$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackDependency), ); } /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoPlatformGcp$outboundSchema: - z.ZodEnum = - z.enum(PersistImportedDeploymentRequestEnvironmentInfoPlatformGcp); +export const PersistImportedDeploymentRequestPendingPreparedStackLifecycle$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackLifecycle + > = z.enum(PersistImportedDeploymentRequestPendingPreparedStackLifecycle); /** @internal */ -export type PersistImportedDeploymentRequestEnvironmentInfoGcp$Outbound = { - projectId: string; - projectNumber: string; - region: string; - platform: string; -}; +export type PersistImportedDeploymentRequestPendingPreparedStackResources$Outbound = + { + config: PersistImportedDeploymentRequestPendingPreparedStackConfig$Outbound; + dependencies: Array< + PersistImportedDeploymentRequestPendingPreparedStackDependency$Outbound + >; + enabledWhen?: string | null | undefined; + lifecycle: string; + remoteAccess?: boolean | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoGcp$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackResources$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestEnvironmentInfoGcp$Outbound, - PersistImportedDeploymentRequestEnvironmentInfoGcp + PersistImportedDeploymentRequestPendingPreparedStackResources$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackResources > = z.object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: - PersistImportedDeploymentRequestEnvironmentInfoPlatformGcp$outboundSchema, + config: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackConfig$outboundSchema + ), + dependencies: z.array( + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackDependency$outboundSchema + ), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: + PersistImportedDeploymentRequestPendingPreparedStackLifecycle$outboundSchema, + remoteAccess: z.boolean().optional(), }); -export function persistImportedDeploymentRequestEnvironmentInfoGcpToJSON( - persistImportedDeploymentRequestEnvironmentInfoGcp: - PersistImportedDeploymentRequestEnvironmentInfoGcp, +export function persistImportedDeploymentRequestPendingPreparedStackResourcesToJSON( + persistImportedDeploymentRequestPendingPreparedStackResources: + PersistImportedDeploymentRequestPendingPreparedStackResources, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnvironmentInfoGcp$outboundSchema.parse( - persistImportedDeploymentRequestEnvironmentInfoGcp, - ), + PersistImportedDeploymentRequestPendingPreparedStackResources$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackResources), ); } /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoPlatformAws$outboundSchema: - z.ZodEnum = - z.enum(PersistImportedDeploymentRequestEnvironmentInfoPlatformAws); +export const PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform + > = z.enum( + PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform, + ); /** @internal */ -export type PersistImportedDeploymentRequestEnvironmentInfoAws$Outbound = { - accountId: string; - region: string; - platform: string; +export type PersistImportedDeploymentRequestPendingPreparedStack$Outbound = { + id: string; + inputs?: + | Array + | undefined; + permissions?: + | PersistImportedDeploymentRequestPendingPreparedStackPermissions$Outbound + | undefined; + resources: { + [k: string]: + PersistImportedDeploymentRequestPendingPreparedStackResources$Outbound; + }; + supportedPlatforms?: Array | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoAws$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestEnvironmentInfoAws$Outbound, - PersistImportedDeploymentRequestEnvironmentInfoAws + PersistImportedDeploymentRequestPendingPreparedStack$Outbound, + PersistImportedDeploymentRequestPendingPreparedStack > = z.object({ - accountId: z.string(), - region: z.string(), - platform: - PersistImportedDeploymentRequestEnvironmentInfoPlatformAws$outboundSchema, + id: z.string(), + inputs: z.array( + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackInput$outboundSchema + ), + ).optional(), + permissions: z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackPermissions$outboundSchema + ).optional(), + resources: z.record( + z.string(), + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStackResources$outboundSchema + ), + ), + supportedPlatforms: z.nullable( + z.array( + PersistImportedDeploymentRequestPendingPreparedStackSupportedPlatform$outboundSchema, + ), + ).optional(), }); -export function persistImportedDeploymentRequestEnvironmentInfoAwsToJSON( - persistImportedDeploymentRequestEnvironmentInfoAws: - PersistImportedDeploymentRequestEnvironmentInfoAws, +export function persistImportedDeploymentRequestPendingPreparedStackToJSON( + persistImportedDeploymentRequestPendingPreparedStack: + PersistImportedDeploymentRequestPendingPreparedStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnvironmentInfoAws$outboundSchema.parse( - persistImportedDeploymentRequestEnvironmentInfoAws, + PersistImportedDeploymentRequestPendingPreparedStack$outboundSchema.parse( + persistImportedDeploymentRequestPendingPreparedStack, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestEnvironmentInfoUnion$Outbound = - | PersistImportedDeploymentRequestEnvironmentInfoGcp$Outbound - | PersistImportedDeploymentRequestEnvironmentInfoAzure$Outbound - | PersistImportedDeploymentRequestEnvironmentInfoLocal$Outbound - | PersistImportedDeploymentRequestEnvironmentInfoAws$Outbound - | PersistImportedDeploymentRequestEnvironmentInfoTest$Outbound +export type PersistImportedDeploymentRequestPendingPreparedStackUnion$Outbound = + | PersistImportedDeploymentRequestPendingPreparedStack$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestEnvironmentInfoUnion$outboundSchema: +export const PersistImportedDeploymentRequestPendingPreparedStackUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestEnvironmentInfoUnion$Outbound, - PersistImportedDeploymentRequestEnvironmentInfoUnion + PersistImportedDeploymentRequestPendingPreparedStackUnion$Outbound, + PersistImportedDeploymentRequestPendingPreparedStackUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestEnvironmentInfoGcp$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestEnvironmentInfoAzure$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestEnvironmentInfoLocal$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestEnvironmentInfoAws$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestEnvironmentInfoTest$outboundSchema + PersistImportedDeploymentRequestPendingPreparedStack$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestEnvironmentInfoUnionToJSON( - persistImportedDeploymentRequestEnvironmentInfoUnion: - PersistImportedDeploymentRequestEnvironmentInfoUnion, +export function persistImportedDeploymentRequestPendingPreparedStackUnionToJSON( + persistImportedDeploymentRequestPendingPreparedStackUnion: + PersistImportedDeploymentRequestPendingPreparedStackUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnvironmentInfoUnion$outboundSchema.parse( - persistImportedDeploymentRequestEnvironmentInfoUnion, - ), + PersistImportedDeploymentRequestPendingPreparedStackUnion$outboundSchema + .parse(persistImportedDeploymentRequestPendingPreparedStackUnion), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeStringList$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeStringList, - ); +export const PersistImportedDeploymentRequestPreparedStackTypeStringList$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPreparedStackTypeStringList + > = z.enum(PersistImportedDeploymentRequestPreparedStackTypeStringList); /** @internal */ -export type PersistImportedDeploymentRequestDefaultStringList$Outbound = { - type: string; - value: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackDefaultStringList$Outbound = + { + type: string; + value: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestDefaultStringList$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackDefaultStringList$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDefaultStringList$Outbound, - PersistImportedDeploymentRequestDefaultStringList + PersistImportedDeploymentRequestPreparedStackDefaultStringList$Outbound, + PersistImportedDeploymentRequestPreparedStackDefaultStringList > = z.object({ - type: PersistImportedDeploymentRequestTypeStringList$outboundSchema, + type: + PersistImportedDeploymentRequestPreparedStackTypeStringList$outboundSchema, value: z.array(z.string()), }); -export function persistImportedDeploymentRequestDefaultStringListToJSON( - persistImportedDeploymentRequestDefaultStringList: - PersistImportedDeploymentRequestDefaultStringList, +export function persistImportedDeploymentRequestPreparedStackDefaultStringListToJSON( + persistImportedDeploymentRequestPreparedStackDefaultStringList: + PersistImportedDeploymentRequestPreparedStackDefaultStringList, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDefaultStringList$outboundSchema.parse( - persistImportedDeploymentRequestDefaultStringList, - ), + PersistImportedDeploymentRequestPreparedStackDefaultStringList$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackDefaultStringList), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeBoolean$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeBoolean, - ); +export const PersistImportedDeploymentRequestPreparedStackTypeBoolean$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPreparedStackTypeBoolean); /** @internal */ -export type PersistImportedDeploymentRequestDefaultBoolean$Outbound = { - type: string; - value: boolean; -}; +export type PersistImportedDeploymentRequestPreparedStackDefaultBoolean$Outbound = + { + type: string; + value: boolean; + }; /** @internal */ -export const PersistImportedDeploymentRequestDefaultBoolean$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackDefaultBoolean$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDefaultBoolean$Outbound, - PersistImportedDeploymentRequestDefaultBoolean + PersistImportedDeploymentRequestPreparedStackDefaultBoolean$Outbound, + PersistImportedDeploymentRequestPreparedStackDefaultBoolean > = z.object({ - type: PersistImportedDeploymentRequestTypeBoolean$outboundSchema, + type: + PersistImportedDeploymentRequestPreparedStackTypeBoolean$outboundSchema, value: z.boolean(), }); -export function persistImportedDeploymentRequestDefaultBooleanToJSON( - persistImportedDeploymentRequestDefaultBoolean: - PersistImportedDeploymentRequestDefaultBoolean, +export function persistImportedDeploymentRequestPreparedStackDefaultBooleanToJSON( + persistImportedDeploymentRequestPreparedStackDefaultBoolean: + PersistImportedDeploymentRequestPreparedStackDefaultBoolean, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDefaultBoolean$outboundSchema.parse( - persistImportedDeploymentRequestDefaultBoolean, - ), + PersistImportedDeploymentRequestPreparedStackDefaultBoolean$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackDefaultBoolean), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeNumber$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeNumber, - ); +export const PersistImportedDeploymentRequestPreparedStackTypeNumber$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPreparedStackTypeNumber); /** @internal */ -export type PersistImportedDeploymentRequestDefaultNumber$Outbound = { - type: string; - value: string; -}; +export type PersistImportedDeploymentRequestPreparedStackDefaultNumber$Outbound = + { + type: string; + value: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestDefaultNumber$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackDefaultNumber$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDefaultNumber$Outbound, - PersistImportedDeploymentRequestDefaultNumber + PersistImportedDeploymentRequestPreparedStackDefaultNumber$Outbound, + PersistImportedDeploymentRequestPreparedStackDefaultNumber > = z.object({ - type: PersistImportedDeploymentRequestTypeNumber$outboundSchema, + type: + PersistImportedDeploymentRequestPreparedStackTypeNumber$outboundSchema, value: z.string(), }); -export function persistImportedDeploymentRequestDefaultNumberToJSON( - persistImportedDeploymentRequestDefaultNumber: - PersistImportedDeploymentRequestDefaultNumber, +export function persistImportedDeploymentRequestPreparedStackDefaultNumberToJSON( + persistImportedDeploymentRequestPreparedStackDefaultNumber: + PersistImportedDeploymentRequestPreparedStackDefaultNumber, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDefaultNumber$outboundSchema.parse( - persistImportedDeploymentRequestDefaultNumber, - ), + PersistImportedDeploymentRequestPreparedStackDefaultNumber$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackDefaultNumber), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeString$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeString, - ); +export const PersistImportedDeploymentRequestPreparedStackTypeString$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPreparedStackTypeString); /** @internal */ -export type PersistImportedDeploymentRequestDefaultString$Outbound = { - type: string; - value: string; -}; +export type PersistImportedDeploymentRequestPreparedStackDefaultString$Outbound = + { + type: string; + value: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestDefaultString$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackDefaultString$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDefaultString$Outbound, - PersistImportedDeploymentRequestDefaultString + PersistImportedDeploymentRequestPreparedStackDefaultString$Outbound, + PersistImportedDeploymentRequestPreparedStackDefaultString > = z.object({ - type: PersistImportedDeploymentRequestTypeString$outboundSchema, + type: + PersistImportedDeploymentRequestPreparedStackTypeString$outboundSchema, value: z.string(), }); -export function persistImportedDeploymentRequestDefaultStringToJSON( - persistImportedDeploymentRequestDefaultString: - PersistImportedDeploymentRequestDefaultString, +export function persistImportedDeploymentRequestPreparedStackDefaultStringToJSON( + persistImportedDeploymentRequestPreparedStackDefaultString: + PersistImportedDeploymentRequestPreparedStackDefaultString, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDefaultString$outboundSchema.parse( - persistImportedDeploymentRequestDefaultString, - ), + PersistImportedDeploymentRequestPreparedStackDefaultString$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackDefaultString), ); } /** @internal */ -export type PersistImportedDeploymentRequestDefaultUnion$Outbound = - | PersistImportedDeploymentRequestDefaultString$Outbound - | PersistImportedDeploymentRequestDefaultNumber$Outbound - | PersistImportedDeploymentRequestDefaultBoolean$Outbound - | PersistImportedDeploymentRequestDefaultStringList$Outbound +export type PersistImportedDeploymentRequestPreparedStackDefaultUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackDefaultString$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultNumber$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultBoolean$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultStringList$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestDefaultUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackDefaultUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDefaultUnion$Outbound, - PersistImportedDeploymentRequestDefaultUnion + PersistImportedDeploymentRequestPreparedStackDefaultUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackDefaultUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestDefaultString$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestDefaultNumber$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestDefaultBoolean$outboundSchema), z.lazy(() => - PersistImportedDeploymentRequestDefaultStringList$outboundSchema + PersistImportedDeploymentRequestPreparedStackDefaultString$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultNumber$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultBoolean$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultStringList$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestDefaultUnionToJSON( - persistImportedDeploymentRequestDefaultUnion: - PersistImportedDeploymentRequestDefaultUnion, +export function persistImportedDeploymentRequestPreparedStackDefaultUnionToJSON( + persistImportedDeploymentRequestPreparedStackDefaultUnion: + PersistImportedDeploymentRequestPreparedStackDefaultUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDefaultUnion$outboundSchema.parse( - persistImportedDeploymentRequestDefaultUnion, - ), + PersistImportedDeploymentRequestPreparedStackDefaultUnion$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackDefaultUnion), ); } /** @internal */ -export const PersistImportedDeploymentRequestTypeEnvEnum$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestTypeEnvEnum, - ); +export const PersistImportedDeploymentRequestPreparedStackTypeEnvEnum$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPreparedStackTypeEnvEnum); /** @internal */ -export type PersistImportedDeploymentRequestTypeUnion$Outbound = string | any; +export type PersistImportedDeploymentRequestPreparedStackTypeUnion$Outbound = + | string + | any; /** @internal */ -export const PersistImportedDeploymentRequestTypeUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackTypeUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestTypeUnion$Outbound, - PersistImportedDeploymentRequestTypeUnion + PersistImportedDeploymentRequestPreparedStackTypeUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackTypeUnion > = z.union([ - PersistImportedDeploymentRequestTypeEnvEnum$outboundSchema, + PersistImportedDeploymentRequestPreparedStackTypeEnvEnum$outboundSchema, z.any(), ]); -export function persistImportedDeploymentRequestTypeUnionToJSON( - persistImportedDeploymentRequestTypeUnion: - PersistImportedDeploymentRequestTypeUnion, +export function persistImportedDeploymentRequestPreparedStackTypeUnionToJSON( + persistImportedDeploymentRequestPreparedStackTypeUnion: + PersistImportedDeploymentRequestPreparedStackTypeUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestTypeUnion$outboundSchema.parse( - persistImportedDeploymentRequestTypeUnion, + PersistImportedDeploymentRequestPreparedStackTypeUnion$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackTypeUnion, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestEnv$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackEnv$Outbound = { name: string; targetResources?: Array | null | undefined; type?: string | any | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestEnv$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestEnv$Outbound, - PersistImportedDeploymentRequestEnv -> = z.object({ - name: z.string(), - targetResources: z.nullable(z.array(z.string())).optional(), - type: z.nullable( - z.union([ - PersistImportedDeploymentRequestTypeEnvEnum$outboundSchema, - z.any(), - ]), - ).optional(), -}); +export const PersistImportedDeploymentRequestPreparedStackEnv$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackEnv$Outbound, + PersistImportedDeploymentRequestPreparedStackEnv + > = z.object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + PersistImportedDeploymentRequestPreparedStackTypeEnvEnum$outboundSchema, + z.any(), + ]), + ).optional(), + }); -export function persistImportedDeploymentRequestEnvToJSON( - persistImportedDeploymentRequestEnv: PersistImportedDeploymentRequestEnv, +export function persistImportedDeploymentRequestPreparedStackEnvToJSON( + persistImportedDeploymentRequestPreparedStackEnv: + PersistImportedDeploymentRequestPreparedStackEnv, ): string { return JSON.stringify( - PersistImportedDeploymentRequestEnv$outboundSchema.parse( - persistImportedDeploymentRequestEnv, + PersistImportedDeploymentRequestPreparedStackEnv$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackEnv, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestKind$outboundSchema: z.ZodEnum< - typeof PersistImportedDeploymentRequestKind -> = z.enum(PersistImportedDeploymentRequestKind); +export const PersistImportedDeploymentRequestPreparedStackKind$outboundSchema: + z.ZodEnum = z.enum( + PersistImportedDeploymentRequestPreparedStackKind, + ); /** @internal */ export const PersistImportedDeploymentRequestPreparedStackPlatform$outboundSchema: @@ -6242,13 +11357,12 @@ export const PersistImportedDeploymentRequestPreparedStackPlatform$outboundSchem .enum(PersistImportedDeploymentRequestPreparedStackPlatform); /** @internal */ -export const PersistImportedDeploymentRequestProvidedBy$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestProvidedBy, - ); +export const PersistImportedDeploymentRequestPreparedStackProvidedBy$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPreparedStackProvidedBy); /** @internal */ -export type PersistImportedDeploymentRequestValidation$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackValidation$Outbound = { format?: string | null | undefined; max?: string | null | undefined; maxItems?: number | null | undefined; @@ -6261,10 +11375,10 @@ export type PersistImportedDeploymentRequestValidation$Outbound = { }; /** @internal */ -export const PersistImportedDeploymentRequestValidation$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackValidation$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestValidation$Outbound, - PersistImportedDeploymentRequestValidation + PersistImportedDeploymentRequestPreparedStackValidation$Outbound, + PersistImportedDeploymentRequestPreparedStackValidation > = z.object({ format: z.nullable(z.string()).optional(), max: z.nullable(z.string()).optional(), @@ -6277,55 +11391,57 @@ export const PersistImportedDeploymentRequestValidation$outboundSchema: values: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestValidationToJSON( - persistImportedDeploymentRequestValidation: - PersistImportedDeploymentRequestValidation, +export function persistImportedDeploymentRequestPreparedStackValidationToJSON( + persistImportedDeploymentRequestPreparedStackValidation: + PersistImportedDeploymentRequestPreparedStackValidation, ): string { return JSON.stringify( - PersistImportedDeploymentRequestValidation$outboundSchema.parse( - persistImportedDeploymentRequestValidation, - ), + PersistImportedDeploymentRequestPreparedStackValidation$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackValidation), ); } /** @internal */ -export type PersistImportedDeploymentRequestValidationUnion$Outbound = - | PersistImportedDeploymentRequestValidation$Outbound +export type PersistImportedDeploymentRequestPreparedStackValidationUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackValidation$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestValidationUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackValidationUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestValidationUnion$Outbound, - PersistImportedDeploymentRequestValidationUnion + PersistImportedDeploymentRequestPreparedStackValidationUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackValidationUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestValidation$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackValidation$outboundSchema + ), z.any(), ]); -export function persistImportedDeploymentRequestValidationUnionToJSON( - persistImportedDeploymentRequestValidationUnion: - PersistImportedDeploymentRequestValidationUnion, +export function persistImportedDeploymentRequestPreparedStackValidationUnionToJSON( + persistImportedDeploymentRequestPreparedStackValidationUnion: + PersistImportedDeploymentRequestPreparedStackValidationUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestValidationUnion$outboundSchema.parse( - persistImportedDeploymentRequestValidationUnion, - ), + PersistImportedDeploymentRequestPreparedStackValidationUnion$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackValidationUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestInput$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackInput$Outbound = { default?: - | PersistImportedDeploymentRequestDefaultString$Outbound - | PersistImportedDeploymentRequestDefaultNumber$Outbound - | PersistImportedDeploymentRequestDefaultBoolean$Outbound - | PersistImportedDeploymentRequestDefaultStringList$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultString$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultNumber$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultBoolean$Outbound + | PersistImportedDeploymentRequestPreparedStackDefaultStringList$Outbound | any | null | undefined; description: string; - env?: Array | undefined; + env?: + | Array + | undefined; id: string; kind: string; label: string; @@ -6334,85 +11450,93 @@ export type PersistImportedDeploymentRequestInput$Outbound = { providedBy: Array; required: boolean; validation?: - | PersistImportedDeploymentRequestValidation$Outbound + | PersistImportedDeploymentRequestPreparedStackValidation$Outbound | any | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestInput$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestInput$Outbound, - PersistImportedDeploymentRequestInput -> = z.object({ - default: z.nullable( - z.union([ - z.lazy(() => - PersistImportedDeploymentRequestDefaultString$outboundSchema - ), - z.lazy(() => - PersistImportedDeploymentRequestDefaultNumber$outboundSchema - ), +export const PersistImportedDeploymentRequestPreparedStackInput$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackInput$Outbound, + PersistImportedDeploymentRequestPreparedStackInput + > = z.object({ + default: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultString$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultNumber$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultBoolean$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDefaultStringList$outboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( z.lazy(() => - PersistImportedDeploymentRequestDefaultBoolean$outboundSchema + PersistImportedDeploymentRequestPreparedStackEnv$outboundSchema ), - z.lazy(() => - PersistImportedDeploymentRequestDefaultStringList$outboundSchema + ).optional(), + id: z.string(), + kind: PersistImportedDeploymentRequestPreparedStackKind$outboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array( + PersistImportedDeploymentRequestPreparedStackPlatform$outboundSchema, ), - z.any(), - ]), - ).optional(), - description: z.string(), - env: z.array(z.lazy(() => PersistImportedDeploymentRequestEnv$outboundSchema)) - .optional(), - id: z.string(), - kind: PersistImportedDeploymentRequestKind$outboundSchema, - label: z.string(), - placeholder: z.nullable(z.string()).optional(), - platforms: z.nullable( - z.array( - PersistImportedDeploymentRequestPreparedStackPlatform$outboundSchema, + ).optional(), + providedBy: z.array( + PersistImportedDeploymentRequestPreparedStackProvidedBy$outboundSchema, ), - ).optional(), - providedBy: z.array( - PersistImportedDeploymentRequestProvidedBy$outboundSchema, - ), - required: z.boolean(), - validation: z.nullable( - z.union([ - z.lazy(() => PersistImportedDeploymentRequestValidation$outboundSchema), - z.any(), - ]), - ).optional(), -}); + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackValidation$outboundSchema + ), + z.any(), + ]), + ).optional(), + }); -export function persistImportedDeploymentRequestInputToJSON( - persistImportedDeploymentRequestInput: PersistImportedDeploymentRequestInput, +export function persistImportedDeploymentRequestPreparedStackInputToJSON( + persistImportedDeploymentRequestPreparedStackInput: + PersistImportedDeploymentRequestPreparedStackInput, ): string { return JSON.stringify( - PersistImportedDeploymentRequestInput$outboundSchema.parse( - persistImportedDeploymentRequestInput, + PersistImportedDeploymentRequestPreparedStackInput$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackInput, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestManagementEnum$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestManagementEnum, - ); +export const PersistImportedDeploymentRequestPreparedStackManagementEnum$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPreparedStackManagementEnum + > = z.enum(PersistImportedDeploymentRequestPreparedStackManagementEnum); /** @internal */ -export type PersistImportedDeploymentRequestOverrideAwResource$Outbound = { - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - resources: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAwResource$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAwResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAwResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAwResource$Outbound, - PersistImportedDeploymentRequestOverrideAwResource + PersistImportedDeploymentRequestPreparedStackOverrideAwResource$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAwResource > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -6420,28 +11544,28 @@ export const PersistImportedDeploymentRequestOverrideAwResource$outboundSchema: resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestOverrideAwResourceToJSON( - persistImportedDeploymentRequestOverrideAwResource: - PersistImportedDeploymentRequestOverrideAwResource, +export function persistImportedDeploymentRequestPreparedStackOverrideAwResourceToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAwResource: + PersistImportedDeploymentRequestPreparedStackOverrideAwResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAwResource$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAwResource, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAwResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAwResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAwStack$Outbound = { - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - resources: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAwStack$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAwStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAwStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAwStack$Outbound, - PersistImportedDeploymentRequestOverrideAwStack + PersistImportedDeploymentRequestPreparedStackOverrideAwStack$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAwStack > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -6449,70 +11573,72 @@ export const PersistImportedDeploymentRequestOverrideAwStack$outboundSchema: resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestOverrideAwStackToJSON( - persistImportedDeploymentRequestOverrideAwStack: - PersistImportedDeploymentRequestOverrideAwStack, +export function persistImportedDeploymentRequestPreparedStackOverrideAwStackToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAwStack: + PersistImportedDeploymentRequestPreparedStackOverrideAwStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAwStack$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAwStack, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAwStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAwStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAwBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestOverrideAwResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestOverrideAwStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAwBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackOverrideAwResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackOverrideAwStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAwBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAwBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAwBinding$Outbound, - PersistImportedDeploymentRequestOverrideAwBinding + PersistImportedDeploymentRequestPreparedStackOverrideAwBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAwBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestOverrideAwResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAwResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestOverrideAwStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAwStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestOverrideAwBindingToJSON( - persistImportedDeploymentRequestOverrideAwBinding: - PersistImportedDeploymentRequestOverrideAwBinding, +export function persistImportedDeploymentRequestPreparedStackOverrideAwBindingToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAwBinding: + PersistImportedDeploymentRequestPreparedStackOverrideAwBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAwBinding$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAwBinding, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAwBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAwBinding), ); } /** @internal */ -export const PersistImportedDeploymentRequestOverrideEffect$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestOverrideEffect, - ); +export const PersistImportedDeploymentRequestPreparedStackOverrideEffect$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPreparedStackOverrideEffect + > = z.enum(PersistImportedDeploymentRequestPreparedStackOverrideEffect); /** @internal */ -export type PersistImportedDeploymentRequestOverrideAwGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAwGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAwGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAwGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAwGrant$Outbound, - PersistImportedDeploymentRequestOverrideAwGrant + PersistImportedDeploymentRequestPreparedStackOverrideAwGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAwGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -6521,154 +11647,157 @@ export const PersistImportedDeploymentRequestOverrideAwGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestOverrideAwGrantToJSON( - persistImportedDeploymentRequestOverrideAwGrant: - PersistImportedDeploymentRequestOverrideAwGrant, +export function persistImportedDeploymentRequestPreparedStackOverrideAwGrantToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAwGrant: + PersistImportedDeploymentRequestPreparedStackOverrideAwGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAwGrant$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAwGrant, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAwGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAwGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAw$Outbound = { - binding: PersistImportedDeploymentRequestOverrideAwBinding$Outbound; +export type PersistImportedDeploymentRequestPreparedStackOverrideAw$Outbound = { + binding: + PersistImportedDeploymentRequestPreparedStackOverrideAwBinding$Outbound; description?: string | null | undefined; effect?: string | undefined; - grant: PersistImportedDeploymentRequestOverrideAwGrant$Outbound; + grant: PersistImportedDeploymentRequestPreparedStackOverrideAwGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAw$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAw$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAw$Outbound, - PersistImportedDeploymentRequestOverrideAw + PersistImportedDeploymentRequestPreparedStackOverrideAw$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAw > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestOverrideAwBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAwBinding$outboundSchema ), description: z.nullable(z.string()).optional(), - effect: PersistImportedDeploymentRequestOverrideEffect$outboundSchema - .optional(), + effect: + PersistImportedDeploymentRequestPreparedStackOverrideEffect$outboundSchema + .optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestOverrideAwGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAwGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestOverrideAwToJSON( - persistImportedDeploymentRequestOverrideAw: - PersistImportedDeploymentRequestOverrideAw, +export function persistImportedDeploymentRequestPreparedStackOverrideAwToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAw: + PersistImportedDeploymentRequestPreparedStackOverrideAw, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAw$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAw, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAw$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAw), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAzureResource$Outbound = { - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureResource$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAzureResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAzureResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAzureResource$Outbound, - PersistImportedDeploymentRequestOverrideAzureResource + PersistImportedDeploymentRequestPreparedStackOverrideAzureResource$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAzureResource > = z.object({ scope: z.string(), }); -export function persistImportedDeploymentRequestOverrideAzureResourceToJSON( - persistImportedDeploymentRequestOverrideAzureResource: - PersistImportedDeploymentRequestOverrideAzureResource, +export function persistImportedDeploymentRequestPreparedStackOverrideAzureResourceToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAzureResource: + PersistImportedDeploymentRequestPreparedStackOverrideAzureResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAzureResource$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAzureResource, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAzureResource$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackOverrideAzureResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAzureStack$Outbound = { - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAzureStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAzureStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAzureStack$Outbound, - PersistImportedDeploymentRequestOverrideAzureStack + PersistImportedDeploymentRequestPreparedStackOverrideAzureStack$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAzureStack > = z.object({ scope: z.string(), }); -export function persistImportedDeploymentRequestOverrideAzureStackToJSON( - persistImportedDeploymentRequestOverrideAzureStack: - PersistImportedDeploymentRequestOverrideAzureStack, +export function persistImportedDeploymentRequestPreparedStackOverrideAzureStackToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAzureStack: + PersistImportedDeploymentRequestPreparedStackOverrideAzureStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAzureStack$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAzureStack, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAzureStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAzureStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAzureBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestOverrideAzureResource$Outbound - | undefined; - stack?: - | PersistImportedDeploymentRequestOverrideAzureStack$Outbound - | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackOverrideAzureResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackOverrideAzureStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAzureBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAzureBinding$Outbound, - PersistImportedDeploymentRequestOverrideAzureBinding + PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestOverrideAzureResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAzureResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestOverrideAzureStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAzureStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestOverrideAzureBindingToJSON( - persistImportedDeploymentRequestOverrideAzureBinding: - PersistImportedDeploymentRequestOverrideAzureBinding, +export function persistImportedDeploymentRequestPreparedStackOverrideAzureBindingToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAzureBinding: + PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAzureBinding$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAzureBinding, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAzureBinding), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAzureGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAzureGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAzureGrant$Outbound, - PersistImportedDeploymentRequestOverrideAzureGrant + PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -6677,126 +11806,132 @@ export const PersistImportedDeploymentRequestOverrideAzureGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestOverrideAzureGrantToJSON( - persistImportedDeploymentRequestOverrideAzureGrant: - PersistImportedDeploymentRequestOverrideAzureGrant, +export function persistImportedDeploymentRequestPreparedStackOverrideAzureGrantToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAzureGrant: + PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAzureGrant$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAzureGrant, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAzureGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideAzure$Outbound = { - binding: PersistImportedDeploymentRequestOverrideAzureBinding$Outbound; - description?: string | null | undefined; - grant: PersistImportedDeploymentRequestOverrideAzureGrant$Outbound; - label?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideAzure$Outbound = + { + binding: + PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideAzure$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideAzure$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideAzure$Outbound, - PersistImportedDeploymentRequestOverrideAzure + PersistImportedDeploymentRequestPreparedStackOverrideAzure$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideAzure > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestOverrideAzureBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAzureBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestOverrideAzureGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAzureGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestOverrideAzureToJSON( - persistImportedDeploymentRequestOverrideAzure: - PersistImportedDeploymentRequestOverrideAzure, +export function persistImportedDeploymentRequestPreparedStackOverrideAzureToJSON( + persistImportedDeploymentRequestPreparedStackOverrideAzure: + PersistImportedDeploymentRequestPreparedStackOverrideAzure, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideAzure$outboundSchema.parse( - persistImportedDeploymentRequestOverrideAzure, - ), + PersistImportedDeploymentRequestPreparedStackOverrideAzure$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideAzure), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideConditionResource$Outbound = +export type PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$Outbound = { expression: string; title: string; }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideConditionResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideConditionResource$Outbound, - PersistImportedDeploymentRequestOverrideConditionResource + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource > = z.object({ expression: z.string(), title: z.string(), }); -export function persistImportedDeploymentRequestOverrideConditionResourceToJSON( - persistImportedDeploymentRequestOverrideConditionResource: - PersistImportedDeploymentRequestOverrideConditionResource, +export function persistImportedDeploymentRequestPreparedStackOverrideConditionResourceToJSON( + persistImportedDeploymentRequestPreparedStackOverrideConditionResource: + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideConditionResource$outboundSchema - .parse(persistImportedDeploymentRequestOverrideConditionResource), + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackOverrideConditionResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideResourceConditionUnion$Outbound = - | PersistImportedDeploymentRequestOverrideConditionResource$Outbound +export type PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestOverrideResourceConditionUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideResourceConditionUnion$Outbound, - PersistImportedDeploymentRequestOverrideResourceConditionUnion + PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestOverrideConditionResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestOverrideResourceConditionUnionToJSON( - persistImportedDeploymentRequestOverrideResourceConditionUnion: - PersistImportedDeploymentRequestOverrideResourceConditionUnion, +export function persistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnionToJSON( + persistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion: + PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideResourceConditionUnion$outboundSchema - .parse(persistImportedDeploymentRequestOverrideResourceConditionUnion), + PersistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackOverrideResourceConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideGcpResource$Outbound = { - condition?: - | PersistImportedDeploymentRequestOverrideConditionResource$Outbound - | any - | null - | undefined; - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpResource$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideGcpResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideGcpResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideGcpResource$Outbound, - PersistImportedDeploymentRequestOverrideGcpResource + PersistImportedDeploymentRequestPreparedStackOverrideGcpResource$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideGcpResource > = z.object({ condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestOverrideConditionResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideConditionResource$outboundSchema ), z.any(), ]), @@ -6804,91 +11939,95 @@ export const PersistImportedDeploymentRequestOverrideGcpResource$outboundSchema: scope: z.string(), }); -export function persistImportedDeploymentRequestOverrideGcpResourceToJSON( - persistImportedDeploymentRequestOverrideGcpResource: - PersistImportedDeploymentRequestOverrideGcpResource, +export function persistImportedDeploymentRequestPreparedStackOverrideGcpResourceToJSON( + persistImportedDeploymentRequestPreparedStackOverrideGcpResource: + PersistImportedDeploymentRequestPreparedStackOverrideGcpResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideGcpResource$outboundSchema.parse( - persistImportedDeploymentRequestOverrideGcpResource, - ), + PersistImportedDeploymentRequestPreparedStackOverrideGcpResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideGcpResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideConditionStack$Outbound = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideConditionStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideConditionStack$Outbound, - PersistImportedDeploymentRequestOverrideConditionStack + PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideConditionStack > = z.object({ expression: z.string(), title: z.string(), }); -export function persistImportedDeploymentRequestOverrideConditionStackToJSON( - persistImportedDeploymentRequestOverrideConditionStack: - PersistImportedDeploymentRequestOverrideConditionStack, +export function persistImportedDeploymentRequestPreparedStackOverrideConditionStackToJSON( + persistImportedDeploymentRequestPreparedStackOverrideConditionStack: + PersistImportedDeploymentRequestPreparedStackOverrideConditionStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideConditionStack$outboundSchema.parse( - persistImportedDeploymentRequestOverrideConditionStack, - ), + PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackOverrideConditionStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideStackConditionUnion$Outbound = - | PersistImportedDeploymentRequestOverrideConditionStack$Outbound +export type PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestOverrideStackConditionUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideStackConditionUnion$Outbound, - PersistImportedDeploymentRequestOverrideStackConditionUnion + PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestOverrideConditionStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestOverrideStackConditionUnionToJSON( - persistImportedDeploymentRequestOverrideStackConditionUnion: - PersistImportedDeploymentRequestOverrideStackConditionUnion, +export function persistImportedDeploymentRequestPreparedStackOverrideStackConditionUnionToJSON( + persistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion: + PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideStackConditionUnion$outboundSchema - .parse(persistImportedDeploymentRequestOverrideStackConditionUnion), + PersistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackOverrideStackConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideGcpStack$Outbound = { - condition?: - | PersistImportedDeploymentRequestOverrideConditionStack$Outbound - | any - | null - | undefined; - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpStack$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideGcpStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideGcpStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideGcpStack$Outbound, - PersistImportedDeploymentRequestOverrideGcpStack + PersistImportedDeploymentRequestPreparedStackOverrideGcpStack$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideGcpStack > = z.object({ condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestOverrideConditionStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideConditionStack$outboundSchema ), z.any(), ]), @@ -6896,64 +12035,66 @@ export const PersistImportedDeploymentRequestOverrideGcpStack$outboundSchema: scope: z.string(), }); -export function persistImportedDeploymentRequestOverrideGcpStackToJSON( - persistImportedDeploymentRequestOverrideGcpStack: - PersistImportedDeploymentRequestOverrideGcpStack, +export function persistImportedDeploymentRequestPreparedStackOverrideGcpStackToJSON( + persistImportedDeploymentRequestPreparedStackOverrideGcpStack: + PersistImportedDeploymentRequestPreparedStackOverrideGcpStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideGcpStack$outboundSchema.parse( - persistImportedDeploymentRequestOverrideGcpStack, - ), + PersistImportedDeploymentRequestPreparedStackOverrideGcpStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideGcpStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideGcpBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestOverrideGcpResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestOverrideGcpStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackOverrideGcpResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackOverrideGcpStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideGcpBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideGcpBinding$Outbound, - PersistImportedDeploymentRequestOverrideGcpBinding + PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestOverrideGcpResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideGcpResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestOverrideGcpStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideGcpStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestOverrideGcpBindingToJSON( - persistImportedDeploymentRequestOverrideGcpBinding: - PersistImportedDeploymentRequestOverrideGcpBinding, +export function persistImportedDeploymentRequestPreparedStackOverrideGcpBindingToJSON( + persistImportedDeploymentRequestPreparedStackOverrideGcpBinding: + PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideGcpBinding$outboundSchema.parse( - persistImportedDeploymentRequestOverrideGcpBinding, - ), + PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideGcpBinding), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideGcpGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideGcpGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideGcpGrant$Outbound, - PersistImportedDeploymentRequestOverrideGcpGrant + PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -6962,204 +12103,213 @@ export const PersistImportedDeploymentRequestOverrideGcpGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestOverrideGcpGrantToJSON( - persistImportedDeploymentRequestOverrideGcpGrant: - PersistImportedDeploymentRequestOverrideGcpGrant, +export function persistImportedDeploymentRequestPreparedStackOverrideGcpGrantToJSON( + persistImportedDeploymentRequestPreparedStackOverrideGcpGrant: + PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideGcpGrant$outboundSchema.parse( - persistImportedDeploymentRequestOverrideGcpGrant, - ), + PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideGcpGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideGcp$Outbound = { - binding: PersistImportedDeploymentRequestOverrideGcpBinding$Outbound; - description?: string | null | undefined; - grant: PersistImportedDeploymentRequestOverrideGcpGrant$Outbound; - label?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverrideGcp$Outbound = + { + binding: + PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverrideGcp$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideGcp$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideGcp$Outbound, - PersistImportedDeploymentRequestOverrideGcp + PersistImportedDeploymentRequestPreparedStackOverrideGcp$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideGcp > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestOverrideGcpBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideGcpBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestOverrideGcpGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideGcpGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestOverrideGcpToJSON( - persistImportedDeploymentRequestOverrideGcp: - PersistImportedDeploymentRequestOverrideGcp, +export function persistImportedDeploymentRequestPreparedStackOverrideGcpToJSON( + persistImportedDeploymentRequestPreparedStackOverrideGcp: + PersistImportedDeploymentRequestPreparedStackOverrideGcp, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideGcp$outboundSchema.parse( - persistImportedDeploymentRequestOverrideGcp, - ), + PersistImportedDeploymentRequestPreparedStackOverrideGcp$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideGcp), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverridePlatforms$Outbound = { - aws?: - | Array - | null - | undefined; - azure?: - | Array - | null - | undefined; - gcp?: - | Array - | null - | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackOverridePlatforms$Outbound = + { + aws?: + | Array + | null + | undefined; + azure?: + | Array< + PersistImportedDeploymentRequestPreparedStackOverrideAzure$Outbound + > + | null + | undefined; + gcp?: + | Array + | null + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestOverridePlatforms$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverridePlatforms$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverridePlatforms$Outbound, - PersistImportedDeploymentRequestOverridePlatforms + PersistImportedDeploymentRequestPreparedStackOverridePlatforms$Outbound, + PersistImportedDeploymentRequestPreparedStackOverridePlatforms > = z.object({ aws: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestOverrideAw$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAw$outboundSchema )), ).optional(), azure: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestOverrideAzure$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideAzure$outboundSchema )), ).optional(), gcp: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestOverrideGcp$outboundSchema + PersistImportedDeploymentRequestPreparedStackOverrideGcp$outboundSchema )), ).optional(), }); -export function persistImportedDeploymentRequestOverridePlatformsToJSON( - persistImportedDeploymentRequestOverridePlatforms: - PersistImportedDeploymentRequestOverridePlatforms, +export function persistImportedDeploymentRequestPreparedStackOverridePlatformsToJSON( + persistImportedDeploymentRequestPreparedStackOverridePlatforms: + PersistImportedDeploymentRequestPreparedStackOverridePlatforms, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverridePlatforms$outboundSchema.parse( - persistImportedDeploymentRequestOverridePlatforms, - ), + PersistImportedDeploymentRequestPreparedStackOverridePlatforms$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverridePlatforms), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverride$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackOverride$Outbound = { description: string; id: string; - platforms: PersistImportedDeploymentRequestOverridePlatforms$Outbound; + platforms: + PersistImportedDeploymentRequestPreparedStackOverridePlatforms$Outbound; }; /** @internal */ -export const PersistImportedDeploymentRequestOverride$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverride$Outbound, - PersistImportedDeploymentRequestOverride -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - PersistImportedDeploymentRequestOverridePlatforms$outboundSchema - ), -}); +export const PersistImportedDeploymentRequestPreparedStackOverride$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackOverride$Outbound, + PersistImportedDeploymentRequestPreparedStackOverride + > = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + PersistImportedDeploymentRequestPreparedStackOverridePlatforms$outboundSchema + ), + }); -export function persistImportedDeploymentRequestOverrideToJSON( - persistImportedDeploymentRequestOverride: - PersistImportedDeploymentRequestOverride, +export function persistImportedDeploymentRequestPreparedStackOverrideToJSON( + persistImportedDeploymentRequestPreparedStackOverride: + PersistImportedDeploymentRequestPreparedStackOverride, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverride$outboundSchema.parse( - persistImportedDeploymentRequestOverride, + PersistImportedDeploymentRequestPreparedStackOverride$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackOverride, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestOverrideUnion$Outbound = - | PersistImportedDeploymentRequestOverride$Outbound +export type PersistImportedDeploymentRequestPreparedStackOverrideUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackOverride$Outbound | string; /** @internal */ -export const PersistImportedDeploymentRequestOverrideUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackOverrideUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestOverrideUnion$Outbound, - PersistImportedDeploymentRequestOverrideUnion + PersistImportedDeploymentRequestPreparedStackOverrideUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackOverrideUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestOverride$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackOverride$outboundSchema + ), z.string(), ]); -export function persistImportedDeploymentRequestOverrideUnionToJSON( - persistImportedDeploymentRequestOverrideUnion: - PersistImportedDeploymentRequestOverrideUnion, +export function persistImportedDeploymentRequestPreparedStackOverrideUnionToJSON( + persistImportedDeploymentRequestPreparedStackOverrideUnion: + PersistImportedDeploymentRequestPreparedStackOverrideUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestOverrideUnion$outboundSchema.parse( - persistImportedDeploymentRequestOverrideUnion, - ), + PersistImportedDeploymentRequestPreparedStackOverrideUnion$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackOverrideUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestManagement2$Outbound = { - override: { - [k: string]: Array< - PersistImportedDeploymentRequestOverride$Outbound | string - >; +export type PersistImportedDeploymentRequestPreparedStackManagement2$Outbound = + { + override: { + [k: string]: Array< + PersistImportedDeploymentRequestPreparedStackOverride$Outbound | string + >; + }; }; -}; /** @internal */ -export const PersistImportedDeploymentRequestManagement2$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackManagement2$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestManagement2$Outbound, - PersistImportedDeploymentRequestManagement2 + PersistImportedDeploymentRequestPreparedStackManagement2$Outbound, + PersistImportedDeploymentRequestPreparedStackManagement2 > = z.object({ override: z.record( z.string(), z.array(z.union([ - z.lazy(() => PersistImportedDeploymentRequestOverride$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackOverride$outboundSchema + ), z.string(), ])), ), }); -export function persistImportedDeploymentRequestManagement2ToJSON( - persistImportedDeploymentRequestManagement2: - PersistImportedDeploymentRequestManagement2, +export function persistImportedDeploymentRequestPreparedStackManagement2ToJSON( + persistImportedDeploymentRequestPreparedStackManagement2: + PersistImportedDeploymentRequestPreparedStackManagement2, ): string { return JSON.stringify( - PersistImportedDeploymentRequestManagement2$outboundSchema.parse( - persistImportedDeploymentRequestManagement2, - ), + PersistImportedDeploymentRequestPreparedStackManagement2$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackManagement2), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAwResource$Outbound = { - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - resources: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAwResource$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAwResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAwResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAwResource$Outbound, - PersistImportedDeploymentRequestExtendAwResource + PersistImportedDeploymentRequestPreparedStackExtendAwResource$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAwResource > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -7167,28 +12317,28 @@ export const PersistImportedDeploymentRequestExtendAwResource$outboundSchema: resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestExtendAwResourceToJSON( - persistImportedDeploymentRequestExtendAwResource: - PersistImportedDeploymentRequestExtendAwResource, +export function persistImportedDeploymentRequestPreparedStackExtendAwResourceToJSON( + persistImportedDeploymentRequestPreparedStackExtendAwResource: + PersistImportedDeploymentRequestPreparedStackExtendAwResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAwResource$outboundSchema.parse( - persistImportedDeploymentRequestExtendAwResource, - ), + PersistImportedDeploymentRequestPreparedStackExtendAwResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAwResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAwStack$Outbound = { - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - resources: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAwStack$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAwStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAwStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAwStack$Outbound, - PersistImportedDeploymentRequestExtendAwStack + PersistImportedDeploymentRequestPreparedStackExtendAwStack$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAwStack > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -7196,70 +12346,71 @@ export const PersistImportedDeploymentRequestExtendAwStack$outboundSchema: resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestExtendAwStackToJSON( - persistImportedDeploymentRequestExtendAwStack: - PersistImportedDeploymentRequestExtendAwStack, +export function persistImportedDeploymentRequestPreparedStackExtendAwStackToJSON( + persistImportedDeploymentRequestPreparedStackExtendAwStack: + PersistImportedDeploymentRequestPreparedStackExtendAwStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAwStack$outboundSchema.parse( - persistImportedDeploymentRequestExtendAwStack, - ), + PersistImportedDeploymentRequestPreparedStackExtendAwStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAwStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAwBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestExtendAwResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestExtendAwStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAwBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackExtendAwResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackExtendAwStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAwBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAwBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAwBinding$Outbound, - PersistImportedDeploymentRequestExtendAwBinding + PersistImportedDeploymentRequestPreparedStackExtendAwBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAwBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestExtendAwResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAwResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestExtendAwStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAwStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestExtendAwBindingToJSON( - persistImportedDeploymentRequestExtendAwBinding: - PersistImportedDeploymentRequestExtendAwBinding, +export function persistImportedDeploymentRequestPreparedStackExtendAwBindingToJSON( + persistImportedDeploymentRequestPreparedStackExtendAwBinding: + PersistImportedDeploymentRequestPreparedStackExtendAwBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAwBinding$outboundSchema.parse( - persistImportedDeploymentRequestExtendAwBinding, - ), + PersistImportedDeploymentRequestPreparedStackExtendAwBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAwBinding), ); } /** @internal */ -export const PersistImportedDeploymentRequestExtendEffect$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestExtendEffect, - ); +export const PersistImportedDeploymentRequestPreparedStackExtendEffect$outboundSchema: + z.ZodEnum = + z.enum(PersistImportedDeploymentRequestPreparedStackExtendEffect); /** @internal */ -export type PersistImportedDeploymentRequestExtendAwGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAwGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAwGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAwGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAwGrant$Outbound, - PersistImportedDeploymentRequestExtendAwGrant + PersistImportedDeploymentRequestPreparedStackExtendAwGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAwGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -7268,151 +12419,156 @@ export const PersistImportedDeploymentRequestExtendAwGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestExtendAwGrantToJSON( - persistImportedDeploymentRequestExtendAwGrant: - PersistImportedDeploymentRequestExtendAwGrant, +export function persistImportedDeploymentRequestPreparedStackExtendAwGrantToJSON( + persistImportedDeploymentRequestPreparedStackExtendAwGrant: + PersistImportedDeploymentRequestPreparedStackExtendAwGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAwGrant$outboundSchema.parse( - persistImportedDeploymentRequestExtendAwGrant, - ), + PersistImportedDeploymentRequestPreparedStackExtendAwGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAwGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAw$Outbound = { - binding: PersistImportedDeploymentRequestExtendAwBinding$Outbound; +export type PersistImportedDeploymentRequestPreparedStackExtendAw$Outbound = { + binding: + PersistImportedDeploymentRequestPreparedStackExtendAwBinding$Outbound; description?: string | null | undefined; effect?: string | undefined; - grant: PersistImportedDeploymentRequestExtendAwGrant$Outbound; + grant: PersistImportedDeploymentRequestPreparedStackExtendAwGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAw$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAw$Outbound, - PersistImportedDeploymentRequestExtendAw -> = z.object({ - binding: z.lazy(() => - PersistImportedDeploymentRequestExtendAwBinding$outboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: PersistImportedDeploymentRequestExtendEffect$outboundSchema - .optional(), - grant: z.lazy(() => - PersistImportedDeploymentRequestExtendAwGrant$outboundSchema - ), - label: z.nullable(z.string()).optional(), -}); +export const PersistImportedDeploymentRequestPreparedStackExtendAw$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackExtendAw$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAw + > = z.object({ + binding: z.lazy(() => + PersistImportedDeploymentRequestPreparedStackExtendAwBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + PersistImportedDeploymentRequestPreparedStackExtendEffect$outboundSchema + .optional(), + grant: z.lazy(() => + PersistImportedDeploymentRequestPreparedStackExtendAwGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function persistImportedDeploymentRequestExtendAwToJSON( - persistImportedDeploymentRequestExtendAw: - PersistImportedDeploymentRequestExtendAw, +export function persistImportedDeploymentRequestPreparedStackExtendAwToJSON( + persistImportedDeploymentRequestPreparedStackExtendAw: + PersistImportedDeploymentRequestPreparedStackExtendAw, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAw$outboundSchema.parse( - persistImportedDeploymentRequestExtendAw, + PersistImportedDeploymentRequestPreparedStackExtendAw$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackExtendAw, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAzureResource$Outbound = { - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAzureResource$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAzureResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAzureResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAzureResource$Outbound, - PersistImportedDeploymentRequestExtendAzureResource + PersistImportedDeploymentRequestPreparedStackExtendAzureResource$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAzureResource > = z.object({ scope: z.string(), }); -export function persistImportedDeploymentRequestExtendAzureResourceToJSON( - persistImportedDeploymentRequestExtendAzureResource: - PersistImportedDeploymentRequestExtendAzureResource, +export function persistImportedDeploymentRequestPreparedStackExtendAzureResourceToJSON( + persistImportedDeploymentRequestPreparedStackExtendAzureResource: + PersistImportedDeploymentRequestPreparedStackExtendAzureResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAzureResource$outboundSchema.parse( - persistImportedDeploymentRequestExtendAzureResource, - ), + PersistImportedDeploymentRequestPreparedStackExtendAzureResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAzureResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAzureStack$Outbound = { - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAzureStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAzureStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAzureStack$Outbound, - PersistImportedDeploymentRequestExtendAzureStack + PersistImportedDeploymentRequestPreparedStackExtendAzureStack$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAzureStack > = z.object({ scope: z.string(), }); -export function persistImportedDeploymentRequestExtendAzureStackToJSON( - persistImportedDeploymentRequestExtendAzureStack: - PersistImportedDeploymentRequestExtendAzureStack, +export function persistImportedDeploymentRequestPreparedStackExtendAzureStackToJSON( + persistImportedDeploymentRequestPreparedStackExtendAzureStack: + PersistImportedDeploymentRequestPreparedStackExtendAzureStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAzureStack$outboundSchema.parse( - persistImportedDeploymentRequestExtendAzureStack, - ), + PersistImportedDeploymentRequestPreparedStackExtendAzureStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAzureStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAzureBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestExtendAzureResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestExtendAzureStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAzureBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackExtendAzureResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackExtendAzureStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAzureBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAzureBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAzureBinding$Outbound, - PersistImportedDeploymentRequestExtendAzureBinding + PersistImportedDeploymentRequestPreparedStackExtendAzureBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAzureBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestExtendAzureResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAzureResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestExtendAzureStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAzureStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestExtendAzureBindingToJSON( - persistImportedDeploymentRequestExtendAzureBinding: - PersistImportedDeploymentRequestExtendAzureBinding, +export function persistImportedDeploymentRequestPreparedStackExtendAzureBindingToJSON( + persistImportedDeploymentRequestPreparedStackExtendAzureBinding: + PersistImportedDeploymentRequestPreparedStackExtendAzureBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAzureBinding$outboundSchema.parse( - persistImportedDeploymentRequestExtendAzureBinding, - ), + PersistImportedDeploymentRequestPreparedStackExtendAzureBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAzureBinding), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAzureGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAzureGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAzureGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAzureGrant$Outbound, - PersistImportedDeploymentRequestExtendAzureGrant + PersistImportedDeploymentRequestPreparedStackExtendAzureGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAzureGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -7421,125 +12577,132 @@ export const PersistImportedDeploymentRequestExtendAzureGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestExtendAzureGrantToJSON( - persistImportedDeploymentRequestExtendAzureGrant: - PersistImportedDeploymentRequestExtendAzureGrant, +export function persistImportedDeploymentRequestPreparedStackExtendAzureGrantToJSON( + persistImportedDeploymentRequestPreparedStackExtendAzureGrant: + PersistImportedDeploymentRequestPreparedStackExtendAzureGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAzureGrant$outboundSchema.parse( - persistImportedDeploymentRequestExtendAzureGrant, - ), + PersistImportedDeploymentRequestPreparedStackExtendAzureGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAzureGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendAzure$Outbound = { - binding: PersistImportedDeploymentRequestExtendAzureBinding$Outbound; - description?: string | null | undefined; - grant: PersistImportedDeploymentRequestExtendAzureGrant$Outbound; - label?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendAzure$Outbound = + { + binding: + PersistImportedDeploymentRequestPreparedStackExtendAzureBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPreparedStackExtendAzureGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendAzure$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendAzure$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendAzure$Outbound, - PersistImportedDeploymentRequestExtendAzure + PersistImportedDeploymentRequestPreparedStackExtendAzure$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendAzure > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestExtendAzureBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAzureBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestExtendAzureGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAzureGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestExtendAzureToJSON( - persistImportedDeploymentRequestExtendAzure: - PersistImportedDeploymentRequestExtendAzure, +export function persistImportedDeploymentRequestPreparedStackExtendAzureToJSON( + persistImportedDeploymentRequestPreparedStackExtendAzure: + PersistImportedDeploymentRequestPreparedStackExtendAzure, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendAzure$outboundSchema.parse( - persistImportedDeploymentRequestExtendAzure, - ), + PersistImportedDeploymentRequestPreparedStackExtendAzure$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendAzure), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendConditionResource$Outbound = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendConditionResource$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendConditionResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendConditionResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendConditionResource$Outbound, - PersistImportedDeploymentRequestExtendConditionResource + PersistImportedDeploymentRequestPreparedStackExtendConditionResource$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendConditionResource > = z.object({ expression: z.string(), title: z.string(), }); -export function persistImportedDeploymentRequestExtendConditionResourceToJSON( - persistImportedDeploymentRequestExtendConditionResource: - PersistImportedDeploymentRequestExtendConditionResource, +export function persistImportedDeploymentRequestPreparedStackExtendConditionResourceToJSON( + persistImportedDeploymentRequestPreparedStackExtendConditionResource: + PersistImportedDeploymentRequestPreparedStackExtendConditionResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendConditionResource$outboundSchema - .parse(persistImportedDeploymentRequestExtendConditionResource), + PersistImportedDeploymentRequestPreparedStackExtendConditionResource$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackExtendConditionResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendResourceConditionUnion$Outbound = - | PersistImportedDeploymentRequestExtendConditionResource$Outbound +export type PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackExtendConditionResource$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestExtendResourceConditionUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendResourceConditionUnion$Outbound, - PersistImportedDeploymentRequestExtendResourceConditionUnion + PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestExtendConditionResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendConditionResource$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestExtendResourceConditionUnionToJSON( - persistImportedDeploymentRequestExtendResourceConditionUnion: - PersistImportedDeploymentRequestExtendResourceConditionUnion, +export function persistImportedDeploymentRequestPreparedStackExtendResourceConditionUnionToJSON( + persistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion: + PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendResourceConditionUnion$outboundSchema - .parse(persistImportedDeploymentRequestExtendResourceConditionUnion), + PersistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackExtendResourceConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendGcpResource$Outbound = { - condition?: - | PersistImportedDeploymentRequestExtendConditionResource$Outbound - | any - | null - | undefined; - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendGcpResource$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPreparedStackExtendConditionResource$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendGcpResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendGcpResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendGcpResource$Outbound, - PersistImportedDeploymentRequestExtendGcpResource + PersistImportedDeploymentRequestPreparedStackExtendGcpResource$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendGcpResource > = z.object({ condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestExtendConditionResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendConditionResource$outboundSchema ), z.any(), ]), @@ -7547,91 +12710,93 @@ export const PersistImportedDeploymentRequestExtendGcpResource$outboundSchema: scope: z.string(), }); -export function persistImportedDeploymentRequestExtendGcpResourceToJSON( - persistImportedDeploymentRequestExtendGcpResource: - PersistImportedDeploymentRequestExtendGcpResource, +export function persistImportedDeploymentRequestPreparedStackExtendGcpResourceToJSON( + persistImportedDeploymentRequestPreparedStackExtendGcpResource: + PersistImportedDeploymentRequestPreparedStackExtendGcpResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendGcpResource$outboundSchema.parse( - persistImportedDeploymentRequestExtendGcpResource, - ), + PersistImportedDeploymentRequestPreparedStackExtendGcpResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendGcpResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendConditionStack$Outbound = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendConditionStack$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendConditionStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendConditionStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendConditionStack$Outbound, - PersistImportedDeploymentRequestExtendConditionStack + PersistImportedDeploymentRequestPreparedStackExtendConditionStack$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendConditionStack > = z.object({ expression: z.string(), title: z.string(), }); -export function persistImportedDeploymentRequestExtendConditionStackToJSON( - persistImportedDeploymentRequestExtendConditionStack: - PersistImportedDeploymentRequestExtendConditionStack, +export function persistImportedDeploymentRequestPreparedStackExtendConditionStackToJSON( + persistImportedDeploymentRequestPreparedStackExtendConditionStack: + PersistImportedDeploymentRequestPreparedStackExtendConditionStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendConditionStack$outboundSchema.parse( - persistImportedDeploymentRequestExtendConditionStack, - ), + PersistImportedDeploymentRequestPreparedStackExtendConditionStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendConditionStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendStackConditionUnion$Outbound = - | PersistImportedDeploymentRequestExtendConditionStack$Outbound +export type PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackExtendConditionStack$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestExtendStackConditionUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendStackConditionUnion$Outbound, - PersistImportedDeploymentRequestExtendStackConditionUnion + PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestExtendConditionStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendConditionStack$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestExtendStackConditionUnionToJSON( - persistImportedDeploymentRequestExtendStackConditionUnion: - PersistImportedDeploymentRequestExtendStackConditionUnion, +export function persistImportedDeploymentRequestPreparedStackExtendStackConditionUnionToJSON( + persistImportedDeploymentRequestPreparedStackExtendStackConditionUnion: + PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendStackConditionUnion$outboundSchema - .parse(persistImportedDeploymentRequestExtendStackConditionUnion), + PersistImportedDeploymentRequestPreparedStackExtendStackConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackExtendStackConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendGcpStack$Outbound = { - condition?: - | PersistImportedDeploymentRequestExtendConditionStack$Outbound - | any - | null - | undefined; - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendGcpStack$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPreparedStackExtendConditionStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendGcpStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendGcpStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendGcpStack$Outbound, - PersistImportedDeploymentRequestExtendGcpStack + PersistImportedDeploymentRequestPreparedStackExtendGcpStack$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendGcpStack > = z.object({ condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestExtendConditionStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendConditionStack$outboundSchema ), z.any(), ]), @@ -7639,64 +12804,66 @@ export const PersistImportedDeploymentRequestExtendGcpStack$outboundSchema: scope: z.string(), }); -export function persistImportedDeploymentRequestExtendGcpStackToJSON( - persistImportedDeploymentRequestExtendGcpStack: - PersistImportedDeploymentRequestExtendGcpStack, +export function persistImportedDeploymentRequestPreparedStackExtendGcpStackToJSON( + persistImportedDeploymentRequestPreparedStackExtendGcpStack: + PersistImportedDeploymentRequestPreparedStackExtendGcpStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendGcpStack$outboundSchema.parse( - persistImportedDeploymentRequestExtendGcpStack, - ), + PersistImportedDeploymentRequestPreparedStackExtendGcpStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendGcpStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendGcpBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestExtendGcpResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestExtendGcpStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendGcpBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackExtendGcpResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackExtendGcpStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendGcpBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendGcpBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendGcpBinding$Outbound, - PersistImportedDeploymentRequestExtendGcpBinding + PersistImportedDeploymentRequestPreparedStackExtendGcpBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendGcpBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestExtendGcpResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendGcpResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestExtendGcpStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendGcpStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestExtendGcpBindingToJSON( - persistImportedDeploymentRequestExtendGcpBinding: - PersistImportedDeploymentRequestExtendGcpBinding, +export function persistImportedDeploymentRequestPreparedStackExtendGcpBindingToJSON( + persistImportedDeploymentRequestPreparedStackExtendGcpBinding: + PersistImportedDeploymentRequestPreparedStackExtendGcpBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendGcpBinding$outboundSchema.parse( - persistImportedDeploymentRequestExtendGcpBinding, - ), + PersistImportedDeploymentRequestPreparedStackExtendGcpBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendGcpBinding), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendGcpGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackExtendGcpGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendGcpGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendGcpGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendGcpGrant$Outbound, - PersistImportedDeploymentRequestExtendGcpGrant + PersistImportedDeploymentRequestPreparedStackExtendGcpGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendGcpGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -7705,232 +12872,241 @@ export const PersistImportedDeploymentRequestExtendGcpGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestExtendGcpGrantToJSON( - persistImportedDeploymentRequestExtendGcpGrant: - PersistImportedDeploymentRequestExtendGcpGrant, +export function persistImportedDeploymentRequestPreparedStackExtendGcpGrantToJSON( + persistImportedDeploymentRequestPreparedStackExtendGcpGrant: + PersistImportedDeploymentRequestPreparedStackExtendGcpGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendGcpGrant$outboundSchema.parse( - persistImportedDeploymentRequestExtendGcpGrant, - ), + PersistImportedDeploymentRequestPreparedStackExtendGcpGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendGcpGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendGcp$Outbound = { - binding: PersistImportedDeploymentRequestExtendGcpBinding$Outbound; +export type PersistImportedDeploymentRequestPreparedStackExtendGcp$Outbound = { + binding: + PersistImportedDeploymentRequestPreparedStackExtendGcpBinding$Outbound; description?: string | null | undefined; - grant: PersistImportedDeploymentRequestExtendGcpGrant$Outbound; + grant: PersistImportedDeploymentRequestPreparedStackExtendGcpGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestExtendGcp$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendGcp$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendGcp$Outbound, - PersistImportedDeploymentRequestExtendGcp + PersistImportedDeploymentRequestPreparedStackExtendGcp$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendGcp > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestExtendGcpBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendGcpBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestExtendGcpGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendGcpGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestExtendGcpToJSON( - persistImportedDeploymentRequestExtendGcp: - PersistImportedDeploymentRequestExtendGcp, +export function persistImportedDeploymentRequestPreparedStackExtendGcpToJSON( + persistImportedDeploymentRequestPreparedStackExtendGcp: + PersistImportedDeploymentRequestPreparedStackExtendGcp, ): string { - return JSON.stringify( - PersistImportedDeploymentRequestExtendGcp$outboundSchema.parse( - persistImportedDeploymentRequestExtendGcp, - ), - ); -} - -/** @internal */ -export type PersistImportedDeploymentRequestExtendPlatforms$Outbound = { - aws?: - | Array - | null - | undefined; - azure?: - | Array - | null - | undefined; - gcp?: - | Array - | null - | undefined; -}; + return JSON.stringify( + PersistImportedDeploymentRequestPreparedStackExtendGcp$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackExtendGcp, + ), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestPreparedStackExtendPlatforms$Outbound = + { + aws?: + | Array + | null + | undefined; + azure?: + | Array + | null + | undefined; + gcp?: + | Array + | null + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestExtendPlatforms$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendPlatforms$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendPlatforms$Outbound, - PersistImportedDeploymentRequestExtendPlatforms + PersistImportedDeploymentRequestPreparedStackExtendPlatforms$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendPlatforms > = z.object({ aws: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestExtendAw$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAw$outboundSchema )), ).optional(), azure: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestExtendAzure$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendAzure$outboundSchema )), ).optional(), gcp: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestExtendGcp$outboundSchema + PersistImportedDeploymentRequestPreparedStackExtendGcp$outboundSchema )), ).optional(), }); -export function persistImportedDeploymentRequestExtendPlatformsToJSON( - persistImportedDeploymentRequestExtendPlatforms: - PersistImportedDeploymentRequestExtendPlatforms, +export function persistImportedDeploymentRequestPreparedStackExtendPlatformsToJSON( + persistImportedDeploymentRequestPreparedStackExtendPlatforms: + PersistImportedDeploymentRequestPreparedStackExtendPlatforms, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendPlatforms$outboundSchema.parse( - persistImportedDeploymentRequestExtendPlatforms, - ), + PersistImportedDeploymentRequestPreparedStackExtendPlatforms$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendPlatforms), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtend$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackExtend$Outbound = { description: string; id: string; - platforms: PersistImportedDeploymentRequestExtendPlatforms$Outbound; + platforms: + PersistImportedDeploymentRequestPreparedStackExtendPlatforms$Outbound; }; /** @internal */ -export const PersistImportedDeploymentRequestExtend$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtend$Outbound, - PersistImportedDeploymentRequestExtend -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - PersistImportedDeploymentRequestExtendPlatforms$outboundSchema - ), -}); +export const PersistImportedDeploymentRequestPreparedStackExtend$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackExtend$Outbound, + PersistImportedDeploymentRequestPreparedStackExtend + > = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + PersistImportedDeploymentRequestPreparedStackExtendPlatforms$outboundSchema + ), + }); -export function persistImportedDeploymentRequestExtendToJSON( - persistImportedDeploymentRequestExtend: - PersistImportedDeploymentRequestExtend, +export function persistImportedDeploymentRequestPreparedStackExtendToJSON( + persistImportedDeploymentRequestPreparedStackExtend: + PersistImportedDeploymentRequestPreparedStackExtend, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtend$outboundSchema.parse( - persistImportedDeploymentRequestExtend, + PersistImportedDeploymentRequestPreparedStackExtend$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackExtend, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestExtendUnion$Outbound = - | PersistImportedDeploymentRequestExtend$Outbound +export type PersistImportedDeploymentRequestPreparedStackExtendUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackExtend$Outbound | string; /** @internal */ -export const PersistImportedDeploymentRequestExtendUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackExtendUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestExtendUnion$Outbound, - PersistImportedDeploymentRequestExtendUnion + PersistImportedDeploymentRequestPreparedStackExtendUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackExtendUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestExtend$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackExtend$outboundSchema + ), z.string(), ]); -export function persistImportedDeploymentRequestExtendUnionToJSON( - persistImportedDeploymentRequestExtendUnion: - PersistImportedDeploymentRequestExtendUnion, +export function persistImportedDeploymentRequestPreparedStackExtendUnionToJSON( + persistImportedDeploymentRequestPreparedStackExtendUnion: + PersistImportedDeploymentRequestPreparedStackExtendUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestExtendUnion$outboundSchema.parse( - persistImportedDeploymentRequestExtendUnion, - ), + PersistImportedDeploymentRequestPreparedStackExtendUnion$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackExtendUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestManagement1$Outbound = { - extend: { - [k: string]: Array< - PersistImportedDeploymentRequestExtend$Outbound | string - >; +export type PersistImportedDeploymentRequestPreparedStackManagement1$Outbound = + { + extend: { + [k: string]: Array< + PersistImportedDeploymentRequestPreparedStackExtend$Outbound | string + >; + }; }; -}; /** @internal */ -export const PersistImportedDeploymentRequestManagement1$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackManagement1$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestManagement1$Outbound, - PersistImportedDeploymentRequestManagement1 + PersistImportedDeploymentRequestPreparedStackManagement1$Outbound, + PersistImportedDeploymentRequestPreparedStackManagement1 > = z.object({ extend: z.record( z.string(), z.array(z.union([ - z.lazy(() => PersistImportedDeploymentRequestExtend$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackExtend$outboundSchema + ), z.string(), ])), ), }); -export function persistImportedDeploymentRequestManagement1ToJSON( - persistImportedDeploymentRequestManagement1: - PersistImportedDeploymentRequestManagement1, +export function persistImportedDeploymentRequestPreparedStackManagement1ToJSON( + persistImportedDeploymentRequestPreparedStackManagement1: + PersistImportedDeploymentRequestPreparedStackManagement1, ): string { return JSON.stringify( - PersistImportedDeploymentRequestManagement1$outboundSchema.parse( - persistImportedDeploymentRequestManagement1, - ), + PersistImportedDeploymentRequestPreparedStackManagement1$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackManagement1), ); } /** @internal */ -export type PersistImportedDeploymentRequestManagementUnion$Outbound = - | PersistImportedDeploymentRequestManagement1$Outbound - | PersistImportedDeploymentRequestManagement2$Outbound +export type PersistImportedDeploymentRequestPreparedStackManagementUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackManagement1$Outbound + | PersistImportedDeploymentRequestPreparedStackManagement2$Outbound | string; /** @internal */ -export const PersistImportedDeploymentRequestManagementUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackManagementUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestManagementUnion$Outbound, - PersistImportedDeploymentRequestManagementUnion + PersistImportedDeploymentRequestPreparedStackManagementUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackManagementUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestManagement1$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestManagement2$outboundSchema), - PersistImportedDeploymentRequestManagementEnum$outboundSchema, + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackManagement1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackManagement2$outboundSchema + ), + PersistImportedDeploymentRequestPreparedStackManagementEnum$outboundSchema, ]); -export function persistImportedDeploymentRequestManagementUnionToJSON( - persistImportedDeploymentRequestManagementUnion: - PersistImportedDeploymentRequestManagementUnion, +export function persistImportedDeploymentRequestPreparedStackManagementUnionToJSON( + persistImportedDeploymentRequestPreparedStackManagementUnion: + PersistImportedDeploymentRequestPreparedStackManagementUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestManagementUnion$outboundSchema.parse( - persistImportedDeploymentRequestManagementUnion, - ), + PersistImportedDeploymentRequestPreparedStackManagementUnion$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackManagementUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAwResource$Outbound = { - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - resources: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAwResource$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAwResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAwResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAwResource$Outbound, - PersistImportedDeploymentRequestProfileAwResource + PersistImportedDeploymentRequestPreparedStackProfileAwResource$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAwResource > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -7938,28 +13114,28 @@ export const PersistImportedDeploymentRequestProfileAwResource$outboundSchema: resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestProfileAwResourceToJSON( - persistImportedDeploymentRequestProfileAwResource: - PersistImportedDeploymentRequestProfileAwResource, +export function persistImportedDeploymentRequestPreparedStackProfileAwResourceToJSON( + persistImportedDeploymentRequestPreparedStackProfileAwResource: + PersistImportedDeploymentRequestPreparedStackProfileAwResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAwResource$outboundSchema.parse( - persistImportedDeploymentRequestProfileAwResource, - ), + PersistImportedDeploymentRequestPreparedStackProfileAwResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAwResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAwStack$Outbound = { - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - resources: Array; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAwStack$Outbound = + { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAwStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAwStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAwStack$Outbound, - PersistImportedDeploymentRequestProfileAwStack + PersistImportedDeploymentRequestPreparedStackProfileAwStack$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAwStack > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -7967,70 +13143,71 @@ export const PersistImportedDeploymentRequestProfileAwStack$outboundSchema: resources: z.array(z.string()), }); -export function persistImportedDeploymentRequestProfileAwStackToJSON( - persistImportedDeploymentRequestProfileAwStack: - PersistImportedDeploymentRequestProfileAwStack, +export function persistImportedDeploymentRequestPreparedStackProfileAwStackToJSON( + persistImportedDeploymentRequestPreparedStackProfileAwStack: + PersistImportedDeploymentRequestPreparedStackProfileAwStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAwStack$outboundSchema.parse( - persistImportedDeploymentRequestProfileAwStack, - ), + PersistImportedDeploymentRequestPreparedStackProfileAwStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAwStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAwBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestProfileAwResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestProfileAwStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAwBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackProfileAwResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackProfileAwStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAwBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAwBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAwBinding$Outbound, - PersistImportedDeploymentRequestProfileAwBinding + PersistImportedDeploymentRequestPreparedStackProfileAwBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAwBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestProfileAwResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAwResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestProfileAwStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAwStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestProfileAwBindingToJSON( - persistImportedDeploymentRequestProfileAwBinding: - PersistImportedDeploymentRequestProfileAwBinding, +export function persistImportedDeploymentRequestPreparedStackProfileAwBindingToJSON( + persistImportedDeploymentRequestPreparedStackProfileAwBinding: + PersistImportedDeploymentRequestPreparedStackProfileAwBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAwBinding$outboundSchema.parse( - persistImportedDeploymentRequestProfileAwBinding, - ), + PersistImportedDeploymentRequestPreparedStackProfileAwBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAwBinding), ); } /** @internal */ -export const PersistImportedDeploymentRequestProfileEffect$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestProfileEffect, - ); +export const PersistImportedDeploymentRequestPreparedStackProfileEffect$outboundSchema: + z.ZodEnum = + z.enum(PersistImportedDeploymentRequestPreparedStackProfileEffect); /** @internal */ -export type PersistImportedDeploymentRequestProfileAwGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAwGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAwGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAwGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAwGrant$Outbound, - PersistImportedDeploymentRequestProfileAwGrant + PersistImportedDeploymentRequestPreparedStackProfileAwGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAwGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -8039,154 +13216,156 @@ export const PersistImportedDeploymentRequestProfileAwGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestProfileAwGrantToJSON( - persistImportedDeploymentRequestProfileAwGrant: - PersistImportedDeploymentRequestProfileAwGrant, +export function persistImportedDeploymentRequestPreparedStackProfileAwGrantToJSON( + persistImportedDeploymentRequestPreparedStackProfileAwGrant: + PersistImportedDeploymentRequestPreparedStackProfileAwGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAwGrant$outboundSchema.parse( - persistImportedDeploymentRequestProfileAwGrant, - ), + PersistImportedDeploymentRequestPreparedStackProfileAwGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAwGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAw$Outbound = { - binding: PersistImportedDeploymentRequestProfileAwBinding$Outbound; +export type PersistImportedDeploymentRequestPreparedStackProfileAw$Outbound = { + binding: + PersistImportedDeploymentRequestPreparedStackProfileAwBinding$Outbound; description?: string | null | undefined; effect?: string | undefined; - grant: PersistImportedDeploymentRequestProfileAwGrant$Outbound; + grant: PersistImportedDeploymentRequestPreparedStackProfileAwGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAw$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAw$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAw$Outbound, - PersistImportedDeploymentRequestProfileAw + PersistImportedDeploymentRequestPreparedStackProfileAw$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAw > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestProfileAwBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAwBinding$outboundSchema ), description: z.nullable(z.string()).optional(), - effect: PersistImportedDeploymentRequestProfileEffect$outboundSchema - .optional(), + effect: + PersistImportedDeploymentRequestPreparedStackProfileEffect$outboundSchema + .optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestProfileAwGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAwGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestProfileAwToJSON( - persistImportedDeploymentRequestProfileAw: - PersistImportedDeploymentRequestProfileAw, +export function persistImportedDeploymentRequestPreparedStackProfileAwToJSON( + persistImportedDeploymentRequestPreparedStackProfileAw: + PersistImportedDeploymentRequestPreparedStackProfileAw, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAw$outboundSchema.parse( - persistImportedDeploymentRequestProfileAw, + PersistImportedDeploymentRequestPreparedStackProfileAw$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackProfileAw, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAzureResource$Outbound = { - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAzureResource$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAzureResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAzureResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAzureResource$Outbound, - PersistImportedDeploymentRequestProfileAzureResource + PersistImportedDeploymentRequestPreparedStackProfileAzureResource$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAzureResource > = z.object({ scope: z.string(), }); -export function persistImportedDeploymentRequestProfileAzureResourceToJSON( - persistImportedDeploymentRequestProfileAzureResource: - PersistImportedDeploymentRequestProfileAzureResource, +export function persistImportedDeploymentRequestPreparedStackProfileAzureResourceToJSON( + persistImportedDeploymentRequestPreparedStackProfileAzureResource: + PersistImportedDeploymentRequestPreparedStackProfileAzureResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAzureResource$outboundSchema.parse( - persistImportedDeploymentRequestProfileAzureResource, - ), + PersistImportedDeploymentRequestPreparedStackProfileAzureResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAzureResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAzureStack$Outbound = { - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAzureStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAzureStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAzureStack$Outbound, - PersistImportedDeploymentRequestProfileAzureStack + PersistImportedDeploymentRequestPreparedStackProfileAzureStack$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAzureStack > = z.object({ scope: z.string(), }); -export function persistImportedDeploymentRequestProfileAzureStackToJSON( - persistImportedDeploymentRequestProfileAzureStack: - PersistImportedDeploymentRequestProfileAzureStack, +export function persistImportedDeploymentRequestPreparedStackProfileAzureStackToJSON( + persistImportedDeploymentRequestPreparedStackProfileAzureStack: + PersistImportedDeploymentRequestPreparedStackProfileAzureStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAzureStack$outboundSchema.parse( - persistImportedDeploymentRequestProfileAzureStack, - ), + PersistImportedDeploymentRequestPreparedStackProfileAzureStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAzureStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAzureBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestProfileAzureResource$Outbound - | undefined; - stack?: - | PersistImportedDeploymentRequestProfileAzureStack$Outbound - | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAzureBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackProfileAzureResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackProfileAzureStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAzureBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAzureBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAzureBinding$Outbound, - PersistImportedDeploymentRequestProfileAzureBinding + PersistImportedDeploymentRequestPreparedStackProfileAzureBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAzureBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestProfileAzureResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAzureResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestProfileAzureStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAzureStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestProfileAzureBindingToJSON( - persistImportedDeploymentRequestProfileAzureBinding: - PersistImportedDeploymentRequestProfileAzureBinding, +export function persistImportedDeploymentRequestPreparedStackProfileAzureBindingToJSON( + persistImportedDeploymentRequestPreparedStackProfileAzureBinding: + PersistImportedDeploymentRequestPreparedStackProfileAzureBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAzureBinding$outboundSchema.parse( - persistImportedDeploymentRequestProfileAzureBinding, - ), + PersistImportedDeploymentRequestPreparedStackProfileAzureBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAzureBinding), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAzureGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAzureGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAzureGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAzureGrant$Outbound, - PersistImportedDeploymentRequestProfileAzureGrant + PersistImportedDeploymentRequestPreparedStackProfileAzureGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAzureGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -8195,126 +13374,132 @@ export const PersistImportedDeploymentRequestProfileAzureGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestProfileAzureGrantToJSON( - persistImportedDeploymentRequestProfileAzureGrant: - PersistImportedDeploymentRequestProfileAzureGrant, +export function persistImportedDeploymentRequestPreparedStackProfileAzureGrantToJSON( + persistImportedDeploymentRequestPreparedStackProfileAzureGrant: + PersistImportedDeploymentRequestPreparedStackProfileAzureGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAzureGrant$outboundSchema.parse( - persistImportedDeploymentRequestProfileAzureGrant, - ), + PersistImportedDeploymentRequestPreparedStackProfileAzureGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAzureGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileAzure$Outbound = { - binding: PersistImportedDeploymentRequestProfileAzureBinding$Outbound; - description?: string | null | undefined; - grant: PersistImportedDeploymentRequestProfileAzureGrant$Outbound; - label?: string | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileAzure$Outbound = + { + binding: + PersistImportedDeploymentRequestPreparedStackProfileAzureBinding$Outbound; + description?: string | null | undefined; + grant: + PersistImportedDeploymentRequestPreparedStackProfileAzureGrant$Outbound; + label?: string | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileAzure$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileAzure$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileAzure$Outbound, - PersistImportedDeploymentRequestProfileAzure + PersistImportedDeploymentRequestPreparedStackProfileAzure$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileAzure > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestProfileAzureBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAzureBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestProfileAzureGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAzureGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestProfileAzureToJSON( - persistImportedDeploymentRequestProfileAzure: - PersistImportedDeploymentRequestProfileAzure, +export function persistImportedDeploymentRequestPreparedStackProfileAzureToJSON( + persistImportedDeploymentRequestPreparedStackProfileAzure: + PersistImportedDeploymentRequestPreparedStackProfileAzure, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileAzure$outboundSchema.parse( - persistImportedDeploymentRequestProfileAzure, - ), + PersistImportedDeploymentRequestPreparedStackProfileAzure$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileAzure), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileConditionResource$Outbound = +export type PersistImportedDeploymentRequestPreparedStackProfileConditionResource$Outbound = { expression: string; title: string; }; /** @internal */ -export const PersistImportedDeploymentRequestProfileConditionResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileConditionResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileConditionResource$Outbound, - PersistImportedDeploymentRequestProfileConditionResource + PersistImportedDeploymentRequestPreparedStackProfileConditionResource$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileConditionResource > = z.object({ expression: z.string(), title: z.string(), }); -export function persistImportedDeploymentRequestProfileConditionResourceToJSON( - persistImportedDeploymentRequestProfileConditionResource: - PersistImportedDeploymentRequestProfileConditionResource, +export function persistImportedDeploymentRequestPreparedStackProfileConditionResourceToJSON( + persistImportedDeploymentRequestPreparedStackProfileConditionResource: + PersistImportedDeploymentRequestPreparedStackProfileConditionResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileConditionResource$outboundSchema - .parse(persistImportedDeploymentRequestProfileConditionResource), + PersistImportedDeploymentRequestPreparedStackProfileConditionResource$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackProfileConditionResource, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileResourceConditionUnion$Outbound = - | PersistImportedDeploymentRequestProfileConditionResource$Outbound +export type PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackProfileConditionResource$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestProfileResourceConditionUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileResourceConditionUnion$Outbound, - PersistImportedDeploymentRequestProfileResourceConditionUnion + PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestProfileConditionResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileConditionResource$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestProfileResourceConditionUnionToJSON( - persistImportedDeploymentRequestProfileResourceConditionUnion: - PersistImportedDeploymentRequestProfileResourceConditionUnion, +export function persistImportedDeploymentRequestPreparedStackProfileResourceConditionUnionToJSON( + persistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion: + PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileResourceConditionUnion$outboundSchema - .parse(persistImportedDeploymentRequestProfileResourceConditionUnion), + PersistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackProfileResourceConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileGcpResource$Outbound = { - condition?: - | PersistImportedDeploymentRequestProfileConditionResource$Outbound - | any - | null - | undefined; - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileGcpResource$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPreparedStackProfileConditionResource$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileGcpResource$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileGcpResource$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileGcpResource$Outbound, - PersistImportedDeploymentRequestProfileGcpResource + PersistImportedDeploymentRequestPreparedStackProfileGcpResource$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileGcpResource > = z.object({ condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestProfileConditionResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileConditionResource$outboundSchema ), z.any(), ]), @@ -8322,91 +13507,95 @@ export const PersistImportedDeploymentRequestProfileGcpResource$outboundSchema: scope: z.string(), }); -export function persistImportedDeploymentRequestProfileGcpResourceToJSON( - persistImportedDeploymentRequestProfileGcpResource: - PersistImportedDeploymentRequestProfileGcpResource, +export function persistImportedDeploymentRequestPreparedStackProfileGcpResourceToJSON( + persistImportedDeploymentRequestPreparedStackProfileGcpResource: + PersistImportedDeploymentRequestPreparedStackProfileGcpResource, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileGcpResource$outboundSchema.parse( - persistImportedDeploymentRequestProfileGcpResource, - ), + PersistImportedDeploymentRequestPreparedStackProfileGcpResource$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileGcpResource), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileConditionStack$Outbound = { - expression: string; - title: string; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileConditionStack$Outbound = + { + expression: string; + title: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileConditionStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileConditionStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileConditionStack$Outbound, - PersistImportedDeploymentRequestProfileConditionStack + PersistImportedDeploymentRequestPreparedStackProfileConditionStack$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileConditionStack > = z.object({ expression: z.string(), title: z.string(), }); -export function persistImportedDeploymentRequestProfileConditionStackToJSON( - persistImportedDeploymentRequestProfileConditionStack: - PersistImportedDeploymentRequestProfileConditionStack, +export function persistImportedDeploymentRequestPreparedStackProfileConditionStackToJSON( + persistImportedDeploymentRequestPreparedStackProfileConditionStack: + PersistImportedDeploymentRequestPreparedStackProfileConditionStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileConditionStack$outboundSchema.parse( - persistImportedDeploymentRequestProfileConditionStack, - ), + PersistImportedDeploymentRequestPreparedStackProfileConditionStack$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackProfileConditionStack, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileStackConditionUnion$Outbound = - | PersistImportedDeploymentRequestProfileConditionStack$Outbound +export type PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackProfileConditionStack$Outbound | any; /** @internal */ -export const PersistImportedDeploymentRequestProfileStackConditionUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileStackConditionUnion$Outbound, - PersistImportedDeploymentRequestProfileStackConditionUnion + PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion > = z.union([ z.lazy(() => - PersistImportedDeploymentRequestProfileConditionStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileConditionStack$outboundSchema ), z.any(), ]); -export function persistImportedDeploymentRequestProfileStackConditionUnionToJSON( - persistImportedDeploymentRequestProfileStackConditionUnion: - PersistImportedDeploymentRequestProfileStackConditionUnion, +export function persistImportedDeploymentRequestPreparedStackProfileStackConditionUnionToJSON( + persistImportedDeploymentRequestPreparedStackProfileStackConditionUnion: + PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileStackConditionUnion$outboundSchema - .parse(persistImportedDeploymentRequestProfileStackConditionUnion), + PersistImportedDeploymentRequestPreparedStackProfileStackConditionUnion$outboundSchema + .parse( + persistImportedDeploymentRequestPreparedStackProfileStackConditionUnion, + ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileGcpStack$Outbound = { - condition?: - | PersistImportedDeploymentRequestProfileConditionStack$Outbound - | any - | null - | undefined; - scope: string; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileGcpStack$Outbound = + { + condition?: + | PersistImportedDeploymentRequestPreparedStackProfileConditionStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileGcpStack$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileGcpStack$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileGcpStack$Outbound, - PersistImportedDeploymentRequestProfileGcpStack + PersistImportedDeploymentRequestPreparedStackProfileGcpStack$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileGcpStack > = z.object({ condition: z.nullable( z.union([ z.lazy(() => - PersistImportedDeploymentRequestProfileConditionStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileConditionStack$outboundSchema ), z.any(), ]), @@ -8414,64 +13603,66 @@ export const PersistImportedDeploymentRequestProfileGcpStack$outboundSchema: scope: z.string(), }); -export function persistImportedDeploymentRequestProfileGcpStackToJSON( - persistImportedDeploymentRequestProfileGcpStack: - PersistImportedDeploymentRequestProfileGcpStack, +export function persistImportedDeploymentRequestPreparedStackProfileGcpStackToJSON( + persistImportedDeploymentRequestPreparedStackProfileGcpStack: + PersistImportedDeploymentRequestPreparedStackProfileGcpStack, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileGcpStack$outboundSchema.parse( - persistImportedDeploymentRequestProfileGcpStack, - ), + PersistImportedDeploymentRequestPreparedStackProfileGcpStack$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileGcpStack), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileGcpBinding$Outbound = { - resource?: - | PersistImportedDeploymentRequestProfileGcpResource$Outbound - | undefined; - stack?: PersistImportedDeploymentRequestProfileGcpStack$Outbound | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileGcpBinding$Outbound = + { + resource?: + | PersistImportedDeploymentRequestPreparedStackProfileGcpResource$Outbound + | undefined; + stack?: + | PersistImportedDeploymentRequestPreparedStackProfileGcpStack$Outbound + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileGcpBinding$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileGcpBinding$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileGcpBinding$Outbound, - PersistImportedDeploymentRequestProfileGcpBinding + PersistImportedDeploymentRequestPreparedStackProfileGcpBinding$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileGcpBinding > = z.object({ resource: z.lazy(() => - PersistImportedDeploymentRequestProfileGcpResource$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileGcpResource$outboundSchema ).optional(), stack: z.lazy(() => - PersistImportedDeploymentRequestProfileGcpStack$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileGcpStack$outboundSchema ).optional(), }); -export function persistImportedDeploymentRequestProfileGcpBindingToJSON( - persistImportedDeploymentRequestProfileGcpBinding: - PersistImportedDeploymentRequestProfileGcpBinding, +export function persistImportedDeploymentRequestPreparedStackProfileGcpBindingToJSON( + persistImportedDeploymentRequestPreparedStackProfileGcpBinding: + PersistImportedDeploymentRequestPreparedStackProfileGcpBinding, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileGcpBinding$outboundSchema.parse( - persistImportedDeploymentRequestProfileGcpBinding, - ), + PersistImportedDeploymentRequestPreparedStackProfileGcpBinding$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileGcpBinding), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileGcpGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfileGcpGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfileGcpGrant$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileGcpGrant$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileGcpGrant$Outbound, - PersistImportedDeploymentRequestProfileGcpGrant + PersistImportedDeploymentRequestPreparedStackProfileGcpGrant$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileGcpGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -8480,184 +13671,193 @@ export const PersistImportedDeploymentRequestProfileGcpGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function persistImportedDeploymentRequestProfileGcpGrantToJSON( - persistImportedDeploymentRequestProfileGcpGrant: - PersistImportedDeploymentRequestProfileGcpGrant, +export function persistImportedDeploymentRequestPreparedStackProfileGcpGrantToJSON( + persistImportedDeploymentRequestPreparedStackProfileGcpGrant: + PersistImportedDeploymentRequestPreparedStackProfileGcpGrant, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileGcpGrant$outboundSchema.parse( - persistImportedDeploymentRequestProfileGcpGrant, - ), + PersistImportedDeploymentRequestPreparedStackProfileGcpGrant$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileGcpGrant), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileGcp$Outbound = { - binding: PersistImportedDeploymentRequestProfileGcpBinding$Outbound; +export type PersistImportedDeploymentRequestPreparedStackProfileGcp$Outbound = { + binding: + PersistImportedDeploymentRequestPreparedStackProfileGcpBinding$Outbound; description?: string | null | undefined; - grant: PersistImportedDeploymentRequestProfileGcpGrant$Outbound; + grant: PersistImportedDeploymentRequestPreparedStackProfileGcpGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestProfileGcp$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileGcp$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileGcp$Outbound, - PersistImportedDeploymentRequestProfileGcp + PersistImportedDeploymentRequestPreparedStackProfileGcp$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileGcp > = z.object({ binding: z.lazy(() => - PersistImportedDeploymentRequestProfileGcpBinding$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileGcpBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - PersistImportedDeploymentRequestProfileGcpGrant$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileGcpGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function persistImportedDeploymentRequestProfileGcpToJSON( - persistImportedDeploymentRequestProfileGcp: - PersistImportedDeploymentRequestProfileGcp, +export function persistImportedDeploymentRequestPreparedStackProfileGcpToJSON( + persistImportedDeploymentRequestPreparedStackProfileGcp: + PersistImportedDeploymentRequestPreparedStackProfileGcp, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileGcp$outboundSchema.parse( - persistImportedDeploymentRequestProfileGcp, - ), + PersistImportedDeploymentRequestPreparedStackProfileGcp$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileGcp), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfilePlatforms$Outbound = { - aws?: - | Array - | null - | undefined; - azure?: - | Array - | null - | undefined; - gcp?: - | Array - | null - | undefined; -}; +export type PersistImportedDeploymentRequestPreparedStackProfilePlatforms$Outbound = + { + aws?: + | Array + | null + | undefined; + azure?: + | Array< + PersistImportedDeploymentRequestPreparedStackProfileAzure$Outbound + > + | null + | undefined; + gcp?: + | Array + | null + | undefined; + }; /** @internal */ -export const PersistImportedDeploymentRequestProfilePlatforms$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfilePlatforms$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfilePlatforms$Outbound, - PersistImportedDeploymentRequestProfilePlatforms + PersistImportedDeploymentRequestPreparedStackProfilePlatforms$Outbound, + PersistImportedDeploymentRequestPreparedStackProfilePlatforms > = z.object({ aws: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestProfileAw$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAw$outboundSchema )), ).optional(), azure: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestProfileAzure$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileAzure$outboundSchema )), ).optional(), gcp: z.nullable( z.array(z.lazy(() => - PersistImportedDeploymentRequestProfileGcp$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfileGcp$outboundSchema )), ).optional(), }); -export function persistImportedDeploymentRequestProfilePlatformsToJSON( - persistImportedDeploymentRequestProfilePlatforms: - PersistImportedDeploymentRequestProfilePlatforms, +export function persistImportedDeploymentRequestPreparedStackProfilePlatformsToJSON( + persistImportedDeploymentRequestPreparedStackProfilePlatforms: + PersistImportedDeploymentRequestPreparedStackProfilePlatforms, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfilePlatforms$outboundSchema.parse( - persistImportedDeploymentRequestProfilePlatforms, - ), + PersistImportedDeploymentRequestPreparedStackProfilePlatforms$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfilePlatforms), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfile$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackProfile$Outbound = { description: string; id: string; - platforms: PersistImportedDeploymentRequestProfilePlatforms$Outbound; + platforms: + PersistImportedDeploymentRequestPreparedStackProfilePlatforms$Outbound; }; /** @internal */ -export const PersistImportedDeploymentRequestProfile$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfile$Outbound, - PersistImportedDeploymentRequestProfile -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - PersistImportedDeploymentRequestProfilePlatforms$outboundSchema - ), -}); +export const PersistImportedDeploymentRequestPreparedStackProfile$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackProfile$Outbound, + PersistImportedDeploymentRequestPreparedStackProfile + > = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + PersistImportedDeploymentRequestPreparedStackProfilePlatforms$outboundSchema + ), + }); -export function persistImportedDeploymentRequestProfileToJSON( - persistImportedDeploymentRequestProfile: - PersistImportedDeploymentRequestProfile, +export function persistImportedDeploymentRequestPreparedStackProfileToJSON( + persistImportedDeploymentRequestPreparedStackProfile: + PersistImportedDeploymentRequestPreparedStackProfile, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfile$outboundSchema.parse( - persistImportedDeploymentRequestProfile, + PersistImportedDeploymentRequestPreparedStackProfile$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackProfile, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestProfileUnion$Outbound = - | PersistImportedDeploymentRequestProfile$Outbound +export type PersistImportedDeploymentRequestPreparedStackProfileUnion$Outbound = + | PersistImportedDeploymentRequestPreparedStackProfile$Outbound | string; /** @internal */ -export const PersistImportedDeploymentRequestProfileUnion$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackProfileUnion$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestProfileUnion$Outbound, - PersistImportedDeploymentRequestProfileUnion + PersistImportedDeploymentRequestPreparedStackProfileUnion$Outbound, + PersistImportedDeploymentRequestPreparedStackProfileUnion > = z.union([ - z.lazy(() => PersistImportedDeploymentRequestProfile$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackProfile$outboundSchema + ), z.string(), ]); -export function persistImportedDeploymentRequestProfileUnionToJSON( - persistImportedDeploymentRequestProfileUnion: - PersistImportedDeploymentRequestProfileUnion, +export function persistImportedDeploymentRequestPreparedStackProfileUnionToJSON( + persistImportedDeploymentRequestPreparedStackProfileUnion: + PersistImportedDeploymentRequestPreparedStackProfileUnion, ): string { return JSON.stringify( - PersistImportedDeploymentRequestProfileUnion$outboundSchema.parse( - persistImportedDeploymentRequestProfileUnion, - ), + PersistImportedDeploymentRequestPreparedStackProfileUnion$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackProfileUnion), ); } /** @internal */ -export type PersistImportedDeploymentRequestPermissions$Outbound = { - management?: - | PersistImportedDeploymentRequestManagement1$Outbound - | PersistImportedDeploymentRequestManagement2$Outbound - | string - | undefined; - profiles: { - [k: string]: { - [k: string]: Array< - PersistImportedDeploymentRequestProfile$Outbound | string - >; +export type PersistImportedDeploymentRequestPreparedStackPermissions$Outbound = + { + management?: + | PersistImportedDeploymentRequestPreparedStackManagement1$Outbound + | PersistImportedDeploymentRequestPreparedStackManagement2$Outbound + | string + | undefined; + profiles: { + [k: string]: { + [k: string]: Array< + PersistImportedDeploymentRequestPreparedStackProfile$Outbound | string + >; + }; }; }; -}; /** @internal */ -export const PersistImportedDeploymentRequestPermissions$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackPermissions$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestPermissions$Outbound, - PersistImportedDeploymentRequestPermissions + PersistImportedDeploymentRequestPreparedStackPermissions$Outbound, + PersistImportedDeploymentRequestPreparedStackPermissions > = z.object({ management: z.union([ - z.lazy(() => PersistImportedDeploymentRequestManagement1$outboundSchema), - z.lazy(() => PersistImportedDeploymentRequestManagement2$outboundSchema), - PersistImportedDeploymentRequestManagementEnum$outboundSchema, + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackManagement1$outboundSchema + ), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackManagement2$outboundSchema + ), + PersistImportedDeploymentRequestPreparedStackManagementEnum$outboundSchema, ]).optional(), profiles: z.record( z.string(), @@ -8666,7 +13866,7 @@ export const PersistImportedDeploymentRequestPermissions$outboundSchema: z.array( z.union([ z.lazy(() => - PersistImportedDeploymentRequestProfile$outboundSchema + PersistImportedDeploymentRequestPreparedStackProfile$outboundSchema ), z.string(), ]), @@ -8675,133 +13875,143 @@ export const PersistImportedDeploymentRequestPermissions$outboundSchema: ), }); -export function persistImportedDeploymentRequestPermissionsToJSON( - persistImportedDeploymentRequestPermissions: - PersistImportedDeploymentRequestPermissions, +export function persistImportedDeploymentRequestPreparedStackPermissionsToJSON( + persistImportedDeploymentRequestPreparedStackPermissions: + PersistImportedDeploymentRequestPreparedStackPermissions, ): string { return JSON.stringify( - PersistImportedDeploymentRequestPermissions$outboundSchema.parse( - persistImportedDeploymentRequestPermissions, - ), + PersistImportedDeploymentRequestPreparedStackPermissions$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackPermissions), ); } /** @internal */ -export type PersistImportedDeploymentRequestConfig$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackConfig$Outbound = { id: string; type: string; [additionalProperties: string]: unknown; }; /** @internal */ -export const PersistImportedDeploymentRequestConfig$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestConfig$Outbound, - PersistImportedDeploymentRequestConfig -> = z.object({ - id: z.string(), - type: z.string(), - additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(), -}).transform((v) => { - return { - ...v.additionalProperties, - ...remap$(v, { - additionalProperties: null, - }), - }; -}); +export const PersistImportedDeploymentRequestPreparedStackConfig$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestPreparedStackConfig$Outbound, + PersistImportedDeploymentRequestPreparedStackConfig + > = z.object({ + id: z.string(), + type: z.string(), + additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(), + }).transform((v) => { + return { + ...v.additionalProperties, + ...remap$(v, { + additionalProperties: null, + }), + }; + }); -export function persistImportedDeploymentRequestConfigToJSON( - persistImportedDeploymentRequestConfig: - PersistImportedDeploymentRequestConfig, +export function persistImportedDeploymentRequestPreparedStackConfigToJSON( + persistImportedDeploymentRequestPreparedStackConfig: + PersistImportedDeploymentRequestPreparedStackConfig, ): string { return JSON.stringify( - PersistImportedDeploymentRequestConfig$outboundSchema.parse( - persistImportedDeploymentRequestConfig, + PersistImportedDeploymentRequestPreparedStackConfig$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackConfig, ), ); } /** @internal */ -export type PersistImportedDeploymentRequestDependency$Outbound = { +export type PersistImportedDeploymentRequestPreparedStackDependency$Outbound = { id: string; type: string; }; /** @internal */ -export const PersistImportedDeploymentRequestDependency$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackDependency$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestDependency$Outbound, - PersistImportedDeploymentRequestDependency + PersistImportedDeploymentRequestPreparedStackDependency$Outbound, + PersistImportedDeploymentRequestPreparedStackDependency > = z.object({ id: z.string(), type: z.string(), }); -export function persistImportedDeploymentRequestDependencyToJSON( - persistImportedDeploymentRequestDependency: - PersistImportedDeploymentRequestDependency, +export function persistImportedDeploymentRequestPreparedStackDependencyToJSON( + persistImportedDeploymentRequestPreparedStackDependency: + PersistImportedDeploymentRequestPreparedStackDependency, ): string { return JSON.stringify( - PersistImportedDeploymentRequestDependency$outboundSchema.parse( - persistImportedDeploymentRequestDependency, - ), + PersistImportedDeploymentRequestPreparedStackDependency$outboundSchema + .parse(persistImportedDeploymentRequestPreparedStackDependency), ); } /** @internal */ -export const PersistImportedDeploymentRequestLifecycle$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestLifecycle, - ); +export const PersistImportedDeploymentRequestPreparedStackLifecycle$outboundSchema: + z.ZodEnum = z + .enum(PersistImportedDeploymentRequestPreparedStackLifecycle); /** @internal */ -export type PersistImportedDeploymentRequestResources$Outbound = { - config: PersistImportedDeploymentRequestConfig$Outbound; - dependencies: Array; +export type PersistImportedDeploymentRequestPreparedStackResources$Outbound = { + config: PersistImportedDeploymentRequestPreparedStackConfig$Outbound; + dependencies: Array< + PersistImportedDeploymentRequestPreparedStackDependency$Outbound + >; + enabledWhen?: string | null | undefined; lifecycle: string; remoteAccess?: boolean | undefined; }; /** @internal */ -export const PersistImportedDeploymentRequestResources$outboundSchema: +export const PersistImportedDeploymentRequestPreparedStackResources$outboundSchema: z.ZodType< - PersistImportedDeploymentRequestResources$Outbound, - PersistImportedDeploymentRequestResources + PersistImportedDeploymentRequestPreparedStackResources$Outbound, + PersistImportedDeploymentRequestPreparedStackResources > = z.object({ - config: z.lazy(() => PersistImportedDeploymentRequestConfig$outboundSchema), + config: z.lazy(() => + PersistImportedDeploymentRequestPreparedStackConfig$outboundSchema + ), dependencies: z.array( - z.lazy(() => PersistImportedDeploymentRequestDependency$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackDependency$outboundSchema + ), ), - lifecycle: PersistImportedDeploymentRequestLifecycle$outboundSchema, + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: + PersistImportedDeploymentRequestPreparedStackLifecycle$outboundSchema, remoteAccess: z.boolean().optional(), }); -export function persistImportedDeploymentRequestResourcesToJSON( - persistImportedDeploymentRequestResources: - PersistImportedDeploymentRequestResources, +export function persistImportedDeploymentRequestPreparedStackResourcesToJSON( + persistImportedDeploymentRequestPreparedStackResources: + PersistImportedDeploymentRequestPreparedStackResources, ): string { return JSON.stringify( - PersistImportedDeploymentRequestResources$outboundSchema.parse( - persistImportedDeploymentRequestResources, + PersistImportedDeploymentRequestPreparedStackResources$outboundSchema.parse( + persistImportedDeploymentRequestPreparedStackResources, ), ); } /** @internal */ -export const PersistImportedDeploymentRequestSupportedPlatform$outboundSchema: - z.ZodEnum = z.enum( - PersistImportedDeploymentRequestSupportedPlatform, - ); +export const PersistImportedDeploymentRequestPreparedStackSupportedPlatform$outboundSchema: + z.ZodEnum< + typeof PersistImportedDeploymentRequestPreparedStackSupportedPlatform + > = z.enum(PersistImportedDeploymentRequestPreparedStackSupportedPlatform); /** @internal */ export type PersistImportedDeploymentRequestPreparedStack$Outbound = { id: string; - inputs?: Array | undefined; + inputs?: + | Array + | undefined; permissions?: - | PersistImportedDeploymentRequestPermissions$Outbound + | PersistImportedDeploymentRequestPreparedStackPermissions$Outbound | undefined; resources: { - [k: string]: PersistImportedDeploymentRequestResources$Outbound; + [k: string]: + PersistImportedDeploymentRequestPreparedStackResources$Outbound; }; supportedPlatforms?: Array | null | undefined; }; @@ -8814,17 +14024,23 @@ export const PersistImportedDeploymentRequestPreparedStack$outboundSchema: > = z.object({ id: z.string(), inputs: z.array( - z.lazy(() => PersistImportedDeploymentRequestInput$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackInput$outboundSchema + ), ).optional(), permissions: z.lazy(() => - PersistImportedDeploymentRequestPermissions$outboundSchema + PersistImportedDeploymentRequestPreparedStackPermissions$outboundSchema ).optional(), resources: z.record( z.string(), - z.lazy(() => PersistImportedDeploymentRequestResources$outboundSchema), + z.lazy(() => + PersistImportedDeploymentRequestPreparedStackResources$outboundSchema + ), ), supportedPlatforms: z.nullable( - z.array(PersistImportedDeploymentRequestSupportedPlatform$outboundSchema), + z.array( + PersistImportedDeploymentRequestPreparedStackSupportedPlatform$outboundSchema, + ), ).optional(), }); @@ -8865,16 +14081,90 @@ export function persistImportedDeploymentRequestPreparedStackUnionToJSON( ); } +/** @internal */ +export type PersistImportedDeploymentRequestSetupUpdateAuthorization$Outbound = + { + baselineFrozenDigest: string; + nonce: string; + releaseId: string; + setupFingerprint: string; + setupFingerprintVersion: number; + setupTarget: string; + targetFrozenDigest: string; + }; + +/** @internal */ +export const PersistImportedDeploymentRequestSetupUpdateAuthorization$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestSetupUpdateAuthorization$Outbound, + PersistImportedDeploymentRequestSetupUpdateAuthorization + > = z.object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), + }); + +export function persistImportedDeploymentRequestSetupUpdateAuthorizationToJSON( + persistImportedDeploymentRequestSetupUpdateAuthorization: + PersistImportedDeploymentRequestSetupUpdateAuthorization, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestSetupUpdateAuthorization$outboundSchema + .parse(persistImportedDeploymentRequestSetupUpdateAuthorization), + ); +} + +/** @internal */ +export type PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion$Outbound = + | PersistImportedDeploymentRequestSetupUpdateAuthorization$Outbound + | any; + +/** @internal */ +export const PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion$outboundSchema: + z.ZodType< + PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion$Outbound, + PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion + > = z.union([ + z.lazy(() => + PersistImportedDeploymentRequestSetupUpdateAuthorization$outboundSchema + ), + z.any(), + ]); + +export function persistImportedDeploymentRequestSetupUpdateAuthorizationUnionToJSON( + persistImportedDeploymentRequestSetupUpdateAuthorizationUnion: + PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion, +): string { + return JSON.stringify( + PersistImportedDeploymentRequestSetupUpdateAuthorizationUnion$outboundSchema + .parse(persistImportedDeploymentRequestSetupUpdateAuthorizationUnion), + ); +} + /** @internal */ export type PersistImportedDeploymentRequestRuntimeMetadata$Outbound = { lastSyncedEnvVarsHash?: string | null | undefined; lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | PersistImportedDeploymentRequestPendingPreparedStack$Outbound + | any + | null + | undefined; preparedStack?: | PersistImportedDeploymentRequestPreparedStack$Outbound | any | null | undefined; registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | PersistImportedDeploymentRequestSetupUpdateAuthorization$Outbound + | any + | null + | undefined; }; /** @internal */ @@ -8885,6 +14175,14 @@ export const PersistImportedDeploymentRequestRuntimeMetadata$outboundSchema: > = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestPendingPreparedStack$outboundSchema + ), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([ z.lazy(() => @@ -8894,6 +14192,14 @@ export const PersistImportedDeploymentRequestRuntimeMetadata$outboundSchema: ]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => + PersistImportedDeploymentRequestSetupUpdateAuthorization$outboundSchema + ), + z.any(), + ]), + ).optional(), }); export function persistImportedDeploymentRequestRuntimeMetadataToJSON( @@ -9081,6 +14387,7 @@ export type PersistImportedDeploymentRequest$Outbound = { | null | undefined; runtimeMetadata: PersistImportedDeploymentRequestRuntimeMetadata$Outbound; + scheduleReconciliation: boolean; deploymentProtocolVersion: number; status: string; currentReleaseId?: string | undefined; @@ -9139,6 +14446,7 @@ export const PersistImportedDeploymentRequest$outboundSchema: z.ZodType< runtimeMetadata: z.lazy(() => PersistImportedDeploymentRequestRuntimeMetadata$outboundSchema ), + scheduleReconciliation: z.boolean().default(false), deploymentProtocolVersion: z.int(), status: PersistImportedDeploymentRequestStatus$outboundSchema.default( "provisioning", diff --git a/client-sdks/platform/typescript/src/models/prepareddeploymentstack.ts b/client-sdks/platform/typescript/src/models/prepareddeploymentstack.ts index 74d7aaf99..9c80a3895 100644 --- a/client-sdks/platform/typescript/src/models/prepareddeploymentstack.ts +++ b/client-sdks/platform/typescript/src/models/prepareddeploymentstack.ts @@ -1420,6 +1420,17 @@ export type PreparedDeploymentStackResources = { * The total dependencies are: resource.get_dependencies() + this list */ dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ @@ -3583,6 +3594,7 @@ export const PreparedDeploymentStackResources$inboundSchema: z.ZodType< dependencies: z.array( z.lazy(() => PreparedDeploymentStackDependency$inboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: PreparedDeploymentStackLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }); diff --git a/client-sdks/platform/typescript/src/models/releaselistitemresponse.ts b/client-sdks/platform/typescript/src/models/releaselistitemresponse.ts index 5b66cd9c1..052addaa5 100644 --- a/client-sdks/platform/typescript/src/models/releaselistitemresponse.ts +++ b/client-sdks/platform/typescript/src/models/releaselistitemresponse.ts @@ -30,6 +30,24 @@ export type ReleaseListItemResponseProject = { name: string; }; +/** + * Rollout stats, included when ?include=rollout is used + */ +export type Rollout = { + /** + * Deployments that finished updating to this release (excludes initial provisions) + */ + updatedCount: number; + /** + * Deployments currently targeting this release but not yet running it + */ + pendingCount: number; + /** + * Average time from release creation until a deployment finished updating, in milliseconds + */ + avgDurationMs: number | null; +}; + export type ReleaseListItemResponse = { /** * Unique identifier for the release. @@ -47,6 +65,10 @@ export type ReleaseListItemResponse = { * Project info, included when ?include=project is used */ project?: ReleaseListItemResponseProject | null | undefined; + /** + * Rollout stats, included when ?include=rollout is used + */ + rollout?: Rollout | null | undefined; }; /** @internal */ @@ -68,6 +90,23 @@ export function releaseListItemResponseProjectFromJSON( ); } +/** @internal */ +export const Rollout$inboundSchema: z.ZodType = z.object({ + updatedCount: z.int(), + pendingCount: z.int(), + avgDurationMs: z.nullable(z.number()), +}); + +export function rolloutFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => Rollout$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'Rollout' from JSON`, + ); +} + /** @internal */ export const ReleaseListItemResponse$inboundSchema: z.ZodType< ReleaseListItemResponse, @@ -85,6 +124,7 @@ export const ReleaseListItemResponse$inboundSchema: z.ZodType< project: z.nullable( z.lazy(() => ReleaseListItemResponseProject$inboundSchema), ).optional(), + rollout: z.nullable(z.lazy(() => Rollout$inboundSchema)).optional(), }); export function releaseListItemResponseFromJSON( diff --git a/client-sdks/platform/typescript/src/models/slackchannel.ts b/client-sdks/platform/typescript/src/models/slackchannel.ts new file mode 100644 index 000000000..ed7d566af --- /dev/null +++ b/client-sdks/platform/typescript/src/models/slackchannel.ts @@ -0,0 +1,32 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type SlackChannel = { + id: string; + name: string; + isMember: boolean; +}; + +/** @internal */ +export const SlackChannel$inboundSchema: z.ZodType = z + .object({ + id: z.string(), + name: z.string(), + isMember: z.boolean(), + }); + +export function slackChannelFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SlackChannel$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SlackChannel' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/slackchannelsresponse.ts b/client-sdks/platform/typescript/src/models/slackchannelsresponse.ts new file mode 100644 index 000000000..04ee9b4ad --- /dev/null +++ b/client-sdks/platform/typescript/src/models/slackchannelsresponse.ts @@ -0,0 +1,31 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { SlackChannel, SlackChannel$inboundSchema } from "./slackchannel.js"; + +export type SlackChannelsResponse = { + channels: Array; +}; + +/** @internal */ +export const SlackChannelsResponse$inboundSchema: z.ZodType< + SlackChannelsResponse, + unknown +> = z.object({ + channels: z.array(SlackChannel$inboundSchema), +}); + +export function slackChannelsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SlackChannelsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SlackChannelsResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/slackinstallurlresponse.ts b/client-sdks/platform/typescript/src/models/slackinstallurlresponse.ts new file mode 100644 index 000000000..8fee0e10f --- /dev/null +++ b/client-sdks/platform/typescript/src/models/slackinstallurlresponse.ts @@ -0,0 +1,30 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type SlackInstallUrlResponse = { + url: string; +}; + +/** @internal */ +export const SlackInstallUrlResponse$inboundSchema: z.ZodType< + SlackInstallUrlResponse, + unknown +> = z.object({ + url: z.string(), +}); + +export function slackInstallUrlResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SlackInstallUrlResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SlackInstallUrlResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/slackintegrationstatus.ts b/client-sdks/platform/typescript/src/models/slackintegrationstatus.ts new file mode 100644 index 000000000..6126e773f --- /dev/null +++ b/client-sdks/platform/typescript/src/models/slackintegrationstatus.ts @@ -0,0 +1,40 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type SlackIntegrationStatus = { + connected: boolean; + slackTeamId: string | null; + slackTeamName: string | null; + installedByUserId: string | null; + installedAt: string | null; + notificationChannelId: string | null; +}; + +/** @internal */ +export const SlackIntegrationStatus$inboundSchema: z.ZodType< + SlackIntegrationStatus, + unknown +> = z.object({ + connected: z.boolean(), + slackTeamId: z.nullable(z.string()), + slackTeamName: z.nullable(z.string()), + installedByUserId: z.nullable(z.string()), + installedAt: z.nullable(z.string()), + notificationChannelId: z.nullable(z.string()), +}); + +export function slackIntegrationStatusFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SlackIntegrationStatus$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SlackIntegrationStatus' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/slacknotificationchannelrequest.ts b/client-sdks/platform/typescript/src/models/slacknotificationchannelrequest.ts new file mode 100644 index 000000000..8d675d3b2 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/slacknotificationchannelrequest.ts @@ -0,0 +1,32 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; + +export type SlackNotificationChannelRequest = { + channelId: string | null; +}; + +/** @internal */ +export type SlackNotificationChannelRequest$Outbound = { + channelId: string | null; +}; + +/** @internal */ +export const SlackNotificationChannelRequest$outboundSchema: z.ZodType< + SlackNotificationChannelRequest$Outbound, + SlackNotificationChannelRequest +> = z.object({ + channelId: z.nullable(z.string()), +}); + +export function slackNotificationChannelRequestToJSON( + slackNotificationChannelRequest: SlackNotificationChannelRequest, +): string { + return JSON.stringify( + SlackNotificationChannelRequest$outboundSchema.parse( + slackNotificationChannelRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/slacknotificationchannelresponse.ts b/client-sdks/platform/typescript/src/models/slacknotificationchannelresponse.ts new file mode 100644 index 000000000..78a07f0d1 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/slacknotificationchannelresponse.ts @@ -0,0 +1,32 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type SlackNotificationChannelResponse = { + notificationChannelId: string | null; + warning: string | null; +}; + +/** @internal */ +export const SlackNotificationChannelResponse$inboundSchema: z.ZodType< + SlackNotificationChannelResponse, + unknown +> = z.object({ + notificationChannelId: z.nullable(z.string()), + warning: z.nullable(z.string()), +}); + +export function slackNotificationChannelResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SlackNotificationChannelResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SlackNotificationChannelResponse' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/syncacquireresponsedeployment.ts b/client-sdks/platform/typescript/src/models/syncacquireresponsedeployment.ts index f7d4bd94d..d51e95f8e 100644 --- a/client-sdks/platform/typescript/src/models/syncacquireresponsedeployment.ts +++ b/client-sdks/platform/typescript/src/models/syncacquireresponsedeployment.ts @@ -1502,6 +1502,17 @@ export type SyncAcquireResponseDeploymentCurrentReleaseResources = { * The total dependencies are: resource.get_dependencies() + this list */ dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ @@ -1839,94 +1850,101 @@ export type SyncAcquireResponseDeploymentCurrentPlatform = ClosedEnum< typeof SyncAcquireResponseDeploymentCurrentPlatform >; -export const SyncAcquireResponseDeploymentPreparedStackTypeStringList = { +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList = { StringList: "stringList", } as const; -export type SyncAcquireResponseDeploymentPreparedStackTypeStringList = - ClosedEnum; +export type SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList + >; -export type SyncAcquireResponseDeploymentPreparedStackDefaultStringList = { - type: SyncAcquireResponseDeploymentPreparedStackTypeStringList; - /** - * String list default. - */ - value: Array; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList = + { + type: SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList; + /** + * String list default. + */ + value: Array; + }; -export const SyncAcquireResponseDeploymentPreparedStackTypeBoolean = { +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type SyncAcquireResponseDeploymentPreparedStackTypeBoolean = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackTypeBoolean ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean + >; -export type SyncAcquireResponseDeploymentPreparedStackDefaultBoolean = { - type: SyncAcquireResponseDeploymentPreparedStackTypeBoolean; +export type SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean = { + type: SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean; /** * Boolean default. */ value: boolean; }; -export const SyncAcquireResponseDeploymentPreparedStackTypeNumber = { +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber = { Number: "number", } as const; -export type SyncAcquireResponseDeploymentPreparedStackTypeNumber = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackTypeNumber ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber + >; -export type SyncAcquireResponseDeploymentPreparedStackDefaultNumber = { - type: SyncAcquireResponseDeploymentPreparedStackTypeNumber; +export type SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber = { + type: SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber; /** * Number default. */ value: string; }; -export const SyncAcquireResponseDeploymentPreparedStackTypeString = { +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeString = { String: "string", } as const; -export type SyncAcquireResponseDeploymentPreparedStackTypeString = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackTypeString ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackTypeString = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeString + >; -export type SyncAcquireResponseDeploymentPreparedStackDefaultString = { - type: SyncAcquireResponseDeploymentPreparedStackTypeString; +export type SyncAcquireResponseDeploymentPendingPreparedStackDefaultString = { + type: SyncAcquireResponseDeploymentPendingPreparedStackTypeString; /** * String default. */ value: string; }; -export type SyncAcquireResponseDeploymentPreparedStackDefaultUnion = - | SyncAcquireResponseDeploymentPreparedStackDefaultString - | SyncAcquireResponseDeploymentPreparedStackDefaultNumber - | SyncAcquireResponseDeploymentPreparedStackDefaultBoolean - | SyncAcquireResponseDeploymentPreparedStackDefaultStringList +export type SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultString + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum = { +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum + >; -export type SyncAcquireResponseDeploymentPreparedStackTypeUnion = - | SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum +export type SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type SyncAcquireResponseDeploymentPreparedStackEnv = { +export type SyncAcquireResponseDeploymentPendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1936,7 +1954,7 @@ export type SyncAcquireResponseDeploymentPreparedStackEnv = { */ targetResources?: Array | null | undefined; type?: - | SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum + | SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum | any | null | undefined; @@ -1945,7 +1963,7 @@ export type SyncAcquireResponseDeploymentPreparedStackEnv = { /** * Primitive stack input kind. */ -export const SyncAcquireResponseDeploymentPreparedStackKind = { +export const SyncAcquireResponseDeploymentPendingPreparedStackKind = { String: "string", Secret: "secret", Number: "number", @@ -1957,14 +1975,14 @@ export const SyncAcquireResponseDeploymentPreparedStackKind = { /** * Primitive stack input kind. */ -export type SyncAcquireResponseDeploymentPreparedStackKind = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackKind +export type SyncAcquireResponseDeploymentPendingPreparedStackKind = ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackKind >; /** * Represents the target cloud platform. */ -export const SyncAcquireResponseDeploymentPreparedStackPlatform = { +export const SyncAcquireResponseDeploymentPendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1976,28 +1994,28 @@ export const SyncAcquireResponseDeploymentPreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentPreparedStackPlatform = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackPlatform ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackPlatform = + ClosedEnum; /** * Who can provide a stack input value. */ -export const SyncAcquireResponseDeploymentPreparedStackProvidedBy = { +export const SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type SyncAcquireResponseDeploymentPreparedStackProvidedBy = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackProvidedBy ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy + >; /** * Portable stack input validation constraints. */ -export type SyncAcquireResponseDeploymentPreparedStackValidation = { +export type SyncAcquireResponseDeploymentPendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -2036,19 +2054,19 @@ export type SyncAcquireResponseDeploymentPreparedStackValidation = { values?: Array | null | undefined; }; -export type SyncAcquireResponseDeploymentPreparedStackValidationUnion = - | SyncAcquireResponseDeploymentPreparedStackValidation +export type SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackValidation | any; /** * Stack input definition serialized into a release stack. */ -export type SyncAcquireResponseDeploymentPreparedStackInput = { +export type SyncAcquireResponseDeploymentPendingPreparedStackInput = { default?: - | SyncAcquireResponseDeploymentPreparedStackDefaultString - | SyncAcquireResponseDeploymentPreparedStackDefaultNumber - | SyncAcquireResponseDeploymentPreparedStackDefaultBoolean - | SyncAcquireResponseDeploymentPreparedStackDefaultStringList + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultString + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean + | SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList | any | null | undefined; @@ -2059,7 +2077,7 @@ export type SyncAcquireResponseDeploymentPreparedStackInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -2067,7 +2085,7 @@ export type SyncAcquireResponseDeploymentPreparedStackInput = { /** * Primitive stack input kind. */ - kind: SyncAcquireResponseDeploymentPreparedStackKind; + kind: SyncAcquireResponseDeploymentPendingPreparedStackKind; /** * Human-facing field label. */ @@ -2080,48 +2098,53 @@ export type SyncAcquireResponseDeploymentPreparedStackInput = { * Platforms where this input applies. */ platforms?: - | Array + | Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array< + SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy + >; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; validation?: - | SyncAcquireResponseDeploymentPreparedStackValidation + | SyncAcquireResponseDeploymentPendingPreparedStackValidation | any | null | undefined; }; -export const SyncAcquireResponseDeploymentPreparedStackManagementEnum = { +export const SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum = { Auto: "auto", } as const; -export type SyncAcquireResponseDeploymentPreparedStackManagementEnum = - ClosedEnum; +export type SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum + >; /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAwStack = { +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2135,36 +2158,41 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackOverrideAwResource - | undefined; - /** - * AWS-specific binding specification - */ - stack?: SyncAcquireResponseDeploymentPreparedStackOverrideAwStack | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding = + { + /** + * AWS-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack + | undefined; + }; /** * IAM effect. Defaults to Allow. */ -export const SyncAcquireResponseDeploymentPreparedStackOverrideEffect = { +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideEffect = - ClosedEnum; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect + >; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAwGrant = { +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2190,11 +2218,11 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAw = { +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackOverrideAwBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2202,11 +2230,13 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncAcquireResponseDeploymentPreparedStackOverrideEffect | undefined; + effect?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackOverrideAwGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2216,75 +2246,80 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideAw = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackOverrideAzureResource - | undefined; - /** - * Azure-specific binding specification - */ - stack?: - | SyncAcquireResponseDeploymentPreparedStackOverrideAzureStack - | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideAzure = { +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackOverrideAzureBinding; + binding: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2292,7 +2327,7 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackOverrideAzureGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2302,110 +2337,115 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideAzure = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideConditionResource = +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentPreparedStackOverrideResourceConditionUnion = - | SyncAcquireResponseDeploymentPreparedStackOverrideConditionResource +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpResource = { - condition?: - | SyncAcquireResponseDeploymentPreparedStackOverrideConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource = + { + condition?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideConditionStack = { - expression: string; - title: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack = + { + expression: string; + title: string; + }; -export type SyncAcquireResponseDeploymentPreparedStackOverrideStackConditionUnion = - | SyncAcquireResponseDeploymentPreparedStackOverrideConditionStack +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpStack = { - condition?: - | SyncAcquireResponseDeploymentPreparedStackOverrideConditionStack - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack = + { + condition?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackOverrideGcpResource - | undefined; - /** - * GCP-specific binding specification - */ - stack?: - | SyncAcquireResponseDeploymentPreparedStackOverrideGcpStack - | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding = + { + /** + * GCP-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideGcp = { +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackOverrideGcpBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2413,7 +2453,7 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackOverrideGcpGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2423,34 +2463,35 @@ export type SyncAcquireResponseDeploymentPreparedStackOverrideGcp = { /** * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentPreparedStackOverridePlatforms = { - /** - * AWS permission configurations - */ - aws?: - | Array - | null - | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: - | Array - | null - | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms = + { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; + }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentPreparedStackOverride = { +export type SyncAcquireResponseDeploymentPendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -2462,17 +2503,17 @@ export type SyncAcquireResponseDeploymentPreparedStackOverride = { /** * Platform-specific permission configurations */ - platforms: SyncAcquireResponseDeploymentPreparedStackOverridePlatforms; + platforms: SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentPreparedStackOverrideUnion = - | SyncAcquireResponseDeploymentPreparedStackOverride +export type SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackOverride | string; -export type SyncAcquireResponseDeploymentPreparedStackManagement2 = { +export type SyncAcquireResponseDeploymentPendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * @@ -2481,7 +2522,7 @@ export type SyncAcquireResponseDeploymentPreparedStackManagement2 = { */ override: { [k: string]: Array< - SyncAcquireResponseDeploymentPreparedStackOverride | string + SyncAcquireResponseDeploymentPendingPreparedStackOverride | string >; }; }; @@ -2489,21 +2530,22 @@ export type SyncAcquireResponseDeploymentPreparedStackManagement2 = { /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAwStack = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2517,37 +2559,40 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendAwStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAwBinding = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentPreparedStackExtendAwResource + | SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncAcquireResponseDeploymentPreparedStackExtendAwStack | undefined; + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack + | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncAcquireResponseDeploymentPreparedStackExtendEffect = { +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentPreparedStackExtendEffect = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackExtendEffect ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect + >; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAwGrant = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2573,11 +2618,11 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAw = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackExtendAwBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2585,11 +2630,13 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncAcquireResponseDeploymentPreparedStackExtendEffect | undefined; + effect?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackExtendAwGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2599,75 +2646,79 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendAw = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackExtendAzureResource - | undefined; - /** - * Azure-specific binding specification - */ - stack?: - | SyncAcquireResponseDeploymentPreparedStackExtendAzureStack - | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackExtendAzure = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackExtendAzureBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2675,7 +2726,7 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackExtendAzureGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2685,49 +2736,51 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendAzure = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentPreparedStackExtendConditionResource = +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentPreparedStackExtendResourceConditionUnion = - | SyncAcquireResponseDeploymentPreparedStackExtendConditionResource +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackExtendGcpResource = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource = + { + condition?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; + +/** + * GCP IAM condition + */ +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack = + { + expression: string; + title: string; + }; + +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack = { condition?: - | SyncAcquireResponseDeploymentPreparedStackExtendConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - -/** - * GCP IAM condition - */ -export type SyncAcquireResponseDeploymentPreparedStackExtendConditionStack = { - expression: string; - title: string; -}; - -export type SyncAcquireResponseDeploymentPreparedStackExtendStackConditionUnion = - | SyncAcquireResponseDeploymentPreparedStackExtendConditionStack - | any; - -/** - * GCP-specific binding specification - */ -export type SyncAcquireResponseDeploymentPreparedStackExtendGcpStack = { - condition?: - | SyncAcquireResponseDeploymentPreparedStackExtendConditionStack + | SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack | any | null | undefined; @@ -2740,23 +2793,26 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackExtendGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackExtendGcpResource - | undefined; - /** - * GCP-specific binding specification - */ - stack?: SyncAcquireResponseDeploymentPreparedStackExtendGcpStack | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding = + { + /** + * GCP-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackExtendGcpGrant = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2782,11 +2838,11 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackExtendGcp = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackExtendGcpBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2794,7 +2850,7 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackExtendGcpGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2804,26 +2860,26 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentPreparedStackExtendPlatforms = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms = { /** * AWS permission configurations */ aws?: - | Array + | Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ gcp?: - | Array + | Array | null | undefined; }; @@ -2831,7 +2887,7 @@ export type SyncAcquireResponseDeploymentPreparedStackExtendPlatforms = { /** * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentPreparedStackExtend = { +export type SyncAcquireResponseDeploymentPendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -2843,17 +2899,17 @@ export type SyncAcquireResponseDeploymentPreparedStackExtend = { /** * Platform-specific permission configurations */ - platforms: SyncAcquireResponseDeploymentPreparedStackExtendPlatforms; + platforms: SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentPreparedStackExtendUnion = - | SyncAcquireResponseDeploymentPreparedStackExtend +export type SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackExtend | string; -export type SyncAcquireResponseDeploymentPreparedStackManagement1 = { +export type SyncAcquireResponseDeploymentPendingPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * @@ -2862,7 +2918,7 @@ export type SyncAcquireResponseDeploymentPreparedStackManagement1 = { */ extend: { [k: string]: Array< - SyncAcquireResponseDeploymentPreparedStackExtend | string + SyncAcquireResponseDeploymentPendingPreparedStackExtend | string >; }; }; @@ -2870,29 +2926,30 @@ export type SyncAcquireResponseDeploymentPreparedStackManagement1 = { /** * Management permissions configuration for stack management access */ -export type SyncAcquireResponseDeploymentPreparedStackManagementUnion = - | SyncAcquireResponseDeploymentPreparedStackManagement1 - | SyncAcquireResponseDeploymentPreparedStackManagement2 - | SyncAcquireResponseDeploymentPreparedStackManagementEnum; +export type SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackManagement1 + | SyncAcquireResponseDeploymentPendingPreparedStackManagement2 + | SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource = + { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; + }; /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAwStack = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2906,36 +2963,41 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileAwStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackProfileAwResource - | undefined; - /** - * AWS-specific binding specification - */ - stack?: SyncAcquireResponseDeploymentPreparedStackProfileAwStack | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding = + { + /** + * AWS-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack + | undefined; + }; /** * IAM effect. Defaults to Allow. */ -export const SyncAcquireResponseDeploymentPreparedStackProfileEffect = { +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentPreparedStackProfileEffect = - ClosedEnum; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect + >; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAwGrant = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2961,11 +3023,11 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAw = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackProfileAwBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2973,11 +3035,13 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncAcquireResponseDeploymentPreparedStackProfileEffect | undefined; + effect?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect + | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackProfileAwGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2987,75 +3051,79 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileAw = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack = + { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; + }; /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackProfileAzureResource - | undefined; - /** - * Azure-specific binding specification - */ - stack?: - | SyncAcquireResponseDeploymentPreparedStackProfileAzureStack - | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding = + { + /** + * Azure-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant = + { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; + }; /** * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackProfileAzure = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackProfileAzureBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -3063,7 +3131,7 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackProfileAzureGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -3073,49 +3141,51 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileAzure = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentPreparedStackProfileConditionResource = +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentPreparedStackProfileResourceConditionUnion = - | SyncAcquireResponseDeploymentPreparedStackProfileConditionResource +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackProfileGcpResource = { - condition?: - | SyncAcquireResponseDeploymentPreparedStackProfileConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource = + { + condition?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; + }; /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentPreparedStackProfileConditionStack = { - expression: string; - title: string; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack = + { + expression: string; + title: string; + }; -export type SyncAcquireResponseDeploymentPreparedStackProfileStackConditionUnion = - | SyncAcquireResponseDeploymentPreparedStackProfileConditionStack +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentPreparedStackProfileGcpStack = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack = { condition?: - | SyncAcquireResponseDeploymentPreparedStackProfileConditionStack + | SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack | any | null | undefined; @@ -3128,23 +3198,26 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreparedStackProfileGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentPreparedStackProfileGcpResource - | undefined; - /** - * GCP-specific binding specification - */ - stack?: SyncAcquireResponseDeploymentPreparedStackProfileGcpStack | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding = + { + /** + * GCP-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack + | undefined; + }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentPreparedStackProfileGcpGrant = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -3170,11 +3243,11 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentPreparedStackProfileGcp = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentPreparedStackProfileGcpBinding; + binding: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -3182,7 +3255,7 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentPreparedStackProfileGcpGrant; + grant: SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -3192,34 +3265,35 @@ export type SyncAcquireResponseDeploymentPreparedStackProfileGcp = { /** * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentPreparedStackProfilePlatforms = { - /** - * AWS permission configurations - */ - aws?: - | Array - | null - | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: - | Array - | null - | undefined; -}; +export type SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms = + { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; + }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentPreparedStackProfile = { +export type SyncAcquireResponseDeploymentPendingPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -3231,27 +3305,27 @@ export type SyncAcquireResponseDeploymentPreparedStackProfile = { /** * Platform-specific permission configurations */ - platforms: SyncAcquireResponseDeploymentPreparedStackProfilePlatforms; + platforms: SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentPreparedStackProfileUnion = - | SyncAcquireResponseDeploymentPreparedStackProfile +export type SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion = + | SyncAcquireResponseDeploymentPendingPreparedStackProfile | string; /** * Combined permissions configuration that contains both profiles and management */ -export type SyncAcquireResponseDeploymentPreparedStackPermissions = { +export type SyncAcquireResponseDeploymentPendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | SyncAcquireResponseDeploymentPreparedStackManagement1 - | SyncAcquireResponseDeploymentPreparedStackManagement2 - | SyncAcquireResponseDeploymentPreparedStackManagementEnum + | SyncAcquireResponseDeploymentPendingPreparedStackManagement1 + | SyncAcquireResponseDeploymentPendingPreparedStackManagement2 + | SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -3262,7 +3336,7 @@ export type SyncAcquireResponseDeploymentPreparedStackPermissions = { profiles: { [k: string]: { [k: string]: Array< - SyncAcquireResponseDeploymentPreparedStackProfile | string + SyncAcquireResponseDeploymentPendingPreparedStackProfile | string >; }; }; @@ -3271,7 +3345,7 @@ export type SyncAcquireResponseDeploymentPreparedStackPermissions = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncAcquireResponseDeploymentPreparedStackConfig = { +export type SyncAcquireResponseDeploymentPendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -3286,7 +3360,7 @@ export type SyncAcquireResponseDeploymentPreparedStackConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type SyncAcquireResponseDeploymentPreparedStackDependency = { +export type SyncAcquireResponseDeploymentPendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -3297,33 +3371,45 @@ export type SyncAcquireResponseDeploymentPreparedStackDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const SyncAcquireResponseDeploymentPreparedStackLifecycle = { +export const SyncAcquireResponseDeploymentPendingPreparedStackLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncAcquireResponseDeploymentPreparedStackLifecycle = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackLifecycle ->; +export type SyncAcquireResponseDeploymentPendingPreparedStackLifecycle = + ClosedEnum; -export type SyncAcquireResponseDeploymentPreparedStackResources = { +export type SyncAcquireResponseDeploymentPendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: SyncAcquireResponseDeploymentPreparedStackConfig; + config: SyncAcquireResponseDeploymentPendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array< + SyncAcquireResponseDeploymentPendingPreparedStackDependency + >; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: SyncAcquireResponseDeploymentPreparedStackLifecycle; + lifecycle: SyncAcquireResponseDeploymentPendingPreparedStackLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -3337,27 +3423,28 @@ export type SyncAcquireResponseDeploymentPreparedStackResources = { /** * Represents the target cloud platform. */ -export const SyncAcquireResponseDeploymentPreparedStackSupportedPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; +export const SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform = + { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", + } as const; /** * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentPreparedStackSupportedPlatform = +export type SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform = ClosedEnum< - typeof SyncAcquireResponseDeploymentPreparedStackSupportedPlatform + typeof SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform >; /** * A bag of resources, unaware of any cloud. */ -export type SyncAcquireResponseDeploymentPreparedStack = { +export type SyncAcquireResponseDeploymentPendingPreparedStack = { /** * Unique identifier for the stack */ @@ -3365,113 +3452,160 @@ export type SyncAcquireResponseDeploymentPreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: + | Array + | undefined; /** * Combined permissions configuration that contains both profiles and management */ permissions?: - | SyncAcquireResponseDeploymentPreparedStackPermissions + | SyncAcquireResponseDeploymentPendingPreparedStackPermissions | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ resources: { - [k: string]: SyncAcquireResponseDeploymentPreparedStackResources; + [k: string]: SyncAcquireResponseDeploymentPendingPreparedStackResources; }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array | null | undefined; }; -export type SyncAcquireResponseDeploymentPreparedStackUnion = - | SyncAcquireResponseDeploymentPreparedStack +export type SyncAcquireResponseDeploymentPendingPreparedStackUnion = + | SyncAcquireResponseDeploymentPendingPreparedStack | any; -/** - * Runtime metadata for deployment - * - * @remarks - * - * Stores deployment state that needs to persist across step calls. - */ -export type SyncAcquireResponseDeploymentRuntimeMetadata = { +export const SyncAcquireResponseDeploymentPreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type SyncAcquireResponseDeploymentPreparedStackTypeStringList = + ClosedEnum; + +export type SyncAcquireResponseDeploymentPreparedStackDefaultStringList = { + type: SyncAcquireResponseDeploymentPreparedStackTypeStringList; /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * String list default. */ - lastSyncedEnvVarsHash?: string | null | undefined; + value: Array; +}; + +export const SyncAcquireResponseDeploymentPreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type SyncAcquireResponseDeploymentPreparedStackTypeBoolean = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackTypeBoolean +>; + +export type SyncAcquireResponseDeploymentPreparedStackDefaultBoolean = { + type: SyncAcquireResponseDeploymentPreparedStackTypeBoolean; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Boolean default. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: - | SyncAcquireResponseDeploymentPreparedStack - | any - | null - | undefined; + value: boolean; +}; + +export const SyncAcquireResponseDeploymentPreparedStackTypeNumber = { + Number: "number", +} as const; +export type SyncAcquireResponseDeploymentPreparedStackTypeNumber = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackTypeNumber +>; + +export type SyncAcquireResponseDeploymentPreparedStackDefaultNumber = { + type: SyncAcquireResponseDeploymentPreparedStackTypeNumber; /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. + * Number default. */ - registryAccessGranted?: boolean | undefined; + value: string; }; -export type SyncAcquireResponseDeploymentRuntimeMetadataUnion = - | SyncAcquireResponseDeploymentRuntimeMetadata +export const SyncAcquireResponseDeploymentPreparedStackTypeString = { + String: "string", +} as const; +export type SyncAcquireResponseDeploymentPreparedStackTypeString = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackTypeString +>; + +export type SyncAcquireResponseDeploymentPreparedStackDefaultString = { + type: SyncAcquireResponseDeploymentPreparedStackTypeString; + /** + * String default. + */ + value: string; +}; + +export type SyncAcquireResponseDeploymentPreparedStackDefaultUnion = + | SyncAcquireResponseDeploymentPreparedStackDefaultString + | SyncAcquireResponseDeploymentPreparedStackDefaultNumber + | SyncAcquireResponseDeploymentPreparedStackDefaultBoolean + | SyncAcquireResponseDeploymentPreparedStackDefaultStringList | any; /** - * Represents the target cloud platform. + * Environment variable handling for a stack input mapping. */ -export const SyncAcquireResponseDeploymentStackStatePlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", +export const SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; /** - * Represents the target cloud platform. + * Environment variable handling for a stack input mapping. */ -export type SyncAcquireResponseDeploymentStackStatePlatform = ClosedEnum< - typeof SyncAcquireResponseDeploymentStackStatePlatform +export type SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum >; +export type SyncAcquireResponseDeploymentPreparedStackTypeUnion = + | SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum + | any; + /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * How a resolved stack input is injected into runtime environment variables. */ -export type SyncAcquireResponseDeploymentStackStateConfig = { +export type SyncAcquireResponseDeploymentPreparedStackEnv = { /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + * Environment variable name. */ - id: string; + name: string; /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Target resource IDs or patterns. None means every env-capable resource. */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; + targetResources?: Array | null | undefined; + type?: + | SyncAcquireResponseDeploymentPreparedStackTypeEnvEnum + | any + | null + | undefined; }; +/** + * Primitive stack input kind. + */ +export const SyncAcquireResponseDeploymentPreparedStackKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; +/** + * Primitive stack input kind. + */ +export type SyncAcquireResponseDeploymentPreparedStackKind = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackKind +>; + /** * Represents the target cloud platform. */ -export const SyncAcquireResponseDeploymentControllerPlatformEnum = { +export const SyncAcquireResponseDeploymentPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3483,597 +3617,520 @@ export const SyncAcquireResponseDeploymentControllerPlatformEnum = { /** * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentControllerPlatformEnum = ClosedEnum< - typeof SyncAcquireResponseDeploymentControllerPlatformEnum +export type SyncAcquireResponseDeploymentPreparedStackPlatform = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackPlatform >; -export type SyncAcquireResponseDeploymentControllerPlatformUnion = - | SyncAcquireResponseDeploymentControllerPlatformEnum - | any; +/** + * Who can provide a stack input value. + */ +export const SyncAcquireResponseDeploymentPreparedStackProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type SyncAcquireResponseDeploymentPreparedStackProvidedBy = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackProvidedBy +>; /** - * Reference to a resource by its stable id and resource type. + * Portable stack input validation constraints. */ -export type SyncAcquireResponseDeploymentStackStateDependency = { - id: string; +export type SyncAcquireResponseDeploymentPreparedStackValidation = { /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Semantic format hint such as url. */ - type: string; -}; - -/** - * Canonical error container that provides a structured way to represent errors - * - * @remarks - * with rich metadata including error codes, human-readable messages, context, - * and chaining capabilities for error propagation. - * - * This struct is designed to be both machine-readable and user-friendly, - * supporting serialization for API responses and detailed error reporting - * in distributed systems. - */ -export type SyncAcquireResponseDeploymentStackStateError = { + format?: string | null | undefined; /** - * A unique identifier for the type of error. - * - * @remarks - * - * This should be a short, machine-readable string that can be used - * by clients to programmatically handle different error types. - * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + * Maximum number. */ - code: string; + max?: string | null | undefined; /** - * Additional diagnostic information about the error context. - * - * @remarks - * - * This optional field can contain structured data providing more details - * about the error, such as validation errors, request parameters that - * caused the issue, or other relevant context information. + * Maximum string-list items. */ - context?: any | null | undefined; + maxItems?: number | null | undefined; /** - * Optional human-facing remediation hint. + * Maximum string length. */ - hint?: string | null | undefined; + maxLength?: number | null | undefined; /** - * HTTP status code for this error. - * - * @remarks - * - * Used when converting the error to an HTTP response. If None, falls back to - * the error type's default status code or 500. + * Minimum number. */ - httpStatusCode?: number | null | undefined; + min?: string | null | undefined; /** - * Indicates if this is an internal error that should not be exposed to users. - * - * @remarks - * - * When `true`, this error contains sensitive information or implementation - * details that should not be shown to end-users. Such errors should be - * logged for debugging but replaced with generic error messages in responses. + * Minimum string-list items. */ - internal: boolean; + minItems?: number | null | undefined; /** - * Human-readable error message. - * - * @remarks - * - * This message should be clear and actionable for developers or end-users, - * providing context about what went wrong and potentially how to fix it. + * Minimum string length. */ - message: string; + minLength?: number | null | undefined; /** - * Indicates whether the operation that caused the error should be retried. - * - * @remarks - * - * When `true`, the error is transient and the operation might succeed - * if attempted again. When `false`, retrying the same operation is - * unlikely to succeed without changes. + * Portable whole-value regex pattern. */ - retryable: boolean; + pattern?: string | null | undefined; /** - * The underlying error that caused this error, creating an error chain. - * - * @remarks - * - * This allows for proper error propagation and debugging by maintaining - * the full context of how an error occurred through multiple layers - * of an application. + * Allowed string enum values. */ - source?: any | null | undefined; + values?: Array | null | undefined; }; -export type SyncAcquireResponseDeploymentStackStateErrorUnion = - | SyncAcquireResponseDeploymentStackStateError +export type SyncAcquireResponseDeploymentPreparedStackValidationUnion = + | SyncAcquireResponseDeploymentPreparedStackValidation | any; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Stack input definition serialized into a release stack. */ -export const SyncAcquireResponseDeploymentStackStateLifecycleEnum = { - Frozen: "frozen", - Live: "live", +export type SyncAcquireResponseDeploymentPreparedStackInput = { + default?: + | SyncAcquireResponseDeploymentPreparedStackDefaultString + | SyncAcquireResponseDeploymentPreparedStackDefaultNumber + | SyncAcquireResponseDeploymentPreparedStackDefaultBoolean + | SyncAcquireResponseDeploymentPreparedStackDefaultStringList + | any + | null + | undefined; + /** + * Human-facing helper text. + */ + description: string; + /** + * Runtime env-var mappings for v1 input resolution. + */ + env?: Array | undefined; + /** + * Stable input ID used by CLI/API calls. + */ + id: string; + /** + * Primitive stack input kind. + */ + kind: SyncAcquireResponseDeploymentPreparedStackKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: + | Array + | null + | undefined; + /** + * Who can provide this value. + */ + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: + | SyncAcquireResponseDeploymentPreparedStackValidation + | any + | null + | undefined; +}; + +export const SyncAcquireResponseDeploymentPreparedStackManagementEnum = { + Auto: "auto", } as const; +export type SyncAcquireResponseDeploymentPreparedStackManagementEnum = + ClosedEnum; + /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentStackStateLifecycleEnum = ClosedEnum< - typeof SyncAcquireResponseDeploymentStackStateLifecycleEnum ->; - -export type SyncAcquireResponseDeploymentLifecycleUnion = - | SyncAcquireResponseDeploymentStackStateLifecycleEnum - | any; +export type SyncAcquireResponseDeploymentPreparedStackOverrideAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; /** - * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentOutputs = { +export type SyncAcquireResponseDeploymentPreparedStackOverrideAwStack = { /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Optional condition for additional filtering (rare) */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type SyncAcquireResponseDeploymentOutputsUnion = - | SyncAcquireResponseDeploymentOutputs - | any; - /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPreviousConfig = { +export type SyncAcquireResponseDeploymentPreparedStackOverrideAwBinding = { /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + * AWS-specific binding specification */ - id: string; + resource?: + | SyncAcquireResponseDeploymentPreparedStackOverrideAwResource + | undefined; /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * AWS-specific binding specification */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; + stack?: SyncAcquireResponseDeploymentPreparedStackOverrideAwStack | undefined; }; -export type SyncAcquireResponseDeploymentPreviousConfigUnion = - | SyncAcquireResponseDeploymentPreviousConfig - | any; - /** - * Represents the high-level status of a resource during its lifecycle. + * IAM effect. Defaults to Allow. */ -export const SyncAcquireResponseDeploymentStackStateStatus = { - Pending: "pending", - Provisioning: "provisioning", - ProvisionFailed: "provision-failed", - Running: "running", - Updating: "updating", - UpdateFailed: "update-failed", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - Deleted: "deleted", - RefreshFailed: "refresh-failed", +export const SyncAcquireResponseDeploymentPreparedStackOverrideEffect = { + Allow: "Allow", + Deny: "Deny", } as const; /** - * Represents the high-level status of a resource during its lifecycle. + * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentStackStateStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentStackStateStatus ->; +export type SyncAcquireResponseDeploymentPreparedStackOverrideEffect = + ClosedEnum; /** - * Represents the state of a single resource within the stack for a specific platform. + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentStackStateResources = { +export type SyncAcquireResponseDeploymentPreparedStackOverrideAwGrant = { /** - * The platform-specific resource controller that manages this resource's lifecycle. - * - * @remarks - * This is None when the resource status is Pending. - * Stored as JSON to make the struct serializable and movable to alien-core. + * AWS IAM actions (only for AWS) */ - internal?: any | null | undefined; + actions?: Array | null | undefined; /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * Azure actions (only for Azure) */ - config: SyncAcquireResponseDeploymentStackStateConfig; - controllerPlatform?: - | SyncAcquireResponseDeploymentControllerPlatformEnum - | any - | null - | undefined; + dataActions?: Array | null | undefined; /** - * Complete list of dependencies for this resource, including infrastructure dependencies. - * - * @remarks - * This preserves the full dependency information from the stack definition. - */ - dependencies?: - | Array - | undefined; - error?: SyncAcquireResponseDeploymentStackStateError | any | null | undefined; - /** - * Stores the controller state that failed, used for manual retry operations. - * - * @remarks - * This allows resuming from the exact point where the failure occurred. - * Stored as JSON to make the struct serializable and movable to alien-core. - */ - lastFailedState?: any | null | undefined; - lifecycle?: - | SyncAcquireResponseDeploymentStackStateLifecycleEnum - | any - | null - | undefined; - outputs?: SyncAcquireResponseDeploymentOutputs | any | null | undefined; - previousConfig?: - | SyncAcquireResponseDeploymentPreviousConfig - | any - | null - | undefined; - /** - * Binding parameters for remote access. - * - * @remarks - * Only populated when the resource has `remote_access: true` in its ResourceEntry. - * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). - * Populated by controllers during provisioning using get_binding_params(). - */ - remoteBindingParams?: any | null | undefined; - /** - * Tracks consecutive retry attempts for the current state transition. + * GCP permissions that require an exact residual custom role. */ - retryAttempt?: number | undefined; + permissions?: Array | null | undefined; /** - * Represents the high-level status of a resource during its lifecycle. + * Provider predefined roles to bind directly. */ - status: SyncAcquireResponseDeploymentStackStateStatus; + predefinedRoles?: Array | null | undefined; /** - * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). + * GCP residual custom permissions to pair with predefined roles. */ - type: string; + residualPermissions?: Array | null | undefined; }; /** - * Represents the collective state of all resources in a stack, including platform and pending actions. + * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentStackState = { +export type SyncAcquireResponseDeploymentPreparedStackOverrideAw = { /** - * Represents the target cloud platform. + * Generic binding configuration for permissions */ - platform: SyncAcquireResponseDeploymentStackStatePlatform; + binding: SyncAcquireResponseDeploymentPreparedStackOverrideAwBinding; /** - * A prefix used for resource naming to ensure uniqueness across deployments. + * Short admin-facing description of why this entry exists. */ - resourcePrefix: string; + description?: string | null | undefined; /** - * The state of individual resources, keyed by resource ID. + * IAM effect. Defaults to Allow. */ - resources: { [k: string]: SyncAcquireResponseDeploymentStackStateResources }; + effect?: SyncAcquireResponseDeploymentPreparedStackOverrideEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentPreparedStackOverrideAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type SyncAcquireResponseDeploymentStackStateUnion = - | SyncAcquireResponseDeploymentStackState - | any; - -/** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. - */ -export const SyncAcquireResponseDeploymentStatus = { - Pending: "pending", - PreflightsFailed: "preflights-failed", - InitialSetup: "initial-setup", - InitialSetupFailed: "initial-setup-failed", - Provisioning: "provisioning", - WaitingForMachines: "waiting-for-machines", - ProvisioningFailed: "provisioning-failed", - Running: "running", - RefreshFailed: "refresh-failed", - UpdatePending: "update-pending", - Updating: "updating", - UpdateFailed: "update-failed", - DeletePending: "delete-pending", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - TeardownFailed: "teardown-failed", - Deleted: "deleted", - Error: "error", -} as const; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentStatus ->; - -export const SyncAcquireResponseDeploymentTargetReleaseTypeStringList = { - StringList: "stringList", -} as const; -export type SyncAcquireResponseDeploymentTargetReleaseTypeStringList = - ClosedEnum; - -export type SyncAcquireResponseDeploymentTargetReleaseDefaultStringList = { - type: SyncAcquireResponseDeploymentTargetReleaseTypeStringList; +export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureResource = { /** - * String list default. + * Scope (subscription/resource group/resource level) */ - value: Array; + scope: string; }; -export const SyncAcquireResponseDeploymentTargetReleaseTypeBoolean = { - Boolean: "boolean", -} as const; -export type SyncAcquireResponseDeploymentTargetReleaseTypeBoolean = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseTypeBoolean ->; - -export type SyncAcquireResponseDeploymentTargetReleaseDefaultBoolean = { - type: SyncAcquireResponseDeploymentTargetReleaseTypeBoolean; +/** + * Azure-specific binding specification + */ +export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureStack = { /** - * Boolean default. + * Scope (subscription/resource group/resource level) */ - value: boolean; + scope: string; }; -export const SyncAcquireResponseDeploymentTargetReleaseTypeNumber = { - Number: "number", -} as const; -export type SyncAcquireResponseDeploymentTargetReleaseTypeNumber = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseTypeNumber ->; - -export type SyncAcquireResponseDeploymentTargetReleaseDefaultNumber = { - type: SyncAcquireResponseDeploymentTargetReleaseTypeNumber; +/** + * Generic binding configuration for permissions + */ +export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureBinding = { /** - * Number default. + * Azure-specific binding specification */ - value: string; -}; - -export const SyncAcquireResponseDeploymentTargetReleaseTypeString = { - String: "string", -} as const; -export type SyncAcquireResponseDeploymentTargetReleaseTypeString = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseTypeString ->; - -export type SyncAcquireResponseDeploymentTargetReleaseDefaultString = { - type: SyncAcquireResponseDeploymentTargetReleaseTypeString; + resource?: + | SyncAcquireResponseDeploymentPreparedStackOverrideAzureResource + | undefined; /** - * String default. + * Azure-specific binding specification */ - value: string; + stack?: + | SyncAcquireResponseDeploymentPreparedStackOverrideAzureStack + | undefined; }; -export type SyncAcquireResponseDeploymentTargetReleaseDefaultUnion = - | SyncAcquireResponseDeploymentTargetReleaseDefaultString - | SyncAcquireResponseDeploymentTargetReleaseDefaultNumber - | SyncAcquireResponseDeploymentTargetReleaseDefaultBoolean - | SyncAcquireResponseDeploymentTargetReleaseDefaultStringList - | any; - /** - * Environment variable handling for a stack input mapping. - */ -export const SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum = { - Plain: "plain", - Secret: "secret", -} as const; -/** - * Environment variable handling for a stack input mapping. + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum ->; - -export type SyncAcquireResponseDeploymentTargetReleaseTypeUnion = - | SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum - | any; +export type SyncAcquireResponseDeploymentPreparedStackOverrideAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; /** - * How a resolved stack input is injected into runtime environment variables. + * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseEnv = { +export type SyncAcquireResponseDeploymentPreparedStackOverrideAzure = { /** - * Environment variable name. + * Generic binding configuration for permissions */ - name: string; + binding: SyncAcquireResponseDeploymentPreparedStackOverrideAzureBinding; /** - * Target resource IDs or patterns. None means every env-capable resource. + * Short admin-facing description of why this entry exists. */ - targetResources?: Array | null | undefined; - type?: - | SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum - | any - | null - | undefined; + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentPreparedStackOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Primitive stack input kind. - */ -export const SyncAcquireResponseDeploymentTargetReleaseKind = { - String: "string", - Secret: "secret", - Number: "number", - Integer: "integer", - Boolean: "boolean", - Enum: "enum", - StringList: "stringList", -} as const; -/** - * Primitive stack input kind. + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentTargetReleaseKind = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseKind ->; +export type SyncAcquireResponseDeploymentPreparedStackOverrideConditionResource = + { + expression: string; + title: string; + }; -/** - * Represents the target cloud platform. - */ -export const SyncAcquireResponseDeploymentTargetReleasePlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type SyncAcquireResponseDeploymentTargetReleasePlatform = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleasePlatform ->; +export type SyncAcquireResponseDeploymentPreparedStackOverrideResourceConditionUnion = + | SyncAcquireResponseDeploymentPreparedStackOverrideConditionResource + | any; /** - * Who can provide a stack input value. + * GCP-specific binding specification */ -export const SyncAcquireResponseDeploymentTargetReleaseProvidedBy = { - Developer: "developer", - Deployer: "deployer", -} as const; +export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpResource = { + condition?: + | SyncAcquireResponseDeploymentPreparedStackOverrideConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + /** - * Who can provide a stack input value. + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentTargetReleaseProvidedBy = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseProvidedBy ->; +export type SyncAcquireResponseDeploymentPreparedStackOverrideConditionStack = { + expression: string; + title: string; +}; + +export type SyncAcquireResponseDeploymentPreparedStackOverrideStackConditionUnion = + | SyncAcquireResponseDeploymentPreparedStackOverrideConditionStack + | any; /** - * Portable stack input validation constraints. + * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseValidation = { - /** - * Semantic format hint such as url. - */ - format?: string | null | undefined; +export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpStack = { + condition?: + | SyncAcquireResponseDeploymentPreparedStackOverrideConditionStack + | any + | null + | undefined; /** - * Maximum number. + * Scope (project/resource level) */ - max?: string | null | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpBinding = { /** - * Maximum string-list items. + * GCP-specific binding specification */ - maxItems?: number | null | undefined; + resource?: + | SyncAcquireResponseDeploymentPreparedStackOverrideGcpResource + | undefined; /** - * Maximum string length. + * GCP-specific binding specification */ - maxLength?: number | null | undefined; + stack?: + | SyncAcquireResponseDeploymentPreparedStackOverrideGcpStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncAcquireResponseDeploymentPreparedStackOverrideGcpGrant = { /** - * Minimum number. + * AWS IAM actions (only for AWS) */ - min?: string | null | undefined; + actions?: Array | null | undefined; /** - * Minimum string-list items. + * Azure actions (only for Azure) */ - minItems?: number | null | undefined; + dataActions?: Array | null | undefined; /** - * Minimum string length. + * GCP permissions that require an exact residual custom role. */ - minLength?: number | null | undefined; + permissions?: Array | null | undefined; /** - * Portable whole-value regex pattern. + * Provider predefined roles to bind directly. */ - pattern?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Allowed string enum values. + * GCP residual custom permissions to pair with predefined roles. */ - values?: Array | null | undefined; + residualPermissions?: Array | null | undefined; }; -export type SyncAcquireResponseDeploymentTargetReleaseValidationUnion = - | SyncAcquireResponseDeploymentTargetReleaseValidation - | any; - /** - * Stack input definition serialized into a release stack. + * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseInput = { - default?: - | SyncAcquireResponseDeploymentTargetReleaseDefaultString - | SyncAcquireResponseDeploymentTargetReleaseDefaultNumber - | SyncAcquireResponseDeploymentTargetReleaseDefaultBoolean - | SyncAcquireResponseDeploymentTargetReleaseDefaultStringList - | any - | null - | undefined; +export type SyncAcquireResponseDeploymentPreparedStackOverrideGcp = { /** - * Human-facing helper text. + * Generic binding configuration for permissions */ - description: string; + binding: SyncAcquireResponseDeploymentPreparedStackOverrideGcpBinding; /** - * Runtime env-var mappings for v1 input resolution. + * Short admin-facing description of why this entry exists. */ - env?: Array | undefined; + description?: string | null | undefined; /** - * Stable input ID used by CLI/API calls. + * Grant permissions for a specific cloud platform */ - id: string; + grant: SyncAcquireResponseDeploymentPreparedStackOverrideGcpGrant; /** - * Primitive stack input kind. + * Stable admin-facing label for this permission entry. */ - kind: SyncAcquireResponseDeploymentTargetReleaseKind; + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type SyncAcquireResponseDeploymentPreparedStackOverridePlatforms = { /** - * Human-facing field label. + * AWS permission configurations */ - label: string; + aws?: + | Array + | null + | undefined; /** - * Example placeholder shown in UI. + * Azure permission configurations */ - placeholder?: string | null | undefined; + azure?: + | Array + | null + | undefined; /** - * Platforms where this input applies. + * GCP permission configurations */ - platforms?: - | Array + gcp?: + | Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncAcquireResponseDeploymentPreparedStackOverride = { /** - * Who can provide this value. + * Human-readable description of what this permission set allows */ - providedBy: Array; + description: string; /** - * Whether a resolved value is required before deployment can proceed. + * Unique identifier for the permission set (e.g., "storage/data-read") */ - required: boolean; - validation?: - | SyncAcquireResponseDeploymentTargetReleaseValidation - | any - | null - | undefined; + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncAcquireResponseDeploymentPreparedStackOverridePlatforms; }; -export const SyncAcquireResponseDeploymentTargetReleaseManagementEnum = { - Auto: "auto", -} as const; -export type SyncAcquireResponseDeploymentTargetReleaseManagementEnum = - ClosedEnum; +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncAcquireResponseDeploymentPreparedStackOverrideUnion = + | SyncAcquireResponseDeploymentPreparedStackOverride + | string; + +export type SyncAcquireResponseDeploymentPreparedStackManagement2 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + override: { + [k: string]: Array< + SyncAcquireResponseDeploymentPreparedStackOverride | string + >; + }; +}; /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwResource = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -4087,7 +4144,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwResource = { /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwStack = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -4101,36 +4158,37 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwBinding = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideAwResource + | SyncAcquireResponseDeploymentPreparedStackExtendAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncAcquireResponseDeploymentTargetReleaseOverrideAwStack | undefined; + stack?: SyncAcquireResponseDeploymentPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncAcquireResponseDeploymentTargetReleaseOverrideEffect = { +export const SyncAcquireResponseDeploymentPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideEffect = - ClosedEnum; - -/** +export type SyncAcquireResponseDeploymentPreparedStackExtendEffect = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackExtendEffect +>; + +/** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwGrant = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4156,11 +4214,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAw = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentTargetReleaseOverrideAwBinding; + binding: SyncAcquireResponseDeploymentPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4168,11 +4226,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncAcquireResponseDeploymentTargetReleaseOverrideEffect | undefined; + effect?: SyncAcquireResponseDeploymentPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentTargetReleaseOverrideAwGrant; + grant: SyncAcquireResponseDeploymentPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4182,7 +4240,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAw = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureResource = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4192,7 +4250,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureResource = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureStack = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4202,25 +4260,25 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureBinding = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideAzureResource + | SyncAcquireResponseDeploymentPreparedStackExtendAzureResource | undefined; /** * Azure-specific binding specification */ stack?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideAzureStack + | SyncAcquireResponseDeploymentPreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureGrant = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4246,11 +4304,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzure = { +export type SyncAcquireResponseDeploymentPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentTargetReleaseOverrideAzureBinding; + binding: SyncAcquireResponseDeploymentPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4258,7 +4316,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentTargetReleaseOverrideAzureGrant; + grant: SyncAcquireResponseDeploymentPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4268,22 +4326,22 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzure = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideConditionResource = +export type SyncAcquireResponseDeploymentPreparedStackExtendConditionResource = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentTargetReleaseOverrideResourceConditionUnion = - | SyncAcquireResponseDeploymentTargetReleaseOverrideConditionResource +export type SyncAcquireResponseDeploymentPreparedStackExtendResourceConditionUnion = + | SyncAcquireResponseDeploymentPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpResource = { +export type SyncAcquireResponseDeploymentPreparedStackExtendGcpResource = { condition?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideConditionResource + | SyncAcquireResponseDeploymentPreparedStackExtendConditionResource | any | null | undefined; @@ -4296,21 +4354,21 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpResource = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideCondition = { +export type SyncAcquireResponseDeploymentPreparedStackExtendConditionStack = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentTargetReleaseOverrideConditionUnion = - | SyncAcquireResponseDeploymentTargetReleaseOverrideCondition +export type SyncAcquireResponseDeploymentPreparedStackExtendStackConditionUnion = + | SyncAcquireResponseDeploymentPreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpStack = { +export type SyncAcquireResponseDeploymentPreparedStackExtendGcpStack = { condition?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideCondition + | SyncAcquireResponseDeploymentPreparedStackExtendConditionStack | any | null | undefined; @@ -4323,25 +4381,23 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpBinding = { +export type SyncAcquireResponseDeploymentPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideGcpResource + | SyncAcquireResponseDeploymentPreparedStackExtendGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: - | SyncAcquireResponseDeploymentTargetReleaseOverrideGcpStack - | undefined; + stack?: SyncAcquireResponseDeploymentPreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpGrant = { +export type SyncAcquireResponseDeploymentPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4367,11 +4423,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcp = { +export type SyncAcquireResponseDeploymentPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentTargetReleaseOverrideGcpBinding; + binding: SyncAcquireResponseDeploymentPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4379,7 +4435,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentTargetReleaseOverrideGcpGrant; + grant: SyncAcquireResponseDeploymentPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4389,26 +4445,26 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcp = { /** * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentTargetReleaseOverridePlatforms = { +export type SyncAcquireResponseDeploymentPreparedStackExtendPlatforms = { /** * AWS permission configurations */ aws?: - | Array + | Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ gcp?: - | Array + | Array | null | undefined; }; @@ -4416,7 +4472,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverridePlatforms = { /** * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentTargetReleaseOverride = { +export type SyncAcquireResponseDeploymentPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -4428,34 +4484,42 @@ export type SyncAcquireResponseDeploymentTargetReleaseOverride = { /** * Platform-specific permission configurations */ - platforms: SyncAcquireResponseDeploymentTargetReleaseOverridePlatforms; + platforms: SyncAcquireResponseDeploymentPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentTargetReleaseOverrideUnion = - | SyncAcquireResponseDeploymentTargetReleaseOverride +export type SyncAcquireResponseDeploymentPreparedStackExtendUnion = + | SyncAcquireResponseDeploymentPreparedStackExtend | string; -export type SyncAcquireResponseDeploymentTargetReleaseManagement2 = { +export type SyncAcquireResponseDeploymentPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - override: { + extend: { [k: string]: Array< - SyncAcquireResponseDeploymentTargetReleaseOverride | string + SyncAcquireResponseDeploymentPreparedStackExtend | string >; }; }; +/** + * Management permissions configuration for stack management access + */ +export type SyncAcquireResponseDeploymentPreparedStackManagementUnion = + | SyncAcquireResponseDeploymentPreparedStackManagement1 + | SyncAcquireResponseDeploymentPreparedStackManagement2 + | SyncAcquireResponseDeploymentPreparedStackManagementEnum; + /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAwResource = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -4469,7 +4533,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAwResource = { /** * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAwStack = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -4483,37 +4547,36 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAwStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAwBinding = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentTargetReleaseExtendAwResource + | SyncAcquireResponseDeploymentPreparedStackProfileAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncAcquireResponseDeploymentTargetReleaseExtendAwStack | undefined; + stack?: SyncAcquireResponseDeploymentPreparedStackProfileAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncAcquireResponseDeploymentTargetReleaseExtendEffect = { +export const SyncAcquireResponseDeploymentPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendEffect = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseExtendEffect ->; +export type SyncAcquireResponseDeploymentPreparedStackProfileEffect = + ClosedEnum; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAwGrant = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4539,11 +4602,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAw = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentTargetReleaseExtendAwBinding; + binding: SyncAcquireResponseDeploymentPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4551,11 +4614,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncAcquireResponseDeploymentTargetReleaseExtendEffect | undefined; + effect?: SyncAcquireResponseDeploymentPreparedStackProfileEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentTargetReleaseExtendAwGrant; + grant: SyncAcquireResponseDeploymentPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4565,7 +4628,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAw = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureResource = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4575,7 +4638,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureResource = { /** * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureStack = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4585,25 +4648,25 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureBinding = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentTargetReleaseExtendAzureResource + | SyncAcquireResponseDeploymentPreparedStackProfileAzureResource | undefined; /** * Azure-specific binding specification */ stack?: - | SyncAcquireResponseDeploymentTargetReleaseExtendAzureStack + | SyncAcquireResponseDeploymentPreparedStackProfileAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureGrant = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4629,11 +4692,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendAzure = { +export type SyncAcquireResponseDeploymentPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentTargetReleaseExtendAzureBinding; + binding: SyncAcquireResponseDeploymentPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4641,7 +4704,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentTargetReleaseExtendAzureGrant; + grant: SyncAcquireResponseDeploymentPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4651,22 +4714,22 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendAzure = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendConditionResource = +export type SyncAcquireResponseDeploymentPreparedStackProfileConditionResource = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentTargetReleaseExtendResourceConditionUnion = - | SyncAcquireResponseDeploymentTargetReleaseExtendConditionResource +export type SyncAcquireResponseDeploymentPreparedStackProfileResourceConditionUnion = + | SyncAcquireResponseDeploymentPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpResource = { +export type SyncAcquireResponseDeploymentPreparedStackProfileGcpResource = { condition?: - | SyncAcquireResponseDeploymentTargetReleaseExtendConditionResource + | SyncAcquireResponseDeploymentPreparedStackProfileConditionResource | any | null | undefined; @@ -4679,21 +4742,21 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpResource = { /** * GCP IAM condition */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendCondition = { +export type SyncAcquireResponseDeploymentPreparedStackProfileConditionStack = { expression: string; title: string; }; -export type SyncAcquireResponseDeploymentTargetReleaseExtendConditionUnion = - | SyncAcquireResponseDeploymentTargetReleaseExtendCondition +export type SyncAcquireResponseDeploymentPreparedStackProfileStackConditionUnion = + | SyncAcquireResponseDeploymentPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpStack = { +export type SyncAcquireResponseDeploymentPreparedStackProfileGcpStack = { condition?: - | SyncAcquireResponseDeploymentTargetReleaseExtendCondition + | SyncAcquireResponseDeploymentPreparedStackProfileConditionStack | any | null | undefined; @@ -4706,23 +4769,23 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpBinding = { +export type SyncAcquireResponseDeploymentPreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ resource?: - | SyncAcquireResponseDeploymentTargetReleaseExtendGcpResource + | SyncAcquireResponseDeploymentPreparedStackProfileGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncAcquireResponseDeploymentTargetReleaseExtendGcpStack | undefined; + stack?: SyncAcquireResponseDeploymentPreparedStackProfileGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpGrant = { +export type SyncAcquireResponseDeploymentPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4748,11 +4811,11 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendGcp = { +export type SyncAcquireResponseDeploymentPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: SyncAcquireResponseDeploymentTargetReleaseExtendGcpBinding; + binding: SyncAcquireResponseDeploymentPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4760,7 +4823,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncAcquireResponseDeploymentTargetReleaseExtendGcpGrant; + grant: SyncAcquireResponseDeploymentPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4770,26 +4833,26 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendPlatforms = { +export type SyncAcquireResponseDeploymentPreparedStackProfilePlatforms = { /** * AWS permission configurations */ aws?: - | Array + | Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ gcp?: - | Array + | Array | null | undefined; }; @@ -4797,7 +4860,7 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtendPlatforms = { /** * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentTargetReleaseExtend = { +export type SyncAcquireResponseDeploymentPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -4809,435 +4872,463 @@ export type SyncAcquireResponseDeploymentTargetReleaseExtend = { /** * Platform-specific permission configurations */ - platforms: SyncAcquireResponseDeploymentTargetReleaseExtendPlatforms; + platforms: SyncAcquireResponseDeploymentPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentTargetReleaseExtendUnion = - | SyncAcquireResponseDeploymentTargetReleaseExtend +export type SyncAcquireResponseDeploymentPreparedStackProfileUnion = + | SyncAcquireResponseDeploymentPreparedStackProfile | string; -export type SyncAcquireResponseDeploymentTargetReleaseManagement1 = { +/** + * Combined permissions configuration that contains both profiles and management + */ +export type SyncAcquireResponseDeploymentPreparedStackPermissions = { /** - * Permission profile that maps resources to permission sets + * Management permissions configuration for stack management access + */ + management?: + | SyncAcquireResponseDeploymentPreparedStackManagement1 + | SyncAcquireResponseDeploymentPreparedStackManagement2 + | SyncAcquireResponseDeploymentPreparedStackManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services * * @remarks - * Key can be "*" for all resources or resource name for specific resource + * Key is the profile name, value is the permission configuration */ - extend: { - [k: string]: Array< - SyncAcquireResponseDeploymentTargetReleaseExtend | string - >; + profiles: { + [k: string]: { + [k: string]: Array< + SyncAcquireResponseDeploymentPreparedStackProfile | string + >; + }; }; }; /** - * Management permissions configuration for stack management access - */ -export type SyncAcquireResponseDeploymentTargetReleaseManagementUnion = - | SyncAcquireResponseDeploymentTargetReleaseManagement1 - | SyncAcquireResponseDeploymentTargetReleaseManagement2 - | SyncAcquireResponseDeploymentTargetReleaseManagementEnum; - -/** - * AWS-specific binding specification + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAwResource = { +export type SyncAcquireResponseDeploymentPreparedStackConfig = { /** - * Optional condition for additional filtering (rare) + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + id: string; /** - * Resource ARNs to bind to + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - resources: Array; + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; /** - * AWS-specific binding specification + * Reference to a resource by its stable id and resource type. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAwStack = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; +export type SyncAcquireResponseDeploymentPreparedStackDependency = { + id: string; /** - * Resource ARNs to bind to + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - resources: Array; + type: string; }; /** - * Generic binding configuration for permissions + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAwBinding = { +export const SyncAcquireResponseDeploymentPreparedStackLifecycle = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type SyncAcquireResponseDeploymentPreparedStackLifecycle = ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackLifecycle +>; + +export type SyncAcquireResponseDeploymentPreparedStackResources = { /** - * AWS-specific binding specification + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - resource?: - | SyncAcquireResponseDeploymentTargetReleaseProfileAwResource - | undefined; + config: SyncAcquireResponseDeploymentPreparedStackConfig; /** - * AWS-specific binding specification + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list */ - stack?: SyncAcquireResponseDeploymentTargetReleaseProfileAwStack | undefined; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: SyncAcquireResponseDeploymentPreparedStackLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; }; /** - * IAM effect. Defaults to Allow. + * Represents the target cloud platform. */ -export const SyncAcquireResponseDeploymentTargetReleaseProfileEffect = { - Allow: "Allow", - Deny: "Deny", +export const SyncAcquireResponseDeploymentPreparedStackSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", } as const; /** - * IAM effect. Defaults to Allow. + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileEffect = - ClosedEnum; +export type SyncAcquireResponseDeploymentPreparedStackSupportedPlatform = + ClosedEnum< + typeof SyncAcquireResponseDeploymentPreparedStackSupportedPlatform + >; /** - * Grant permissions for a specific cloud platform + * A bag of resources, unaware of any cloud. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAwGrant = { +export type SyncAcquireResponseDeploymentPreparedStack = { /** - * AWS IAM actions (only for AWS) + * Unique identifier for the stack */ - actions?: Array | null | undefined; + id: string; /** - * Azure actions (only for Azure) + * Input definitions required before setup or deployment can proceed. */ - dataActions?: Array | null | undefined; + inputs?: Array | undefined; /** - * GCP permissions that require an exact residual custom role. + * Combined permissions configuration that contains both profiles and management */ - permissions?: Array | null | undefined; + permissions?: + | SyncAcquireResponseDeploymentPreparedStackPermissions + | undefined; /** - * Provider predefined roles to bind directly. + * Map of resource IDs to their configurations and lifecycle settings */ - predefinedRoles?: Array | null | undefined; + resources: { + [k: string]: SyncAcquireResponseDeploymentPreparedStackResources; + }; /** - * GCP residual custom permissions to pair with predefined roles. + * Which platforms this stack supports. When None, all platforms are supported. */ - residualPermissions?: Array | null | undefined; + supportedPlatforms?: + | Array + | null + | undefined; }; +export type SyncAcquireResponseDeploymentPreparedStackUnion = + | SyncAcquireResponseDeploymentPreparedStack + | any; + /** - * AWS-specific platform permission configuration + * One-shot authority for a setup re-import to replace setup-owned resources. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAw = { +export type SyncAcquireResponseDeploymentSetupUpdateAuthorization = { /** - * Generic binding configuration for permissions + * Frozen resource projection from the last successful deployment. */ - binding: SyncAcquireResponseDeploymentTargetReleaseProfileAwBinding; + baselineFrozenDigest: string; /** - * Short admin-facing description of why this entry exists. + * Unique revision used by persistence layers for compare-and-swap updates. */ - description?: string | null | undefined; + nonce: string; /** - * IAM effect. Defaults to Allow. + * Release whose stack was prepared by setup. */ - effect?: SyncAcquireResponseDeploymentTargetReleaseProfileEffect | undefined; + releaseId: string; /** - * Grant permissions for a specific cloud platform + * Exact setup artifact revision that authored this authority. */ - grant: SyncAcquireResponseDeploymentTargetReleaseProfileAwGrant; + setupFingerprint: string; /** - * Stable admin-facing label for this permission entry. + * Setup fingerprint contract version. */ - label?: string | null | undefined; -}; - -/** - * Azure-specific binding specification - */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureResource = { + setupFingerprintVersion: number; /** - * Scope (subscription/resource group/resource level) + * Stable setup target recorded on the imported deployment. */ - scope: string; -}; - -/** - * Azure-specific binding specification - */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureStack = { + setupTarget: string; /** - * Scope (subscription/resource group/resource level) + * Frozen resource projection prepared by the setup re-import. */ - scope: string; + targetFrozenDigest: string; }; +export type SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion = + | SyncAcquireResponseDeploymentSetupUpdateAuthorization + | any; + /** - * Generic binding configuration for permissions + * Runtime metadata for deployment + * + * @remarks + * + * Stores deployment state that needs to persist across step calls. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureBinding = { +export type SyncAcquireResponseDeploymentRuntimeMetadata = { /** - * Azure-specific binding specification + * Hash of the environment variables snapshot that was last synced to the vault + * + * @remarks + * Used to avoid redundant sync operations during incremental deployment */ - resource?: - | SyncAcquireResponseDeploymentTargetReleaseProfileAzureResource + lastSyncedEnvVarsHash?: string | null | undefined; + /** + * Exact vault keys owned by the deployment secret synchronizer. This + * + * @remarks + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. + */ + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | SyncAcquireResponseDeploymentPendingPreparedStack + | any + | null + | undefined; + preparedStack?: + | SyncAcquireResponseDeploymentPreparedStack + | any + | null | undefined; /** - * Azure-specific binding specification + * Whether cross-account registry access has been successfully granted. + * + * @remarks + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. */ - stack?: - | SyncAcquireResponseDeploymentTargetReleaseProfileAzureStack + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | SyncAcquireResponseDeploymentSetupUpdateAuthorization + | any + | null | undefined; }; +export type SyncAcquireResponseDeploymentRuntimeMetadataUnion = + | SyncAcquireResponseDeploymentRuntimeMetadata + | any; + /** - * Grant permissions for a specific cloud platform + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; +export const SyncAcquireResponseDeploymentStackStatePlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncAcquireResponseDeploymentStackStatePlatform = ClosedEnum< + typeof SyncAcquireResponseDeploymentStackStatePlatform +>; /** - * Azure-specific platform permission configuration + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileAzure = { - /** - * Generic binding configuration for permissions - */ - binding: SyncAcquireResponseDeploymentTargetReleaseProfileAzureBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; +export type SyncAcquireResponseDeploymentStackStateConfig = { /** - * Grant permissions for a specific cloud platform + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ - grant: SyncAcquireResponseDeploymentTargetReleaseProfileAzureGrant; + id: string; /** - * Stable admin-facing label for this permission entry. + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - label?: string | null | undefined; + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; /** - * GCP IAM condition - */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileConditionResource = - { - expression: string; - title: string; - }; - -export type SyncAcquireResponseDeploymentTargetReleaseProfileResourceConditionUnion = - | SyncAcquireResponseDeploymentTargetReleaseProfileConditionResource - | any; - -/** - * GCP-specific binding specification + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpResource = { - condition?: - | SyncAcquireResponseDeploymentTargetReleaseProfileConditionResource - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - +export const SyncAcquireResponseDeploymentControllerPlatformEnum = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; /** - * GCP IAM condition + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileCondition = { - expression: string; - title: string; -}; +export type SyncAcquireResponseDeploymentControllerPlatformEnum = ClosedEnum< + typeof SyncAcquireResponseDeploymentControllerPlatformEnum +>; -export type SyncAcquireResponseDeploymentTargetReleaseProfileConditionUnion = - | SyncAcquireResponseDeploymentTargetReleaseProfileCondition +export type SyncAcquireResponseDeploymentControllerPlatformUnion = + | SyncAcquireResponseDeploymentControllerPlatformEnum | any; /** - * GCP-specific binding specification - */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpStack = { - condition?: - | SyncAcquireResponseDeploymentTargetReleaseProfileCondition - | any - | null - | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - -/** - * Generic binding configuration for permissions + * Reference to a resource by its stable id and resource type. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: - | SyncAcquireResponseDeploymentTargetReleaseProfileGcpResource - | undefined; +export type SyncAcquireResponseDeploymentStackStateDependency = { + id: string; /** - * GCP-specific binding specification + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - stack?: SyncAcquireResponseDeploymentTargetReleaseProfileGcpStack | undefined; + type: string; }; /** - * Grant permissions for a specific cloud platform + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; +export type SyncAcquireResponseDeploymentStackStateError = { /** - * Azure actions (only for Azure) + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" */ - dataActions?: Array | null | undefined; + code: string; /** - * GCP permissions that require an exact residual custom role. + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. */ - permissions?: Array | null | undefined; + context?: any | null | undefined; /** - * Provider predefined roles to bind directly. + * Optional human-facing remediation hint. */ - predefinedRoles?: Array | null | undefined; + hint?: string | null | undefined; /** - * GCP residual custom permissions to pair with predefined roles. + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. */ - residualPermissions?: Array | null | undefined; -}; - -/** - * GCP-specific platform permission configuration - */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileGcp = { + httpStatusCode?: number | null | undefined; /** - * Generic binding configuration for permissions + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. */ - binding: SyncAcquireResponseDeploymentTargetReleaseProfileGcpBinding; + internal: boolean; /** - * Short admin-facing description of why this entry exists. + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. */ - description?: string | null | undefined; + message: string; /** - * Grant permissions for a specific cloud platform + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. */ - grant: SyncAcquireResponseDeploymentTargetReleaseProfileGcpGrant; + retryable: boolean; /** - * Stable admin-facing label for this permission entry. + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. */ - label?: string | null | undefined; + source?: any | null | undefined; }; -/** - * Platform-specific permission configurations - */ -export type SyncAcquireResponseDeploymentTargetReleaseProfilePlatforms = { - /** - * AWS permission configurations - */ - aws?: - | Array - | null - | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: - | Array - | null - | undefined; -}; +export type SyncAcquireResponseDeploymentStackStateErrorUnion = + | SyncAcquireResponseDeploymentStackStateError + | any; /** - * A permission set that can be applied across different cloud platforms + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfile = { - /** - * Human-readable description of what this permission set allows - */ - description: string; - /** - * Unique identifier for the permission set (e.g., "storage/data-read") - */ - id: string; - /** - * Platform-specific permission configurations - */ - platforms: SyncAcquireResponseDeploymentTargetReleaseProfilePlatforms; -}; - +export const SyncAcquireResponseDeploymentStackStateLifecycleEnum = { + Frozen: "frozen", + Live: "live", +} as const; /** - * Reference to a permission set - either by name or inline definition + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncAcquireResponseDeploymentTargetReleaseProfileUnion = - | SyncAcquireResponseDeploymentTargetReleaseProfile - | string; +export type SyncAcquireResponseDeploymentStackStateLifecycleEnum = ClosedEnum< + typeof SyncAcquireResponseDeploymentStackStateLifecycleEnum +>; + +export type SyncAcquireResponseDeploymentLifecycleUnion = + | SyncAcquireResponseDeploymentStackStateLifecycleEnum + | any; /** - * Combined permissions configuration that contains both profiles and management + * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. */ -export type SyncAcquireResponseDeploymentTargetReleasePermissions = { - /** - * Management permissions configuration for stack management access - */ - management?: - | SyncAcquireResponseDeploymentTargetReleaseManagement1 - | SyncAcquireResponseDeploymentTargetReleaseManagement2 - | SyncAcquireResponseDeploymentTargetReleaseManagementEnum - | undefined; +export type SyncAcquireResponseDeploymentOutputs = { /** - * Permission profiles that define access control for compute services - * - * @remarks - * Key is the profile name, value is the permission configuration + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - profiles: { - [k: string]: { - [k: string]: Array< - SyncAcquireResponseDeploymentTargetReleaseProfile | string - >; - }; - }; + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; +export type SyncAcquireResponseDeploymentOutputsUnion = + | SyncAcquireResponseDeploymentOutputs + | any; + /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncAcquireResponseDeploymentTargetReleaseConfig = { +export type SyncAcquireResponseDeploymentPreviousConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -5249,2866 +5340,2408 @@ export type SyncAcquireResponseDeploymentTargetReleaseConfig = { additionalProperties?: { [k: string]: any | null } | undefined; }; +export type SyncAcquireResponseDeploymentPreviousConfigUnion = + | SyncAcquireResponseDeploymentPreviousConfig + | any; + /** - * Reference to a resource by its stable id and resource type. + * Represents the high-level status of a resource during its lifecycle. */ -export type SyncAcquireResponseDeploymentTargetReleaseDependency = { - id: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; -}; - -/** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - */ -export const SyncAcquireResponseDeploymentTargetReleaseLifecycle = { - Frozen: "frozen", - Live: "live", +export const SyncAcquireResponseDeploymentStackStateStatus = { + Pending: "pending", + Provisioning: "provisioning", + ProvisionFailed: "provision-failed", + Running: "running", + Updating: "updating", + UpdateFailed: "update-failed", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + Deleted: "deleted", + RefreshFailed: "refresh-failed", } as const; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Represents the high-level status of a resource during its lifecycle. */ -export type SyncAcquireResponseDeploymentTargetReleaseLifecycle = ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseLifecycle +export type SyncAcquireResponseDeploymentStackStateStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentStackStateStatus >; -export type SyncAcquireResponseDeploymentTargetReleaseResources = { - /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. - */ - config: SyncAcquireResponseDeploymentTargetReleaseConfig; +/** + * Represents the state of a single resource within the stack for a specific platform. + */ +export type SyncAcquireResponseDeploymentStackStateResources = { /** - * Additional dependencies for this resource beyond those defined in the resource itself. + * The platform-specific resource controller that manages this resource's lifecycle. * * @remarks - * The total dependencies are: resource.get_dependencies() + this list + * This is None when the resource status is Pending. + * Stored as JSON to make the struct serializable and movable to alien-core. */ - dependencies: Array; + internal?: any | null | undefined; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - lifecycle: SyncAcquireResponseDeploymentTargetReleaseLifecycle; + config: SyncAcquireResponseDeploymentStackStateConfig; + controllerPlatform?: + | SyncAcquireResponseDeploymentControllerPlatformEnum + | any + | null + | undefined; /** - * Enable remote bindings for this resource (BYOB use case). + * Complete list of dependencies for this resource, including infrastructure dependencies. * * @remarks - * When true, binding params are synced to StackState's `remote_binding_params`. - * Default: false (prevents sensitive data in synced state). - */ - remoteAccess?: boolean | undefined; -}; - -/** - * Represents the target cloud platform. - */ -export const SyncAcquireResponseDeploymentTargetReleaseSupportedPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type SyncAcquireResponseDeploymentTargetReleaseSupportedPlatform = - ClosedEnum< - typeof SyncAcquireResponseDeploymentTargetReleaseSupportedPlatform - >; - -/** - * A bag of resources, unaware of any cloud. - */ -export type SyncAcquireResponseDeploymentTargetReleaseStack = { - /** - * Unique identifier for the stack - */ - id: string; - /** - * Input definitions required before setup or deployment can proceed. - */ - inputs?: Array | undefined; - /** - * Combined permissions configuration that contains both profiles and management + * This preserves the full dependency information from the stack definition. */ - permissions?: - | SyncAcquireResponseDeploymentTargetReleasePermissions + dependencies?: + | Array | undefined; + error?: SyncAcquireResponseDeploymentStackStateError | any | null | undefined; /** - * Map of resource IDs to their configurations and lifecycle settings - */ - resources: { - [k: string]: SyncAcquireResponseDeploymentTargetReleaseResources; - }; - /** - * Which platforms this stack supports. When None, all platforms are supported. + * Stores the controller state that failed, used for manual retry operations. + * + * @remarks + * This allows resuming from the exact point where the failure occurred. + * Stored as JSON to make the struct serializable and movable to alien-core. */ - supportedPlatforms?: - | Array + lastFailedState?: any | null | undefined; + lifecycle?: + | SyncAcquireResponseDeploymentStackStateLifecycleEnum + | any + | null + | undefined; + outputs?: SyncAcquireResponseDeploymentOutputs | any | null | undefined; + previousConfig?: + | SyncAcquireResponseDeploymentPreviousConfig + | any | null | undefined; -}; - -/** - * Release metadata - * - * @remarks - * - * Identifies a specific release version and includes the stack definition. - * The deployment engine uses this to track which release is currently deployed - * and which is the target. - */ -export type SyncAcquireResponseDeploymentTargetRelease = { - /** - * Short description of the release - */ - description?: string | null | undefined; /** - * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no + * Binding parameters for remote access. * * @remarks - * Alien-assigned release — the platform resolves a release from `version`. + * Only populated when the resource has `remote_access: true` in its ResourceEntry. + * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). + * Populated by controllers during provisioning using get_binding_params(). */ - releaseId?: string | null | undefined; + remoteBindingParams?: any | null | undefined; /** - * A bag of resources, unaware of any cloud. + * Tracks consecutive retry attempts for the current state transition. */ - stack: SyncAcquireResponseDeploymentTargetReleaseStack; + retryAttempt?: number | undefined; /** - * Version string (e.g., 2.1.0) + * Represents the high-level status of a resource during its lifecycle. */ - version?: string | null | undefined; + status: SyncAcquireResponseDeploymentStackStateStatus; + /** + * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). + */ + type: string; }; -export type SyncAcquireResponseDeploymentTargetReleaseUnion = - | SyncAcquireResponseDeploymentTargetRelease - | any; - /** - * Current deployment state (includes releases) + * Represents the collective state of all resources in a stack, including platform and pending actions. */ -export type SyncAcquireResponseDeploymentCurrent = { - currentRelease?: - | SyncAcquireResponseDeploymentCurrentRelease - | any - | null - | undefined; - environmentInfo?: - | SyncAcquireResponseDeploymentEnvironmentInfoGcp - | SyncAcquireResponseDeploymentEnvironmentInfoAzure - | SyncAcquireResponseDeploymentEnvironmentInfoLocal - | SyncAcquireResponseDeploymentEnvironmentInfoAws - | SyncAcquireResponseDeploymentEnvironmentInfoTest - | any - | null - | undefined; - error?: SyncAcquireResponseDeploymentError | any | null | undefined; +export type SyncAcquireResponseDeploymentStackState = { /** * Represents the target cloud platform. */ - platform: SyncAcquireResponseDeploymentCurrentPlatform; - /** - * Protocol version for cross-actor compatibility. - * - * @remarks - * All actors (manager, push client, agent) check this before stepping. - * Mismatched versions produce a clear error instead of silent corruption. - * See docs/02-manager/10-deployment-protocol.md. - */ - protocolVersion: number; + platform: SyncAcquireResponseDeploymentStackStatePlatform; /** - * Whether a retry has been requested for a failed deployment - * - * @remarks - * When true and status is a failed state, the deployment system will retry failed resources + * A prefix used for resource naming to ensure uniqueness across deployments. */ - retryRequested?: boolean | undefined; - runtimeMetadata?: - | SyncAcquireResponseDeploymentRuntimeMetadata - | any - | null - | undefined; - stackState?: SyncAcquireResponseDeploymentStackState | any | null | undefined; + resourcePrefix: string; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * The state of individual resources, keyed by resource ID. */ - status: SyncAcquireResponseDeploymentStatus; - targetRelease?: - | SyncAcquireResponseDeploymentTargetRelease - | any - | null - | undefined; + resources: { [k: string]: SyncAcquireResponseDeploymentStackStateResources }; }; -/** - * Represents the target cloud platform. - */ -export const SyncAcquireResponseDeploymentBasePlatformEnum = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type SyncAcquireResponseDeploymentBasePlatformEnum = ClosedEnum< - typeof SyncAcquireResponseDeploymentBasePlatformEnum ->; - -export type SyncAcquireResponseDeploymentBasePlatformUnion = - | SyncAcquireResponseDeploymentBasePlatformEnum +export type SyncAcquireResponseDeploymentStackStateUnion = + | SyncAcquireResponseDeploymentStackState | any; /** - * Configuration for a single container worker cluster. + * Deployment status in the deployment lifecycle. * * @remarks * - * Contains the cluster ID and management token needed to interact with - * the managed container control plane API for container operations. + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. */ -export type SyncAcquireResponseDeploymentClusters = { +export const SyncAcquireResponseDeploymentStatus = { + Pending: "pending", + PreflightsFailed: "preflights-failed", + InitialSetup: "initial-setup", + InitialSetupFailed: "initial-setup-failed", + Provisioning: "provisioning", + WaitingForMachines: "waiting-for-machines", + ProvisioningFailed: "provisioning-failed", + Running: "running", + RefreshFailed: "refresh-failed", + UpdatePending: "update-pending", + Updating: "updating", + UpdateFailed: "update-failed", + DeletePending: "delete-pending", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + TeardownFailed: "teardown-failed", + Deleted: "deleted", + Error: "error", +} as const; +/** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ +export type SyncAcquireResponseDeploymentStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentStatus +>; + +export const SyncAcquireResponseDeploymentTargetReleaseTypeStringList = { + StringList: "stringList", +} as const; +export type SyncAcquireResponseDeploymentTargetReleaseTypeStringList = + ClosedEnum; + +export type SyncAcquireResponseDeploymentTargetReleaseDefaultStringList = { + type: SyncAcquireResponseDeploymentTargetReleaseTypeStringList; /** - * Cluster ID (deterministic: workspace/project/deployment/resourceid) + * String list default. */ - clusterId: string; + value: Array; +}; + +export const SyncAcquireResponseDeploymentTargetReleaseTypeBoolean = { + Boolean: "boolean", +} as const; +export type SyncAcquireResponseDeploymentTargetReleaseTypeBoolean = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseTypeBoolean +>; + +export type SyncAcquireResponseDeploymentTargetReleaseDefaultBoolean = { + type: SyncAcquireResponseDeploymentTargetReleaseTypeBoolean; /** - * Management token for API access (hm_...) - * - * @remarks - * Used by alien-deployment controllers to create/update containers + * Boolean default. */ - managementToken: string; + value: boolean; }; -/** - * AWS Horizon machine image catalog. - */ -export type SyncAcquireResponseDeploymentHorizonMachineImageAws = { +export const SyncAcquireResponseDeploymentTargetReleaseTypeNumber = { + Number: "number", +} as const; +export type SyncAcquireResponseDeploymentTargetReleaseTypeNumber = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseTypeNumber +>; + +export type SyncAcquireResponseDeploymentTargetReleaseDefaultNumber = { + type: SyncAcquireResponseDeploymentTargetReleaseTypeNumber; /** - * AMI IDs by architecture, then AWS region. + * Number default. */ - amis: { [k: string]: { [k: string]: string } }; + value: string; }; -export type SyncAcquireResponseDeploymentHorizonMachineImageAwsUnion = - | SyncAcquireResponseDeploymentHorizonMachineImageAws - | any; +export const SyncAcquireResponseDeploymentTargetReleaseTypeString = { + String: "string", +} as const; +export type SyncAcquireResponseDeploymentTargetReleaseTypeString = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseTypeString +>; -/** - * Azure Horizon machine image entry. - */ -export type SyncAcquireResponseDeploymentAzureImages = { +export type SyncAcquireResponseDeploymentTargetReleaseDefaultString = { + type: SyncAcquireResponseDeploymentTargetReleaseTypeString; /** - * Azure Compute Gallery image version ID. + * String default. */ - imageVersionId: string; + value: string; }; +export type SyncAcquireResponseDeploymentTargetReleaseDefaultUnion = + | SyncAcquireResponseDeploymentTargetReleaseDefaultString + | SyncAcquireResponseDeploymentTargetReleaseDefaultNumber + | SyncAcquireResponseDeploymentTargetReleaseDefaultBoolean + | SyncAcquireResponseDeploymentTargetReleaseDefaultStringList + | any; + /** - * Azure Horizon machine image catalog. + * Environment variable handling for a stack input mapping. */ -export type SyncAcquireResponseDeploymentHorizonMachineImageAzure = { - /** - * Images by architecture. - */ - images: { [k: string]: SyncAcquireResponseDeploymentAzureImages }; -}; +export const SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum = { + Plain: "plain", + Secret: "secret", +} as const; +/** + * Environment variable handling for a stack input mapping. + */ +export type SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum +>; -export type SyncAcquireResponseDeploymentHorizonMachineImageAzureUnion = - | SyncAcquireResponseDeploymentHorizonMachineImageAzure +export type SyncAcquireResponseDeploymentTargetReleaseTypeUnion = + | SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum | any; /** - * Base image metadata for the Horizon machine image. + * How a resolved stack input is injected into runtime environment variables. */ -export type SyncAcquireResponseDeploymentBaseImage = { +export type SyncAcquireResponseDeploymentTargetReleaseEnv = { /** - * Base OS image name. + * Environment variable name. */ name: string; /** - * Base OS image version or channel. + * Target resource IDs or patterns. None means every env-capable resource. */ - version: string; + targetResources?: Array | null | undefined; + type?: + | SyncAcquireResponseDeploymentTargetReleaseTypeEnvEnum + | any + | null + | undefined; }; /** - * GCP Horizon machine image entry. + * Primitive stack input kind. */ -export type SyncAcquireResponseDeploymentGcpImages = { - /** - * Source image self link or image-family URL. - */ - sourceImage: string; -}; - +export const SyncAcquireResponseDeploymentTargetReleaseKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; /** - * GCP Horizon machine image catalog. + * Primitive stack input kind. */ -export type SyncAcquireResponseDeploymentHorizonMachineImageGcp = { - /** - * Images by architecture. - */ - images: { [k: string]: SyncAcquireResponseDeploymentGcpImages }; -}; +export type SyncAcquireResponseDeploymentTargetReleaseKind = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseKind +>; -export type SyncAcquireResponseDeploymentHorizonMachineImageGcpUnion = - | SyncAcquireResponseDeploymentHorizonMachineImageGcp - | any; +/** + * Represents the target cloud platform. + */ +export const SyncAcquireResponseDeploymentTargetReleasePlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncAcquireResponseDeploymentTargetReleasePlatform = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleasePlatform +>; /** - * Download artifact for one horizond release platform. + * Who can provide a stack input value. */ -export type SyncAcquireResponseDeploymentHorizondArtifacts = { - /** - * SHA-256 digest for the artifact payload. - */ - sha256: string; - /** - * HTTPS URL for the artifact. - */ - url: string; -}; +export const SyncAcquireResponseDeploymentTargetReleaseProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type SyncAcquireResponseDeploymentTargetReleaseProvidedBy = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseProvidedBy +>; /** - * Horizon machine image catalog. - * - * @remarks - * - * Platform resolves concrete provider images from this catalog during rollout. + * Portable stack input validation constraints. */ -export type SyncAcquireResponseDeploymentHorizonMachineImage = { - aws?: - | SyncAcquireResponseDeploymentHorizonMachineImageAws - | any - | null - | undefined; - azure?: - | SyncAcquireResponseDeploymentHorizonMachineImageAzure - | any - | null - | undefined; +export type SyncAcquireResponseDeploymentTargetReleaseValidation = { /** - * Base image metadata for the Horizon machine image. + * Semantic format hint such as url. */ - baseImage: SyncAcquireResponseDeploymentBaseImage; + format?: string | null | undefined; /** - * Logical image channel, such as prod, staging, or canary. + * Maximum number. */ - channel: string; + max?: string | null | undefined; /** - * Image manifest creation timestamp. + * Maximum string-list items. */ - createdAt: string; - gcp?: - | SyncAcquireResponseDeploymentHorizonMachineImageGcp - | any - | null - | undefined; + maxItems?: number | null | undefined; /** - * Git commit SHA used to build the image. + * Maximum string length. */ - gitSha: string; + maxLength?: number | null | undefined; /** - * Per-architecture horizond artifacts by release-platform key. + * Minimum number. */ - horizondArtifacts: { - [k: string]: SyncAcquireResponseDeploymentHorizondArtifacts; - }; + min?: string | null | undefined; /** - * horizond daemon version baked into the image. + * Minimum string-list items. */ - horizondVersion: string; + minItems?: number | null | undefined; /** - * Published immutable machine image version. + * Minimum string length. */ - machineImageVersion: string; + minLength?: number | null | undefined; + /** + * Portable whole-value regex pattern. + */ + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; -export type SyncAcquireResponseDeploymentHorizonMachineImageUnion = - | SyncAcquireResponseDeploymentHorizonMachineImage +export type SyncAcquireResponseDeploymentTargetReleaseValidationUnion = + | SyncAcquireResponseDeploymentTargetReleaseValidation | any; -export const SyncAcquireResponseDeploymentComputeBackendType = { - Horizon: "horizon", -} as const; -export type SyncAcquireResponseDeploymentComputeBackendType = ClosedEnum< - typeof SyncAcquireResponseDeploymentComputeBackendType ->; - /** - * Compute backend for Container and Worker resources. - * - * @remarks - * - * Determines how compute workloads are orchestrated on cloud platforms. - * When None, the platform default is used for cloud platforms. + * Stack input definition serialized into a release stack. */ -export type SyncAcquireResponseDeploymentComputeBackendHorizon = { +export type SyncAcquireResponseDeploymentTargetReleaseInput = { + default?: + | SyncAcquireResponseDeploymentTargetReleaseDefaultString + | SyncAcquireResponseDeploymentTargetReleaseDefaultNumber + | SyncAcquireResponseDeploymentTargetReleaseDefaultBoolean + | SyncAcquireResponseDeploymentTargetReleaseDefaultStringList + | any + | null + | undefined; /** - * Cluster configurations (one per ComputeCluster resource) - * - * @remarks - * Key: ComputeCluster resource ID from stack - * Value: Cluster ID and management token for that cluster + * Human-facing helper text. */ - clusters: { [k: string]: SyncAcquireResponseDeploymentClusters }; - horizonMachineImage?: - | SyncAcquireResponseDeploymentHorizonMachineImage - | any + description: string; + /** + * Runtime env-var mappings for v1 input resolution. + */ + env?: Array | undefined; + /** + * Stable input ID used by CLI/API calls. + */ + id: string; + /** + * Primitive stack input kind. + */ + kind: SyncAcquireResponseDeploymentTargetReleaseKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: + | Array | null | undefined; /** - * Horizon control-plane API base URL. + * Who can provide this value. */ - url: string; - type: SyncAcquireResponseDeploymentComputeBackendType; + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: + | SyncAcquireResponseDeploymentTargetReleaseValidation + | any + | null + | undefined; }; -export type SyncAcquireResponseDeploymentComputeBackendUnion = - | SyncAcquireResponseDeploymentComputeBackendHorizon - | any; +export const SyncAcquireResponseDeploymentTargetReleaseManagementEnum = { + Auto: "auto", +} as const; +export type SyncAcquireResponseDeploymentTargetReleaseManagementEnum = + ClosedEnum; /** - * Certificate status in the certificate lifecycle + * AWS-specific binding specification */ -export const SyncAcquireResponseDeploymentAliasCertificateStatus = { - Pending: "pending", - Issued: "issued", - Renewing: "renewing", - RenewalFailed: "renewal-failed", - Failed: "failed", - Deleting: "deleting", -} as const; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + /** - * Certificate status in the certificate lifecycle + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentAliasCertificateStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentAliasCertificateStatus ->; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; /** - * DNS record status in the DNS lifecycle + * Generic binding configuration for permissions */ -export const SyncAcquireResponseDeploymentAliasDnsStatus = { - Pending: "pending", - Active: "active", - Updating: "updating", - Deleting: "deleting", - Failed: "failed", +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncAcquireResponseDeploymentTargetReleaseOverrideAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const SyncAcquireResponseDeploymentTargetReleaseOverrideEffect = { + Allow: "Allow", + Deny: "Deny", } as const; /** - * DNS record status in the DNS lifecycle + * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentAliasDnsStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentAliasDnsStatus ->; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideEffect = + ClosedEnum; /** - * Certificate and DNS metadata for a managed hostname. - * - * @remarks - * - * Includes decrypted certificate data for issued certificates. - * Private keys are deployment-scoped secrets (like environment variables). + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentAlias = { +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAwGrant = { /** - * Full PEM certificate chain (only present if status is "issued"). + * AWS IAM actions (only for AWS) */ - certificateChain?: string | null | undefined; + actions?: Array | null | undefined; /** - * Certificate ID (for tracking/logging). + * Azure actions (only for Azure) */ - certificateId: string; + dataActions?: Array | null | undefined; /** - * Certificate status in the certificate lifecycle + * GCP permissions that require an exact residual custom role. */ - certificateStatus: SyncAcquireResponseDeploymentAliasCertificateStatus; + permissions?: Array | null | undefined; /** - * Last DNS error message. Present when DNS previously failed, even if status - * - * @remarks - * was reset to pending for retry. Used to surface actionable error context - * in WaitingForDns failure messages. + * Provider predefined roles to bind directly. */ - dnsError?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * DNS record status in the DNS lifecycle + * GCP residual custom permissions to pair with predefined roles. */ - dnsStatus: SyncAcquireResponseDeploymentAliasDnsStatus; + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAw = { /** - * Fully qualified domain name. + * Generic binding configuration for permissions */ - fqdn: string; + binding: SyncAcquireResponseDeploymentTargetReleaseOverrideAwBinding; /** - * ISO 8601 timestamp when certificate was issued (for renewal detection). + * Short admin-facing description of why this entry exists. */ - issuedAt?: string | null | undefined; + description?: string | null | undefined; /** - * Decrypted private key (only present if status is "issued"). + * IAM effect. Defaults to Allow. */ - privateKey?: string | null | undefined; + effect?: SyncAcquireResponseDeploymentTargetReleaseOverrideEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentTargetReleaseOverrideAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Certificate status in the certificate lifecycle + * Azure-specific binding specification */ -export const SyncAcquireResponseDeploymentCertificateStatus = { - Pending: "pending", - Issued: "issued", - Renewing: "renewing", - RenewalFailed: "renewal-failed", - Failed: "failed", - Deleting: "deleting", -} as const; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + /** - * Certificate status in the certificate lifecycle + * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentCertificateStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentCertificateStatus ->; - -/** - * DNS record status in the DNS lifecycle - */ -export const SyncAcquireResponseDeploymentDnsStatus = { - Pending: "pending", - Active: "active", - Updating: "updating", - Deleting: "deleting", - Failed: "failed", -} as const; -/** - * DNS record status in the DNS lifecycle - */ -export type SyncAcquireResponseDeploymentDnsStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentDnsStatus ->; - -/** - * Certificate status in the certificate lifecycle - */ -export const SyncAcquireResponseDeploymentEndpointsCertificateStatus = { - Pending: "pending", - Issued: "issued", - Renewing: "renewing", - RenewalFailed: "renewal-failed", - Failed: "failed", - Deleting: "deleting", -} as const; -/** - * Certificate status in the certificate lifecycle - */ -export type SyncAcquireResponseDeploymentEndpointsCertificateStatus = - ClosedEnum; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; /** - * DNS record status in the DNS lifecycle - */ -export const SyncAcquireResponseDeploymentEndpointsDnsStatus = { - Pending: "pending", - Active: "active", - Updating: "updating", - Deleting: "deleting", - Failed: "failed", -} as const; -/** - * DNS record status in the DNS lifecycle + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentEndpointsDnsStatus = ClosedEnum< - typeof SyncAcquireResponseDeploymentEndpointsDnsStatus ->; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideAzureStack + | undefined; +}; /** - * Certificate and DNS metadata for a managed hostname. - * - * @remarks - * - * Includes decrypted certificate data for issued certificates. - * Private keys are deployment-scoped secrets (like environment variables). + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentEndpoints = { +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzureGrant = { /** - * Full PEM certificate chain (only present if status is "issued"). + * AWS IAM actions (only for AWS) */ - certificateChain?: string | null | undefined; + actions?: Array | null | undefined; /** - * Certificate ID (for tracking/logging). + * Azure actions (only for Azure) */ - certificateId: string; + dataActions?: Array | null | undefined; /** - * Certificate status in the certificate lifecycle + * GCP permissions that require an exact residual custom role. */ - certificateStatus: SyncAcquireResponseDeploymentEndpointsCertificateStatus; + permissions?: Array | null | undefined; /** - * Last DNS error message. Present when DNS previously failed, even if status - * - * @remarks - * was reset to pending for retry. Used to surface actionable error context - * in WaitingForDns failure messages. + * Provider predefined roles to bind directly. */ - dnsError?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * DNS record status in the DNS lifecycle + * GCP residual custom permissions to pair with predefined roles. */ - dnsStatus: SyncAcquireResponseDeploymentEndpointsDnsStatus; + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideAzure = { /** - * Fully qualified domain name. + * Generic binding configuration for permissions */ - fqdn: string; + binding: SyncAcquireResponseDeploymentTargetReleaseOverrideAzureBinding; /** - * ISO 8601 timestamp when certificate was issued (for renewal detection). + * Short admin-facing description of why this entry exists. */ - issuedAt?: string | null | undefined; + description?: string | null | undefined; /** - * Decrypted private key (only present if status is "issued"). + * Grant permissions for a specific cloud platform */ - privateKey?: string | null | undefined; + grant: SyncAcquireResponseDeploymentTargetReleaseOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Certificate and DNS metadata for a public resource. - * - * @remarks - * - * The direct fields describe the primary endpoint hostname. `endpoints` - * contains endpoint-scoped metadata keyed by endpoint name. `aliases` contains - * additional managed hostnames that route directly to the primary endpoint. + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentDomainMetadataResources = { - /** - * Additional managed hostnames for the resource. - */ - aliases?: Array | undefined; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideConditionResource = + { + expression: string; + title: string; + }; + +export type SyncAcquireResponseDeploymentTargetReleaseOverrideResourceConditionUnion = + | SyncAcquireResponseDeploymentTargetReleaseOverrideConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpResource = { + condition?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideConditionResource + | any + | null + | undefined; /** - * Full PEM certificate chain (only present if status is "issued"). + * Scope (project/resource level) */ - certificateChain?: string | null | undefined; + scope: string; +}; + +/** + * GCP IAM condition + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideCondition = { + expression: string; + title: string; +}; + +export type SyncAcquireResponseDeploymentTargetReleaseOverrideConditionUnion = + | SyncAcquireResponseDeploymentTargetReleaseOverrideCondition + | any; + +/** + * GCP-specific binding specification + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpStack = { + condition?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideCondition + | any + | null + | undefined; /** - * Certificate ID (for tracking/logging). + * Scope (project/resource level) */ - certificateId: string; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpBinding = { /** - * Certificate status in the certificate lifecycle + * GCP-specific binding specification */ - certificateStatus: SyncAcquireResponseDeploymentCertificateStatus; + resource?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideGcpResource + | undefined; /** - * Last DNS error message. + * GCP-specific binding specification */ - dnsError?: string | null | undefined; + stack?: + | SyncAcquireResponseDeploymentTargetReleaseOverrideGcpStack + | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcpGrant = { /** - * DNS record status in the DNS lifecycle + * AWS IAM actions (only for AWS) */ - dnsStatus: SyncAcquireResponseDeploymentDnsStatus; + actions?: Array | null | undefined; /** - * Endpoint-scoped metadata keyed by endpoint name. + * Azure actions (only for Azure) */ - endpoints?: - | { [k: string]: SyncAcquireResponseDeploymentEndpoints } - | undefined; + dataActions?: Array | null | undefined; /** - * Fully qualified domain name. + * GCP permissions that require an exact residual custom role. */ - fqdn: string; + permissions?: Array | null | undefined; /** - * ISO 8601 timestamp when certificate was issued (for renewal detection). + * Provider predefined roles to bind directly. */ - issuedAt?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Decrypted private key (only present if status is "issued"). + * GCP residual custom permissions to pair with predefined roles. */ - privateKey?: string | null | undefined; + residualPermissions?: Array | null | undefined; }; /** - * Domain metadata for auto-managed public resources (no private keys). + * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentDomainMetadata = { +export type SyncAcquireResponseDeploymentTargetReleaseOverrideGcp = { /** - * Base domain for auto-generated domains (e.g., "vpc.direct"). + * Generic binding configuration for permissions */ - baseDomain: string; + binding: SyncAcquireResponseDeploymentTargetReleaseOverrideGcpBinding; /** - * Hosted zone ID for DNS records. + * Short admin-facing description of why this entry exists. */ - hostedZoneId: string; + description?: string | null | undefined; /** - * Deployment public subdomain (e.g., "k8f2j3"). + * Grant permissions for a specific cloud platform */ - publicSubdomain: string; + grant: SyncAcquireResponseDeploymentTargetReleaseOverrideGcpGrant; /** - * Metadata per resource ID. + * Stable admin-facing label for this permission entry. */ - resources: { - [k: string]: SyncAcquireResponseDeploymentDomainMetadataResources; - }; + label?: string | null | undefined; }; -export type SyncAcquireResponseDeploymentDomainMetadataUnion = - | SyncAcquireResponseDeploymentDomainMetadata - | any; - -/** - * Type of environment variable - */ -export const SyncAcquireResponseDeploymentEnvironmentVariablesType = { - Plain: "plain", - Secret: "secret", -} as const; -/** - * Type of environment variable - */ -export type SyncAcquireResponseDeploymentEnvironmentVariablesType = ClosedEnum< - typeof SyncAcquireResponseDeploymentEnvironmentVariablesType ->; - /** - * Environment variable for deployment + * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentVariable = { - /** - * Variable name - */ - name: string; +export type SyncAcquireResponseDeploymentTargetReleaseOverridePlatforms = { /** - * Target resource patterns (null = all resources, Some = wildcard patterns) + * AWS permission configurations */ - targetResources?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** - * Type of environment variable + * Azure permission configurations */ - type: SyncAcquireResponseDeploymentEnvironmentVariablesType; + azure?: + | Array + | null + | undefined; /** - * Variable value (decrypted - deployment has access to decryption keys) + * GCP permission configurations */ - value: string; + gcp?: + | Array + | null + | undefined; }; /** - * Snapshot of environment variables at a point in time + * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentEnvironmentVariables = { +export type SyncAcquireResponseDeploymentTargetReleaseOverride = { /** - * ISO 8601 timestamp when snapshot was created + * Human-readable description of what this permission set allows */ - createdAt: string; + description: string; /** - * Deterministic hash of all variables (for change detection) + * Unique identifier for the permission set (e.g., "storage/data-read") */ - hash: string; + id: string; /** - * Environment variables in the snapshot + * Platform-specific permission configurations */ - variables: Array; + platforms: SyncAcquireResponseDeploymentTargetReleaseOverridePlatforms; }; /** - * Reference to a Kubernetes Secret + * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentDatabaseSecretRef6 = { - key: string; - name: string; -}; +export type SyncAcquireResponseDeploymentTargetReleaseOverrideUnion = + | SyncAcquireResponseDeploymentTargetReleaseOverride + | string; -export type SyncAcquireResponseDeploymentDatabase6 = { +export type SyncAcquireResponseDeploymentTargetReleaseManagement2 = { /** - * Reference to a Kubernetes Secret + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource */ - secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef6; + override: { + [k: string]: Array< + SyncAcquireResponseDeploymentTargetReleaseOverride | string + >; + }; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentDatabaseUnion5 = - | SyncAcquireResponseDeploymentDatabase6 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentHostSecretRef4 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentHost4 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAwResource = { /** - * Reference to a Kubernetes Secret + * Optional condition for additional filtering (rare) */ - secretRef: SyncAcquireResponseDeploymentHostSecretRef4; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentHostUnion4 = - | SyncAcquireResponseDeploymentHost4 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPortSecretRef5 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPort5 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAwStack = { /** - * Reference to a Kubernetes Secret + * Optional condition for additional filtering (rare) */ - secretRef: SyncAcquireResponseDeploymentPortSecretRef5; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPortUnion5 = - | SyncAcquireResponseDeploymentPort5 - | number - | any; - -/** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentUsernameSecretRef5 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentUsername5 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAwBinding = { /** - * Reference to a Kubernetes Secret + * AWS-specific binding specification */ - secretRef: SyncAcquireResponseDeploymentUsernameSecretRef5; + resource?: + | SyncAcquireResponseDeploymentTargetReleaseExtendAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncAcquireResponseDeploymentTargetReleaseExtendAwStack | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentUsernameUnion5 = - | SyncAcquireResponseDeploymentUsername5 - | any - | string; - -export const SyncAcquireResponseDeploymentTypePostgres5 = { - Postgres: "postgres", +export const SyncAcquireResponseDeploymentTargetReleaseExtendEffect = { + Allow: "Allow", + Deny: "Deny", } as const; -export type SyncAcquireResponseDeploymentTypePostgres5 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypePostgres5 +/** + * IAM effect. Defaults to Allow. + */ +export type SyncAcquireResponseDeploymentTargetReleaseExtendEffect = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseExtendEffect >; /** - * Local embedded Postgres binding. + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentExternalBindingsLocalPostgres = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAwGrant = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - database?: - | SyncAcquireResponseDeploymentDatabase6 - | any - | string - | null - | undefined; + actions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure actions (only for Azure) */ - host?: SyncAcquireResponseDeploymentHost4 | any | string | null | undefined; - password: string; + dataActions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP permissions that require an exact residual custom role. */ - port?: SyncAcquireResponseDeploymentPort5 | number | any | null | undefined; + permissions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Provider predefined roles to bind directly. */ - username?: - | SyncAcquireResponseDeploymentUsername5 - | any - | string - | null - | undefined; - service: "local-postgres"; - type: SyncAcquireResponseDeploymentTypePostgres5; + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Reference to a Kubernetes Secret + * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentDatabaseSecretRef5 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDatabase5 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAw = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef5; -}; - -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentDatabaseUnion4 = - | SyncAcquireResponseDeploymentDatabase5 - | any - | string; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentHostSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentHost3 = { + binding: SyncAcquireResponseDeploymentTargetReleaseExtendAwBinding; /** - * Reference to a Kubernetes Secret + * Short admin-facing description of why this entry exists. */ - secretRef: SyncAcquireResponseDeploymentHostSecretRef3; + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncAcquireResponseDeploymentTargetReleaseExtendEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentTargetReleaseExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentHostUnion3 = - | SyncAcquireResponseDeploymentHost3 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPortSecretRef4 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPort4 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureResource = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncAcquireResponseDeploymentPortSecretRef4; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPortUnion4 = - | SyncAcquireResponseDeploymentPort4 - | number - | any; - -/** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentUsernameSecretRef4 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentUsername4 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureStack = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncAcquireResponseDeploymentUsernameSecretRef4; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentUsernameUnion4 = - | SyncAcquireResponseDeploymentUsername4 - | any - | string; - -export const SyncAcquireResponseDeploymentTypePostgres4 = { - Postgres: "postgres", -} as const; -export type SyncAcquireResponseDeploymentTypePostgres4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypePostgres4 ->; +export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | SyncAcquireResponseDeploymentTargetReleaseExtendAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentTargetReleaseExtendAzureStack + | undefined; +}; /** - * Operator-provided / BYO database binding. + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentExternalBindingsExternal = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAzureGrant = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - database?: - | SyncAcquireResponseDeploymentDatabase5 - | any - | string - | null - | undefined; + actions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure actions (only for Azure) */ - host?: SyncAcquireResponseDeploymentHost3 | any | string | null | undefined; + dataActions?: Array | null | undefined; /** - * Connection password as a concrete value, never an unresolved `SecretRef`: the platform - * - * @remarks - * materializes the Kubernetes secret into the pod env. The cloud variants carry a secret - * locator instead. + * GCP permissions that require an exact residual custom role. */ - password: string; + permissions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Provider predefined roles to bind directly. */ - port?: SyncAcquireResponseDeploymentPort4 | number | any | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP residual custom permissions to pair with predefined roles. */ - username?: - | SyncAcquireResponseDeploymentUsername4 - | any - | string - | null - | undefined; - service: "external"; - type: SyncAcquireResponseDeploymentTypePostgres4; + residualPermissions?: Array | null | undefined; }; /** - * Reference to a Kubernetes Secret + * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentDatabaseSecretRef4 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDatabase4 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendAzure = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef4; + binding: SyncAcquireResponseDeploymentTargetReleaseExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentTargetReleaseExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentDatabaseUnion3 = - | SyncAcquireResponseDeploymentDatabase4 - | any - | string; +export type SyncAcquireResponseDeploymentTargetReleaseExtendConditionResource = + { + expression: string; + title: string; + }; + +export type SyncAcquireResponseDeploymentTargetReleaseExtendResourceConditionUnion = + | SyncAcquireResponseDeploymentTargetReleaseExtendConditionResource + | any; /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentHostSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentHost2 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpResource = { + condition?: + | SyncAcquireResponseDeploymentTargetReleaseExtendConditionResource + | any + | null + | undefined; /** - * Reference to a Kubernetes Secret + * Scope (project/resource level) */ - secretRef: SyncAcquireResponseDeploymentHostSecretRef2; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentHostUnion2 = - | SyncAcquireResponseDeploymentHost2 - | any - | string; +export type SyncAcquireResponseDeploymentTargetReleaseExtendCondition = { + expression: string; + title: string; +}; + +export type SyncAcquireResponseDeploymentTargetReleaseExtendConditionUnion = + | SyncAcquireResponseDeploymentTargetReleaseExtendCondition + | any; /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentPasswordSecretUriSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPasswordSecretUri = { - /** - * Reference to a Kubernetes Secret +export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpStack = { + condition?: + | SyncAcquireResponseDeploymentTargetReleaseExtendCondition + | any + | null + | undefined; + /** + * Scope (project/resource level) */ - secretRef: SyncAcquireResponseDeploymentPasswordSecretUriSecretRef; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPasswordSecretUriUnion = - | SyncAcquireResponseDeploymentPasswordSecretUri - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPortSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPort3 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpBinding = { /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ - secretRef: SyncAcquireResponseDeploymentPortSecretRef3; + resource?: + | SyncAcquireResponseDeploymentTargetReleaseExtendGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncAcquireResponseDeploymentTargetReleaseExtendGcpStack | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPortUnion3 = - | SyncAcquireResponseDeploymentPort3 - | number - | any; - -/** - * Reference to a Kubernetes Secret + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentUsernameSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentUsername3 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendGcpGrant = { /** - * Reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - secretRef: SyncAcquireResponseDeploymentUsernameSecretRef3; + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentUsernameUnion3 = - | SyncAcquireResponseDeploymentUsername3 - | any - | string; - -export const SyncAcquireResponseDeploymentTypePostgres3 = { - Postgres: "postgres", -} as const; -export type SyncAcquireResponseDeploymentTypePostgres3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypePostgres3 ->; +export type SyncAcquireResponseDeploymentTargetReleaseExtendGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncAcquireResponseDeploymentTargetReleaseExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentTargetReleaseExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; /** - * Azure Flexible Server binding. + * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentExternalBindingsFlexibleServer = { +export type SyncAcquireResponseDeploymentTargetReleaseExtendPlatforms = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS permission configurations */ - database?: - | SyncAcquireResponseDeploymentDatabase4 - | any - | string + aws?: + | Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - host?: SyncAcquireResponseDeploymentHost2 | any | string | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure permission configurations */ - passwordSecretUri?: - | SyncAcquireResponseDeploymentPasswordSecretUri - | any - | string + azure?: + | Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - port?: SyncAcquireResponseDeploymentPort3 | number | any | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP permission configurations */ - username?: - | SyncAcquireResponseDeploymentUsername3 - | any - | string + gcp?: + | Array | null | undefined; - service: "flexible-server"; - type: SyncAcquireResponseDeploymentTypePostgres3; }; /** - * Reference to a Kubernetes Secret + * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentDatabaseSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDatabase3 = { +export type SyncAcquireResponseDeploymentTargetReleaseExtend = { /** - * Reference to a Kubernetes Secret + * Human-readable description of what this permission set allows */ - secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef3; + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncAcquireResponseDeploymentTargetReleaseExtendPlatforms; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentDatabaseUnion2 = - | SyncAcquireResponseDeploymentDatabase3 - | any +export type SyncAcquireResponseDeploymentTargetReleaseExtendUnion = + | SyncAcquireResponseDeploymentTargetReleaseExtend | string; -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentHostSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentHost1 = { +export type SyncAcquireResponseDeploymentTargetReleaseManagement1 = { /** - * Reference to a Kubernetes Secret + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource */ - secretRef: SyncAcquireResponseDeploymentHostSecretRef1; + extend: { + [k: string]: Array< + SyncAcquireResponseDeploymentTargetReleaseExtend | string + >; + }; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Management permissions configuration for stack management access */ -export type SyncAcquireResponseDeploymentHostUnion1 = - | SyncAcquireResponseDeploymentHost1 - | any - | string; +export type SyncAcquireResponseDeploymentTargetReleaseManagementUnion = + | SyncAcquireResponseDeploymentTargetReleaseManagement1 + | SyncAcquireResponseDeploymentTargetReleaseManagement2 + | SyncAcquireResponseDeploymentTargetReleaseManagementEnum; /** - * Reference to a Kubernetes Secret + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPasswordSecretNameSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPasswordSecretName = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAwResource = { /** - * Reference to a Kubernetes Secret + * Optional condition for additional filtering (rare) */ - secretRef: SyncAcquireResponseDeploymentPasswordSecretNameSecretRef; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS-specific binding specification */ -export type SyncAcquireResponseDeploymentPasswordSecretNameUnion = - | SyncAcquireResponseDeploymentPasswordSecretName - | any - | string; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPortSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPort2 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAwStack = { /** - * Reference to a Kubernetes Secret + * Optional condition for additional filtering (rare) */ - secretRef: SyncAcquireResponseDeploymentPortSecretRef2; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPortUnion2 = - | SyncAcquireResponseDeploymentPort2 - | number - | any; - -/** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentUsernameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentUsername2 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAwBinding = { /** - * Reference to a Kubernetes Secret + * AWS-specific binding specification */ - secretRef: SyncAcquireResponseDeploymentUsernameSecretRef2; + resource?: + | SyncAcquireResponseDeploymentTargetReleaseProfileAwResource + | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncAcquireResponseDeploymentTargetReleaseProfileAwStack | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * IAM effect. Defaults to Allow. */ -export type SyncAcquireResponseDeploymentUsernameUnion2 = - | SyncAcquireResponseDeploymentUsername2 - | any - | string; - -export const SyncAcquireResponseDeploymentTypePostgres2 = { - Postgres: "postgres", +export const SyncAcquireResponseDeploymentTargetReleaseProfileEffect = { + Allow: "Allow", + Deny: "Deny", } as const; -export type SyncAcquireResponseDeploymentTypePostgres2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypePostgres2 ->; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncAcquireResponseDeploymentTargetReleaseProfileEffect = + ClosedEnum; /** - * GCP Cloud SQL binding. + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentExternalBindingsCloudSQL = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAwGrant = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - database?: - | SyncAcquireResponseDeploymentDatabase3 - | any - | string - | null - | undefined; + actions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure actions (only for Azure) */ - host?: SyncAcquireResponseDeploymentHost1 | any | string | null | undefined; + dataActions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP permissions that require an exact residual custom role. */ - passwordSecretName?: - | SyncAcquireResponseDeploymentPasswordSecretName - | any - | string - | null - | undefined; + permissions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Provider predefined roles to bind directly. */ - port?: SyncAcquireResponseDeploymentPort2 | number | any | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP residual custom permissions to pair with predefined roles. */ - username?: - | SyncAcquireResponseDeploymentUsername2 - | any - | string - | null - | undefined; - service: "cloud-sql"; - type: SyncAcquireResponseDeploymentTypePostgres2; + residualPermissions?: Array | null | undefined; }; /** - * Reference to a Kubernetes Secret + * AWS-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentClusterEndpointSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentClusterEndpoint = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAw = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncAcquireResponseDeploymentClusterEndpointSecretRef; + binding: SyncAcquireResponseDeploymentTargetReleaseProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncAcquireResponseDeploymentTargetReleaseProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentTargetReleaseProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentClusterEndpointUnion = - | SyncAcquireResponseDeploymentClusterEndpoint - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentDatabaseSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDatabase2 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureResource = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef2; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentDatabaseUnion1 = - | SyncAcquireResponseDeploymentDatabase2 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncAcquireResponseDeploymentPasswordSecretArnSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPasswordSecretArn = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureStack = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncAcquireResponseDeploymentPasswordSecretArnSecretRef; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPasswordSecretArnUnion = - | SyncAcquireResponseDeploymentPasswordSecretArn - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentPortSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPort1 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureBinding = { /** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ - secretRef: SyncAcquireResponseDeploymentPortSecretRef1; + resource?: + | SyncAcquireResponseDeploymentTargetReleaseProfileAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: + | SyncAcquireResponseDeploymentTargetReleaseProfileAzureStack + | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPortUnion1 = - | SyncAcquireResponseDeploymentPort1 - | number - | any; - -/** - * Reference to a Kubernetes Secret + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentUsernameSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentUsername1 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileAzureGrant = { /** - * Reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - secretRef: SyncAcquireResponseDeploymentUsernameSecretRef1; + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentUsernameUnion1 = - | SyncAcquireResponseDeploymentUsername1 - | any - | string; - -export const SyncAcquireResponseDeploymentTypePostgres1 = { - Postgres: "postgres", -} as const; -export type SyncAcquireResponseDeploymentTypePostgres1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypePostgres1 ->; - -/** - * AWS Aurora Serverless v2 binding. + * Azure-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentExternalBindingsAurora = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - clusterEndpoint?: - | SyncAcquireResponseDeploymentClusterEndpoint - | any - | string - | null - | undefined; +export type SyncAcquireResponseDeploymentTargetReleaseProfileAzure = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - database?: - | SyncAcquireResponseDeploymentDatabase2 - | any - | string - | null - | undefined; + binding: SyncAcquireResponseDeploymentTargetReleaseProfileAzureBinding; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Short admin-facing description of why this entry exists. */ - passwordSecretArn?: - | SyncAcquireResponseDeploymentPasswordSecretArn - | any - | string - | null - | undefined; + description?: string | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Grant permissions for a specific cloud platform */ - port?: SyncAcquireResponseDeploymentPort1 | number | any | null | undefined; + grant: SyncAcquireResponseDeploymentTargetReleaseProfileAzureGrant; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Stable admin-facing label for this permission entry. */ - username?: - | SyncAcquireResponseDeploymentUsername1 - | any - | string - | null - | undefined; - service: "aurora"; - type: SyncAcquireResponseDeploymentTypePostgres1; + label?: string | null | undefined; }; /** - * Connection details for a Postgres database, one variant per backend. + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion6 = - | SyncAcquireResponseDeploymentExternalBindingsAurora - | SyncAcquireResponseDeploymentExternalBindingsCloudSQL - | SyncAcquireResponseDeploymentExternalBindingsFlexibleServer - | SyncAcquireResponseDeploymentExternalBindingsExternal - | SyncAcquireResponseDeploymentExternalBindingsLocalPostgres; +export type SyncAcquireResponseDeploymentTargetReleaseProfileConditionResource = + { + expression: string; + title: string; + }; + +export type SyncAcquireResponseDeploymentTargetReleaseProfileResourceConditionUnion = + | SyncAcquireResponseDeploymentTargetReleaseProfileConditionResource + | any; /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentDefaultDomainSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDefaultDomain = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpResource = { + condition?: + | SyncAcquireResponseDeploymentTargetReleaseProfileConditionResource + | any + | null + | undefined; /** - * Reference to a Kubernetes Secret + * Scope (project/resource level) */ - secretRef: SyncAcquireResponseDeploymentDefaultDomainSecretRef; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncAcquireResponseDeploymentDefaultDomainUnion = - | SyncAcquireResponseDeploymentDefaultDomain - | any - | string; +export type SyncAcquireResponseDeploymentTargetReleaseProfileCondition = { + expression: string; + title: string; +}; + +export type SyncAcquireResponseDeploymentTargetReleaseProfileConditionUnion = + | SyncAcquireResponseDeploymentTargetReleaseProfileCondition + | any; /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ -export type SyncAcquireResponseDeploymentEnvironmentNameSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentEnvironmentName = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpStack = { + condition?: + | SyncAcquireResponseDeploymentTargetReleaseProfileCondition + | any + | null + | undefined; /** - * Reference to a Kubernetes Secret + * Scope (project/resource level) */ - secretRef: SyncAcquireResponseDeploymentEnvironmentNameSecretRef; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentEnvironmentNameUnion = - | SyncAcquireResponseDeploymentEnvironmentName - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncAcquireResponseDeploymentResourceGroupNameSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentResourceGroupName3 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpBinding = { /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ - secretRef: SyncAcquireResponseDeploymentResourceGroupNameSecretRef3; + resource?: + | SyncAcquireResponseDeploymentTargetReleaseProfileGcpResource + | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncAcquireResponseDeploymentTargetReleaseProfileGcpStack | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentResourceGroupNameUnion3 = - | SyncAcquireResponseDeploymentResourceGroupName3 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Grant permissions for a specific cloud platform */ -export type SyncAcquireResponseDeploymentResourceIdSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentResourceId = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileGcpGrant = { /** - * Reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - secretRef: SyncAcquireResponseDeploymentResourceIdSecretRef; + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentResourceIdUnion = - | SyncAcquireResponseDeploymentResourceId - | any - | string; - -/** - * Reference to a Kubernetes Secret + * GCP-specific platform permission configuration */ -export type SyncAcquireResponseDeploymentStaticIpSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentStaticIp = { +export type SyncAcquireResponseDeploymentTargetReleaseProfileGcp = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncAcquireResponseDeploymentStaticIpSecretRef; + binding: SyncAcquireResponseDeploymentTargetReleaseProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncAcquireResponseDeploymentTargetReleaseProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export const SyncAcquireResponseDeploymentTypeContainerAppsEnvironment = { - ContainerAppsEnvironment: "container_apps_environment", -} as const; -export type SyncAcquireResponseDeploymentTypeContainerAppsEnvironment = - ClosedEnum; - /** - * Binding configuration for a pre-existing Azure Container Apps Environment. - * - * @remarks - * - * Used when deploying to an existing environment instead of having Alien provision one. - * This is useful for shared environments (e.g., test infrastructure) or enterprise - * setups where environments are managed by a separate team. + * Platform-specific permission configurations */ -export type SyncAcquireResponseDeploymentExternalBindingsContainerAppsEnvironment = - { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - defaultDomain?: - | SyncAcquireResponseDeploymentDefaultDomain - | any - | string - | null - | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - environmentName?: - | SyncAcquireResponseDeploymentEnvironmentName - | any - | string - | null - | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - resourceGroupName?: - | SyncAcquireResponseDeploymentResourceGroupName3 - | any - | string - | null - | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - resourceId?: - | SyncAcquireResponseDeploymentResourceId - | any - | string - | null - | undefined; - staticIp?: any | null | undefined; - type: SyncAcquireResponseDeploymentTypeContainerAppsEnvironment; - }; +export type SyncAcquireResponseDeploymentTargetReleaseProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; /** - * Reference to a Kubernetes Secret + * A permission set that can be applied across different cloud platforms */ -export type SyncAcquireResponseDeploymentDataDirSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDataDir3 = { +export type SyncAcquireResponseDeploymentTargetReleaseProfile = { /** - * Reference to a Kubernetes Secret + * Human-readable description of what this permission set allows */ - secretRef: SyncAcquireResponseDeploymentDataDirSecretRef3; + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncAcquireResponseDeploymentTargetReleaseProfilePlatforms; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Reference to a permission set - either by name or inline definition */ -export type SyncAcquireResponseDeploymentDataDirUnion2 = - | SyncAcquireResponseDeploymentDataDir3 - | any +export type SyncAcquireResponseDeploymentTargetReleaseProfileUnion = + | SyncAcquireResponseDeploymentTargetReleaseProfile | string; -export const SyncAcquireResponseDeploymentTypeVault5 = { - Vault: "vault", -} as const; -export type SyncAcquireResponseDeploymentTypeVault5 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeVault5 ->; - /** - * Local development vault binding (for testing/development) + * Combined permissions configuration that contains both profiles and management */ -export type SyncAcquireResponseDeploymentExternalBindingsLocalVault = { +export type SyncAcquireResponseDeploymentTargetReleasePermissions = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Management permissions configuration for stack management access */ - dataDir?: - | SyncAcquireResponseDeploymentDataDir3 - | any - | string - | null + management?: + | SyncAcquireResponseDeploymentTargetReleaseManagement1 + | SyncAcquireResponseDeploymentTargetReleaseManagement2 + | SyncAcquireResponseDeploymentTargetReleaseManagementEnum | undefined; /** - * The vault name for local storage + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration */ - vaultName: string; - service: "local-vault"; - type: SyncAcquireResponseDeploymentTypeVault5; + profiles: { + [k: string]: { + [k: string]: Array< + SyncAcquireResponseDeploymentTargetReleaseProfile | string + >; + }; + }; }; /** - * Reference to a Kubernetes Secret + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncAcquireResponseDeploymentNamespaceSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentNamespace2 = { +export type SyncAcquireResponseDeploymentTargetReleaseConfig = { /** - * Reference to a Kubernetes Secret + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ - secretRef: SyncAcquireResponseDeploymentNamespaceSecretRef2; + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentNamespaceUnion2 = - | SyncAcquireResponseDeploymentNamespace2 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Reference to a resource by its stable id and resource type. */ -export type SyncAcquireResponseDeploymentVaultPrefixSecretRef3 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentVaultPrefix3 = { +export type SyncAcquireResponseDeploymentTargetReleaseDependency = { + id: string; /** - * Reference to a Kubernetes Secret + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - secretRef: SyncAcquireResponseDeploymentVaultPrefixSecretRef3; + type: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncAcquireResponseDeploymentVaultPrefixUnion3 = - | SyncAcquireResponseDeploymentVaultPrefix3 - | any - | string; - -export const SyncAcquireResponseDeploymentTypeVault4 = { - Vault: "vault", +export const SyncAcquireResponseDeploymentTargetReleaseLifecycle = { + Frozen: "frozen", + Live: "live", } as const; -export type SyncAcquireResponseDeploymentTypeVault4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeVault4 ->; - /** - * Kubernetes Secrets vault binding configuration + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret = { +export type SyncAcquireResponseDeploymentTargetReleaseLifecycle = ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseLifecycle +>; + +export type SyncAcquireResponseDeploymentTargetReleaseResources = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - namespace?: - | SyncAcquireResponseDeploymentNamespace2 - | any - | string - | null - | undefined; + config: SyncAcquireResponseDeploymentTargetReleaseConfig; /** - * Represents a value that can be either a concrete value, a template expression, + * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks - * or a reference to a Kubernetes Secret + * The total dependencies are: resource.get_dependencies() + this list */ - vaultPrefix?: - | SyncAcquireResponseDeploymentVaultPrefix3 - | any - | string - | null - | undefined; - service: "kubernetes-secret"; - type: SyncAcquireResponseDeploymentTypeVault4; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentVaultNameSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentVaultName = { + dependencies: Array; /** - * Reference to a Kubernetes Secret + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. */ - secretRef: SyncAcquireResponseDeploymentVaultNameSecretRef; + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: SyncAcquireResponseDeploymentTargetReleaseLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentVaultNameUnion = - | SyncAcquireResponseDeploymentVaultName - | any - | string; - -export const SyncAcquireResponseDeploymentTypeVault3 = { - Vault: "vault", +export const SyncAcquireResponseDeploymentTargetReleaseSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", } as const; -export type SyncAcquireResponseDeploymentTypeVault3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeVault3 ->; +/** + * Represents the target cloud platform. + */ +export type SyncAcquireResponseDeploymentTargetReleaseSupportedPlatform = + ClosedEnum< + typeof SyncAcquireResponseDeploymentTargetReleaseSupportedPlatform + >; /** - * Azure Key Vault binding configuration + * A bag of resources, unaware of any cloud. */ -export type SyncAcquireResponseDeploymentExternalBindingsKeyVault = { +export type SyncAcquireResponseDeploymentTargetReleaseStack = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Unique identifier for the stack */ - vaultName?: - | SyncAcquireResponseDeploymentVaultName - | any - | string - | null + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: + | SyncAcquireResponseDeploymentTargetReleasePermissions | undefined; - service: "key-vault"; - type: SyncAcquireResponseDeploymentTypeVault3; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentVaultPrefixSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentVaultPrefix2 = { /** - * Reference to a Kubernetes Secret + * Map of resource IDs to their configurations and lifecycle settings */ - secretRef: SyncAcquireResponseDeploymentVaultPrefixSecretRef2; + resources: { + [k: string]: SyncAcquireResponseDeploymentTargetReleaseResources; + }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, + * Release metadata * * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentVaultPrefixUnion2 = - | SyncAcquireResponseDeploymentVaultPrefix2 - | any - | string; - -export const SyncAcquireResponseDeploymentTypeVault2 = { - Vault: "vault", -} as const; -export type SyncAcquireResponseDeploymentTypeVault2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeVault2 ->; - -/** - * GCP Secret Manager vault binding configuration + * + * Identifies a specific release version and includes the stack definition. + * The deployment engine uses this to track which release is currently deployed + * and which is the target. */ -export type SyncAcquireResponseDeploymentExternalBindingsSecretManager = { +export type SyncAcquireResponseDeploymentTargetRelease = { /** - * Represents a value that can be either a concrete value, a template expression, + * Short description of the release + */ + description?: string | null | undefined; + /** + * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no * * @remarks - * or a reference to a Kubernetes Secret + * Alien-assigned release — the platform resolves a release from `version`. */ - vaultPrefix?: - | SyncAcquireResponseDeploymentVaultPrefix2 - | any - | string - | null - | undefined; - service: "secret-manager"; - type: SyncAcquireResponseDeploymentTypeVault2; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentVaultPrefixSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentVaultPrefix1 = { + releaseId?: string | null | undefined; /** - * Reference to a Kubernetes Secret + * A bag of resources, unaware of any cloud. */ - secretRef: SyncAcquireResponseDeploymentVaultPrefixSecretRef1; + stack: SyncAcquireResponseDeploymentTargetReleaseStack; + /** + * Version string (e.g., 2.1.0) + */ + version?: string | null | undefined; }; -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentVaultPrefixUnion1 = - | SyncAcquireResponseDeploymentVaultPrefix1 - | any - | string; - -export const SyncAcquireResponseDeploymentTypeVault1 = { - Vault: "vault", -} as const; -export type SyncAcquireResponseDeploymentTypeVault1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeVault1 ->; +export type SyncAcquireResponseDeploymentTargetReleaseUnion = + | SyncAcquireResponseDeploymentTargetRelease + | any; /** - * AWS SSM Parameter Store vault binding configuration + * Current deployment state (includes releases) */ -export type SyncAcquireResponseDeploymentExternalBindingsParameterStore = { +export type SyncAcquireResponseDeploymentCurrent = { + currentRelease?: + | SyncAcquireResponseDeploymentCurrentRelease + | any + | null + | undefined; + environmentInfo?: + | SyncAcquireResponseDeploymentEnvironmentInfoGcp + | SyncAcquireResponseDeploymentEnvironmentInfoAzure + | SyncAcquireResponseDeploymentEnvironmentInfoLocal + | SyncAcquireResponseDeploymentEnvironmentInfoAws + | SyncAcquireResponseDeploymentEnvironmentInfoTest + | any + | null + | undefined; + error?: SyncAcquireResponseDeploymentError | any | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, + * Represents the target cloud platform. + */ + platform: SyncAcquireResponseDeploymentCurrentPlatform; + /** + * Protocol version for cross-actor compatibility. * * @remarks - * or a reference to a Kubernetes Secret + * All actors (manager, push client, agent) check this before stepping. + * Mismatched versions produce a clear error instead of silent corruption. + * See docs/02-manager/10-deployment-protocol.md. */ - vaultPrefix?: - | SyncAcquireResponseDeploymentVaultPrefix1 + protocolVersion: number; + /** + * Whether a retry has been requested for a failed deployment + * + * @remarks + * When true and status is a failed state, the deployment system will retry failed resources + */ + retryRequested?: boolean | undefined; + runtimeMetadata?: + | SyncAcquireResponseDeploymentRuntimeMetadata | any - | string | null | undefined; - service: "parameter-store"; - type: SyncAcquireResponseDeploymentTypeVault1; -}; - -/** - * Represents a vault binding for secure secret management - */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion5 = - | SyncAcquireResponseDeploymentExternalBindingsParameterStore - | SyncAcquireResponseDeploymentExternalBindingsSecretManager - | SyncAcquireResponseDeploymentExternalBindingsKeyVault - | SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret - | SyncAcquireResponseDeploymentExternalBindingsLocalVault; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentDataDirSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDataDir2 = { + stackState?: SyncAcquireResponseDeploymentStackState | any | null | undefined; /** - * Reference to a Kubernetes Secret + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. */ - secretRef: SyncAcquireResponseDeploymentDataDirSecretRef2; + status: SyncAcquireResponseDeploymentStatus; + targetRelease?: + | SyncAcquireResponseDeploymentTargetRelease + | any + | null + | undefined; }; /** - * Reference to a Kubernetes Secret + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentRegistryUrlSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentRegistryUrl = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncAcquireResponseDeploymentRegistryUrlSecretRef; -}; - +export const SyncAcquireResponseDeploymentBasePlatformEnum = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Represents the target cloud platform. */ -export type SyncAcquireResponseDeploymentRegistryUrlUnion = - | SyncAcquireResponseDeploymentRegistryUrl - | any - | string; - -export const SyncAcquireResponseDeploymentTypeArtifactRegistry4 = { - ArtifactRegistry: "artifact_registry", -} as const; -export type SyncAcquireResponseDeploymentTypeArtifactRegistry4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeArtifactRegistry4 +export type SyncAcquireResponseDeploymentBasePlatformEnum = ClosedEnum< + typeof SyncAcquireResponseDeploymentBasePlatformEnum >; +export type SyncAcquireResponseDeploymentBasePlatformUnion = + | SyncAcquireResponseDeploymentBasePlatformEnum + | any; + /** - * Local container registry binding configuration. + * Configuration for a single container worker cluster. * * @remarks * - * The local registry runs on localhost only and does not require authentication. - * Security boundary is the OS process isolation on the customer's machine. - * External image access is secured by the manager's registry proxy (deployment tokens). + * Contains the cluster ID and management token needed to interact with + * the managed container control plane API for container operations. */ -export type SyncAcquireResponseDeploymentExternalBindingsLocal = { +export type SyncAcquireResponseDeploymentClusters = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Cluster ID (deterministic: workspace/project/deployment/resourceid) */ - dataDir?: any | null | undefined; + clusterId: string; /** - * Represents a value that can be either a concrete value, a template expression, + * Management token for API access (hm_...) * * @remarks - * or a reference to a Kubernetes Secret + * Used by alien-deployment controllers to create/update containers */ - registryUrl?: - | SyncAcquireResponseDeploymentRegistryUrl - | any - | string - | null - | undefined; - service: "local"; - type: SyncAcquireResponseDeploymentTypeArtifactRegistry4; + managementToken: string; }; /** - * Reference to a Kubernetes Secret + * AWS Horizon machine image catalog. */ -export type SyncAcquireResponseDeploymentPullServiceAccountEmailSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPullServiceAccountEmail = { +export type SyncAcquireResponseDeploymentHorizonMachineImageAws = { /** - * Reference to a Kubernetes Secret + * AMI IDs by architecture, then AWS region. */ - secretRef: SyncAcquireResponseDeploymentPullServiceAccountEmailSecretRef; + amis: { [k: string]: { [k: string]: string } }; }; +export type SyncAcquireResponseDeploymentHorizonMachineImageAwsUnion = + | SyncAcquireResponseDeploymentHorizonMachineImageAws + | any; + /** - * Reference to a Kubernetes Secret + * Azure Horizon machine image entry. */ -export type SyncAcquireResponseDeploymentPushServiceAccountEmailSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPushServiceAccountEmail = { +export type SyncAcquireResponseDeploymentAzureImages = { /** - * Reference to a Kubernetes Secret + * Azure Compute Gallery image version ID. */ - secretRef: SyncAcquireResponseDeploymentPushServiceAccountEmailSecretRef; + imageVersionId: string; }; /** - * Reference to a Kubernetes Secret + * Azure Horizon machine image catalog. */ -export type SyncAcquireResponseDeploymentRepositoryNameSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentRepositoryName = { +export type SyncAcquireResponseDeploymentHorizonMachineImageAzure = { /** - * Reference to a Kubernetes Secret + * Images by architecture. */ - secretRef: SyncAcquireResponseDeploymentRepositoryNameSecretRef; + images: { [k: string]: SyncAcquireResponseDeploymentAzureImages }; }; -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentRepositoryNameUnion = - | SyncAcquireResponseDeploymentRepositoryName - | any - | string; - -export const SyncAcquireResponseDeploymentTypeArtifactRegistry3 = { - ArtifactRegistry: "artifact_registry", -} as const; -export type SyncAcquireResponseDeploymentTypeArtifactRegistry3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeArtifactRegistry3 ->; +export type SyncAcquireResponseDeploymentHorizonMachineImageAzureUnion = + | SyncAcquireResponseDeploymentHorizonMachineImageAzure + | any; /** - * Google Artifact Registry binding configuration + * Base image metadata for the Horizon machine image. */ -export type SyncAcquireResponseDeploymentExternalBindingsGar = { - pullServiceAccountEmail?: any | null | undefined; - pushServiceAccountEmail?: any | null | undefined; +export type SyncAcquireResponseDeploymentBaseImage = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Base OS image name. */ - repositoryName?: - | SyncAcquireResponseDeploymentRepositoryName - | any - | string - | null - | undefined; - service: "gar"; - type: SyncAcquireResponseDeploymentTypeArtifactRegistry3; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentRegistryNameSecretRef = { - key: string; name: string; -}; - -export type SyncAcquireResponseDeploymentRegistryName = { /** - * Reference to a Kubernetes Secret + * Base OS image version or channel. */ - secretRef: SyncAcquireResponseDeploymentRegistryNameSecretRef; + version: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP Horizon machine image entry. */ -export type SyncAcquireResponseDeploymentRegistryNameUnion = - | SyncAcquireResponseDeploymentRegistryName - | any - | string; +export type SyncAcquireResponseDeploymentGcpImages = { + /** + * Source image self link or image-family URL. + */ + sourceImage: string; +}; /** - * Reference to a Kubernetes Secret + * GCP Horizon machine image catalog. */ -export type SyncAcquireResponseDeploymentRepositoryPrefixSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentRepositoryPrefix2 = { +export type SyncAcquireResponseDeploymentHorizonMachineImageGcp = { /** - * Reference to a Kubernetes Secret + * Images by architecture. */ - secretRef: SyncAcquireResponseDeploymentRepositoryPrefixSecretRef2; + images: { [k: string]: SyncAcquireResponseDeploymentGcpImages }; }; +export type SyncAcquireResponseDeploymentHorizonMachineImageGcpUnion = + | SyncAcquireResponseDeploymentHorizonMachineImageGcp + | any; + /** - * Reference to a Kubernetes Secret + * Download artifact for one horizond release platform. */ -export type SyncAcquireResponseDeploymentResourceGroupNameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentResourceGroupName2 = { +export type SyncAcquireResponseDeploymentHorizondArtifacts = { /** - * Reference to a Kubernetes Secret + * SHA-256 digest for the artifact payload. */ - secretRef: SyncAcquireResponseDeploymentResourceGroupNameSecretRef2; + sha256: string; + /** + * HTTPS URL for the artifact. + */ + url: string; }; /** - * Represents a value that can be either a concrete value, a template expression, + * Horizon machine image catalog. * * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentResourceGroupNameUnion2 = - | SyncAcquireResponseDeploymentResourceGroupName2 - | any - | string; - -export const SyncAcquireResponseDeploymentTypeArtifactRegistry2 = { - ArtifactRegistry: "artifact_registry", -} as const; -export type SyncAcquireResponseDeploymentTypeArtifactRegistry2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeArtifactRegistry2 ->; - -/** - * Azure Container Registry binding configuration + * + * Platform resolves concrete provider images from this catalog during rollout. */ -export type SyncAcquireResponseDeploymentExternalBindingsAcr = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - registryName?: - | SyncAcquireResponseDeploymentRegistryName +export type SyncAcquireResponseDeploymentHorizonMachineImage = { + aws?: + | SyncAcquireResponseDeploymentHorizonMachineImageAws + | any + | null + | undefined; + azure?: + | SyncAcquireResponseDeploymentHorizonMachineImageAzure | any - | string | null | undefined; - repositoryPrefix?: any | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Base image metadata for the Horizon machine image. */ - resourceGroupName?: - | SyncAcquireResponseDeploymentResourceGroupName2 + baseImage: SyncAcquireResponseDeploymentBaseImage; + /** + * Logical image channel, such as prod, staging, or canary. + */ + channel: string; + /** + * Image manifest creation timestamp. + */ + createdAt: string; + gcp?: + | SyncAcquireResponseDeploymentHorizonMachineImageGcp | any - | string | null | undefined; - service: "acr"; - type: SyncAcquireResponseDeploymentTypeArtifactRegistry2; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPullRoleArnSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPullRoleArn = { /** - * Reference to a Kubernetes Secret + * Git commit SHA used to build the image. */ - secretRef: SyncAcquireResponseDeploymentPullRoleArnSecretRef; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentPushRoleArnSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentPushRoleArn = { + gitSha: string; /** - * Reference to a Kubernetes Secret + * Per-architecture horizond artifacts by release-platform key. */ - secretRef: SyncAcquireResponseDeploymentPushRoleArnSecretRef; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentRepositoryPrefixSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentRepositoryPrefix1 = { + horizondArtifacts: { + [k: string]: SyncAcquireResponseDeploymentHorizondArtifacts; + }; /** - * Reference to a Kubernetes Secret + * horizond daemon version baked into the image. */ - secretRef: SyncAcquireResponseDeploymentRepositoryPrefixSecretRef1; + horizondVersion: string; + /** + * Published immutable machine image version. + */ + machineImageVersion: string; }; -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentRepositoryPrefixUnion = - | SyncAcquireResponseDeploymentRepositoryPrefix1 - | any - | string; +export type SyncAcquireResponseDeploymentHorizonMachineImageUnion = + | SyncAcquireResponseDeploymentHorizonMachineImage + | any; -export const SyncAcquireResponseDeploymentTypeArtifactRegistry1 = { - ArtifactRegistry: "artifact_registry", +export const SyncAcquireResponseDeploymentComputeBackendType = { + Horizon: "horizon", } as const; -export type SyncAcquireResponseDeploymentTypeArtifactRegistry1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeArtifactRegistry1 +export type SyncAcquireResponseDeploymentComputeBackendType = ClosedEnum< + typeof SyncAcquireResponseDeploymentComputeBackendType >; /** - * AWS ECR (Elastic Container Registry) binding configuration + * Compute backend for Container and Worker resources. + * + * @remarks + * + * Determines how compute workloads are orchestrated on cloud platforms. + * When None, the platform default is used for cloud platforms. */ -export type SyncAcquireResponseDeploymentExternalBindingsEcr = { - pullRoleArn?: any | null | undefined; - pushRoleArn?: any | null | undefined; +export type SyncAcquireResponseDeploymentComputeBackendHorizon = { /** - * Represents a value that can be either a concrete value, a template expression, + * Cluster configurations (one per ComputeCluster resource) * * @remarks - * or a reference to a Kubernetes Secret + * Key: ComputeCluster resource ID from stack + * Value: Cluster ID and management token for that cluster */ - repositoryPrefix?: - | SyncAcquireResponseDeploymentRepositoryPrefix1 + clusters: { [k: string]: SyncAcquireResponseDeploymentClusters }; + horizonMachineImage?: + | SyncAcquireResponseDeploymentHorizonMachineImage | any - | string | null | undefined; - service: "ecr"; - type: SyncAcquireResponseDeploymentTypeArtifactRegistry1; + /** + * Horizon control-plane API base URL. + */ + url: string; + type: SyncAcquireResponseDeploymentComputeBackendType; }; -/** - * Service-type based artifact registry binding that supports multiple registry providers - */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion4 = - | SyncAcquireResponseDeploymentExternalBindingsEcr - | SyncAcquireResponseDeploymentExternalBindingsAcr - | SyncAcquireResponseDeploymentExternalBindingsGar - | SyncAcquireResponseDeploymentExternalBindingsLocal; +export type SyncAcquireResponseDeploymentComputeBackendUnion = + | SyncAcquireResponseDeploymentComputeBackendHorizon + | any; /** - * Reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncAcquireResponseDeploymentDataDirSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDataDir1 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncAcquireResponseDeploymentDataDirSecretRef1; -}; - +export const SyncAcquireResponseDeploymentAliasCertificateStatus = { + Pending: "pending", + Issued: "issued", + Renewing: "renewing", + RenewalFailed: "renewal-failed", + Failed: "failed", + Deleting: "deleting", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncAcquireResponseDeploymentDataDirUnion1 = - | SyncAcquireResponseDeploymentDataDir1 - | any - | string; +export type SyncAcquireResponseDeploymentAliasCertificateStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentAliasCertificateStatus +>; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ -export type SyncAcquireResponseDeploymentKeyPrefixSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentKeyPrefix2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncAcquireResponseDeploymentKeyPrefixSecretRef2; -}; - -export const SyncAcquireResponseDeploymentTypeKv5 = { - Kv: "kv", +export const SyncAcquireResponseDeploymentAliasDnsStatus = { + Pending: "pending", + Active: "active", + Updating: "updating", + Deleting: "deleting", + Failed: "failed", } as const; -export type SyncAcquireResponseDeploymentTypeKv5 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeKv5 +/** + * DNS record status in the DNS lifecycle + */ +export type SyncAcquireResponseDeploymentAliasDnsStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentAliasDnsStatus >; /** - * Local development KV binding configuration + * Certificate and DNS metadata for a managed hostname. + * + * @remarks + * + * Includes decrypted certificate data for issued certificates. + * Private keys are deployment-scoped secrets (like environment variables). */ -export type SyncAcquireResponseDeploymentExternalBindingsLocalKv = { +export type SyncAcquireResponseDeploymentAlias = { /** - * Represents a value that can be either a concrete value, a template expression, + * Full PEM certificate chain (only present if status is "issued"). + */ + certificateChain?: string | null | undefined; + /** + * Certificate ID (for tracking/logging). + */ + certificateId: string; + /** + * Certificate status in the certificate lifecycle + */ + certificateStatus: SyncAcquireResponseDeploymentAliasCertificateStatus; + /** + * Last DNS error message. Present when DNS previously failed, even if status * * @remarks - * or a reference to a Kubernetes Secret + * was reset to pending for retry. Used to surface actionable error context + * in WaitingForDns failure messages. */ - dataDir?: - | SyncAcquireResponseDeploymentDataDir1 - | any - | string - | null - | undefined; - keyPrefix?: any | null | undefined; - service: "local-kv"; - type: SyncAcquireResponseDeploymentTypeKv5; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentConnectionUrlSecretRef = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentConnectionUrl = { + dnsError?: string | null | undefined; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ - secretRef: SyncAcquireResponseDeploymentConnectionUrlSecretRef; -}; - -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentConnectionUrlUnion = - | SyncAcquireResponseDeploymentConnectionUrl - | any - | string; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentDatabaseSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentDatabase1 = { + dnsStatus: SyncAcquireResponseDeploymentAliasDnsStatus; /** - * Reference to a Kubernetes Secret + * Fully qualified domain name. */ - secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef1; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncAcquireResponseDeploymentKeyPrefixSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentKeyPrefix1 = { + fqdn: string; /** - * Reference to a Kubernetes Secret + * ISO 8601 timestamp when certificate was issued (for renewal detection). */ - secretRef: SyncAcquireResponseDeploymentKeyPrefixSecretRef1; -}; - -export const SyncAcquireResponseDeploymentTypeKv4 = { - Kv: "kv", -} as const; -export type SyncAcquireResponseDeploymentTypeKv4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeKv4 ->; - -/** - * Redis KV binding configuration - */ -export type SyncAcquireResponseDeploymentExternalBindingsRedis = { + issuedAt?: string | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Decrypted private key (only present if status is "issued"). */ - connectionUrl?: - | SyncAcquireResponseDeploymentConnectionUrl - | any - | string - | null - | undefined; - database?: any | null | undefined; - keyPrefix?: any | null | undefined; - service: "redis"; - type: SyncAcquireResponseDeploymentTypeKv4; + privateKey?: string | null | undefined; }; /** - * Reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncAcquireResponseDeploymentAccountNameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentAccountName2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncAcquireResponseDeploymentAccountNameSecretRef2; -}; - +export const SyncAcquireResponseDeploymentCertificateStatus = { + Pending: "pending", + Issued: "issued", + Renewing: "renewing", + RenewalFailed: "renewal-failed", + Failed: "failed", + Deleting: "deleting", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncAcquireResponseDeploymentAccountNameUnion2 = - | SyncAcquireResponseDeploymentAccountName2 - | any - | string; +export type SyncAcquireResponseDeploymentCertificateStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentCertificateStatus +>; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ -export type SyncAcquireResponseDeploymentResourceGroupNameSecretRef1 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentResourceGroupName1 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncAcquireResponseDeploymentResourceGroupNameSecretRef1; -}; - +export const SyncAcquireResponseDeploymentDnsStatus = { + Pending: "pending", + Active: "active", + Updating: "updating", + Deleting: "deleting", + Failed: "failed", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ -export type SyncAcquireResponseDeploymentResourceGroupNameUnion1 = - | SyncAcquireResponseDeploymentResourceGroupName1 - | any - | string; +export type SyncAcquireResponseDeploymentDnsStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentDnsStatus +>; /** - * Reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncAcquireResponseDeploymentTableNameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncAcquireResponseDeploymentTableName2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncAcquireResponseDeploymentTableNameSecretRef2; -}; - +export const SyncAcquireResponseDeploymentEndpointsCertificateStatus = { + Pending: "pending", + Issued: "issued", + Renewing: "renewing", + RenewalFailed: "renewal-failed", + Failed: "failed", + Deleting: "deleting", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncAcquireResponseDeploymentTableNameUnion2 = - | SyncAcquireResponseDeploymentTableName2 - | any - | string; +export type SyncAcquireResponseDeploymentEndpointsCertificateStatus = + ClosedEnum; -export const SyncAcquireResponseDeploymentTypeKv3 = { - Kv: "kv", +/** + * DNS record status in the DNS lifecycle + */ +export const SyncAcquireResponseDeploymentEndpointsDnsStatus = { + Pending: "pending", + Active: "active", + Updating: "updating", + Deleting: "deleting", + Failed: "failed", } as const; -export type SyncAcquireResponseDeploymentTypeKv3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeKv3 +/** + * DNS record status in the DNS lifecycle + */ +export type SyncAcquireResponseDeploymentEndpointsDnsStatus = ClosedEnum< + typeof SyncAcquireResponseDeploymentEndpointsDnsStatus >; /** - * Azure Table Storage KV binding configuration + * Certificate and DNS metadata for a managed hostname. + * + * @remarks + * + * Includes decrypted certificate data for issued certificates. + * Private keys are deployment-scoped secrets (like environment variables). */ -export type SyncAcquireResponseDeploymentExternalBindingsTablestorage = { +export type SyncAcquireResponseDeploymentEndpoints = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Full PEM certificate chain (only present if status is "issued"). */ - accountName?: - | SyncAcquireResponseDeploymentAccountName2 - | any - | string - | null - | undefined; + certificateChain?: string | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate ID (for tracking/logging). */ - resourceGroupName?: - | SyncAcquireResponseDeploymentResourceGroupName1 - | any - | string - | null - | undefined; + certificateId: string; /** - * Represents a value that can be either a concrete value, a template expression, + * Certificate status in the certificate lifecycle + */ + certificateStatus: SyncAcquireResponseDeploymentEndpointsCertificateStatus; + /** + * Last DNS error message. Present when DNS previously failed, even if status * * @remarks - * or a reference to a Kubernetes Secret - */ - tableName?: - | SyncAcquireResponseDeploymentTableName2 - | any - | string - | null + * was reset to pending for retry. Used to surface actionable error context + * in WaitingForDns failure messages. + */ + dnsError?: string | null | undefined; + /** + * DNS record status in the DNS lifecycle + */ + dnsStatus: SyncAcquireResponseDeploymentEndpointsDnsStatus; + /** + * Fully qualified domain name. + */ + fqdn: string; + /** + * ISO 8601 timestamp when certificate was issued (for renewal detection). + */ + issuedAt?: string | null | undefined; + /** + * Decrypted private key (only present if status is "issued"). + */ + privateKey?: string | null | undefined; +}; + +/** + * Certificate and DNS metadata for a public resource. + * + * @remarks + * + * The direct fields describe the primary endpoint hostname. `endpoints` + * contains endpoint-scoped metadata keyed by endpoint name. `aliases` contains + * additional managed hostnames that route directly to the primary endpoint. + */ +export type SyncAcquireResponseDeploymentDomainMetadataResources = { + /** + * Additional managed hostnames for the resource. + */ + aliases?: Array | undefined; + /** + * Full PEM certificate chain (only present if status is "issued"). + */ + certificateChain?: string | null | undefined; + /** + * Certificate ID (for tracking/logging). + */ + certificateId: string; + /** + * Certificate status in the certificate lifecycle + */ + certificateStatus: SyncAcquireResponseDeploymentCertificateStatus; + /** + * Last DNS error message. + */ + dnsError?: string | null | undefined; + /** + * DNS record status in the DNS lifecycle + */ + dnsStatus: SyncAcquireResponseDeploymentDnsStatus; + /** + * Endpoint-scoped metadata keyed by endpoint name. + */ + endpoints?: + | { [k: string]: SyncAcquireResponseDeploymentEndpoints } | undefined; - service: "tablestorage"; - type: SyncAcquireResponseDeploymentTypeKv3; + /** + * Fully qualified domain name. + */ + fqdn: string; + /** + * ISO 8601 timestamp when certificate was issued (for renewal detection). + */ + issuedAt?: string | null | undefined; + /** + * Decrypted private key (only present if status is "issued"). + */ + privateKey?: string | null | undefined; +}; + +/** + * Domain metadata for auto-managed public resources (no private keys). + */ +export type SyncAcquireResponseDeploymentDomainMetadata = { + /** + * Base domain for auto-generated domains (e.g., "vpc.direct"). + */ + baseDomain: string; + /** + * Hosted zone ID for DNS records. + */ + hostedZoneId: string; + /** + * Deployment public subdomain (e.g., "k8f2j3"). + */ + publicSubdomain: string; + /** + * Metadata per resource ID. + */ + resources: { + [k: string]: SyncAcquireResponseDeploymentDomainMetadataResources; + }; +}; + +export type SyncAcquireResponseDeploymentDomainMetadataUnion = + | SyncAcquireResponseDeploymentDomainMetadata + | any; + +/** + * Type of environment variable + */ +export const SyncAcquireResponseDeploymentEnvironmentVariablesType = { + Plain: "plain", + Secret: "secret", +} as const; +/** + * Type of environment variable + */ +export type SyncAcquireResponseDeploymentEnvironmentVariablesType = ClosedEnum< + typeof SyncAcquireResponseDeploymentEnvironmentVariablesType +>; + +/** + * Environment variable for deployment + */ +export type SyncAcquireResponseDeploymentVariable = { + /** + * Variable name + */ + name: string; + /** + * Target resource patterns (null = all resources, Some = wildcard patterns) + */ + targetResources?: Array | null | undefined; + /** + * Type of environment variable + */ + type: SyncAcquireResponseDeploymentEnvironmentVariablesType; + /** + * Variable value (decrypted - deployment has access to decryption keys) + */ + value: string; +}; + +/** + * Snapshot of environment variables at a point in time + */ +export type SyncAcquireResponseDeploymentEnvironmentVariables = { + /** + * ISO 8601 timestamp when snapshot was created + */ + createdAt: string; + /** + * Deterministic hash of all variables (for change detection) + */ + hash: string; + /** + * Environment variables in the snapshot + */ + variables: Array; }; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCollectionNameSecretRef = { +export type SyncAcquireResponseDeploymentDatabaseSecretRef6 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentCollectionName = { +export type SyncAcquireResponseDeploymentDatabase6 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentCollectionNameSecretRef; + secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef6; }; /** @@ -8117,24 +7750,24 @@ export type SyncAcquireResponseDeploymentCollectionName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCollectionNameUnion = - | SyncAcquireResponseDeploymentCollectionName +export type SyncAcquireResponseDeploymentDatabaseUnion5 = + | SyncAcquireResponseDeploymentDatabase6 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentDatabaseIdSecretRef = { +export type SyncAcquireResponseDeploymentHostSecretRef4 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentDatabaseId = { +export type SyncAcquireResponseDeploymentHost4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentDatabaseIdSecretRef; + secretRef: SyncAcquireResponseDeploymentHostSecretRef4; }; /** @@ -8143,24 +7776,24 @@ export type SyncAcquireResponseDeploymentDatabaseId = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentDatabaseIdUnion = - | SyncAcquireResponseDeploymentDatabaseId +export type SyncAcquireResponseDeploymentHostUnion4 = + | SyncAcquireResponseDeploymentHost4 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentProjectIdSecretRef = { +export type SyncAcquireResponseDeploymentPortSecretRef5 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentProjectId = { +export type SyncAcquireResponseDeploymentPort5 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentProjectIdSecretRef; + secretRef: SyncAcquireResponseDeploymentPortSecretRef5; }; /** @@ -8169,30 +7802,56 @@ export type SyncAcquireResponseDeploymentProjectId = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentProjectIdUnion = - | SyncAcquireResponseDeploymentProjectId +export type SyncAcquireResponseDeploymentPortUnion5 = + | SyncAcquireResponseDeploymentPort5 + | number + | any; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentUsernameSecretRef5 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentUsername5 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentUsernameSecretRef5; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentUsernameUnion5 = + | SyncAcquireResponseDeploymentUsername5 | any | string; -export const SyncAcquireResponseDeploymentTypeKv2 = { - Kv: "kv", +export const SyncAcquireResponseDeploymentTypePostgres5 = { + Postgres: "postgres", } as const; -export type SyncAcquireResponseDeploymentTypeKv2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeKv2 +export type SyncAcquireResponseDeploymentTypePostgres5 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypePostgres5 >; /** - * GCP Firestore KV binding configuration + * Local embedded Postgres binding. */ -export type SyncAcquireResponseDeploymentExternalBindingsFirestore = { +export type SyncAcquireResponseDeploymentExternalBindingsLocalPostgres = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - collectionName?: - | SyncAcquireResponseDeploymentCollectionName + database?: + | SyncAcquireResponseDeploymentDatabase6 | any | string | null @@ -8203,56 +7862,70 @@ export type SyncAcquireResponseDeploymentExternalBindingsFirestore = { * @remarks * or a reference to a Kubernetes Secret */ - databaseId?: - | SyncAcquireResponseDeploymentDatabaseId - | any - | string - | null - | undefined; + host?: SyncAcquireResponseDeploymentHost4 | any | string | null | undefined; + password: string; /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - projectId?: - | SyncAcquireResponseDeploymentProjectId + port?: SyncAcquireResponseDeploymentPort5 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: + | SyncAcquireResponseDeploymentUsername5 | any | string | null | undefined; - service: "firestore"; - type: SyncAcquireResponseDeploymentTypeKv2; -}; + service: "local-postgres"; + type: SyncAcquireResponseDeploymentTypePostgres5; +}; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentEndpointUrlSecretRef = { +export type SyncAcquireResponseDeploymentDatabaseSecretRef5 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentEndpointUrl = { +export type SyncAcquireResponseDeploymentDatabase5 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentEndpointUrlSecretRef; + secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef5; }; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentDatabaseUnion4 = + | SyncAcquireResponseDeploymentDatabase5 + | any + | string; + /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentRegionSecretRef = { +export type SyncAcquireResponseDeploymentHostSecretRef3 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentRegion = { +export type SyncAcquireResponseDeploymentHost3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentRegionSecretRef; + secretRef: SyncAcquireResponseDeploymentHostSecretRef3; }; /** @@ -8261,24 +7934,24 @@ export type SyncAcquireResponseDeploymentRegion = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentRegionUnion = - | SyncAcquireResponseDeploymentRegion +export type SyncAcquireResponseDeploymentHostUnion3 = + | SyncAcquireResponseDeploymentHost3 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentTableNameSecretRef1 = { +export type SyncAcquireResponseDeploymentPortSecretRef4 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentTableName1 = { +export type SyncAcquireResponseDeploymentPort4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentTableNameSecretRef1; + secretRef: SyncAcquireResponseDeploymentPortSecretRef4; }; /** @@ -8287,31 +7960,56 @@ export type SyncAcquireResponseDeploymentTableName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentTableNameUnion1 = - | SyncAcquireResponseDeploymentTableName1 +export type SyncAcquireResponseDeploymentPortUnion4 = + | SyncAcquireResponseDeploymentPort4 + | number + | any; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentUsernameSecretRef4 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentUsername4 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentUsernameSecretRef4; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentUsernameUnion4 = + | SyncAcquireResponseDeploymentUsername4 | any | string; -export const SyncAcquireResponseDeploymentTypeKv1 = { - Kv: "kv", +export const SyncAcquireResponseDeploymentTypePostgres4 = { + Postgres: "postgres", } as const; -export type SyncAcquireResponseDeploymentTypeKv1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeKv1 +export type SyncAcquireResponseDeploymentTypePostgres4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypePostgres4 >; /** - * AWS DynamoDB KV binding configuration + * Operator-provided / BYO database binding. */ -export type SyncAcquireResponseDeploymentExternalBindingsDynamodb = { - endpointUrl?: any | null | undefined; +export type SyncAcquireResponseDeploymentExternalBindingsExternal = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - region?: - | SyncAcquireResponseDeploymentRegion + database?: + | SyncAcquireResponseDeploymentDatabase5 | any | string | null @@ -8322,39 +8020,51 @@ export type SyncAcquireResponseDeploymentExternalBindingsDynamodb = { * @remarks * or a reference to a Kubernetes Secret */ - tableName?: - | SyncAcquireResponseDeploymentTableName1 + host?: SyncAcquireResponseDeploymentHost3 | any | string | null | undefined; + /** + * Connection password as a concrete value, never an unresolved `SecretRef`: the platform + * + * @remarks + * materializes the Kubernetes secret into the pod env. The cloud variants carry a secret + * locator instead. + */ + password: string; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + port?: SyncAcquireResponseDeploymentPort4 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: + | SyncAcquireResponseDeploymentUsername4 | any | string | null | undefined; - service: "dynamodb"; - type: SyncAcquireResponseDeploymentTypeKv1; + service: "external"; + type: SyncAcquireResponseDeploymentTypePostgres4; }; -/** - * Represents a KV binding for key-value storage across platforms - */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion3 = - | SyncAcquireResponseDeploymentExternalBindingsDynamodb - | SyncAcquireResponseDeploymentExternalBindingsFirestore - | SyncAcquireResponseDeploymentExternalBindingsTablestorage - | SyncAcquireResponseDeploymentExternalBindingsRedis - | SyncAcquireResponseDeploymentExternalBindingsLocalKv; - /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentQueuePathSecretRef = { +export type SyncAcquireResponseDeploymentDatabaseSecretRef4 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentQueuePath = { +export type SyncAcquireResponseDeploymentDatabase4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentQueuePathSecretRef; + secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef4; }; /** @@ -8363,51 +8073,24 @@ export type SyncAcquireResponseDeploymentQueuePath = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentQueuePathUnion = - | SyncAcquireResponseDeploymentQueuePath +export type SyncAcquireResponseDeploymentDatabaseUnion3 = + | SyncAcquireResponseDeploymentDatabase4 | any | string; -export const SyncAcquireResponseDeploymentTypeQueue4 = { - Queue: "queue", -} as const; -export type SyncAcquireResponseDeploymentTypeQueue4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeQueue4 ->; - -/** - * Local queue parameters - */ -export type SyncAcquireResponseDeploymentExternalBindingsLocalQueue = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - queuePath?: - | SyncAcquireResponseDeploymentQueuePath - | any - | string - | null - | undefined; - service: "local-queue"; - type: SyncAcquireResponseDeploymentTypeQueue4; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentNamespaceSecretRef1 = { +export type SyncAcquireResponseDeploymentHostSecretRef2 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentNamespace1 = { +export type SyncAcquireResponseDeploymentHost2 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentNamespaceSecretRef1; + secretRef: SyncAcquireResponseDeploymentHostSecretRef2; }; /** @@ -8416,24 +8099,24 @@ export type SyncAcquireResponseDeploymentNamespace1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentNamespaceUnion1 = - | SyncAcquireResponseDeploymentNamespace1 +export type SyncAcquireResponseDeploymentHostUnion2 = + | SyncAcquireResponseDeploymentHost2 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentQueueNameSecretRef = { +export type SyncAcquireResponseDeploymentPasswordSecretUriSecretRef = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentQueueName = { +export type SyncAcquireResponseDeploymentPasswordSecretUri = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentQueueNameSecretRef; + secretRef: SyncAcquireResponseDeploymentPasswordSecretUriSecretRef; }; /** @@ -8442,63 +8125,24 @@ export type SyncAcquireResponseDeploymentQueueName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentQueueNameUnion = - | SyncAcquireResponseDeploymentQueueName +export type SyncAcquireResponseDeploymentPasswordSecretUriUnion = + | SyncAcquireResponseDeploymentPasswordSecretUri | any | string; -export const SyncAcquireResponseDeploymentTypeQueue3 = { - Queue: "queue", -} as const; -export type SyncAcquireResponseDeploymentTypeQueue3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeQueue3 ->; - -/** - * Azure Service Bus parameters - */ -export type SyncAcquireResponseDeploymentExternalBindingsServicebus = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - namespace?: - | SyncAcquireResponseDeploymentNamespace1 - | any - | string - | null - | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - queueName?: - | SyncAcquireResponseDeploymentQueueName - | any - | string - | null - | undefined; - service: "servicebus"; - type: SyncAcquireResponseDeploymentTypeQueue3; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentSubscriptionSecretRef = { +export type SyncAcquireResponseDeploymentPortSecretRef3 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentSubscription = { +export type SyncAcquireResponseDeploymentPort3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentSubscriptionSecretRef; + secretRef: SyncAcquireResponseDeploymentPortSecretRef3; }; /** @@ -8507,24 +8151,24 @@ export type SyncAcquireResponseDeploymentSubscription = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentSubscriptionUnion = - | SyncAcquireResponseDeploymentSubscription - | any - | string; +export type SyncAcquireResponseDeploymentPortUnion3 = + | SyncAcquireResponseDeploymentPort3 + | number + | any; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentTopicSecretRef = { +export type SyncAcquireResponseDeploymentUsernameSecretRef3 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentTopic = { +export type SyncAcquireResponseDeploymentUsername3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentTopicSecretRef; + secretRef: SyncAcquireResponseDeploymentUsernameSecretRef3; }; /** @@ -8533,30 +8177,30 @@ export type SyncAcquireResponseDeploymentTopic = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentTopicUnion = - | SyncAcquireResponseDeploymentTopic +export type SyncAcquireResponseDeploymentUsernameUnion3 = + | SyncAcquireResponseDeploymentUsername3 | any | string; -export const SyncAcquireResponseDeploymentTypeQueue2 = { - Queue: "queue", +export const SyncAcquireResponseDeploymentTypePostgres3 = { + Postgres: "postgres", } as const; -export type SyncAcquireResponseDeploymentTypeQueue2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeQueue2 +export type SyncAcquireResponseDeploymentTypePostgres3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypePostgres3 >; /** - * GCP Pub/Sub parameters + * Azure Flexible Server binding. */ -export type SyncAcquireResponseDeploymentExternalBindingsPubsub = { +export type SyncAcquireResponseDeploymentExternalBindingsFlexibleServer = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - subscription?: - | SyncAcquireResponseDeploymentSubscription + database?: + | SyncAcquireResponseDeploymentDatabase4 | any | string | null @@ -8567,24 +8211,55 @@ export type SyncAcquireResponseDeploymentExternalBindingsPubsub = { * @remarks * or a reference to a Kubernetes Secret */ - topic?: SyncAcquireResponseDeploymentTopic | any | string | null | undefined; - service: "pubsub"; - type: SyncAcquireResponseDeploymentTypeQueue2; + host?: SyncAcquireResponseDeploymentHost2 | any | string | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + passwordSecretUri?: + | SyncAcquireResponseDeploymentPasswordSecretUri + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + port?: SyncAcquireResponseDeploymentPort3 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: + | SyncAcquireResponseDeploymentUsername3 + | any + | string + | null + | undefined; + service: "flexible-server"; + type: SyncAcquireResponseDeploymentTypePostgres3; }; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentQueueUrlSecretRef = { +export type SyncAcquireResponseDeploymentDatabaseSecretRef3 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentQueueUrl = { +export type SyncAcquireResponseDeploymentDatabase3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentQueueUrlSecretRef; + secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef3; }; /** @@ -8593,60 +8268,24 @@ export type SyncAcquireResponseDeploymentQueueUrl = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentQueueUrlUnion = - | SyncAcquireResponseDeploymentQueueUrl +export type SyncAcquireResponseDeploymentDatabaseUnion2 = + | SyncAcquireResponseDeploymentDatabase3 | any | string; -export const SyncAcquireResponseDeploymentTypeQueue1 = { - Queue: "queue", -} as const; -export type SyncAcquireResponseDeploymentTypeQueue1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeQueue1 ->; - -/** - * AWS SQS queue parameters - */ -export type SyncAcquireResponseDeploymentExternalBindingsSqs = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - queueUrl?: - | SyncAcquireResponseDeploymentQueueUrl - | any - | string - | null - | undefined; - service: "sqs"; - type: SyncAcquireResponseDeploymentTypeQueue1; -}; - -/** - * Binding parameters for Queue at runtime or in templates. - */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion2 = - | SyncAcquireResponseDeploymentExternalBindingsSqs - | SyncAcquireResponseDeploymentExternalBindingsPubsub - | SyncAcquireResponseDeploymentExternalBindingsServicebus - | SyncAcquireResponseDeploymentExternalBindingsLocalQueue; - /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentStoragePathSecretRef = { +export type SyncAcquireResponseDeploymentHostSecretRef1 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentStoragePath = { +export type SyncAcquireResponseDeploymentHost1 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentStoragePathSecretRef; + secretRef: SyncAcquireResponseDeploymentHostSecretRef1; }; /** @@ -8655,51 +8294,24 @@ export type SyncAcquireResponseDeploymentStoragePath = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentStoragePathUnion = - | SyncAcquireResponseDeploymentStoragePath +export type SyncAcquireResponseDeploymentHostUnion1 = + | SyncAcquireResponseDeploymentHost1 | any | string; -export const SyncAcquireResponseDeploymentTypeStorage4 = { - Storage: "storage", -} as const; -export type SyncAcquireResponseDeploymentTypeStorage4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeStorage4 ->; - -/** - * Local filesystem storage binding configuration - */ -export type SyncAcquireResponseDeploymentExternalBindingsLocalStorage = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - storagePath?: - | SyncAcquireResponseDeploymentStoragePath - | any - | string - | null - | undefined; - service: "local-storage"; - type: SyncAcquireResponseDeploymentTypeStorage4; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentBucketNameSecretRef2 = { +export type SyncAcquireResponseDeploymentPasswordSecretNameSecretRef = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentBucketName2 = { +export type SyncAcquireResponseDeploymentPasswordSecretName = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentBucketNameSecretRef2; + secretRef: SyncAcquireResponseDeploymentPasswordSecretNameSecretRef; }; /** @@ -8708,51 +8320,24 @@ export type SyncAcquireResponseDeploymentBucketName2 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentBucketNameUnion2 = - | SyncAcquireResponseDeploymentBucketName2 +export type SyncAcquireResponseDeploymentPasswordSecretNameUnion = + | SyncAcquireResponseDeploymentPasswordSecretName | any | string; -export const SyncAcquireResponseDeploymentTypeStorage3 = { - Storage: "storage", -} as const; -export type SyncAcquireResponseDeploymentTypeStorage3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeStorage3 ->; - -/** - * Google Cloud Storage binding configuration - */ -export type SyncAcquireResponseDeploymentExternalBindingsGcs = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - bucketName?: - | SyncAcquireResponseDeploymentBucketName2 - | any - | string - | null - | undefined; - service: "gcs"; - type: SyncAcquireResponseDeploymentTypeStorage3; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentAccountNameSecretRef1 = { +export type SyncAcquireResponseDeploymentPortSecretRef2 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentAccountName1 = { +export type SyncAcquireResponseDeploymentPort2 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentAccountNameSecretRef1; + secretRef: SyncAcquireResponseDeploymentPortSecretRef2; }; /** @@ -8761,24 +8346,24 @@ export type SyncAcquireResponseDeploymentAccountName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentAccountNameUnion1 = - | SyncAcquireResponseDeploymentAccountName1 - | any - | string; +export type SyncAcquireResponseDeploymentPortUnion2 = + | SyncAcquireResponseDeploymentPort2 + | number + | any; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentContainerNameSecretRef = { +export type SyncAcquireResponseDeploymentUsernameSecretRef2 = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentContainerName = { +export type SyncAcquireResponseDeploymentUsername2 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentContainerNameSecretRef; + secretRef: SyncAcquireResponseDeploymentUsernameSecretRef2; }; /** @@ -8787,30 +8372,30 @@ export type SyncAcquireResponseDeploymentContainerName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentContainerNameUnion = - | SyncAcquireResponseDeploymentContainerName +export type SyncAcquireResponseDeploymentUsernameUnion2 = + | SyncAcquireResponseDeploymentUsername2 | any | string; -export const SyncAcquireResponseDeploymentTypeStorage2 = { - Storage: "storage", +export const SyncAcquireResponseDeploymentTypePostgres2 = { + Postgres: "postgres", } as const; -export type SyncAcquireResponseDeploymentTypeStorage2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeStorage2 +export type SyncAcquireResponseDeploymentTypePostgres2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypePostgres2 >; /** - * Azure Blob Storage binding configuration + * GCP Cloud SQL binding. */ -export type SyncAcquireResponseDeploymentExternalBindingsBlob = { +export type SyncAcquireResponseDeploymentExternalBindingsCloudSQL = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - accountName?: - | SyncAcquireResponseDeploymentAccountName1 + database?: + | SyncAcquireResponseDeploymentDatabase3 | any | string | null @@ -8821,29 +8406,55 @@ export type SyncAcquireResponseDeploymentExternalBindingsBlob = { * @remarks * or a reference to a Kubernetes Secret */ - containerName?: - | SyncAcquireResponseDeploymentContainerName + host?: SyncAcquireResponseDeploymentHost1 | any | string | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + passwordSecretName?: + | SyncAcquireResponseDeploymentPasswordSecretName | any | string | null | undefined; - service: "blob"; - type: SyncAcquireResponseDeploymentTypeStorage2; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + port?: SyncAcquireResponseDeploymentPort2 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: + | SyncAcquireResponseDeploymentUsername2 + | any + | string + | null + | undefined; + service: "cloud-sql"; + type: SyncAcquireResponseDeploymentTypePostgres2; }; /** * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentBucketNameSecretRef1 = { +export type SyncAcquireResponseDeploymentClusterEndpointSecretRef = { key: string; name: string; }; -export type SyncAcquireResponseDeploymentBucketName1 = { +export type SyncAcquireResponseDeploymentClusterEndpoint = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncAcquireResponseDeploymentBucketNameSecretRef1; + secretRef: SyncAcquireResponseDeploymentClusterEndpointSecretRef; }; /** @@ -8852,2436 +8463,7171 @@ export type SyncAcquireResponseDeploymentBucketName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentBucketNameUnion1 = - | SyncAcquireResponseDeploymentBucketName1 +export type SyncAcquireResponseDeploymentClusterEndpointUnion = + | SyncAcquireResponseDeploymentClusterEndpoint | any | string; -export const SyncAcquireResponseDeploymentTypeStorage1 = { - Storage: "storage", -} as const; -export type SyncAcquireResponseDeploymentTypeStorage1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeStorage1 ->; - /** - * AWS S3 storage binding configuration + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentExternalBindingsS3 = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - bucketName?: - | SyncAcquireResponseDeploymentBucketName1 - | any - | string - | null - | undefined; - service: "s3"; - type: SyncAcquireResponseDeploymentTypeStorage1; +export type SyncAcquireResponseDeploymentDatabaseSecretRef2 = { + key: string; + name: string; }; -/** - * Service-type based storage binding that supports multiple storage providers - */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion1 = - | SyncAcquireResponseDeploymentExternalBindingsS3 - | SyncAcquireResponseDeploymentExternalBindingsBlob - | SyncAcquireResponseDeploymentExternalBindingsGcs - | SyncAcquireResponseDeploymentExternalBindingsLocalStorage; +export type SyncAcquireResponseDeploymentDatabase2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef2; +}; /** - * Represents a binding to pre-existing infrastructure. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * The binding type must match the resource type it's applied to. - * Validated at runtime by the executor. + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentExternalBindingsUnion7 = - | SyncAcquireResponseDeploymentExternalBindingsContainerAppsEnvironment - | SyncAcquireResponseDeploymentExternalBindingsS3 - | SyncAcquireResponseDeploymentExternalBindingsBlob - | SyncAcquireResponseDeploymentExternalBindingsGcs - | SyncAcquireResponseDeploymentExternalBindingsLocalStorage - | SyncAcquireResponseDeploymentExternalBindingsSqs - | SyncAcquireResponseDeploymentExternalBindingsPubsub - | SyncAcquireResponseDeploymentExternalBindingsServicebus - | SyncAcquireResponseDeploymentExternalBindingsLocalQueue - | SyncAcquireResponseDeploymentExternalBindingsDynamodb - | SyncAcquireResponseDeploymentExternalBindingsFirestore - | SyncAcquireResponseDeploymentExternalBindingsTablestorage - | SyncAcquireResponseDeploymentExternalBindingsRedis - | SyncAcquireResponseDeploymentExternalBindingsLocalKv - | SyncAcquireResponseDeploymentExternalBindingsEcr - | SyncAcquireResponseDeploymentExternalBindingsAcr - | SyncAcquireResponseDeploymentExternalBindingsGar - | SyncAcquireResponseDeploymentExternalBindingsLocal - | SyncAcquireResponseDeploymentExternalBindingsParameterStore - | SyncAcquireResponseDeploymentExternalBindingsSecretManager - | SyncAcquireResponseDeploymentExternalBindingsKeyVault - | SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret - | SyncAcquireResponseDeploymentExternalBindingsLocalVault - | SyncAcquireResponseDeploymentExternalBindingsAurora - | SyncAcquireResponseDeploymentExternalBindingsCloudSQL - | SyncAcquireResponseDeploymentExternalBindingsFlexibleServer - | SyncAcquireResponseDeploymentExternalBindingsExternal - | SyncAcquireResponseDeploymentExternalBindingsLocalPostgres; - -export const SyncAcquireResponseDeploymentPlatformKubernetes = { - Kubernetes: "kubernetes", -} as const; -export type SyncAcquireResponseDeploymentPlatformKubernetes = ClosedEnum< - typeof SyncAcquireResponseDeploymentPlatformKubernetes ->; - -export type SyncAcquireResponseDeploymentManagementConfigKubernetes = { - platform: SyncAcquireResponseDeploymentPlatformKubernetes; -}; - -export const SyncAcquireResponseDeploymentConfigPlatformAzure = { - Azure: "azure", -} as const; -export type SyncAcquireResponseDeploymentConfigPlatformAzure = ClosedEnum< - typeof SyncAcquireResponseDeploymentConfigPlatformAzure ->; +export type SyncAcquireResponseDeploymentDatabaseUnion1 = + | SyncAcquireResponseDeploymentDatabase2 + | any + | string; /** - * Azure management configuration extracted from stack settings + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentManagementConfigAzure = { - /** - * The managing Azure Tenant ID for cross-tenant access - */ - managingTenantId: string; - /** - * OIDC issuer URL trusted by the target-side managed identity. - */ - oidcIssuer: string; +export type SyncAcquireResponseDeploymentPasswordSecretArnSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentPasswordSecretArn = { /** - * OIDC subject claim trusted by the target-side managed identity. + * Reference to a Kubernetes Secret */ - oidcSubject: string; - platform: SyncAcquireResponseDeploymentConfigPlatformAzure; + secretRef: SyncAcquireResponseDeploymentPasswordSecretArnSecretRef; }; -export const SyncAcquireResponseDeploymentConfigPlatformGcp = { - Gcp: "gcp", -} as const; -export type SyncAcquireResponseDeploymentConfigPlatformGcp = ClosedEnum< - typeof SyncAcquireResponseDeploymentConfigPlatformGcp ->; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentPasswordSecretArnUnion = + | SyncAcquireResponseDeploymentPasswordSecretArn + | any + | string; /** - * GCP management configuration extracted from stack settings + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentManagementConfigGcp = { +export type SyncAcquireResponseDeploymentPortSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentPort1 = { /** - * Service account email for management roles + * Reference to a Kubernetes Secret */ - serviceAccountEmail: string; - platform: SyncAcquireResponseDeploymentConfigPlatformGcp; + secretRef: SyncAcquireResponseDeploymentPortSecretRef1; }; -export const SyncAcquireResponseDeploymentConfigPlatformAws = { - Aws: "aws", -} as const; -export type SyncAcquireResponseDeploymentConfigPlatformAws = ClosedEnum< - typeof SyncAcquireResponseDeploymentConfigPlatformAws ->; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentPortUnion1 = + | SyncAcquireResponseDeploymentPort1 + | number + | any; /** - * AWS management configuration extracted from stack settings + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentManagementConfigAws = { +export type SyncAcquireResponseDeploymentUsernameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentUsername1 = { /** - * The managing AWS IAM role ARN that can assume cross-account roles + * Reference to a Kubernetes Secret */ - managingRoleArn: string; - platform: SyncAcquireResponseDeploymentConfigPlatformAws; + secretRef: SyncAcquireResponseDeploymentUsernameSecretRef1; }; -export type SyncAcquireResponseDeploymentManagementConfigUnion = - | SyncAcquireResponseDeploymentManagementConfigAzure - | SyncAcquireResponseDeploymentManagementConfigAws - | SyncAcquireResponseDeploymentManagementConfigGcp - | SyncAcquireResponseDeploymentManagementConfigKubernetes - | any; - /** - * OTLP log export configuration for a deployment. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * When set, injected compute runtimes export captured application logs - * through the given endpoint via OTLP/HTTP; which resources are injected - * is platform-dependent. Workers read auth headers from a runtime-only - * secret. Runtime-less Containers and Daemons receive standard OTEL auth - * variables only at the final hosting boundary: Local passes them directly - * to the process and Kubernetes projects them from a per-workload Secret. + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentMonitoring = { +export type SyncAcquireResponseDeploymentUsernameUnion1 = + | SyncAcquireResponseDeploymentUsername1 + | any + | string; + +export const SyncAcquireResponseDeploymentTypePostgres1 = { + Postgres: "postgres", +} as const; +export type SyncAcquireResponseDeploymentTypePostgres1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypePostgres1 +>; + +/** + * AWS Aurora Serverless v2 binding. + */ +export type SyncAcquireResponseDeploymentExternalBindingsAurora = { /** - * Auth header value in "key=value,..." format. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * Example: "authorization=Bearer " + * or a reference to a Kubernetes Secret */ - logsAuthHeader: string; + clusterEndpoint?: + | SyncAcquireResponseDeploymentClusterEndpoint + | any + | string + | null + | undefined; /** - * Full OTLP logs endpoint URL. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * Example: "https:///v1/logs" + * or a reference to a Kubernetes Secret */ - logsEndpoint: string; + database?: + | SyncAcquireResponseDeploymentDatabase2 + | any + | string + | null + | undefined; /** - * Auth header value for the metrics endpoint in "key=value,..." format (optional). + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * When absent, `logs_auth_header` is reused for metrics -- suitable when the same - * credential covers both signals. When present (e.g. Axiom with separate datasets), - * this value is used exclusively for metrics. - * - * Example: "authorization=Bearer ,x-axiom-dataset=" + * or a reference to a Kubernetes Secret */ - metricsAuthHeader?: string | null | undefined; + passwordSecretArn?: + | SyncAcquireResponseDeploymentPasswordSecretArn + | any + | string + | null + | undefined; /** - * Full OTLP metrics endpoint URL (optional). + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * When set, the worker runtime exports its own VM/container orchestration metrics here. - * Example: "https://api.axiom.co/v1/metrics" + * or a reference to a Kubernetes Secret */ - metricsEndpoint?: string | null | undefined; + port?: SyncAcquireResponseDeploymentPort1 | number | any | null | undefined; /** - * Resource attributes attached to every OTLP signal emitted for this deployment. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Platform managers use this for stable identity such as `alien.workspace_id`, - * `alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`. - * Runtime-specific resource attributes such as `service.name` remain owned by - * the runtime/exporter. + * or a reference to a Kubernetes Secret */ - resourceAttributes?: { [k: string]: string } | undefined; + username?: + | SyncAcquireResponseDeploymentUsername1 + | any + | string + | null + | undefined; + service: "aurora"; + type: SyncAcquireResponseDeploymentTypePostgres1; }; -export type SyncAcquireResponseDeploymentMonitoringUnion = - | SyncAcquireResponseDeploymentMonitoring - | any; +/** + * Connection details for a Postgres database, one variant per backend. + */ +export type SyncAcquireResponseDeploymentExternalBindingsUnion6 = + | SyncAcquireResponseDeploymentExternalBindingsAurora + | SyncAcquireResponseDeploymentExternalBindingsCloudSQL + | SyncAcquireResponseDeploymentExternalBindingsFlexibleServer + | SyncAcquireResponseDeploymentExternalBindingsExternal + | SyncAcquireResponseDeploymentExternalBindingsLocalPostgres; -export type SyncAcquireResponseDeploymentPoolsAutoscale = { - /** - * Provider machine type selected for this deployment. - */ - machine?: string | null | undefined; - /** - * Maximum machine count. - */ - max: number; - /** - * Minimum machine count. - */ - min: number; - mode: "autoscale"; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentDefaultDomainSecretRef = { + key: string; + name: string; }; -export type SyncAcquireResponseDeploymentPoolsFixed = { - /** - * Provider machine type selected for this deployment. - */ - machine?: string | null | undefined; +export type SyncAcquireResponseDeploymentDefaultDomain = { /** - * Number of machines to run. + * Reference to a Kubernetes Secret */ - machines: number; - mode: "fixed"; + secretRef: SyncAcquireResponseDeploymentDefaultDomainSecretRef; }; /** - * User-selected deployment settings for one compute pool. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentPoolsUnion = - | SyncAcquireResponseDeploymentPoolsFixed - | SyncAcquireResponseDeploymentPoolsAutoscale; +export type SyncAcquireResponseDeploymentDefaultDomainUnion = + | SyncAcquireResponseDeploymentDefaultDomain + | any + | string; /** - * Deployment-time compute choices for Alien-managed compute pools. - * - * @remarks - * - * Application source declares portable pool requirements. This settings - * object stores the concrete choices made for one deployment, such as the - * provider machine type and selected machine counts. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCompute = { +export type SyncAcquireResponseDeploymentEnvironmentNameSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentEnvironmentName = { /** - * Selected compute choices keyed by pool ID. + * Reference to a Kubernetes Secret */ - pools?: { - [k: string]: - | SyncAcquireResponseDeploymentPoolsFixed - | SyncAcquireResponseDeploymentPoolsAutoscale; - } | undefined; + secretRef: SyncAcquireResponseDeploymentEnvironmentNameSecretRef; }; -export type SyncAcquireResponseDeploymentComputeUnion = - | SyncAcquireResponseDeploymentCompute - | any; - /** - * Deployment model: how updates are delivered to the remote environment. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export const SyncAcquireResponseDeploymentDeploymentModel = { - Push: "push", - Pull: "pull", -} as const; +export type SyncAcquireResponseDeploymentEnvironmentNameUnion = + | SyncAcquireResponseDeploymentEnvironmentName + | any + | string; + /** - * Deployment model: how updates are delivered to the remote environment. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentDeploymentModel = ClosedEnum< - typeof SyncAcquireResponseDeploymentDeploymentModel ->; - -export type SyncAcquireResponseDeploymentAwsStackSettings = { - certificateArn: string; -}; - -export type SyncAcquireResponseDeploymentStackSettingsAwsUnion = - | SyncAcquireResponseDeploymentAwsStackSettings - | any; - -export type SyncAcquireResponseDeploymentAzureStackSettings = { - keyVaultCertificateId: string; - keyVaultResourceId?: string | null | undefined; +export type SyncAcquireResponseDeploymentResourceGroupNameSecretRef3 = { + key: string; + name: string; }; -export type SyncAcquireResponseDeploymentStackSettingsAzureUnion = - | SyncAcquireResponseDeploymentAzureStackSettings - | any; - -export type SyncAcquireResponseDeploymentGcpStackSettings = { - certificateName: string; +export type SyncAcquireResponseDeploymentResourceGroupName3 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentResourceGroupNameSecretRef3; }; -export type SyncAcquireResponseDeploymentStackSettingsGcpUnion = - | SyncAcquireResponseDeploymentGcpStackSettings - | any; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentResourceGroupNameUnion3 = + | SyncAcquireResponseDeploymentResourceGroupName3 + | any + | string; /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentTlsSecretRef = { - /** - * Secret namespace. Defaults to the release namespace when omitted. - */ - namespace?: string | null | undefined; - /** - * Secret name. - */ - secretName: string; +export type SyncAcquireResponseDeploymentResourceIdSecretRef = { + key: string; + name: string; }; -export type SyncAcquireResponseDeploymentDomainsKubernetes = { +export type SyncAcquireResponseDeploymentResourceId = { /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Reference to a Kubernetes Secret */ - tlsSecretRef: SyncAcquireResponseDeploymentTlsSecretRef; + secretRef: SyncAcquireResponseDeploymentResourceIdSecretRef; }; -export type SyncAcquireResponseDeploymentDomainsKubernetesUnion = - | SyncAcquireResponseDeploymentDomainsKubernetes - | any; - /** - * Platform-specific certificate references for custom domains. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentDomainsCertificate = { - aws?: SyncAcquireResponseDeploymentAwsStackSettings | any | null | undefined; - azure?: - | SyncAcquireResponseDeploymentAzureStackSettings - | any - | null - | undefined; - gcp?: SyncAcquireResponseDeploymentGcpStackSettings | any | null | undefined; - kubernetes?: - | SyncAcquireResponseDeploymentDomainsKubernetes - | any - | null - | undefined; -}; +export type SyncAcquireResponseDeploymentResourceIdUnion = + | SyncAcquireResponseDeploymentResourceId + | any + | string; /** - * Custom domain configuration for a single resource. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCustomDomains = { - /** - * Platform-specific certificate references for custom domains. - */ - certificate: SyncAcquireResponseDeploymentDomainsCertificate; - /** - * Fully qualified domain name to use. - */ - domain: string; +export type SyncAcquireResponseDeploymentStaticIpSecretRef = { + key: string; + name: string; }; -export const SyncAcquireResponseDeploymentModeLoadBalancer = { - LoadBalancer: "loadBalancer", -} as const; -export type SyncAcquireResponseDeploymentModeLoadBalancer = ClosedEnum< - typeof SyncAcquireResponseDeploymentModeLoadBalancer ->; - -export type SyncAcquireResponseDeploymentPublicEndpointTargetLoadBalancer = { +export type SyncAcquireResponseDeploymentStaticIp = { /** - * DNS name or URL for the external load balancer. + * Reference to a Kubernetes Secret */ - cnameTarget: string; - mode: SyncAcquireResponseDeploymentModeLoadBalancer; + secretRef: SyncAcquireResponseDeploymentStaticIpSecretRef; }; -export const SyncAcquireResponseDeploymentModeMachineAddresses = { - MachineAddresses: "machineAddresses", +export const SyncAcquireResponseDeploymentTypeContainerAppsEnvironment = { + ContainerAppsEnvironment: "container_apps_environment", } as const; -export type SyncAcquireResponseDeploymentModeMachineAddresses = ClosedEnum< - typeof SyncAcquireResponseDeploymentModeMachineAddresses ->; - -export type SyncAcquireResponseDeploymentPublicEndpointTargetMachineAddresses = - { - mode: SyncAcquireResponseDeploymentModeMachineAddresses; - }; - -export type SyncAcquireResponseDeploymentPublicEndpointTargetUnion = - | SyncAcquireResponseDeploymentPublicEndpointTargetLoadBalancer - | SyncAcquireResponseDeploymentPublicEndpointTargetMachineAddresses - | any; +export type SyncAcquireResponseDeploymentTypeContainerAppsEnvironment = + ClosedEnum; /** - * Domain configuration for the stack. + * Binding configuration for a pre-existing Azure Container Apps Environment. * * @remarks * - * When `custom_domains` is set, the specified resources use customer-provided - * domains and certificates. Otherwise, Alien auto-generates domains. + * Used when deploying to an existing environment instead of having Alien provision one. + * This is useful for shared environments (e.g., test infrastructure) or enterprise + * setups where environments are managed by a separate team. */ -export type SyncAcquireResponseDeploymentDomains = { - /** - * Custom domain configuration per resource ID. - */ - customDomains?: - | { [k: string]: SyncAcquireResponseDeploymentCustomDomains } - | null - | undefined; - publicEndpointTarget?: - | SyncAcquireResponseDeploymentPublicEndpointTargetLoadBalancer - | SyncAcquireResponseDeploymentPublicEndpointTargetMachineAddresses - | any - | null - | undefined; -}; - -export type SyncAcquireResponseDeploymentDomainsUnion = - | SyncAcquireResponseDeploymentDomains - | any; - -/** - * External bindings for pre-existing infrastructure. - * - * @remarks - * Allows using existing resources (MinIO, Redis, shared Container Apps - * Environment, etc.) instead of having Alien provision them. - * Required for Kubernetes platform, optional for cloud platforms. - */ -export type SyncAcquireResponseDeploymentStackSettingsExternalBindings = {}; - -/** - * How heartbeat health checks are handled. - */ -export const SyncAcquireResponseDeploymentHeartbeats = { - Off: "off", - On: "on", -} as const; -/** - * How heartbeat health checks are handled. - */ -export type SyncAcquireResponseDeploymentHeartbeats = ClosedEnum< - typeof SyncAcquireResponseDeploymentHeartbeats ->; +export type SyncAcquireResponseDeploymentExternalBindingsContainerAppsEnvironment = + { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + defaultDomain?: + | SyncAcquireResponseDeploymentDefaultDomain + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + environmentName?: + | SyncAcquireResponseDeploymentEnvironmentName + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + resourceGroupName?: + | SyncAcquireResponseDeploymentResourceGroupName3 + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + resourceId?: + | SyncAcquireResponseDeploymentResourceId + | any + | string + | null + | undefined; + staticIp?: any | null | undefined; + type: SyncAcquireResponseDeploymentTypeContainerAppsEnvironment; + }; /** - * Optional provider-specific identity for a cloud-backed Kubernetes cluster. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCloud = { - accountId?: string | null | undefined; - clusterId?: string | null | undefined; - clusterName?: string | null | undefined; - projectId?: string | null | undefined; - region?: string | null | undefined; - resourceGroup?: string | null | undefined; - subscriptionId?: string | null | undefined; +export type SyncAcquireResponseDeploymentDataDirSecretRef3 = { + key: string; + name: string; }; -export type SyncAcquireResponseDeploymentCloudUnion = - | SyncAcquireResponseDeploymentCloud - | any; +export type SyncAcquireResponseDeploymentDataDir3 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentDataDirSecretRef3; +}; /** - * Ownership model for the Kubernetes cluster. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export const SyncAcquireResponseDeploymentOwnership = { - Managed: "managed", - Existing: "existing", - External: "external", +export type SyncAcquireResponseDeploymentDataDirUnion2 = + | SyncAcquireResponseDeploymentDataDir3 + | any + | string; + +export const SyncAcquireResponseDeploymentTypeVault5 = { + Vault: "vault", } as const; -/** - * Ownership model for the Kubernetes cluster. - */ -export type SyncAcquireResponseDeploymentOwnership = ClosedEnum< - typeof SyncAcquireResponseDeploymentOwnership +export type SyncAcquireResponseDeploymentTypeVault5 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeVault5 >; /** - * Kubernetes cluster setup settings. + * Local development vault binding (for testing/development) */ -export type SyncAcquireResponseDeploymentCluster = { - cloud?: SyncAcquireResponseDeploymentCloud | any | null | undefined; +export type SyncAcquireResponseDeploymentExternalBindingsLocalVault = { /** - * Namespace where the Alien chart and application resources run. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - namespace?: string | null | undefined; + dataDir?: + | SyncAcquireResponseDeploymentDataDir3 + | any + | string + | null + | undefined; /** - * Ownership model for the Kubernetes cluster. + * The vault name for local storage */ - ownership: SyncAcquireResponseDeploymentOwnership; -}; - -export type SyncAcquireResponseDeploymentClusterUnion = - | SyncAcquireResponseDeploymentCluster - | any; - -export type SyncAcquireResponseDeploymentCertificateNone2 = { - mode: "none"; + vaultName: string; + service: "local-vault"; + type: SyncAcquireResponseDeploymentTypeVault5; }; -export type SyncAcquireResponseDeploymentCertificateManagedTLSSecret2 = { - mode: "managedTlsSecret"; - /** - * Secret name template. Runtime may substitute resource/deployment tokens. - */ - secretNameTemplate: string; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentNamespaceSecretRef2 = { + key: string; + name: string; }; -export type SyncAcquireResponseDeploymentCertificateAwsAcmArn2 = { +export type SyncAcquireResponseDeploymentNamespace2 = { /** - * Existing ACM certificate ARN. + * Reference to a Kubernetes Secret */ - certificateArn: string; - mode: "awsAcmArn"; + secretRef: SyncAcquireResponseDeploymentNamespaceSecretRef2; }; -export type SyncAcquireResponseDeploymentCertificateManagedAcmImport2 = { - mode: "managedAcmImport"; - /** - * ACM region. Defaults to the deployment region when omitted. - */ - region?: string | null | undefined; - /** - * Tags applied to runtime-imported ACM certificates. - */ - tags?: { [k: string]: string } | undefined; -}; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentNamespaceUnion2 = + | SyncAcquireResponseDeploymentNamespace2 + | any + | string; /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCertificateTLSSecretRef2 = { - /** - * Secret namespace. Defaults to the release namespace when omitted. - */ - namespace?: string | null | undefined; +export type SyncAcquireResponseDeploymentVaultPrefixSecretRef3 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentVaultPrefix3 = { /** - * Secret name. + * Reference to a Kubernetes Secret */ - secretName: string; - mode: "tlsSecretRef"; + secretRef: SyncAcquireResponseDeploymentVaultPrefixSecretRef3; }; /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCertificateUnion2 = - | SyncAcquireResponseDeploymentCertificateTLSSecretRef2 - | SyncAcquireResponseDeploymentCertificateManagedAcmImport2 - | SyncAcquireResponseDeploymentCertificateAwsAcmArn2 - | SyncAcquireResponseDeploymentCertificateManagedTLSSecret2 - | SyncAcquireResponseDeploymentCertificateNone2; +export type SyncAcquireResponseDeploymentVaultPrefixUnion3 = + | SyncAcquireResponseDeploymentVaultPrefix3 + | any + | string; -export const SyncAcquireResponseDeploymentModeCustom = { - Custom: "custom", +export const SyncAcquireResponseDeploymentTypeVault4 = { + Vault: "vault", } as const; -export type SyncAcquireResponseDeploymentModeCustom = ClosedEnum< - typeof SyncAcquireResponseDeploymentModeCustom +export type SyncAcquireResponseDeploymentTypeVault4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeVault4 >; -export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4 = - ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4 - >; - -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers4 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4; - }; - -export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum4 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum4 ->; - -export type SyncAcquireResponseDeploymentProviderGkeGateway4 = { - provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum4; - /** - * Optional static address name for the Gateway frontend. - */ - staticAddressName?: string | null | undefined; -}; - -export const SyncAcquireResponseDeploymentProviderAwsAlbEnum4 = { - AwsAlb: "awsAlb", -} as const; -export type SyncAcquireResponseDeploymentProviderAwsAlbEnum4 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum4 ->; - -export type SyncAcquireResponseDeploymentProviderAwsAlb4 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum4; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; - /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. - */ - subnetIds?: Array | undefined; - /** - * ALB target type, usually `ip`. - */ - targetType: string; -}; - -export type SyncAcquireResponseDeploymentProviderUnion4 = - | SyncAcquireResponseDeploymentProviderAwsAlb4 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers4 - | SyncAcquireResponseDeploymentProviderGkeGateway4 - | any; - /** - * Shared Gateway API route profile values. + * Kubernetes Secrets vault binding configuration */ -export type SyncAcquireResponseDeploymentRouteGateway2 = { - /** - * Annotations applied to route objects. - */ - annotations?: { [k: string]: string } | undefined; - /** - * Route controller identifier, for example a cloud Gateway controller. - */ - controller?: string | null | undefined; - /** - * GatewayClass selected for generated Gateways. - */ - gatewayClassName: string; +export type SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret = { /** - * Labels applied to route objects. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - labels?: { [k: string]: string } | undefined; + namespace?: + | SyncAcquireResponseDeploymentNamespace2 + | any + | string + | null + | undefined; /** - * Listener port, usually 443. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - listenerPort: number; - provider?: - | SyncAcquireResponseDeploymentProviderAwsAlb4 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers4 - | SyncAcquireResponseDeploymentProviderGkeGateway4 + vaultPrefix?: + | SyncAcquireResponseDeploymentVaultPrefix3 | any + | string | null | undefined; - routeApi: "gateway"; + service: "kubernetes-secret"; + type: SyncAcquireResponseDeploymentTypeVault4; }; -export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3 = - ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3 - >; - -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers3 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3; - }; - -export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum3 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum3 ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentVaultNameSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentProviderGkeGateway3 = { - provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum3; +export type SyncAcquireResponseDeploymentVaultName = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncAcquireResponseDeploymentVaultNameSecretRef; }; -export const SyncAcquireResponseDeploymentProviderAwsAlbEnum3 = { - AwsAlb: "awsAlb", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentVaultNameUnion = + | SyncAcquireResponseDeploymentVaultName + | any + | string; + +export const SyncAcquireResponseDeploymentTypeVault3 = { + Vault: "vault", } as const; -export type SyncAcquireResponseDeploymentProviderAwsAlbEnum3 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum3 +export type SyncAcquireResponseDeploymentTypeVault3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeVault3 >; -export type SyncAcquireResponseDeploymentProviderAwsAlb3 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum3; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; - /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. - */ - subnetIds?: Array | undefined; - /** - * ALB target type, usually `ip`. - */ - targetType: string; -}; - -export type SyncAcquireResponseDeploymentProviderUnion3 = - | SyncAcquireResponseDeploymentProviderAwsAlb3 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers3 - | SyncAcquireResponseDeploymentProviderGkeGateway3 - | any; - /** - * Shared Ingress route profile values. + * Azure Key Vault binding configuration */ -export type SyncAcquireResponseDeploymentRouteIngress2 = { - /** - * Annotations applied to route objects. - */ - annotations?: { [k: string]: string } | undefined; - /** - * Route controller identifier, for example `eks.amazonaws.com/alb`. - */ - controller?: string | null | undefined; - /** - * `spec.ingressClassName` for generated Ingresses. - */ - ingressClassName: string; +export type SyncAcquireResponseDeploymentExternalBindingsKeyVault = { /** - * Labels applied to route objects. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - labels?: { [k: string]: string } | undefined; - provider?: - | SyncAcquireResponseDeploymentProviderAwsAlb3 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers3 - | SyncAcquireResponseDeploymentProviderGkeGateway3 + vaultName?: + | SyncAcquireResponseDeploymentVaultName | any + | string | null | undefined; - routeApi: "ingress"; + service: "key-vault"; + type: SyncAcquireResponseDeploymentTypeVault3; }; /** - * Kubernetes route API selected for public endpoints. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentRouteUnion2 = - | SyncAcquireResponseDeploymentRouteIngress2 - | SyncAcquireResponseDeploymentRouteGateway2; +export type SyncAcquireResponseDeploymentVaultPrefixSecretRef2 = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentExposureCustom = { +export type SyncAcquireResponseDeploymentVaultPrefix2 = { /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Reference to a Kubernetes Secret */ - certificate: - | SyncAcquireResponseDeploymentCertificateTLSSecretRef2 - | SyncAcquireResponseDeploymentCertificateManagedAcmImport2 - | SyncAcquireResponseDeploymentCertificateAwsAcmArn2 - | SyncAcquireResponseDeploymentCertificateManagedTLSSecret2 - | SyncAcquireResponseDeploymentCertificateNone2; - /** - * Hostname routed by the Kubernetes public endpoint. - */ - domain: string; - mode: SyncAcquireResponseDeploymentModeCustom; - /** - * Kubernetes route API selected for public endpoints. - */ - route: - | SyncAcquireResponseDeploymentRouteIngress2 - | SyncAcquireResponseDeploymentRouteGateway2; -}; - -export type SyncAcquireResponseDeploymentCertificateNone1 = { - mode: "none"; + secretRef: SyncAcquireResponseDeploymentVaultPrefixSecretRef2; }; -export type SyncAcquireResponseDeploymentCertificateManagedTLSSecret1 = { - mode: "managedTlsSecret"; - /** - * Secret name template. Runtime may substitute resource/deployment tokens. - */ - secretNameTemplate: string; -}; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentVaultPrefixUnion2 = + | SyncAcquireResponseDeploymentVaultPrefix2 + | any + | string; -export type SyncAcquireResponseDeploymentCertificateAwsAcmArn1 = { - /** - * Existing ACM certificate ARN. - */ - certificateArn: string; - mode: "awsAcmArn"; -}; +export const SyncAcquireResponseDeploymentTypeVault2 = { + Vault: "vault", +} as const; +export type SyncAcquireResponseDeploymentTypeVault2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeVault2 +>; -export type SyncAcquireResponseDeploymentCertificateManagedAcmImport1 = { - mode: "managedAcmImport"; - /** - * ACM region. Defaults to the deployment region when omitted. - */ - region?: string | null | undefined; +/** + * GCP Secret Manager vault binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsSecretManager = { /** - * Tags applied to runtime-imported ACM certificates. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - tags?: { [k: string]: string } | undefined; + vaultPrefix?: + | SyncAcquireResponseDeploymentVaultPrefix2 + | any + | string + | null + | undefined; + service: "secret-manager"; + type: SyncAcquireResponseDeploymentTypeVault2; }; /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCertificateTLSSecretRef1 = { - /** - * Secret namespace. Defaults to the release namespace when omitted. - */ - namespace?: string | null | undefined; +export type SyncAcquireResponseDeploymentVaultPrefixSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentVaultPrefix1 = { /** - * Secret name. + * Reference to a Kubernetes Secret */ - secretName: string; - mode: "tlsSecretRef"; + secretRef: SyncAcquireResponseDeploymentVaultPrefixSecretRef1; }; /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentCertificateUnion1 = - | SyncAcquireResponseDeploymentCertificateTLSSecretRef1 - | SyncAcquireResponseDeploymentCertificateManagedAcmImport1 - | SyncAcquireResponseDeploymentCertificateAwsAcmArn1 - | SyncAcquireResponseDeploymentCertificateManagedTLSSecret1 - | SyncAcquireResponseDeploymentCertificateNone1; +export type SyncAcquireResponseDeploymentVaultPrefixUnion1 = + | SyncAcquireResponseDeploymentVaultPrefix1 + | any + | string; -export const SyncAcquireResponseDeploymentModeGenerated = { - Generated: "generated", +export const SyncAcquireResponseDeploymentTypeVault1 = { + Vault: "vault", } as const; -export type SyncAcquireResponseDeploymentModeGenerated = ClosedEnum< - typeof SyncAcquireResponseDeploymentModeGenerated +export type SyncAcquireResponseDeploymentTypeVault1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeVault1 >; -export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2 = - ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2 - >; +/** + * AWS SSM Parameter Store vault binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsParameterStore = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + vaultPrefix?: + | SyncAcquireResponseDeploymentVaultPrefix1 + | any + | string + | null + | undefined; + service: "parameter-store"; + type: SyncAcquireResponseDeploymentTypeVault1; +}; -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers2 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2; - }; +/** + * Represents a vault binding for secure secret management + */ +export type SyncAcquireResponseDeploymentExternalBindingsUnion5 = + | SyncAcquireResponseDeploymentExternalBindingsParameterStore + | SyncAcquireResponseDeploymentExternalBindingsSecretManager + | SyncAcquireResponseDeploymentExternalBindingsKeyVault + | SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret + | SyncAcquireResponseDeploymentExternalBindingsLocalVault; -export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum2 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum2 ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentDataDirSecretRef2 = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentProviderGkeGateway2 = { - provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum2; +export type SyncAcquireResponseDeploymentDataDir2 = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncAcquireResponseDeploymentDataDirSecretRef2; }; -export const SyncAcquireResponseDeploymentProviderAwsAlbEnum2 = { - AwsAlb: "awsAlb", -} as const; -export type SyncAcquireResponseDeploymentProviderAwsAlbEnum2 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum2 ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRegistryUrlSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentProviderAwsAlb2 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum2; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; - /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. - */ - subnetIds?: Array | undefined; +export type SyncAcquireResponseDeploymentRegistryUrl = { /** - * ALB target type, usually `ip`. + * Reference to a Kubernetes Secret */ - targetType: string; + secretRef: SyncAcquireResponseDeploymentRegistryUrlSecretRef; }; -export type SyncAcquireResponseDeploymentProviderUnion2 = - | SyncAcquireResponseDeploymentProviderAwsAlb2 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers2 - | SyncAcquireResponseDeploymentProviderGkeGateway2 - | any; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRegistryUrlUnion = + | SyncAcquireResponseDeploymentRegistryUrl + | any + | string; + +export const SyncAcquireResponseDeploymentTypeArtifactRegistry4 = { + ArtifactRegistry: "artifact_registry", +} as const; +export type SyncAcquireResponseDeploymentTypeArtifactRegistry4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeArtifactRegistry4 +>; /** - * Shared Gateway API route profile values. + * Local container registry binding configuration. + * + * @remarks + * + * The local registry runs on localhost only and does not require authentication. + * Security boundary is the OS process isolation on the customer's machine. + * External image access is secured by the manager's registry proxy (deployment tokens). */ -export type SyncAcquireResponseDeploymentRouteGateway1 = { +export type SyncAcquireResponseDeploymentExternalBindingsLocal = { /** - * Annotations applied to route objects. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - annotations?: { [k: string]: string } | undefined; + dataDir?: any | null | undefined; /** - * Route controller identifier, for example a cloud Gateway controller. - */ - controller?: string | null | undefined; - /** - * GatewayClass selected for generated Gateways. - */ - gatewayClassName: string; - /** - * Labels applied to route objects. - */ - labels?: { [k: string]: string } | undefined; - /** - * Listener port, usually 443. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - listenerPort: number; - provider?: - | SyncAcquireResponseDeploymentProviderAwsAlb2 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers2 - | SyncAcquireResponseDeploymentProviderGkeGateway2 + registryUrl?: + | SyncAcquireResponseDeploymentRegistryUrl | any + | string | null | undefined; - routeApi: "gateway"; + service: "local"; + type: SyncAcquireResponseDeploymentTypeArtifactRegistry4; }; -export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1 = - ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1 - >; - -export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers1 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1; - }; - -export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum1 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum1 ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentPullServiceAccountEmailSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentProviderGkeGateway1 = { - provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum1; +export type SyncAcquireResponseDeploymentPullServiceAccountEmail = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncAcquireResponseDeploymentPullServiceAccountEmailSecretRef; }; -export const SyncAcquireResponseDeploymentProviderAwsAlbEnum1 = { - AwsAlb: "awsAlb", -} as const; -export type SyncAcquireResponseDeploymentProviderAwsAlbEnum1 = ClosedEnum< - typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum1 ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentPushServiceAccountEmailSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentProviderAwsAlb1 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum1; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; +export type SyncAcquireResponseDeploymentPushServiceAccountEmail = { /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. + * Reference to a Kubernetes Secret */ - subnetIds?: Array | undefined; + secretRef: SyncAcquireResponseDeploymentPushServiceAccountEmailSecretRef; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRepositoryNameSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentRepositoryName = { /** - * ALB target type, usually `ip`. + * Reference to a Kubernetes Secret */ - targetType: string; + secretRef: SyncAcquireResponseDeploymentRepositoryNameSecretRef; }; -export type SyncAcquireResponseDeploymentProviderUnion1 = - | SyncAcquireResponseDeploymentProviderAwsAlb1 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers1 - | SyncAcquireResponseDeploymentProviderGkeGateway1 - | any; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRepositoryNameUnion = + | SyncAcquireResponseDeploymentRepositoryName + | any + | string; + +export const SyncAcquireResponseDeploymentTypeArtifactRegistry3 = { + ArtifactRegistry: "artifact_registry", +} as const; +export type SyncAcquireResponseDeploymentTypeArtifactRegistry3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeArtifactRegistry3 +>; /** - * Shared Ingress route profile values. + * Google Artifact Registry binding configuration */ -export type SyncAcquireResponseDeploymentRouteIngress1 = { - /** - * Annotations applied to route objects. - */ - annotations?: { [k: string]: string } | undefined; - /** - * Route controller identifier, for example `eks.amazonaws.com/alb`. - */ - controller?: string | null | undefined; - /** - * `spec.ingressClassName` for generated Ingresses. - */ - ingressClassName: string; +export type SyncAcquireResponseDeploymentExternalBindingsGar = { + pullServiceAccountEmail?: any | null | undefined; + pushServiceAccountEmail?: any | null | undefined; /** - * Labels applied to route objects. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - labels?: { [k: string]: string } | undefined; - provider?: - | SyncAcquireResponseDeploymentProviderAwsAlb1 - | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers1 - | SyncAcquireResponseDeploymentProviderGkeGateway1 + repositoryName?: + | SyncAcquireResponseDeploymentRepositoryName | any + | string | null | undefined; - routeApi: "ingress"; + service: "gar"; + type: SyncAcquireResponseDeploymentTypeArtifactRegistry3; }; /** - * Kubernetes route API selected for public endpoints. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentRouteUnion1 = - | SyncAcquireResponseDeploymentRouteIngress1 - | SyncAcquireResponseDeploymentRouteGateway1; +export type SyncAcquireResponseDeploymentRegistryNameSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentExposureGenerated = { +export type SyncAcquireResponseDeploymentRegistryName = { /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Reference to a Kubernetes Secret */ - certificate: - | SyncAcquireResponseDeploymentCertificateTLSSecretRef1 - | SyncAcquireResponseDeploymentCertificateManagedAcmImport1 - | SyncAcquireResponseDeploymentCertificateAwsAcmArn1 - | SyncAcquireResponseDeploymentCertificateManagedTLSSecret1 - | SyncAcquireResponseDeploymentCertificateNone1; - mode: SyncAcquireResponseDeploymentModeGenerated; + secretRef: SyncAcquireResponseDeploymentRegistryNameSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRegistryNameUnion = + | SyncAcquireResponseDeploymentRegistryName + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRepositoryPrefixSecretRef2 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentRepositoryPrefix2 = { /** - * Kubernetes route API selected for public endpoints. + * Reference to a Kubernetes Secret */ - route: - | SyncAcquireResponseDeploymentRouteIngress1 - | SyncAcquireResponseDeploymentRouteGateway1; + secretRef: SyncAcquireResponseDeploymentRepositoryPrefixSecretRef2; }; -export const SyncAcquireResponseDeploymentModeDisabled = { - Disabled: "disabled", -} as const; -export type SyncAcquireResponseDeploymentModeDisabled = ClosedEnum< - typeof SyncAcquireResponseDeploymentModeDisabled ->; - -export type SyncAcquireResponseDeploymentExposureDisabled = { - mode: SyncAcquireResponseDeploymentModeDisabled; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentResourceGroupNameSecretRef2 = { + key: string; + name: string; }; -export type SyncAcquireResponseDeploymentExposureUnion = - | SyncAcquireResponseDeploymentExposureCustom - | SyncAcquireResponseDeploymentExposureGenerated - | SyncAcquireResponseDeploymentExposureDisabled - | any; +export type SyncAcquireResponseDeploymentResourceGroupName2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentResourceGroupNameSecretRef2; +}; /** - * Kubernetes runtime substrate configuration. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * This controls how setup chooses the cluster backing `Platform::Kubernetes` - * deployments. When omitted, cloud-backed Kubernetes deployments default to a - * managed cluster and generic/on-prem Kubernetes defaults to an external - * cluster. + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentKubernetes = { - cluster?: SyncAcquireResponseDeploymentCluster | any | null | undefined; - exposure?: - | SyncAcquireResponseDeploymentExposureCustom - | SyncAcquireResponseDeploymentExposureGenerated - | SyncAcquireResponseDeploymentExposureDisabled - | any - | null - | undefined; -}; - -export type SyncAcquireResponseDeploymentKubernetesUnion = - | SyncAcquireResponseDeploymentKubernetes - | any; +export type SyncAcquireResponseDeploymentResourceGroupNameUnion2 = + | SyncAcquireResponseDeploymentResourceGroupName2 + | any + | string; -export const SyncAcquireResponseDeploymentTypeByoVnetAzure = { - ByoVnetAzure: "byo-vnet-azure", +export const SyncAcquireResponseDeploymentTypeArtifactRegistry2 = { + ArtifactRegistry: "artifact_registry", } as const; -export type SyncAcquireResponseDeploymentTypeByoVnetAzure = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeByoVnetAzure +export type SyncAcquireResponseDeploymentTypeArtifactRegistry2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeArtifactRegistry2 >; -export type SyncAcquireResponseDeploymentNetworkByoVnetAzure = { - /** - * Name of the dedicated classic Application Gateway subnet within the VNet. - */ - applicationGatewaySubnetName?: string | null | undefined; +/** + * Azure Container Registry binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsAcr = { /** - * Name of the dedicated subnet that hosts Private Endpoints (e.g. for a + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * Postgres Flexible Server). A Private Endpoint must not share the private - * subnet, which is already claimed by the Container Apps environment's - * `infrastructure_subnet_id`. Required only when the stack contains a - * Postgres resource; otherwise unused. - */ - privateEndpointSubnetName?: string | null | undefined; - /** - * Name of the private subnet within the VNet - */ - privateSubnetName: string; - /** - * Name of the public subnet within the VNet + * or a reference to a Kubernetes Secret */ - publicSubnetName: string; - type: SyncAcquireResponseDeploymentTypeByoVnetAzure; + registryName?: + | SyncAcquireResponseDeploymentRegistryName + | any + | string + | null + | undefined; + repositoryPrefix?: any | null | undefined; /** - * The full resource ID of the existing VNet + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - vnetResourceId: string; + resourceGroupName?: + | SyncAcquireResponseDeploymentResourceGroupName2 + | any + | string + | null + | undefined; + service: "acr"; + type: SyncAcquireResponseDeploymentTypeArtifactRegistry2; }; -export const SyncAcquireResponseDeploymentTypeByoVpcGcp = { - ByoVpcGcp: "byo-vpc-gcp", -} as const; -export type SyncAcquireResponseDeploymentTypeByoVpcGcp = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeByoVpcGcp ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentPullRoleArnSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentNetworkByoVpcGcp = { - /** - * The name of the existing VPC network - */ - networkName: string; - /** - * The region of the subnet - */ - region: string; +export type SyncAcquireResponseDeploymentPullRoleArn = { /** - * The name of the subnet to use + * Reference to a Kubernetes Secret */ - subnetName: string; - type: SyncAcquireResponseDeploymentTypeByoVpcGcp; + secretRef: SyncAcquireResponseDeploymentPullRoleArnSecretRef; }; -export const SyncAcquireResponseDeploymentTypeByoVpcAws = { - ByoVpcAws: "byo-vpc-aws", -} as const; -export type SyncAcquireResponseDeploymentTypeByoVpcAws = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeByoVpcAws ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentPushRoleArnSecretRef = { + key: string; + name: string; +}; -export type SyncAcquireResponseDeploymentNetworkByoVpcAws = { - /** - * IDs of private subnets - */ - privateSubnetIds: Array; - /** - * IDs of public subnets (required for public ingress) - */ - publicSubnetIds: Array; +export type SyncAcquireResponseDeploymentPushRoleArn = { /** - * Optional security group IDs to use + * Reference to a Kubernetes Secret */ - securityGroupIds?: Array | undefined; - type: SyncAcquireResponseDeploymentTypeByoVpcAws; + secretRef: SyncAcquireResponseDeploymentPushRoleArnSecretRef; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRepositoryPrefixSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentRepositoryPrefix1 = { /** - * The ID of the existing VPC + * Reference to a Kubernetes Secret */ - vpcId: string; + secretRef: SyncAcquireResponseDeploymentRepositoryPrefixSecretRef1; }; -export const SyncAcquireResponseDeploymentTypeCreate = { - Create: "create", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRepositoryPrefixUnion = + | SyncAcquireResponseDeploymentRepositoryPrefix1 + | any + | string; + +export const SyncAcquireResponseDeploymentTypeArtifactRegistry1 = { + ArtifactRegistry: "artifact_registry", } as const; -export type SyncAcquireResponseDeploymentTypeCreate = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeCreate +export type SyncAcquireResponseDeploymentTypeArtifactRegistry1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeArtifactRegistry1 >; -export type SyncAcquireResponseDeploymentNetworkCreate = { - /** - * Number of availability zones (default: 2). - */ - availabilityZones?: number | undefined; +/** + * AWS ECR (Elastic Container Registry) binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsEcr = { + pullRoleArn?: any | null | undefined; + pushRoleArn?: any | null | undefined; /** - * VPC/VNet CIDR block. If not specified, auto-generated from stack ID + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * to reduce conflicts (e.g., "10.{hash}.0.0/16"). + * or a reference to a Kubernetes Secret */ - cidr?: string | null | undefined; - type: SyncAcquireResponseDeploymentTypeCreate; -}; - -export const SyncAcquireResponseDeploymentTypeUseDefault = { - UseDefault: "use-default", -} as const; -export type SyncAcquireResponseDeploymentTypeUseDefault = ClosedEnum< - typeof SyncAcquireResponseDeploymentTypeUseDefault ->; - -export type SyncAcquireResponseDeploymentNetworkUseDefault = { - type: SyncAcquireResponseDeploymentTypeUseDefault; + repositoryPrefix?: + | SyncAcquireResponseDeploymentRepositoryPrefix1 + | any + | string + | null + | undefined; + service: "ecr"; + type: SyncAcquireResponseDeploymentTypeArtifactRegistry1; }; -export type SyncAcquireResponseDeploymentNetworkUnion = - | SyncAcquireResponseDeploymentNetworkByoVpcAws - | SyncAcquireResponseDeploymentNetworkByoVpcGcp - | SyncAcquireResponseDeploymentNetworkByoVnetAzure - | SyncAcquireResponseDeploymentNetworkUseDefault - | SyncAcquireResponseDeploymentNetworkCreate - | any; - -/** - * How telemetry (logs, metrics, traces) is handled. - */ -export const SyncAcquireResponseDeploymentTelemetry = { - Off: "off", - Auto: "auto", - ApprovalRequired: "approval-required", -} as const; /** - * How telemetry (logs, metrics, traces) is handled. + * Service-type based artifact registry binding that supports multiple registry providers */ -export type SyncAcquireResponseDeploymentTelemetry = ClosedEnum< - typeof SyncAcquireResponseDeploymentTelemetry ->; +export type SyncAcquireResponseDeploymentExternalBindingsUnion4 = + | SyncAcquireResponseDeploymentExternalBindingsEcr + | SyncAcquireResponseDeploymentExternalBindingsAcr + | SyncAcquireResponseDeploymentExternalBindingsGar + | SyncAcquireResponseDeploymentExternalBindingsLocal; /** - * How updates are delivered to the deployment. - */ -export const SyncAcquireResponseDeploymentUpdates = { - Auto: "auto", - ApprovalRequired: "approval-required", -} as const; -/** - * How updates are delivered to the deployment. + * Reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentUpdates = ClosedEnum< - typeof SyncAcquireResponseDeploymentUpdates ->; +export type SyncAcquireResponseDeploymentDataDirSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentDataDir1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentDataDirSecretRef1; +}; /** - * User-customizable deployment settings specified at deploy time. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * These settings are provided by the customer via CloudFormation parameters, - * Terraform attributes, CLI flags, or Helm values. They customize how the - * deployment runs and what capabilities are enabled. - * - * **Key distinction**: StackSettings is user-customizable, while ManagementConfig - * is platform-derived (from the Manager's ServiceAccount). + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentStackSettings = { - compute?: SyncAcquireResponseDeploymentCompute | any | null | undefined; +export type SyncAcquireResponseDeploymentDataDirUnion1 = + | SyncAcquireResponseDeploymentDataDir1 + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentKeyPrefixSecretRef2 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentKeyPrefix2 = { /** - * Deployment model: how updates are delivered to the remote environment. + * Reference to a Kubernetes Secret */ - deploymentModel?: SyncAcquireResponseDeploymentDeploymentModel | undefined; - domains?: SyncAcquireResponseDeploymentDomains | any | null | undefined; + secretRef: SyncAcquireResponseDeploymentKeyPrefixSecretRef2; +}; + +export const SyncAcquireResponseDeploymentTypeKv5 = { + Kv: "kv", +} as const; +export type SyncAcquireResponseDeploymentTypeKv5 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeKv5 +>; + +/** + * Local development KV binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsLocalKv = { /** - * External bindings for pre-existing infrastructure. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * Allows using existing resources (MinIO, Redis, shared Container Apps - * Environment, etc.) instead of having Alien provision them. - * Required for Kubernetes platform, optional for cloud platforms. + * or a reference to a Kubernetes Secret */ - externalBindings?: - | SyncAcquireResponseDeploymentStackSettingsExternalBindings + dataDir?: + | SyncAcquireResponseDeploymentDataDir1 + | any + | string | null | undefined; + keyPrefix?: any | null | undefined; + service: "local-kv"; + type: SyncAcquireResponseDeploymentTypeKv5; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentConnectionUrlSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentConnectionUrl = { /** - * How heartbeat health checks are handled. + * Reference to a Kubernetes Secret */ - heartbeats?: SyncAcquireResponseDeploymentHeartbeats | undefined; - kubernetes?: SyncAcquireResponseDeploymentKubernetes | any | null | undefined; - network?: - | SyncAcquireResponseDeploymentNetworkByoVpcAws - | SyncAcquireResponseDeploymentNetworkByoVpcGcp - | SyncAcquireResponseDeploymentNetworkByoVnetAzure - | SyncAcquireResponseDeploymentNetworkUseDefault - | SyncAcquireResponseDeploymentNetworkCreate + secretRef: SyncAcquireResponseDeploymentConnectionUrlSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentConnectionUrlUnion = + | SyncAcquireResponseDeploymentConnectionUrl + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentDatabaseSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentDatabase1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentDatabaseSecretRef1; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentKeyPrefixSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentKeyPrefix1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentKeyPrefixSecretRef1; +}; + +export const SyncAcquireResponseDeploymentTypeKv4 = { + Kv: "kv", +} as const; +export type SyncAcquireResponseDeploymentTypeKv4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeKv4 +>; + +/** + * Redis KV binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsRedis = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + connectionUrl?: + | SyncAcquireResponseDeploymentConnectionUrl | any + | string | null | undefined; + database?: any | null | undefined; + keyPrefix?: any | null | undefined; + service: "redis"; + type: SyncAcquireResponseDeploymentTypeKv4; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentAccountNameSecretRef2 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentAccountName2 = { /** - * How telemetry (logs, metrics, traces) is handled. + * Reference to a Kubernetes Secret */ - telemetry?: SyncAcquireResponseDeploymentTelemetry | undefined; + secretRef: SyncAcquireResponseDeploymentAccountNameSecretRef2; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentAccountNameUnion2 = + | SyncAcquireResponseDeploymentAccountName2 + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentResourceGroupNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentResourceGroupName1 = { /** - * How updates are delivered to the deployment. + * Reference to a Kubernetes Secret */ - updates?: SyncAcquireResponseDeploymentUpdates | undefined; + secretRef: SyncAcquireResponseDeploymentResourceGroupNameSecretRef1; }; /** - * Deployment configuration + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncAcquireResponseDeploymentConfig = { +export type SyncAcquireResponseDeploymentResourceGroupNameUnion1 = + | SyncAcquireResponseDeploymentResourceGroupName1 + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentTableNameSecretRef2 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentTableName2 = { /** - * Allow frozen resource changes during updates + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentTableNameSecretRef2; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentTableNameUnion2 = + | SyncAcquireResponseDeploymentTableName2 + | any + | string; + +export const SyncAcquireResponseDeploymentTypeKv3 = { + Kv: "kv", +} as const; +export type SyncAcquireResponseDeploymentTypeKv3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeKv3 +>; + +/** + * Azure Table Storage KV binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsTablestorage = { + /** + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * When true, skips the frozen resources compatibility check. - * This requires running with elevated cloud credentials. + * or a reference to a Kubernetes Secret */ - allowFrozenChanges?: boolean | undefined; - basePlatform?: - | SyncAcquireResponseDeploymentBasePlatformEnum + accountName?: + | SyncAcquireResponseDeploymentAccountName2 | any + | string | null | undefined; - computeBackend?: - | SyncAcquireResponseDeploymentComputeBackendHorizon + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + resourceGroupName?: + | SyncAcquireResponseDeploymentResourceGroupName1 | any + | string | null | undefined; /** - * Human-readable deployment name for cloud console metadata. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * This is separate from the physical resource prefix in StackState. It is - * used only for display text such as IAM role descriptions, service - * account descriptions, and custom role titles. - */ - deploymentName?: string | null | undefined; - /** - * Deployment token for pull authentication with the manager's registry. - * - * @remarks - * - * Used by controllers to configure registry credentials so cloud platforms - * and K8s can pull images from the manager's `/v2/` endpoint. + * or a reference to a Kubernetes Secret */ - deploymentToken?: string | null | undefined; - domainMetadata?: - | SyncAcquireResponseDeploymentDomainMetadata + tableName?: + | SyncAcquireResponseDeploymentTableName2 | any + | string | null | undefined; + service: "tablestorage"; + type: SyncAcquireResponseDeploymentTypeKv3; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentCollectionNameSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentCollectionName = { /** - * Snapshot of environment variables at a point in time + * Reference to a Kubernetes Secret */ - environmentVariables: SyncAcquireResponseDeploymentEnvironmentVariables; + secretRef: SyncAcquireResponseDeploymentCollectionNameSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentCollectionNameUnion = + | SyncAcquireResponseDeploymentCollectionName + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentDatabaseIdSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentDatabaseId = { /** - * Map from resource ID to external binding. - * - * @remarks - * - * Validated at runtime: binding type must match resource type. + * Reference to a Kubernetes Secret */ - externalBindings?: { - [k: string]: - | SyncAcquireResponseDeploymentExternalBindingsContainerAppsEnvironment - | SyncAcquireResponseDeploymentExternalBindingsS3 - | SyncAcquireResponseDeploymentExternalBindingsBlob - | SyncAcquireResponseDeploymentExternalBindingsGcs - | SyncAcquireResponseDeploymentExternalBindingsLocalStorage - | SyncAcquireResponseDeploymentExternalBindingsSqs - | SyncAcquireResponseDeploymentExternalBindingsPubsub - | SyncAcquireResponseDeploymentExternalBindingsServicebus - | SyncAcquireResponseDeploymentExternalBindingsLocalQueue - | SyncAcquireResponseDeploymentExternalBindingsDynamodb - | SyncAcquireResponseDeploymentExternalBindingsFirestore - | SyncAcquireResponseDeploymentExternalBindingsTablestorage - | SyncAcquireResponseDeploymentExternalBindingsRedis - | SyncAcquireResponseDeploymentExternalBindingsLocalKv - | SyncAcquireResponseDeploymentExternalBindingsEcr - | SyncAcquireResponseDeploymentExternalBindingsAcr - | SyncAcquireResponseDeploymentExternalBindingsGar - | SyncAcquireResponseDeploymentExternalBindingsLocal - | SyncAcquireResponseDeploymentExternalBindingsParameterStore - | SyncAcquireResponseDeploymentExternalBindingsSecretManager - | SyncAcquireResponseDeploymentExternalBindingsKeyVault - | SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret - | SyncAcquireResponseDeploymentExternalBindingsLocalVault - | SyncAcquireResponseDeploymentExternalBindingsAurora - | SyncAcquireResponseDeploymentExternalBindingsCloudSQL - | SyncAcquireResponseDeploymentExternalBindingsFlexibleServer - | SyncAcquireResponseDeploymentExternalBindingsExternal - | SyncAcquireResponseDeploymentExternalBindingsLocalPostgres; - } | undefined; + secretRef: SyncAcquireResponseDeploymentDatabaseIdSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentDatabaseIdUnion = + | SyncAcquireResponseDeploymentDatabaseId + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentProjectIdSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentProjectId = { /** - * DNS-style label domain used for Kubernetes resource ownership labels. + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentProjectIdSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentProjectIdUnion = + | SyncAcquireResponseDeploymentProjectId + | any + | string; + +export const SyncAcquireResponseDeploymentTypeKv2 = { + Kv: "kv", +} as const; +export type SyncAcquireResponseDeploymentTypeKv2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeKv2 +>; + +/** + * GCP Firestore KV binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsFirestore = { + /** + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Defaults to `alien.dev` when absent. Whitelabeled Operator builds set this - * so generated workloads and optional log collectors share the same label - * namespace. + * or a reference to a Kubernetes Secret */ - labelDomain?: string | null | undefined; - managementConfig?: - | SyncAcquireResponseDeploymentManagementConfigAzure - | SyncAcquireResponseDeploymentManagementConfigAws - | SyncAcquireResponseDeploymentManagementConfigGcp - | SyncAcquireResponseDeploymentManagementConfigKubernetes + collectionName?: + | SyncAcquireResponseDeploymentCollectionName | any + | string | null | undefined; /** - * Manager base URL (e.g., "https://manager.alien.dev"). - * - * @remarks - * - * The manager IS the container registry — its `/v2/` endpoint serves as - * the OCI Distribution API. Controllers derive the proxy host from this - * to configure pull auth (RegistryCredentials, imagePullSecrets). - * - * When None (e.g., `alien dev`), controllers use image URIs as-is. - */ - managerUrl?: string | null | undefined; - monitoring?: SyncAcquireResponseDeploymentMonitoring | any | null | undefined; - /** - * Native image registry host+prefix for platforms that require it. - * - * @remarks - * - * Lambda (ECR) and Cloud Run (GAR) require native registry URIs. Other - * runtimes, including Azure Container Apps, pull through the manager's - * registry proxy. - * - * Derived by the manager from the artifact registry binding: - * - ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}` - * - GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}` - */ - nativeImageHost?: string | null | undefined; - /** - * When true the observe pass reports raw resources across every namespace - * - * @remarks - * (cluster scope); otherwise it stays within the operator's own namespace. - * The label selector, if any, still filters within whichever scope applies. - * Ignored by cloud observers. - */ - observeAllNamespaces?: boolean | undefined; - /** - * Kubernetes label selector that narrows which raw resources the observe + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * pass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes - * everything in the namespace. Ignored by cloud observers. + * or a reference to a Kubernetes Secret */ - observeLabelSelector?: string | null | undefined; + databaseId?: + | SyncAcquireResponseDeploymentDatabaseId + | any + | string + | null + | undefined; /** - * Public endpoint URLs for exposed resources (optional override). + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Use this only when a caller already knows the public URL. Managed public - * endpoint flows should prefer `domain_metadata` plus controller-reported - * load balancer outputs so DNS, certificate renewal, and route readiness - * stay tied to the resource state. - * - * If not set, platforms determine public endpoint URLs from other sources: - * - Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS - * - Local: `http://localhost:{allocated_port}` - * - Custom or disabled exposure: no public endpoint URL unless a controller reports one - * - * Outer key: resource ID. Inner key: endpoint name. Value: public URL. + * or a reference to a Kubernetes Secret */ - publicEndpoints?: { [k: string]: { [k: string]: string } } | null | undefined; + projectId?: + | SyncAcquireResponseDeploymentProjectId + | any + | string + | null + | undefined; + service: "firestore"; + type: SyncAcquireResponseDeploymentTypeKv2; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentEndpointUrlSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentEndpointUrl = { /** - * User-customizable deployment settings specified at deploy time. - * - * @remarks - * - * These settings are provided by the customer via CloudFormation parameters, - * Terraform attributes, CLI flags, or Helm values. They customize how the - * deployment runs and what capabilities are enabled. - * - * **Key distinction**: StackSettings is user-customizable, while ManagementConfig - * is platform-derived (from the Manager's ServiceAccount). + * Reference to a Kubernetes Secret */ - stackSettings?: SyncAcquireResponseDeploymentStackSettings | undefined; + secretRef: SyncAcquireResponseDeploymentEndpointUrlSecretRef; }; -export type SyncAcquireResponseDeployment = { +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRegionSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentRegion = { /** - * ID of the deployment + * Reference to a Kubernetes Secret */ - deploymentId: string; + secretRef: SyncAcquireResponseDeploymentRegionSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentRegionUnion = + | SyncAcquireResponseDeploymentRegion + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentTableNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentTableName1 = { /** - * Project ID the deployment belongs to + * Reference to a Kubernetes Secret */ - projectId: string; + secretRef: SyncAcquireResponseDeploymentTableNameSecretRef1; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentTableNameUnion1 = + | SyncAcquireResponseDeploymentTableName1 + | any + | string; + +export const SyncAcquireResponseDeploymentTypeKv1 = { + Kv: "kv", +} as const; +export type SyncAcquireResponseDeploymentTypeKv1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeKv1 +>; + +/** + * AWS DynamoDB KV binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsDynamodb = { + endpointUrl?: any | null | undefined; /** - * Deployment group ID the deployment belongs to + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - deploymentGroupId: string; - setupMethod?: DeploymentSetupMethod | undefined; + region?: + | SyncAcquireResponseDeploymentRegion + | any + | string + | null + | undefined; /** - * Current deployment state (includes releases) + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - current: SyncAcquireResponseDeploymentCurrent; + tableName?: + | SyncAcquireResponseDeploymentTableName1 + | any + | string + | null + | undefined; + service: "dynamodb"; + type: SyncAcquireResponseDeploymentTypeKv1; +}; + +/** + * Represents a KV binding for key-value storage across platforms + */ +export type SyncAcquireResponseDeploymentExternalBindingsUnion3 = + | SyncAcquireResponseDeploymentExternalBindingsDynamodb + | SyncAcquireResponseDeploymentExternalBindingsFirestore + | SyncAcquireResponseDeploymentExternalBindingsTablestorage + | SyncAcquireResponseDeploymentExternalBindingsRedis + | SyncAcquireResponseDeploymentExternalBindingsLocalKv; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentQueuePathSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentQueuePath = { /** - * Deployment configuration + * Reference to a Kubernetes Secret */ - config: SyncAcquireResponseDeploymentConfig; + secretRef: SyncAcquireResponseDeploymentQueuePathSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentQueuePathUnion = + | SyncAcquireResponseDeploymentQueuePath + | any + | string; + +export const SyncAcquireResponseDeploymentTypeQueue4 = { + Queue: "queue", +} as const; +export type SyncAcquireResponseDeploymentTypeQueue4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeQueue4 +>; + +/** + * Local queue parameters + */ +export type SyncAcquireResponseDeploymentExternalBindingsLocalQueue = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + queuePath?: + | SyncAcquireResponseDeploymentQueuePath + | any + | string + | null + | undefined; + service: "local-queue"; + type: SyncAcquireResponseDeploymentTypeQueue4; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentNamespaceSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentNamespace1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentNamespaceSecretRef1; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentNamespaceUnion1 = + | SyncAcquireResponseDeploymentNamespace1 + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentQueueNameSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentQueueName = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentQueueNameSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentQueueNameUnion = + | SyncAcquireResponseDeploymentQueueName + | any + | string; + +export const SyncAcquireResponseDeploymentTypeQueue3 = { + Queue: "queue", +} as const; +export type SyncAcquireResponseDeploymentTypeQueue3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeQueue3 +>; + +/** + * Azure Service Bus parameters + */ +export type SyncAcquireResponseDeploymentExternalBindingsServicebus = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + namespace?: + | SyncAcquireResponseDeploymentNamespace1 + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + queueName?: + | SyncAcquireResponseDeploymentQueueName + | any + | string + | null + | undefined; + service: "servicebus"; + type: SyncAcquireResponseDeploymentTypeQueue3; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentSubscriptionSecretRef = { + key: string; + name: string; }; -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseTypeStringList$inboundSchema: - z.ZodEnum = - z.enum(SyncAcquireResponseDeploymentCurrentReleaseTypeStringList); +export type SyncAcquireResponseDeploymentSubscription = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentSubscriptionSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentSubscriptionUnion = + | SyncAcquireResponseDeploymentSubscription + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentTopicSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentTopic = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentTopicSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentTopicUnion = + | SyncAcquireResponseDeploymentTopic + | any + | string; + +export const SyncAcquireResponseDeploymentTypeQueue2 = { + Queue: "queue", +} as const; +export type SyncAcquireResponseDeploymentTypeQueue2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeQueue2 +>; + +/** + * GCP Pub/Sub parameters + */ +export type SyncAcquireResponseDeploymentExternalBindingsPubsub = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + subscription?: + | SyncAcquireResponseDeploymentSubscription + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + topic?: SyncAcquireResponseDeploymentTopic | any | string | null | undefined; + service: "pubsub"; + type: SyncAcquireResponseDeploymentTypeQueue2; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentQueueUrlSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentQueueUrl = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentQueueUrlSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentQueueUrlUnion = + | SyncAcquireResponseDeploymentQueueUrl + | any + | string; + +export const SyncAcquireResponseDeploymentTypeQueue1 = { + Queue: "queue", +} as const; +export type SyncAcquireResponseDeploymentTypeQueue1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeQueue1 +>; + +/** + * AWS SQS queue parameters + */ +export type SyncAcquireResponseDeploymentExternalBindingsSqs = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + queueUrl?: + | SyncAcquireResponseDeploymentQueueUrl + | any + | string + | null + | undefined; + service: "sqs"; + type: SyncAcquireResponseDeploymentTypeQueue1; +}; + +/** + * Binding parameters for Queue at runtime or in templates. + */ +export type SyncAcquireResponseDeploymentExternalBindingsUnion2 = + | SyncAcquireResponseDeploymentExternalBindingsSqs + | SyncAcquireResponseDeploymentExternalBindingsPubsub + | SyncAcquireResponseDeploymentExternalBindingsServicebus + | SyncAcquireResponseDeploymentExternalBindingsLocalQueue; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentStoragePathSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentStoragePath = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentStoragePathSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentStoragePathUnion = + | SyncAcquireResponseDeploymentStoragePath + | any + | string; + +export const SyncAcquireResponseDeploymentTypeStorage4 = { + Storage: "storage", +} as const; +export type SyncAcquireResponseDeploymentTypeStorage4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeStorage4 +>; + +/** + * Local filesystem storage binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsLocalStorage = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + storagePath?: + | SyncAcquireResponseDeploymentStoragePath + | any + | string + | null + | undefined; + service: "local-storage"; + type: SyncAcquireResponseDeploymentTypeStorage4; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentBucketNameSecretRef2 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentBucketName2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentBucketNameSecretRef2; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentBucketNameUnion2 = + | SyncAcquireResponseDeploymentBucketName2 + | any + | string; + +export const SyncAcquireResponseDeploymentTypeStorage3 = { + Storage: "storage", +} as const; +export type SyncAcquireResponseDeploymentTypeStorage3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeStorage3 +>; + +/** + * Google Cloud Storage binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsGcs = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + bucketName?: + | SyncAcquireResponseDeploymentBucketName2 + | any + | string + | null + | undefined; + service: "gcs"; + type: SyncAcquireResponseDeploymentTypeStorage3; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentAccountNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentAccountName1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentAccountNameSecretRef1; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentAccountNameUnion1 = + | SyncAcquireResponseDeploymentAccountName1 + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentContainerNameSecretRef = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentContainerName = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentContainerNameSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentContainerNameUnion = + | SyncAcquireResponseDeploymentContainerName + | any + | string; + +export const SyncAcquireResponseDeploymentTypeStorage2 = { + Storage: "storage", +} as const; +export type SyncAcquireResponseDeploymentTypeStorage2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeStorage2 +>; + +/** + * Azure Blob Storage binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsBlob = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + accountName?: + | SyncAcquireResponseDeploymentAccountName1 + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + containerName?: + | SyncAcquireResponseDeploymentContainerName + | any + | string + | null + | undefined; + service: "blob"; + type: SyncAcquireResponseDeploymentTypeStorage2; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentBucketNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncAcquireResponseDeploymentBucketName1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncAcquireResponseDeploymentBucketNameSecretRef1; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncAcquireResponseDeploymentBucketNameUnion1 = + | SyncAcquireResponseDeploymentBucketName1 + | any + | string; + +export const SyncAcquireResponseDeploymentTypeStorage1 = { + Storage: "storage", +} as const; +export type SyncAcquireResponseDeploymentTypeStorage1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeStorage1 +>; + +/** + * AWS S3 storage binding configuration + */ +export type SyncAcquireResponseDeploymentExternalBindingsS3 = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + bucketName?: + | SyncAcquireResponseDeploymentBucketName1 + | any + | string + | null + | undefined; + service: "s3"; + type: SyncAcquireResponseDeploymentTypeStorage1; +}; + +/** + * Service-type based storage binding that supports multiple storage providers + */ +export type SyncAcquireResponseDeploymentExternalBindingsUnion1 = + | SyncAcquireResponseDeploymentExternalBindingsS3 + | SyncAcquireResponseDeploymentExternalBindingsBlob + | SyncAcquireResponseDeploymentExternalBindingsGcs + | SyncAcquireResponseDeploymentExternalBindingsLocalStorage; + +/** + * Represents a binding to pre-existing infrastructure. + * + * @remarks + * + * The binding type must match the resource type it's applied to. + * Validated at runtime by the executor. + */ +export type SyncAcquireResponseDeploymentExternalBindingsUnion7 = + | SyncAcquireResponseDeploymentExternalBindingsContainerAppsEnvironment + | SyncAcquireResponseDeploymentExternalBindingsS3 + | SyncAcquireResponseDeploymentExternalBindingsBlob + | SyncAcquireResponseDeploymentExternalBindingsGcs + | SyncAcquireResponseDeploymentExternalBindingsLocalStorage + | SyncAcquireResponseDeploymentExternalBindingsSqs + | SyncAcquireResponseDeploymentExternalBindingsPubsub + | SyncAcquireResponseDeploymentExternalBindingsServicebus + | SyncAcquireResponseDeploymentExternalBindingsLocalQueue + | SyncAcquireResponseDeploymentExternalBindingsDynamodb + | SyncAcquireResponseDeploymentExternalBindingsFirestore + | SyncAcquireResponseDeploymentExternalBindingsTablestorage + | SyncAcquireResponseDeploymentExternalBindingsRedis + | SyncAcquireResponseDeploymentExternalBindingsLocalKv + | SyncAcquireResponseDeploymentExternalBindingsEcr + | SyncAcquireResponseDeploymentExternalBindingsAcr + | SyncAcquireResponseDeploymentExternalBindingsGar + | SyncAcquireResponseDeploymentExternalBindingsLocal + | SyncAcquireResponseDeploymentExternalBindingsParameterStore + | SyncAcquireResponseDeploymentExternalBindingsSecretManager + | SyncAcquireResponseDeploymentExternalBindingsKeyVault + | SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret + | SyncAcquireResponseDeploymentExternalBindingsLocalVault + | SyncAcquireResponseDeploymentExternalBindingsAurora + | SyncAcquireResponseDeploymentExternalBindingsCloudSQL + | SyncAcquireResponseDeploymentExternalBindingsFlexibleServer + | SyncAcquireResponseDeploymentExternalBindingsExternal + | SyncAcquireResponseDeploymentExternalBindingsLocalPostgres; + +export const SyncAcquireResponseDeploymentPlatformKubernetes = { + Kubernetes: "kubernetes", +} as const; +export type SyncAcquireResponseDeploymentPlatformKubernetes = ClosedEnum< + typeof SyncAcquireResponseDeploymentPlatformKubernetes +>; + +export type SyncAcquireResponseDeploymentManagementConfigKubernetes = { + platform: SyncAcquireResponseDeploymentPlatformKubernetes; +}; + +export const SyncAcquireResponseDeploymentConfigPlatformAzure = { + Azure: "azure", +} as const; +export type SyncAcquireResponseDeploymentConfigPlatformAzure = ClosedEnum< + typeof SyncAcquireResponseDeploymentConfigPlatformAzure +>; + +/** + * Azure management configuration extracted from stack settings + */ +export type SyncAcquireResponseDeploymentManagementConfigAzure = { + /** + * The managing Azure Tenant ID for cross-tenant access + */ + managingTenantId: string; + /** + * OIDC issuer URL trusted by the target-side managed identity. + */ + oidcIssuer: string; + /** + * OIDC subject claim trusted by the target-side managed identity. + */ + oidcSubject: string; + platform: SyncAcquireResponseDeploymentConfigPlatformAzure; +}; + +export const SyncAcquireResponseDeploymentConfigPlatformGcp = { + Gcp: "gcp", +} as const; +export type SyncAcquireResponseDeploymentConfigPlatformGcp = ClosedEnum< + typeof SyncAcquireResponseDeploymentConfigPlatformGcp +>; + +/** + * GCP management configuration extracted from stack settings + */ +export type SyncAcquireResponseDeploymentManagementConfigGcp = { + /** + * Service account email for management roles + */ + serviceAccountEmail: string; + platform: SyncAcquireResponseDeploymentConfigPlatformGcp; +}; + +export const SyncAcquireResponseDeploymentConfigPlatformAws = { + Aws: "aws", +} as const; +export type SyncAcquireResponseDeploymentConfigPlatformAws = ClosedEnum< + typeof SyncAcquireResponseDeploymentConfigPlatformAws +>; + +/** + * AWS management configuration extracted from stack settings + */ +export type SyncAcquireResponseDeploymentManagementConfigAws = { + /** + * The managing AWS IAM role ARN that can assume cross-account roles + */ + managingRoleArn: string; + platform: SyncAcquireResponseDeploymentConfigPlatformAws; +}; + +export type SyncAcquireResponseDeploymentManagementConfigUnion = + | SyncAcquireResponseDeploymentManagementConfigAzure + | SyncAcquireResponseDeploymentManagementConfigAws + | SyncAcquireResponseDeploymentManagementConfigGcp + | SyncAcquireResponseDeploymentManagementConfigKubernetes + | any; + +/** + * OTLP log export configuration for a deployment. + * + * @remarks + * + * When set, injected compute runtimes export captured application logs + * through the given endpoint via OTLP/HTTP; which resources are injected + * is platform-dependent. Workers read auth headers from a runtime-only + * secret. Runtime-less Containers and Daemons receive standard OTEL auth + * variables only at the final hosting boundary: Local passes them directly + * to the process and Kubernetes projects them from a per-workload Secret. + */ +export type SyncAcquireResponseDeploymentMonitoring = { + /** + * Auth header value in "key=value,..." format. + * + * @remarks + * Example: "authorization=Bearer " + */ + logsAuthHeader: string; + /** + * Full OTLP logs endpoint URL. + * + * @remarks + * Example: "https:///v1/logs" + */ + logsEndpoint: string; + /** + * Auth header value for the metrics endpoint in "key=value,..." format (optional). + * + * @remarks + * + * When absent, `logs_auth_header` is reused for metrics -- suitable when the same + * credential covers both signals. When present (e.g. Axiom with separate datasets), + * this value is used exclusively for metrics. + * + * Example: "authorization=Bearer ,x-axiom-dataset=" + */ + metricsAuthHeader?: string | null | undefined; + /** + * Full OTLP metrics endpoint URL (optional). + * + * @remarks + * When set, the worker runtime exports its own VM/container orchestration metrics here. + * Example: "https://api.axiom.co/v1/metrics" + */ + metricsEndpoint?: string | null | undefined; + /** + * Resource attributes attached to every OTLP signal emitted for this deployment. + * + * @remarks + * + * Platform managers use this for stable identity such as `alien.workspace_id`, + * `alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`. + * Runtime-specific resource attributes such as `service.name` remain owned by + * the runtime/exporter. + */ + resourceAttributes?: { [k: string]: string } | undefined; +}; + +export type SyncAcquireResponseDeploymentMonitoringUnion = + | SyncAcquireResponseDeploymentMonitoring + | any; + +/** + * Failure-domain policy selected for a compute pool. + */ +export type SyncAcquireResponseDeploymentFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type SyncAcquireResponseDeploymentFailureDomainsUnion2 = + | SyncAcquireResponseDeploymentFailureDomains2 + | any; + +export type SyncAcquireResponseDeploymentPoolsAutoscale = { + failureDomains?: + | SyncAcquireResponseDeploymentFailureDomains2 + | any + | null + | undefined; + /** + * Provider machine type selected for this deployment. + */ + machine?: string | null | undefined; + /** + * Maximum machine count. + */ + max: number; + /** + * Minimum machine count. + */ + min: number; + mode: "autoscale"; +}; + +/** + * Failure-domain policy selected for a compute pool. + */ +export type SyncAcquireResponseDeploymentFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type SyncAcquireResponseDeploymentFailureDomainsUnion1 = + | SyncAcquireResponseDeploymentFailureDomains1 + | any; + +export type SyncAcquireResponseDeploymentPoolsFixed = { + failureDomains?: + | SyncAcquireResponseDeploymentFailureDomains1 + | any + | null + | undefined; + /** + * Provider machine type selected for this deployment. + */ + machine?: string | null | undefined; + /** + * Number of machines to run. + */ + machines: number; + mode: "fixed"; +}; + +/** + * User-selected deployment settings for one compute pool. + */ +export type SyncAcquireResponseDeploymentPoolsUnion = + | SyncAcquireResponseDeploymentPoolsFixed + | SyncAcquireResponseDeploymentPoolsAutoscale; + +/** + * Deployment-time compute choices for Alien-managed compute pools. + * + * @remarks + * + * Application source declares portable pool requirements. This settings + * object stores the concrete choices made for one deployment, such as the + * provider machine type and selected machine counts. + */ +export type SyncAcquireResponseDeploymentCompute = { + /** + * Selected compute choices keyed by pool ID. + */ + pools?: { + [k: string]: + | SyncAcquireResponseDeploymentPoolsFixed + | SyncAcquireResponseDeploymentPoolsAutoscale; + } | undefined; +}; + +export type SyncAcquireResponseDeploymentComputeUnion = + | SyncAcquireResponseDeploymentCompute + | any; + +/** + * Deployment model: how updates are delivered to the remote environment. + */ +export const SyncAcquireResponseDeploymentDeploymentModel = { + Push: "push", + Pull: "pull", +} as const; +/** + * Deployment model: how updates are delivered to the remote environment. + */ +export type SyncAcquireResponseDeploymentDeploymentModel = ClosedEnum< + typeof SyncAcquireResponseDeploymentDeploymentModel +>; + +export type SyncAcquireResponseDeploymentAwsStackSettings = { + certificateArn: string; +}; + +export type SyncAcquireResponseDeploymentStackSettingsAwsUnion = + | SyncAcquireResponseDeploymentAwsStackSettings + | any; + +export type SyncAcquireResponseDeploymentAzureStackSettings = { + keyVaultCertificateId: string; + keyVaultResourceId?: string | null | undefined; +}; + +export type SyncAcquireResponseDeploymentStackSettingsAzureUnion = + | SyncAcquireResponseDeploymentAzureStackSettings + | any; + +export type SyncAcquireResponseDeploymentGcpStackSettings = { + certificateName: string; +}; + +export type SyncAcquireResponseDeploymentStackSettingsGcpUnion = + | SyncAcquireResponseDeploymentGcpStackSettings + | any; + +/** + * Namespace-scoped Kubernetes TLS Secret reference. + */ +export type SyncAcquireResponseDeploymentTlsSecretRef = { + /** + * Secret namespace. Defaults to the release namespace when omitted. + */ + namespace?: string | null | undefined; + /** + * Secret name. + */ + secretName: string; +}; + +export type SyncAcquireResponseDeploymentDomainsKubernetes = { + /** + * Namespace-scoped Kubernetes TLS Secret reference. + */ + tlsSecretRef: SyncAcquireResponseDeploymentTlsSecretRef; +}; + +export type SyncAcquireResponseDeploymentDomainsKubernetesUnion = + | SyncAcquireResponseDeploymentDomainsKubernetes + | any; + +/** + * Platform-specific certificate references for custom domains. + */ +export type SyncAcquireResponseDeploymentDomainsCertificate = { + aws?: SyncAcquireResponseDeploymentAwsStackSettings | any | null | undefined; + azure?: + | SyncAcquireResponseDeploymentAzureStackSettings + | any + | null + | undefined; + gcp?: SyncAcquireResponseDeploymentGcpStackSettings | any | null | undefined; + kubernetes?: + | SyncAcquireResponseDeploymentDomainsKubernetes + | any + | null + | undefined; +}; + +/** + * Custom domain configuration for a single resource. + */ +export type SyncAcquireResponseDeploymentCustomDomains = { + /** + * Platform-specific certificate references for custom domains. + */ + certificate: SyncAcquireResponseDeploymentDomainsCertificate; + /** + * Fully qualified domain name to use. + */ + domain: string; +}; + +export const SyncAcquireResponseDeploymentModeLoadBalancer = { + LoadBalancer: "loadBalancer", +} as const; +export type SyncAcquireResponseDeploymentModeLoadBalancer = ClosedEnum< + typeof SyncAcquireResponseDeploymentModeLoadBalancer +>; + +export type SyncAcquireResponseDeploymentPublicEndpointTargetLoadBalancer = { + /** + * DNS name or URL for the external load balancer. + */ + cnameTarget: string; + mode: SyncAcquireResponseDeploymentModeLoadBalancer; +}; + +export const SyncAcquireResponseDeploymentModeMachineAddresses = { + MachineAddresses: "machineAddresses", +} as const; +export type SyncAcquireResponseDeploymentModeMachineAddresses = ClosedEnum< + typeof SyncAcquireResponseDeploymentModeMachineAddresses +>; + +export type SyncAcquireResponseDeploymentPublicEndpointTargetMachineAddresses = + { + mode: SyncAcquireResponseDeploymentModeMachineAddresses; + }; + +export type SyncAcquireResponseDeploymentPublicEndpointTargetUnion = + | SyncAcquireResponseDeploymentPublicEndpointTargetLoadBalancer + | SyncAcquireResponseDeploymentPublicEndpointTargetMachineAddresses + | any; + +/** + * Domain configuration for the stack. + * + * @remarks + * + * When `custom_domains` is set, the specified resources use customer-provided + * domains and certificates. Otherwise, Alien auto-generates domains. + */ +export type SyncAcquireResponseDeploymentDomains = { + /** + * Custom domain configuration per resource ID. + */ + customDomains?: + | { [k: string]: SyncAcquireResponseDeploymentCustomDomains } + | null + | undefined; + publicEndpointTarget?: + | SyncAcquireResponseDeploymentPublicEndpointTargetLoadBalancer + | SyncAcquireResponseDeploymentPublicEndpointTargetMachineAddresses + | any + | null + | undefined; +}; + +export type SyncAcquireResponseDeploymentDomainsUnion = + | SyncAcquireResponseDeploymentDomains + | any; + +/** + * External bindings for pre-existing infrastructure. + * + * @remarks + * Allows using existing resources (MinIO, Redis, shared Container Apps + * Environment, etc.) instead of having Alien provision them. + * Required for Kubernetes platform, optional for cloud platforms. + */ +export type SyncAcquireResponseDeploymentStackSettingsExternalBindings = {}; + +/** + * How heartbeat health checks are handled. + */ +export const SyncAcquireResponseDeploymentHeartbeats = { + Off: "off", + On: "on", +} as const; +/** + * How heartbeat health checks are handled. + */ +export type SyncAcquireResponseDeploymentHeartbeats = ClosedEnum< + typeof SyncAcquireResponseDeploymentHeartbeats +>; + +/** + * Optional provider-specific identity for a cloud-backed Kubernetes cluster. + */ +export type SyncAcquireResponseDeploymentCloud = { + accountId?: string | null | undefined; + clusterId?: string | null | undefined; + clusterName?: string | null | undefined; + projectId?: string | null | undefined; + region?: string | null | undefined; + resourceGroup?: string | null | undefined; + subscriptionId?: string | null | undefined; +}; + +export type SyncAcquireResponseDeploymentCloudUnion = + | SyncAcquireResponseDeploymentCloud + | any; + +/** + * Ownership model for the Kubernetes cluster. + */ +export const SyncAcquireResponseDeploymentOwnership = { + Managed: "managed", + Existing: "existing", + External: "external", +} as const; +/** + * Ownership model for the Kubernetes cluster. + */ +export type SyncAcquireResponseDeploymentOwnership = ClosedEnum< + typeof SyncAcquireResponseDeploymentOwnership +>; + +/** + * Kubernetes cluster setup settings. + */ +export type SyncAcquireResponseDeploymentCluster = { + cloud?: SyncAcquireResponseDeploymentCloud | any | null | undefined; + /** + * Namespace where the Alien chart and application resources run. + */ + namespace?: string | null | undefined; + /** + * Ownership model for the Kubernetes cluster. + */ + ownership: SyncAcquireResponseDeploymentOwnership; +}; + +export type SyncAcquireResponseDeploymentClusterUnion = + | SyncAcquireResponseDeploymentCluster + | any; + +export type SyncAcquireResponseDeploymentCertificateNone2 = { + mode: "none"; +}; + +export type SyncAcquireResponseDeploymentCertificateManagedTLSSecret2 = { + mode: "managedTlsSecret"; + /** + * Secret name template. Runtime may substitute resource/deployment tokens. + */ + secretNameTemplate: string; +}; + +export type SyncAcquireResponseDeploymentCertificateAwsAcmArn2 = { + /** + * Existing ACM certificate ARN. + */ + certificateArn: string; + mode: "awsAcmArn"; +}; + +export type SyncAcquireResponseDeploymentCertificateManagedAcmImport2 = { + mode: "managedAcmImport"; + /** + * ACM region. Defaults to the deployment region when omitted. + */ + region?: string | null | undefined; + /** + * Tags applied to runtime-imported ACM certificates. + */ + tags?: { [k: string]: string } | undefined; +}; + +/** + * Namespace-scoped Kubernetes TLS Secret reference. + */ +export type SyncAcquireResponseDeploymentCertificateTLSSecretRef2 = { + /** + * Secret namespace. Defaults to the release namespace when omitted. + */ + namespace?: string | null | undefined; + /** + * Secret name. + */ + secretName: string; + mode: "tlsSecretRef"; +}; + +/** + * Certificate publication or reference mode for Kubernetes public endpoints. + */ +export type SyncAcquireResponseDeploymentCertificateUnion2 = + | SyncAcquireResponseDeploymentCertificateTLSSecretRef2 + | SyncAcquireResponseDeploymentCertificateManagedAcmImport2 + | SyncAcquireResponseDeploymentCertificateAwsAcmArn2 + | SyncAcquireResponseDeploymentCertificateManagedTLSSecret2 + | SyncAcquireResponseDeploymentCertificateNone2; + +export const SyncAcquireResponseDeploymentModeCustom = { + Custom: "custom", +} as const; +export type SyncAcquireResponseDeploymentModeCustom = ClosedEnum< + typeof SyncAcquireResponseDeploymentModeCustom +>; + +export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4 = + ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4 + >; + +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers4 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum4; + }; + +export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum4 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum4 +>; + +export type SyncAcquireResponseDeploymentProviderGkeGateway4 = { + provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum4; + /** + * Optional static address name for the Gateway frontend. + */ + staticAddressName?: string | null | undefined; +}; + +export const SyncAcquireResponseDeploymentProviderAwsAlbEnum4 = { + AwsAlb: "awsAlb", +} as const; +export type SyncAcquireResponseDeploymentProviderAwsAlbEnum4 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum4 +>; + +export type SyncAcquireResponseDeploymentProviderAwsAlb4 = { + /** + * Optional ALB IP address type, such as `dualstack`. + */ + ipAddressType?: string | null | undefined; + provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum4; + /** + * Internet-facing or internal ALB scheme. + */ + scheme: string; + /** + * Explicit subnet IDs when the profile cannot rely on controller discovery. + */ + subnetIds?: Array | undefined; + /** + * ALB target type, usually `ip`. + */ + targetType: string; +}; + +export type SyncAcquireResponseDeploymentProviderUnion4 = + | SyncAcquireResponseDeploymentProviderAwsAlb4 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers4 + | SyncAcquireResponseDeploymentProviderGkeGateway4 + | any; + +/** + * Shared Gateway API route profile values. + */ +export type SyncAcquireResponseDeploymentRouteGateway2 = { + /** + * Annotations applied to route objects. + */ + annotations?: { [k: string]: string } | undefined; + /** + * Route controller identifier, for example a cloud Gateway controller. + */ + controller?: string | null | undefined; + /** + * GatewayClass selected for generated Gateways. + */ + gatewayClassName: string; + /** + * Labels applied to route objects. + */ + labels?: { [k: string]: string } | undefined; + /** + * Listener port, usually 443. + */ + listenerPort: number; + provider?: + | SyncAcquireResponseDeploymentProviderAwsAlb4 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers4 + | SyncAcquireResponseDeploymentProviderGkeGateway4 + | any + | null + | undefined; + routeApi: "gateway"; +}; + +export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3 = + ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3 + >; + +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers3 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum3; + }; + +export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum3 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum3 +>; + +export type SyncAcquireResponseDeploymentProviderGkeGateway3 = { + provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum3; + /** + * Optional static address name for the Gateway frontend. + */ + staticAddressName?: string | null | undefined; +}; + +export const SyncAcquireResponseDeploymentProviderAwsAlbEnum3 = { + AwsAlb: "awsAlb", +} as const; +export type SyncAcquireResponseDeploymentProviderAwsAlbEnum3 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum3 +>; + +export type SyncAcquireResponseDeploymentProviderAwsAlb3 = { + /** + * Optional ALB IP address type, such as `dualstack`. + */ + ipAddressType?: string | null | undefined; + provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum3; + /** + * Internet-facing or internal ALB scheme. + */ + scheme: string; + /** + * Explicit subnet IDs when the profile cannot rely on controller discovery. + */ + subnetIds?: Array | undefined; + /** + * ALB target type, usually `ip`. + */ + targetType: string; +}; + +export type SyncAcquireResponseDeploymentProviderUnion3 = + | SyncAcquireResponseDeploymentProviderAwsAlb3 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers3 + | SyncAcquireResponseDeploymentProviderGkeGateway3 + | any; + +/** + * Shared Ingress route profile values. + */ +export type SyncAcquireResponseDeploymentRouteIngress2 = { + /** + * Annotations applied to route objects. + */ + annotations?: { [k: string]: string } | undefined; + /** + * Route controller identifier, for example `eks.amazonaws.com/alb`. + */ + controller?: string | null | undefined; + /** + * `spec.ingressClassName` for generated Ingresses. + */ + ingressClassName: string; + /** + * Labels applied to route objects. + */ + labels?: { [k: string]: string } | undefined; + provider?: + | SyncAcquireResponseDeploymentProviderAwsAlb3 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers3 + | SyncAcquireResponseDeploymentProviderGkeGateway3 + | any + | null + | undefined; + routeApi: "ingress"; +}; + +/** + * Kubernetes route API selected for public endpoints. + */ +export type SyncAcquireResponseDeploymentRouteUnion2 = + | SyncAcquireResponseDeploymentRouteIngress2 + | SyncAcquireResponseDeploymentRouteGateway2; + +export type SyncAcquireResponseDeploymentExposureCustom = { + /** + * Certificate publication or reference mode for Kubernetes public endpoints. + */ + certificate: + | SyncAcquireResponseDeploymentCertificateTLSSecretRef2 + | SyncAcquireResponseDeploymentCertificateManagedAcmImport2 + | SyncAcquireResponseDeploymentCertificateAwsAcmArn2 + | SyncAcquireResponseDeploymentCertificateManagedTLSSecret2 + | SyncAcquireResponseDeploymentCertificateNone2; + /** + * Hostname routed by the Kubernetes public endpoint. + */ + domain: string; + mode: SyncAcquireResponseDeploymentModeCustom; + /** + * Kubernetes route API selected for public endpoints. + */ + route: + | SyncAcquireResponseDeploymentRouteIngress2 + | SyncAcquireResponseDeploymentRouteGateway2; +}; + +export type SyncAcquireResponseDeploymentCertificateNone1 = { + mode: "none"; +}; + +export type SyncAcquireResponseDeploymentCertificateManagedTLSSecret1 = { + mode: "managedTlsSecret"; + /** + * Secret name template. Runtime may substitute resource/deployment tokens. + */ + secretNameTemplate: string; +}; + +export type SyncAcquireResponseDeploymentCertificateAwsAcmArn1 = { + /** + * Existing ACM certificate ARN. + */ + certificateArn: string; + mode: "awsAcmArn"; +}; + +export type SyncAcquireResponseDeploymentCertificateManagedAcmImport1 = { + mode: "managedAcmImport"; + /** + * ACM region. Defaults to the deployment region when omitted. + */ + region?: string | null | undefined; + /** + * Tags applied to runtime-imported ACM certificates. + */ + tags?: { [k: string]: string } | undefined; +}; + +/** + * Namespace-scoped Kubernetes TLS Secret reference. + */ +export type SyncAcquireResponseDeploymentCertificateTLSSecretRef1 = { + /** + * Secret namespace. Defaults to the release namespace when omitted. + */ + namespace?: string | null | undefined; + /** + * Secret name. + */ + secretName: string; + mode: "tlsSecretRef"; +}; + +/** + * Certificate publication or reference mode for Kubernetes public endpoints. + */ +export type SyncAcquireResponseDeploymentCertificateUnion1 = + | SyncAcquireResponseDeploymentCertificateTLSSecretRef1 + | SyncAcquireResponseDeploymentCertificateManagedAcmImport1 + | SyncAcquireResponseDeploymentCertificateAwsAcmArn1 + | SyncAcquireResponseDeploymentCertificateManagedTLSSecret1 + | SyncAcquireResponseDeploymentCertificateNone1; + +export const SyncAcquireResponseDeploymentModeGenerated = { + Generated: "generated", +} as const; +export type SyncAcquireResponseDeploymentModeGenerated = ClosedEnum< + typeof SyncAcquireResponseDeploymentModeGenerated +>; + +export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2 = + ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2 + >; + +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers2 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum2; + }; + +export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum2 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum2 +>; + +export type SyncAcquireResponseDeploymentProviderGkeGateway2 = { + provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum2; + /** + * Optional static address name for the Gateway frontend. + */ + staticAddressName?: string | null | undefined; +}; + +export const SyncAcquireResponseDeploymentProviderAwsAlbEnum2 = { + AwsAlb: "awsAlb", +} as const; +export type SyncAcquireResponseDeploymentProviderAwsAlbEnum2 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum2 +>; + +export type SyncAcquireResponseDeploymentProviderAwsAlb2 = { + /** + * Optional ALB IP address type, such as `dualstack`. + */ + ipAddressType?: string | null | undefined; + provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum2; + /** + * Internet-facing or internal ALB scheme. + */ + scheme: string; + /** + * Explicit subnet IDs when the profile cannot rely on controller discovery. + */ + subnetIds?: Array | undefined; + /** + * ALB target type, usually `ip`. + */ + targetType: string; +}; + +export type SyncAcquireResponseDeploymentProviderUnion2 = + | SyncAcquireResponseDeploymentProviderAwsAlb2 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers2 + | SyncAcquireResponseDeploymentProviderGkeGateway2 + | any; + +/** + * Shared Gateway API route profile values. + */ +export type SyncAcquireResponseDeploymentRouteGateway1 = { + /** + * Annotations applied to route objects. + */ + annotations?: { [k: string]: string } | undefined; + /** + * Route controller identifier, for example a cloud Gateway controller. + */ + controller?: string | null | undefined; + /** + * GatewayClass selected for generated Gateways. + */ + gatewayClassName: string; + /** + * Labels applied to route objects. + */ + labels?: { [k: string]: string } | undefined; + /** + * Listener port, usually 443. + */ + listenerPort: number; + provider?: + | SyncAcquireResponseDeploymentProviderAwsAlb2 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers2 + | SyncAcquireResponseDeploymentProviderGkeGateway2 + | any + | null + | undefined; + routeApi: "gateway"; +}; + +export const SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1 = + ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1 + >; + +export type SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers1 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainersEnum1; + }; + +export const SyncAcquireResponseDeploymentProviderGkeGatewayEnum1 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncAcquireResponseDeploymentProviderGkeGatewayEnum1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderGkeGatewayEnum1 +>; + +export type SyncAcquireResponseDeploymentProviderGkeGateway1 = { + provider: SyncAcquireResponseDeploymentProviderGkeGatewayEnum1; + /** + * Optional static address name for the Gateway frontend. + */ + staticAddressName?: string | null | undefined; +}; + +export const SyncAcquireResponseDeploymentProviderAwsAlbEnum1 = { + AwsAlb: "awsAlb", +} as const; +export type SyncAcquireResponseDeploymentProviderAwsAlbEnum1 = ClosedEnum< + typeof SyncAcquireResponseDeploymentProviderAwsAlbEnum1 +>; + +export type SyncAcquireResponseDeploymentProviderAwsAlb1 = { + /** + * Optional ALB IP address type, such as `dualstack`. + */ + ipAddressType?: string | null | undefined; + provider: SyncAcquireResponseDeploymentProviderAwsAlbEnum1; + /** + * Internet-facing or internal ALB scheme. + */ + scheme: string; + /** + * Explicit subnet IDs when the profile cannot rely on controller discovery. + */ + subnetIds?: Array | undefined; + /** + * ALB target type, usually `ip`. + */ + targetType: string; +}; + +export type SyncAcquireResponseDeploymentProviderUnion1 = + | SyncAcquireResponseDeploymentProviderAwsAlb1 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers1 + | SyncAcquireResponseDeploymentProviderGkeGateway1 + | any; + +/** + * Shared Ingress route profile values. + */ +export type SyncAcquireResponseDeploymentRouteIngress1 = { + /** + * Annotations applied to route objects. + */ + annotations?: { [k: string]: string } | undefined; + /** + * Route controller identifier, for example `eks.amazonaws.com/alb`. + */ + controller?: string | null | undefined; + /** + * `spec.ingressClassName` for generated Ingresses. + */ + ingressClassName: string; + /** + * Labels applied to route objects. + */ + labels?: { [k: string]: string } | undefined; + provider?: + | SyncAcquireResponseDeploymentProviderAwsAlb1 + | SyncAcquireResponseDeploymentProviderAzureApplicationGatewayForContainers1 + | SyncAcquireResponseDeploymentProviderGkeGateway1 + | any + | null + | undefined; + routeApi: "ingress"; +}; + +/** + * Kubernetes route API selected for public endpoints. + */ +export type SyncAcquireResponseDeploymentRouteUnion1 = + | SyncAcquireResponseDeploymentRouteIngress1 + | SyncAcquireResponseDeploymentRouteGateway1; + +export type SyncAcquireResponseDeploymentExposureGenerated = { + /** + * Certificate publication or reference mode for Kubernetes public endpoints. + */ + certificate: + | SyncAcquireResponseDeploymentCertificateTLSSecretRef1 + | SyncAcquireResponseDeploymentCertificateManagedAcmImport1 + | SyncAcquireResponseDeploymentCertificateAwsAcmArn1 + | SyncAcquireResponseDeploymentCertificateManagedTLSSecret1 + | SyncAcquireResponseDeploymentCertificateNone1; + mode: SyncAcquireResponseDeploymentModeGenerated; + /** + * Kubernetes route API selected for public endpoints. + */ + route: + | SyncAcquireResponseDeploymentRouteIngress1 + | SyncAcquireResponseDeploymentRouteGateway1; +}; + +export const SyncAcquireResponseDeploymentModeDisabled = { + Disabled: "disabled", +} as const; +export type SyncAcquireResponseDeploymentModeDisabled = ClosedEnum< + typeof SyncAcquireResponseDeploymentModeDisabled +>; + +export type SyncAcquireResponseDeploymentExposureDisabled = { + mode: SyncAcquireResponseDeploymentModeDisabled; +}; + +export type SyncAcquireResponseDeploymentExposureUnion = + | SyncAcquireResponseDeploymentExposureCustom + | SyncAcquireResponseDeploymentExposureGenerated + | SyncAcquireResponseDeploymentExposureDisabled + | any; + +/** + * Kubernetes runtime substrate configuration. + * + * @remarks + * + * This controls how setup chooses the cluster backing `Platform::Kubernetes` + * deployments. When omitted, cloud-backed Kubernetes deployments default to a + * managed cluster and generic/on-prem Kubernetes defaults to an external + * cluster. + */ +export type SyncAcquireResponseDeploymentKubernetes = { + cluster?: SyncAcquireResponseDeploymentCluster | any | null | undefined; + exposure?: + | SyncAcquireResponseDeploymentExposureCustom + | SyncAcquireResponseDeploymentExposureGenerated + | SyncAcquireResponseDeploymentExposureDisabled + | any + | null + | undefined; +}; + +export type SyncAcquireResponseDeploymentKubernetesUnion = + | SyncAcquireResponseDeploymentKubernetes + | any; + +export const SyncAcquireResponseDeploymentTypeByoVnetAzure = { + ByoVnetAzure: "byo-vnet-azure", +} as const; +export type SyncAcquireResponseDeploymentTypeByoVnetAzure = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeByoVnetAzure +>; + +export type SyncAcquireResponseDeploymentNetworkByoVnetAzure = { + /** + * Name of the dedicated classic Application Gateway subnet within the VNet. + */ + applicationGatewaySubnetName?: string | null | undefined; + /** + * Name of the dedicated subnet that hosts Private Endpoints (e.g. for a + * + * @remarks + * Postgres Flexible Server). A Private Endpoint must not share the private + * subnet, which is already claimed by the Container Apps environment's + * `infrastructure_subnet_id`. Required only when the stack contains a + * Postgres resource; otherwise unused. + */ + privateEndpointSubnetName?: string | null | undefined; + /** + * Name of the private subnet within the VNet + */ + privateSubnetName: string; + /** + * Name of the public subnet within the VNet + */ + publicSubnetName: string; + type: SyncAcquireResponseDeploymentTypeByoVnetAzure; + /** + * The full resource ID of the existing VNet + */ + vnetResourceId: string; +}; + +export const SyncAcquireResponseDeploymentTypeByoVpcGcp = { + ByoVpcGcp: "byo-vpc-gcp", +} as const; +export type SyncAcquireResponseDeploymentTypeByoVpcGcp = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeByoVpcGcp +>; + +export type SyncAcquireResponseDeploymentNetworkByoVpcGcp = { + /** + * The name of the existing VPC network + */ + networkName: string; + /** + * The region of the subnet + */ + region: string; + /** + * The name of the subnet to use + */ + subnetName: string; + type: SyncAcquireResponseDeploymentTypeByoVpcGcp; +}; + +export const SyncAcquireResponseDeploymentTypeByoVpcAws = { + ByoVpcAws: "byo-vpc-aws", +} as const; +export type SyncAcquireResponseDeploymentTypeByoVpcAws = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeByoVpcAws +>; + +export type SyncAcquireResponseDeploymentNetworkByoVpcAws = { + /** + * IDs of private subnets + */ + privateSubnetIds: Array; + /** + * IDs of public subnets (required for public ingress) + */ + publicSubnetIds: Array; + /** + * Optional security group IDs to use + */ + securityGroupIds?: Array | undefined; + type: SyncAcquireResponseDeploymentTypeByoVpcAws; + /** + * The ID of the existing VPC + */ + vpcId: string; +}; + +export const SyncAcquireResponseDeploymentTypeCreate = { + Create: "create", +} as const; +export type SyncAcquireResponseDeploymentTypeCreate = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeCreate +>; + +export type SyncAcquireResponseDeploymentNetworkCreate = { + /** + * Number of availability zones (default: 2). + */ + availabilityZones?: number | undefined; + /** + * VPC/VNet CIDR block. If not specified, auto-generated from stack ID + * + * @remarks + * to reduce conflicts (e.g., "10.{hash}.0.0/16"). + */ + cidr?: string | null | undefined; + type: SyncAcquireResponseDeploymentTypeCreate; +}; + +export const SyncAcquireResponseDeploymentTypeUseDefault = { + UseDefault: "use-default", +} as const; +export type SyncAcquireResponseDeploymentTypeUseDefault = ClosedEnum< + typeof SyncAcquireResponseDeploymentTypeUseDefault +>; + +export type SyncAcquireResponseDeploymentNetworkUseDefault = { + type: SyncAcquireResponseDeploymentTypeUseDefault; +}; + +export type SyncAcquireResponseDeploymentNetworkUnion = + | SyncAcquireResponseDeploymentNetworkByoVpcAws + | SyncAcquireResponseDeploymentNetworkByoVpcGcp + | SyncAcquireResponseDeploymentNetworkByoVnetAzure + | SyncAcquireResponseDeploymentNetworkUseDefault + | SyncAcquireResponseDeploymentNetworkCreate + | any; + +/** + * How telemetry (logs, metrics, traces) is handled. + */ +export const SyncAcquireResponseDeploymentTelemetry = { + Off: "off", + Auto: "auto", + ApprovalRequired: "approval-required", +} as const; +/** + * How telemetry (logs, metrics, traces) is handled. + */ +export type SyncAcquireResponseDeploymentTelemetry = ClosedEnum< + typeof SyncAcquireResponseDeploymentTelemetry +>; + +/** + * How updates are delivered to the deployment. + */ +export const SyncAcquireResponseDeploymentUpdates = { + Auto: "auto", + ApprovalRequired: "approval-required", +} as const; +/** + * How updates are delivered to the deployment. + */ +export type SyncAcquireResponseDeploymentUpdates = ClosedEnum< + typeof SyncAcquireResponseDeploymentUpdates +>; + +/** + * User-customizable deployment settings specified at deploy time. + * + * @remarks + * + * These settings are provided by the customer via CloudFormation parameters, + * Terraform attributes, CLI flags, or Helm values. They customize how the + * deployment runs and what capabilities are enabled. + * + * **Key distinction**: StackSettings is user-customizable, while ManagementConfig + * is platform-derived (from the Manager's ServiceAccount). + */ +export type SyncAcquireResponseDeploymentStackSettings = { + compute?: SyncAcquireResponseDeploymentCompute | any | null | undefined; + /** + * Deployment model: how updates are delivered to the remote environment. + */ + deploymentModel?: SyncAcquireResponseDeploymentDeploymentModel | undefined; + domains?: SyncAcquireResponseDeploymentDomains | any | null | undefined; + /** + * External bindings for pre-existing infrastructure. + * + * @remarks + * Allows using existing resources (MinIO, Redis, shared Container Apps + * Environment, etc.) instead of having Alien provision them. + * Required for Kubernetes platform, optional for cloud platforms. + */ + externalBindings?: + | SyncAcquireResponseDeploymentStackSettingsExternalBindings + | null + | undefined; + /** + * How heartbeat health checks are handled. + */ + heartbeats?: SyncAcquireResponseDeploymentHeartbeats | undefined; + kubernetes?: SyncAcquireResponseDeploymentKubernetes | any | null | undefined; + network?: + | SyncAcquireResponseDeploymentNetworkByoVpcAws + | SyncAcquireResponseDeploymentNetworkByoVpcGcp + | SyncAcquireResponseDeploymentNetworkByoVnetAzure + | SyncAcquireResponseDeploymentNetworkUseDefault + | SyncAcquireResponseDeploymentNetworkCreate + | any + | null + | undefined; + /** + * How telemetry (logs, metrics, traces) is handled. + */ + telemetry?: SyncAcquireResponseDeploymentTelemetry | undefined; + /** + * How updates are delivered to the deployment. + */ + updates?: SyncAcquireResponseDeploymentUpdates | undefined; +}; + +/** + * Deployment configuration + */ +export type SyncAcquireResponseDeploymentConfig = { + /** + * Allow frozen resource changes during updates + * + * @remarks + * When true, skips the frozen resources compatibility check. + * This requires running with elevated cloud credentials. + */ + allowFrozenChanges?: boolean | undefined; + basePlatform?: + | SyncAcquireResponseDeploymentBasePlatformEnum + | any + | null + | undefined; + computeBackend?: + | SyncAcquireResponseDeploymentComputeBackendHorizon + | any + | null + | undefined; + /** + * Human-readable deployment name for cloud console metadata. + * + * @remarks + * + * This is separate from the physical resource prefix in StackState. It is + * used only for display text such as IAM role descriptions, service + * account descriptions, and custom role titles. + */ + deploymentName?: string | null | undefined; + /** + * Deployment token for pull authentication with the manager's registry. + * + * @remarks + * + * Used by controllers to configure registry credentials so cloud platforms + * and K8s can pull images from the manager's `/v2/` endpoint. + */ + deploymentToken?: string | null | undefined; + domainMetadata?: + | SyncAcquireResponseDeploymentDomainMetadata + | any + | null + | undefined; + /** + * Snapshot of environment variables at a point in time + */ + environmentVariables: SyncAcquireResponseDeploymentEnvironmentVariables; + /** + * Map from resource ID to external binding. + * + * @remarks + * + * Validated at runtime: binding type must match resource type. + */ + externalBindings?: { + [k: string]: + | SyncAcquireResponseDeploymentExternalBindingsContainerAppsEnvironment + | SyncAcquireResponseDeploymentExternalBindingsS3 + | SyncAcquireResponseDeploymentExternalBindingsBlob + | SyncAcquireResponseDeploymentExternalBindingsGcs + | SyncAcquireResponseDeploymentExternalBindingsLocalStorage + | SyncAcquireResponseDeploymentExternalBindingsSqs + | SyncAcquireResponseDeploymentExternalBindingsPubsub + | SyncAcquireResponseDeploymentExternalBindingsServicebus + | SyncAcquireResponseDeploymentExternalBindingsLocalQueue + | SyncAcquireResponseDeploymentExternalBindingsDynamodb + | SyncAcquireResponseDeploymentExternalBindingsFirestore + | SyncAcquireResponseDeploymentExternalBindingsTablestorage + | SyncAcquireResponseDeploymentExternalBindingsRedis + | SyncAcquireResponseDeploymentExternalBindingsLocalKv + | SyncAcquireResponseDeploymentExternalBindingsEcr + | SyncAcquireResponseDeploymentExternalBindingsAcr + | SyncAcquireResponseDeploymentExternalBindingsGar + | SyncAcquireResponseDeploymentExternalBindingsLocal + | SyncAcquireResponseDeploymentExternalBindingsParameterStore + | SyncAcquireResponseDeploymentExternalBindingsSecretManager + | SyncAcquireResponseDeploymentExternalBindingsKeyVault + | SyncAcquireResponseDeploymentExternalBindingsKubernetesSecret + | SyncAcquireResponseDeploymentExternalBindingsLocalVault + | SyncAcquireResponseDeploymentExternalBindingsAurora + | SyncAcquireResponseDeploymentExternalBindingsCloudSQL + | SyncAcquireResponseDeploymentExternalBindingsFlexibleServer + | SyncAcquireResponseDeploymentExternalBindingsExternal + | SyncAcquireResponseDeploymentExternalBindingsLocalPostgres; + } | undefined; + /** + * Deployer-provided stack input values, keyed by input id. A resource + * + * @remarks + * gated with `.enabled(input)` and a Live lifecycle follows these + * values; a missing key falls back to the input's declared boolean + * default. Suppliers must not place secret-kind input values here: + * this map serializes and debug-prints unredacted. + */ + inputValues?: { [k: string]: any | null } | undefined; + /** + * DNS-style label domain used for Kubernetes resource ownership labels. + * + * @remarks + * + * Defaults to `alien.dev` when absent. Whitelabeled Operator builds set this + * so generated workloads and optional log collectors share the same label + * namespace. + */ + labelDomain?: string | null | undefined; + managementConfig?: + | SyncAcquireResponseDeploymentManagementConfigAzure + | SyncAcquireResponseDeploymentManagementConfigAws + | SyncAcquireResponseDeploymentManagementConfigGcp + | SyncAcquireResponseDeploymentManagementConfigKubernetes + | any + | null + | undefined; + /** + * Manager base URL (e.g., "https://manager.alien.dev"). + * + * @remarks + * + * The manager IS the container registry — its `/v2/` endpoint serves as + * the OCI Distribution API. Controllers derive the proxy host from this + * to configure pull auth (RegistryCredentials, imagePullSecrets). + * + * When None (e.g., `alien dev`), controllers use image URIs as-is. + */ + managerUrl?: string | null | undefined; + monitoring?: SyncAcquireResponseDeploymentMonitoring | any | null | undefined; + /** + * Native image registry host+prefix for platforms that require it. + * + * @remarks + * + * Lambda (ECR) and Cloud Run (GAR) require native registry URIs. Other + * runtimes, including Azure Container Apps, pull through the manager's + * registry proxy. + * + * Derived by the manager from the artifact registry binding: + * - ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}` + * - GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}` + */ + nativeImageHost?: string | null | undefined; + /** + * When true the observe pass reports raw resources across every namespace + * + * @remarks + * (cluster scope); otherwise it stays within the operator's own namespace. + * The label selector, if any, still filters within whichever scope applies. + * Ignored by cloud observers. + */ + observeAllNamespaces?: boolean | undefined; + /** + * Kubernetes label selector that narrows which raw resources the observe + * + * @remarks + * pass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes + * everything in the namespace. Ignored by cloud observers. + */ + observeLabelSelector?: string | null | undefined; + /** + * Public endpoint URLs for exposed resources (optional override). + * + * @remarks + * + * Use this only when a caller already knows the public URL. Managed public + * endpoint flows should prefer `domain_metadata` plus controller-reported + * load balancer outputs so DNS, certificate renewal, and route readiness + * stay tied to the resource state. + * + * If not set, platforms determine public endpoint URLs from other sources: + * - Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS + * - Local: `http://localhost:{allocated_port}` + * - Custom or disabled exposure: no public endpoint URL unless a controller reports one + * + * Outer key: resource ID. Inner key: endpoint name. Value: public URL. + */ + publicEndpoints?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * User-customizable deployment settings specified at deploy time. + * + * @remarks + * + * These settings are provided by the customer via CloudFormation parameters, + * Terraform attributes, CLI flags, or Helm values. They customize how the + * deployment runs and what capabilities are enabled. + * + * **Key distinction**: StackSettings is user-customizable, while ManagementConfig + * is platform-derived (from the Manager's ServiceAccount). + */ + stackSettings?: SyncAcquireResponseDeploymentStackSettings | undefined; +}; + +export type SyncAcquireResponseDeployment = { + /** + * ID of the deployment + */ + deploymentId: string; + /** + * Project ID the deployment belongs to + */ + projectId: string; + /** + * Deployment group ID the deployment belongs to + */ + deploymentGroupId: string; + setupMethod?: DeploymentSetupMethod | undefined; + /** + * Current deployment state (includes releases) + */ + current: SyncAcquireResponseDeploymentCurrent; + /** + * Deployment configuration + */ + config: SyncAcquireResponseDeploymentConfig; +}; + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseTypeStringList$inboundSchema: + z.ZodEnum = + z.enum(SyncAcquireResponseDeploymentCurrentReleaseTypeStringList); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList, + unknown + > = z.object({ + type: + SyncAcquireResponseDeploymentCurrentReleaseTypeStringList$inboundSchema, + value: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseDefaultStringListFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseTypeBoolean$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeBoolean); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean, + unknown + > = z.object({ + type: SyncAcquireResponseDeploymentCurrentReleaseTypeBoolean$inboundSchema, + value: z.boolean(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseDefaultBooleanFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseTypeNumber$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeNumber); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema: + z.ZodType = + z.object({ + type: SyncAcquireResponseDeploymentCurrentReleaseTypeNumber$inboundSchema, + value: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseDefaultNumberFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseTypeString$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeString); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema: + z.ZodType = + z.object({ + type: SyncAcquireResponseDeploymentCurrentReleaseTypeString$inboundSchema, + value: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseDefaultStringFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseDefaultString, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultString' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseDefaultUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseTypeUnion$inboundSchema: + z.ZodType = z + .union([ + SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum$inboundSchema, + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseTypeUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseTypeUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseTypeUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseTypeUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseEnv$inboundSchema: + z.ZodType = z.object( + { + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum$inboundSchema, + z.any(), + ]), + ).optional(), + }, + ); + +export function syncAcquireResponseDeploymentCurrentReleaseEnvFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseEnv, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseEnv$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseEnv' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseKind$inboundSchema: + z.ZodEnum = z.enum( + SyncAcquireResponseDeploymentCurrentReleaseKind, + ); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleasePlatform$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleasePlatform); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProvidedBy$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseProvidedBy); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema: + z.ZodType = z + .object({ + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseValidationFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseValidation, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseValidation' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseValidationUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseValidationUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseValidationUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseValidationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseValidationUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseValidationUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseInput$inboundSchema: + z.ZodType = z + .object({ + default: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseEnv$inboundSchema + ), + ).optional(), + id: z.string(), + kind: SyncAcquireResponseDeploymentCurrentReleaseKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array( + SyncAcquireResponseDeploymentCurrentReleasePlatform$inboundSchema, + ), + ).optional(), + providedBy: z.array( + SyncAcquireResponseDeploymentCurrentReleaseProvidedBy$inboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema + ), + z.any(), + ]), + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseInputFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseInput, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseInput$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseInput' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseManagementEnum$inboundSchema: + z.ZodEnum = + z.enum(SyncAcquireResponseDeploymentCurrentReleaseManagementEnum); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideEffect$inboundSchema: + z.ZodEnum = + z.enum(SyncAcquireResponseDeploymentCurrentReleaseOverrideEffect); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncAcquireResponseDeploymentCurrentReleaseOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAw, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAw' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure$inboundSchema: + z.ZodType = + z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideConditionResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideConditionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp$inboundSchema + )), + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverridePlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms$inboundSchema + ), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverride, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverride' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema + ), + z.string(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseOverrideUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema: + z.ZodType = z + .object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema + ), + z.string(), + ])), + ), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseManagement2FromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseManagement2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseManagement2' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAwBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendEffect$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseExtendEffect); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant$inboundSchema: + z.ZodType = + z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAwGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncAcquireResponseDeploymentCurrentReleaseExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAwFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAw, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAw' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendConditionResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendCondition, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendConditionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendCondition, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendCondition' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendGcp$inboundSchema + )), + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendPlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms$inboundSchema + ), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtend, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtend' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseExtendUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema + ), + z.string(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseExtendUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseExtendUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseExtendUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema: + z.ZodType = z + .object({ + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema + ), + z.string(), + ])), + ), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseManagement1FromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseManagement1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseManagement1' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseManagementUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseManagementUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema + ), + SyncAcquireResponseDeploymentCurrentReleaseManagementEnum$inboundSchema, + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseManagementUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseManagementUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseManagementUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseManagementUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAwBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileEffect$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseProfileEffect); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAwGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncAcquireResponseDeploymentCurrentReleaseProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAwFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAw, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAw' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzure$inboundSchema: + z.ZodType = + z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileConditionResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileCondition, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileConditionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileCondition, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileCondition' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack$inboundSchema + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfileGcp$inboundSchema + )), + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfilePlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms$inboundSchema + ), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfile, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfile' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseProfileUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema + ), + z.string(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseProfileUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseProfileUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseProfileUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleasePermissions$inboundSchema: + z.ZodType = z + .object({ + management: z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema + ), + SyncAcquireResponseDeploymentCurrentReleaseManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema + ), + z.string(), + ]), + ), + ), + ), + }); + +export function syncAcquireResponseDeploymentCurrentReleasePermissionsFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleasePermissions, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleasePermissions$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleasePermissions' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseConfig$inboundSchema: + z.ZodType = + collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, + ); + +export function syncAcquireResponseDeploymentCurrentReleaseConfigFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseConfig, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseConfig$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseConfig' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseDependency$inboundSchema: + z.ZodType = z + .object({ + id: z.string(), + type: z.string(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseDependencyFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseDependency, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseDependency$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDependency' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseLifecycle$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentCurrentReleaseLifecycle); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseResources$inboundSchema: + z.ZodType = z + .object({ + config: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseConfig$inboundSchema + ), + dependencies: z.array( + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseDependency$inboundSchema + ), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: + SyncAcquireResponseDeploymentCurrentReleaseLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseResourcesFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseResources, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseResources$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseResources' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform + > = z.enum(SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform); + +/** @internal */ +export const SyncAcquireResponseDeploymentCurrentReleaseStack$inboundSchema: + z.ZodType = z + .object({ + id: z.string(), + inputs: z.array( + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseInput$inboundSchema + ), + ).optional(), + permissions: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleasePermissions$inboundSchema + ).optional(), + resources: z.record( + z.string(), + z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseResources$inboundSchema + ), + ), + supportedPlatforms: z.nullable( + z.array( + SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform$inboundSchema, + ), + ).optional(), + }); + +export function syncAcquireResponseDeploymentCurrentReleaseStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseStack' from JSON`, + ); +} /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema: - z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList, - unknown - > = z.object({ - type: - SyncAcquireResponseDeploymentCurrentReleaseTypeStringList$inboundSchema, - value: z.array(z.string()), +export const SyncAcquireResponseDeploymentCurrentRelease$inboundSchema: + z.ZodType = z.object({ + description: z.nullable(z.string()).optional(), + releaseId: z.nullable(z.string()).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentCurrentReleaseStack$inboundSchema + ), + version: z.nullable(z.string()).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseDefaultStringListFromJSON( +export function syncAcquireResponseDeploymentCurrentReleaseFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList, + SyncAcquireResponseDeploymentCurrentRelease, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList' from JSON`, + SyncAcquireResponseDeploymentCurrentRelease$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentRelease' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseTypeBoolean$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeBoolean); +export const SyncAcquireResponseDeploymentCurrentReleaseUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncAcquireResponseDeploymentCurrentRelease$inboundSchema), + z.any(), + ]); + +export function syncAcquireResponseDeploymentCurrentReleaseUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentCurrentReleaseUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentCurrentReleaseUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseUnion' from JSON`, + ); +} /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema: - z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean, - unknown - > = z.object({ - type: SyncAcquireResponseDeploymentCurrentReleaseTypeBoolean$inboundSchema, - value: z.boolean(), - }); +export const SyncAcquireResponseDeploymentPlatformTest$inboundSchema: z.ZodEnum< + typeof SyncAcquireResponseDeploymentPlatformTest +> = z.enum(SyncAcquireResponseDeploymentPlatformTest); -export function syncAcquireResponseDeploymentCurrentReleaseDefaultBooleanFromJSON( +/** @internal */ +export const SyncAcquireResponseDeploymentEnvironmentInfoTest$inboundSchema: + z.ZodType = z + .object({ + testId: z.string(), + platform: SyncAcquireResponseDeploymentPlatformTest$inboundSchema, + }); + +export function syncAcquireResponseDeploymentEnvironmentInfoTestFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean, + SyncAcquireResponseDeploymentEnvironmentInfoTest, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean' from JSON`, + SyncAcquireResponseDeploymentEnvironmentInfoTest$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoTest' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseTypeNumber$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeNumber); +export const SyncAcquireResponseDeploymentPlatformLocal$inboundSchema: + z.ZodEnum = z.enum( + SyncAcquireResponseDeploymentPlatformLocal, + ); /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema: - z.ZodType = - z.object({ - type: SyncAcquireResponseDeploymentCurrentReleaseTypeNumber$inboundSchema, - value: z.string(), +export const SyncAcquireResponseDeploymentEnvironmentInfoLocal$inboundSchema: + z.ZodType = z + .object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: SyncAcquireResponseDeploymentPlatformLocal$inboundSchema, }); -export function syncAcquireResponseDeploymentCurrentReleaseDefaultNumberFromJSON( +export function syncAcquireResponseDeploymentEnvironmentInfoLocalFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber, + SyncAcquireResponseDeploymentEnvironmentInfoLocal, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber' from JSON`, + SyncAcquireResponseDeploymentEnvironmentInfoLocal$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoLocal' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseTypeString$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeString); +export const SyncAcquireResponseDeploymentCurrentPlatformAzure$inboundSchema: + z.ZodEnum = z.enum( + SyncAcquireResponseDeploymentCurrentPlatformAzure, + ); /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema: - z.ZodType = - z.object({ - type: SyncAcquireResponseDeploymentCurrentReleaseTypeString$inboundSchema, - value: z.string(), +export const SyncAcquireResponseDeploymentEnvironmentInfoAzure$inboundSchema: + z.ZodType = z + .object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: SyncAcquireResponseDeploymentCurrentPlatformAzure$inboundSchema, }); -export function syncAcquireResponseDeploymentCurrentReleaseDefaultStringFromJSON( +export function syncAcquireResponseDeploymentEnvironmentInfoAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseDefaultString, + SyncAcquireResponseDeploymentEnvironmentInfoAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultString' from JSON`, + SyncAcquireResponseDeploymentEnvironmentInfoAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoAzure' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion$inboundSchema: - z.ZodType = - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema - ), - z.any(), - ]); +export const SyncAcquireResponseDeploymentCurrentPlatformGcp$inboundSchema: + z.ZodEnum = z.enum( + SyncAcquireResponseDeploymentCurrentPlatformGcp, + ); -export function syncAcquireResponseDeploymentCurrentReleaseDefaultUnionFromJSON( +/** @internal */ +export const SyncAcquireResponseDeploymentEnvironmentInfoGcp$inboundSchema: + z.ZodType = z + .object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: SyncAcquireResponseDeploymentCurrentPlatformGcp$inboundSchema, + }); + +export function syncAcquireResponseDeploymentEnvironmentInfoGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion, + SyncAcquireResponseDeploymentEnvironmentInfoGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDefaultUnion' from JSON`, + SyncAcquireResponseDeploymentEnvironmentInfoGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoGcp' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum); +export const SyncAcquireResponseDeploymentCurrentPlatformAws$inboundSchema: + z.ZodEnum = z.enum( + SyncAcquireResponseDeploymentCurrentPlatformAws, + ); /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseTypeUnion$inboundSchema: - z.ZodType = z +export const SyncAcquireResponseDeploymentEnvironmentInfoAws$inboundSchema: + z.ZodType = z + .object({ + accountId: z.string(), + region: z.string(), + platform: SyncAcquireResponseDeploymentCurrentPlatformAws$inboundSchema, + }); + +export function syncAcquireResponseDeploymentEnvironmentInfoAwsFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentEnvironmentInfoAws, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentEnvironmentInfoAws$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoAws' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentEnvironmentInfoUnion$inboundSchema: + z.ZodType = z .union([ - SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum$inboundSchema, + z.lazy(() => + SyncAcquireResponseDeploymentEnvironmentInfoGcp$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentEnvironmentInfoAzure$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentEnvironmentInfoLocal$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentEnvironmentInfoAws$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentEnvironmentInfoTest$inboundSchema + ), z.any(), ]); -export function syncAcquireResponseDeploymentCurrentReleaseTypeUnionFromJSON( +export function syncAcquireResponseDeploymentEnvironmentInfoUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseTypeUnion, + SyncAcquireResponseDeploymentEnvironmentInfoUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseTypeUnion$inboundSchema.parse( + SyncAcquireResponseDeploymentEnvironmentInfoUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseTypeUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseEnv$inboundSchema: - z.ZodType = z.object( - { - name: z.string(), - targetResources: z.nullable(z.array(z.string())).optional(), - type: z.nullable( - z.union([ - SyncAcquireResponseDeploymentCurrentReleaseTypeEnvEnum$inboundSchema, - z.any(), - ]), - ).optional(), - }, - ); +export const SyncAcquireResponseDeploymentError$inboundSchema: z.ZodType< + SyncAcquireResponseDeploymentError, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export function syncAcquireResponseDeploymentCurrentReleaseEnvFromJSON( +export function syncAcquireResponseDeploymentErrorFromJSON( jsonString: string, -): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseEnv, - SDKValidationError -> { +): SafeParseResult { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseEnv$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseEnv' from JSON`, + SyncAcquireResponseDeploymentError$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentError' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseKind$inboundSchema: - z.ZodEnum = z.enum( - SyncAcquireResponseDeploymentCurrentReleaseKind, - ); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleasePlatform$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleasePlatform); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProvidedBy$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseProvidedBy); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema: - z.ZodType = z - .object({ - format: z.nullable(z.string()).optional(), - max: z.nullable(z.string()).optional(), - maxItems: z.nullable(z.int()).optional(), - maxLength: z.nullable(z.int()).optional(), - min: z.nullable(z.string()).optional(), - minItems: z.nullable(z.int()).optional(), - minLength: z.nullable(z.int()).optional(), - pattern: z.nullable(z.string()).optional(), - values: z.nullable(z.array(z.string())).optional(), - }); +export const SyncAcquireResponseDeploymentErrorUnion$inboundSchema: z.ZodType< + SyncAcquireResponseDeploymentErrorUnion, + unknown +> = z.union([ + z.lazy(() => SyncAcquireResponseDeploymentError$inboundSchema), + z.any(), +]); -export function syncAcquireResponseDeploymentCurrentReleaseValidationFromJSON( +export function syncAcquireResponseDeploymentErrorUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseValidation, + SyncAcquireResponseDeploymentErrorUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema.parse( + SyncAcquireResponseDeploymentErrorUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseValidation' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentErrorUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseValidationUnion$inboundSchema: +export const SyncAcquireResponseDeploymentCurrentPlatform$inboundSchema: + z.ZodEnum = z.enum( + SyncAcquireResponseDeploymentCurrentPlatform, + ); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseValidationUnion, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema - ), - z.any(), - ]); + > = z.object({ + type: + SyncAcquireResponseDeploymentPendingPreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }); -export function syncAcquireResponseDeploymentCurrentReleaseValidationUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackDefaultStringListFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseValidationUnion, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseValidationUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseValidationUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseInput$inboundSchema: - z.ZodType = z - .object({ - default: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultString$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultNumber$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultBoolean$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDefaultStringList$inboundSchema - ), - z.any(), - ]), - ).optional(), - description: z.string(), - env: z.array( - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseEnv$inboundSchema - ), - ).optional(), - id: z.string(), - kind: SyncAcquireResponseDeploymentCurrentReleaseKind$inboundSchema, - label: z.string(), - placeholder: z.nullable(z.string()).optional(), - platforms: z.nullable( - z.array( - SyncAcquireResponseDeploymentCurrentReleasePlatform$inboundSchema, - ), - ).optional(), - providedBy: z.array( - SyncAcquireResponseDeploymentCurrentReleaseProvidedBy$inboundSchema, - ), - required: z.boolean(), - validation: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseValidation$inboundSchema - ), - z.any(), - ]), - ).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean); -export function syncAcquireResponseDeploymentCurrentReleaseInputFromJSON( +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean, + unknown + > = z.object({ + type: + SyncAcquireResponseDeploymentPendingPreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), + }); + +export function syncAcquireResponseDeploymentPendingPreparedStackDefaultBooleanFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseInput, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseInput$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseInput' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseManagementEnum$inboundSchema: - z.ZodEnum = - z.enum(SyncAcquireResponseDeploymentCurrentReleaseManagementEnum); +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber); /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber, unknown > = z.object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), + type: + SyncAcquireResponseDeploymentPendingPreparedStackTypeNumber$inboundSchema, + value: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackDefaultNumberFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeString$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeString + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackTypeString); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackDefaultString$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultString, unknown > = z.object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), + type: + SyncAcquireResponseDeploymentPendingPreparedStackTypeString$inboundSchema, + value: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackDefaultStringFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultString, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackDefaultString$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion, unknown - > = z.object({ - resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwStack$inboundSchema - ).optional(), - }); + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackDefaultUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding, + SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideEffect$inboundSchema: - z.ZodEnum = - z.enum(SyncAcquireResponseDeploymentCurrentReleaseOverrideEffect); +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum); /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant, + SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion, unknown - > = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); + > = z.union([ + SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackTypeUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant, + SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAw$inboundSchema: - z.ZodType = z +export const SyncAcquireResponseDeploymentPendingPreparedStackEnv$inboundSchema: + z.ZodType = z .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: - SyncAcquireResponseDeploymentCurrentReleaseOverrideEffect$inboundSchema - .optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAwGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncAcquireResponseDeploymentPendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]), + ).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAwFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackEnvFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAw, + SyncAcquireResponseDeploymentPendingPreparedStackEnv, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAw$inboundSchema.parse( + SyncAcquireResponseDeploymentPendingPreparedStackEnv$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAw' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackEnv' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackKind$inboundSchema: + z.ZodEnum = z + .enum(SyncAcquireResponseDeploymentPendingPreparedStackKind); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackPlatform$inboundSchema: + z.ZodEnum = + z.enum(SyncAcquireResponseDeploymentPendingPreparedStackPlatform); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackValidation$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource, + SyncAcquireResponseDeploymentPendingPreparedStackValidation, unknown > = z.object({ - scope: z.string(), + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackValidationFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource, + SyncAcquireResponseDeploymentPendingPreparedStackValidation, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackValidation$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackValidation' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack, + SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion, unknown - > = z.object({ - scope: z.string(), - }); + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackValidation$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackValidationUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack, + SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding$inboundSchema: - z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding, - unknown - > = z.object({ - resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureStack$inboundSchema - ).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackInput$inboundSchema: + z.ZodType = z + .object({ + default: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackEnv$inboundSchema + ), + ).optional(), + id: z.string(), + kind: SyncAcquireResponseDeploymentPendingPreparedStackKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array( + SyncAcquireResponseDeploymentPendingPreparedStackPlatform$inboundSchema, + ), + ).optional(), + providedBy: z.array( + SyncAcquireResponseDeploymentPendingPreparedStackProvidedBy$inboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackValidation$inboundSchema + ), + z.any(), + ]), + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackInputFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding, + SyncAcquireResponseDeploymentPendingPreparedStackInput, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackInput$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackInput' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource, unknown > = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrantFromJSON( - jsonString: string, -): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant, - SDKValidationError -> { - return safeParse( - jsonString, - (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant' from JSON`, - ); -} - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure$inboundSchema: - z.ZodType = - z.object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzureGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); - -export function syncAcquireResponseDeploymentCurrentReleaseOverrideAzureFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAwResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack, unknown > = z.object({ - expression: z.string(), - title: z.string(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideConditionResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAwStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema - ), - z.any(), - ]); + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwStack$inboundSchema + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideResourceConditionUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant, unknown > = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw, unknown > = z.object({ - expression: z.string(), - title: z.string(), + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncAcquireResponseDeploymentPendingPreparedStackOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideConditionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAwFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema - ), - z.any(), - ]); + > = z.object({ + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideConditionUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack, unknown > = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideCondition$inboundSchema - ), - z.any(), - ]), - ).optional(), scope: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding, unknown > = z.object({ resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureResource$inboundSchema ).optional(), stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureStack$inboundSchema ).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -11291,650 +15637,665 @@ export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inbound residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcpGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure, + unknown + > = z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideGcpFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource, unknown > = z.object({ - aws: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAw$inboundSchema - )), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideAzure$inboundSchema - )), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverrideGcp$inboundSchema - )), - ).optional(), + expression: z.string(), + title: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseOverridePlatformsFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema: - z.ZodType = z - .object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverridePlatforms$inboundSchema - ), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverride, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverride' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion$inboundSchema: - z.ZodType = - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema - ), - z.string(), - ]); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseOverrideUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseOverrideUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema: - z.ZodType = z - .object({ - override: z.record( - z.string(), - z.array(z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseOverride$inboundSchema - ), - z.string(), - ])), - ), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseManagement2FromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseManagement2, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseManagement2' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion, unknown - > = z.object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAwResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack$inboundSchema: - z.ZodType = - z.object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAwStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding, unknown > = z.object({ resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpResource$inboundSchema ).optional(), stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpStack$inboundSchema ).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAwBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendEffect$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseExtendEffect); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant$inboundSchema: - z.ZodType = - z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAwGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAw$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: - SyncAcquireResponseDeploymentCurrentReleaseExtendEffect$inboundSchema - .optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAwGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp, + unknown + > = z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAwFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAw, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAw$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAw' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms, unknown > = z.object({ - scope: z.string(), + aws: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverrideGcp$inboundSchema + )), + ).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverridePlatformsFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource, + SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverride$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack, + SyncAcquireResponseDeploymentPendingPreparedStackOverride, unknown > = z.object({ - scope: z.string(), + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverridePlatforms$inboundSchema + ), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack, + SyncAcquireResponseDeploymentPendingPreparedStackOverride, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverride$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverride' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion, unknown - > = z.object({ - resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureStack$inboundSchema - ).optional(), - }); + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverride$inboundSchema + ), + z.string(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackOverrideUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding, + SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackManagement2$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant, + SyncAcquireResponseDeploymentPendingPreparedStackManagement2, unknown > = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackOverride$inboundSchema + ), + z.string(), + ])), + ), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackManagement2FromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant, + SyncAcquireResponseDeploymentPendingPreparedStackManagement2, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackManagement2$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackManagement2' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendAzure$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzureGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendAzureFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAwResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendAzure, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzure$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendAzure' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack, unknown > = z.object({ - expression: z.string(), - title: z.string(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendConditionResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAwStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema - ), - z.any(), - ]); + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwStack$inboundSchema + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendResourceConditionUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant, unknown > = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAw$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendCondition, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAw, unknown > = z.object({ - expression: z.string(), - title: z.string(), + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncAcquireResponseDeploymentPendingPreparedStackExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendConditionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAwFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendCondition, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAw$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendCondition' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema - ), - z.any(), - ]); + > = z.object({ + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendConditionUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendConditionUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack, unknown > = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendCondition$inboundSchema - ), - z.any(), - ]), - ).optional(), scope: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAzureStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding, unknown > = z.object({ resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureResource$inboundSchema ).optional(), stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureStack$inboundSchema ).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -11944,685 +16305,693 @@ export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSc residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendGcp$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcpGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure, + unknown + > = z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendGcpFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendGcp, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendGcp' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms, + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource, unknown > = z.object({ - aws: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAw$inboundSchema - )), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendAzure$inboundSchema - )), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendGcp$inboundSchema - )), - ).optional(), + expression: z.string(), + title: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendPlatformsFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms, + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema: - z.ZodType = z - .object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtendPlatforms$inboundSchema - ), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseExtendFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtend, + SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtend' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseExtendUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema - ), - z.string(), - ]); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseExtendUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseExtendUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseExtendUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseExtendUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema: - z.ZodType = z - .object({ - extend: z.record( - z.string(), - z.array(z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseExtend$inboundSchema - ), - z.string(), - ])), - ), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseManagement1FromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendConditionStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseManagement1, + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseManagement1' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseManagementUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseManagementUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion, unknown > = z.union([ z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack$inboundSchema ), - SyncAcquireResponseDeploymentCurrentReleaseManagementEnum$inboundSchema, + z.any(), ]); -export function syncAcquireResponseDeploymentCurrentReleaseManagementUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseManagementUnion, + SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseManagementUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseManagementUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack, unknown > = z.object({ condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), ).optional(), - resources: z.array(z.string()), + scope: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAwResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding, unknown > = z.object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), + resource: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpStack$inboundSchema ).optional(), - resources: z.array(z.string()), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAwStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant, unknown > = z.object({ - resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwStack$inboundSchema - ).optional(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAwBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileEffect$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseProfileEffect); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp, unknown > = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAwGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant, + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAw$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: - SyncAcquireResponseDeploymentCurrentReleaseProfileEffect$inboundSchema - .optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAwGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendGcp$inboundSchema + )), + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAwFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendPlatformsFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAw, + SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAw$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAw' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource$inboundSchema: - z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource, - unknown - > = z.object({ - scope: z.string(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackExtend$inboundSchema: + z.ZodType = + z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtendPlatforms$inboundSchema + ), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource, + SyncAcquireResponseDeploymentPendingPreparedStackExtend, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtend$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtend' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack, + SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion, unknown - > = z.object({ - scope: z.string(), - }); + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtend$inboundSchema + ), + z.string(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackExtendUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack, + SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackManagement1$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding, + SyncAcquireResponseDeploymentPendingPreparedStackManagement1, unknown > = z.object({ - resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureStack$inboundSchema - ).optional(), + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackExtend$inboundSchema + ), + z.string(), + ])), + ), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackManagement1FromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding, + SyncAcquireResponseDeploymentPendingPreparedStackManagement1, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackManagement1$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackManagement1' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant, + SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion, unknown - > = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackManagement2$inboundSchema + ), + SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum$inboundSchema, + ]); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackManagementUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant, + SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileAzure$inboundSchema: - z.ZodType = - z.object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzureGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileAzureFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAwResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileAzure, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzure$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileAzure' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack, unknown > = z.object({ - expression: z.string(), - title: z.string(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileConditionResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAwStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema - ), - z.any(), - ]); + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwStack$inboundSchema + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileResourceConditionUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect + > = z.enum(SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant, unknown > = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpResourceFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAw$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileCondition, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAw, unknown > = z.object({ - expression: z.string(), - title: z.string(), + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncAcquireResponseDeploymentPendingPreparedStackProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileConditionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAwFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileCondition, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAw$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileCondition' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource, unknown - > = z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema - ), - z.any(), - ]); + > = z.object({ + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileConditionUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileConditionUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack, unknown > = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileCondition$inboundSchema - ), - z.any(), - ]), - ).optional(), scope: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAzureStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding, unknown > = z.object({ resource: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpResource$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureResource$inboundSchema ).optional(), stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpStack$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureStack$inboundSchema ).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpBindingFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant, unknown > = z.object({ actions: z.nullable(z.array(z.string())).optional(), @@ -12632,625 +17001,612 @@ export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundS residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpGrantFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileGcp$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcpGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure, + unknown + > = z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileGcpFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileGcp, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileGcp' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms$inboundSchema: +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms, + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource, unknown > = z.object({ - aws: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAw$inboundSchema - )), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileAzure$inboundSchema - )), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfileGcp$inboundSchema - )), - ).optional(), + expression: z.string(), + title: z.string(), }); -export function syncAcquireResponseDeploymentCurrentReleaseProfilePlatformsFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms, + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema: - z.ZodType = z - .object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfilePlatforms$inboundSchema - ), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseProfileFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfile, + SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfile' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseProfileUnion$inboundSchema: - z.ZodType = - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema - ), - z.string(), - ]); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseProfileUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseProfileUnion, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseProfileUnion$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseProfileUnion' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleasePermissions$inboundSchema: - z.ZodType = z - .object({ - management: z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseManagement1$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseManagement2$inboundSchema - ), - SyncAcquireResponseDeploymentCurrentReleaseManagementEnum$inboundSchema, - ]).optional(), - profiles: z.record( - z.string(), - z.record( - z.string(), - z.array( - z.union([ - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseProfile$inboundSchema - ), - z.string(), - ]), - ), - ), - ), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleasePermissionsFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileConditionStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleasePermissions, + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleasePermissions$inboundSchema + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleasePermissions' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseConfig$inboundSchema: - z.ZodType = - collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, - ); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentCurrentReleaseConfigFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseConfig, + SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseConfig$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseConfig' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseDependency$inboundSchema: - z.ZodType = z - .object({ - id: z.string(), - type: z.string(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseDependencyFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseDependency, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseDependency$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseDependency' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseLifecycle$inboundSchema: - z.ZodEnum = z - .enum(SyncAcquireResponseDeploymentCurrentReleaseLifecycle); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseResources$inboundSchema: - z.ZodType = z - .object({ - config: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseConfig$inboundSchema - ), - dependencies: z.array( - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseDependency$inboundSchema - ), - ), - lifecycle: - SyncAcquireResponseDeploymentCurrentReleaseLifecycle$inboundSchema, - remoteAccess: z.boolean().optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpStack$inboundSchema + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseResourcesFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseResources, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseResources$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseResources' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform$inboundSchema: - z.ZodEnum< - typeof SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform - > = z.enum(SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform); - -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseStack$inboundSchema: - z.ZodType = z - .object({ - id: z.string(), - inputs: z.array( - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseInput$inboundSchema - ), - ).optional(), - permissions: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleasePermissions$inboundSchema - ).optional(), - resources: z.record( - z.string(), - z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseResources$inboundSchema - ), - ), - supportedPlatforms: z.nullable( - z.array( - SyncAcquireResponseDeploymentCurrentReleaseSupportedPlatform$inboundSchema, - ), - ).optional(), - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseStackFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseStack, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseStack' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentRelease$inboundSchema: - z.ZodType = z.object({ +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp, + unknown + > = z.object({ + binding: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - releaseId: z.nullable(z.string()).optional(), - stack: z.lazy(() => - SyncAcquireResponseDeploymentCurrentReleaseStack$inboundSchema + grant: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcpGrant$inboundSchema ), - version: z.nullable(z.string()).optional(), + label: z.nullable(z.string()).optional(), }); -export function syncAcquireResponseDeploymentCurrentReleaseFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentRelease, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentRelease$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentRelease' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentReleaseUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => SyncAcquireResponseDeploymentCurrentRelease$inboundSchema), - z.any(), - ]); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfileGcp$inboundSchema + )), + ).optional(), + }); -export function syncAcquireResponseDeploymentCurrentReleaseUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfilePlatformsFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentCurrentReleaseUnion, + SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentCurrentReleaseUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentCurrentReleaseUnion' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentPlatformTest$inboundSchema: z.ZodEnum< - typeof SyncAcquireResponseDeploymentPlatformTest -> = z.enum(SyncAcquireResponseDeploymentPlatformTest); - -/** @internal */ -export const SyncAcquireResponseDeploymentEnvironmentInfoTest$inboundSchema: - z.ZodType = z - .object({ - testId: z.string(), - platform: SyncAcquireResponseDeploymentPlatformTest$inboundSchema, +export const SyncAcquireResponseDeploymentPendingPreparedStackProfile$inboundSchema: + z.ZodType = + z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfilePlatforms$inboundSchema + ), }); -export function syncAcquireResponseDeploymentEnvironmentInfoTestFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentEnvironmentInfoTest, + SyncAcquireResponseDeploymentPendingPreparedStackProfile, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentEnvironmentInfoTest$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoTest' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfile$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfile' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentPlatformLocal$inboundSchema: - z.ZodEnum = z.enum( - SyncAcquireResponseDeploymentPlatformLocal, - ); - -/** @internal */ -export const SyncAcquireResponseDeploymentEnvironmentInfoLocal$inboundSchema: - z.ZodType = z - .object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: SyncAcquireResponseDeploymentPlatformLocal$inboundSchema, - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]); -export function syncAcquireResponseDeploymentEnvironmentInfoLocalFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackProfileUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentEnvironmentInfoLocal, + SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentEnvironmentInfoLocal$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoLocal' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentPlatformAzure$inboundSchema: - z.ZodEnum = z.enum( - SyncAcquireResponseDeploymentCurrentPlatformAzure, - ); - -/** @internal */ -export const SyncAcquireResponseDeploymentEnvironmentInfoAzure$inboundSchema: - z.ZodType = z - .object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: SyncAcquireResponseDeploymentCurrentPlatformAzure$inboundSchema, - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackPermissions$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackPermissions, + unknown + > = z.object({ + management: z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackManagement2$inboundSchema + ), + SyncAcquireResponseDeploymentPendingPreparedStackManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]), + ), + ), + ), + }); -export function syncAcquireResponseDeploymentEnvironmentInfoAzureFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackPermissionsFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentEnvironmentInfoAzure, + SyncAcquireResponseDeploymentPendingPreparedStackPermissions, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentEnvironmentInfoAzure$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoAzure' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackPermissions$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackPermissions' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentPlatformGcp$inboundSchema: - z.ZodEnum = z.enum( - SyncAcquireResponseDeploymentCurrentPlatformGcp, +export const SyncAcquireResponseDeploymentPendingPreparedStackConfig$inboundSchema: + z.ZodType = + collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, + ); + +export function syncAcquireResponseDeploymentPendingPreparedStackConfigFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentPendingPreparedStackConfig, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentPendingPreparedStackConfig$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackConfig' from JSON`, ); +} /** @internal */ -export const SyncAcquireResponseDeploymentEnvironmentInfoGcp$inboundSchema: - z.ZodType = z - .object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: SyncAcquireResponseDeploymentCurrentPlatformGcp$inboundSchema, - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackDependency$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackDependency, + unknown + > = z.object({ + id: z.string(), + type: z.string(), + }); -export function syncAcquireResponseDeploymentEnvironmentInfoGcpFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackDependencyFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentEnvironmentInfoGcp, + SyncAcquireResponseDeploymentPendingPreparedStackDependency, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentEnvironmentInfoGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoGcp' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackDependency$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackDependency' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentCurrentPlatformAws$inboundSchema: - z.ZodEnum = z.enum( - SyncAcquireResponseDeploymentCurrentPlatformAws, - ); +export const SyncAcquireResponseDeploymentPendingPreparedStackLifecycle$inboundSchema: + z.ZodEnum = + z.enum(SyncAcquireResponseDeploymentPendingPreparedStackLifecycle); /** @internal */ -export const SyncAcquireResponseDeploymentEnvironmentInfoAws$inboundSchema: - z.ZodType = z - .object({ - accountId: z.string(), - region: z.string(), - platform: SyncAcquireResponseDeploymentCurrentPlatformAws$inboundSchema, - }); +export const SyncAcquireResponseDeploymentPendingPreparedStackResources$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentPendingPreparedStackResources, + unknown + > = z.object({ + config: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackConfig$inboundSchema + ), + dependencies: z.array( + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackDependency$inboundSchema + ), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: + SyncAcquireResponseDeploymentPendingPreparedStackLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), + }); -export function syncAcquireResponseDeploymentEnvironmentInfoAwsFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackResourcesFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentEnvironmentInfoAws, + SyncAcquireResponseDeploymentPendingPreparedStackResources, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentEnvironmentInfoAws$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoAws' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackResources$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackResources' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentEnvironmentInfoUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - SyncAcquireResponseDeploymentEnvironmentInfoGcp$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentEnvironmentInfoAzure$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentEnvironmentInfoLocal$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentEnvironmentInfoAws$inboundSchema - ), - z.lazy(() => - SyncAcquireResponseDeploymentEnvironmentInfoTest$inboundSchema +export const SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum< + typeof SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform + > = z.enum( + SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform, + ); + +/** @internal */ +export const SyncAcquireResponseDeploymentPendingPreparedStack$inboundSchema: + z.ZodType = z + .object({ + id: z.string(), + inputs: z.array( + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackInput$inboundSchema + ), + ).optional(), + permissions: z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackPermissions$inboundSchema + ).optional(), + resources: z.record( + z.string(), + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStackResources$inboundSchema + ), ), - z.any(), - ]); + supportedPlatforms: z.nullable( + z.array( + SyncAcquireResponseDeploymentPendingPreparedStackSupportedPlatform$inboundSchema, + ), + ).optional(), + }); -export function syncAcquireResponseDeploymentEnvironmentInfoUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentEnvironmentInfoUnion, + SyncAcquireResponseDeploymentPendingPreparedStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentEnvironmentInfoUnion$inboundSchema.parse( + SyncAcquireResponseDeploymentPendingPreparedStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncAcquireResponseDeploymentEnvironmentInfoUnion' from JSON`, - ); -} - -/** @internal */ -export const SyncAcquireResponseDeploymentError$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentError, - unknown -> = z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), -}); - -export function syncAcquireResponseDeploymentErrorFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => - SyncAcquireResponseDeploymentError$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncAcquireResponseDeploymentError' from JSON`, + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStack' from JSON`, ); } /** @internal */ -export const SyncAcquireResponseDeploymentErrorUnion$inboundSchema: z.ZodType< - SyncAcquireResponseDeploymentErrorUnion, - unknown -> = z.union([ - z.lazy(() => SyncAcquireResponseDeploymentError$inboundSchema), - z.any(), -]); +export const SyncAcquireResponseDeploymentPendingPreparedStackUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStack$inboundSchema + ), + z.any(), + ]); -export function syncAcquireResponseDeploymentErrorUnionFromJSON( +export function syncAcquireResponseDeploymentPendingPreparedStackUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncAcquireResponseDeploymentErrorUnion, + SyncAcquireResponseDeploymentPendingPreparedStackUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncAcquireResponseDeploymentErrorUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncAcquireResponseDeploymentErrorUnion' from JSON`, + SyncAcquireResponseDeploymentPendingPreparedStackUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentPendingPreparedStackUnion' from JSON`, ); } -/** @internal */ -export const SyncAcquireResponseDeploymentCurrentPlatform$inboundSchema: - z.ZodEnum = z.enum( - SyncAcquireResponseDeploymentCurrentPlatform, - ); - /** @internal */ export const SyncAcquireResponseDeploymentPreparedStackTypeStringList$inboundSchema: z.ZodEnum = z @@ -15684,6 +20040,7 @@ export const SyncAcquireResponseDeploymentPreparedStackResources$inboundSchema: SyncAcquireResponseDeploymentPreparedStackDependency$inboundSchema ), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: SyncAcquireResponseDeploymentPreparedStackLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), @@ -15777,11 +20134,75 @@ export function syncAcquireResponseDeploymentPreparedStackUnionFromJSON( ); } +/** @internal */ +export const SyncAcquireResponseDeploymentSetupUpdateAuthorization$inboundSchema: + z.ZodType = z + .object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), + }); + +export function syncAcquireResponseDeploymentSetupUpdateAuthorizationFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentSetupUpdateAuthorization, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentSetupUpdateAuthorization$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentSetupUpdateAuthorization' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion$inboundSchema: + z.ZodType< + SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion, + unknown + > = z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentSetupUpdateAuthorization$inboundSchema + ), + z.any(), + ]); + +export function syncAcquireResponseDeploymentSetupUpdateAuthorizationUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncAcquireResponseDeploymentSetupUpdateAuthorizationUnion' from JSON`, + ); +} + /** @internal */ export const SyncAcquireResponseDeploymentRuntimeMetadata$inboundSchema: z.ZodType = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentPendingPreparedStack$inboundSchema + ), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([ z.lazy(() => SyncAcquireResponseDeploymentPreparedStack$inboundSchema), @@ -15789,6 +20210,14 @@ export const SyncAcquireResponseDeploymentRuntimeMetadata$inboundSchema: ]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentSetupUpdateAuthorization$inboundSchema + ), + z.any(), + ]), + ).optional(), }); export function syncAcquireResponseDeploymentRuntimeMetadataFromJSON( @@ -18671,6 +23100,7 @@ export const SyncAcquireResponseDeploymentTargetReleaseResources$inboundSchema: SyncAcquireResponseDeploymentTargetReleaseDependency$inboundSchema ), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: SyncAcquireResponseDeploymentTargetReleaseLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), @@ -26137,13 +30567,72 @@ export function syncAcquireResponseDeploymentMonitoringUnionFromJSON( ); } +/** @internal */ +export const SyncAcquireResponseDeploymentFailureDomains2$inboundSchema: + z.ZodType = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function syncAcquireResponseDeploymentFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentFailureDomains2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentFailureDomains2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentFailureDomainsUnion2$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncAcquireResponseDeploymentFailureDomains2$inboundSchema), + z.any(), + ]); + +export function syncAcquireResponseDeploymentFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentFailureDomainsUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentFailureDomainsUnion2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentFailureDomainsUnion2' from JSON`, + ); +} + /** @internal */ export const SyncAcquireResponseDeploymentPoolsAutoscale$inboundSchema: z.ZodType = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => + SyncAcquireResponseDeploymentFailureDomains2$inboundSchema + ), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), + }).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function syncAcquireResponseDeploymentPoolsAutoscaleFromJSON( @@ -26162,14 +30651,71 @@ export function syncAcquireResponseDeploymentPoolsAutoscaleFromJSON( ); } +/** @internal */ +export const SyncAcquireResponseDeploymentFailureDomains1$inboundSchema: + z.ZodType = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), + }); + +export function syncAcquireResponseDeploymentFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentFailureDomains1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentFailureDomains1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const SyncAcquireResponseDeploymentFailureDomainsUnion1$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncAcquireResponseDeploymentFailureDomains1$inboundSchema), + z.any(), + ]); + +export function syncAcquireResponseDeploymentFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult< + SyncAcquireResponseDeploymentFailureDomainsUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncAcquireResponseDeploymentFailureDomainsUnion1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncAcquireResponseDeploymentFailureDomainsUnion1' from JSON`, + ); +} + /** @internal */ export const SyncAcquireResponseDeploymentPoolsFixed$inboundSchema: z.ZodType< SyncAcquireResponseDeploymentPoolsFixed, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => SyncAcquireResponseDeploymentFailureDomains1$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function syncAcquireResponseDeploymentPoolsFixedFromJSON( @@ -28514,6 +33060,7 @@ export const SyncAcquireResponseDeploymentConfig$inboundSchema: z.ZodType< ]), ]), ).optional(), + inputValues: z.record(z.string(), z.nullable(z.any())).optional(), labelDomain: z.nullable(z.string()).optional(), managementConfig: z.nullable( z.union([ diff --git a/client-sdks/platform/typescript/src/models/synclistresponse.ts b/client-sdks/platform/typescript/src/models/synclistresponse.ts index 8723b78ab..5b86401da 100644 --- a/client-sdks/platform/typescript/src/models/synclistresponse.ts +++ b/client-sdks/platform/typescript/src/models/synclistresponse.ts @@ -224,7 +224,29 @@ export type SyncListResponseEnvironmentInfoUnion = | SyncListResponseEnvironmentInfoTest | any; +/** + * Failure-domain policy selected for a compute pool. + */ +export type SyncListResponseFailureDomains2 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type SyncListResponseFailureDomainsUnion2 = + | SyncListResponseFailureDomains2 + | any; + export type SyncListResponsePoolsAutoscale = { + failureDomains?: SyncListResponseFailureDomains2 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -240,7 +262,29 @@ export type SyncListResponsePoolsAutoscale = { mode: "autoscale"; }; +/** + * Failure-domain policy selected for a compute pool. + */ +export type SyncListResponseFailureDomains1 = { + /** + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. + */ + selectedFailureDomains?: Array | undefined; + /** + * Number of distinct failure domains across which new stateful replicas may be spread. + */ + spread: number; +}; + +export type SyncListResponseFailureDomainsUnion1 = + | SyncListResponseFailureDomains1 + | any; + export type SyncListResponsePoolsFixed = { + failureDomains?: SyncListResponseFailureDomains1 | any | null | undefined; /** * Provider machine type selected for this deployment. */ @@ -1645,93 +1689,95 @@ export type SyncListResponseStackState = { resources: { [k: string]: SyncListResponseStackStateResources }; }; -export const SyncListResponseTypeStringList = { +export const SyncListResponsePendingPreparedStackTypeStringList = { StringList: "stringList", } as const; -export type SyncListResponseTypeStringList = ClosedEnum< - typeof SyncListResponseTypeStringList +export type SyncListResponsePendingPreparedStackTypeStringList = ClosedEnum< + typeof SyncListResponsePendingPreparedStackTypeStringList >; -export type SyncListResponseDefaultStringList = { - type: SyncListResponseTypeStringList; +export type SyncListResponsePendingPreparedStackDefaultStringList = { + type: SyncListResponsePendingPreparedStackTypeStringList; /** * String list default. */ value: Array; }; -export const SyncListResponseTypeBoolean = { +export const SyncListResponsePendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type SyncListResponseTypeBoolean = ClosedEnum< - typeof SyncListResponseTypeBoolean +export type SyncListResponsePendingPreparedStackTypeBoolean = ClosedEnum< + typeof SyncListResponsePendingPreparedStackTypeBoolean >; -export type SyncListResponseDefaultBoolean = { - type: SyncListResponseTypeBoolean; +export type SyncListResponsePendingPreparedStackDefaultBoolean = { + type: SyncListResponsePendingPreparedStackTypeBoolean; /** * Boolean default. */ value: boolean; }; -export const SyncListResponseTypeNumber = { +export const SyncListResponsePendingPreparedStackTypeNumber = { Number: "number", } as const; -export type SyncListResponseTypeNumber = ClosedEnum< - typeof SyncListResponseTypeNumber +export type SyncListResponsePendingPreparedStackTypeNumber = ClosedEnum< + typeof SyncListResponsePendingPreparedStackTypeNumber >; -export type SyncListResponseDefaultNumber = { - type: SyncListResponseTypeNumber; +export type SyncListResponsePendingPreparedStackDefaultNumber = { + type: SyncListResponsePendingPreparedStackTypeNumber; /** * Number default. */ value: string; }; -export const SyncListResponseTypeString = { +export const SyncListResponsePendingPreparedStackTypeString = { String: "string", } as const; -export type SyncListResponseTypeString = ClosedEnum< - typeof SyncListResponseTypeString +export type SyncListResponsePendingPreparedStackTypeString = ClosedEnum< + typeof SyncListResponsePendingPreparedStackTypeString >; -export type SyncListResponseDefaultString = { - type: SyncListResponseTypeString; +export type SyncListResponsePendingPreparedStackDefaultString = { + type: SyncListResponsePendingPreparedStackTypeString; /** * String default. */ value: string; }; -export type SyncListResponseDefaultUnion = - | SyncListResponseDefaultString - | SyncListResponseDefaultNumber - | SyncListResponseDefaultBoolean - | SyncListResponseDefaultStringList +export type SyncListResponsePendingPreparedStackDefaultUnion = + | SyncListResponsePendingPreparedStackDefaultString + | SyncListResponsePendingPreparedStackDefaultNumber + | SyncListResponsePendingPreparedStackDefaultBoolean + | SyncListResponsePendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const SyncListResponseTypeEnvEnum = { +export const SyncListResponsePendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type SyncListResponseTypeEnvEnum = ClosedEnum< - typeof SyncListResponseTypeEnvEnum +export type SyncListResponsePendingPreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncListResponsePendingPreparedStackTypeEnvEnum >; -export type SyncListResponseTypeUnion = SyncListResponseTypeEnvEnum | any; +export type SyncListResponsePendingPreparedStackTypeUnion = + | SyncListResponsePendingPreparedStackTypeEnvEnum + | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type SyncListResponseEnv = { +export type SyncListResponsePendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1740,13 +1786,17 @@ export type SyncListResponseEnv = { * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: SyncListResponseTypeEnvEnum | any | null | undefined; + type?: + | SyncListResponsePendingPreparedStackTypeEnvEnum + | any + | null + | undefined; }; /** * Primitive stack input kind. */ -export const SyncListResponseKind = { +export const SyncListResponsePendingPreparedStackKind = { String: "string", Secret: "secret", Number: "number", @@ -1758,12 +1808,14 @@ export const SyncListResponseKind = { /** * Primitive stack input kind. */ -export type SyncListResponseKind = ClosedEnum; +export type SyncListResponsePendingPreparedStackKind = ClosedEnum< + typeof SyncListResponsePendingPreparedStackKind +>; /** * Represents the target cloud platform. */ -export const SyncListResponsePreparedStackPlatform = { +export const SyncListResponsePendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1775,28 +1827,28 @@ export const SyncListResponsePreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type SyncListResponsePreparedStackPlatform = ClosedEnum< - typeof SyncListResponsePreparedStackPlatform +export type SyncListResponsePendingPreparedStackPlatform = ClosedEnum< + typeof SyncListResponsePendingPreparedStackPlatform >; /** * Who can provide a stack input value. */ -export const SyncListResponseProvidedBy = { +export const SyncListResponsePendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type SyncListResponseProvidedBy = ClosedEnum< - typeof SyncListResponseProvidedBy +export type SyncListResponsePendingPreparedStackProvidedBy = ClosedEnum< + typeof SyncListResponsePendingPreparedStackProvidedBy >; /** * Portable stack input validation constraints. */ -export type SyncListResponseValidation = { +export type SyncListResponsePendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -1835,17 +1887,19 @@ export type SyncListResponseValidation = { values?: Array | null | undefined; }; -export type SyncListResponseValidationUnion = SyncListResponseValidation | any; +export type SyncListResponsePendingPreparedStackValidationUnion = + | SyncListResponsePendingPreparedStackValidation + | any; /** * Stack input definition serialized into a release stack. */ -export type SyncListResponseInput = { +export type SyncListResponsePendingPreparedStackInput = { default?: - | SyncListResponseDefaultString - | SyncListResponseDefaultNumber - | SyncListResponseDefaultBoolean - | SyncListResponseDefaultStringList + | SyncListResponsePendingPreparedStackDefaultString + | SyncListResponsePendingPreparedStackDefaultNumber + | SyncListResponsePendingPreparedStackDefaultBoolean + | SyncListResponsePendingPreparedStackDefaultStringList | any | null | undefined; @@ -1856,7 +1910,7 @@ export type SyncListResponseInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -1864,7 +1918,7 @@ export type SyncListResponseInput = { /** * Primitive stack input kind. */ - kind: SyncListResponseKind; + kind: SyncListResponsePendingPreparedStackKind; /** * Human-facing field label. */ @@ -1876,29 +1930,36 @@ export type SyncListResponseInput = { /** * Platforms where this input applies. */ - platforms?: Array | null | undefined; + platforms?: + | Array + | null + | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; - validation?: SyncListResponseValidation | any | null | undefined; + validation?: + | SyncListResponsePendingPreparedStackValidation + | any + | null + | undefined; }; -export const SyncListResponseManagementEnum = { +export const SyncListResponsePendingPreparedStackManagementEnum = { Auto: "auto", } as const; -export type SyncListResponseManagementEnum = ClosedEnum< - typeof SyncListResponseManagementEnum +export type SyncListResponsePendingPreparedStackManagementEnum = ClosedEnum< + typeof SyncListResponsePendingPreparedStackManagementEnum >; /** * AWS-specific binding specification */ -export type SyncListResponseOverrideAwResource = { +export type SyncListResponsePendingPreparedStackOverrideAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -1912,7 +1973,7 @@ export type SyncListResponseOverrideAwResource = { /** * AWS-specific binding specification */ -export type SyncListResponseOverrideAwStack = { +export type SyncListResponsePendingPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -1926,35 +1987,35 @@ export type SyncListResponseOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseOverrideAwBinding = { +export type SyncListResponsePendingPreparedStackOverrideAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncListResponseOverrideAwResource | undefined; + resource?: SyncListResponsePendingPreparedStackOverrideAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncListResponseOverrideAwStack | undefined; + stack?: SyncListResponsePendingPreparedStackOverrideAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncListResponseOverrideEffect = { +export const SyncListResponsePendingPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncListResponseOverrideEffect = ClosedEnum< - typeof SyncListResponseOverrideEffect +export type SyncListResponsePendingPreparedStackOverrideEffect = ClosedEnum< + typeof SyncListResponsePendingPreparedStackOverrideEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseOverrideAwGrant = { +export type SyncListResponsePendingPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -1980,11 +2041,11 @@ export type SyncListResponseOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncListResponseOverrideAw = { +export type SyncListResponsePendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseOverrideAwBinding; + binding: SyncListResponsePendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -1992,11 +2053,11 @@ export type SyncListResponseOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncListResponseOverrideEffect | undefined; + effect?: SyncListResponsePendingPreparedStackOverrideEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseOverrideAwGrant; + grant: SyncListResponsePendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2006,7 +2067,7 @@ export type SyncListResponseOverrideAw = { /** * Azure-specific binding specification */ -export type SyncListResponseOverrideAzureResource = { +export type SyncListResponsePendingPreparedStackOverrideAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2016,7 +2077,7 @@ export type SyncListResponseOverrideAzureResource = { /** * Azure-specific binding specification */ -export type SyncListResponseOverrideAzureStack = { +export type SyncListResponsePendingPreparedStackOverrideAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2026,21 +2087,23 @@ export type SyncListResponseOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseOverrideAzureBinding = { +export type SyncListResponsePendingPreparedStackOverrideAzureBinding = { /** * Azure-specific binding specification */ - resource?: SyncListResponseOverrideAzureResource | undefined; + resource?: + | SyncListResponsePendingPreparedStackOverrideAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: SyncListResponseOverrideAzureStack | undefined; + stack?: SyncListResponsePendingPreparedStackOverrideAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseOverrideAzureGrant = { +export type SyncListResponsePendingPreparedStackOverrideAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2066,11 +2129,11 @@ export type SyncListResponseOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncListResponseOverrideAzure = { +export type SyncListResponsePendingPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseOverrideAzureBinding; + binding: SyncListResponsePendingPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2078,7 +2141,7 @@ export type SyncListResponseOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseOverrideAzureGrant; + grant: SyncListResponsePendingPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2088,21 +2151,21 @@ export type SyncListResponseOverrideAzure = { /** * GCP IAM condition */ -export type SyncListResponseOverrideConditionResource = { +export type SyncListResponsePendingPreparedStackOverrideConditionResource = { expression: string; title: string; }; -export type SyncListResponseOverrideResourceConditionUnion = - | SyncListResponseOverrideConditionResource +export type SyncListResponsePendingPreparedStackOverrideResourceConditionUnion = + | SyncListResponsePendingPreparedStackOverrideConditionResource | any; /** * GCP-specific binding specification */ -export type SyncListResponseOverrideGcpResource = { +export type SyncListResponsePendingPreparedStackOverrideGcpResource = { condition?: - | SyncListResponseOverrideConditionResource + | SyncListResponsePendingPreparedStackOverrideConditionResource | any | null | undefined; @@ -2115,20 +2178,24 @@ export type SyncListResponseOverrideGcpResource = { /** * GCP IAM condition */ -export type SyncListResponseOverrideConditionStack = { +export type SyncListResponsePendingPreparedStackOverrideConditionStack = { expression: string; title: string; }; -export type SyncListResponseOverrideStackConditionUnion = - | SyncListResponseOverrideConditionStack +export type SyncListResponsePendingPreparedStackOverrideStackConditionUnion = + | SyncListResponsePendingPreparedStackOverrideConditionStack | any; /** * GCP-specific binding specification */ -export type SyncListResponseOverrideGcpStack = { - condition?: SyncListResponseOverrideConditionStack | any | null | undefined; +export type SyncListResponsePendingPreparedStackOverrideGcpStack = { + condition?: + | SyncListResponsePendingPreparedStackOverrideConditionStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2138,21 +2205,23 @@ export type SyncListResponseOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseOverrideGcpBinding = { +export type SyncListResponsePendingPreparedStackOverrideGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncListResponseOverrideGcpResource | undefined; + resource?: + | SyncListResponsePendingPreparedStackOverrideGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: SyncListResponseOverrideGcpStack | undefined; + stack?: SyncListResponsePendingPreparedStackOverrideGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseOverrideGcpGrant = { +export type SyncListResponsePendingPreparedStackOverrideGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2178,11 +2247,11 @@ export type SyncListResponseOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncListResponseOverrideGcp = { +export type SyncListResponsePendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseOverrideGcpBinding; + binding: SyncListResponsePendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2190,7 +2259,7 @@ export type SyncListResponseOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseOverrideGcpGrant; + grant: SyncListResponsePendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2200,25 +2269,34 @@ export type SyncListResponseOverrideGcp = { /** * Platform-specific permission configurations */ -export type SyncListResponseOverridePlatforms = { +export type SyncListResponsePendingPreparedStackOverridePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: + | Array + | null + | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncListResponseOverride = { +export type SyncListResponsePendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -2230,28 +2308,32 @@ export type SyncListResponseOverride = { /** * Platform-specific permission configurations */ - platforms: SyncListResponseOverridePlatforms; + platforms: SyncListResponsePendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncListResponseOverrideUnion = SyncListResponseOverride | string; +export type SyncListResponsePendingPreparedStackOverrideUnion = + | SyncListResponsePendingPreparedStackOverride + | string; -export type SyncListResponseManagement2 = { +export type SyncListResponsePendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - override: { [k: string]: Array }; + override: { + [k: string]: Array; + }; }; /** * AWS-specific binding specification */ -export type SyncListResponseExtendAwResource = { +export type SyncListResponsePendingPreparedStackExtendAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2265,7 +2347,7 @@ export type SyncListResponseExtendAwResource = { /** * AWS-specific binding specification */ -export type SyncListResponseExtendAwStack = { +export type SyncListResponsePendingPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2279,35 +2361,35 @@ export type SyncListResponseExtendAwStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseExtendAwBinding = { +export type SyncListResponsePendingPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncListResponseExtendAwResource | undefined; + resource?: SyncListResponsePendingPreparedStackExtendAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncListResponseExtendAwStack | undefined; + stack?: SyncListResponsePendingPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncListResponseExtendEffect = { +export const SyncListResponsePendingPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncListResponseExtendEffect = ClosedEnum< - typeof SyncListResponseExtendEffect +export type SyncListResponsePendingPreparedStackExtendEffect = ClosedEnum< + typeof SyncListResponsePendingPreparedStackExtendEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseExtendAwGrant = { +export type SyncListResponsePendingPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2333,11 +2415,11 @@ export type SyncListResponseExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncListResponseExtendAw = { +export type SyncListResponsePendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseExtendAwBinding; + binding: SyncListResponsePendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2345,11 +2427,11 @@ export type SyncListResponseExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncListResponseExtendEffect | undefined; + effect?: SyncListResponsePendingPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseExtendAwGrant; + grant: SyncListResponsePendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2359,7 +2441,7 @@ export type SyncListResponseExtendAw = { /** * Azure-specific binding specification */ -export type SyncListResponseExtendAzureResource = { +export type SyncListResponsePendingPreparedStackExtendAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2369,7 +2451,7 @@ export type SyncListResponseExtendAzureResource = { /** * Azure-specific binding specification */ -export type SyncListResponseExtendAzureStack = { +export type SyncListResponsePendingPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2379,21 +2461,23 @@ export type SyncListResponseExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseExtendAzureBinding = { +export type SyncListResponsePendingPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: SyncListResponseExtendAzureResource | undefined; + resource?: + | SyncListResponsePendingPreparedStackExtendAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: SyncListResponseExtendAzureStack | undefined; + stack?: SyncListResponsePendingPreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseExtendAzureGrant = { +export type SyncListResponsePendingPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2419,11 +2503,11 @@ export type SyncListResponseExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncListResponseExtendAzure = { +export type SyncListResponsePendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseExtendAzureBinding; + binding: SyncListResponsePendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2431,7 +2515,7 @@ export type SyncListResponseExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseExtendAzureGrant; + grant: SyncListResponsePendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2441,20 +2525,24 @@ export type SyncListResponseExtendAzure = { /** * GCP IAM condition */ -export type SyncListResponseExtendConditionResource = { +export type SyncListResponsePendingPreparedStackExtendConditionResource = { expression: string; title: string; }; -export type SyncListResponseExtendResourceConditionUnion = - | SyncListResponseExtendConditionResource +export type SyncListResponsePendingPreparedStackExtendResourceConditionUnion = + | SyncListResponsePendingPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type SyncListResponseExtendGcpResource = { - condition?: SyncListResponseExtendConditionResource | any | null | undefined; +export type SyncListResponsePendingPreparedStackExtendGcpResource = { + condition?: + | SyncListResponsePendingPreparedStackExtendConditionResource + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2464,20 +2552,24 @@ export type SyncListResponseExtendGcpResource = { /** * GCP IAM condition */ -export type SyncListResponseExtendConditionStack = { +export type SyncListResponsePendingPreparedStackExtendConditionStack = { expression: string; title: string; }; -export type SyncListResponseExtendStackConditionUnion = - | SyncListResponseExtendConditionStack +export type SyncListResponsePendingPreparedStackExtendStackConditionUnion = + | SyncListResponsePendingPreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type SyncListResponseExtendGcpStack = { - condition?: SyncListResponseExtendConditionStack | any | null | undefined; +export type SyncListResponsePendingPreparedStackExtendGcpStack = { + condition?: + | SyncListResponsePendingPreparedStackExtendConditionStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2487,21 +2579,21 @@ export type SyncListResponseExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseExtendGcpBinding = { +export type SyncListResponsePendingPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncListResponseExtendGcpResource | undefined; + resource?: SyncListResponsePendingPreparedStackExtendGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncListResponseExtendGcpStack | undefined; + stack?: SyncListResponsePendingPreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseExtendGcpGrant = { +export type SyncListResponsePendingPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2527,11 +2619,11 @@ export type SyncListResponseExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncListResponseExtendGcp = { +export type SyncListResponsePendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseExtendGcpBinding; + binding: SyncListResponsePendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2539,7 +2631,7 @@ export type SyncListResponseExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseExtendGcpGrant; + grant: SyncListResponsePendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2549,25 +2641,28 @@ export type SyncListResponseExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncListResponseExtendPlatforms = { +export type SyncListResponsePendingPreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: + | Array + | null + | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncListResponseExtend = { +export type SyncListResponsePendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -2579,36 +2674,40 @@ export type SyncListResponseExtend = { /** * Platform-specific permission configurations */ - platforms: SyncListResponseExtendPlatforms; + platforms: SyncListResponsePendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncListResponseExtendUnion = SyncListResponseExtend | string; +export type SyncListResponsePendingPreparedStackExtendUnion = + | SyncListResponsePendingPreparedStackExtend + | string; -export type SyncListResponseManagement1 = { +export type SyncListResponsePendingPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - extend: { [k: string]: Array }; + extend: { + [k: string]: Array; + }; }; /** * Management permissions configuration for stack management access */ -export type SyncListResponseManagementUnion = - | SyncListResponseManagement1 - | SyncListResponseManagement2 - | SyncListResponseManagementEnum; +export type SyncListResponsePendingPreparedStackManagementUnion = + | SyncListResponsePendingPreparedStackManagement1 + | SyncListResponsePendingPreparedStackManagement2 + | SyncListResponsePendingPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type SyncListResponseProfileAwResource = { +export type SyncListResponsePendingPreparedStackProfileAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2622,7 +2721,7 @@ export type SyncListResponseProfileAwResource = { /** * AWS-specific binding specification */ -export type SyncListResponseProfileAwStack = { +export type SyncListResponsePendingPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2636,35 +2735,35 @@ export type SyncListResponseProfileAwStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseProfileAwBinding = { +export type SyncListResponsePendingPreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncListResponseProfileAwResource | undefined; + resource?: SyncListResponsePendingPreparedStackProfileAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncListResponseProfileAwStack | undefined; + stack?: SyncListResponsePendingPreparedStackProfileAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncListResponseProfileEffect = { +export const SyncListResponsePendingPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncListResponseProfileEffect = ClosedEnum< - typeof SyncListResponseProfileEffect +export type SyncListResponsePendingPreparedStackProfileEffect = ClosedEnum< + typeof SyncListResponsePendingPreparedStackProfileEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseProfileAwGrant = { +export type SyncListResponsePendingPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2690,11 +2789,11 @@ export type SyncListResponseProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncListResponseProfileAw = { +export type SyncListResponsePendingPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseProfileAwBinding; + binding: SyncListResponsePendingPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2702,11 +2801,11 @@ export type SyncListResponseProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncListResponseProfileEffect | undefined; + effect?: SyncListResponsePendingPreparedStackProfileEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseProfileAwGrant; + grant: SyncListResponsePendingPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2716,7 +2815,7 @@ export type SyncListResponseProfileAw = { /** * Azure-specific binding specification */ -export type SyncListResponseProfileAzureResource = { +export type SyncListResponsePendingPreparedStackProfileAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2726,7 +2825,7 @@ export type SyncListResponseProfileAzureResource = { /** * Azure-specific binding specification */ -export type SyncListResponseProfileAzureStack = { +export type SyncListResponsePendingPreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2736,21 +2835,23 @@ export type SyncListResponseProfileAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseProfileAzureBinding = { +export type SyncListResponsePendingPreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ - resource?: SyncListResponseProfileAzureResource | undefined; + resource?: + | SyncListResponsePendingPreparedStackProfileAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: SyncListResponseProfileAzureStack | undefined; + stack?: SyncListResponsePendingPreparedStackProfileAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseProfileAzureGrant = { +export type SyncListResponsePendingPreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2776,11 +2877,11 @@ export type SyncListResponseProfileAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncListResponseProfileAzure = { +export type SyncListResponsePendingPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseProfileAzureBinding; + binding: SyncListResponsePendingPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2788,7 +2889,7 @@ export type SyncListResponseProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseProfileAzureGrant; + grant: SyncListResponsePendingPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2798,20 +2899,24 @@ export type SyncListResponseProfileAzure = { /** * GCP IAM condition */ -export type SyncListResponseProfileConditionResource = { +export type SyncListResponsePendingPreparedStackProfileConditionResource = { expression: string; title: string; }; -export type SyncListResponseProfileResourceConditionUnion = - | SyncListResponseProfileConditionResource +export type SyncListResponsePendingPreparedStackProfileResourceConditionUnion = + | SyncListResponsePendingPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type SyncListResponseProfileGcpResource = { - condition?: SyncListResponseProfileConditionResource | any | null | undefined; +export type SyncListResponsePendingPreparedStackProfileGcpResource = { + condition?: + | SyncListResponsePendingPreparedStackProfileConditionResource + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2821,20 +2926,24 @@ export type SyncListResponseProfileGcpResource = { /** * GCP IAM condition */ -export type SyncListResponseProfileConditionStack = { +export type SyncListResponsePendingPreparedStackProfileConditionStack = { expression: string; title: string; }; -export type SyncListResponseProfileStackConditionUnion = - | SyncListResponseProfileConditionStack +export type SyncListResponsePendingPreparedStackProfileStackConditionUnion = + | SyncListResponsePendingPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type SyncListResponseProfileGcpStack = { - condition?: SyncListResponseProfileConditionStack | any | null | undefined; +export type SyncListResponsePendingPreparedStackProfileGcpStack = { + condition?: + | SyncListResponsePendingPreparedStackProfileConditionStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2844,21 +2953,21 @@ export type SyncListResponseProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncListResponseProfileGcpBinding = { +export type SyncListResponsePendingPreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncListResponseProfileGcpResource | undefined; + resource?: SyncListResponsePendingPreparedStackProfileGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncListResponseProfileGcpStack | undefined; + stack?: SyncListResponsePendingPreparedStackProfileGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncListResponseProfileGcpGrant = { +export type SyncListResponsePendingPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2884,11 +2993,11 @@ export type SyncListResponseProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncListResponseProfileGcp = { +export type SyncListResponsePendingPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: SyncListResponseProfileGcpBinding; + binding: SyncListResponsePendingPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2896,7 +3005,7 @@ export type SyncListResponseProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncListResponseProfileGcpGrant; + grant: SyncListResponsePendingPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2906,25 +3015,31 @@ export type SyncListResponseProfileGcp = { /** * Platform-specific permission configurations */ -export type SyncListResponseProfilePlatforms = { +export type SyncListResponsePendingPreparedStackProfilePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ - azure?: Array | null | undefined; + azure?: + | Array + | null + | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncListResponseProfile = { +export type SyncListResponsePendingPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -2936,25 +3051,27 @@ export type SyncListResponseProfile = { /** * Platform-specific permission configurations */ - platforms: SyncListResponseProfilePlatforms; + platforms: SyncListResponsePendingPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncListResponseProfileUnion = SyncListResponseProfile | string; +export type SyncListResponsePendingPreparedStackProfileUnion = + | SyncListResponsePendingPreparedStackProfile + | string; /** * Combined permissions configuration that contains both profiles and management */ -export type SyncListResponsePermissions = { +export type SyncListResponsePendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | SyncListResponseManagement1 - | SyncListResponseManagement2 - | SyncListResponseManagementEnum + | SyncListResponsePendingPreparedStackManagement1 + | SyncListResponsePendingPreparedStackManagement2 + | SyncListResponsePendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -2963,14 +3080,16 @@ export type SyncListResponsePermissions = { * Key is the profile name, value is the permission configuration */ profiles: { - [k: string]: { [k: string]: Array }; + [k: string]: { + [k: string]: Array; + }; }; }; /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncListResponsePreparedStackConfig = { +export type SyncListResponsePendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -2985,7 +3104,7 @@ export type SyncListResponsePreparedStackConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type SyncListResponsePreparedStackDependency = { +export type SyncListResponsePendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -2996,33 +3115,44 @@ export type SyncListResponsePreparedStackDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const SyncListResponsePreparedStackLifecycle = { +export const SyncListResponsePendingPreparedStackLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncListResponsePreparedStackLifecycle = ClosedEnum< - typeof SyncListResponsePreparedStackLifecycle +export type SyncListResponsePendingPreparedStackLifecycle = ClosedEnum< + typeof SyncListResponsePendingPreparedStackLifecycle >; -export type SyncListResponsePreparedStackResources = { +export type SyncListResponsePendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: SyncListResponsePreparedStackConfig; + config: SyncListResponsePendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: SyncListResponsePreparedStackLifecycle; + lifecycle: SyncListResponsePendingPreparedStackLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -3036,7 +3166,7 @@ export type SyncListResponsePreparedStackResources = { /** * Represents the target cloud platform. */ -export const SyncListResponseSupportedPlatform = { +export const SyncListResponsePendingPreparedStackSupportedPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3048,14 +3178,14 @@ export const SyncListResponseSupportedPlatform = { /** * Represents the target cloud platform. */ -export type SyncListResponseSupportedPlatform = ClosedEnum< - typeof SyncListResponseSupportedPlatform +export type SyncListResponsePendingPreparedStackSupportedPlatform = ClosedEnum< + typeof SyncListResponsePendingPreparedStackSupportedPlatform >; /** * A bag of resources, unaware of any cloud. */ -export type SyncListResponsePreparedStack = { +export type SyncListResponsePendingPreparedStack = { /** * Unique identifier for the stack */ @@ -3063,2896 +3193,7035 @@ export type SyncListResponsePreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: Array | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: SyncListResponsePermissions | undefined; + permissions?: SyncListResponsePendingPreparedStackPermissions | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: SyncListResponsePreparedStackResources }; + resources: { [k: string]: SyncListResponsePendingPreparedStackResources }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array | null | undefined; }; -export type SyncListResponsePreparedStackUnion = - | SyncListResponsePreparedStack +export type SyncListResponsePendingPreparedStackUnion = + | SyncListResponsePendingPreparedStack | any; -/** - * Runtime metadata for deployment state persistence - */ -export type SyncListResponseRuntimeMetadata = { +export const SyncListResponsePreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type SyncListResponsePreparedStackTypeStringList = ClosedEnum< + typeof SyncListResponsePreparedStackTypeStringList +>; + +export type SyncListResponsePreparedStackDefaultStringList = { + type: SyncListResponsePreparedStackTypeStringList; /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * String list default. */ - lastSyncedEnvVarsHash?: string | null | undefined; + value: Array; +}; + +export const SyncListResponsePreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type SyncListResponsePreparedStackTypeBoolean = ClosedEnum< + typeof SyncListResponsePreparedStackTypeBoolean +>; + +export type SyncListResponsePreparedStackDefaultBoolean = { + type: SyncListResponsePreparedStackTypeBoolean; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Boolean default. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: SyncListResponsePreparedStack | any | null | undefined; + value: boolean; +}; + +export const SyncListResponsePreparedStackTypeNumber = { + Number: "number", +} as const; +export type SyncListResponsePreparedStackTypeNumber = ClosedEnum< + typeof SyncListResponsePreparedStackTypeNumber +>; + +export type SyncListResponsePreparedStackDefaultNumber = { + type: SyncListResponsePreparedStackTypeNumber; /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. + * Number default. */ - registryAccessGranted?: boolean | undefined; + value: string; +}; + +export const SyncListResponsePreparedStackTypeString = { + String: "string", +} as const; +export type SyncListResponsePreparedStackTypeString = ClosedEnum< + typeof SyncListResponsePreparedStackTypeString +>; + +export type SyncListResponsePreparedStackDefaultString = { + type: SyncListResponsePreparedStackTypeString; + /** + * String default. + */ + value: string; }; +export type SyncListResponsePreparedStackDefaultUnion = + | SyncListResponsePreparedStackDefaultString + | SyncListResponsePreparedStackDefaultNumber + | SyncListResponsePreparedStackDefaultBoolean + | SyncListResponsePreparedStackDefaultStringList + | any; + /** - * Setup source that imported this deployment + * Environment variable handling for a stack input mapping. */ -export const SyncListResponseImportSource = { - Cloudformation: "cloudformation", - Terraform: "terraform", - Helm: "helm", +export const SyncListResponsePreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; /** - * Setup source that imported this deployment + * Environment variable handling for a stack input mapping. */ -export type SyncListResponseImportSource = ClosedEnum< - typeof SyncListResponseImportSource +export type SyncListResponsePreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncListResponsePreparedStackTypeEnvEnum >; +export type SyncListResponsePreparedStackTypeUnion = + | SyncListResponsePreparedStackTypeEnvEnum + | any; + /** - * Setup method that created the deployment record and owns setup-time resources. + * How a resolved stack input is injected into runtime environment variables. */ -export const SyncListResponseSetupMethod = { - Cloudformation: "cloudformation", - GoogleOauth: "google-oauth", - Terraform: "terraform", - Helm: "helm", - Cli: "cli", - Manual: "manual", +export type SyncListResponsePreparedStackEnv = { + /** + * Environment variable name. + */ + name: string; + /** + * Target resource IDs or patterns. None means every env-capable resource. + */ + targetResources?: Array | null | undefined; + type?: SyncListResponsePreparedStackTypeEnvEnum | any | null | undefined; +}; + +/** + * Primitive stack input kind. + */ +export const SyncListResponsePreparedStackKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", } as const; /** - * Setup method that created the deployment record and owns setup-time resources. + * Primitive stack input kind. */ -export type SyncListResponseSetupMethod = ClosedEnum< - typeof SyncListResponseSetupMethod +export type SyncListResponsePreparedStackKind = ClosedEnum< + typeof SyncListResponsePreparedStackKind >; /** - * Latest error information if the deployment is in a failed state + * Represents the target cloud platform. */ -export type SyncListResponseError = { +export const SyncListResponsePreparedStackPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncListResponsePreparedStackPlatform = ClosedEnum< + typeof SyncListResponsePreparedStackPlatform +>; + +/** + * Who can provide a stack input value. + */ +export const SyncListResponsePreparedStackProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type SyncListResponsePreparedStackProvidedBy = ClosedEnum< + typeof SyncListResponsePreparedStackProvidedBy +>; + +/** + * Portable stack input validation constraints. + */ +export type SyncListResponsePreparedStackValidation = { /** - * A unique identifier for the type of error. - * - * @remarks - * - * This should be a short, machine-readable string that can be used - * by clients to programmatically handle different error types. - * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + * Semantic format hint such as url. */ - code: string; + format?: string | null | undefined; /** - * Additional diagnostic information about the error context. - * - * @remarks - * - * This optional field can contain structured data providing more details - * about the error, such as validation errors, request parameters that - * caused the issue, or other relevant context information. + * Maximum number. */ - context?: any | null | undefined; + max?: string | null | undefined; /** - * Optional human-facing remediation hint. + * Maximum string-list items. */ - hint?: string | null | undefined; + maxItems?: number | null | undefined; /** - * HTTP status code for this error. - * - * @remarks - * - * Used when converting the error to an HTTP response. If None, falls back to - * the error type's default status code or 500. + * Maximum string length. */ - httpStatusCode?: number | null | undefined; + maxLength?: number | null | undefined; /** - * Indicates if this is an internal error that should not be exposed to users. - * - * @remarks - * - * When `true`, this error contains sensitive information or implementation - * details that should not be shown to end-users. Such errors should be - * logged for debugging but replaced with generic error messages in responses. + * Minimum number. */ - internal: boolean; + min?: string | null | undefined; /** - * Human-readable error message. - * - * @remarks - * - * This message should be clear and actionable for developers or end-users, - * providing context about what went wrong and potentially how to fix it. + * Minimum string-list items. */ - message: string; + minItems?: number | null | undefined; /** - * Indicates whether the operation that caused the error should be retried. - * - * @remarks - * - * When `true`, the error is transient and the operation might succeed - * if attempted again. When `false`, retrying the same operation is - * unlikely to succeed without changes. + * Minimum string length. */ - retryable: boolean; + minLength?: number | null | undefined; /** - * The underlying error that caused this error, creating an error chain. - * - * @remarks - * - * This allows for proper error propagation and debugging by maintaining - * the full context of how an error occurred through multiple layers - * of an application. + * Portable whole-value regex pattern. */ - source?: any | null | undefined; -}; - -export const SyncListResponsePlatformKubernetes = { - Kubernetes: "kubernetes", -} as const; -export type SyncListResponsePlatformKubernetes = ClosedEnum< - typeof SyncListResponsePlatformKubernetes ->; - -export type SyncListResponseManagementConfigKubernetes = { - platform: SyncListResponsePlatformKubernetes; + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; -export const SyncListResponseManagementConfigPlatformAzure = { - Azure: "azure", -} as const; -export type SyncListResponseManagementConfigPlatformAzure = ClosedEnum< - typeof SyncListResponseManagementConfigPlatformAzure ->; +export type SyncListResponsePreparedStackValidationUnion = + | SyncListResponsePreparedStackValidation + | any; /** - * Azure management configuration extracted from stack settings + * Stack input definition serialized into a release stack. */ -export type SyncListResponseManagementConfigAzure = { +export type SyncListResponsePreparedStackInput = { + default?: + | SyncListResponsePreparedStackDefaultString + | SyncListResponsePreparedStackDefaultNumber + | SyncListResponsePreparedStackDefaultBoolean + | SyncListResponsePreparedStackDefaultStringList + | any + | null + | undefined; /** - * The managing Azure Tenant ID for cross-tenant access + * Human-facing helper text. */ - managingTenantId: string; + description: string; /** - * OIDC issuer URL trusted by the target-side managed identity. + * Runtime env-var mappings for v1 input resolution. */ - oidcIssuer: string; + env?: Array | undefined; /** - * OIDC subject claim trusted by the target-side managed identity. + * Stable input ID used by CLI/API calls. */ - oidcSubject: string; - platform: SyncListResponseManagementConfigPlatformAzure; + id: string; + /** + * Primitive stack input kind. + */ + kind: SyncListResponsePreparedStackKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: Array | null | undefined; + /** + * Who can provide this value. + */ + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: SyncListResponsePreparedStackValidation | any | null | undefined; }; -export const SyncListResponseManagementConfigPlatformGcp = { - Gcp: "gcp", +export const SyncListResponsePreparedStackManagementEnum = { + Auto: "auto", } as const; -export type SyncListResponseManagementConfigPlatformGcp = ClosedEnum< - typeof SyncListResponseManagementConfigPlatformGcp +export type SyncListResponsePreparedStackManagementEnum = ClosedEnum< + typeof SyncListResponsePreparedStackManagementEnum >; /** - * GCP management configuration extracted from stack settings + * AWS-specific binding specification */ -export type SyncListResponseManagementConfigGcp = { +export type SyncListResponsePreparedStackOverrideAwResource = { /** - * Service account email for management roles + * Optional condition for additional filtering (rare) */ - serviceAccountEmail: string; - platform: SyncListResponseManagementConfigPlatformGcp; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export const SyncListResponseManagementConfigPlatformAws = { - Aws: "aws", -} as const; -export type SyncListResponseManagementConfigPlatformAws = ClosedEnum< - typeof SyncListResponseManagementConfigPlatformAws ->; - /** - * AWS management configuration extracted from stack settings + * AWS-specific binding specification */ -export type SyncListResponseManagementConfigAws = { +export type SyncListResponsePreparedStackOverrideAwStack = { /** - * The managing AWS IAM role ARN that can assume cross-account roles + * Optional condition for additional filtering (rare) */ - managingRoleArn: string; - platform: SyncListResponseManagementConfigPlatformAws; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * Management configuration for different cloud platforms. - * - * @remarks - * - * Platform-derived configuration for cross-account/cross-tenant access. - * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + * Generic binding configuration for permissions */ -export type SyncListResponseManagementConfigUnion = - | SyncListResponseManagementConfigAzure - | SyncListResponseManagementConfigAws - | SyncListResponseManagementConfigGcp - | SyncListResponseManagementConfigKubernetes - | any; - -export type SyncListResponseDeployment = { +export type SyncListResponsePreparedStackOverrideAwBinding = { /** - * Unique identifier for the deployment. + * AWS-specific binding specification */ - id: string; + resource?: SyncListResponsePreparedStackOverrideAwResource | undefined; /** - * Deployment name. + * AWS-specific binding specification */ - name: string; + stack?: SyncListResponsePreparedStackOverrideAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const SyncListResponsePreparedStackOverrideEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncListResponsePreparedStackOverrideEffect = ClosedEnum< + typeof SyncListResponsePreparedStackOverrideEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackOverrideAwGrant = { /** - * Public subdomain for auto-generated domains + * AWS IAM actions (only for AWS) */ - publicSubdomain?: string | null | undefined; + actions?: Array | null | undefined; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Azure actions (only for Azure) */ - status: SyncListResponseStatus; + dataActions?: Array | null | undefined; /** - * Unique identifier for the project. + * GCP permissions that require an exact residual custom role. */ - projectId: string; + permissions?: Array | null | undefined; /** - * Target platform for the deployment + * Provider predefined roles to bind directly. */ - platform: SyncListResponsePlatform; + predefinedRoles?: Array | null | undefined; /** - * Underlying cloud platform for Kubernetes deployments. + * GCP residual custom permissions to pair with predefined roles. */ - basePlatform?: SyncListResponseBasePlatform | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncListResponsePreparedStackOverrideAw = { /** - * Cloud region or location for the deployment. + * Generic binding configuration for permissions */ - region?: string | null | undefined; + binding: SyncListResponsePreparedStackOverrideAwBinding; /** - * DeploymentState protocol version owned by the runtime/manager + * Short admin-facing description of why this entry exists. */ - deploymentProtocolVersion: number; + description?: string | null | undefined; /** - * ID of deployment group this deployment belongs to + * IAM effect. Defaults to Allow. */ - deploymentGroupId: string; + effect?: SyncListResponsePreparedStackOverrideEffect | undefined; /** - * Cloud environment information + * Grant permissions for a specific cloud platform */ - environmentInfo?: - | SyncListResponseEnvironmentInfoGcp - | SyncListResponseEnvironmentInfoAzure - | SyncListResponseEnvironmentInfoLocal - | SyncListResponseEnvironmentInfoAws - | SyncListResponseEnvironmentInfoTest - | any - | null - | undefined; + grant: SyncListResponsePreparedStackOverrideAwGrant; /** - * User-provided configuration (network, deployment model, approvals) + * Stable admin-facing label for this permission entry. */ - stackSettings: SyncListResponseStackSettings; + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type SyncListResponsePreparedStackOverrideAzureResource = { /** - * State of infrastructure components managed by this deployment + * Scope (subscription/resource group/resource level) */ - stackState?: SyncListResponseStackState | null | undefined; + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type SyncListResponsePreparedStackOverrideAzureStack = { /** - * Runtime metadata for deployment state persistence + * Scope (subscription/resource group/resource level) */ - runtimeMetadata?: SyncListResponseRuntimeMetadata | null | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackOverrideAzureBinding = { /** - * ID of the currently deployed release (actual state) + * Azure-specific binding specification */ - currentReleaseId?: string | null | undefined; + resource?: SyncListResponsePreparedStackOverrideAzureResource | undefined; /** - * ID of the desired release for deployment/update (desired state) + * Azure-specific binding specification */ - desiredReleaseId?: string | null | undefined; + stack?: SyncListResponsePreparedStackOverrideAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackOverrideAzureGrant = { /** - * ID of the pinned release + * AWS IAM actions (only for AWS) */ - pinnedReleaseId?: string | null | undefined; + actions?: Array | null | undefined; /** - * Setup source that imported this deployment + * Azure actions (only for Azure) */ - importSource?: SyncListResponseImportSource | null | undefined; + dataActions?: Array | null | undefined; /** - * Setup method that created the deployment record and owns setup-time resources. + * GCP permissions that require an exact residual custom role. */ - setupMethod?: SyncListResponseSetupMethod | null | undefined; + permissions?: Array | null | undefined; /** - * Setup method metadata needed to guide privileged teardown. + * Provider predefined roles to bind directly. */ - setupMetadata?: { [k: string]: any | null } | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Imported setup target for compatibility checks + * GCP residual custom permissions to pair with predefined roles. */ - setupTarget?: string | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type SyncListResponsePreparedStackOverrideAzure = { /** - * Imported setup compatibility fingerprint + * Generic binding configuration for permissions */ - setupFingerprint?: string | null | undefined; + binding: SyncListResponsePreparedStackOverrideAzureBinding; /** - * Imported setup fingerprint algorithm version + * Short admin-facing description of why this entry exists. */ - setupFingerprintVersion?: number | null | undefined; + description?: string | null | undefined; /** - * Display-only scope reported by the Operator manifest + * Grant permissions for a specific cloud platform */ - operatorScope?: string | null | undefined; + grant: SyncListResponsePreparedStackOverrideAzureGrant; /** - * Display-only permission tier reported by the Operator manifest + * Stable admin-facing label for this permission entry. */ - operatorPermission?: string | null | undefined; + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type SyncListResponsePreparedStackOverrideConditionResource = { + expression: string; + title: string; +}; + +export type SyncListResponsePreparedStackOverrideResourceConditionUnion = + | SyncListResponsePreparedStackOverrideConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type SyncListResponsePreparedStackOverrideGcpResource = { + condition?: + | SyncListResponsePreparedStackOverrideConditionResource + | any + | null + | undefined; /** - * Version reported by the Operator + * Scope (project/resource level) */ - operatorVersion?: string | null | undefined; + scope: string; +}; + +/** + * GCP IAM condition + */ +export type SyncListResponsePreparedStackOverrideConditionStack = { + expression: string; + title: string; +}; + +export type SyncListResponsePreparedStackOverrideStackConditionUnion = + | SyncListResponsePreparedStackOverrideConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type SyncListResponsePreparedStackOverrideGcpStack = { + condition?: + | SyncListResponsePreparedStackOverrideConditionStack + | any + | null + | undefined; /** - * Capability state reported by the Operator + * Scope (project/resource level) */ - capabilities?: Array | null | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackOverrideGcpBinding = { /** - * Whether a retry has been requested for a failed deployment + * GCP-specific binding specification */ - retryRequested: boolean; + resource?: SyncListResponsePreparedStackOverrideGcpResource | undefined; /** - * Timestamp of the last received heartbeat from the deployment + * GCP-specific binding specification */ - lastHeartbeatAt?: Date | null | undefined; + stack?: SyncListResponsePreparedStackOverrideGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackOverrideGcpGrant = { /** - * Latest error information if the deployment is in a failed state + * AWS IAM actions (only for AWS) */ - error?: SyncListResponseError | null | undefined; - createdAt: Date; - updatedAt: Date; - managerId: string; + actions?: Array | null | undefined; /** - * Unique identifier for the workspace. + * Azure actions (only for Azure) */ - workspaceId: string; - userEnvironmentVariables: Array | null; + dataActions?: Array | null | undefined; /** - * Management configuration for different cloud platforms. + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type SyncListResponsePreparedStackOverrideGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackOverrideGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackOverrideGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type SyncListResponsePreparedStackOverridePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncListResponsePreparedStackOverride = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncListResponsePreparedStackOverridePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncListResponsePreparedStackOverrideUnion = + | SyncListResponsePreparedStackOverride + | string; + +export type SyncListResponsePreparedStackManagement2 = { + /** + * Permission profile that maps resources to permission sets * * @remarks - * - * Platform-derived configuration for cross-account/cross-tenant access. - * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + * Key can be "*" for all resources or resource name for specific resource */ - managementConfig?: - | SyncListResponseManagementConfigAzure - | SyncListResponseManagementConfigAws - | SyncListResponseManagementConfigGcp - | SyncListResponseManagementConfigKubernetes - | any - | null - | undefined; - deploymentToken?: string | null | undefined; - lockedBy?: string | null | undefined; - lockedAt?: Date | null | undefined; + override: { + [k: string]: Array; + }; }; /** - * Full deployment records for manager operation + * AWS-specific binding specification */ -export type SyncListResponse = { - deployments: Array; +export type SyncListResponsePreparedStackExtendAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -/** @internal */ -export const SyncListResponseStatus$inboundSchema: z.ZodEnum< - typeof SyncListResponseStatus -> = z.enum(SyncListResponseStatus); +/** + * AWS-specific binding specification + */ +export type SyncListResponsePreparedStackExtendAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; -/** @internal */ -export const SyncListResponsePlatform$inboundSchema: z.ZodEnum< - typeof SyncListResponsePlatform -> = z.enum(SyncListResponsePlatform); +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackExtendAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: SyncListResponsePreparedStackExtendAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncListResponsePreparedStackExtendAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const SyncListResponsePreparedStackExtendEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncListResponsePreparedStackExtendEffect = ClosedEnum< + typeof SyncListResponsePreparedStackExtendEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackExtendAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncListResponsePreparedStackExtendAw = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackExtendAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncListResponsePreparedStackExtendEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type SyncListResponsePreparedStackExtendAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type SyncListResponsePreparedStackExtendAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: SyncListResponsePreparedStackExtendAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncListResponsePreparedStackExtendAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackExtendAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type SyncListResponsePreparedStackExtendAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type SyncListResponsePreparedStackExtendConditionResource = { + expression: string; + title: string; +}; + +export type SyncListResponsePreparedStackExtendResourceConditionUnion = + | SyncListResponsePreparedStackExtendConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type SyncListResponsePreparedStackExtendGcpResource = { + condition?: + | SyncListResponsePreparedStackExtendConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type SyncListResponsePreparedStackExtendConditionStack = { + expression: string; + title: string; +}; + +export type SyncListResponsePreparedStackExtendStackConditionUnion = + | SyncListResponsePreparedStackExtendConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type SyncListResponsePreparedStackExtendGcpStack = { + condition?: + | SyncListResponsePreparedStackExtendConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackExtendGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: SyncListResponsePreparedStackExtendGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncListResponsePreparedStackExtendGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackExtendGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type SyncListResponsePreparedStackExtendGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type SyncListResponsePreparedStackExtendPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncListResponsePreparedStackExtend = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncListResponsePreparedStackExtendPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncListResponsePreparedStackExtendUnion = + | SyncListResponsePreparedStackExtend + | string; + +export type SyncListResponsePreparedStackManagement1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { [k: string]: Array }; +}; + +/** + * Management permissions configuration for stack management access + */ +export type SyncListResponsePreparedStackManagementUnion = + | SyncListResponsePreparedStackManagement1 + | SyncListResponsePreparedStackManagement2 + | SyncListResponsePreparedStackManagementEnum; + +/** + * AWS-specific binding specification + */ +export type SyncListResponsePreparedStackProfileAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type SyncListResponsePreparedStackProfileAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: SyncListResponsePreparedStackProfileAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncListResponsePreparedStackProfileAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const SyncListResponsePreparedStackProfileEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncListResponsePreparedStackProfileEffect = ClosedEnum< + typeof SyncListResponsePreparedStackProfileEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackProfileAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncListResponsePreparedStackProfileAw = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncListResponsePreparedStackProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type SyncListResponsePreparedStackProfileAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type SyncListResponsePreparedStackProfileAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: SyncListResponsePreparedStackProfileAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncListResponsePreparedStackProfileAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackProfileAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type SyncListResponsePreparedStackProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type SyncListResponsePreparedStackProfileConditionResource = { + expression: string; + title: string; +}; + +export type SyncListResponsePreparedStackProfileResourceConditionUnion = + | SyncListResponsePreparedStackProfileConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type SyncListResponsePreparedStackProfileGcpResource = { + condition?: + | SyncListResponsePreparedStackProfileConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type SyncListResponsePreparedStackProfileConditionStack = { + expression: string; + title: string; +}; + +export type SyncListResponsePreparedStackProfileStackConditionUnion = + | SyncListResponsePreparedStackProfileConditionStack + | any; + +/** + * GCP-specific binding specification + */ +export type SyncListResponsePreparedStackProfileGcpStack = { + condition?: + | SyncListResponsePreparedStackProfileConditionStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncListResponsePreparedStackProfileGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: SyncListResponsePreparedStackProfileGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncListResponsePreparedStackProfileGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncListResponsePreparedStackProfileGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type SyncListResponsePreparedStackProfileGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncListResponsePreparedStackProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncListResponsePreparedStackProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type SyncListResponsePreparedStackProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncListResponsePreparedStackProfile = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncListResponsePreparedStackProfilePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncListResponsePreparedStackProfileUnion = + | SyncListResponsePreparedStackProfile + | string; + +/** + * Combined permissions configuration that contains both profiles and management + */ +export type SyncListResponsePreparedStackPermissions = { + /** + * Management permissions configuration for stack management access + */ + management?: + | SyncListResponsePreparedStackManagement1 + | SyncListResponsePreparedStackManagement2 + | SyncListResponsePreparedStackManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; +}; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type SyncListResponsePreparedStackConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +/** + * Reference to a resource by its stable id and resource type. + */ +export type SyncListResponsePreparedStackDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; + +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const SyncListResponsePreparedStackLifecycle = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type SyncListResponsePreparedStackLifecycle = ClosedEnum< + typeof SyncListResponsePreparedStackLifecycle +>; + +export type SyncListResponsePreparedStackResources = { + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: SyncListResponsePreparedStackConfig; + /** + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list + */ + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: SyncListResponsePreparedStackLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; +}; + +/** + * Represents the target cloud platform. + */ +export const SyncListResponsePreparedStackSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncListResponsePreparedStackSupportedPlatform = ClosedEnum< + typeof SyncListResponsePreparedStackSupportedPlatform +>; + +/** + * A bag of resources, unaware of any cloud. + */ +export type SyncListResponsePreparedStack = { + /** + * Unique identifier for the stack + */ + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: SyncListResponsePreparedStackPermissions | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { [k: string]: SyncListResponsePreparedStackResources }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; +}; + +export type SyncListResponsePreparedStackUnion = + | SyncListResponsePreparedStack + | any; + +/** + * One-shot authority for a setup re-import to replace setup-owned resources. + */ +export type SyncListResponseSetupUpdateAuthorization = { + /** + * Frozen resource projection from the last successful deployment. + */ + baselineFrozenDigest: string; + /** + * Unique revision used by persistence layers for compare-and-swap updates. + */ + nonce: string; + /** + * Release whose stack was prepared by setup. + */ + releaseId: string; + /** + * Exact setup artifact revision that authored this authority. + */ + setupFingerprint: string; + /** + * Setup fingerprint contract version. + */ + setupFingerprintVersion: number; + /** + * Stable setup target recorded on the imported deployment. + */ + setupTarget: string; + /** + * Frozen resource projection prepared by the setup re-import. + */ + targetFrozenDigest: string; +}; + +export type SyncListResponseSetupUpdateAuthorizationUnion = + | SyncListResponseSetupUpdateAuthorization + | any; + +/** + * Runtime metadata for deployment state persistence + */ +export type SyncListResponseRuntimeMetadata = { + /** + * Hash of the environment variables snapshot that was last synced to the vault + * + * @remarks + * Used to avoid redundant sync operations during incremental deployment + */ + lastSyncedEnvVarsHash?: string | null | undefined; + /** + * Exact vault keys owned by the deployment secret synchronizer. This + * + * @remarks + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. + */ + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | SyncListResponsePendingPreparedStack + | any + | null + | undefined; + preparedStack?: SyncListResponsePreparedStack | any | null | undefined; + /** + * Whether cross-account registry access has been successfully granted. + * + * @remarks + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. + */ + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | SyncListResponseSetupUpdateAuthorization + | any + | null + | undefined; +}; + +/** + * Setup source that imported this deployment + */ +export const SyncListResponseImportSource = { + Cloudformation: "cloudformation", + Terraform: "terraform", + Helm: "helm", +} as const; +/** + * Setup source that imported this deployment + */ +export type SyncListResponseImportSource = ClosedEnum< + typeof SyncListResponseImportSource +>; + +/** + * Setup method that created the deployment record and owns setup-time resources. + */ +export const SyncListResponseSetupMethod = { + Cloudformation: "cloudformation", + GoogleOauth: "google-oauth", + Terraform: "terraform", + Helm: "helm", + Cli: "cli", + Manual: "manual", +} as const; +/** + * Setup method that created the deployment record and owns setup-time resources. + */ +export type SyncListResponseSetupMethod = ClosedEnum< + typeof SyncListResponseSetupMethod +>; + +/** + * Latest error information if the deployment is in a failed state + */ +export type SyncListResponseError = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable: boolean; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + +export const SyncListResponsePlatformKubernetes = { + Kubernetes: "kubernetes", +} as const; +export type SyncListResponsePlatformKubernetes = ClosedEnum< + typeof SyncListResponsePlatformKubernetes +>; + +export type SyncListResponseManagementConfigKubernetes = { + platform: SyncListResponsePlatformKubernetes; +}; + +export const SyncListResponseManagementConfigPlatformAzure = { + Azure: "azure", +} as const; +export type SyncListResponseManagementConfigPlatformAzure = ClosedEnum< + typeof SyncListResponseManagementConfigPlatformAzure +>; + +/** + * Azure management configuration extracted from stack settings + */ +export type SyncListResponseManagementConfigAzure = { + /** + * The managing Azure Tenant ID for cross-tenant access + */ + managingTenantId: string; + /** + * OIDC issuer URL trusted by the target-side managed identity. + */ + oidcIssuer: string; + /** + * OIDC subject claim trusted by the target-side managed identity. + */ + oidcSubject: string; + platform: SyncListResponseManagementConfigPlatformAzure; +}; + +export const SyncListResponseManagementConfigPlatformGcp = { + Gcp: "gcp", +} as const; +export type SyncListResponseManagementConfigPlatformGcp = ClosedEnum< + typeof SyncListResponseManagementConfigPlatformGcp +>; + +/** + * GCP management configuration extracted from stack settings + */ +export type SyncListResponseManagementConfigGcp = { + /** + * Service account email for management roles + */ + serviceAccountEmail: string; + platform: SyncListResponseManagementConfigPlatformGcp; +}; + +export const SyncListResponseManagementConfigPlatformAws = { + Aws: "aws", +} as const; +export type SyncListResponseManagementConfigPlatformAws = ClosedEnum< + typeof SyncListResponseManagementConfigPlatformAws +>; + +/** + * AWS management configuration extracted from stack settings + */ +export type SyncListResponseManagementConfigAws = { + /** + * The managing AWS IAM role ARN that can assume cross-account roles + */ + managingRoleArn: string; + platform: SyncListResponseManagementConfigPlatformAws; +}; + +/** + * Management configuration for different cloud platforms. + * + * @remarks + * + * Platform-derived configuration for cross-account/cross-tenant access. + * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + */ +export type SyncListResponseManagementConfigUnion = + | SyncListResponseManagementConfigAzure + | SyncListResponseManagementConfigAws + | SyncListResponseManagementConfigGcp + | SyncListResponseManagementConfigKubernetes + | any; + +export type SyncListResponseDeployment = { + /** + * Unique identifier for the deployment. + */ + id: string; + /** + * Deployment name. + */ + name: string; + /** + * Public subdomain for auto-generated domains + */ + publicSubdomain?: string | null | undefined; + /** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ + status: SyncListResponseStatus; + /** + * Unique identifier for the project. + */ + projectId: string; + /** + * Target platform for the deployment + */ + platform: SyncListResponsePlatform; + /** + * Underlying cloud platform for Kubernetes deployments. + */ + basePlatform?: SyncListResponseBasePlatform | null | undefined; + /** + * Cloud region or location for the deployment. + */ + region?: string | null | undefined; + /** + * DeploymentState protocol version owned by the runtime/manager + */ + deploymentProtocolVersion: number; + /** + * ID of deployment group this deployment belongs to + */ + deploymentGroupId: string; + /** + * Cloud environment information + */ + environmentInfo?: + | SyncListResponseEnvironmentInfoGcp + | SyncListResponseEnvironmentInfoAzure + | SyncListResponseEnvironmentInfoLocal + | SyncListResponseEnvironmentInfoAws + | SyncListResponseEnvironmentInfoTest + | any + | null + | undefined; + /** + * User-provided configuration (network, deployment model, approvals) + */ + stackSettings: SyncListResponseStackSettings; + /** + * State of infrastructure components managed by this deployment + */ + stackState?: SyncListResponseStackState | null | undefined; + /** + * Runtime metadata for deployment state persistence + */ + runtimeMetadata?: SyncListResponseRuntimeMetadata | null | undefined; + /** + * ID of the currently deployed release (actual state) + */ + currentReleaseId?: string | null | undefined; + /** + * ID of the desired release for deployment/update (desired state) + */ + desiredReleaseId?: string | null | undefined; + /** + * ID of the pinned release + */ + pinnedReleaseId?: string | null | undefined; + /** + * Setup source that imported this deployment + */ + importSource?: SyncListResponseImportSource | null | undefined; + /** + * Setup method that created the deployment record and owns setup-time resources. + */ + setupMethod?: SyncListResponseSetupMethod | null | undefined; + /** + * Setup method metadata needed to guide privileged teardown. + */ + setupMetadata?: { [k: string]: any | null } | null | undefined; + /** + * Imported setup target for compatibility checks + */ + setupTarget?: string | null | undefined; + /** + * Imported setup compatibility fingerprint + */ + setupFingerprint?: string | null | undefined; + /** + * Imported setup fingerprint algorithm version + */ + setupFingerprintVersion?: number | null | undefined; + /** + * Display-only scope reported by the Operator manifest + */ + operatorScope?: string | null | undefined; + /** + * Display-only permission tier reported by the Operator manifest + */ + operatorPermission?: string | null | undefined; + /** + * Version reported by the Operator + */ + operatorVersion?: string | null | undefined; + /** + * Capability state reported by the Operator + */ + capabilities?: Array | null | undefined; + /** + * Whether a retry has been requested for a failed deployment + */ + retryRequested: boolean; + /** + * Timestamp of the last received heartbeat from the deployment + */ + lastHeartbeatAt?: Date | null | undefined; + /** + * Latest error information if the deployment is in a failed state + */ + error?: SyncListResponseError | null | undefined; + createdAt: Date; + updatedAt: Date; + managerId: string; + /** + * Unique identifier for the workspace. + */ + workspaceId: string; + userEnvironmentVariables: Array | null; + /** + * Management configuration for different cloud platforms. + * + * @remarks + * + * Platform-derived configuration for cross-account/cross-tenant access. + * This is NOT user-specified - it's derived from the Manager's ServiceAccount. + */ + managementConfig?: + | SyncListResponseManagementConfigAzure + | SyncListResponseManagementConfigAws + | SyncListResponseManagementConfigGcp + | SyncListResponseManagementConfigKubernetes + | any + | null + | undefined; + deploymentToken?: string | null | undefined; + lockedBy?: string | null | undefined; + lockedAt?: Date | null | undefined; +}; + +/** + * Full deployment records for manager operation + */ +export type SyncListResponse = { + deployments: Array; +}; + +/** @internal */ +export const SyncListResponseStatus$inboundSchema: z.ZodEnum< + typeof SyncListResponseStatus +> = z.enum(SyncListResponseStatus); + +/** @internal */ +export const SyncListResponsePlatform$inboundSchema: z.ZodEnum< + typeof SyncListResponsePlatform +> = z.enum(SyncListResponsePlatform); + +/** @internal */ +export const SyncListResponseBasePlatform$inboundSchema: z.ZodEnum< + typeof SyncListResponseBasePlatform +> = z.enum(SyncListResponseBasePlatform); + +/** @internal */ +export const SyncListResponsePlatformTest$inboundSchema: z.ZodEnum< + typeof SyncListResponsePlatformTest +> = z.enum(SyncListResponsePlatformTest); + +/** @internal */ +export const SyncListResponseEnvironmentInfoTest$inboundSchema: z.ZodType< + SyncListResponseEnvironmentInfoTest, + unknown +> = z.object({ + testId: z.string(), + platform: SyncListResponsePlatformTest$inboundSchema, +}); + +export function syncListResponseEnvironmentInfoTestFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseEnvironmentInfoTest$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseEnvironmentInfoTest' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponsePlatformLocal$inboundSchema: z.ZodEnum< + typeof SyncListResponsePlatformLocal +> = z.enum(SyncListResponsePlatformLocal); + +/** @internal */ +export const SyncListResponseEnvironmentInfoLocal$inboundSchema: z.ZodType< + SyncListResponseEnvironmentInfoLocal, + unknown +> = z.object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: SyncListResponsePlatformLocal$inboundSchema, +}); + +export function syncListResponseEnvironmentInfoLocalFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseEnvironmentInfoLocal$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseEnvironmentInfoLocal' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseEnvironmentInfoPlatformAzure$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponseEnvironmentInfoPlatformAzure, + ); + +/** @internal */ +export const SyncListResponseEnvironmentInfoAzure$inboundSchema: z.ZodType< + SyncListResponseEnvironmentInfoAzure, + unknown +> = z.object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: SyncListResponseEnvironmentInfoPlatformAzure$inboundSchema, +}); + +export function syncListResponseEnvironmentInfoAzureFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseEnvironmentInfoAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseEnvironmentInfoAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseEnvironmentInfoPlatformGcp$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponseEnvironmentInfoPlatformGcp, + ); + +/** @internal */ +export const SyncListResponseEnvironmentInfoGcp$inboundSchema: z.ZodType< + SyncListResponseEnvironmentInfoGcp, + unknown +> = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: SyncListResponseEnvironmentInfoPlatformGcp$inboundSchema, +}); + +export function syncListResponseEnvironmentInfoGcpFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseEnvironmentInfoGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseEnvironmentInfoGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseEnvironmentInfoPlatformAws$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponseEnvironmentInfoPlatformAws, + ); + +/** @internal */ +export const SyncListResponseEnvironmentInfoAws$inboundSchema: z.ZodType< + SyncListResponseEnvironmentInfoAws, + unknown +> = z.object({ + accountId: z.string(), + region: z.string(), + platform: SyncListResponseEnvironmentInfoPlatformAws$inboundSchema, +}); + +export function syncListResponseEnvironmentInfoAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseEnvironmentInfoAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseEnvironmentInfoAws' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseEnvironmentInfoUnion$inboundSchema: z.ZodType< + SyncListResponseEnvironmentInfoUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponseEnvironmentInfoGcp$inboundSchema), + z.lazy(() => SyncListResponseEnvironmentInfoAzure$inboundSchema), + z.lazy(() => SyncListResponseEnvironmentInfoLocal$inboundSchema), + z.lazy(() => SyncListResponseEnvironmentInfoAws$inboundSchema), + z.lazy(() => SyncListResponseEnvironmentInfoTest$inboundSchema), + z.any(), +]); + +export function syncListResponseEnvironmentInfoUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseEnvironmentInfoUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseEnvironmentInfoUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseFailureDomains2$inboundSchema: z.ZodType< + SyncListResponseFailureDomains2, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function syncListResponseFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseFailureDomains2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseFailureDomainsUnion2$inboundSchema: z.ZodType< + SyncListResponseFailureDomainsUnion2, + unknown +> = z.union([ + z.lazy(() => SyncListResponseFailureDomains2$inboundSchema), + z.any(), +]); + +export function syncListResponseFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseFailureDomainsUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseFailureDomainsUnion2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponsePoolsAutoscale$inboundSchema: z.ZodType< + SyncListResponsePoolsAutoscale, + unknown +> = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => SyncListResponseFailureDomains2$inboundSchema), + z.any(), + ]), + ).optional(), + machine: z.nullable(z.string()).optional(), + max: z.int(), + min: z.int(), + mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); +}); + +export function syncListResponsePoolsAutoscaleFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponsePoolsAutoscale$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePoolsAutoscale' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseFailureDomains1$inboundSchema: z.ZodType< + SyncListResponseFailureDomains1, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function syncListResponseFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseFailureDomains1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseFailureDomainsUnion1$inboundSchema: z.ZodType< + SyncListResponseFailureDomainsUnion1, + unknown +> = z.union([ + z.lazy(() => SyncListResponseFailureDomains1$inboundSchema), + z.any(), +]); + +export function syncListResponseFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseFailureDomainsUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseFailureDomainsUnion1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponsePoolsFixed$inboundSchema: z.ZodType< + SyncListResponsePoolsFixed, + unknown +> = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => SyncListResponseFailureDomains1$inboundSchema), + z.any(), + ]), + ).optional(), + machine: z.nullable(z.string()).optional(), + machines: z.int(), + mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); +}); + +export function syncListResponsePoolsFixedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponsePoolsFixed$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePoolsFixed' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponsePoolsUnion$inboundSchema: z.ZodType< + SyncListResponsePoolsUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponsePoolsFixed$inboundSchema), + z.lazy(() => SyncListResponsePoolsAutoscale$inboundSchema), +]); + +export function syncListResponsePoolsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponsePoolsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePoolsUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCompute$inboundSchema: z.ZodType< + SyncListResponseCompute, + unknown +> = z.object({ + pools: z.record( + z.string(), + z.union([ + z.lazy(() => SyncListResponsePoolsFixed$inboundSchema), + z.lazy(() => SyncListResponsePoolsAutoscale$inboundSchema), + ]), + ).optional(), +}); + +export function syncListResponseComputeFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCompute$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCompute' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseComputeUnion$inboundSchema: z.ZodType< + SyncListResponseComputeUnion, + unknown +> = z.union([z.lazy(() => SyncListResponseCompute$inboundSchema), z.any()]); + +export function syncListResponseComputeUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseComputeUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseComputeUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseDeploymentModel$inboundSchema: z.ZodEnum< + typeof SyncListResponseDeploymentModel +> = z.enum(SyncListResponseDeploymentModel); + +/** @internal */ +export const SyncListResponseAws$inboundSchema: z.ZodType< + SyncListResponseAws, + unknown +> = z.object({ + certificateArn: z.string(), +}); + +export function syncListResponseAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseAws' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseAwsUnion$inboundSchema: z.ZodType< + SyncListResponseAwsUnion, + unknown +> = z.union([z.lazy(() => SyncListResponseAws$inboundSchema), z.any()]); + +export function syncListResponseAwsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseAwsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseAwsUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseAzureStackSettings$inboundSchema: z.ZodType< + SyncListResponseAzureStackSettings, + unknown +> = z.object({ + keyVaultCertificateId: z.string(), + keyVaultResourceId: z.nullable(z.string()).optional(), +}); + +export function syncListResponseAzureStackSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseAzureStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseAzureStackSettings' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseAzureUnion$inboundSchema: z.ZodType< + SyncListResponseAzureUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponseAzureStackSettings$inboundSchema), + z.any(), +]); + +export function syncListResponseAzureUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseAzureUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseAzureUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseGcpStackSettings$inboundSchema: z.ZodType< + SyncListResponseGcpStackSettings, + unknown +> = z.object({ + certificateName: z.string(), +}); + +export function syncListResponseGcpStackSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseGcpStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseGcpStackSettings' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseGcpUnion$inboundSchema: z.ZodType< + SyncListResponseGcpUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponseGcpStackSettings$inboundSchema), + z.any(), +]); + +export function syncListResponseGcpUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseGcpUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseGcpUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseTlsSecretRef$inboundSchema: z.ZodType< + SyncListResponseTlsSecretRef, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), +}); + +export function syncListResponseTlsSecretRefFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseTlsSecretRef$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseTlsSecretRef' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseDomainsKubernetes$inboundSchema: z.ZodType< + SyncListResponseDomainsKubernetes, + unknown +> = z.object({ + tlsSecretRef: z.lazy(() => SyncListResponseTlsSecretRef$inboundSchema), +}); + +export function syncListResponseDomainsKubernetesFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseDomainsKubernetes$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseDomainsKubernetes' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseDomainsKubernetesUnion$inboundSchema: z.ZodType< + SyncListResponseDomainsKubernetesUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponseDomainsKubernetes$inboundSchema), + z.any(), +]); + +export function syncListResponseDomainsKubernetesUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseDomainsKubernetesUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseDomainsKubernetesUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseDomainsCertificate$inboundSchema: z.ZodType< + SyncListResponseDomainsCertificate, + unknown +> = z.object({ + aws: z.nullable( + z.union([z.lazy(() => SyncListResponseAws$inboundSchema), z.any()]), + ).optional(), + azure: z.nullable( + z.union([ + z.lazy(() => SyncListResponseAzureStackSettings$inboundSchema), + z.any(), + ]), + ).optional(), + gcp: z.nullable( + z.union([ + z.lazy(() => SyncListResponseGcpStackSettings$inboundSchema), + z.any(), + ]), + ).optional(), + kubernetes: z.nullable( + z.union([ + z.lazy(() => SyncListResponseDomainsKubernetes$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function syncListResponseDomainsCertificateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseDomainsCertificate$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseDomainsCertificate' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCustomDomains$inboundSchema: z.ZodType< + SyncListResponseCustomDomains, + unknown +> = z.object({ + certificate: z.lazy(() => SyncListResponseDomainsCertificate$inboundSchema), + domain: z.string(), +}); + +export function syncListResponseCustomDomainsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCustomDomains$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCustomDomains' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseModeLoadBalancer$inboundSchema: z.ZodEnum< + typeof SyncListResponseModeLoadBalancer +> = z.enum(SyncListResponseModeLoadBalancer); + +/** @internal */ +export const SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema: + z.ZodType = z + .object({ + cnameTarget: z.string(), + mode: SyncListResponseModeLoadBalancer$inboundSchema, + }); + +export function syncListResponsePublicEndpointTargetLoadBalancerFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePublicEndpointTargetLoadBalancer, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePublicEndpointTargetLoadBalancer' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseModeMachineAddresses$inboundSchema: z.ZodEnum< + typeof SyncListResponseModeMachineAddresses +> = z.enum(SyncListResponseModeMachineAddresses); + +/** @internal */ +export const SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema: + z.ZodType = z + .object({ + mode: SyncListResponseModeMachineAddresses$inboundSchema, + }); + +export function syncListResponsePublicEndpointTargetMachineAddressesFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePublicEndpointTargetMachineAddresses, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePublicEndpointTargetMachineAddresses' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponsePublicEndpointTargetUnion$inboundSchema: z.ZodType< + SyncListResponsePublicEndpointTargetUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema), + z.lazy(() => + SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema + ), + z.any(), +]); + +export function syncListResponsePublicEndpointTargetUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePublicEndpointTargetUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePublicEndpointTargetUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePublicEndpointTargetUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseDomains$inboundSchema: z.ZodType< + SyncListResponseDomains, + unknown +> = z.object({ + customDomains: z.nullable( + z.record( + z.string(), + z.lazy(() => SyncListResponseCustomDomains$inboundSchema), + ), + ).optional(), + publicEndpointTarget: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema + ), + z.lazy(() => + SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema + ), + z.any(), + ]), + ).optional(), +}); + +export function syncListResponseDomainsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseDomains$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseDomains' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseDomainsUnion$inboundSchema: z.ZodType< + SyncListResponseDomainsUnion, + unknown +> = z.union([z.lazy(() => SyncListResponseDomains$inboundSchema), z.any()]); + +export function syncListResponseDomainsUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseDomainsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseDomainsUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseExternalBindings$inboundSchema: z.ZodType< + SyncListResponseExternalBindings, + unknown +> = z.object({}); + +export function syncListResponseExternalBindingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseExternalBindings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseExternalBindings' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseHeartbeats$inboundSchema: z.ZodEnum< + typeof SyncListResponseHeartbeats +> = z.enum(SyncListResponseHeartbeats); + +/** @internal */ +export const SyncListResponseCloud$inboundSchema: z.ZodType< + SyncListResponseCloud, + unknown +> = z.object({ + accountId: z.nullable(z.string()).optional(), + clusterId: z.nullable(z.string()).optional(), + clusterName: z.nullable(z.string()).optional(), + projectId: z.nullable(z.string()).optional(), + region: z.nullable(z.string()).optional(), + resourceGroup: z.nullable(z.string()).optional(), + subscriptionId: z.nullable(z.string()).optional(), +}); + +export function syncListResponseCloudFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCloud$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCloud' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCloudUnion$inboundSchema: z.ZodType< + SyncListResponseCloudUnion, + unknown +> = z.union([z.lazy(() => SyncListResponseCloud$inboundSchema), z.any()]); + +export function syncListResponseCloudUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCloudUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCloudUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseOwnership$inboundSchema: z.ZodEnum< + typeof SyncListResponseOwnership +> = z.enum(SyncListResponseOwnership); + +/** @internal */ +export const SyncListResponseCluster$inboundSchema: z.ZodType< + SyncListResponseCluster, + unknown +> = z.object({ + cloud: z.nullable( + z.union([z.lazy(() => SyncListResponseCloud$inboundSchema), z.any()]), + ).optional(), + namespace: z.nullable(z.string()).optional(), + ownership: SyncListResponseOwnership$inboundSchema, +}); + +export function syncListResponseClusterFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCluster$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCluster' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseClusterUnion$inboundSchema: z.ZodType< + SyncListResponseClusterUnion, + unknown +> = z.union([z.lazy(() => SyncListResponseCluster$inboundSchema), z.any()]); + +export function syncListResponseClusterUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseClusterUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseClusterUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateNone2$inboundSchema: z.ZodType< + SyncListResponseCertificateNone2, + unknown +> = z.object({ + mode: z.literal("none"), +}); + +export function syncListResponseCertificateNone2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCertificateNone2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCertificateNone2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateManagedTLSSecret2$inboundSchema: + z.ZodType = z.object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), + }); + +export function syncListResponseCertificateManagedTLSSecret2FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseCertificateManagedTLSSecret2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateManagedTLSSecret2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseCertificateManagedTLSSecret2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateAwsAcmArn2$inboundSchema: z.ZodType< + SyncListResponseCertificateAwsAcmArn2, + unknown +> = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), +}); + +export function syncListResponseCertificateAwsAcmArn2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateAwsAcmArn2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCertificateAwsAcmArn2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateManagedAcmImport2$inboundSchema: + z.ZodType = z.object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), + }); + +export function syncListResponseCertificateManagedAcmImport2FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseCertificateManagedAcmImport2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateManagedAcmImport2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseCertificateManagedAcmImport2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateTLSSecretRef2$inboundSchema: z.ZodType< + SyncListResponseCertificateTLSSecretRef2, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), +}); + +export function syncListResponseCertificateTLSSecretRef2FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseCertificateTLSSecretRef2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateTLSSecretRef2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseCertificateTLSSecretRef2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateUnion2$inboundSchema: z.ZodType< + SyncListResponseCertificateUnion2, + unknown +> = z.union([ + z.lazy(() => SyncListResponseCertificateTLSSecretRef2$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedAcmImport2$inboundSchema), + z.lazy(() => SyncListResponseCertificateAwsAcmArn2$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedTLSSecret2$inboundSchema), + z.lazy(() => SyncListResponseCertificateNone2$inboundSchema), +]); + +export function syncListResponseCertificateUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCertificateUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCertificateUnion2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseModeCustom$inboundSchema: z.ZodEnum< + typeof SyncListResponseModeCustom +> = z.enum(SyncListResponseModeCustom); + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema: + z.ZodEnum< + typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum4 + > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum4); + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema: + z.ZodType< + SyncListResponseProviderAzureApplicationGatewayForContainers4, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + SyncListResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema, + }); + +export function syncListResponseProviderAzureApplicationGatewayForContainers4FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseProviderAzureApplicationGatewayForContainers4, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers4' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderGkeGatewayEnum4$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderGkeGatewayEnum4 +> = z.enum(SyncListResponseProviderGkeGatewayEnum4); + +/** @internal */ +export const SyncListResponseProviderGkeGateway4$inboundSchema: z.ZodType< + SyncListResponseProviderGkeGateway4, + unknown +> = z.object({ + provider: SyncListResponseProviderGkeGatewayEnum4$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function syncListResponseProviderGkeGateway4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderGkeGateway4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderGkeGateway4' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderAwsAlbEnum4$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderAwsAlbEnum4 +> = z.enum(SyncListResponseProviderAwsAlbEnum4); + +/** @internal */ +export const SyncListResponseProviderAwsAlb4$inboundSchema: z.ZodType< + SyncListResponseProviderAwsAlb4, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: SyncListResponseProviderAwsAlbEnum4$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function syncListResponseProviderAwsAlb4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderAwsAlb4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAwsAlb4' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderUnion4$inboundSchema: z.ZodType< + SyncListResponseProviderUnion4, + unknown +> = z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb4$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway4$inboundSchema), + z.any(), +]); + +export function syncListResponseProviderUnion4FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderUnion4$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderUnion4' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseRouteGateway2$inboundSchema: z.ZodType< + SyncListResponseRouteGateway2, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb4$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway4$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), +}); + +export function syncListResponseRouteGateway2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseRouteGateway2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseRouteGateway2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema: + z.ZodEnum< + typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum3 + > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum3); + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema: + z.ZodType< + SyncListResponseProviderAzureApplicationGatewayForContainers3, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + SyncListResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema, + }); + +export function syncListResponseProviderAzureApplicationGatewayForContainers3FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseProviderAzureApplicationGatewayForContainers3, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers3' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderGkeGatewayEnum3$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderGkeGatewayEnum3 +> = z.enum(SyncListResponseProviderGkeGatewayEnum3); + +/** @internal */ +export const SyncListResponseProviderGkeGateway3$inboundSchema: z.ZodType< + SyncListResponseProviderGkeGateway3, + unknown +> = z.object({ + provider: SyncListResponseProviderGkeGatewayEnum3$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function syncListResponseProviderGkeGateway3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderGkeGateway3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderGkeGateway3' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderAwsAlbEnum3$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderAwsAlbEnum3 +> = z.enum(SyncListResponseProviderAwsAlbEnum3); + +/** @internal */ +export const SyncListResponseProviderAwsAlb3$inboundSchema: z.ZodType< + SyncListResponseProviderAwsAlb3, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: SyncListResponseProviderAwsAlbEnum3$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function syncListResponseProviderAwsAlb3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderAwsAlb3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAwsAlb3' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderUnion3$inboundSchema: z.ZodType< + SyncListResponseProviderUnion3, + unknown +> = z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb3$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway3$inboundSchema), + z.any(), +]); + +export function syncListResponseProviderUnion3FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderUnion3$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderUnion3' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseRouteIngress2$inboundSchema: z.ZodType< + SyncListResponseRouteIngress2, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb3$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway3$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), +}); + +export function syncListResponseRouteIngress2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseRouteIngress2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseRouteIngress2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseRouteUnion2$inboundSchema: z.ZodType< + SyncListResponseRouteUnion2, + unknown +> = z.union([ + z.lazy(() => SyncListResponseRouteIngress2$inboundSchema), + z.lazy(() => SyncListResponseRouteGateway2$inboundSchema), +]); + +export function syncListResponseRouteUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseRouteUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseRouteUnion2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseExposureCustom$inboundSchema: z.ZodType< + SyncListResponseExposureCustom, + unknown +> = z.object({ + certificate: z.union([ + z.lazy(() => SyncListResponseCertificateTLSSecretRef2$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedAcmImport2$inboundSchema), + z.lazy(() => SyncListResponseCertificateAwsAcmArn2$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedTLSSecret2$inboundSchema), + z.lazy(() => SyncListResponseCertificateNone2$inboundSchema), + ]), + domain: z.string(), + mode: SyncListResponseModeCustom$inboundSchema, + route: z.union([ + z.lazy(() => SyncListResponseRouteIngress2$inboundSchema), + z.lazy(() => SyncListResponseRouteGateway2$inboundSchema), + ]), +}); + +export function syncListResponseExposureCustomFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseExposureCustom$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseExposureCustom' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateNone1$inboundSchema: z.ZodType< + SyncListResponseCertificateNone1, + unknown +> = z.object({ + mode: z.literal("none"), +}); + +export function syncListResponseCertificateNone1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCertificateNone1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCertificateNone1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateManagedTLSSecret1$inboundSchema: + z.ZodType = z.object({ + mode: z.literal("managedTlsSecret"), + secretNameTemplate: z.string(), + }); + +export function syncListResponseCertificateManagedTLSSecret1FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseCertificateManagedTLSSecret1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateManagedTLSSecret1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseCertificateManagedTLSSecret1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateAwsAcmArn1$inboundSchema: z.ZodType< + SyncListResponseCertificateAwsAcmArn1, + unknown +> = z.object({ + certificateArn: z.string(), + mode: z.literal("awsAcmArn"), +}); + +export function syncListResponseCertificateAwsAcmArn1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateAwsAcmArn1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCertificateAwsAcmArn1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateManagedAcmImport1$inboundSchema: + z.ZodType = z.object({ + mode: z.literal("managedAcmImport"), + region: z.nullable(z.string()).optional(), + tags: z.record(z.string(), z.string()).optional(), + }); + +export function syncListResponseCertificateManagedAcmImport1FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseCertificateManagedAcmImport1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateManagedAcmImport1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseCertificateManagedAcmImport1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateTLSSecretRef1$inboundSchema: z.ZodType< + SyncListResponseCertificateTLSSecretRef1, + unknown +> = z.object({ + namespace: z.nullable(z.string()).optional(), + secretName: z.string(), + mode: z.literal("tlsSecretRef"), +}); + +export function syncListResponseCertificateTLSSecretRef1FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseCertificateTLSSecretRef1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseCertificateTLSSecretRef1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseCertificateTLSSecretRef1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseCertificateUnion1$inboundSchema: z.ZodType< + SyncListResponseCertificateUnion1, + unknown +> = z.union([ + z.lazy(() => SyncListResponseCertificateTLSSecretRef1$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedAcmImport1$inboundSchema), + z.lazy(() => SyncListResponseCertificateAwsAcmArn1$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedTLSSecret1$inboundSchema), + z.lazy(() => SyncListResponseCertificateNone1$inboundSchema), +]); + +export function syncListResponseCertificateUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseCertificateUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseCertificateUnion1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseModeGenerated$inboundSchema: z.ZodEnum< + typeof SyncListResponseModeGenerated +> = z.enum(SyncListResponseModeGenerated); + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema: + z.ZodEnum< + typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum2 + > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum2); + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema: + z.ZodType< + SyncListResponseProviderAzureApplicationGatewayForContainers2, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + SyncListResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema, + }); + +export function syncListResponseProviderAzureApplicationGatewayForContainers2FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseProviderAzureApplicationGatewayForContainers2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderGkeGatewayEnum2$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderGkeGatewayEnum2 +> = z.enum(SyncListResponseProviderGkeGatewayEnum2); + +/** @internal */ +export const SyncListResponseProviderGkeGateway2$inboundSchema: z.ZodType< + SyncListResponseProviderGkeGateway2, + unknown +> = z.object({ + provider: SyncListResponseProviderGkeGatewayEnum2$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function syncListResponseProviderGkeGateway2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderGkeGateway2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderGkeGateway2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderAwsAlbEnum2$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderAwsAlbEnum2 +> = z.enum(SyncListResponseProviderAwsAlbEnum2); + +/** @internal */ +export const SyncListResponseProviderAwsAlb2$inboundSchema: z.ZodType< + SyncListResponseProviderAwsAlb2, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: SyncListResponseProviderAwsAlbEnum2$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function syncListResponseProviderAwsAlb2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderAwsAlb2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAwsAlb2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderUnion2$inboundSchema: z.ZodType< + SyncListResponseProviderUnion2, + unknown +> = z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb2$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway2$inboundSchema), + z.any(), +]); + +export function syncListResponseProviderUnion2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderUnion2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderUnion2' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseRouteGateway1$inboundSchema: z.ZodType< + SyncListResponseRouteGateway1, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + gatewayClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + listenerPort: z.int(), + provider: z.nullable( + z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb2$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway2$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("gateway"), +}); + +export function syncListResponseRouteGateway1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseRouteGateway1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseRouteGateway1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema: + z.ZodEnum< + typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum1 + > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum1); + +/** @internal */ +export const SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema: + z.ZodType< + SyncListResponseProviderAzureApplicationGatewayForContainers1, + unknown + > = z.object({ + albName: z.nullable(z.string()).optional(), + albNamespace: z.nullable(z.string()).optional(), + frontend: z.string(), + provider: + SyncListResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema, + }); + +export function syncListResponseProviderAzureApplicationGatewayForContainers1FromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseProviderAzureApplicationGatewayForContainers1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderGkeGatewayEnum1$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderGkeGatewayEnum1 +> = z.enum(SyncListResponseProviderGkeGatewayEnum1); + +/** @internal */ +export const SyncListResponseProviderGkeGateway1$inboundSchema: z.ZodType< + SyncListResponseProviderGkeGateway1, + unknown +> = z.object({ + provider: SyncListResponseProviderGkeGatewayEnum1$inboundSchema, + staticAddressName: z.nullable(z.string()).optional(), +}); + +export function syncListResponseProviderGkeGateway1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseProviderGkeGateway1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderGkeGateway1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderAwsAlbEnum1$inboundSchema: z.ZodEnum< + typeof SyncListResponseProviderAwsAlbEnum1 +> = z.enum(SyncListResponseProviderAwsAlbEnum1); + +/** @internal */ +export const SyncListResponseProviderAwsAlb1$inboundSchema: z.ZodType< + SyncListResponseProviderAwsAlb1, + unknown +> = z.object({ + ipAddressType: z.nullable(z.string()).optional(), + provider: SyncListResponseProviderAwsAlbEnum1$inboundSchema, + scheme: z.string(), + subnetIds: z.array(z.string()).optional(), + targetType: z.string(), +}); + +export function syncListResponseProviderAwsAlb1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderAwsAlb1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderAwsAlb1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseProviderUnion1$inboundSchema: z.ZodType< + SyncListResponseProviderUnion1, + unknown +> = z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb1$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway1$inboundSchema), + z.any(), +]); + +export function syncListResponseProviderUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseProviderUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseProviderUnion1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseRouteIngress1$inboundSchema: z.ZodType< + SyncListResponseRouteIngress1, + unknown +> = z.object({ + annotations: z.record(z.string(), z.string()).optional(), + controller: z.nullable(z.string()).optional(), + ingressClassName: z.string(), + labels: z.record(z.string(), z.string()).optional(), + provider: z.nullable( + z.union([ + z.lazy(() => SyncListResponseProviderAwsAlb1$inboundSchema), + z.lazy(() => + SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema + ), + z.lazy(() => SyncListResponseProviderGkeGateway1$inboundSchema), + z.any(), + ]), + ).optional(), + routeApi: z.literal("ingress"), +}); + +export function syncListResponseRouteIngress1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseRouteIngress1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseRouteIngress1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseRouteUnion1$inboundSchema: z.ZodType< + SyncListResponseRouteUnion1, + unknown +> = z.union([ + z.lazy(() => SyncListResponseRouteIngress1$inboundSchema), + z.lazy(() => SyncListResponseRouteGateway1$inboundSchema), +]); + +export function syncListResponseRouteUnion1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseRouteUnion1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseRouteUnion1' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseExposureGenerated$inboundSchema: z.ZodType< + SyncListResponseExposureGenerated, + unknown +> = z.object({ + certificate: z.union([ + z.lazy(() => SyncListResponseCertificateTLSSecretRef1$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedAcmImport1$inboundSchema), + z.lazy(() => SyncListResponseCertificateAwsAcmArn1$inboundSchema), + z.lazy(() => SyncListResponseCertificateManagedTLSSecret1$inboundSchema), + z.lazy(() => SyncListResponseCertificateNone1$inboundSchema), + ]), + mode: SyncListResponseModeGenerated$inboundSchema, + route: z.union([ + z.lazy(() => SyncListResponseRouteIngress1$inboundSchema), + z.lazy(() => SyncListResponseRouteGateway1$inboundSchema), + ]), +}); + +export function syncListResponseExposureGeneratedFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseExposureGenerated$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseExposureGenerated' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseModeDisabled$inboundSchema: z.ZodEnum< + typeof SyncListResponseModeDisabled +> = z.enum(SyncListResponseModeDisabled); + +/** @internal */ +export const SyncListResponseExposureDisabled$inboundSchema: z.ZodType< + SyncListResponseExposureDisabled, + unknown +> = z.object({ + mode: SyncListResponseModeDisabled$inboundSchema, +}); + +export function syncListResponseExposureDisabledFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseExposureDisabled$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseExposureDisabled' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseExposureUnion$inboundSchema: z.ZodType< + SyncListResponseExposureUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponseExposureCustom$inboundSchema), + z.lazy(() => SyncListResponseExposureGenerated$inboundSchema), + z.lazy(() => SyncListResponseExposureDisabled$inboundSchema), + z.any(), +]); + +export function syncListResponseExposureUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseExposureUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseExposureUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseKubernetes$inboundSchema: z.ZodType< + SyncListResponseKubernetes, + unknown +> = z.object({ + cluster: z.nullable( + z.union([z.lazy(() => SyncListResponseCluster$inboundSchema), z.any()]), + ).optional(), + exposure: z.nullable( + z.union([ + z.lazy(() => SyncListResponseExposureCustom$inboundSchema), + z.lazy(() => SyncListResponseExposureGenerated$inboundSchema), + z.lazy(() => SyncListResponseExposureDisabled$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function syncListResponseKubernetesFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseKubernetes$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseKubernetes' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseKubernetesUnion$inboundSchema: z.ZodType< + SyncListResponseKubernetesUnion, + unknown +> = z.union([z.lazy(() => SyncListResponseKubernetes$inboundSchema), z.any()]); + +export function syncListResponseKubernetesUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseKubernetesUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseKubernetesUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseTypeByoVnetAzure$inboundSchema: z.ZodEnum< + typeof SyncListResponseTypeByoVnetAzure +> = z.enum(SyncListResponseTypeByoVnetAzure); + +/** @internal */ +export const SyncListResponseNetworkByoVnetAzure$inboundSchema: z.ZodType< + SyncListResponseNetworkByoVnetAzure, + unknown +> = z.object({ + application_gateway_subnet_name: z.nullable(z.string()).optional(), + private_endpoint_subnet_name: z.nullable(z.string()).optional(), + private_subnet_name: z.string(), + public_subnet_name: z.string(), + type: SyncListResponseTypeByoVnetAzure$inboundSchema, + vnet_resource_id: z.string(), +}).transform((v) => { + return remap$(v, { + "application_gateway_subnet_name": "applicationGatewaySubnetName", + "private_endpoint_subnet_name": "privateEndpointSubnetName", + "private_subnet_name": "privateSubnetName", + "public_subnet_name": "publicSubnetName", + "vnet_resource_id": "vnetResourceId", + }); +}); + +export function syncListResponseNetworkByoVnetAzureFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncListResponseNetworkByoVnetAzure$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseNetworkByoVnetAzure' from JSON`, + ); +} /** @internal */ -export const SyncListResponseBasePlatform$inboundSchema: z.ZodEnum< - typeof SyncListResponseBasePlatform -> = z.enum(SyncListResponseBasePlatform); +export const SyncListResponseTypeByoVpcGcp$inboundSchema: z.ZodEnum< + typeof SyncListResponseTypeByoVpcGcp +> = z.enum(SyncListResponseTypeByoVpcGcp); /** @internal */ -export const SyncListResponsePlatformTest$inboundSchema: z.ZodEnum< - typeof SyncListResponsePlatformTest -> = z.enum(SyncListResponsePlatformTest); +export const SyncListResponseNetworkByoVpcGcp$inboundSchema: z.ZodType< + SyncListResponseNetworkByoVpcGcp, + unknown +> = z.object({ + network_name: z.string(), + region: z.string(), + subnet_name: z.string(), + type: SyncListResponseTypeByoVpcGcp$inboundSchema, +}).transform((v) => { + return remap$(v, { + "network_name": "networkName", + "subnet_name": "subnetName", + }); +}); + +export function syncListResponseNetworkByoVpcGcpFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseNetworkByoVpcGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseNetworkByoVpcGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseTypeByoVpcAws$inboundSchema: z.ZodEnum< + typeof SyncListResponseTypeByoVpcAws +> = z.enum(SyncListResponseTypeByoVpcAws); + +/** @internal */ +export const SyncListResponseNetworkByoVpcAws$inboundSchema: z.ZodType< + SyncListResponseNetworkByoVpcAws, + unknown +> = z.object({ + private_subnet_ids: z.array(z.string()), + public_subnet_ids: z.array(z.string()), + security_group_ids: z.array(z.string()).optional(), + type: SyncListResponseTypeByoVpcAws$inboundSchema, + vpc_id: z.string(), +}).transform((v) => { + return remap$(v, { + "private_subnet_ids": "privateSubnetIds", + "public_subnet_ids": "publicSubnetIds", + "security_group_ids": "securityGroupIds", + "vpc_id": "vpcId", + }); +}); + +export function syncListResponseNetworkByoVpcAwsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseNetworkByoVpcAws$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseNetworkByoVpcAws' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseTypeCreate$inboundSchema: z.ZodEnum< + typeof SyncListResponseTypeCreate +> = z.enum(SyncListResponseTypeCreate); + +/** @internal */ +export const SyncListResponseNetworkCreate$inboundSchema: z.ZodType< + SyncListResponseNetworkCreate, + unknown +> = z.object({ + availability_zones: z.int().optional(), + cidr: z.nullable(z.string()).optional(), + type: SyncListResponseTypeCreate$inboundSchema, +}).transform((v) => { + return remap$(v, { + "availability_zones": "availabilityZones", + }); +}); + +export function syncListResponseNetworkCreateFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseNetworkCreate$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseNetworkCreate' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseTypeUseDefault$inboundSchema: z.ZodEnum< + typeof SyncListResponseTypeUseDefault +> = z.enum(SyncListResponseTypeUseDefault); + +/** @internal */ +export const SyncListResponseNetworkUseDefault$inboundSchema: z.ZodType< + SyncListResponseNetworkUseDefault, + unknown +> = z.object({ + type: SyncListResponseTypeUseDefault$inboundSchema, +}); + +export function syncListResponseNetworkUseDefaultFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseNetworkUseDefault$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseNetworkUseDefault' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseNetworkUnion$inboundSchema: z.ZodType< + SyncListResponseNetworkUnion, + unknown +> = z.union([ + z.lazy(() => SyncListResponseNetworkByoVpcAws$inboundSchema), + z.lazy(() => SyncListResponseNetworkByoVpcGcp$inboundSchema), + z.lazy(() => SyncListResponseNetworkByoVnetAzure$inboundSchema), + z.lazy(() => SyncListResponseNetworkUseDefault$inboundSchema), + z.lazy(() => SyncListResponseNetworkCreate$inboundSchema), + z.any(), +]); + +export function syncListResponseNetworkUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseNetworkUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseNetworkUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseTelemetry$inboundSchema: z.ZodEnum< + typeof SyncListResponseTelemetry +> = z.enum(SyncListResponseTelemetry); + +/** @internal */ +export const SyncListResponseUpdates$inboundSchema: z.ZodEnum< + typeof SyncListResponseUpdates +> = z.enum(SyncListResponseUpdates); + +/** @internal */ +export const SyncListResponseStackSettings$inboundSchema: z.ZodType< + SyncListResponseStackSettings, + unknown +> = z.object({ + compute: z.nullable( + z.union([z.lazy(() => SyncListResponseCompute$inboundSchema), z.any()]), + ).optional(), + deploymentModel: SyncListResponseDeploymentModel$inboundSchema.optional(), + domains: z.nullable( + z.union([z.lazy(() => SyncListResponseDomains$inboundSchema), z.any()]), + ).optional(), + externalBindings: z.nullable( + z.lazy(() => SyncListResponseExternalBindings$inboundSchema), + ).optional(), + heartbeats: SyncListResponseHeartbeats$inboundSchema.optional(), + kubernetes: z.nullable( + z.union([z.lazy(() => SyncListResponseKubernetes$inboundSchema), z.any()]), + ).optional(), + network: z.nullable( + z.union([ + z.lazy(() => SyncListResponseNetworkByoVpcAws$inboundSchema), + z.lazy(() => SyncListResponseNetworkByoVpcGcp$inboundSchema), + z.lazy(() => SyncListResponseNetworkByoVnetAzure$inboundSchema), + z.lazy(() => SyncListResponseNetworkUseDefault$inboundSchema), + z.lazy(() => SyncListResponseNetworkCreate$inboundSchema), + z.any(), + ]), + ).optional(), + telemetry: SyncListResponseTelemetry$inboundSchema.optional(), + updates: SyncListResponseUpdates$inboundSchema.optional(), +}); + +export function syncListResponseStackSettingsFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseStackSettings$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseStackSettings' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseStackStatePlatform$inboundSchema: z.ZodEnum< + typeof SyncListResponseStackStatePlatform +> = z.enum(SyncListResponseStackStatePlatform); + +/** @internal */ +export const SyncListResponseStackStateConfig$inboundSchema: z.ZodType< + SyncListResponseStackStateConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function syncListResponseStackStateConfigFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncListResponseStackStateConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseStackStateConfig' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseControllerPlatformEnum$inboundSchema: z.ZodEnum< + typeof SyncListResponseControllerPlatformEnum +> = z.enum(SyncListResponseControllerPlatformEnum); + +/** @internal */ +export const SyncListResponseControllerPlatformUnion$inboundSchema: z.ZodType< + SyncListResponseControllerPlatformUnion, + unknown +> = z.union([SyncListResponseControllerPlatformEnum$inboundSchema, z.any()]); + +export function syncListResponseControllerPlatformUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseControllerPlatformUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseControllerPlatformUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseControllerPlatformUnion' from JSON`, + ); +} /** @internal */ -export const SyncListResponseEnvironmentInfoTest$inboundSchema: z.ZodType< - SyncListResponseEnvironmentInfoTest, +export const SyncListResponseStackStateDependency$inboundSchema: z.ZodType< + SyncListResponseStackStateDependency, unknown > = z.object({ - testId: z.string(), - platform: SyncListResponsePlatformTest$inboundSchema, + id: z.string(), + type: z.string(), }); -export function syncListResponseEnvironmentInfoTestFromJSON( +export function syncListResponseStackStateDependencyFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, (x) => - SyncListResponseEnvironmentInfoTest$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnvironmentInfoTest' from JSON`, + SyncListResponseStackStateDependency$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseStackStateDependency' from JSON`, ); } /** @internal */ -export const SyncListResponsePlatformLocal$inboundSchema: z.ZodEnum< - typeof SyncListResponsePlatformLocal -> = z.enum(SyncListResponsePlatformLocal); - -/** @internal */ -export const SyncListResponseEnvironmentInfoLocal$inboundSchema: z.ZodType< - SyncListResponseEnvironmentInfoLocal, +export const SyncListResponseErrorStackState$inboundSchema: z.ZodType< + SyncListResponseErrorStackState, unknown > = z.object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: SyncListResponsePlatformLocal$inboundSchema, + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), }); -export function syncListResponseEnvironmentInfoLocalFromJSON( +export function syncListResponseErrorStackStateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => - SyncListResponseEnvironmentInfoLocal$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnvironmentInfoLocal' from JSON`, + (x) => SyncListResponseErrorStackState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseErrorStackState' from JSON`, ); } /** @internal */ -export const SyncListResponseEnvironmentInfoPlatformAzure$inboundSchema: - z.ZodEnum = z.enum( - SyncListResponseEnvironmentInfoPlatformAzure, - ); - -/** @internal */ -export const SyncListResponseEnvironmentInfoAzure$inboundSchema: z.ZodType< - SyncListResponseEnvironmentInfoAzure, +export const SyncListResponseErrorUnion$inboundSchema: z.ZodType< + SyncListResponseErrorUnion, unknown -> = z.object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: SyncListResponseEnvironmentInfoPlatformAzure$inboundSchema, -}); +> = z.union([ + z.lazy(() => SyncListResponseErrorStackState$inboundSchema), + z.any(), +]); -export function syncListResponseEnvironmentInfoAzureFromJSON( +export function syncListResponseErrorUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => - SyncListResponseEnvironmentInfoAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnvironmentInfoAzure' from JSON`, + (x) => SyncListResponseErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseErrorUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseEnvironmentInfoPlatformGcp$inboundSchema: - z.ZodEnum = z.enum( - SyncListResponseEnvironmentInfoPlatformGcp, - ); +export const SyncListResponseLifecycleStackStateEnum$inboundSchema: z.ZodEnum< + typeof SyncListResponseLifecycleStackStateEnum +> = z.enum(SyncListResponseLifecycleStackStateEnum); /** @internal */ -export const SyncListResponseEnvironmentInfoGcp$inboundSchema: z.ZodType< - SyncListResponseEnvironmentInfoGcp, +export const SyncListResponseLifecycleUnion$inboundSchema: z.ZodType< + SyncListResponseLifecycleUnion, unknown -> = z.object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: SyncListResponseEnvironmentInfoPlatformGcp$inboundSchema, -}); +> = z.union([SyncListResponseLifecycleStackStateEnum$inboundSchema, z.any()]); -export function syncListResponseEnvironmentInfoGcpFromJSON( +export function syncListResponseLifecycleUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => - SyncListResponseEnvironmentInfoGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnvironmentInfoGcp' from JSON`, + (x) => SyncListResponseLifecycleUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseLifecycleUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseEnvironmentInfoPlatformAws$inboundSchema: - z.ZodEnum = z.enum( - SyncListResponseEnvironmentInfoPlatformAws, - ); - -/** @internal */ -export const SyncListResponseEnvironmentInfoAws$inboundSchema: z.ZodType< - SyncListResponseEnvironmentInfoAws, +export const SyncListResponseOutputs$inboundSchema: z.ZodType< + SyncListResponseOutputs, unknown -> = z.object({ - accountId: z.string(), - region: z.string(), - platform: SyncListResponseEnvironmentInfoPlatformAws$inboundSchema, -}); +> = collectExtraKeys$( + z.object({ + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); -export function syncListResponseEnvironmentInfoAwsFromJSON( +export function syncListResponseOutputsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => - SyncListResponseEnvironmentInfoAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnvironmentInfoAws' from JSON`, + (x) => SyncListResponseOutputs$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseOutputs' from JSON`, ); } /** @internal */ -export const SyncListResponseEnvironmentInfoUnion$inboundSchema: z.ZodType< - SyncListResponseEnvironmentInfoUnion, +export const SyncListResponseOutputsUnion$inboundSchema: z.ZodType< + SyncListResponseOutputsUnion, unknown -> = z.union([ - z.lazy(() => SyncListResponseEnvironmentInfoGcp$inboundSchema), - z.lazy(() => SyncListResponseEnvironmentInfoAzure$inboundSchema), - z.lazy(() => SyncListResponseEnvironmentInfoLocal$inboundSchema), - z.lazy(() => SyncListResponseEnvironmentInfoAws$inboundSchema), - z.lazy(() => SyncListResponseEnvironmentInfoTest$inboundSchema), - z.any(), -]); +> = z.union([z.lazy(() => SyncListResponseOutputs$inboundSchema), z.any()]); -export function syncListResponseEnvironmentInfoUnionFromJSON( +export function syncListResponseOutputsUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => - SyncListResponseEnvironmentInfoUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnvironmentInfoUnion' from JSON`, + (x) => SyncListResponseOutputsUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseOutputsUnion' from JSON`, ); } /** @internal */ -export const SyncListResponsePoolsAutoscale$inboundSchema: z.ZodType< - SyncListResponsePoolsAutoscale, +export const SyncListResponsePreviousConfig$inboundSchema: z.ZodType< + SyncListResponsePreviousConfig, unknown -> = z.object({ - machine: z.nullable(z.string()).optional(), - max: z.int(), - min: z.int(), - mode: z.literal("autoscale"), -}); +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); -export function syncListResponsePoolsAutoscaleFromJSON( +export function syncListResponsePreviousConfigFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponsePoolsAutoscale$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponsePoolsAutoscale' from JSON`, + (x) => SyncListResponsePreviousConfig$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreviousConfig' from JSON`, ); } /** @internal */ -export const SyncListResponsePoolsFixed$inboundSchema: z.ZodType< - SyncListResponsePoolsFixed, +export const SyncListResponsePreviousConfigUnion$inboundSchema: z.ZodType< + SyncListResponsePreviousConfigUnion, unknown -> = z.object({ - machine: z.nullable(z.string()).optional(), - machines: z.int(), - mode: z.literal("fixed"), -}); +> = z.union([ + z.lazy(() => SyncListResponsePreviousConfig$inboundSchema), + z.any(), +]); -export function syncListResponsePoolsFixedFromJSON( +export function syncListResponsePreviousConfigUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponsePoolsFixed$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponsePoolsFixed' from JSON`, + (x) => + SyncListResponsePreviousConfigUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreviousConfigUnion' from JSON`, ); } /** @internal */ -export const SyncListResponsePoolsUnion$inboundSchema: z.ZodType< - SyncListResponsePoolsUnion, +export const SyncListResponseStackStateStatus$inboundSchema: z.ZodEnum< + typeof SyncListResponseStackStateStatus +> = z.enum(SyncListResponseStackStateStatus); + +/** @internal */ +export const SyncListResponseStackStateResources$inboundSchema: z.ZodType< + SyncListResponseStackStateResources, unknown -> = z.union([ - z.lazy(() => SyncListResponsePoolsFixed$inboundSchema), - z.lazy(() => SyncListResponsePoolsAutoscale$inboundSchema), -]); +> = z.object({ + _internal: z.nullable(z.any()).optional(), + config: z.lazy(() => SyncListResponseStackStateConfig$inboundSchema), + controllerPlatform: z.nullable( + z.union([SyncListResponseControllerPlatformEnum$inboundSchema, z.any()]), + ).optional(), + dependencies: z.array( + z.lazy(() => SyncListResponseStackStateDependency$inboundSchema), + ).optional(), + error: z.nullable( + z.union([ + z.lazy(() => SyncListResponseErrorStackState$inboundSchema), + z.any(), + ]), + ).optional(), + lastFailedState: z.nullable(z.any()).optional(), + lifecycle: z.nullable( + z.union([SyncListResponseLifecycleStackStateEnum$inboundSchema, z.any()]), + ).optional(), + outputs: z.nullable( + z.union([z.lazy(() => SyncListResponseOutputs$inboundSchema), z.any()]), + ).optional(), + previousConfig: z.nullable( + z.union([ + z.lazy(() => SyncListResponsePreviousConfig$inboundSchema), + z.any(), + ]), + ).optional(), + remoteBindingParams: z.nullable(z.any()).optional(), + retryAttempt: z.int().optional(), + status: SyncListResponseStackStateStatus$inboundSchema, + type: z.string(), +}).transform((v) => { + return remap$(v, { + "_internal": "internal", + }); +}); -export function syncListResponsePoolsUnionFromJSON( +export function syncListResponseStackStateResourcesFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponsePoolsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponsePoolsUnion' from JSON`, + (x) => + SyncListResponseStackStateResources$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseStackStateResources' from JSON`, ); } /** @internal */ -export const SyncListResponseCompute$inboundSchema: z.ZodType< - SyncListResponseCompute, +export const SyncListResponseStackState$inboundSchema: z.ZodType< + SyncListResponseStackState, unknown > = z.object({ - pools: z.record( + platform: SyncListResponseStackStatePlatform$inboundSchema, + resourcePrefix: z.string(), + resources: z.record( z.string(), - z.union([ - z.lazy(() => SyncListResponsePoolsFixed$inboundSchema), - z.lazy(() => SyncListResponsePoolsAutoscale$inboundSchema), - ]), - ).optional(), + z.lazy(() => SyncListResponseStackStateResources$inboundSchema), + ), }); -export function syncListResponseComputeFromJSON( +export function syncListResponseStackStateFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseCompute$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCompute' from JSON`, + (x) => SyncListResponseStackState$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponseStackState' from JSON`, ); } /** @internal */ -export const SyncListResponseComputeUnion$inboundSchema: z.ZodType< - SyncListResponseComputeUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseCompute$inboundSchema), z.any()]); +export const SyncListResponsePendingPreparedStackTypeStringList$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackTypeStringList, + ); -export function syncListResponseComputeUnionFromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackDefaultStringList$inboundSchema: + z.ZodType = z + .object({ + type: SyncListResponsePendingPreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }); + +export function syncListResponsePendingPreparedStackDefaultStringListFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackDefaultStringList, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseComputeUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseComputeUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackDefaultStringList$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const SyncListResponseDeploymentModel$inboundSchema: z.ZodEnum< - typeof SyncListResponseDeploymentModel -> = z.enum(SyncListResponseDeploymentModel); +export const SyncListResponsePendingPreparedStackTypeBoolean$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackTypeBoolean, + ); /** @internal */ -export const SyncListResponseAws$inboundSchema: z.ZodType< - SyncListResponseAws, - unknown -> = z.object({ - certificateArn: z.string(), -}); +export const SyncListResponsePendingPreparedStackDefaultBoolean$inboundSchema: + z.ZodType = z + .object({ + type: SyncListResponsePendingPreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), + }); -export function syncListResponseAwsFromJSON( +export function syncListResponsePendingPreparedStackDefaultBooleanFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackDefaultBoolean, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseAws' from JSON`, + (x) => + SyncListResponsePendingPreparedStackDefaultBoolean$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const SyncListResponseAwsUnion$inboundSchema: z.ZodType< - SyncListResponseAwsUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseAws$inboundSchema), z.any()]); - -export function syncListResponseAwsUnionFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => SyncListResponseAwsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseAwsUnion' from JSON`, +export const SyncListResponsePendingPreparedStackTypeNumber$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackTypeNumber, ); -} /** @internal */ -export const SyncListResponseAzureStackSettings$inboundSchema: z.ZodType< - SyncListResponseAzureStackSettings, - unknown -> = z.object({ - keyVaultCertificateId: z.string(), - keyVaultResourceId: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePendingPreparedStackDefaultNumber$inboundSchema: + z.ZodType = z + .object({ + type: SyncListResponsePendingPreparedStackTypeNumber$inboundSchema, + value: z.string(), + }); -export function syncListResponseAzureStackSettingsFromJSON( +export function syncListResponsePendingPreparedStackDefaultNumberFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackDefaultNumber, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseAzureStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseAzureStackSettings' from JSON`, + SyncListResponsePendingPreparedStackDefaultNumber$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const SyncListResponseAzureUnion$inboundSchema: z.ZodType< - SyncListResponseAzureUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseAzureStackSettings$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackTypeString$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackTypeString, + ); -export function syncListResponseAzureUnionFromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackDefaultString$inboundSchema: + z.ZodType = z + .object({ + type: SyncListResponsePendingPreparedStackTypeString$inboundSchema, + value: z.string(), + }); + +export function syncListResponsePendingPreparedStackDefaultStringFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackDefaultString, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseAzureUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseAzureUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackDefaultString$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const SyncListResponseGcpStackSettings$inboundSchema: z.ZodType< - SyncListResponseGcpStackSettings, - unknown -> = z.object({ - certificateName: z.string(), -}); +export const SyncListResponsePendingPreparedStackDefaultUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]); -export function syncListResponseGcpStackSettingsFromJSON( +export function syncListResponsePendingPreparedStackDefaultUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackDefaultUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseGcpStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseGcpStackSettings' from JSON`, + (x) => + SyncListResponsePendingPreparedStackDefaultUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseGcpUnion$inboundSchema: z.ZodType< - SyncListResponseGcpUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseGcpStackSettings$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackTypeEnvEnum$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackTypeEnvEnum, + ); -export function syncListResponseGcpUnionFromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackTypeUnion$inboundSchema: + z.ZodType = z.union([ + SyncListResponsePendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]); + +export function syncListResponsePendingPreparedStackTypeUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackTypeUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseGcpUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseGcpUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackTypeUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseTlsSecretRef$inboundSchema: z.ZodType< - SyncListResponseTlsSecretRef, +export const SyncListResponsePendingPreparedStackEnv$inboundSchema: z.ZodType< + SyncListResponsePendingPreparedStackEnv, unknown > = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncListResponsePendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]), + ).optional(), }); -export function syncListResponseTlsSecretRefFromJSON( +export function syncListResponsePendingPreparedStackEnvFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackEnv, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseTlsSecretRef$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseTlsSecretRef' from JSON`, + (x) => + SyncListResponsePendingPreparedStackEnv$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackEnv' from JSON`, ); } /** @internal */ -export const SyncListResponseDomainsKubernetes$inboundSchema: z.ZodType< - SyncListResponseDomainsKubernetes, - unknown -> = z.object({ - tlsSecretRef: z.lazy(() => SyncListResponseTlsSecretRef$inboundSchema), -}); +export const SyncListResponsePendingPreparedStackKind$inboundSchema: z.ZodEnum< + typeof SyncListResponsePendingPreparedStackKind +> = z.enum(SyncListResponsePendingPreparedStackKind); -export function syncListResponseDomainsKubernetesFromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackPlatform$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackPlatform, + ); + +/** @internal */ +export const SyncListResponsePendingPreparedStackProvidedBy$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackProvidedBy, + ); + +/** @internal */ +export const SyncListResponsePendingPreparedStackValidation$inboundSchema: + z.ZodType = z.object( + { + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), + }, + ); + +export function syncListResponsePendingPreparedStackValidationFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackValidation, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDomainsKubernetes$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDomainsKubernetes' from JSON`, + (x) => + SyncListResponsePendingPreparedStackValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackValidation' from JSON`, ); } /** @internal */ -export const SyncListResponseDomainsKubernetesUnion$inboundSchema: z.ZodType< - SyncListResponseDomainsKubernetesUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseDomainsKubernetes$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackValidationUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncListResponsePendingPreparedStackValidation$inboundSchema + ), + z.any(), + ]); -export function syncListResponseDomainsKubernetesUnionFromJSON( +export function syncListResponsePendingPreparedStackValidationUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackValidationUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseDomainsKubernetesUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDomainsKubernetesUnion' from JSON`, + SyncListResponsePendingPreparedStackValidationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseDomainsCertificate$inboundSchema: z.ZodType< - SyncListResponseDomainsCertificate, +export const SyncListResponsePendingPreparedStackInput$inboundSchema: z.ZodType< + SyncListResponsePendingPreparedStackInput, unknown > = z.object({ - aws: z.nullable( - z.union([z.lazy(() => SyncListResponseAws$inboundSchema), z.any()]), - ).optional(), - azure: z.nullable( + default: z.nullable( z.union([ - z.lazy(() => SyncListResponseAzureStackSettings$inboundSchema), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackDefaultStringList$inboundSchema + ), z.any(), ]), ).optional(), - gcp: z.nullable( - z.union([ - z.lazy(() => SyncListResponseGcpStackSettings$inboundSchema), - z.any(), - ]), + description: z.string(), + env: z.array( + z.lazy(() => SyncListResponsePendingPreparedStackEnv$inboundSchema), ).optional(), - kubernetes: z.nullable( + id: z.string(), + kind: SyncListResponsePendingPreparedStackKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array(SyncListResponsePendingPreparedStackPlatform$inboundSchema), + ).optional(), + providedBy: z.array( + SyncListResponsePendingPreparedStackProvidedBy$inboundSchema, + ), + required: z.boolean(), + validation: z.nullable( z.union([ - z.lazy(() => SyncListResponseDomainsKubernetes$inboundSchema), + z.lazy(() => + SyncListResponsePendingPreparedStackValidation$inboundSchema + ), z.any(), ]), ).optional(), }); -export function syncListResponseDomainsCertificateFromJSON( +export function syncListResponsePendingPreparedStackInputFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackInput, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseDomainsCertificate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDomainsCertificate' from JSON`, + SyncListResponsePendingPreparedStackInput$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackInput' from JSON`, ); } /** @internal */ -export const SyncListResponseCustomDomains$inboundSchema: z.ZodType< - SyncListResponseCustomDomains, - unknown -> = z.object({ - certificate: z.lazy(() => SyncListResponseDomainsCertificate$inboundSchema), - domain: z.string(), -}); +export const SyncListResponsePendingPreparedStackManagementEnum$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackManagementEnum, + ); -export function syncListResponseCustomDomainsFromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackOverrideAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncListResponsePendingPreparedStackOverrideAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCustomDomains$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCustomDomains' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const SyncListResponseModeLoadBalancer$inboundSchema: z.ZodEnum< - typeof SyncListResponseModeLoadBalancer -> = z.enum(SyncListResponseModeLoadBalancer); +export const SyncListResponsePendingPreparedStackOverrideAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncListResponsePendingPreparedStackOverrideAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePendingPreparedStackOverrideAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAwStack' from JSON`, + ); +} /** @internal */ -export const SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema: - z.ZodType = z +export const SyncListResponsePendingPreparedStackOverrideAwBinding$inboundSchema: + z.ZodType = z .object({ - cnameTarget: z.string(), - mode: SyncListResponseModeLoadBalancer$inboundSchema, + resource: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAwStack$inboundSchema + ).optional(), }); -export function syncListResponsePublicEndpointTargetLoadBalancerFromJSON( +export function syncListResponsePendingPreparedStackOverrideAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponsePublicEndpointTargetLoadBalancer, + SyncListResponsePendingPreparedStackOverrideAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema.parse( + SyncListResponsePendingPreparedStackOverrideAwBinding$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponsePublicEndpointTargetLoadBalancer' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseModeMachineAddresses$inboundSchema: z.ZodEnum< - typeof SyncListResponseModeMachineAddresses -> = z.enum(SyncListResponseModeMachineAddresses); +export const SyncListResponsePendingPreparedStackOverrideEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackOverrideEffect, + ); /** @internal */ -export const SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema: - z.ZodType = z +export const SyncListResponsePendingPreparedStackOverrideAwGrant$inboundSchema: + z.ZodType = z .object({ - mode: SyncListResponseModeMachineAddresses$inboundSchema, + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncListResponsePublicEndpointTargetMachineAddressesFromJSON( +export function syncListResponsePendingPreparedStackOverrideAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponsePublicEndpointTargetMachineAddresses, + SyncListResponsePendingPreparedStackOverrideAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema.parse( + SyncListResponsePendingPreparedStackOverrideAwGrant$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponsePublicEndpointTargetMachineAddresses' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const SyncListResponsePublicEndpointTargetUnion$inboundSchema: z.ZodType< - SyncListResponsePublicEndpointTargetUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema), - z.lazy(() => - SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema - ), - z.any(), -]); +export const SyncListResponsePendingPreparedStackOverrideAw$inboundSchema: + z.ZodType = z.object( + { + binding: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncListResponsePendingPreparedStackOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }, + ); -export function syncListResponsePublicEndpointTargetUnionFromJSON( +export function syncListResponsePendingPreparedStackOverrideAwFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponsePublicEndpointTargetUnion, + SyncListResponsePendingPreparedStackOverrideAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponsePublicEndpointTargetUnion$inboundSchema.parse( + SyncListResponsePendingPreparedStackOverrideAw$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponsePublicEndpointTargetUnion' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const SyncListResponseDomains$inboundSchema: z.ZodType< - SyncListResponseDomains, - unknown -> = z.object({ - customDomains: z.nullable( - z.record( - z.string(), - z.lazy(() => SyncListResponseCustomDomains$inboundSchema), - ), - ).optional(), - publicEndpointTarget: z.nullable( - z.union([ - z.lazy(() => - SyncListResponsePublicEndpointTargetLoadBalancer$inboundSchema - ), - z.lazy(() => - SyncListResponsePublicEndpointTargetMachineAddresses$inboundSchema - ), - z.any(), - ]), - ).optional(), -}); +export const SyncListResponsePendingPreparedStackOverrideAzureResource$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackOverrideAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); -export function syncListResponseDomainsFromJSON( +export function syncListResponsePendingPreparedStackOverrideAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDomains$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDomains' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAzureResource' from JSON`, ); } /** @internal */ -export const SyncListResponseDomainsUnion$inboundSchema: z.ZodType< - SyncListResponseDomainsUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseDomains$inboundSchema), z.any()]); +export const SyncListResponsePendingPreparedStackOverrideAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseDomainsUnionFromJSON( +export function syncListResponsePendingPreparedStackOverrideAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDomainsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDomainsUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExternalBindings$inboundSchema: z.ZodType< - SyncListResponseExternalBindings, - unknown -> = z.object({}); +export const SyncListResponsePendingPreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAzureStack$inboundSchema + ).optional(), + }); -export function syncListResponseExternalBindingsFromJSON( +export function syncListResponsePendingPreparedStackOverrideAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExternalBindings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExternalBindings' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseHeartbeats$inboundSchema: z.ZodEnum< - typeof SyncListResponseHeartbeats -> = z.enum(SyncListResponseHeartbeats); +export const SyncListResponsePendingPreparedStackOverrideAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncListResponsePendingPreparedStackOverrideAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePendingPreparedStackOverrideAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAzureGrant' from JSON`, + ); +} /** @internal */ -export const SyncListResponseCloud$inboundSchema: z.ZodType< - SyncListResponseCloud, - unknown -> = z.object({ - accountId: z.nullable(z.string()).optional(), - clusterId: z.nullable(z.string()).optional(), - clusterName: z.nullable(z.string()).optional(), - projectId: z.nullable(z.string()).optional(), - region: z.nullable(z.string()).optional(), - resourceGroup: z.nullable(z.string()).optional(), - subscriptionId: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePendingPreparedStackOverrideAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseCloudFromJSON( +export function syncListResponsePendingPreparedStackOverrideAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCloud$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCloud' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const SyncListResponseCloudUnion$inboundSchema: z.ZodType< - SyncListResponseCloudUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseCloud$inboundSchema), z.any()]); +export const SyncListResponsePendingPreparedStackOverrideConditionResource$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackOverrideConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseCloudUnionFromJSON( +export function syncListResponsePendingPreparedStackOverrideConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideConditionResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCloudUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCloudUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const SyncListResponseOwnership$inboundSchema: z.ZodEnum< - typeof SyncListResponseOwnership -> = z.enum(SyncListResponseOwnership); +export const SyncListResponsePendingPreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncListResponsePendingPreparedStackOverrideResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePendingPreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideResourceConditionUnion' from JSON`, + ); +} /** @internal */ -export const SyncListResponseCluster$inboundSchema: z.ZodType< - SyncListResponseCluster, - unknown -> = z.object({ - cloud: z.nullable( - z.union([z.lazy(() => SyncListResponseCloud$inboundSchema), z.any()]), - ).optional(), - namespace: z.nullable(z.string()).optional(), - ownership: SyncListResponseOwnership$inboundSchema, -}); +export const SyncListResponsePendingPreparedStackOverrideGcpResource$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseClusterFromJSON( +export function syncListResponsePendingPreparedStackOverrideGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCluster$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCluster' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const SyncListResponseClusterUnion$inboundSchema: z.ZodType< - SyncListResponseClusterUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseCluster$inboundSchema), z.any()]); +export const SyncListResponsePendingPreparedStackOverrideConditionStack$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackOverrideConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseClusterUnionFromJSON( +export function syncListResponsePendingPreparedStackOverrideConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseClusterUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseClusterUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateNone2$inboundSchema: z.ZodType< - SyncListResponseCertificateNone2, - unknown -> = z.object({ - mode: z.literal("none"), -}); +export const SyncListResponsePendingPreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackOverrideStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncListResponseCertificateNone2FromJSON( +export function syncListResponsePendingPreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideStackConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCertificateNone2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCertificateNone2' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverrideStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateManagedTLSSecret2$inboundSchema: - z.ZodType = z.object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), - }); +export const SyncListResponsePendingPreparedStackOverrideGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseCertificateManagedTLSSecret2FromJSON( +export function syncListResponsePendingPreparedStackOverrideGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseCertificateManagedTLSSecret2, + SyncListResponsePendingPreparedStackOverrideGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseCertificateManagedTLSSecret2$inboundSchema.parse( + SyncListResponsePendingPreparedStackOverrideGcpStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseCertificateManagedTLSSecret2' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateAwsAcmArn2$inboundSchema: z.ZodType< - SyncListResponseCertificateAwsAcmArn2, - unknown -> = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), -}); +export const SyncListResponsePendingPreparedStackOverrideGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideGcpStack$inboundSchema + ).optional(), + }); -export function syncListResponseCertificateAwsAcmArn2FromJSON( +export function syncListResponsePendingPreparedStackOverrideGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideGcpBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseCertificateAwsAcmArn2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCertificateAwsAcmArn2' from JSON`, + SyncListResponsePendingPreparedStackOverrideGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateManagedAcmImport2$inboundSchema: - z.ZodType = z.object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), - }); +export const SyncListResponsePendingPreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseCertificateManagedAcmImport2FromJSON( +export function syncListResponsePendingPreparedStackOverrideGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseCertificateManagedAcmImport2, + SyncListResponsePendingPreparedStackOverrideGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseCertificateManagedAcmImport2$inboundSchema.parse( + SyncListResponsePendingPreparedStackOverrideGcpGrant$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseCertificateManagedAcmImport2' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateTLSSecretRef2$inboundSchema: z.ZodType< - SyncListResponseCertificateTLSSecretRef2, - unknown -> = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), -}); +export const SyncListResponsePendingPreparedStackOverrideGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseCertificateTLSSecretRef2FromJSON( +export function syncListResponsePendingPreparedStackOverrideGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseCertificateTLSSecretRef2, + SyncListResponsePendingPreparedStackOverrideGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseCertificateTLSSecretRef2$inboundSchema.parse( + SyncListResponsePendingPreparedStackOverrideGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseCertificateTLSSecretRef2' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateUnion2$inboundSchema: z.ZodType< - SyncListResponseCertificateUnion2, - unknown -> = z.union([ - z.lazy(() => SyncListResponseCertificateTLSSecretRef2$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedAcmImport2$inboundSchema), - z.lazy(() => SyncListResponseCertificateAwsAcmArn2$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedTLSSecret2$inboundSchema), - z.lazy(() => SyncListResponseCertificateNone2$inboundSchema), -]); +export const SyncListResponsePendingPreparedStackOverridePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackOverrideGcp$inboundSchema + )), + ).optional(), + }); -export function syncListResponseCertificateUnion2FromJSON( +export function syncListResponsePendingPreparedStackOverridePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverridePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCertificateUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCertificateUnion2' from JSON`, + (x) => + SyncListResponsePendingPreparedStackOverridePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const SyncListResponseModeCustom$inboundSchema: z.ZodEnum< - typeof SyncListResponseModeCustom -> = z.enum(SyncListResponseModeCustom); - -/** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema: - z.ZodEnum< - typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum4 - > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum4); - -/** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema: - z.ZodType< - SyncListResponseProviderAzureApplicationGatewayForContainers4, - unknown - > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - SyncListResponseProviderAzureApplicationGatewayForContainersEnum4$inboundSchema, +export const SyncListResponsePendingPreparedStackOverride$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncListResponsePendingPreparedStackOverridePlatforms$inboundSchema + ), }); -export function syncListResponseProviderAzureApplicationGatewayForContainers4FromJSON( +export function syncListResponsePendingPreparedStackOverrideFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProviderAzureApplicationGatewayForContainers4, + SyncListResponsePendingPreparedStackOverride, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers4' from JSON`, + SyncListResponsePendingPreparedStackOverride$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackOverride' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderGkeGatewayEnum4$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderGkeGatewayEnum4 -> = z.enum(SyncListResponseProviderGkeGatewayEnum4); - -/** @internal */ -export const SyncListResponseProviderGkeGateway4$inboundSchema: z.ZodType< - SyncListResponseProviderGkeGateway4, - unknown -> = z.object({ - provider: SyncListResponseProviderGkeGatewayEnum4$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePendingPreparedStackOverrideUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncListResponsePendingPreparedStackOverride$inboundSchema), + z.string(), + ]); -export function syncListResponseProviderGkeGateway4FromJSON( +export function syncListResponsePendingPreparedStackOverrideUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackOverrideUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProviderGkeGateway4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderGkeGateway4' from JSON`, + SyncListResponsePendingPreparedStackOverrideUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderAwsAlbEnum4$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderAwsAlbEnum4 -> = z.enum(SyncListResponseProviderAwsAlbEnum4); - -/** @internal */ -export const SyncListResponseProviderAwsAlb4$inboundSchema: z.ZodType< - SyncListResponseProviderAwsAlb4, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: SyncListResponseProviderAwsAlbEnum4$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const SyncListResponsePendingPreparedStackManagement2$inboundSchema: + z.ZodType = z + .object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackOverride$inboundSchema + ), + z.string(), + ])), + ), + }); -export function syncListResponseProviderAwsAlb4FromJSON( +export function syncListResponsePendingPreparedStackManagement2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackManagement2, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderAwsAlb4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAwsAlb4' from JSON`, + (x) => + SyncListResponsePendingPreparedStackManagement2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackManagement2' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderUnion4$inboundSchema: z.ZodType< - SyncListResponseProviderUnion4, - unknown -> = z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb4$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway4$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackExtendAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseProviderUnion4FromJSON( +export function syncListResponsePendingPreparedStackExtendAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderUnion4$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderUnion4' from JSON`, - ); -} - -/** @internal */ -export const SyncListResponseRouteGateway2$inboundSchema: z.ZodType< - SyncListResponseRouteGateway2, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb4$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers4$inboundSchema + (x) => + SyncListResponsePendingPreparedStackExtendAwResource$inboundSchema.parse( + JSON.parse(x), ), - z.lazy(() => SyncListResponseProviderGkeGateway4$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), -}); - -export function syncListResponseRouteGateway2FromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => SyncListResponseRouteGateway2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseRouteGateway2' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema: - z.ZodEnum< - typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum3 - > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum3); - -/** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema: - z.ZodType< - SyncListResponseProviderAzureApplicationGatewayForContainers3, - unknown - > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - SyncListResponseProviderAzureApplicationGatewayForContainersEnum3$inboundSchema, - }); +export const SyncListResponsePendingPreparedStackExtendAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseProviderAzureApplicationGatewayForContainers3FromJSON( +export function syncListResponsePendingPreparedStackExtendAwStackFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProviderAzureApplicationGatewayForContainers3, + SyncListResponsePendingPreparedStackExtendAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers3' from JSON`, + SyncListResponsePendingPreparedStackExtendAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderGkeGatewayEnum3$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderGkeGatewayEnum3 -> = z.enum(SyncListResponseProviderGkeGatewayEnum3); - -/** @internal */ -export const SyncListResponseProviderGkeGateway3$inboundSchema: z.ZodType< - SyncListResponseProviderGkeGateway3, - unknown -> = z.object({ - provider: SyncListResponseProviderGkeGatewayEnum3$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePendingPreparedStackExtendAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAwStack$inboundSchema + ).optional(), + }); -export function syncListResponseProviderGkeGateway3FromJSON( +export function syncListResponsePendingPreparedStackExtendAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAwBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProviderGkeGateway3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderGkeGateway3' from JSON`, + SyncListResponsePendingPreparedStackExtendAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderAwsAlbEnum3$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderAwsAlbEnum3 -> = z.enum(SyncListResponseProviderAwsAlbEnum3); +export const SyncListResponsePendingPreparedStackExtendEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackExtendEffect, + ); /** @internal */ -export const SyncListResponseProviderAwsAlb3$inboundSchema: z.ZodType< - SyncListResponseProviderAwsAlb3, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: SyncListResponseProviderAwsAlbEnum3$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const SyncListResponsePendingPreparedStackExtendAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseProviderAwsAlb3FromJSON( +export function syncListResponsePendingPreparedStackExtendAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderAwsAlb3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAwsAlb3' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderUnion3$inboundSchema: z.ZodType< - SyncListResponseProviderUnion3, - unknown -> = z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb3$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway3$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackExtendAw$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncListResponsePendingPreparedStackExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseProviderUnion3FromJSON( +export function syncListResponsePendingPreparedStackExtendAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAw, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderUnion3$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderUnion3' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const SyncListResponseRouteIngress2$inboundSchema: z.ZodType< - SyncListResponseRouteIngress2, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb3$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers3$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway3$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), -}); +export const SyncListResponsePendingPreparedStackExtendAzureResource$inboundSchema: + z.ZodType = + z.object({ + scope: z.string(), + }); -export function syncListResponseRouteIngress2FromJSON( +export function syncListResponsePendingPreparedStackExtendAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseRouteIngress2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseRouteIngress2' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const SyncListResponseRouteUnion2$inboundSchema: z.ZodType< - SyncListResponseRouteUnion2, - unknown -> = z.union([ - z.lazy(() => SyncListResponseRouteIngress2$inboundSchema), - z.lazy(() => SyncListResponseRouteGateway2$inboundSchema), -]); +export const SyncListResponsePendingPreparedStackExtendAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseRouteUnion2FromJSON( +export function syncListResponsePendingPreparedStackExtendAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseRouteUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseRouteUnion2' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExposureCustom$inboundSchema: z.ZodType< - SyncListResponseExposureCustom, - unknown -> = z.object({ - certificate: z.union([ - z.lazy(() => SyncListResponseCertificateTLSSecretRef2$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedAcmImport2$inboundSchema), - z.lazy(() => SyncListResponseCertificateAwsAcmArn2$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedTLSSecret2$inboundSchema), - z.lazy(() => SyncListResponseCertificateNone2$inboundSchema), - ]), - domain: z.string(), - mode: SyncListResponseModeCustom$inboundSchema, - route: z.union([ - z.lazy(() => SyncListResponseRouteIngress2$inboundSchema), - z.lazy(() => SyncListResponseRouteGateway2$inboundSchema), - ]), -}); +export const SyncListResponsePendingPreparedStackExtendAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAzureStack$inboundSchema + ).optional(), + }); -export function syncListResponseExposureCustomFromJSON( +export function syncListResponsePendingPreparedStackExtendAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAzureBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExposureCustom$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExposureCustom' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateNone1$inboundSchema: z.ZodType< - SyncListResponseCertificateNone1, - unknown -> = z.object({ - mode: z.literal("none"), -}); +export const SyncListResponsePendingPreparedStackExtendAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseCertificateNone1FromJSON( +export function syncListResponsePendingPreparedStackExtendAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCertificateNone1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCertificateNone1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateManagedTLSSecret1$inboundSchema: - z.ZodType = z.object({ - mode: z.literal("managedTlsSecret"), - secretNameTemplate: z.string(), - }); +export const SyncListResponsePendingPreparedStackExtendAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseCertificateManagedTLSSecret1FromJSON( +export function syncListResponsePendingPreparedStackExtendAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseCertificateManagedTLSSecret1, + SyncListResponsePendingPreparedStackExtendAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseCertificateManagedTLSSecret1$inboundSchema.parse( + SyncListResponsePendingPreparedStackExtendAzure$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseCertificateManagedTLSSecret1' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateAwsAcmArn1$inboundSchema: z.ZodType< - SyncListResponseCertificateAwsAcmArn1, - unknown -> = z.object({ - certificateArn: z.string(), - mode: z.literal("awsAcmArn"), -}); +export const SyncListResponsePendingPreparedStackExtendConditionResource$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackExtendConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseCertificateAwsAcmArn1FromJSON( +export function syncListResponsePendingPreparedStackExtendConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendConditionResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseCertificateAwsAcmArn1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCertificateAwsAcmArn1' from JSON`, + SyncListResponsePendingPreparedStackExtendConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateManagedAcmImport1$inboundSchema: - z.ZodType = z.object({ - mode: z.literal("managedAcmImport"), - region: z.nullable(z.string()).optional(), - tags: z.record(z.string(), z.string()).optional(), - }); +export const SyncListResponsePendingPreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncListResponseCertificateManagedAcmImport1FromJSON( +export function syncListResponsePendingPreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseCertificateManagedAcmImport1, + SyncListResponsePendingPreparedStackExtendResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseCertificateManagedAcmImport1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseCertificateManagedAcmImport1' from JSON`, + SyncListResponsePendingPreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendResourceConditionUnion' from JSON`, ); -} - -/** @internal */ -export const SyncListResponseCertificateTLSSecretRef1$inboundSchema: z.ZodType< - SyncListResponseCertificateTLSSecretRef1, - unknown -> = z.object({ - namespace: z.nullable(z.string()).optional(), - secretName: z.string(), - mode: z.literal("tlsSecretRef"), -}); +} -export function syncListResponseCertificateTLSSecretRef1FromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackExtendGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncListResponsePendingPreparedStackExtendGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseCertificateTLSSecretRef1, + SyncListResponsePendingPreparedStackExtendGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseCertificateTLSSecretRef1$inboundSchema.parse( + SyncListResponsePendingPreparedStackExtendGcpResource$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseCertificateTLSSecretRef1' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const SyncListResponseCertificateUnion1$inboundSchema: z.ZodType< - SyncListResponseCertificateUnion1, - unknown -> = z.union([ - z.lazy(() => SyncListResponseCertificateTLSSecretRef1$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedAcmImport1$inboundSchema), - z.lazy(() => SyncListResponseCertificateAwsAcmArn1$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedTLSSecret1$inboundSchema), - z.lazy(() => SyncListResponseCertificateNone1$inboundSchema), -]); +export const SyncListResponsePendingPreparedStackExtendConditionStack$inboundSchema: + z.ZodType = + z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseCertificateUnion1FromJSON( +export function syncListResponsePendingPreparedStackExtendConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseCertificateUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseCertificateUnion1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const SyncListResponseModeGenerated$inboundSchema: z.ZodEnum< - typeof SyncListResponseModeGenerated -> = z.enum(SyncListResponseModeGenerated); - -/** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema: - z.ZodEnum< - typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum2 - > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum2); - -/** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema: +export const SyncListResponsePendingPreparedStackExtendStackConditionUnion$inboundSchema: z.ZodType< - SyncListResponseProviderAzureApplicationGatewayForContainers2, + SyncListResponsePendingPreparedStackExtendStackConditionUnion, unknown - > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - SyncListResponseProviderAzureApplicationGatewayForContainersEnum2$inboundSchema, - }); + > = z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncListResponseProviderAzureApplicationGatewayForContainers2FromJSON( +export function syncListResponsePendingPreparedStackExtendStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProviderAzureApplicationGatewayForContainers2, + SyncListResponsePendingPreparedStackExtendStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema + SyncListResponsePendingPreparedStackExtendStackConditionUnion$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers2' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderGkeGatewayEnum2$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderGkeGatewayEnum2 -> = z.enum(SyncListResponseProviderGkeGatewayEnum2); - -/** @internal */ -export const SyncListResponseProviderGkeGateway2$inboundSchema: z.ZodType< - SyncListResponseProviderGkeGateway2, - unknown -> = z.object({ - provider: SyncListResponseProviderGkeGatewayEnum2$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePendingPreparedStackExtendGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseProviderGkeGateway2FromJSON( +export function syncListResponsePendingPreparedStackExtendGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendGcpStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProviderGkeGateway2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderGkeGateway2' from JSON`, + SyncListResponsePendingPreparedStackExtendGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderAwsAlbEnum2$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderAwsAlbEnum2 -> = z.enum(SyncListResponseProviderAwsAlbEnum2); - -/** @internal */ -export const SyncListResponseProviderAwsAlb2$inboundSchema: z.ZodType< - SyncListResponseProviderAwsAlb2, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: SyncListResponseProviderAwsAlbEnum2$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const SyncListResponsePendingPreparedStackExtendGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackExtendGcpStack$inboundSchema + ).optional(), + }); -export function syncListResponseProviderAwsAlb2FromJSON( +export function syncListResponsePendingPreparedStackExtendGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderAwsAlb2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAwsAlb2' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderUnion2$inboundSchema: z.ZodType< - SyncListResponseProviderUnion2, - unknown -> = z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb2$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway2$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackExtendGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseProviderUnion2FromJSON( +export function syncListResponsePendingPreparedStackExtendGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderUnion2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderUnion2' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseRouteGateway1$inboundSchema: z.ZodType< - SyncListResponseRouteGateway1, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - gatewayClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - listenerPort: z.int(), - provider: z.nullable( - z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb2$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers2$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway2$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("gateway"), -}); +export const SyncListResponsePendingPreparedStackExtendGcp$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseRouteGateway1FromJSON( +export function syncListResponsePendingPreparedStackExtendGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendGcp, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseRouteGateway1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseRouteGateway1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackExtendGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema: - z.ZodEnum< - typeof SyncListResponseProviderAzureApplicationGatewayForContainersEnum1 - > = z.enum(SyncListResponseProviderAzureApplicationGatewayForContainersEnum1); +export const SyncListResponsePendingPreparedStackExtendPlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackExtendGcp$inboundSchema + )), + ).optional(), + }); + +export function syncListResponsePendingPreparedStackExtendPlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendPlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePendingPreparedStackExtendPlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendPlatforms' from JSON`, + ); +} /** @internal */ -export const SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema: - z.ZodType< - SyncListResponseProviderAzureApplicationGatewayForContainers1, - unknown - > = z.object({ - albName: z.nullable(z.string()).optional(), - albNamespace: z.nullable(z.string()).optional(), - frontend: z.string(), - provider: - SyncListResponseProviderAzureApplicationGatewayForContainersEnum1$inboundSchema, +export const SyncListResponsePendingPreparedStackExtend$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncListResponsePendingPreparedStackExtendPlatforms$inboundSchema + ), }); -export function syncListResponseProviderAzureApplicationGatewayForContainers1FromJSON( +export function syncListResponsePendingPreparedStackExtendFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProviderAzureApplicationGatewayForContainers1, + SyncListResponsePendingPreparedStackExtend, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAzureApplicationGatewayForContainers1' from JSON`, + SyncListResponsePendingPreparedStackExtend$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtend' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderGkeGatewayEnum1$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderGkeGatewayEnum1 -> = z.enum(SyncListResponseProviderGkeGatewayEnum1); - -/** @internal */ -export const SyncListResponseProviderGkeGateway1$inboundSchema: z.ZodType< - SyncListResponseProviderGkeGateway1, - unknown -> = z.object({ - provider: SyncListResponseProviderGkeGatewayEnum1$inboundSchema, - staticAddressName: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePendingPreparedStackExtendUnion$inboundSchema: + z.ZodType = z.union( + [ + z.lazy(() => SyncListResponsePendingPreparedStackExtend$inboundSchema), + z.string(), + ], + ); -export function syncListResponseProviderGkeGateway1FromJSON( +export function syncListResponsePendingPreparedStackExtendUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackExtendUnion, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProviderGkeGateway1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderGkeGateway1' from JSON`, + SyncListResponsePendingPreparedStackExtendUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderAwsAlbEnum1$inboundSchema: z.ZodEnum< - typeof SyncListResponseProviderAwsAlbEnum1 -> = z.enum(SyncListResponseProviderAwsAlbEnum1); - -/** @internal */ -export const SyncListResponseProviderAwsAlb1$inboundSchema: z.ZodType< - SyncListResponseProviderAwsAlb1, - unknown -> = z.object({ - ipAddressType: z.nullable(z.string()).optional(), - provider: SyncListResponseProviderAwsAlbEnum1$inboundSchema, - scheme: z.string(), - subnetIds: z.array(z.string()).optional(), - targetType: z.string(), -}); +export const SyncListResponsePendingPreparedStackManagement1$inboundSchema: + z.ZodType = z + .object({ + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackExtend$inboundSchema + ), + z.string(), + ])), + ), + }); -export function syncListResponseProviderAwsAlb1FromJSON( +export function syncListResponsePendingPreparedStackManagement1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackManagement1, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderAwsAlb1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderAwsAlb1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackManagement1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackManagement1' from JSON`, ); } /** @internal */ -export const SyncListResponseProviderUnion1$inboundSchema: z.ZodType< - SyncListResponseProviderUnion1, - unknown -> = z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb1$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway1$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackManagementUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncListResponsePendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackManagement2$inboundSchema + ), + SyncListResponsePendingPreparedStackManagementEnum$inboundSchema, + ]); -export function syncListResponseProviderUnion1FromJSON( +export function syncListResponsePendingPreparedStackManagementUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackManagementUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProviderUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProviderUnion1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackManagementUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseRouteIngress1$inboundSchema: z.ZodType< - SyncListResponseRouteIngress1, - unknown -> = z.object({ - annotations: z.record(z.string(), z.string()).optional(), - controller: z.nullable(z.string()).optional(), - ingressClassName: z.string(), - labels: z.record(z.string(), z.string()).optional(), - provider: z.nullable( - z.union([ - z.lazy(() => SyncListResponseProviderAwsAlb1$inboundSchema), - z.lazy(() => - SyncListResponseProviderAzureApplicationGatewayForContainers1$inboundSchema - ), - z.lazy(() => SyncListResponseProviderGkeGateway1$inboundSchema), - z.any(), - ]), - ).optional(), - routeApi: z.literal("ingress"), -}); +export const SyncListResponsePendingPreparedStackProfileAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseRouteIngress1FromJSON( +export function syncListResponsePendingPreparedStackProfileAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseRouteIngress1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseRouteIngress1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const SyncListResponseRouteUnion1$inboundSchema: z.ZodType< - SyncListResponseRouteUnion1, - unknown -> = z.union([ - z.lazy(() => SyncListResponseRouteIngress1$inboundSchema), - z.lazy(() => SyncListResponseRouteGateway1$inboundSchema), -]); +export const SyncListResponsePendingPreparedStackProfileAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseRouteUnion1FromJSON( +export function syncListResponsePendingPreparedStackProfileAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAwStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseRouteUnion1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseRouteUnion1' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExposureGenerated$inboundSchema: z.ZodType< - SyncListResponseExposureGenerated, - unknown -> = z.object({ - certificate: z.union([ - z.lazy(() => SyncListResponseCertificateTLSSecretRef1$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedAcmImport1$inboundSchema), - z.lazy(() => SyncListResponseCertificateAwsAcmArn1$inboundSchema), - z.lazy(() => SyncListResponseCertificateManagedTLSSecret1$inboundSchema), - z.lazy(() => SyncListResponseCertificateNone1$inboundSchema), - ]), - mode: SyncListResponseModeGenerated$inboundSchema, - route: z.union([ - z.lazy(() => SyncListResponseRouteIngress1$inboundSchema), - z.lazy(() => SyncListResponseRouteGateway1$inboundSchema), - ]), -}); +export const SyncListResponsePendingPreparedStackProfileAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAwStack$inboundSchema + ).optional(), + }); -export function syncListResponseExposureGeneratedFromJSON( +export function syncListResponsePendingPreparedStackProfileAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExposureGenerated$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExposureGenerated' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseModeDisabled$inboundSchema: z.ZodEnum< - typeof SyncListResponseModeDisabled -> = z.enum(SyncListResponseModeDisabled); +export const SyncListResponsePendingPreparedStackProfileEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackProfileEffect, + ); /** @internal */ -export const SyncListResponseExposureDisabled$inboundSchema: z.ZodType< - SyncListResponseExposureDisabled, - unknown -> = z.object({ - mode: SyncListResponseModeDisabled$inboundSchema, -}); +export const SyncListResponsePendingPreparedStackProfileAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseExposureDisabledFromJSON( +export function syncListResponsePendingPreparedStackProfileAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExposureDisabled$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExposureDisabled' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseExposureUnion$inboundSchema: z.ZodType< - SyncListResponseExposureUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseExposureCustom$inboundSchema), - z.lazy(() => SyncListResponseExposureGenerated$inboundSchema), - z.lazy(() => SyncListResponseExposureDisabled$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackProfileAw$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncListResponsePendingPreparedStackProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseExposureUnionFromJSON( +export function syncListResponsePendingPreparedStackProfileAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAw, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExposureUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExposureUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const SyncListResponseKubernetes$inboundSchema: z.ZodType< - SyncListResponseKubernetes, - unknown -> = z.object({ - cluster: z.nullable( - z.union([z.lazy(() => SyncListResponseCluster$inboundSchema), z.any()]), - ).optional(), - exposure: z.nullable( - z.union([ - z.lazy(() => SyncListResponseExposureCustom$inboundSchema), - z.lazy(() => SyncListResponseExposureGenerated$inboundSchema), - z.lazy(() => SyncListResponseExposureDisabled$inboundSchema), - z.any(), - ]), - ).optional(), -}); +export const SyncListResponsePendingPreparedStackProfileAzureResource$inboundSchema: + z.ZodType = + z.object({ + scope: z.string(), + }); -export function syncListResponseKubernetesFromJSON( +export function syncListResponsePendingPreparedStackProfileAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAzureResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseKubernetes$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseKubernetes' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const SyncListResponseKubernetesUnion$inboundSchema: z.ZodType< - SyncListResponseKubernetesUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseKubernetes$inboundSchema), z.any()]); +export const SyncListResponsePendingPreparedStackProfileAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseKubernetesUnionFromJSON( +export function syncListResponsePendingPreparedStackProfileAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseKubernetesUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseKubernetesUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeByoVnetAzure$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeByoVnetAzure -> = z.enum(SyncListResponseTypeByoVnetAzure); - -/** @internal */ -export const SyncListResponseNetworkByoVnetAzure$inboundSchema: z.ZodType< - SyncListResponseNetworkByoVnetAzure, - unknown -> = z.object({ - application_gateway_subnet_name: z.nullable(z.string()).optional(), - private_endpoint_subnet_name: z.nullable(z.string()).optional(), - private_subnet_name: z.string(), - public_subnet_name: z.string(), - type: SyncListResponseTypeByoVnetAzure$inboundSchema, - vnet_resource_id: z.string(), -}).transform((v) => { - return remap$(v, { - "application_gateway_subnet_name": "applicationGatewaySubnetName", - "private_endpoint_subnet_name": "privateEndpointSubnetName", - "private_subnet_name": "privateSubnetName", - "public_subnet_name": "publicSubnetName", - "vnet_resource_id": "vnetResourceId", - }); -}); +export const SyncListResponsePendingPreparedStackProfileAzureBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAzureStack$inboundSchema + ).optional(), + }); -export function syncListResponseNetworkByoVnetAzureFromJSON( +export function syncListResponsePendingPreparedStackProfileAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAzureBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseNetworkByoVnetAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseNetworkByoVnetAzure' from JSON`, + SyncListResponsePendingPreparedStackProfileAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeByoVpcGcp$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeByoVpcGcp -> = z.enum(SyncListResponseTypeByoVpcGcp); +export const SyncListResponsePendingPreparedStackProfileAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -/** @internal */ -export const SyncListResponseNetworkByoVpcGcp$inboundSchema: z.ZodType< - SyncListResponseNetworkByoVpcGcp, - unknown -> = z.object({ - network_name: z.string(), - region: z.string(), - subnet_name: z.string(), - type: SyncListResponseTypeByoVpcGcp$inboundSchema, -}).transform((v) => { - return remap$(v, { - "network_name": "networkName", - "subnet_name": "subnetName", - }); -}); +export function syncListResponsePendingPreparedStackProfileAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePendingPreparedStackProfileAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponsePendingPreparedStackProfileAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseNetworkByoVpcGcpFromJSON( +export function syncListResponsePendingPreparedStackProfileAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseNetworkByoVpcGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseNetworkByoVpcGcp' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeByoVpcAws$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeByoVpcAws -> = z.enum(SyncListResponseTypeByoVpcAws); - -/** @internal */ -export const SyncListResponseNetworkByoVpcAws$inboundSchema: z.ZodType< - SyncListResponseNetworkByoVpcAws, - unknown -> = z.object({ - private_subnet_ids: z.array(z.string()), - public_subnet_ids: z.array(z.string()), - security_group_ids: z.array(z.string()).optional(), - type: SyncListResponseTypeByoVpcAws$inboundSchema, - vpc_id: z.string(), -}).transform((v) => { - return remap$(v, { - "private_subnet_ids": "privateSubnetIds", - "public_subnet_ids": "publicSubnetIds", - "security_group_ids": "securityGroupIds", - "vpc_id": "vpcId", +export const SyncListResponsePendingPreparedStackProfileConditionResource$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackProfileConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), }); -}); -export function syncListResponseNetworkByoVpcAwsFromJSON( +export function syncListResponsePendingPreparedStackProfileConditionResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileConditionResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseNetworkByoVpcAws$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseNetworkByoVpcAws' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeCreate$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeCreate -> = z.enum(SyncListResponseTypeCreate); - -/** @internal */ -export const SyncListResponseNetworkCreate$inboundSchema: z.ZodType< - SyncListResponseNetworkCreate, - unknown -> = z.object({ - availability_zones: z.int().optional(), - cidr: z.nullable(z.string()).optional(), - type: SyncListResponseTypeCreate$inboundSchema, -}).transform((v) => { - return remap$(v, { - "availability_zones": "availabilityZones", - }); -}); +export const SyncListResponsePendingPreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncListResponseNetworkCreateFromJSON( +export function syncListResponsePendingPreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileResourceConditionUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseNetworkCreate$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseNetworkCreate' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeUseDefault$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeUseDefault -> = z.enum(SyncListResponseTypeUseDefault); - -/** @internal */ -export const SyncListResponseNetworkUseDefault$inboundSchema: z.ZodType< - SyncListResponseNetworkUseDefault, - unknown -> = z.object({ - type: SyncListResponseTypeUseDefault$inboundSchema, -}); +export const SyncListResponsePendingPreparedStackProfileGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseNetworkUseDefaultFromJSON( +export function syncListResponsePendingPreparedStackProfileGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseNetworkUseDefault$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseNetworkUseDefault' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const SyncListResponseNetworkUnion$inboundSchema: z.ZodType< - SyncListResponseNetworkUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseNetworkByoVpcAws$inboundSchema), - z.lazy(() => SyncListResponseNetworkByoVpcGcp$inboundSchema), - z.lazy(() => SyncListResponseNetworkByoVnetAzure$inboundSchema), - z.lazy(() => SyncListResponseNetworkUseDefault$inboundSchema), - z.lazy(() => SyncListResponseNetworkCreate$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackProfileConditionStack$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackProfileConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseNetworkUnionFromJSON( +export function syncListResponsePendingPreparedStackProfileConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileConditionStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseNetworkUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseNetworkUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const SyncListResponseTelemetry$inboundSchema: z.ZodEnum< - typeof SyncListResponseTelemetry -> = z.enum(SyncListResponseTelemetry); +export const SyncListResponsePendingPreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePendingPreparedStackProfileStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]); -/** @internal */ -export const SyncListResponseUpdates$inboundSchema: z.ZodEnum< - typeof SyncListResponseUpdates -> = z.enum(SyncListResponseUpdates); +export function syncListResponsePendingPreparedStackProfileStackConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileStackConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponsePendingPreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileStackConditionUnion' from JSON`, + ); +} /** @internal */ -export const SyncListResponseStackSettings$inboundSchema: z.ZodType< - SyncListResponseStackSettings, - unknown -> = z.object({ - compute: z.nullable( - z.union([z.lazy(() => SyncListResponseCompute$inboundSchema), z.any()]), - ).optional(), - deploymentModel: SyncListResponseDeploymentModel$inboundSchema.optional(), - domains: z.nullable( - z.union([z.lazy(() => SyncListResponseDomains$inboundSchema), z.any()]), - ).optional(), - externalBindings: z.nullable( - z.lazy(() => SyncListResponseExternalBindings$inboundSchema), - ).optional(), - heartbeats: SyncListResponseHeartbeats$inboundSchema.optional(), - kubernetes: z.nullable( - z.union([z.lazy(() => SyncListResponseKubernetes$inboundSchema), z.any()]), - ).optional(), - network: z.nullable( - z.union([ - z.lazy(() => SyncListResponseNetworkByoVpcAws$inboundSchema), - z.lazy(() => SyncListResponseNetworkByoVpcGcp$inboundSchema), - z.lazy(() => SyncListResponseNetworkByoVnetAzure$inboundSchema), - z.lazy(() => SyncListResponseNetworkUseDefault$inboundSchema), - z.lazy(() => SyncListResponseNetworkCreate$inboundSchema), - z.any(), - ]), - ).optional(), - telemetry: SyncListResponseTelemetry$inboundSchema.optional(), - updates: SyncListResponseUpdates$inboundSchema.optional(), -}); +export const SyncListResponsePendingPreparedStackProfileGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseStackSettingsFromJSON( +export function syncListResponsePendingPreparedStackProfileGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseStackSettings$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseStackSettings' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const SyncListResponseStackStatePlatform$inboundSchema: z.ZodEnum< - typeof SyncListResponseStackStatePlatform -> = z.enum(SyncListResponseStackStatePlatform); - -/** @internal */ -export const SyncListResponseStackStateConfig$inboundSchema: z.ZodType< - SyncListResponseStackStateConfig, - unknown -> = collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const SyncListResponsePendingPreparedStackProfileGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePendingPreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePendingPreparedStackProfileGcpStack$inboundSchema + ).optional(), + }); -export function syncListResponseStackStateConfigFromJSON( +export function syncListResponsePendingPreparedStackProfileGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseStackStateConfig$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseStackStateConfig' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseControllerPlatformEnum$inboundSchema: z.ZodEnum< - typeof SyncListResponseControllerPlatformEnum -> = z.enum(SyncListResponseControllerPlatformEnum); - -/** @internal */ -export const SyncListResponseControllerPlatformUnion$inboundSchema: z.ZodType< - SyncListResponseControllerPlatformUnion, - unknown -> = z.union([SyncListResponseControllerPlatformEnum$inboundSchema, z.any()]); +export const SyncListResponsePendingPreparedStackProfileGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseControllerPlatformUnionFromJSON( +export function syncListResponsePendingPreparedStackProfileGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseControllerPlatformUnion, + SyncListResponsePendingPreparedStackProfileGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseControllerPlatformUnion$inboundSchema.parse( + SyncListResponsePendingPreparedStackProfileGcpGrant$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseControllerPlatformUnion' from JSON`, + `Failed to parse 'SyncListResponsePendingPreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseStackStateDependency$inboundSchema: z.ZodType< - SyncListResponseStackStateDependency, - unknown -> = z.object({ - id: z.string(), - type: z.string(), -}); +export const SyncListResponsePendingPreparedStackProfileGcp$inboundSchema: + z.ZodType = z.object( + { + binding: z.lazy(() => + SyncListResponsePendingPreparedStackProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePendingPreparedStackProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }, + ); -export function syncListResponseStackStateDependencyFromJSON( +export function syncListResponsePendingPreparedStackProfileGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileGcp, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseStackStateDependency$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseStackStateDependency' from JSON`, + SyncListResponsePendingPreparedStackProfileGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const SyncListResponseErrorStackState$inboundSchema: z.ZodType< - SyncListResponseErrorStackState, - unknown -> = z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), -}); +export const SyncListResponsePendingPreparedStackProfilePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncListResponsePendingPreparedStackProfileGcp$inboundSchema + )), + ).optional(), + }); -export function syncListResponseErrorStackStateFromJSON( +export function syncListResponsePendingPreparedStackProfilePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfilePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseErrorStackState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseErrorStackState' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfilePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const SyncListResponseErrorUnion$inboundSchema: z.ZodType< - SyncListResponseErrorUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseErrorStackState$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackProfile$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncListResponsePendingPreparedStackProfilePlatforms$inboundSchema + ), + }); -export function syncListResponseErrorUnionFromJSON( +export function syncListResponsePendingPreparedStackProfileFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfile, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseErrorUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfile$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfile' from JSON`, ); } /** @internal */ -export const SyncListResponseLifecycleStackStateEnum$inboundSchema: z.ZodEnum< - typeof SyncListResponseLifecycleStackStateEnum -> = z.enum(SyncListResponseLifecycleStackStateEnum); - -/** @internal */ -export const SyncListResponseLifecycleUnion$inboundSchema: z.ZodType< - SyncListResponseLifecycleUnion, - unknown -> = z.union([SyncListResponseLifecycleStackStateEnum$inboundSchema, z.any()]); +export const SyncListResponsePendingPreparedStackProfileUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncListResponsePendingPreparedStackProfile$inboundSchema), + z.string(), + ]); -export function syncListResponseLifecycleUnionFromJSON( +export function syncListResponsePendingPreparedStackProfileUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackProfileUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseLifecycleUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseLifecycleUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackProfileUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseOutputs$inboundSchema: z.ZodType< - SyncListResponseOutputs, - unknown -> = collectExtraKeys$( - z.object({ - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const SyncListResponsePendingPreparedStackPermissions$inboundSchema: + z.ZodType = z + .object({ + management: z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + SyncListResponsePendingPreparedStackManagement2$inboundSchema + ), + SyncListResponsePendingPreparedStackManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncListResponsePendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]), + ), + ), + ), + }); -export function syncListResponseOutputsFromJSON( +export function syncListResponsePendingPreparedStackPermissionsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackPermissions, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOutputs$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOutputs' from JSON`, + (x) => + SyncListResponsePendingPreparedStackPermissions$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackPermissions' from JSON`, ); } /** @internal */ -export const SyncListResponseOutputsUnion$inboundSchema: z.ZodType< - SyncListResponseOutputsUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseOutputs$inboundSchema), z.any()]); +export const SyncListResponsePendingPreparedStackConfig$inboundSchema: + z.ZodType = + collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, + ); -export function syncListResponseOutputsUnionFromJSON( +export function syncListResponsePendingPreparedStackConfigFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackConfig, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOutputsUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOutputsUnion' from JSON`, + (x) => + SyncListResponsePendingPreparedStackConfig$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackConfig' from JSON`, ); } /** @internal */ -export const SyncListResponsePreviousConfig$inboundSchema: z.ZodType< - SyncListResponsePreviousConfig, - unknown -> = collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const SyncListResponsePendingPreparedStackDependency$inboundSchema: + z.ZodType = z.object( + { + id: z.string(), + type: z.string(), + }, + ); -export function syncListResponsePreviousConfigFromJSON( +export function syncListResponsePendingPreparedStackDependencyFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackDependency, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponsePreviousConfig$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponsePreviousConfig' from JSON`, + (x) => + SyncListResponsePendingPreparedStackDependency$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackDependency' from JSON`, ); } /** @internal */ -export const SyncListResponsePreviousConfigUnion$inboundSchema: z.ZodType< - SyncListResponsePreviousConfigUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponsePreviousConfig$inboundSchema), - z.any(), -]); +export const SyncListResponsePendingPreparedStackLifecycle$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePendingPreparedStackLifecycle, + ); -export function syncListResponsePreviousConfigUnionFromJSON( +/** @internal */ +export const SyncListResponsePendingPreparedStackResources$inboundSchema: + z.ZodType = z.object({ + config: z.lazy(() => + SyncListResponsePendingPreparedStackConfig$inboundSchema + ), + dependencies: z.array( + z.lazy(() => + SyncListResponsePendingPreparedStackDependency$inboundSchema + ), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: SyncListResponsePendingPreparedStackLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), + }); + +export function syncListResponsePendingPreparedStackResourcesFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackResources, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponsePreviousConfigUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponsePreviousConfigUnion' from JSON`, + SyncListResponsePendingPreparedStackResources$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackResources' from JSON`, ); } /** @internal */ -export const SyncListResponseStackStateStatus$inboundSchema: z.ZodEnum< - typeof SyncListResponseStackStateStatus -> = z.enum(SyncListResponseStackStateStatus); +export const SyncListResponsePendingPreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum = z + .enum(SyncListResponsePendingPreparedStackSupportedPlatform); /** @internal */ -export const SyncListResponseStackStateResources$inboundSchema: z.ZodType< - SyncListResponseStackStateResources, +export const SyncListResponsePendingPreparedStack$inboundSchema: z.ZodType< + SyncListResponsePendingPreparedStack, unknown > = z.object({ - _internal: z.nullable(z.any()).optional(), - config: z.lazy(() => SyncListResponseStackStateConfig$inboundSchema), - controllerPlatform: z.nullable( - z.union([SyncListResponseControllerPlatformEnum$inboundSchema, z.any()]), - ).optional(), - dependencies: z.array( - z.lazy(() => SyncListResponseStackStateDependency$inboundSchema), - ).optional(), - error: z.nullable( - z.union([ - z.lazy(() => SyncListResponseErrorStackState$inboundSchema), - z.any(), - ]), - ).optional(), - lastFailedState: z.nullable(z.any()).optional(), - lifecycle: z.nullable( - z.union([SyncListResponseLifecycleStackStateEnum$inboundSchema, z.any()]), + id: z.string(), + inputs: z.array( + z.lazy(() => SyncListResponsePendingPreparedStackInput$inboundSchema), ).optional(), - outputs: z.nullable( - z.union([z.lazy(() => SyncListResponseOutputs$inboundSchema), z.any()]), + permissions: z.lazy(() => + SyncListResponsePendingPreparedStackPermissions$inboundSchema ).optional(), - previousConfig: z.nullable( - z.union([ - z.lazy(() => SyncListResponsePreviousConfig$inboundSchema), - z.any(), - ]), + resources: z.record( + z.string(), + z.lazy(() => SyncListResponsePendingPreparedStackResources$inboundSchema), + ), + supportedPlatforms: z.nullable( + z.array( + SyncListResponsePendingPreparedStackSupportedPlatform$inboundSchema, + ), ).optional(), - remoteBindingParams: z.nullable(z.any()).optional(), - retryAttempt: z.int().optional(), - status: SyncListResponseStackStateStatus$inboundSchema, - type: z.string(), -}).transform((v) => { - return remap$(v, { - "_internal": "internal", - }); }); -export function syncListResponseStackStateResourcesFromJSON( +export function syncListResponsePendingPreparedStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, (x) => - SyncListResponseStackStateResources$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseStackStateResources' from JSON`, + SyncListResponsePendingPreparedStack$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePendingPreparedStack' from JSON`, ); } /** @internal */ -export const SyncListResponseStackState$inboundSchema: z.ZodType< - SyncListResponseStackState, +export const SyncListResponsePendingPreparedStackUnion$inboundSchema: z.ZodType< + SyncListResponsePendingPreparedStackUnion, unknown -> = z.object({ - platform: SyncListResponseStackStatePlatform$inboundSchema, - resourcePrefix: z.string(), - resources: z.record( - z.string(), - z.lazy(() => SyncListResponseStackStateResources$inboundSchema), - ), -}); +> = z.union([ + z.lazy(() => SyncListResponsePendingPreparedStack$inboundSchema), + z.any(), +]); -export function syncListResponseStackStateFromJSON( +export function syncListResponsePendingPreparedStackUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePendingPreparedStackUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseStackState$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseStackState' from JSON`, + (x) => + SyncListResponsePendingPreparedStackUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePendingPreparedStackUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeStringList$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeStringList -> = z.enum(SyncListResponseTypeStringList); +export const SyncListResponsePreparedStackTypeStringList$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePreparedStackTypeStringList, + ); /** @internal */ -export const SyncListResponseDefaultStringList$inboundSchema: z.ZodType< - SyncListResponseDefaultStringList, - unknown -> = z.object({ - type: SyncListResponseTypeStringList$inboundSchema, - value: z.array(z.string()), -}); +export const SyncListResponsePreparedStackDefaultStringList$inboundSchema: + z.ZodType = z.object( + { + type: SyncListResponsePreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }, + ); -export function syncListResponseDefaultStringListFromJSON( +export function syncListResponsePreparedStackDefaultStringListFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackDefaultStringList, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDefaultStringList$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDefaultStringList' from JSON`, + (x) => + SyncListResponsePreparedStackDefaultStringList$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeBoolean$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeBoolean -> = z.enum(SyncListResponseTypeBoolean); +export const SyncListResponsePreparedStackTypeBoolean$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackTypeBoolean +> = z.enum(SyncListResponsePreparedStackTypeBoolean); /** @internal */ -export const SyncListResponseDefaultBoolean$inboundSchema: z.ZodType< - SyncListResponseDefaultBoolean, - unknown -> = z.object({ - type: SyncListResponseTypeBoolean$inboundSchema, - value: z.boolean(), -}); +export const SyncListResponsePreparedStackDefaultBoolean$inboundSchema: + z.ZodType = z.object({ + type: SyncListResponsePreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), + }); -export function syncListResponseDefaultBooleanFromJSON( +export function syncListResponsePreparedStackDefaultBooleanFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackDefaultBoolean, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDefaultBoolean$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDefaultBoolean' from JSON`, + (x) => + SyncListResponsePreparedStackDefaultBoolean$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeNumber$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeNumber -> = z.enum(SyncListResponseTypeNumber); +export const SyncListResponsePreparedStackTypeNumber$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackTypeNumber +> = z.enum(SyncListResponsePreparedStackTypeNumber); /** @internal */ -export const SyncListResponseDefaultNumber$inboundSchema: z.ZodType< - SyncListResponseDefaultNumber, - unknown -> = z.object({ - type: SyncListResponseTypeNumber$inboundSchema, - value: z.string(), -}); +export const SyncListResponsePreparedStackDefaultNumber$inboundSchema: + z.ZodType = z.object({ + type: SyncListResponsePreparedStackTypeNumber$inboundSchema, + value: z.string(), + }); -export function syncListResponseDefaultNumberFromJSON( +export function syncListResponsePreparedStackDefaultNumberFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackDefaultNumber, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDefaultNumber$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDefaultNumber' from JSON`, + (x) => + SyncListResponsePreparedStackDefaultNumber$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeString$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeString -> = z.enum(SyncListResponseTypeString); - -/** @internal */ -export const SyncListResponseDefaultString$inboundSchema: z.ZodType< - SyncListResponseDefaultString, - unknown -> = z.object({ - type: SyncListResponseTypeString$inboundSchema, - value: z.string(), -}); +export const SyncListResponsePreparedStackTypeString$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackTypeString +> = z.enum(SyncListResponsePreparedStackTypeString); -export function syncListResponseDefaultStringFromJSON( +/** @internal */ +export const SyncListResponsePreparedStackDefaultString$inboundSchema: + z.ZodType = z.object({ + type: SyncListResponsePreparedStackTypeString$inboundSchema, + value: z.string(), + }); + +export function syncListResponsePreparedStackDefaultStringFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackDefaultString, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDefaultString$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDefaultString' from JSON`, + (x) => + SyncListResponsePreparedStackDefaultString$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const SyncListResponseDefaultUnion$inboundSchema: z.ZodType< - SyncListResponseDefaultUnion, +export const SyncListResponsePreparedStackDefaultUnion$inboundSchema: z.ZodType< + SyncListResponsePreparedStackDefaultUnion, unknown > = z.union([ - z.lazy(() => SyncListResponseDefaultString$inboundSchema), - z.lazy(() => SyncListResponseDefaultNumber$inboundSchema), - z.lazy(() => SyncListResponseDefaultBoolean$inboundSchema), - z.lazy(() => SyncListResponseDefaultStringList$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultString$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultNumber$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultBoolean$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultStringList$inboundSchema), z.any(), ]); -export function syncListResponseDefaultUnionFromJSON( +export function syncListResponsePreparedStackDefaultUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackDefaultUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseDefaultUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseDefaultUnion' from JSON`, + (x) => + SyncListResponsePreparedStackDefaultUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseTypeEnvEnum$inboundSchema: z.ZodEnum< - typeof SyncListResponseTypeEnvEnum -> = z.enum(SyncListResponseTypeEnvEnum); +export const SyncListResponsePreparedStackTypeEnvEnum$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackTypeEnvEnum +> = z.enum(SyncListResponsePreparedStackTypeEnvEnum); /** @internal */ -export const SyncListResponseTypeUnion$inboundSchema: z.ZodType< - SyncListResponseTypeUnion, +export const SyncListResponsePreparedStackTypeUnion$inboundSchema: z.ZodType< + SyncListResponsePreparedStackTypeUnion, unknown -> = z.union([SyncListResponseTypeEnvEnum$inboundSchema, z.any()]); +> = z.union([SyncListResponsePreparedStackTypeEnvEnum$inboundSchema, z.any()]); -export function syncListResponseTypeUnionFromJSON( +export function syncListResponsePreparedStackTypeUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseTypeUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseTypeUnion' from JSON`, + (x) => + SyncListResponsePreparedStackTypeUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseEnv$inboundSchema: z.ZodType< - SyncListResponseEnv, +export const SyncListResponsePreparedStackEnv$inboundSchema: z.ZodType< + SyncListResponsePreparedStackEnv, unknown > = z.object({ name: z.string(), targetResources: z.nullable(z.array(z.string())).optional(), type: z.nullable( - z.union([SyncListResponseTypeEnvEnum$inboundSchema, z.any()]), + z.union([SyncListResponsePreparedStackTypeEnvEnum$inboundSchema, z.any()]), ).optional(), }); -export function syncListResponseEnvFromJSON( +export function syncListResponsePreparedStackEnvFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseEnv$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseEnv' from JSON`, + (x) => SyncListResponsePreparedStackEnv$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackEnv' from JSON`, ); } /** @internal */ -export const SyncListResponseKind$inboundSchema: z.ZodEnum< - typeof SyncListResponseKind -> = z.enum(SyncListResponseKind); +export const SyncListResponsePreparedStackKind$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackKind +> = z.enum(SyncListResponsePreparedStackKind); /** @internal */ export const SyncListResponsePreparedStackPlatform$inboundSchema: z.ZodEnum< @@ -5960,13 +10229,13 @@ export const SyncListResponsePreparedStackPlatform$inboundSchema: z.ZodEnum< > = z.enum(SyncListResponsePreparedStackPlatform); /** @internal */ -export const SyncListResponseProvidedBy$inboundSchema: z.ZodEnum< - typeof SyncListResponseProvidedBy -> = z.enum(SyncListResponseProvidedBy); +export const SyncListResponsePreparedStackProvidedBy$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackProvidedBy +> = z.enum(SyncListResponsePreparedStackProvidedBy); /** @internal */ -export const SyncListResponseValidation$inboundSchema: z.ZodType< - SyncListResponseValidation, +export const SyncListResponsePreparedStackValidation$inboundSchema: z.ZodType< + SyncListResponsePreparedStackValidation, unknown > = z.object({ format: z.nullable(z.string()).optional(), @@ -5980,1586 +10249,1977 @@ export const SyncListResponseValidation$inboundSchema: z.ZodType< values: z.nullable(z.array(z.string())).optional(), }); -export function syncListResponseValidationFromJSON( +export function syncListResponsePreparedStackValidationFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackValidation, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseValidation$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseValidation' from JSON`, + (x) => + SyncListResponsePreparedStackValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackValidation' from JSON`, ); } /** @internal */ -export const SyncListResponseValidationUnion$inboundSchema: z.ZodType< - SyncListResponseValidationUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseValidation$inboundSchema), z.any()]); +export const SyncListResponsePreparedStackValidationUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => SyncListResponsePreparedStackValidation$inboundSchema), + z.any(), + ]); -export function syncListResponseValidationUnionFromJSON( +export function syncListResponsePreparedStackValidationUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackValidationUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseValidationUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseValidationUnion' from JSON`, + (x) => + SyncListResponsePreparedStackValidationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseInput$inboundSchema: z.ZodType< - SyncListResponseInput, +export const SyncListResponsePreparedStackInput$inboundSchema: z.ZodType< + SyncListResponsePreparedStackInput, unknown > = z.object({ default: z.nullable( z.union([ - z.lazy(() => SyncListResponseDefaultString$inboundSchema), - z.lazy(() => SyncListResponseDefaultNumber$inboundSchema), - z.lazy(() => SyncListResponseDefaultBoolean$inboundSchema), - z.lazy(() => SyncListResponseDefaultStringList$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultString$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultNumber$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackDefaultBoolean$inboundSchema), + z.lazy(() => + SyncListResponsePreparedStackDefaultStringList$inboundSchema + ), z.any(), ]), ).optional(), description: z.string(), - env: z.array(z.lazy(() => SyncListResponseEnv$inboundSchema)).optional(), + env: z.array(z.lazy(() => SyncListResponsePreparedStackEnv$inboundSchema)) + .optional(), id: z.string(), - kind: SyncListResponseKind$inboundSchema, + kind: SyncListResponsePreparedStackKind$inboundSchema, label: z.string(), placeholder: z.nullable(z.string()).optional(), platforms: z.nullable( z.array(SyncListResponsePreparedStackPlatform$inboundSchema), ).optional(), - providedBy: z.array(SyncListResponseProvidedBy$inboundSchema), + providedBy: z.array(SyncListResponsePreparedStackProvidedBy$inboundSchema), required: z.boolean(), validation: z.nullable( - z.union([z.lazy(() => SyncListResponseValidation$inboundSchema), z.any()]), + z.union([ + z.lazy(() => SyncListResponsePreparedStackValidation$inboundSchema), + z.any(), + ]), ).optional(), }); -export function syncListResponseInputFromJSON( +export function syncListResponsePreparedStackInputFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseInput$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseInput' from JSON`, + (x) => + SyncListResponsePreparedStackInput$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackInput' from JSON`, ); } /** @internal */ -export const SyncListResponseManagementEnum$inboundSchema: z.ZodEnum< - typeof SyncListResponseManagementEnum -> = z.enum(SyncListResponseManagementEnum); +export const SyncListResponsePreparedStackManagementEnum$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePreparedStackManagementEnum, + ); /** @internal */ -export const SyncListResponseOverrideAwResource$inboundSchema: z.ZodType< - SyncListResponseOverrideAwResource, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const SyncListResponsePreparedStackOverrideAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseOverrideAwResourceFromJSON( +export function syncListResponsePreparedStackOverrideAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAwResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideAwResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAwResource' from JSON`, + SyncListResponsePreparedStackOverrideAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAwStack$inboundSchema: z.ZodType< - SyncListResponseOverrideAwStack, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const SyncListResponsePreparedStackOverrideAwStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseOverrideAwStackFromJSON( +export function syncListResponsePreparedStackOverrideAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAwStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAwStack' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAwStack' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAwBinding$inboundSchema: z.ZodType< - SyncListResponseOverrideAwBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseOverrideAwResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseOverrideAwStack$inboundSchema).optional(), -}); +export const SyncListResponsePreparedStackOverrideAwBinding$inboundSchema: + z.ZodType = z.object( + { + resource: z.lazy(() => + SyncListResponsePreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackOverrideAwStack$inboundSchema + ).optional(), + }, + ); -export function syncListResponseOverrideAwBindingFromJSON( +export function syncListResponsePreparedStackOverrideAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideAwBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAwBinding' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideEffect$inboundSchema: z.ZodEnum< - typeof SyncListResponseOverrideEffect -> = z.enum(SyncListResponseOverrideEffect); +export const SyncListResponsePreparedStackOverrideEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePreparedStackOverrideEffect, + ); /** @internal */ -export const SyncListResponseOverrideAwGrant$inboundSchema: z.ZodType< - SyncListResponseOverrideAwGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackOverrideAwGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseOverrideAwGrantFromJSON( +export function syncListResponsePreparedStackOverrideAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAwGrant' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAw$inboundSchema: z.ZodType< - SyncListResponseOverrideAw, +export const SyncListResponsePreparedStackOverrideAw$inboundSchema: z.ZodType< + SyncListResponsePreparedStackOverrideAw, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseOverrideAwBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackOverrideAwBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - effect: SyncListResponseOverrideEffect$inboundSchema.optional(), - grant: z.lazy(() => SyncListResponseOverrideAwGrant$inboundSchema), + effect: SyncListResponsePreparedStackOverrideEffect$inboundSchema.optional(), + grant: z.lazy(() => + SyncListResponsePreparedStackOverrideAwGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseOverrideAwFromJSON( +export function syncListResponsePreparedStackOverrideAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAw, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAw' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAzureResource$inboundSchema: z.ZodType< - SyncListResponseOverrideAzureResource, - unknown -> = z.object({ - scope: z.string(), -}); +export const SyncListResponsePreparedStackOverrideAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseOverrideAzureResourceFromJSON( +export function syncListResponsePreparedStackOverrideAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAzureResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideAzureResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAzureResource' from JSON`, + SyncListResponsePreparedStackOverrideAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAzureResource' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAzureStack$inboundSchema: z.ZodType< - SyncListResponseOverrideAzureStack, - unknown -> = z.object({ - scope: z.string(), -}); +export const SyncListResponsePreparedStackOverrideAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseOverrideAzureStackFromJSON( +export function syncListResponsePreparedStackOverrideAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAzureStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideAzureStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAzureStack' from JSON`, + SyncListResponsePreparedStackOverrideAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAzureBinding$inboundSchema: z.ZodType< - SyncListResponseOverrideAzureBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseOverrideAzureResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseOverrideAzureStack$inboundSchema) - .optional(), -}); +export const SyncListResponsePreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePreparedStackOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackOverrideAzureStack$inboundSchema + ).optional(), + }); -export function syncListResponseOverrideAzureBindingFromJSON( +export function syncListResponsePreparedStackOverrideAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAzureBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideAzureBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAzureBinding' from JSON`, + SyncListResponsePreparedStackOverrideAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAzureGrant$inboundSchema: z.ZodType< - SyncListResponseOverrideAzureGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackOverrideAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseOverrideAzureGrantFromJSON( +export function syncListResponsePreparedStackOverrideAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAzureGrant, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideAzureGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAzureGrant' from JSON`, + SyncListResponsePreparedStackOverrideAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideAzure$inboundSchema: z.ZodType< - SyncListResponseOverrideAzure, - unknown -> = z.object({ - binding: z.lazy(() => SyncListResponseOverrideAzureBinding$inboundSchema), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => SyncListResponseOverrideAzureGrant$inboundSchema), - label: z.nullable(z.string()).optional(), -}); +export const SyncListResponsePreparedStackOverrideAzure$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncListResponsePreparedStackOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncListResponsePreparedStackOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncListResponseOverrideAzureFromJSON( +export function syncListResponsePreparedStackOverrideAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideAzure' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideConditionResource$inboundSchema: z.ZodType< - SyncListResponseOverrideConditionResource, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const SyncListResponsePreparedStackOverrideConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseOverrideConditionResourceFromJSON( +export function syncListResponsePreparedStackOverrideConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseOverrideConditionResource, + SyncListResponsePreparedStackOverrideConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseOverrideConditionResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseOverrideConditionResource' from JSON`, + SyncListResponsePreparedStackOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideResourceConditionUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => SyncListResponseOverrideConditionResource$inboundSchema), +export const SyncListResponsePreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePreparedStackOverrideConditionResource$inboundSchema + ), z.any(), ]); -export function syncListResponseOverrideResourceConditionUnionFromJSON( +export function syncListResponsePreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseOverrideResourceConditionUnion, + SyncListResponsePreparedStackOverrideResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseOverrideResourceConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseOverrideResourceConditionUnion' from JSON`, + SyncListResponsePreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideGcpResource$inboundSchema: z.ZodType< - SyncListResponseOverrideGcpResource, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => SyncListResponseOverrideConditionResource$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const SyncListResponsePreparedStackOverrideGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseOverrideGcpResourceFromJSON( +export function syncListResponsePreparedStackOverrideGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideGcpResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideGcpResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideGcpResource' from JSON`, + SyncListResponsePreparedStackOverrideGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideConditionStack$inboundSchema: z.ZodType< - SyncListResponseOverrideConditionStack, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const SyncListResponsePreparedStackOverrideConditionStack$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseOverrideConditionStackFromJSON( +export function syncListResponsePreparedStackOverrideConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideConditionStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideConditionStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideConditionStack' from JSON`, + SyncListResponsePreparedStackOverrideConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideStackConditionUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => SyncListResponseOverrideConditionStack$inboundSchema), - z.any(), - ]); +export const SyncListResponsePreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncListResponsePreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncListResponseOverrideStackConditionUnionFromJSON( +export function syncListResponsePreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseOverrideStackConditionUnion, + SyncListResponsePreparedStackOverrideStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseOverrideStackConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseOverrideStackConditionUnion' from JSON`, + SyncListResponsePreparedStackOverrideStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideGcpStack$inboundSchema: z.ZodType< - SyncListResponseOverrideGcpStack, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => SyncListResponseOverrideConditionStack$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const SyncListResponsePreparedStackOverrideGcpStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseOverrideGcpStackFromJSON( +export function syncListResponsePreparedStackOverrideGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideGcpStack' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideGcpBinding$inboundSchema: z.ZodType< - SyncListResponseOverrideGcpBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseOverrideGcpResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseOverrideGcpStack$inboundSchema) - .optional(), -}); +export const SyncListResponsePreparedStackOverrideGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackOverrideGcpStack$inboundSchema + ).optional(), + }); -export function syncListResponseOverrideGcpBindingFromJSON( +export function syncListResponsePreparedStackOverrideGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideGcpBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseOverrideGcpBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideGcpBinding' from JSON`, + SyncListResponsePreparedStackOverrideGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideGcpGrant$inboundSchema: z.ZodType< - SyncListResponseOverrideGcpGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseOverrideGcpGrantFromJSON( +export function syncListResponsePreparedStackOverrideGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideGcpGrant' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideGcp$inboundSchema: z.ZodType< - SyncListResponseOverrideGcp, +export const SyncListResponsePreparedStackOverrideGcp$inboundSchema: z.ZodType< + SyncListResponsePreparedStackOverrideGcp, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseOverrideGcpBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackOverrideGcpBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => SyncListResponseOverrideGcpGrant$inboundSchema), + grant: z.lazy(() => + SyncListResponsePreparedStackOverrideGcpGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseOverrideGcpFromJSON( +export function syncListResponsePreparedStackOverrideGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideGcp, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideGcp' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const SyncListResponseOverridePlatforms$inboundSchema: z.ZodType< - SyncListResponseOverridePlatforms, - unknown -> = z.object({ - aws: z.nullable( - z.array(z.lazy(() => SyncListResponseOverrideAw$inboundSchema)), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => SyncListResponseOverrideAzure$inboundSchema)), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => SyncListResponseOverrideGcp$inboundSchema)), - ).optional(), -}); +export const SyncListResponsePreparedStackOverridePlatforms$inboundSchema: + z.ZodType = z.object( + { + aws: z.nullable(z.array(z.lazy(() => + SyncListResponsePreparedStackOverrideAw$inboundSchema + ))).optional(), + azure: z.nullable(z.array(z.lazy(() => + SyncListResponsePreparedStackOverrideAzure$inboundSchema + ))).optional(), + gcp: z.nullable(z.array(z.lazy(() => + SyncListResponsePreparedStackOverrideGcp$inboundSchema + ))).optional(), + }, + ); -export function syncListResponseOverridePlatformsFromJSON( +export function syncListResponsePreparedStackOverridePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverridePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverridePlatforms$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverridePlatforms' from JSON`, + (x) => + SyncListResponsePreparedStackOverridePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const SyncListResponseOverride$inboundSchema: z.ZodType< - SyncListResponseOverride, +export const SyncListResponsePreparedStackOverride$inboundSchema: z.ZodType< + SyncListResponsePreparedStackOverride, unknown > = z.object({ description: z.string(), id: z.string(), - platforms: z.lazy(() => SyncListResponseOverridePlatforms$inboundSchema), + platforms: z.lazy(() => + SyncListResponsePreparedStackOverridePlatforms$inboundSchema + ), }); -export function syncListResponseOverrideFromJSON( +export function syncListResponsePreparedStackOverrideFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseOverride$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverride' from JSON`, + (x) => + SyncListResponsePreparedStackOverride$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackOverride' from JSON`, ); } /** @internal */ -export const SyncListResponseOverrideUnion$inboundSchema: z.ZodType< - SyncListResponseOverrideUnion, - unknown -> = z.union([z.lazy(() => SyncListResponseOverride$inboundSchema), z.string()]); +export const SyncListResponsePreparedStackOverrideUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => SyncListResponsePreparedStackOverride$inboundSchema), + z.string(), + ]); -export function syncListResponseOverrideUnionFromJSON( +export function syncListResponsePreparedStackOverrideUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackOverrideUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseOverrideUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseOverrideUnion' from JSON`, + (x) => + SyncListResponsePreparedStackOverrideUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseManagement2$inboundSchema: z.ZodType< - SyncListResponseManagement2, +export const SyncListResponsePreparedStackManagement2$inboundSchema: z.ZodType< + SyncListResponsePreparedStackManagement2, unknown > = z.object({ override: z.record( z.string(), z.array(z.union([ - z.lazy(() => SyncListResponseOverride$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackOverride$inboundSchema), z.string(), ])), ), }); -export function syncListResponseManagement2FromJSON( +export function syncListResponsePreparedStackManagement2FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackManagement2, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseManagement2$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseManagement2' from JSON`, + (x) => + SyncListResponsePreparedStackManagement2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackManagement2' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAwResource$inboundSchema: z.ZodType< - SyncListResponseExtendAwResource, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const SyncListResponsePreparedStackExtendAwResource$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseExtendAwResourceFromJSON( +export function syncListResponsePreparedStackExtendAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAwResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAwResource' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAwStack$inboundSchema: z.ZodType< - SyncListResponseExtendAwStack, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const SyncListResponsePreparedStackExtendAwStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseExtendAwStackFromJSON( +export function syncListResponsePreparedStackExtendAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAwStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAwStack' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAwBinding$inboundSchema: z.ZodType< - SyncListResponseExtendAwBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseExtendAwResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseExtendAwStack$inboundSchema).optional(), -}); +export const SyncListResponsePreparedStackExtendAwBinding$inboundSchema: + z.ZodType = z.object({ + resource: z.lazy(() => + SyncListResponsePreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackExtendAwStack$inboundSchema + ).optional(), + }); -export function syncListResponseExtendAwBindingFromJSON( +export function syncListResponsePreparedStackExtendAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAwBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAwBinding' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendEffect$inboundSchema: z.ZodEnum< - typeof SyncListResponseExtendEffect -> = z.enum(SyncListResponseExtendEffect); +export const SyncListResponsePreparedStackExtendEffect$inboundSchema: z.ZodEnum< + typeof SyncListResponsePreparedStackExtendEffect +> = z.enum(SyncListResponsePreparedStackExtendEffect); /** @internal */ -export const SyncListResponseExtendAwGrant$inboundSchema: z.ZodType< - SyncListResponseExtendAwGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackExtendAwGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseExtendAwGrantFromJSON( +export function syncListResponsePreparedStackExtendAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAwGrant' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAw$inboundSchema: z.ZodType< - SyncListResponseExtendAw, +export const SyncListResponsePreparedStackExtendAw$inboundSchema: z.ZodType< + SyncListResponsePreparedStackExtendAw, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseExtendAwBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackExtendAwBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - effect: SyncListResponseExtendEffect$inboundSchema.optional(), - grant: z.lazy(() => SyncListResponseExtendAwGrant$inboundSchema), + effect: SyncListResponsePreparedStackExtendEffect$inboundSchema.optional(), + grant: z.lazy(() => SyncListResponsePreparedStackExtendAwGrant$inboundSchema), label: z.nullable(z.string()).optional(), }); -export function syncListResponseExtendAwFromJSON( +export function syncListResponsePreparedStackExtendAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseExtendAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAw' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAw$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAzureResource$inboundSchema: z.ZodType< - SyncListResponseExtendAzureResource, - unknown -> = z.object({ - scope: z.string(), -}); +export const SyncListResponsePreparedStackExtendAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseExtendAzureResourceFromJSON( +export function syncListResponsePreparedStackExtendAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAzureResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseExtendAzureResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAzureResource' from JSON`, + SyncListResponsePreparedStackExtendAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAzureStack$inboundSchema: z.ZodType< - SyncListResponseExtendAzureStack, - unknown -> = z.object({ - scope: z.string(), -}); +export const SyncListResponsePreparedStackExtendAzureStack$inboundSchema: + z.ZodType = z.object({ + scope: z.string(), + }); -export function syncListResponseExtendAzureStackFromJSON( +export function syncListResponsePreparedStackExtendAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAzureStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAzureStack' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAzureBinding$inboundSchema: z.ZodType< - SyncListResponseExtendAzureBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseExtendAzureResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseExtendAzureStack$inboundSchema) - .optional(), -}); +export const SyncListResponsePreparedStackExtendAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackExtendAzureStack$inboundSchema + ).optional(), + }); -export function syncListResponseExtendAzureBindingFromJSON( +export function syncListResponsePreparedStackExtendAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAzureBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseExtendAzureBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAzureBinding' from JSON`, + SyncListResponsePreparedStackExtendAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAzureGrant$inboundSchema: z.ZodType< - SyncListResponseExtendAzureGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackExtendAzureGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseExtendAzureGrantFromJSON( +export function syncListResponsePreparedStackExtendAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAzureGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAzureGrant' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendAzure$inboundSchema: z.ZodType< - SyncListResponseExtendAzure, +export const SyncListResponsePreparedStackExtendAzure$inboundSchema: z.ZodType< + SyncListResponsePreparedStackExtendAzure, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseExtendAzureBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackExtendAzureBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => SyncListResponseExtendAzureGrant$inboundSchema), + grant: z.lazy(() => + SyncListResponsePreparedStackExtendAzureGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseExtendAzureFromJSON( +export function syncListResponsePreparedStackExtendAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendAzure' from JSON`, + (x) => + SyncListResponsePreparedStackExtendAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendConditionResource$inboundSchema: z.ZodType< - SyncListResponseExtendConditionResource, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const SyncListResponsePreparedStackExtendConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseExtendConditionResourceFromJSON( +export function syncListResponsePreparedStackExtendConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseExtendConditionResource, + SyncListResponsePreparedStackExtendConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseExtendConditionResource$inboundSchema.parse( + SyncListResponsePreparedStackExtendConditionResource$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseExtendConditionResource' from JSON`, + `Failed to parse 'SyncListResponsePreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendResourceConditionUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => SyncListResponseExtendConditionResource$inboundSchema), +export const SyncListResponsePreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePreparedStackExtendConditionResource$inboundSchema + ), z.any(), ]); -export function syncListResponseExtendResourceConditionUnionFromJSON( +export function syncListResponsePreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseExtendResourceConditionUnion, + SyncListResponsePreparedStackExtendResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseExtendResourceConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseExtendResourceConditionUnion' from JSON`, + SyncListResponsePreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendGcpResource$inboundSchema: z.ZodType< - SyncListResponseExtendGcpResource, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => SyncListResponseExtendConditionResource$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const SyncListResponsePreparedStackExtendGcpResource$inboundSchema: + z.ZodType = z.object( + { + condition: z.nullable(z.union([ + z.lazy(() => + SyncListResponsePreparedStackExtendConditionResource$inboundSchema + ), + z.any(), + ])).optional(), + scope: z.string(), + }, + ); -export function syncListResponseExtendGcpResourceFromJSON( +export function syncListResponsePreparedStackExtendGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendGcpResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendGcpResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendGcpResource' from JSON`, + (x) => + SyncListResponsePreparedStackExtendGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendConditionStack$inboundSchema: z.ZodType< - SyncListResponseExtendConditionStack, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const SyncListResponsePreparedStackExtendConditionStack$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseExtendConditionStackFromJSON( +export function syncListResponsePreparedStackExtendConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendConditionStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseExtendConditionStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendConditionStack' from JSON`, + SyncListResponsePreparedStackExtendConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendStackConditionUnion$inboundSchema: z.ZodType< - SyncListResponseExtendStackConditionUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseExtendConditionStack$inboundSchema), - z.any(), -]); +export const SyncListResponsePreparedStackExtendStackConditionUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncListResponsePreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncListResponseExtendStackConditionUnionFromJSON( +export function syncListResponsePreparedStackExtendStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseExtendStackConditionUnion, + SyncListResponsePreparedStackExtendStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseExtendStackConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseExtendStackConditionUnion' from JSON`, + SyncListResponsePreparedStackExtendStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendGcpStack$inboundSchema: z.ZodType< - SyncListResponseExtendGcpStack, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => SyncListResponseExtendConditionStack$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const SyncListResponsePreparedStackExtendGcpStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseExtendGcpStackFromJSON( +export function syncListResponsePreparedStackExtendGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendGcpStack' from JSON`, + (x) => + SyncListResponsePreparedStackExtendGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendGcpBinding$inboundSchema: z.ZodType< - SyncListResponseExtendGcpBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseExtendGcpResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseExtendGcpStack$inboundSchema).optional(), -}); +export const SyncListResponsePreparedStackExtendGcpBinding$inboundSchema: + z.ZodType = z.object({ + resource: z.lazy(() => + SyncListResponsePreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackExtendGcpStack$inboundSchema + ).optional(), + }); -export function syncListResponseExtendGcpBindingFromJSON( +export function syncListResponsePreparedStackExtendGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendGcpBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendGcpBinding' from JSON`, + (x) => + SyncListResponsePreparedStackExtendGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendGcpGrant$inboundSchema: z.ZodType< - SyncListResponseExtendGcpGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackExtendGcpGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseExtendGcpGrantFromJSON( +export function syncListResponsePreparedStackExtendGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendGcpGrant' from JSON`, + (x) => + SyncListResponsePreparedStackExtendGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendGcp$inboundSchema: z.ZodType< - SyncListResponseExtendGcp, +export const SyncListResponsePreparedStackExtendGcp$inboundSchema: z.ZodType< + SyncListResponsePreparedStackExtendGcp, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseExtendGcpBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackExtendGcpBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => SyncListResponseExtendGcpGrant$inboundSchema), + grant: z.lazy(() => + SyncListResponsePreparedStackExtendGcpGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseExtendGcpFromJSON( +export function syncListResponsePreparedStackExtendGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseExtendGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendGcp' from JSON`, + (x) => + SyncListResponsePreparedStackExtendGcp$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendPlatforms$inboundSchema: z.ZodType< - SyncListResponseExtendPlatforms, - unknown -> = z.object({ - aws: z.nullable(z.array(z.lazy(() => SyncListResponseExtendAw$inboundSchema))) - .optional(), - azure: z.nullable( - z.array(z.lazy(() => SyncListResponseExtendAzure$inboundSchema)), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => SyncListResponseExtendGcp$inboundSchema)), - ).optional(), -}); +export const SyncListResponsePreparedStackExtendPlatforms$inboundSchema: + z.ZodType = z.object({ + aws: z.nullable( + z.array( + z.lazy(() => SyncListResponsePreparedStackExtendAw$inboundSchema), + ), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncListResponsePreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array( + z.lazy(() => SyncListResponsePreparedStackExtendGcp$inboundSchema), + ), + ).optional(), + }); -export function syncListResponseExtendPlatformsFromJSON( +export function syncListResponsePreparedStackExtendPlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendPlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendPlatforms$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendPlatforms' from JSON`, + (x) => + SyncListResponsePreparedStackExtendPlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const SyncListResponseExtend$inboundSchema: z.ZodType< - SyncListResponseExtend, +export const SyncListResponsePreparedStackExtend$inboundSchema: z.ZodType< + SyncListResponsePreparedStackExtend, unknown > = z.object({ description: z.string(), id: z.string(), - platforms: z.lazy(() => SyncListResponseExtendPlatforms$inboundSchema), + platforms: z.lazy(() => + SyncListResponsePreparedStackExtendPlatforms$inboundSchema + ), }); -export function syncListResponseExtendFromJSON( +export function syncListResponsePreparedStackExtendFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseExtend$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtend' from JSON`, + (x) => + SyncListResponsePreparedStackExtend$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackExtend' from JSON`, ); } /** @internal */ -export const SyncListResponseExtendUnion$inboundSchema: z.ZodType< - SyncListResponseExtendUnion, +export const SyncListResponsePreparedStackExtendUnion$inboundSchema: z.ZodType< + SyncListResponsePreparedStackExtendUnion, unknown -> = z.union([z.lazy(() => SyncListResponseExtend$inboundSchema), z.string()]); +> = z.union([ + z.lazy(() => SyncListResponsePreparedStackExtend$inboundSchema), + z.string(), +]); -export function syncListResponseExtendUnionFromJSON( +export function syncListResponsePreparedStackExtendUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackExtendUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseExtendUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseExtendUnion' from JSON`, + (x) => + SyncListResponsePreparedStackExtendUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseManagement1$inboundSchema: z.ZodType< - SyncListResponseManagement1, +export const SyncListResponsePreparedStackManagement1$inboundSchema: z.ZodType< + SyncListResponsePreparedStackManagement1, unknown > = z.object({ extend: z.record( z.string(), - z.array( - z.union([z.lazy(() => SyncListResponseExtend$inboundSchema), z.string()]), - ), + z.array(z.union([ + z.lazy(() => SyncListResponsePreparedStackExtend$inboundSchema), + z.string(), + ])), ), }); -export function syncListResponseManagement1FromJSON( +export function syncListResponsePreparedStackManagement1FromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackManagement1, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseManagement1$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseManagement1' from JSON`, + (x) => + SyncListResponsePreparedStackManagement1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackManagement1' from JSON`, ); } /** @internal */ -export const SyncListResponseManagementUnion$inboundSchema: z.ZodType< - SyncListResponseManagementUnion, - unknown -> = z.union([ - z.lazy(() => SyncListResponseManagement1$inboundSchema), - z.lazy(() => SyncListResponseManagement2$inboundSchema), - SyncListResponseManagementEnum$inboundSchema, -]); +export const SyncListResponsePreparedStackManagementUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => SyncListResponsePreparedStackManagement1$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackManagement2$inboundSchema), + SyncListResponsePreparedStackManagementEnum$inboundSchema, + ]); -export function syncListResponseManagementUnionFromJSON( +export function syncListResponsePreparedStackManagementUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackManagementUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseManagementUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseManagementUnion' from JSON`, + (x) => + SyncListResponsePreparedStackManagementUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackManagementUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAwResource$inboundSchema: z.ZodType< - SyncListResponseProfileAwResource, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const SyncListResponsePreparedStackProfileAwResource$inboundSchema: + z.ZodType = z.object( + { + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }, + ); -export function syncListResponseProfileAwResourceFromJSON( +export function syncListResponsePreparedStackProfileAwResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAwResource, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAwResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAwResource' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAwResource' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAwStack$inboundSchema: z.ZodType< - SyncListResponseProfileAwStack, - unknown -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const SyncListResponsePreparedStackProfileAwStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncListResponseProfileAwStackFromJSON( +export function syncListResponsePreparedStackProfileAwStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAwStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAwStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAwStack' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAwBinding$inboundSchema: z.ZodType< - SyncListResponseProfileAwBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseProfileAwResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseProfileAwStack$inboundSchema).optional(), -}); +export const SyncListResponsePreparedStackProfileAwBinding$inboundSchema: + z.ZodType = z.object({ + resource: z.lazy(() => + SyncListResponsePreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackProfileAwStack$inboundSchema + ).optional(), + }); -export function syncListResponseProfileAwBindingFromJSON( +export function syncListResponsePreparedStackProfileAwBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAwBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAwBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAwBinding' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileEffect$inboundSchema: z.ZodEnum< - typeof SyncListResponseProfileEffect -> = z.enum(SyncListResponseProfileEffect); +export const SyncListResponsePreparedStackProfileEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePreparedStackProfileEffect, + ); /** @internal */ -export const SyncListResponseProfileAwGrant$inboundSchema: z.ZodType< - SyncListResponseProfileAwGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackProfileAwGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseProfileAwGrantFromJSON( +export function syncListResponsePreparedStackProfileAwGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAwGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAwGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAwGrant' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAw$inboundSchema: z.ZodType< - SyncListResponseProfileAw, +export const SyncListResponsePreparedStackProfileAw$inboundSchema: z.ZodType< + SyncListResponsePreparedStackProfileAw, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseProfileAwBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackProfileAwBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - effect: SyncListResponseProfileEffect$inboundSchema.optional(), - grant: z.lazy(() => SyncListResponseProfileAwGrant$inboundSchema), + effect: SyncListResponsePreparedStackProfileEffect$inboundSchema.optional(), + grant: z.lazy(() => + SyncListResponsePreparedStackProfileAwGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseProfileAwFromJSON( +export function syncListResponsePreparedStackProfileAwFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseProfileAw$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAw' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAw$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAzureResource$inboundSchema: z.ZodType< - SyncListResponseProfileAzureResource, - unknown -> = z.object({ - scope: z.string(), -}); +export const SyncListResponsePreparedStackProfileAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); -export function syncListResponseProfileAzureResourceFromJSON( +export function syncListResponsePreparedStackProfileAzureResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAzureResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProfileAzureResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAzureResource' from JSON`, + SyncListResponsePreparedStackProfileAzureResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAzureStack$inboundSchema: z.ZodType< - SyncListResponseProfileAzureStack, - unknown -> = z.object({ - scope: z.string(), -}); +export const SyncListResponsePreparedStackProfileAzureStack$inboundSchema: + z.ZodType = z.object( + { + scope: z.string(), + }, + ); -export function syncListResponseProfileAzureStackFromJSON( +export function syncListResponsePreparedStackProfileAzureStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAzureStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAzureStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAzureStack' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAzureBinding$inboundSchema: z.ZodType< - SyncListResponseProfileAzureBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseProfileAzureResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseProfileAzureStack$inboundSchema) - .optional(), -}); +export const SyncListResponsePreparedStackProfileAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncListResponsePreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackProfileAzureStack$inboundSchema + ).optional(), + }); -export function syncListResponseProfileAzureBindingFromJSON( +export function syncListResponsePreparedStackProfileAzureBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAzureBinding, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProfileAzureBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAzureBinding' from JSON`, + SyncListResponsePreparedStackProfileAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAzureGrant$inboundSchema: z.ZodType< - SyncListResponseProfileAzureGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackProfileAzureGrant$inboundSchema: + z.ZodType = z.object( + { + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }, + ); -export function syncListResponseProfileAzureGrantFromJSON( +export function syncListResponsePreparedStackProfileAzureGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAzureGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAzureGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAzureGrant' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileAzure$inboundSchema: z.ZodType< - SyncListResponseProfileAzure, +export const SyncListResponsePreparedStackProfileAzure$inboundSchema: z.ZodType< + SyncListResponsePreparedStackProfileAzure, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseProfileAzureBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackProfileAzureBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => SyncListResponseProfileAzureGrant$inboundSchema), + grant: z.lazy(() => + SyncListResponsePreparedStackProfileAzureGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseProfileAzureFromJSON( +export function syncListResponsePreparedStackProfileAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileAzure, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileAzure$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileAzure' from JSON`, + (x) => + SyncListResponsePreparedStackProfileAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileConditionResource$inboundSchema: z.ZodType< - SyncListResponseProfileConditionResource, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const SyncListResponsePreparedStackProfileConditionResource$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseProfileConditionResourceFromJSON( +export function syncListResponsePreparedStackProfileConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProfileConditionResource, + SyncListResponsePreparedStackProfileConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProfileConditionResource$inboundSchema.parse( + SyncListResponsePreparedStackProfileConditionResource$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncListResponseProfileConditionResource' from JSON`, + `Failed to parse 'SyncListResponsePreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileResourceConditionUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => SyncListResponseProfileConditionResource$inboundSchema), +export const SyncListResponsePreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + SyncListResponsePreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncListResponsePreparedStackProfileConditionResource$inboundSchema + ), z.any(), ]); -export function syncListResponseProfileResourceConditionUnionFromJSON( +export function syncListResponsePreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProfileResourceConditionUnion, + SyncListResponsePreparedStackProfileResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProfileResourceConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseProfileResourceConditionUnion' from JSON`, + SyncListResponsePreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileGcpResource$inboundSchema: z.ZodType< - SyncListResponseProfileGcpResource, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => SyncListResponseProfileConditionResource$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const SyncListResponsePreparedStackProfileGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseProfileGcpResourceFromJSON( +export function syncListResponsePreparedStackProfileGcpResourceFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileGcpResource, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProfileGcpResource$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileGcpResource' from JSON`, + SyncListResponsePreparedStackProfileGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileConditionStack$inboundSchema: z.ZodType< - SyncListResponseProfileConditionStack, - unknown -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const SyncListResponsePreparedStackProfileConditionStack$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); -export function syncListResponseProfileConditionStackFromJSON( +export function syncListResponsePreparedStackProfileConditionStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileConditionStack, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncListResponseProfileConditionStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileConditionStack' from JSON`, + SyncListResponsePreparedStackProfileConditionStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileStackConditionUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => SyncListResponseProfileConditionStack$inboundSchema), - z.any(), - ]); +export const SyncListResponsePreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncListResponsePreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncListResponseProfileStackConditionUnionFromJSON( +export function syncListResponsePreparedStackProfileStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncListResponseProfileStackConditionUnion, + SyncListResponsePreparedStackProfileStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncListResponseProfileStackConditionUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncListResponseProfileStackConditionUnion' from JSON`, + SyncListResponsePreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileGcpStack$inboundSchema: z.ZodType< - SyncListResponseProfileGcpStack, - unknown -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => SyncListResponseProfileConditionStack$inboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const SyncListResponsePreparedStackProfileGcpStack$inboundSchema: + z.ZodType = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncListResponsePreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncListResponseProfileGcpStackFromJSON( +export function syncListResponsePreparedStackProfileGcpStackFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileGcpStack, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileGcpStack$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileGcpStack' from JSON`, + (x) => + SyncListResponsePreparedStackProfileGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileGcpBinding$inboundSchema: z.ZodType< - SyncListResponseProfileGcpBinding, - unknown -> = z.object({ - resource: z.lazy(() => SyncListResponseProfileGcpResource$inboundSchema) - .optional(), - stack: z.lazy(() => SyncListResponseProfileGcpStack$inboundSchema).optional(), -}); +export const SyncListResponsePreparedStackProfileGcpBinding$inboundSchema: + z.ZodType = z.object( + { + resource: z.lazy(() => + SyncListResponsePreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncListResponsePreparedStackProfileGcpStack$inboundSchema + ).optional(), + }, + ); -export function syncListResponseProfileGcpBindingFromJSON( +export function syncListResponsePreparedStackProfileGcpBindingFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileGcpBinding, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileGcpBinding$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileGcpBinding' from JSON`, + (x) => + SyncListResponsePreparedStackProfileGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileGcpGrant$inboundSchema: z.ZodType< - SyncListResponseProfileGcpGrant, - unknown -> = z.object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), -}); +export const SyncListResponsePreparedStackProfileGcpGrant$inboundSchema: + z.ZodType = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncListResponseProfileGcpGrantFromJSON( +export function syncListResponsePreparedStackProfileGcpGrantFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileGcpGrant, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileGcpGrant$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileGcpGrant' from JSON`, + (x) => + SyncListResponsePreparedStackProfileGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileGcp$inboundSchema: z.ZodType< - SyncListResponseProfileGcp, +export const SyncListResponsePreparedStackProfileGcp$inboundSchema: z.ZodType< + SyncListResponsePreparedStackProfileGcp, unknown > = z.object({ - binding: z.lazy(() => SyncListResponseProfileGcpBinding$inboundSchema), + binding: z.lazy(() => + SyncListResponsePreparedStackProfileGcpBinding$inboundSchema + ), description: z.nullable(z.string()).optional(), - grant: z.lazy(() => SyncListResponseProfileGcpGrant$inboundSchema), + grant: z.lazy(() => + SyncListResponsePreparedStackProfileGcpGrant$inboundSchema + ), label: z.nullable(z.string()).optional(), }); -export function syncListResponseProfileGcpFromJSON( +export function syncListResponsePreparedStackProfileGcpFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileGcp, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileGcp$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileGcp' from JSON`, + (x) => + SyncListResponsePreparedStackProfileGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const SyncListResponseProfilePlatforms$inboundSchema: z.ZodType< - SyncListResponseProfilePlatforms, - unknown -> = z.object({ - aws: z.nullable( - z.array(z.lazy(() => SyncListResponseProfileAw$inboundSchema)), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => SyncListResponseProfileAzure$inboundSchema)), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => SyncListResponseProfileGcp$inboundSchema)), - ).optional(), -}); +export const SyncListResponsePreparedStackProfilePlatforms$inboundSchema: + z.ZodType = z.object({ + aws: z.nullable( + z.array( + z.lazy(() => SyncListResponsePreparedStackProfileAw$inboundSchema), + ), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncListResponsePreparedStackProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array( + z.lazy(() => SyncListResponsePreparedStackProfileGcp$inboundSchema), + ), + ).optional(), + }); -export function syncListResponseProfilePlatformsFromJSON( +export function syncListResponsePreparedStackProfilePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfilePlatforms, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfilePlatforms$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfilePlatforms' from JSON`, + (x) => + SyncListResponsePreparedStackProfilePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const SyncListResponseProfile$inboundSchema: z.ZodType< - SyncListResponseProfile, +export const SyncListResponsePreparedStackProfile$inboundSchema: z.ZodType< + SyncListResponsePreparedStackProfile, unknown > = z.object({ description: z.string(), id: z.string(), - platforms: z.lazy(() => SyncListResponseProfilePlatforms$inboundSchema), + platforms: z.lazy(() => + SyncListResponsePreparedStackProfilePlatforms$inboundSchema + ), }); -export function syncListResponseProfileFromJSON( +export function syncListResponsePreparedStackProfileFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => SyncListResponseProfile$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfile' from JSON`, + (x) => + SyncListResponsePreparedStackProfile$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncListResponsePreparedStackProfile' from JSON`, ); } /** @internal */ -export const SyncListResponseProfileUnion$inboundSchema: z.ZodType< - SyncListResponseProfileUnion, +export const SyncListResponsePreparedStackProfileUnion$inboundSchema: z.ZodType< + SyncListResponsePreparedStackProfileUnion, unknown -> = z.union([z.lazy(() => SyncListResponseProfile$inboundSchema), z.string()]); +> = z.union([ + z.lazy(() => SyncListResponsePreparedStackProfile$inboundSchema), + z.string(), +]); -export function syncListResponseProfileUnionFromJSON( +export function syncListResponsePreparedStackProfileUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackProfileUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponseProfileUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponseProfileUnion' from JSON`, + (x) => + SyncListResponsePreparedStackProfileUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const SyncListResponsePermissions$inboundSchema: z.ZodType< - SyncListResponsePermissions, +export const SyncListResponsePreparedStackPermissions$inboundSchema: z.ZodType< + SyncListResponsePreparedStackPermissions, unknown > = z.object({ management: z.union([ - z.lazy(() => SyncListResponseManagement1$inboundSchema), - z.lazy(() => SyncListResponseManagement2$inboundSchema), - SyncListResponseManagementEnum$inboundSchema, + z.lazy(() => SyncListResponsePreparedStackManagement1$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackManagement2$inboundSchema), + SyncListResponsePreparedStackManagementEnum$inboundSchema, ]).optional(), profiles: z.record( z.string(), @@ -7567,7 +12227,7 @@ export const SyncListResponsePermissions$inboundSchema: z.ZodType< z.string(), z.array( z.union([ - z.lazy(() => SyncListResponseProfile$inboundSchema), + z.lazy(() => SyncListResponsePreparedStackProfile$inboundSchema), z.string(), ]), ), @@ -7575,13 +12235,19 @@ export const SyncListResponsePermissions$inboundSchema: z.ZodType< ), }); -export function syncListResponsePermissionsFromJSON( +export function syncListResponsePreparedStackPermissionsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncListResponsePreparedStackPermissions, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncListResponsePermissions$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncListResponsePermissions' from JSON`, + (x) => + SyncListResponsePreparedStackPermissions$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponsePreparedStackPermissions' from JSON`, ); } @@ -7648,6 +12314,7 @@ export const SyncListResponsePreparedStackResources$inboundSchema: z.ZodType< dependencies: z.array( z.lazy(() => SyncListResponsePreparedStackDependency$inboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: SyncListResponsePreparedStackLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }); @@ -7664,9 +12331,10 @@ export function syncListResponsePreparedStackResourcesFromJSON( } /** @internal */ -export const SyncListResponseSupportedPlatform$inboundSchema: z.ZodEnum< - typeof SyncListResponseSupportedPlatform -> = z.enum(SyncListResponseSupportedPlatform); +export const SyncListResponsePreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum = z.enum( + SyncListResponsePreparedStackSupportedPlatform, + ); /** @internal */ export const SyncListResponsePreparedStack$inboundSchema: z.ZodType< @@ -7674,15 +12342,18 @@ export const SyncListResponsePreparedStack$inboundSchema: z.ZodType< unknown > = z.object({ id: z.string(), - inputs: z.array(z.lazy(() => SyncListResponseInput$inboundSchema)).optional(), - permissions: z.lazy(() => SyncListResponsePermissions$inboundSchema) - .optional(), + inputs: z.array( + z.lazy(() => SyncListResponsePreparedStackInput$inboundSchema), + ).optional(), + permissions: z.lazy(() => + SyncListResponsePreparedStackPermissions$inboundSchema + ).optional(), resources: z.record( z.string(), z.lazy(() => SyncListResponsePreparedStackResources$inboundSchema), ), supportedPlatforms: z.nullable( - z.array(SyncListResponseSupportedPlatform$inboundSchema), + z.array(SyncListResponsePreparedStackSupportedPlatform$inboundSchema), ).optional(), }); @@ -7716,6 +12387,59 @@ export function syncListResponsePreparedStackUnionFromJSON( ); } +/** @internal */ +export const SyncListResponseSetupUpdateAuthorization$inboundSchema: z.ZodType< + SyncListResponseSetupUpdateAuthorization, + unknown +> = z.object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), +}); + +export function syncListResponseSetupUpdateAuthorizationFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseSetupUpdateAuthorization, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseSetupUpdateAuthorization$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseSetupUpdateAuthorization' from JSON`, + ); +} + +/** @internal */ +export const SyncListResponseSetupUpdateAuthorizationUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => SyncListResponseSetupUpdateAuthorization$inboundSchema), + z.any(), + ]); + +export function syncListResponseSetupUpdateAuthorizationUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncListResponseSetupUpdateAuthorizationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncListResponseSetupUpdateAuthorizationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncListResponseSetupUpdateAuthorizationUnion' from JSON`, + ); +} + /** @internal */ export const SyncListResponseRuntimeMetadata$inboundSchema: z.ZodType< SyncListResponseRuntimeMetadata, @@ -7723,6 +12447,12 @@ export const SyncListResponseRuntimeMetadata$inboundSchema: z.ZodType< > = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => SyncListResponsePendingPreparedStack$inboundSchema), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([ z.lazy(() => SyncListResponsePreparedStack$inboundSchema), @@ -7730,6 +12460,12 @@ export const SyncListResponseRuntimeMetadata$inboundSchema: z.ZodType< ]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => SyncListResponseSetupUpdateAuthorization$inboundSchema), + z.any(), + ]), + ).optional(), }); export function syncListResponseRuntimeMetadataFromJSON( diff --git a/client-sdks/platform/typescript/src/models/syncreconcilerequest.ts b/client-sdks/platform/typescript/src/models/syncreconcilerequest.ts index 88ed4ce91..9f4ca6d12 100644 --- a/client-sdks/platform/typescript/src/models/syncreconcilerequest.ts +++ b/client-sdks/platform/typescript/src/models/syncreconcilerequest.ts @@ -1427,6 +1427,17 @@ export type SyncReconcileRequestCurrentReleaseResources = { * The total dependencies are: resource.get_dependencies() + this list */ dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ @@ -1757,95 +1768,95 @@ export type SyncReconcileRequestPlatform = ClosedEnum< typeof SyncReconcileRequestPlatform >; -export const SyncReconcileRequestPreparedStackTypeStringList = { +export const SyncReconcileRequestPendingPreparedStackTypeStringList = { StringList: "stringList", } as const; -export type SyncReconcileRequestPreparedStackTypeStringList = ClosedEnum< - typeof SyncReconcileRequestPreparedStackTypeStringList +export type SyncReconcileRequestPendingPreparedStackTypeStringList = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackTypeStringList >; -export type SyncReconcileRequestPreparedStackDefaultStringList = { - type: SyncReconcileRequestPreparedStackTypeStringList; +export type SyncReconcileRequestPendingPreparedStackDefaultStringList = { + type: SyncReconcileRequestPendingPreparedStackTypeStringList; /** * String list default. */ value: Array; }; -export const SyncReconcileRequestPreparedStackTypeBoolean = { +export const SyncReconcileRequestPendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type SyncReconcileRequestPreparedStackTypeBoolean = ClosedEnum< - typeof SyncReconcileRequestPreparedStackTypeBoolean +export type SyncReconcileRequestPendingPreparedStackTypeBoolean = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackTypeBoolean >; -export type SyncReconcileRequestPreparedStackDefaultBoolean = { - type: SyncReconcileRequestPreparedStackTypeBoolean; +export type SyncReconcileRequestPendingPreparedStackDefaultBoolean = { + type: SyncReconcileRequestPendingPreparedStackTypeBoolean; /** * Boolean default. */ value: boolean; }; -export const SyncReconcileRequestPreparedStackTypeNumber = { +export const SyncReconcileRequestPendingPreparedStackTypeNumber = { Number: "number", } as const; -export type SyncReconcileRequestPreparedStackTypeNumber = ClosedEnum< - typeof SyncReconcileRequestPreparedStackTypeNumber +export type SyncReconcileRequestPendingPreparedStackTypeNumber = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackTypeNumber >; -export type SyncReconcileRequestPreparedStackDefaultNumber = { - type: SyncReconcileRequestPreparedStackTypeNumber; +export type SyncReconcileRequestPendingPreparedStackDefaultNumber = { + type: SyncReconcileRequestPendingPreparedStackTypeNumber; /** * Number default. */ value: string; }; -export const SyncReconcileRequestPreparedStackTypeString = { +export const SyncReconcileRequestPendingPreparedStackTypeString = { String: "string", } as const; -export type SyncReconcileRequestPreparedStackTypeString = ClosedEnum< - typeof SyncReconcileRequestPreparedStackTypeString +export type SyncReconcileRequestPendingPreparedStackTypeString = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackTypeString >; -export type SyncReconcileRequestPreparedStackDefaultString = { - type: SyncReconcileRequestPreparedStackTypeString; +export type SyncReconcileRequestPendingPreparedStackDefaultString = { + type: SyncReconcileRequestPendingPreparedStackTypeString; /** * String default. */ value: string; }; -export type SyncReconcileRequestPreparedStackDefaultUnion = - | SyncReconcileRequestPreparedStackDefaultString - | SyncReconcileRequestPreparedStackDefaultNumber - | SyncReconcileRequestPreparedStackDefaultBoolean - | SyncReconcileRequestPreparedStackDefaultStringList +export type SyncReconcileRequestPendingPreparedStackDefaultUnion = + | SyncReconcileRequestPendingPreparedStackDefaultString + | SyncReconcileRequestPendingPreparedStackDefaultNumber + | SyncReconcileRequestPendingPreparedStackDefaultBoolean + | SyncReconcileRequestPendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const SyncReconcileRequestPreparedStackTypeEnvEnum = { +export const SyncReconcileRequestPendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type SyncReconcileRequestPreparedStackTypeEnvEnum = ClosedEnum< - typeof SyncReconcileRequestPreparedStackTypeEnvEnum +export type SyncReconcileRequestPendingPreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackTypeEnvEnum >; -export type SyncReconcileRequestPreparedStackTypeUnion = - | SyncReconcileRequestPreparedStackTypeEnvEnum +export type SyncReconcileRequestPendingPreparedStackTypeUnion = + | SyncReconcileRequestPendingPreparedStackTypeEnvEnum | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type SyncReconcileRequestPreparedStackEnv = { +export type SyncReconcileRequestPendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1854,13 +1865,17 @@ export type SyncReconcileRequestPreparedStackEnv = { * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: SyncReconcileRequestPreparedStackTypeEnvEnum | any | null | undefined; + type?: + | SyncReconcileRequestPendingPreparedStackTypeEnvEnum + | any + | null + | undefined; }; /** * Primitive stack input kind. */ -export const PreparedStackStateKind = { +export const PendingPreparedStackStateKind = { String: "string", Secret: "secret", Number: "number", @@ -1872,12 +1887,14 @@ export const PreparedStackStateKind = { /** * Primitive stack input kind. */ -export type PreparedStackStateKind = ClosedEnum; +export type PendingPreparedStackStateKind = ClosedEnum< + typeof PendingPreparedStackStateKind +>; /** * Represents the target cloud platform. */ -export const SyncReconcileRequestPreparedStackPlatform = { +export const SyncReconcileRequestPendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1889,28 +1906,28 @@ export const SyncReconcileRequestPreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type SyncReconcileRequestPreparedStackPlatform = ClosedEnum< - typeof SyncReconcileRequestPreparedStackPlatform +export type SyncReconcileRequestPendingPreparedStackPlatform = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackPlatform >; /** * Who can provide a stack input value. */ -export const SyncReconcileRequestPreparedStackProvidedBy = { +export const SyncReconcileRequestPendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type SyncReconcileRequestPreparedStackProvidedBy = ClosedEnum< - typeof SyncReconcileRequestPreparedStackProvidedBy +export type SyncReconcileRequestPendingPreparedStackProvidedBy = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackProvidedBy >; /** * Portable stack input validation constraints. */ -export type SyncReconcileRequestPreparedStackValidation = { +export type SyncReconcileRequestPendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -1949,19 +1966,19 @@ export type SyncReconcileRequestPreparedStackValidation = { values?: Array | null | undefined; }; -export type SyncReconcileRequestPreparedStackValidationUnion = - | SyncReconcileRequestPreparedStackValidation +export type SyncReconcileRequestPendingPreparedStackValidationUnion = + | SyncReconcileRequestPendingPreparedStackValidation | any; /** * Stack input definition serialized into a release stack. */ -export type SyncReconcileRequestPreparedStackInput = { +export type SyncReconcileRequestPendingPreparedStackInput = { default?: - | SyncReconcileRequestPreparedStackDefaultString - | SyncReconcileRequestPreparedStackDefaultNumber - | SyncReconcileRequestPreparedStackDefaultBoolean - | SyncReconcileRequestPreparedStackDefaultStringList + | SyncReconcileRequestPendingPreparedStackDefaultString + | SyncReconcileRequestPendingPreparedStackDefaultNumber + | SyncReconcileRequestPendingPreparedStackDefaultBoolean + | SyncReconcileRequestPendingPreparedStackDefaultStringList | any | null | undefined; @@ -1972,7 +1989,7 @@ export type SyncReconcileRequestPreparedStackInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -1980,7 +1997,7 @@ export type SyncReconcileRequestPreparedStackInput = { /** * Primitive stack input kind. */ - kind: PreparedStackStateKind; + kind: PendingPreparedStackStateKind; /** * Human-facing field label. */ @@ -1993,35 +2010,35 @@ export type SyncReconcileRequestPreparedStackInput = { * Platforms where this input applies. */ platforms?: - | Array + | Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; validation?: - | SyncReconcileRequestPreparedStackValidation + | SyncReconcileRequestPendingPreparedStackValidation | any | null | undefined; }; -export const SyncReconcileRequestPreparedStackManagementEnum = { +export const SyncReconcileRequestPendingPreparedStackManagementEnum = { Auto: "auto", } as const; -export type SyncReconcileRequestPreparedStackManagementEnum = ClosedEnum< - typeof SyncReconcileRequestPreparedStackManagementEnum +export type SyncReconcileRequestPendingPreparedStackManagementEnum = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackManagementEnum >; /** * AWS-specific binding specification */ -export type PreparedStackOverrideStateAwResource = { +export type PendingPreparedStackOverrideStateAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2035,7 +2052,7 @@ export type PreparedStackOverrideStateAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileRequestPreparedStackOverrideAwStack = { +export type SyncReconcileRequestPendingPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2049,35 +2066,35 @@ export type SyncReconcileRequestPreparedStackOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestPreparedStackOverrideAwBinding = { +export type SyncReconcileRequestPendingPreparedStackOverrideAwBinding = { /** * AWS-specific binding specification */ - resource?: PreparedStackOverrideStateAwResource | undefined; + resource?: PendingPreparedStackOverrideStateAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileRequestPreparedStackOverrideAwStack | undefined; + stack?: SyncReconcileRequestPendingPreparedStackOverrideAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileRequestPreparedStackOverrideEffect = { +export const SyncReconcileRequestPendingPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileRequestPreparedStackOverrideEffect = ClosedEnum< - typeof SyncReconcileRequestPreparedStackOverrideEffect +export type SyncReconcileRequestPendingPreparedStackOverrideEffect = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackOverrideEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestPreparedStackOverrideAwGrant = { +export type SyncReconcileRequestPendingPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2103,11 +2120,11 @@ export type SyncReconcileRequestPreparedStackOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileRequestPreparedStackOverrideAw = { +export type SyncReconcileRequestPendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestPreparedStackOverrideAwBinding; + binding: SyncReconcileRequestPendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2115,11 +2132,11 @@ export type SyncReconcileRequestPreparedStackOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileRequestPreparedStackOverrideEffect | undefined; + effect?: SyncReconcileRequestPendingPreparedStackOverrideEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestPreparedStackOverrideAwGrant; + grant: SyncReconcileRequestPendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2129,7 +2146,7 @@ export type SyncReconcileRequestPreparedStackOverrideAw = { /** * Azure-specific binding specification */ -export type PreparedStackOverrideStateAzureResource = { +export type PendingPreparedStackOverrideStateAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2139,7 +2156,7 @@ export type PreparedStackOverrideStateAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileRequestPreparedStackOverrideAzureStack = { +export type SyncReconcileRequestPendingPreparedStackOverrideAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2149,21 +2166,23 @@ export type SyncReconcileRequestPreparedStackOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestPreparedStackOverrideAzureBinding = { +export type SyncReconcileRequestPendingPreparedStackOverrideAzureBinding = { /** * Azure-specific binding specification */ - resource?: PreparedStackOverrideStateAzureResource | undefined; + resource?: PendingPreparedStackOverrideStateAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileRequestPreparedStackOverrideAzureStack | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackOverrideAzureStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestPreparedStackOverrideAzureGrant = { +export type SyncReconcileRequestPendingPreparedStackOverrideAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2189,11 +2208,11 @@ export type SyncReconcileRequestPreparedStackOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileRequestPreparedStackOverrideAzure = { +export type SyncReconcileRequestPendingPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestPreparedStackOverrideAzureBinding; + binding: SyncReconcileRequestPendingPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2201,7 +2220,7 @@ export type SyncReconcileRequestPreparedStackOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestPreparedStackOverrideAzureGrant; + grant: SyncReconcileRequestPendingPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2211,21 +2230,21 @@ export type SyncReconcileRequestPreparedStackOverrideAzure = { /** * GCP IAM condition */ -export type PreparedStackOverrideConditionStateResource = { +export type PendingPreparedStackOverrideConditionStateResource = { expression: string; title: string; }; -export type PreparedStackOverrideStateResourceConditionUnion = - | PreparedStackOverrideConditionStateResource +export type PendingPreparedStackOverrideStateResourceConditionUnion = + | PendingPreparedStackOverrideConditionStateResource | any; /** * GCP-specific binding specification */ -export type PreparedStackOverrideStateGcpResource = { +export type PendingPreparedStackOverrideStateGcpResource = { condition?: - | PreparedStackOverrideConditionStateResource + | PendingPreparedStackOverrideConditionStateResource | any | null | undefined; @@ -2238,354 +2257,21 @@ export type PreparedStackOverrideStateGcpResource = { /** * GCP IAM condition */ -export type PreparedStackOverrideConditionStateStack = { +export type PendingPreparedStackOverrideConditionStateStack = { expression: string; title: string; }; -export type PreparedStackOverrideStateStackConditionUnion = - | PreparedStackOverrideConditionStateStack +export type PendingPreparedStackOverrideStateStackConditionUnion = + | PendingPreparedStackOverrideConditionStateStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileRequestPreparedStackOverrideGcpStack = { - condition?: PreparedStackOverrideConditionStateStack | any | null | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - -/** - * Generic binding configuration for permissions - */ -export type SyncReconcileRequestPreparedStackOverrideGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: PreparedStackOverrideStateGcpResource | undefined; - /** - * GCP-specific binding specification - */ - stack?: SyncReconcileRequestPreparedStackOverrideGcpStack | undefined; -}; - -/** - * Grant permissions for a specific cloud platform - */ -export type SyncReconcileRequestPreparedStackOverrideGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; - -/** - * GCP-specific platform permission configuration - */ -export type SyncReconcileRequestPreparedStackOverrideGcp = { - /** - * Generic binding configuration for permissions - */ - binding: SyncReconcileRequestPreparedStackOverrideGcpBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * Grant permissions for a specific cloud platform - */ - grant: SyncReconcileRequestPreparedStackOverrideGcpGrant; - /** - * Stable admin-facing label for this permission entry. - */ - label?: string | null | undefined; -}; - -/** - * Platform-specific permission configurations - */ -export type SyncReconcileRequestPreparedStackOverridePlatforms = { - /** - * AWS permission configurations - */ - aws?: Array | null | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: Array | null | undefined; -}; - -/** - * A permission set that can be applied across different cloud platforms - */ -export type SyncReconcileRequestPreparedStackOverride = { - /** - * Human-readable description of what this permission set allows - */ - description: string; - /** - * Unique identifier for the permission set (e.g., "storage/data-read") - */ - id: string; - /** - * Platform-specific permission configurations - */ - platforms: SyncReconcileRequestPreparedStackOverridePlatforms; -}; - -/** - * Reference to a permission set - either by name or inline definition - */ -export type SyncReconcileRequestPreparedStackOverrideUnion = - | SyncReconcileRequestPreparedStackOverride - | string; - -export type SyncReconcileRequestPreparedStackManagement2 = { - /** - * Permission profile that maps resources to permission sets - * - * @remarks - * Key can be "*" for all resources or resource name for specific resource - */ - override: { - [k: string]: Array; - }; -}; - -/** - * AWS-specific binding specification - */ -export type PreparedStackExtendStateAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; - -/** - * AWS-specific binding specification - */ -export type SyncReconcileRequestPreparedStackExtendAwStack = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; -}; - -/** - * Generic binding configuration for permissions - */ -export type SyncReconcileRequestPreparedStackExtendAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: PreparedStackExtendStateAwResource | undefined; - /** - * AWS-specific binding specification - */ - stack?: SyncReconcileRequestPreparedStackExtendAwStack | undefined; -}; - -/** - * IAM effect. Defaults to Allow. - */ -export const SyncReconcileRequestPreparedStackExtendEffect = { - Allow: "Allow", - Deny: "Deny", -} as const; -/** - * IAM effect. Defaults to Allow. - */ -export type SyncReconcileRequestPreparedStackExtendEffect = ClosedEnum< - typeof SyncReconcileRequestPreparedStackExtendEffect ->; - -/** - * Grant permissions for a specific cloud platform - */ -export type SyncReconcileRequestPreparedStackExtendAwGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; - -/** - * AWS-specific platform permission configuration - */ -export type SyncReconcileRequestPreparedStackExtendAw = { - /** - * Generic binding configuration for permissions - */ - binding: SyncReconcileRequestPreparedStackExtendAwBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * IAM effect. Defaults to Allow. - */ - effect?: SyncReconcileRequestPreparedStackExtendEffect | undefined; - /** - * Grant permissions for a specific cloud platform - */ - grant: SyncReconcileRequestPreparedStackExtendAwGrant; - /** - * Stable admin-facing label for this permission entry. - */ - label?: string | null | undefined; -}; - -/** - * Azure-specific binding specification - */ -export type PreparedStackExtendStateAzureResource = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; - -/** - * Azure-specific binding specification - */ -export type SyncReconcileRequestPreparedStackExtendAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; - -/** - * Generic binding configuration for permissions - */ -export type SyncReconcileRequestPreparedStackExtendAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: PreparedStackExtendStateAzureResource | undefined; - /** - * Azure-specific binding specification - */ - stack?: SyncReconcileRequestPreparedStackExtendAzureStack | undefined; -}; - -/** - * Grant permissions for a specific cloud platform - */ -export type SyncReconcileRequestPreparedStackExtendAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; - -/** - * Azure-specific platform permission configuration - */ -export type SyncReconcileRequestPreparedStackExtendAzure = { - /** - * Generic binding configuration for permissions - */ - binding: SyncReconcileRequestPreparedStackExtendAzureBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * Grant permissions for a specific cloud platform - */ - grant: SyncReconcileRequestPreparedStackExtendAzureGrant; - /** - * Stable admin-facing label for this permission entry. - */ - label?: string | null | undefined; -}; - -/** - * GCP IAM condition - */ -export type PreparedStackExtendConditionStateResource = { - expression: string; - title: string; -}; - -export type PreparedStackExtendStateResourceConditionUnion = - | PreparedStackExtendConditionStateResource - | any; - -/** - * GCP-specific binding specification - */ -export type PreparedStackExtendStateGcpResource = { +export type SyncReconcileRequestPendingPreparedStackOverrideGcpStack = { condition?: - | PreparedStackExtendConditionStateResource + | PendingPreparedStackOverrideConditionStateStack | any | null | undefined; @@ -2595,47 +2281,24 @@ export type PreparedStackExtendStateGcpResource = { scope: string; }; -/** - * GCP IAM condition - */ -export type PreparedStackExtendConditionStateStack = { - expression: string; - title: string; -}; - -export type PreparedStackExtendStateStackConditionUnion = - | PreparedStackExtendConditionStateStack - | any; - -/** - * GCP-specific binding specification - */ -export type SyncReconcileRequestPreparedStackExtendGcpStack = { - condition?: PreparedStackExtendConditionStateStack | any | null | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestPreparedStackExtendGcpBinding = { +export type SyncReconcileRequestPendingPreparedStackOverrideGcpBinding = { /** * GCP-specific binding specification */ - resource?: PreparedStackExtendStateGcpResource | undefined; + resource?: PendingPreparedStackOverrideStateGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileRequestPreparedStackExtendGcpStack | undefined; + stack?: SyncReconcileRequestPendingPreparedStackOverrideGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestPreparedStackExtendGcpGrant = { +export type SyncReconcileRequestPendingPreparedStackOverrideGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2661,11 +2324,11 @@ export type SyncReconcileRequestPreparedStackExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileRequestPreparedStackExtendGcp = { +export type SyncReconcileRequestPendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestPreparedStackExtendGcpBinding; + binding: SyncReconcileRequestPendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2673,7 +2336,7 @@ export type SyncReconcileRequestPreparedStackExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestPreparedStackExtendGcpGrant; + grant: SyncReconcileRequestPendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2683,28 +2346,34 @@ export type SyncReconcileRequestPreparedStackExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileRequestPreparedStackExtendPlatforms = { +export type SyncReconcileRequestPendingPreparedStackOverridePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileRequestPreparedStackExtend = { +export type SyncReconcileRequestPendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -2716,40 +2385,34 @@ export type SyncReconcileRequestPreparedStackExtend = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileRequestPreparedStackExtendPlatforms; + platforms: SyncReconcileRequestPendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileRequestPreparedStackExtendUnion = - | SyncReconcileRequestPreparedStackExtend +export type SyncReconcileRequestPendingPreparedStackOverrideUnion = + | SyncReconcileRequestPendingPreparedStackOverride | string; -export type SyncReconcileRequestPreparedStackManagement1 = { +export type SyncReconcileRequestPendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - extend: { - [k: string]: Array; + override: { + [k: string]: Array< + SyncReconcileRequestPendingPreparedStackOverride | string + >; }; }; -/** - * Management permissions configuration for stack management access - */ -export type SyncReconcileRequestPreparedStackManagementUnion = - | SyncReconcileRequestPreparedStackManagement1 - | SyncReconcileRequestPreparedStackManagement2 - | SyncReconcileRequestPreparedStackManagementEnum; - /** * AWS-specific binding specification */ -export type PreparedStackProfileStateAwResource = { +export type PendingPreparedStackExtendStateAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2763,7 +2426,7 @@ export type PreparedStackProfileStateAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileRequestPreparedStackProfileAwStack = { +export type SyncReconcileRequestPendingPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2777,35 +2440,35 @@ export type SyncReconcileRequestPreparedStackProfileAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestPreparedStackProfileAwBinding = { +export type SyncReconcileRequestPendingPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: PreparedStackProfileStateAwResource | undefined; + resource?: PendingPreparedStackExtendStateAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileRequestPreparedStackProfileAwStack | undefined; + stack?: SyncReconcileRequestPendingPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileRequestPreparedStackProfileEffect = { +export const SyncReconcileRequestPendingPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileRequestPreparedStackProfileEffect = ClosedEnum< - typeof SyncReconcileRequestPreparedStackProfileEffect +export type SyncReconcileRequestPendingPreparedStackExtendEffect = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackExtendEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestPreparedStackProfileAwGrant = { +export type SyncReconcileRequestPendingPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2831,11 +2494,11 @@ export type SyncReconcileRequestPreparedStackProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileRequestPreparedStackProfileAw = { +export type SyncReconcileRequestPendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestPreparedStackProfileAwBinding; + binding: SyncReconcileRequestPendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2843,11 +2506,11 @@ export type SyncReconcileRequestPreparedStackProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileRequestPreparedStackProfileEffect | undefined; + effect?: SyncReconcileRequestPendingPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestPreparedStackProfileAwGrant; + grant: SyncReconcileRequestPendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2857,7 +2520,7 @@ export type SyncReconcileRequestPreparedStackProfileAw = { /** * Azure-specific binding specification */ -export type PreparedStackProfileStateAzureResource = { +export type PendingPreparedStackExtendStateAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2867,7 +2530,7 @@ export type PreparedStackProfileStateAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileRequestPreparedStackProfileAzureStack = { +export type SyncReconcileRequestPendingPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2877,21 +2540,21 @@ export type SyncReconcileRequestPreparedStackProfileAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestPreparedStackProfileAzureBinding = { +export type SyncReconcileRequestPendingPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: PreparedStackProfileStateAzureResource | undefined; + resource?: PendingPreparedStackExtendStateAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileRequestPreparedStackProfileAzureStack | undefined; + stack?: SyncReconcileRequestPendingPreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestPreparedStackProfileAzureGrant = { +export type SyncReconcileRequestPendingPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2917,11 +2580,11 @@ export type SyncReconcileRequestPreparedStackProfileAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileRequestPreparedStackProfileAzure = { +export type SyncReconcileRequestPendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestPreparedStackProfileAzureBinding; + binding: SyncReconcileRequestPendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2929,7 +2592,7 @@ export type SyncReconcileRequestPreparedStackProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestPreparedStackProfileAzureGrant; + grant: SyncReconcileRequestPendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2939,21 +2602,21 @@ export type SyncReconcileRequestPreparedStackProfileAzure = { /** * GCP IAM condition */ -export type PreparedStackProfileConditionStateResource = { +export type PendingPreparedStackExtendConditionStateResource = { expression: string; title: string; }; -export type PreparedStackProfileStateResourceConditionUnion = - | PreparedStackProfileConditionStateResource +export type PendingPreparedStackExtendStateResourceConditionUnion = + | PendingPreparedStackExtendConditionStateResource | any; /** * GCP-specific binding specification */ -export type PreparedStackProfileStateGcpResource = { +export type PendingPreparedStackExtendStateGcpResource = { condition?: - | PreparedStackProfileConditionStateResource + | PendingPreparedStackExtendConditionStateResource | any | null | undefined; @@ -2966,20 +2629,24 @@ export type PreparedStackProfileStateGcpResource = { /** * GCP IAM condition */ -export type PreparedStackProfileConditionStateStack = { +export type PendingPreparedStackExtendConditionStateStack = { expression: string; title: string; }; -export type PreparedStackProfileStateStackConditionUnion = - | PreparedStackProfileConditionStateStack +export type PendingPreparedStackExtendStateStackConditionUnion = + | PendingPreparedStackExtendConditionStateStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileRequestPreparedStackProfileGcpStack = { - condition?: PreparedStackProfileConditionStateStack | any | null | undefined; +export type SyncReconcileRequestPendingPreparedStackExtendGcpStack = { + condition?: + | PendingPreparedStackExtendConditionStateStack + | any + | null + | undefined; /** * Scope (project/resource level) */ @@ -2989,21 +2656,21 @@ export type SyncReconcileRequestPreparedStackProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestPreparedStackProfileGcpBinding = { +export type SyncReconcileRequestPendingPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: PreparedStackProfileStateGcpResource | undefined; + resource?: PendingPreparedStackExtendStateGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileRequestPreparedStackProfileGcpStack | undefined; + stack?: SyncReconcileRequestPendingPreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestPreparedStackProfileGcpGrant = { +export type SyncReconcileRequestPendingPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -3029,11 +2696,11 @@ export type SyncReconcileRequestPreparedStackProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileRequestPreparedStackProfileGcp = { +export type SyncReconcileRequestPendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestPreparedStackProfileGcpBinding; + binding: SyncReconcileRequestPendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -3041,7 +2708,7 @@ export type SyncReconcileRequestPreparedStackProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestPreparedStackProfileGcpGrant; + grant: SyncReconcileRequestPendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -3051,28 +2718,34 @@ export type SyncReconcileRequestPreparedStackProfileGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileRequestPreparedStackProfilePlatforms = { +export type SyncReconcileRequestPendingPreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileRequestPreparedStackProfile = { +export type SyncReconcileRequestPendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -3084,27 +2757,405 @@ export type SyncReconcileRequestPreparedStackProfile = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileRequestPreparedStackProfilePlatforms; + platforms: SyncReconcileRequestPendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileRequestPreparedStackProfileUnion = - | SyncReconcileRequestPreparedStackProfile +export type SyncReconcileRequestPendingPreparedStackExtendUnion = + | SyncReconcileRequestPendingPreparedStackExtend + | string; + +export type SyncReconcileRequestPendingPreparedStackManagement1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { + [k: string]: Array; + }; +}; + +/** + * Management permissions configuration for stack management access + */ +export type SyncReconcileRequestPendingPreparedStackManagementUnion = + | SyncReconcileRequestPendingPreparedStackManagement1 + | SyncReconcileRequestPendingPreparedStackManagement2 + | SyncReconcileRequestPendingPreparedStackManagementEnum; + +/** + * AWS-specific binding specification + */ +export type PendingPreparedStackProfileStateAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type SyncReconcileRequestPendingPreparedStackProfileAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestPendingPreparedStackProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: PendingPreparedStackProfileStateAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileRequestPendingPreparedStackProfileAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const SyncReconcileRequestPendingPreparedStackProfileEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncReconcileRequestPendingPreparedStackProfileEffect = ClosedEnum< + typeof SyncReconcileRequestPendingPreparedStackProfileEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestPendingPreparedStackProfileAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncReconcileRequestPendingPreparedStackProfileAw = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestPendingPreparedStackProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncReconcileRequestPendingPreparedStackProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestPendingPreparedStackProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type PendingPreparedStackProfileStateAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type SyncReconcileRequestPendingPreparedStackProfileAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestPendingPreparedStackProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: PendingPreparedStackProfileStateAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileRequestPendingPreparedStackProfileAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestPendingPreparedStackProfileAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type SyncReconcileRequestPendingPreparedStackProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestPendingPreparedStackProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestPendingPreparedStackProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type PendingPreparedStackProfileConditionStateResource = { + expression: string; + title: string; +}; + +export type PendingPreparedStackProfileStateResourceConditionUnion = + | PendingPreparedStackProfileConditionStateResource + | any; + +/** + * GCP-specific binding specification + */ +export type PendingPreparedStackProfileStateGcpResource = { + condition?: + | PendingPreparedStackProfileConditionStateResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type PendingPreparedStackProfileConditionStateStack = { + expression: string; + title: string; +}; + +export type PendingPreparedStackProfileStateStackConditionUnion = + | PendingPreparedStackProfileConditionStateStack + | any; + +/** + * GCP-specific binding specification + */ +export type SyncReconcileRequestPendingPreparedStackProfileGcpStack = { + condition?: + | PendingPreparedStackProfileConditionStateStack + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestPendingPreparedStackProfileGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: PendingPreparedStackProfileStateGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncReconcileRequestPendingPreparedStackProfileGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestPendingPreparedStackProfileGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type SyncReconcileRequestPendingPreparedStackProfileGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestPendingPreparedStackProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestPendingPreparedStackProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type SyncReconcileRequestPendingPreparedStackProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: + | Array + | null + | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: + | Array + | null + | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncReconcileRequestPendingPreparedStackProfile = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncReconcileRequestPendingPreparedStackProfilePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncReconcileRequestPendingPreparedStackProfileUnion = + | SyncReconcileRequestPendingPreparedStackProfile | string; /** * Combined permissions configuration that contains both profiles and management */ -export type SyncReconcileRequestPreparedStackPermissions = { +export type SyncReconcileRequestPendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | SyncReconcileRequestPreparedStackManagement1 - | SyncReconcileRequestPreparedStackManagement2 - | SyncReconcileRequestPreparedStackManagementEnum + | SyncReconcileRequestPendingPreparedStackManagement1 + | SyncReconcileRequestPendingPreparedStackManagement2 + | SyncReconcileRequestPendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -3114,7 +3165,9 @@ export type SyncReconcileRequestPreparedStackPermissions = { */ profiles: { [k: string]: { - [k: string]: Array; + [k: string]: Array< + SyncReconcileRequestPendingPreparedStackProfile | string + >; }; }; }; @@ -3122,7 +3175,7 @@ export type SyncReconcileRequestPreparedStackPermissions = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileRequestPreparedStackConfig = { +export type SyncReconcileRequestPendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -3137,7 +3190,7 @@ export type SyncReconcileRequestPreparedStackConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type SyncReconcileRequestPreparedStackDependency = { +export type SyncReconcileRequestPendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -3148,33 +3201,44 @@ export type SyncReconcileRequestPreparedStackDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const PreparedStackStateLifecycle = { +export const PendingPreparedStackStateLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type PreparedStackStateLifecycle = ClosedEnum< - typeof PreparedStackStateLifecycle +export type PendingPreparedStackStateLifecycle = ClosedEnum< + typeof PendingPreparedStackStateLifecycle >; -export type SyncReconcileRequestPreparedStackResources = { +export type SyncReconcileRequestPendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: SyncReconcileRequestPreparedStackConfig; + config: SyncReconcileRequestPendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: PreparedStackStateLifecycle; + lifecycle: PendingPreparedStackStateLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -3188,7 +3252,7 @@ export type SyncReconcileRequestPreparedStackResources = { /** * Represents the target cloud platform. */ -export const SyncReconcileRequestPreparedStackSupportedPlatform = { +export const SyncReconcileRequestPendingPreparedStackSupportedPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3200,14 +3264,13 @@ export const SyncReconcileRequestPreparedStackSupportedPlatform = { /** * Represents the target cloud platform. */ -export type SyncReconcileRequestPreparedStackSupportedPlatform = ClosedEnum< - typeof SyncReconcileRequestPreparedStackSupportedPlatform ->; +export type SyncReconcileRequestPendingPreparedStackSupportedPlatform = + ClosedEnum; /** * A bag of resources, unaware of any cloud. */ -export type SyncReconcileRequestPreparedStack = { +export type SyncReconcileRequestPendingPreparedStack = { /** * Unique identifier for the stack */ @@ -3215,520 +3278,132 @@ export type SyncReconcileRequestPreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: Array | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: SyncReconcileRequestPreparedStackPermissions | undefined; + permissions?: SyncReconcileRequestPendingPreparedStackPermissions | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: SyncReconcileRequestPreparedStackResources }; + resources: { [k: string]: SyncReconcileRequestPendingPreparedStackResources }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array | null | undefined; }; -export type SyncReconcileRequestPreparedStackUnion = - | SyncReconcileRequestPreparedStack +export type SyncReconcileRequestPendingPreparedStackUnion = + | SyncReconcileRequestPendingPreparedStack | any; -/** - * Runtime metadata for deployment - * - * @remarks - * - * Stores deployment state that needs to persist across step calls. - */ -export type SyncReconcileRequestRuntimeMetadata = { +export const SyncReconcileRequestPreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type SyncReconcileRequestPreparedStackTypeStringList = ClosedEnum< + typeof SyncReconcileRequestPreparedStackTypeStringList +>; + +export type SyncReconcileRequestPreparedStackDefaultStringList = { + type: SyncReconcileRequestPreparedStackTypeStringList; /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * String list default. */ - lastSyncedEnvVarsHash?: string | null | undefined; + value: Array; +}; + +export const SyncReconcileRequestPreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type SyncReconcileRequestPreparedStackTypeBoolean = ClosedEnum< + typeof SyncReconcileRequestPreparedStackTypeBoolean +>; + +export type SyncReconcileRequestPreparedStackDefaultBoolean = { + type: SyncReconcileRequestPreparedStackTypeBoolean; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Boolean default. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: SyncReconcileRequestPreparedStack | any | null | undefined; + value: boolean; +}; + +export const SyncReconcileRequestPreparedStackTypeNumber = { + Number: "number", +} as const; +export type SyncReconcileRequestPreparedStackTypeNumber = ClosedEnum< + typeof SyncReconcileRequestPreparedStackTypeNumber +>; + +export type SyncReconcileRequestPreparedStackDefaultNumber = { + type: SyncReconcileRequestPreparedStackTypeNumber; /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. + * Number default. */ - registryAccessGranted?: boolean | undefined; + value: string; }; -export type SyncReconcileRequestRuntimeMetadataUnion = - | SyncReconcileRequestRuntimeMetadata +export const SyncReconcileRequestPreparedStackTypeString = { + String: "string", +} as const; +export type SyncReconcileRequestPreparedStackTypeString = ClosedEnum< + typeof SyncReconcileRequestPreparedStackTypeString +>; + +export type SyncReconcileRequestPreparedStackDefaultString = { + type: SyncReconcileRequestPreparedStackTypeString; + /** + * String default. + */ + value: string; +}; + +export type SyncReconcileRequestPreparedStackDefaultUnion = + | SyncReconcileRequestPreparedStackDefaultString + | SyncReconcileRequestPreparedStackDefaultNumber + | SyncReconcileRequestPreparedStackDefaultBoolean + | SyncReconcileRequestPreparedStackDefaultStringList | any; /** - * Represents the target cloud platform. + * Environment variable handling for a stack input mapping. */ -export const SyncReconcileRequestStackStatePlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", +export const SyncReconcileRequestPreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; /** - * Represents the target cloud platform. + * Environment variable handling for a stack input mapping. */ -export type SyncReconcileRequestStackStatePlatform = ClosedEnum< - typeof SyncReconcileRequestStackStatePlatform +export type SyncReconcileRequestPreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncReconcileRequestPreparedStackTypeEnvEnum >; +export type SyncReconcileRequestPreparedStackTypeUnion = + | SyncReconcileRequestPreparedStackTypeEnvEnum + | any; + /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * How a resolved stack input is injected into runtime environment variables. */ -export type SyncReconcileRequestStackStateConfig = { +export type SyncReconcileRequestPreparedStackEnv = { /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + * Environment variable name. */ - id: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; -}; - -/** - * Represents the target cloud platform. - */ -export const ControllerPlatformStateEnum = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type ControllerPlatformStateEnum = ClosedEnum< - typeof ControllerPlatformStateEnum ->; - -export type StateControllerPlatformUnion = ControllerPlatformStateEnum | any; - -/** - * Reference to a resource by its stable id and resource type. - */ -export type SyncReconcileRequestStackStateDependency = { - id: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; -}; - -/** - * Canonical error container that provides a structured way to represent errors - * - * @remarks - * with rich metadata including error codes, human-readable messages, context, - * and chaining capabilities for error propagation. - * - * This struct is designed to be both machine-readable and user-friendly, - * supporting serialization for API responses and detailed error reporting - * in distributed systems. - */ -export type SyncReconcileRequestStackStateError = { - /** - * A unique identifier for the type of error. - * - * @remarks - * - * This should be a short, machine-readable string that can be used - * by clients to programmatically handle different error types. - * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" - */ - code: string; - /** - * Additional diagnostic information about the error context. - * - * @remarks - * - * This optional field can contain structured data providing more details - * about the error, such as validation errors, request parameters that - * caused the issue, or other relevant context information. - */ - context?: any | null | undefined; - /** - * Optional human-facing remediation hint. - */ - hint?: string | null | undefined; - /** - * HTTP status code for this error. - * - * @remarks - * - * Used when converting the error to an HTTP response. If None, falls back to - * the error type's default status code or 500. - */ - httpStatusCode?: number | null | undefined; - /** - * Indicates if this is an internal error that should not be exposed to users. - * - * @remarks - * - * When `true`, this error contains sensitive information or implementation - * details that should not be shown to end-users. Such errors should be - * logged for debugging but replaced with generic error messages in responses. - */ - internal: boolean; - /** - * Human-readable error message. - * - * @remarks - * - * This message should be clear and actionable for developers or end-users, - * providing context about what went wrong and potentially how to fix it. - */ - message: string; - /** - * Indicates whether the operation that caused the error should be retried. - * - * @remarks - * - * When `true`, the error is transient and the operation might succeed - * if attempted again. When `false`, retrying the same operation is - * unlikely to succeed without changes. - */ - retryable?: boolean | undefined; - /** - * The underlying error that caused this error, creating an error chain. - * - * @remarks - * - * This allows for proper error propagation and debugging by maintaining - * the full context of how an error occurred through multiple layers - * of an application. - */ - source?: any | null | undefined; -}; - -export type SyncReconcileRequestStackStateErrorUnion = - | SyncReconcileRequestStackStateError - | any; - -/** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - */ -export const StackStateLifecycleStateEnum = { - Frozen: "frozen", - Live: "live", -} as const; -/** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - */ -export type StackStateLifecycleStateEnum = ClosedEnum< - typeof StackStateLifecycleStateEnum ->; - -export type StateLifecycleUnion = StackStateLifecycleStateEnum | any; - -/** - * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. - */ -export type SyncReconcileRequestOutputs = { - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; -}; - -export type SyncReconcileRequestOutputsUnion = - | SyncReconcileRequestOutputs - | any; - -/** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. - */ -export type SyncReconcileRequestPreviousConfig = { - /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. - */ - id: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; -}; - -export type SyncReconcileRequestPreviousConfigUnion = - | SyncReconcileRequestPreviousConfig - | any; - -/** - * Represents the high-level status of a resource during its lifecycle. - */ -export const StackStateStateStatus = { - Pending: "pending", - Provisioning: "provisioning", - ProvisionFailed: "provision-failed", - Running: "running", - Updating: "updating", - UpdateFailed: "update-failed", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - Deleted: "deleted", - RefreshFailed: "refresh-failed", -} as const; -/** - * Represents the high-level status of a resource during its lifecycle. - */ -export type StackStateStateStatus = ClosedEnum; - -/** - * Represents the state of a single resource within the stack for a specific platform. - */ -export type SyncReconcileRequestStackStateResources = { - /** - * The platform-specific resource controller that manages this resource's lifecycle. - * - * @remarks - * This is None when the resource status is Pending. - * Stored as JSON to make the struct serializable and movable to alien-core. - */ - internal?: any | null | undefined; - /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. - */ - config: SyncReconcileRequestStackStateConfig; - controllerPlatform?: ControllerPlatformStateEnum | any | null | undefined; - /** - * Complete list of dependencies for this resource, including infrastructure dependencies. - * - * @remarks - * This preserves the full dependency information from the stack definition. - */ - dependencies?: Array | undefined; - error?: SyncReconcileRequestStackStateError | any | null | undefined; - /** - * Stores the controller state that failed, used for manual retry operations. - * - * @remarks - * This allows resuming from the exact point where the failure occurred. - * Stored as JSON to make the struct serializable and movable to alien-core. - */ - lastFailedState?: any | null | undefined; - lifecycle?: StackStateLifecycleStateEnum | any | null | undefined; - outputs?: SyncReconcileRequestOutputs | any | null | undefined; - previousConfig?: SyncReconcileRequestPreviousConfig | any | null | undefined; - /** - * Binding parameters for remote access. - * - * @remarks - * Only populated when the resource has `remote_access: true` in its ResourceEntry. - * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). - * Populated by controllers during provisioning using get_binding_params(). - */ - remoteBindingParams?: any | null | undefined; - /** - * Tracks consecutive retry attempts for the current state transition. - */ - retryAttempt?: number | undefined; - /** - * Represents the high-level status of a resource during its lifecycle. - */ - status: StackStateStateStatus; - /** - * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). - */ - type: string; -}; - -/** - * Represents the collective state of all resources in a stack, including platform and pending actions. - */ -export type SyncReconcileRequestStackState = { - /** - * Represents the target cloud platform. - */ - platform: SyncReconcileRequestStackStatePlatform; - /** - * A prefix used for resource naming to ensure uniqueness across deployments. - */ - resourcePrefix: string; - /** - * The state of individual resources, keyed by resource ID. - */ - resources: { [k: string]: SyncReconcileRequestStackStateResources }; -}; - -export type SyncReconcileRequestStackStateUnion = - | SyncReconcileRequestStackState - | any; - -/** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. - */ -export const StateStatus = { - Pending: "pending", - PreflightsFailed: "preflights-failed", - InitialSetup: "initial-setup", - InitialSetupFailed: "initial-setup-failed", - Provisioning: "provisioning", - WaitingForMachines: "waiting-for-machines", - ProvisioningFailed: "provisioning-failed", - Running: "running", - RefreshFailed: "refresh-failed", - UpdatePending: "update-pending", - Updating: "updating", - UpdateFailed: "update-failed", - DeletePending: "delete-pending", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - TeardownFailed: "teardown-failed", - Deleted: "deleted", - Error: "error", -} as const; -/** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. - */ -export type StateStatus = ClosedEnum; - -export const SyncReconcileRequestTargetReleaseTypeStringList = { - StringList: "stringList", -} as const; -export type SyncReconcileRequestTargetReleaseTypeStringList = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseTypeStringList ->; - -export type SyncReconcileRequestTargetReleaseDefaultStringList = { - type: SyncReconcileRequestTargetReleaseTypeStringList; - /** - * String list default. - */ - value: Array; -}; - -export const SyncReconcileRequestTargetReleaseTypeBoolean = { - Boolean: "boolean", -} as const; -export type SyncReconcileRequestTargetReleaseTypeBoolean = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseTypeBoolean ->; - -export type SyncReconcileRequestTargetReleaseDefaultBoolean = { - type: SyncReconcileRequestTargetReleaseTypeBoolean; - /** - * Boolean default. - */ - value: boolean; -}; - -export const SyncReconcileRequestTargetReleaseTypeNumber = { - Number: "number", -} as const; -export type SyncReconcileRequestTargetReleaseTypeNumber = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseTypeNumber ->; - -export type SyncReconcileRequestTargetReleaseDefaultNumber = { - type: SyncReconcileRequestTargetReleaseTypeNumber; - /** - * Number default. - */ - value: string; -}; - -export const SyncReconcileRequestTargetReleaseTypeString = { - String: "string", -} as const; -export type SyncReconcileRequestTargetReleaseTypeString = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseTypeString ->; - -export type SyncReconcileRequestTargetReleaseDefaultString = { - type: SyncReconcileRequestTargetReleaseTypeString; - /** - * String default. - */ - value: string; -}; - -export type SyncReconcileRequestTargetReleaseDefaultUnion = - | SyncReconcileRequestTargetReleaseDefaultString - | SyncReconcileRequestTargetReleaseDefaultNumber - | SyncReconcileRequestTargetReleaseDefaultBoolean - | SyncReconcileRequestTargetReleaseDefaultStringList - | any; - -/** - * Environment variable handling for a stack input mapping. - */ -export const SyncReconcileRequestTargetReleaseTypeEnvEnum = { - Plain: "plain", - Secret: "secret", -} as const; -/** - * Environment variable handling for a stack input mapping. - */ -export type SyncReconcileRequestTargetReleaseTypeEnvEnum = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseTypeEnvEnum ->; - -export type SyncReconcileRequestTargetReleaseTypeUnion = - | SyncReconcileRequestTargetReleaseTypeEnvEnum - | any; - -/** - * How a resolved stack input is injected into runtime environment variables. - */ -export type SyncReconcileRequestTargetReleaseEnv = { - /** - * Environment variable name. - */ - name: string; + name: string; /** * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: SyncReconcileRequestTargetReleaseTypeEnvEnum | any | null | undefined; + type?: SyncReconcileRequestPreparedStackTypeEnvEnum | any | null | undefined; }; /** * Primitive stack input kind. */ -export const TargetReleaseStateKind = { +export const PreparedStackStateKind = { String: "string", Secret: "secret", Number: "number", @@ -3740,12 +3415,12 @@ export const TargetReleaseStateKind = { /** * Primitive stack input kind. */ -export type TargetReleaseStateKind = ClosedEnum; +export type PreparedStackStateKind = ClosedEnum; /** * Represents the target cloud platform. */ -export const SyncReconcileRequestTargetReleasePlatform = { +export const SyncReconcileRequestPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3757,28 +3432,28 @@ export const SyncReconcileRequestTargetReleasePlatform = { /** * Represents the target cloud platform. */ -export type SyncReconcileRequestTargetReleasePlatform = ClosedEnum< - typeof SyncReconcileRequestTargetReleasePlatform +export type SyncReconcileRequestPreparedStackPlatform = ClosedEnum< + typeof SyncReconcileRequestPreparedStackPlatform >; /** * Who can provide a stack input value. */ -export const SyncReconcileRequestTargetReleaseProvidedBy = { +export const SyncReconcileRequestPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type SyncReconcileRequestTargetReleaseProvidedBy = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseProvidedBy +export type SyncReconcileRequestPreparedStackProvidedBy = ClosedEnum< + typeof SyncReconcileRequestPreparedStackProvidedBy >; /** * Portable stack input validation constraints. */ -export type SyncReconcileRequestTargetReleaseValidation = { +export type SyncReconcileRequestPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -3817,19 +3492,19 @@ export type SyncReconcileRequestTargetReleaseValidation = { values?: Array | null | undefined; }; -export type SyncReconcileRequestTargetReleaseValidationUnion = - | SyncReconcileRequestTargetReleaseValidation +export type SyncReconcileRequestPreparedStackValidationUnion = + | SyncReconcileRequestPreparedStackValidation | any; /** * Stack input definition serialized into a release stack. */ -export type SyncReconcileRequestTargetReleaseInput = { +export type SyncReconcileRequestPreparedStackInput = { default?: - | SyncReconcileRequestTargetReleaseDefaultString - | SyncReconcileRequestTargetReleaseDefaultNumber - | SyncReconcileRequestTargetReleaseDefaultBoolean - | SyncReconcileRequestTargetReleaseDefaultStringList + | SyncReconcileRequestPreparedStackDefaultString + | SyncReconcileRequestPreparedStackDefaultNumber + | SyncReconcileRequestPreparedStackDefaultBoolean + | SyncReconcileRequestPreparedStackDefaultStringList | any | null | undefined; @@ -3840,7 +3515,7 @@ export type SyncReconcileRequestTargetReleaseInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -3848,7 +3523,7 @@ export type SyncReconcileRequestTargetReleaseInput = { /** * Primitive stack input kind. */ - kind: TargetReleaseStateKind; + kind: PreparedStackStateKind; /** * Human-facing field label. */ @@ -3861,35 +3536,35 @@ export type SyncReconcileRequestTargetReleaseInput = { * Platforms where this input applies. */ platforms?: - | Array + | Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; validation?: - | SyncReconcileRequestTargetReleaseValidation + | SyncReconcileRequestPreparedStackValidation | any | null | undefined; }; -export const SyncReconcileRequestTargetReleaseManagementEnum = { +export const SyncReconcileRequestPreparedStackManagementEnum = { Auto: "auto", } as const; -export type SyncReconcileRequestTargetReleaseManagementEnum = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseManagementEnum +export type SyncReconcileRequestPreparedStackManagementEnum = ClosedEnum< + typeof SyncReconcileRequestPreparedStackManagementEnum >; /** * AWS-specific binding specification */ -export type TargetReleaseOverrideStateAwResource = { +export type PreparedStackOverrideStateAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -3903,7 +3578,7 @@ export type TargetReleaseOverrideStateAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileRequestTargetReleaseOverrideAwStack = { +export type SyncReconcileRequestPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -3917,35 +3592,35 @@ export type SyncReconcileRequestTargetReleaseOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseOverrideAwBinding = { +export type SyncReconcileRequestPreparedStackOverrideAwBinding = { /** * AWS-specific binding specification */ - resource?: TargetReleaseOverrideStateAwResource | undefined; + resource?: PreparedStackOverrideStateAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseOverrideAwStack | undefined; + stack?: SyncReconcileRequestPreparedStackOverrideAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileRequestTargetReleaseOverrideEffect = { +export const SyncReconcileRequestPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileRequestTargetReleaseOverrideEffect = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseOverrideEffect +export type SyncReconcileRequestPreparedStackOverrideEffect = ClosedEnum< + typeof SyncReconcileRequestPreparedStackOverrideEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseOverrideAwGrant = { +export type SyncReconcileRequestPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -3971,11 +3646,11 @@ export type SyncReconcileRequestTargetReleaseOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseOverrideAw = { +export type SyncReconcileRequestPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseOverrideAwBinding; + binding: SyncReconcileRequestPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -3983,11 +3658,11 @@ export type SyncReconcileRequestTargetReleaseOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileRequestTargetReleaseOverrideEffect | undefined; + effect?: SyncReconcileRequestPreparedStackOverrideEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseOverrideAwGrant; + grant: SyncReconcileRequestPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -3997,7 +3672,7 @@ export type SyncReconcileRequestTargetReleaseOverrideAw = { /** * Azure-specific binding specification */ -export type TargetReleaseOverrideStateAzureResource = { +export type PreparedStackOverrideStateAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4007,7 +3682,7 @@ export type TargetReleaseOverrideStateAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileRequestTargetReleaseOverrideAzureStack = { +export type SyncReconcileRequestPreparedStackOverrideAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4017,21 +3692,21 @@ export type SyncReconcileRequestTargetReleaseOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseOverrideAzureBinding = { +export type SyncReconcileRequestPreparedStackOverrideAzureBinding = { /** * Azure-specific binding specification */ - resource?: TargetReleaseOverrideStateAzureResource | undefined; + resource?: PreparedStackOverrideStateAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseOverrideAzureStack | undefined; + stack?: SyncReconcileRequestPreparedStackOverrideAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseOverrideAzureGrant = { +export type SyncReconcileRequestPreparedStackOverrideAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4057,11 +3732,11 @@ export type SyncReconcileRequestTargetReleaseOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseOverrideAzure = { +export type SyncReconcileRequestPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseOverrideAzureBinding; + binding: SyncReconcileRequestPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4069,7 +3744,7 @@ export type SyncReconcileRequestTargetReleaseOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseOverrideAzureGrant; + grant: SyncReconcileRequestPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4079,21 +3754,21 @@ export type SyncReconcileRequestTargetReleaseOverrideAzure = { /** * GCP IAM condition */ -export type TargetReleaseOverrideConditionStateResource = { +export type PreparedStackOverrideConditionStateResource = { expression: string; title: string; }; -export type TargetReleaseOverrideStateResourceConditionUnion = - | TargetReleaseOverrideConditionStateResource +export type PreparedStackOverrideStateResourceConditionUnion = + | PreparedStackOverrideConditionStateResource | any; /** * GCP-specific binding specification */ -export type TargetReleaseOverrideStateGcpResource = { +export type PreparedStackOverrideStateGcpResource = { condition?: - | TargetReleaseOverrideConditionStateResource + | PreparedStackOverrideConditionStateResource | any | null | undefined; @@ -4106,20 +3781,20 @@ export type TargetReleaseOverrideStateGcpResource = { /** * GCP IAM condition */ -export type TargetReleaseOverrideConditionState = { +export type PreparedStackOverrideConditionStateStack = { expression: string; title: string; }; -export type TargetReleaseOverrideStateConditionUnion = - | TargetReleaseOverrideConditionState +export type PreparedStackOverrideStateStackConditionUnion = + | PreparedStackOverrideConditionStateStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileRequestTargetReleaseOverrideGcpStack = { - condition?: TargetReleaseOverrideConditionState | any | null | undefined; +export type SyncReconcileRequestPreparedStackOverrideGcpStack = { + condition?: PreparedStackOverrideConditionStateStack | any | null | undefined; /** * Scope (project/resource level) */ @@ -4129,21 +3804,21 @@ export type SyncReconcileRequestTargetReleaseOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseOverrideGcpBinding = { +export type SyncReconcileRequestPreparedStackOverrideGcpBinding = { /** * GCP-specific binding specification */ - resource?: TargetReleaseOverrideStateGcpResource | undefined; + resource?: PreparedStackOverrideStateGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseOverrideGcpStack | undefined; + stack?: SyncReconcileRequestPreparedStackOverrideGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseOverrideGcpGrant = { +export type SyncReconcileRequestPreparedStackOverrideGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4169,11 +3844,11 @@ export type SyncReconcileRequestTargetReleaseOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseOverrideGcp = { +export type SyncReconcileRequestPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseOverrideGcpBinding; + binding: SyncReconcileRequestPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4181,7 +3856,7 @@ export type SyncReconcileRequestTargetReleaseOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseOverrideGcpGrant; + grant: SyncReconcileRequestPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4191,28 +3866,28 @@ export type SyncReconcileRequestTargetReleaseOverrideGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileRequestTargetReleaseOverridePlatforms = { +export type SyncReconcileRequestPreparedStackOverridePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileRequestTargetReleaseOverride = { +export type SyncReconcileRequestPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -4224,17 +3899,17 @@ export type SyncReconcileRequestTargetReleaseOverride = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileRequestTargetReleaseOverridePlatforms; + platforms: SyncReconcileRequestPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileRequestTargetReleaseOverrideUnion = - | SyncReconcileRequestTargetReleaseOverride +export type SyncReconcileRequestPreparedStackOverrideUnion = + | SyncReconcileRequestPreparedStackOverride | string; -export type SyncReconcileRequestTargetReleaseManagement2 = { +export type SyncReconcileRequestPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * @@ -4242,14 +3917,14 @@ export type SyncReconcileRequestTargetReleaseManagement2 = { * Key can be "*" for all resources or resource name for specific resource */ override: { - [k: string]: Array; + [k: string]: Array; }; }; /** * AWS-specific binding specification */ -export type TargetReleaseExtendStateAwResource = { +export type PreparedStackExtendStateAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -4263,7 +3938,7 @@ export type TargetReleaseExtendStateAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileRequestTargetReleaseExtendAwStack = { +export type SyncReconcileRequestPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -4277,35 +3952,35 @@ export type SyncReconcileRequestTargetReleaseExtendAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseExtendAwBinding = { +export type SyncReconcileRequestPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: TargetReleaseExtendStateAwResource | undefined; + resource?: PreparedStackExtendStateAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseExtendAwStack | undefined; + stack?: SyncReconcileRequestPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileRequestTargetReleaseExtendEffect = { +export const SyncReconcileRequestPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileRequestTargetReleaseExtendEffect = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseExtendEffect +export type SyncReconcileRequestPreparedStackExtendEffect = ClosedEnum< + typeof SyncReconcileRequestPreparedStackExtendEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseExtendAwGrant = { +export type SyncReconcileRequestPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4331,11 +4006,11 @@ export type SyncReconcileRequestTargetReleaseExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseExtendAw = { +export type SyncReconcileRequestPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseExtendAwBinding; + binding: SyncReconcileRequestPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4343,11 +4018,11 @@ export type SyncReconcileRequestTargetReleaseExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileRequestTargetReleaseExtendEffect | undefined; + effect?: SyncReconcileRequestPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseExtendAwGrant; + grant: SyncReconcileRequestPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4357,7 +4032,7 @@ export type SyncReconcileRequestTargetReleaseExtendAw = { /** * Azure-specific binding specification */ -export type TargetReleaseExtendStateAzureResource = { +export type PreparedStackExtendStateAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4367,7 +4042,7 @@ export type TargetReleaseExtendStateAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileRequestTargetReleaseExtendAzureStack = { +export type SyncReconcileRequestPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4377,21 +4052,21 @@ export type SyncReconcileRequestTargetReleaseExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseExtendAzureBinding = { +export type SyncReconcileRequestPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: TargetReleaseExtendStateAzureResource | undefined; + resource?: PreparedStackExtendStateAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseExtendAzureStack | undefined; + stack?: SyncReconcileRequestPreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseExtendAzureGrant = { +export type SyncReconcileRequestPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4417,11 +4092,11 @@ export type SyncReconcileRequestTargetReleaseExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseExtendAzure = { +export type SyncReconcileRequestPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseExtendAzureBinding; + binding: SyncReconcileRequestPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4429,7 +4104,7 @@ export type SyncReconcileRequestTargetReleaseExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseExtendAzureGrant; + grant: SyncReconcileRequestPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4439,21 +4114,21 @@ export type SyncReconcileRequestTargetReleaseExtendAzure = { /** * GCP IAM condition */ -export type TargetReleaseExtendConditionStateResource = { +export type PreparedStackExtendConditionStateResource = { expression: string; title: string; }; -export type TargetReleaseExtendStateResourceConditionUnion = - | TargetReleaseExtendConditionStateResource +export type PreparedStackExtendStateResourceConditionUnion = + | PreparedStackExtendConditionStateResource | any; /** * GCP-specific binding specification */ -export type TargetReleaseExtendStateGcpResource = { +export type PreparedStackExtendStateGcpResource = { condition?: - | TargetReleaseExtendConditionStateResource + | PreparedStackExtendConditionStateResource | any | null | undefined; @@ -4466,20 +4141,20 @@ export type TargetReleaseExtendStateGcpResource = { /** * GCP IAM condition */ -export type TargetReleaseExtendConditionState = { +export type PreparedStackExtendConditionStateStack = { expression: string; title: string; }; -export type TargetReleaseExtendStateConditionUnion = - | TargetReleaseExtendConditionState +export type PreparedStackExtendStateStackConditionUnion = + | PreparedStackExtendConditionStateStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileRequestTargetReleaseExtendGcpStack = { - condition?: TargetReleaseExtendConditionState | any | null | undefined; +export type SyncReconcileRequestPreparedStackExtendGcpStack = { + condition?: PreparedStackExtendConditionStateStack | any | null | undefined; /** * Scope (project/resource level) */ @@ -4489,21 +4164,21 @@ export type SyncReconcileRequestTargetReleaseExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseExtendGcpBinding = { +export type SyncReconcileRequestPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: TargetReleaseExtendStateGcpResource | undefined; + resource?: PreparedStackExtendStateGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseExtendGcpStack | undefined; + stack?: SyncReconcileRequestPreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseExtendGcpGrant = { +export type SyncReconcileRequestPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4529,11 +4204,11 @@ export type SyncReconcileRequestTargetReleaseExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseExtendGcp = { +export type SyncReconcileRequestPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseExtendGcpBinding; + binding: SyncReconcileRequestPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4541,7 +4216,7 @@ export type SyncReconcileRequestTargetReleaseExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseExtendGcpGrant; + grant: SyncReconcileRequestPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4551,28 +4226,28 @@ export type SyncReconcileRequestTargetReleaseExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileRequestTargetReleaseExtendPlatforms = { +export type SyncReconcileRequestPreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileRequestTargetReleaseExtend = { +export type SyncReconcileRequestPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -4584,17 +4259,17 @@ export type SyncReconcileRequestTargetReleaseExtend = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileRequestTargetReleaseExtendPlatforms; + platforms: SyncReconcileRequestPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileRequestTargetReleaseExtendUnion = - | SyncReconcileRequestTargetReleaseExtend +export type SyncReconcileRequestPreparedStackExtendUnion = + | SyncReconcileRequestPreparedStackExtend | string; -export type SyncReconcileRequestTargetReleaseManagement1 = { +export type SyncReconcileRequestPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * @@ -4602,22 +4277,22 @@ export type SyncReconcileRequestTargetReleaseManagement1 = { * Key can be "*" for all resources or resource name for specific resource */ extend: { - [k: string]: Array; + [k: string]: Array; }; }; /** * Management permissions configuration for stack management access */ -export type SyncReconcileRequestTargetReleaseManagementUnion = - | SyncReconcileRequestTargetReleaseManagement1 - | SyncReconcileRequestTargetReleaseManagement2 - | SyncReconcileRequestTargetReleaseManagementEnum; +export type SyncReconcileRequestPreparedStackManagementUnion = + | SyncReconcileRequestPreparedStackManagement1 + | SyncReconcileRequestPreparedStackManagement2 + | SyncReconcileRequestPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type TargetReleaseProfileStateAwResource = { +export type PreparedStackProfileStateAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -4631,7 +4306,7 @@ export type TargetReleaseProfileStateAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileRequestTargetReleaseProfileAwStack = { +export type SyncReconcileRequestPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -4645,35 +4320,35 @@ export type SyncReconcileRequestTargetReleaseProfileAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseProfileAwBinding = { +export type SyncReconcileRequestPreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ - resource?: TargetReleaseProfileStateAwResource | undefined; + resource?: PreparedStackProfileStateAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseProfileAwStack | undefined; + stack?: SyncReconcileRequestPreparedStackProfileAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileRequestTargetReleaseProfileEffect = { +export const SyncReconcileRequestPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileRequestTargetReleaseProfileEffect = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseProfileEffect +export type SyncReconcileRequestPreparedStackProfileEffect = ClosedEnum< + typeof SyncReconcileRequestPreparedStackProfileEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseProfileAwGrant = { +export type SyncReconcileRequestPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4699,11 +4374,11 @@ export type SyncReconcileRequestTargetReleaseProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseProfileAw = { +export type SyncReconcileRequestPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseProfileAwBinding; + binding: SyncReconcileRequestPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4711,11 +4386,11 @@ export type SyncReconcileRequestTargetReleaseProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileRequestTargetReleaseProfileEffect | undefined; + effect?: SyncReconcileRequestPreparedStackProfileEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseProfileAwGrant; + grant: SyncReconcileRequestPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4725,7 +4400,7 @@ export type SyncReconcileRequestTargetReleaseProfileAw = { /** * Azure-specific binding specification */ -export type TargetReleaseProfileStateAzureResource = { +export type PreparedStackProfileStateAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4735,7 +4410,7 @@ export type TargetReleaseProfileStateAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileRequestTargetReleaseProfileAzureStack = { +export type SyncReconcileRequestPreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4745,21 +4420,21 @@ export type SyncReconcileRequestTargetReleaseProfileAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseProfileAzureBinding = { +export type SyncReconcileRequestPreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ - resource?: TargetReleaseProfileStateAzureResource | undefined; + resource?: PreparedStackProfileStateAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseProfileAzureStack | undefined; + stack?: SyncReconcileRequestPreparedStackProfileAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseProfileAzureGrant = { +export type SyncReconcileRequestPreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4785,11 +4460,11 @@ export type SyncReconcileRequestTargetReleaseProfileAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseProfileAzure = { +export type SyncReconcileRequestPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseProfileAzureBinding; + binding: SyncReconcileRequestPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4797,7 +4472,7 @@ export type SyncReconcileRequestTargetReleaseProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseProfileAzureGrant; + grant: SyncReconcileRequestPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4807,21 +4482,21 @@ export type SyncReconcileRequestTargetReleaseProfileAzure = { /** * GCP IAM condition */ -export type TargetReleaseProfileConditionStateResource = { +export type PreparedStackProfileConditionStateResource = { expression: string; title: string; }; -export type TargetReleaseProfileStateResourceConditionUnion = - | TargetReleaseProfileConditionStateResource +export type PreparedStackProfileStateResourceConditionUnion = + | PreparedStackProfileConditionStateResource | any; /** * GCP-specific binding specification */ -export type TargetReleaseProfileStateGcpResource = { +export type PreparedStackProfileStateGcpResource = { condition?: - | TargetReleaseProfileConditionStateResource + | PreparedStackProfileConditionStateResource | any | null | undefined; @@ -4834,20 +4509,20 @@ export type TargetReleaseProfileStateGcpResource = { /** * GCP IAM condition */ -export type TargetReleaseProfileConditionState = { +export type PreparedStackProfileConditionStateStack = { expression: string; title: string; }; -export type TargetReleaseProfileStateConditionUnion = - | TargetReleaseProfileConditionState +export type PreparedStackProfileStateStackConditionUnion = + | PreparedStackProfileConditionStateStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileRequestTargetReleaseProfileGcpStack = { - condition?: TargetReleaseProfileConditionState | any | null | undefined; +export type SyncReconcileRequestPreparedStackProfileGcpStack = { + condition?: PreparedStackProfileConditionStateStack | any | null | undefined; /** * Scope (project/resource level) */ @@ -4857,21 +4532,21 @@ export type SyncReconcileRequestTargetReleaseProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileRequestTargetReleaseProfileGcpBinding = { +export type SyncReconcileRequestPreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ - resource?: TargetReleaseProfileStateGcpResource | undefined; + resource?: PreparedStackProfileStateGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileRequestTargetReleaseProfileGcpStack | undefined; + stack?: SyncReconcileRequestPreparedStackProfileGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileRequestTargetReleaseProfileGcpGrant = { +export type SyncReconcileRequestPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4897,11 +4572,11 @@ export type SyncReconcileRequestTargetReleaseProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileRequestTargetReleaseProfileGcp = { +export type SyncReconcileRequestPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileRequestTargetReleaseProfileGcpBinding; + binding: SyncReconcileRequestPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4909,7 +4584,7 @@ export type SyncReconcileRequestTargetReleaseProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileRequestTargetReleaseProfileGcpGrant; + grant: SyncReconcileRequestPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4919,28 +4594,28 @@ export type SyncReconcileRequestTargetReleaseProfileGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileRequestTargetReleaseProfilePlatforms = { +export type SyncReconcileRequestPreparedStackProfilePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileRequestTargetReleaseProfile = { +export type SyncReconcileRequestPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -4952,27 +4627,27 @@ export type SyncReconcileRequestTargetReleaseProfile = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileRequestTargetReleaseProfilePlatforms; + platforms: SyncReconcileRequestPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileRequestTargetReleaseProfileUnion = - | SyncReconcileRequestTargetReleaseProfile +export type SyncReconcileRequestPreparedStackProfileUnion = + | SyncReconcileRequestPreparedStackProfile | string; /** * Combined permissions configuration that contains both profiles and management */ -export type SyncReconcileRequestTargetReleasePermissions = { +export type SyncReconcileRequestPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | SyncReconcileRequestTargetReleaseManagement1 - | SyncReconcileRequestTargetReleaseManagement2 - | SyncReconcileRequestTargetReleaseManagementEnum + | SyncReconcileRequestPreparedStackManagement1 + | SyncReconcileRequestPreparedStackManagement2 + | SyncReconcileRequestPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -4982,7 +4657,7 @@ export type SyncReconcileRequestTargetReleasePermissions = { */ profiles: { [k: string]: { - [k: string]: Array; + [k: string]: Array; }; }; }; @@ -4990,7 +4665,7 @@ export type SyncReconcileRequestTargetReleasePermissions = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileRequestTargetReleaseConfig = { +export type SyncReconcileRequestPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -5005,7 +4680,7 @@ export type SyncReconcileRequestTargetReleaseConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type SyncReconcileRequestTargetReleaseDependency = { +export type SyncReconcileRequestPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -5016,33 +4691,44 @@ export type SyncReconcileRequestTargetReleaseDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const TargetReleaseStateLifecycle = { +export const PreparedStackStateLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type TargetReleaseStateLifecycle = ClosedEnum< - typeof TargetReleaseStateLifecycle +export type PreparedStackStateLifecycle = ClosedEnum< + typeof PreparedStackStateLifecycle >; -export type SyncReconcileRequestTargetReleaseResources = { +export type SyncReconcileRequestPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: SyncReconcileRequestTargetReleaseConfig; + config: SyncReconcileRequestPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: TargetReleaseStateLifecycle; + lifecycle: PreparedStackStateLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -5056,7 +4742,7 @@ export type SyncReconcileRequestTargetReleaseResources = { /** * Represents the target cloud platform. */ -export const SyncReconcileRequestTargetReleaseSupportedPlatform = { +export const SyncReconcileRequestPreparedStackSupportedPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -5068,14 +4754,14 @@ export const SyncReconcileRequestTargetReleaseSupportedPlatform = { /** * Represents the target cloud platform. */ -export type SyncReconcileRequestTargetReleaseSupportedPlatform = ClosedEnum< - typeof SyncReconcileRequestTargetReleaseSupportedPlatform +export type SyncReconcileRequestPreparedStackSupportedPlatform = ClosedEnum< + typeof SyncReconcileRequestPreparedStackSupportedPlatform >; /** * A bag of resources, unaware of any cloud. */ -export type SyncReconcileRequestTargetReleaseStack = { +export type SyncReconcileRequestPreparedStack = { /** * Unique identifier for the stack */ @@ -5083,131 +4769,153 @@ export type SyncReconcileRequestTargetReleaseStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: Array | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: SyncReconcileRequestTargetReleasePermissions | undefined; + permissions?: SyncReconcileRequestPreparedStackPermissions | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: SyncReconcileRequestTargetReleaseResources }; + resources: { [k: string]: SyncReconcileRequestPreparedStackResources }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array | null | undefined; }; +export type SyncReconcileRequestPreparedStackUnion = + | SyncReconcileRequestPreparedStack + | any; + /** - * Release metadata - * - * @remarks - * - * Identifies a specific release version and includes the stack definition. - * The deployment engine uses this to track which release is currently deployed - * and which is the target. + * One-shot authority for a setup re-import to replace setup-owned resources. */ -export type SyncReconcileRequestTargetRelease = { +export type SyncReconcileRequestSetupUpdateAuthorization = { /** - * Short description of the release + * Frozen resource projection from the last successful deployment. */ - description?: string | null | undefined; + baselineFrozenDigest: string; /** - * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no - * - * @remarks - * Alien-assigned release — the platform resolves a release from `version`. + * Unique revision used by persistence layers for compare-and-swap updates. */ - releaseId?: string | null | undefined; + nonce: string; /** - * A bag of resources, unaware of any cloud. + * Release whose stack was prepared by setup. */ - stack: SyncReconcileRequestTargetReleaseStack; + releaseId: string; /** - * Version string (e.g., 2.1.0) + * Exact setup artifact revision that authored this authority. */ - version?: string | null | undefined; + setupFingerprint: string; + /** + * Setup fingerprint contract version. + */ + setupFingerprintVersion: number; + /** + * Stable setup target recorded on the imported deployment. + */ + setupTarget: string; + /** + * Frozen resource projection prepared by the setup re-import. + */ + targetFrozenDigest: string; }; -export type SyncReconcileRequestTargetReleaseUnion = - | SyncReconcileRequestTargetRelease +export type SyncReconcileRequestSetupUpdateAuthorizationUnion = + | SyncReconcileRequestSetupUpdateAuthorization | any; /** - * Complete deployment state after step() execution + * Runtime metadata for deployment + * + * @remarks + * + * Stores deployment state that needs to persist across step calls. */ -export type SyncReconcileRequestState = { - currentRelease?: SyncReconcileRequestCurrentRelease | any | null | undefined; - environmentInfo?: - | SyncReconcileRequestEnvironmentInfoGcp - | SyncReconcileRequestEnvironmentInfoAzure - | SyncReconcileRequestEnvironmentInfoLocal - | SyncReconcileRequestEnvironmentInfoAws - | SyncReconcileRequestEnvironmentInfoTest - | any - | null - | undefined; - error?: SyncReconcileRequestError | any | null | undefined; - /** - * Represents the target cloud platform. - */ - platform: SyncReconcileRequestPlatform; +export type SyncReconcileRequestRuntimeMetadata = { /** - * Protocol version for cross-actor compatibility. + * Hash of the environment variables snapshot that was last synced to the vault * * @remarks - * All actors (manager, push client, agent) check this before stepping. - * Mismatched versions produce a clear error instead of silent corruption. - * See docs/02-manager/10-deployment-protocol.md. + * Used to avoid redundant sync operations during incremental deployment */ - protocolVersion: number; + lastSyncedEnvVarsHash?: string | null | undefined; /** - * Whether a retry has been requested for a failed deployment + * Exact vault keys owned by the deployment secret synchronizer. This * * @remarks - * When true and status is a failed state, the deployment system will retry failed resources + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. */ - retryRequested?: boolean | undefined; - runtimeMetadata?: - | SyncReconcileRequestRuntimeMetadata + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | SyncReconcileRequestPendingPreparedStack | any | null | undefined; - stackState?: SyncReconcileRequestStackState | any | null | undefined; + preparedStack?: SyncReconcileRequestPreparedStack | any | null | undefined; /** - * Deployment status in the deployment lifecycle. + * Whether cross-account registry access has been successfully granted. * * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. */ - status: StateStatus; - targetRelease?: SyncReconcileRequestTargetRelease | any | null | undefined; + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | SyncReconcileRequestSetupUpdateAuthorization + | any + | null + | undefined; }; -export const ResourceHeartbeatBackendEnum = { +export type SyncReconcileRequestRuntimeMetadataUnion = + | SyncReconcileRequestRuntimeMetadata + | any; + +/** + * Represents the target cloud platform. + */ +export const SyncReconcileRequestStackStatePlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", Kubernetes: "kubernetes", + Machines: "machines", Local: "local", - Managed: "managed", - External: "external", Test: "test", } as const; -export type ResourceHeartbeatBackendEnum = ClosedEnum< - typeof ResourceHeartbeatBackendEnum +/** + * Represents the target cloud platform. + */ +export type SyncReconcileRequestStackStatePlatform = ClosedEnum< + typeof SyncReconcileRequestStackStatePlatform >; +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type SyncReconcileRequestStackStateConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + /** * Represents the target cloud platform. */ -export const ResourceHeartbeatControllerPlatform = { +export const ControllerPlatformStateEnum = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -5219,1505 +4927,1947 @@ export const ResourceHeartbeatControllerPlatform = { /** * Represents the target cloud platform. */ -export type ResourceHeartbeatControllerPlatform = ClosedEnum< - typeof ResourceHeartbeatControllerPlatform +export type ControllerPlatformStateEnum = ClosedEnum< + typeof ControllerPlatformStateEnum >; -export const DataReason65 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason65 = ClosedEnum; - -export const StatusSeverity65 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity65 = ClosedEnum; - -export type DataCollectionIssue65 = { - message: string; - reason: DataReason65; - severity: StatusSeverity65; - source: string; -}; - -export const DataHealth65 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth65 = ClosedEnum; - -export const StatusLifecycle65 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle65 = ClosedEnum; - -export type ResourceHeartbeatStatus65 = { - collectionIssues: Array; - health: DataHealth65; - lifecycle: StatusLifecycle65; - message?: string | null | undefined; - partial: boolean; - stale: boolean; -}; +export type StateControllerPlatformUnion = ControllerPlatformStateEnum | any; -export type SyncReconcileRequestData5 = { - createdAt?: string | null | undefined; - disableLocalAuth?: boolean | null | undefined; - location?: string | null | undefined; - metricId?: string | null | undefined; - minimumTlsVersion?: string | null | undefined; - name: string; - namespaceStatus?: string | null | undefined; - premiumMessagingPartitions?: number | null | undefined; - privateEndpointConnectionCount: number; - provisioningState?: string | null | undefined; - publicNetworkAccess?: string | null | undefined; - resourceGroup?: string | null | undefined; - resourceId?: string | null | undefined; - serviceBusEndpoint?: string | null | undefined; - skuCapacity?: number | null | undefined; - skuName?: string | null | undefined; - skuTier?: string | null | undefined; - status: ResourceHeartbeatStatus65; - updatedAt?: string | null | undefined; - zoneRedundant?: boolean | null | undefined; +/** + * Reference to a resource by its stable id and resource type. + */ +export type SyncReconcileRequestStackStateDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; }; -export type DataAzureServiceBusNamespace = { - data: SyncReconcileRequestData5; - resourceType: "azure_service_bus_namespace"; +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type SyncReconcileRequestStackStateError = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable?: boolean | undefined; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; }; -export const DataReason64 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason64 = ClosedEnum; +export type SyncReconcileRequestStackStateErrorUnion = + | SyncReconcileRequestStackStateError + | any; -export const StatusSeverity64 = { - Info: "info", - Warning: "warning", - Error: "error", +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const StackStateLifecycleStateEnum = { + Frozen: "frozen", + Live: "live", } as const; -export type StatusSeverity64 = ClosedEnum; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type StackStateLifecycleStateEnum = ClosedEnum< + typeof StackStateLifecycleStateEnum +>; -export type DataCollectionIssue64 = { - message: string; - reason: DataReason64; - severity: StatusSeverity64; - source: string; +export type StateLifecycleUnion = StackStateLifecycleStateEnum | any; + +/** + * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. + */ +export type SyncReconcileRequestOutputs = { + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; -export const DataHealth64 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth64 = ClosedEnum; +export type SyncReconcileRequestOutputsUnion = + | SyncReconcileRequestOutputs + | any; -export const StatusLifecycle64 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type SyncReconcileRequestPreviousConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +export type SyncReconcileRequestPreviousConfigUnion = + | SyncReconcileRequestPreviousConfig + | any; + +/** + * Represents the high-level status of a resource during its lifecycle. + */ +export const StackStateStateStatus = { + Pending: "pending", + Provisioning: "provisioning", + ProvisionFailed: "provision-failed", Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", + Updating: "updating", + UpdateFailed: "update-failed", Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", Deleted: "deleted", - Failed: "failed", + RefreshFailed: "refresh-failed", } as const; -export type StatusLifecycle64 = ClosedEnum; - -export type ResourceHeartbeatStatus64 = { - collectionIssues: Array; - health: DataHealth64; - lifecycle: StatusLifecycle64; - message?: string | null | undefined; - partial: boolean; - stale: boolean; -}; - -export type WorkloadProfile = { - maximumCount?: number | null | undefined; - minimumCount?: number | null | undefined; - name: string; - workloadProfileType: string; -}; - -export type SyncReconcileRequestData4 = { - customDomainVerificationId?: string | null | undefined; - defaultDomain?: string | null | undefined; - eventStreamEndpoint?: string | null | undefined; - infrastructureResourceGroup?: string | null | undefined; - kind?: string | null | undefined; - location?: string | null | undefined; - name: string; - provisioningState?: string | null | undefined; - resourceGroup?: string | null | undefined; - resourceId?: string | null | undefined; - staticIp?: string | null | undefined; - status: ResourceHeartbeatStatus64; - workloadProfileCount: number; - workloadProfiles: Array; - zoneRedundant?: boolean | null | undefined; -}; +/** + * Represents the high-level status of a resource during its lifecycle. + */ +export type StackStateStateStatus = ClosedEnum; -export type DataAzureContainerAppsEnvironment = { - data: SyncReconcileRequestData4; - resourceType: "azure_container_apps_environment"; +/** + * Represents the state of a single resource within the stack for a specific platform. + */ +export type SyncReconcileRequestStackStateResources = { + /** + * The platform-specific resource controller that manages this resource's lifecycle. + * + * @remarks + * This is None when the resource status is Pending. + * Stored as JSON to make the struct serializable and movable to alien-core. + */ + internal?: any | null | undefined; + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: SyncReconcileRequestStackStateConfig; + controllerPlatform?: ControllerPlatformStateEnum | any | null | undefined; + /** + * Complete list of dependencies for this resource, including infrastructure dependencies. + * + * @remarks + * This preserves the full dependency information from the stack definition. + */ + dependencies?: Array | undefined; + error?: SyncReconcileRequestStackStateError | any | null | undefined; + /** + * Stores the controller state that failed, used for manual retry operations. + * + * @remarks + * This allows resuming from the exact point where the failure occurred. + * Stored as JSON to make the struct serializable and movable to alien-core. + */ + lastFailedState?: any | null | undefined; + lifecycle?: StackStateLifecycleStateEnum | any | null | undefined; + outputs?: SyncReconcileRequestOutputs | any | null | undefined; + previousConfig?: SyncReconcileRequestPreviousConfig | any | null | undefined; + /** + * Binding parameters for remote access. + * + * @remarks + * Only populated when the resource has `remote_access: true` in its ResourceEntry. + * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). + * Populated by controllers during provisioning using get_binding_params(). + */ + remoteBindingParams?: any | null | undefined; + /** + * Tracks consecutive retry attempts for the current state transition. + */ + retryAttempt?: number | undefined; + /** + * Represents the high-level status of a resource during its lifecycle. + */ + status: StackStateStateStatus; + /** + * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). + */ + type: string; }; -export type PrimaryEndpoints = { - blob?: string | null | undefined; - dfs?: string | null | undefined; - file?: string | null | undefined; - queue?: string | null | undefined; - table?: string | null | undefined; - web?: string | null | undefined; +/** + * Represents the collective state of all resources in a stack, including platform and pending actions. + */ +export type SyncReconcileRequestStackState = { + /** + * Represents the target cloud platform. + */ + platform: SyncReconcileRequestStackStatePlatform; + /** + * A prefix used for resource naming to ensure uniqueness across deployments. + */ + resourcePrefix: string; + /** + * The state of individual resources, keyed by resource ID. + */ + resources: { [k: string]: SyncReconcileRequestStackStateResources }; }; -export type SecondaryEndpoints = { - blob?: string | null | undefined; - dfs?: string | null | undefined; - file?: string | null | undefined; - queue?: string | null | undefined; - table?: string | null | undefined; - web?: string | null | undefined; -}; +export type SyncReconcileRequestStackStateUnion = + | SyncReconcileRequestStackState + | any; -export const DataReason63 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", +/** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ +export const StateStatus = { + Pending: "pending", + PreflightsFailed: "preflights-failed", + InitialSetup: "initial-setup", + InitialSetupFailed: "initial-setup-failed", + Provisioning: "provisioning", + WaitingForMachines: "waiting-for-machines", + ProvisioningFailed: "provisioning-failed", + Running: "running", + RefreshFailed: "refresh-failed", + UpdatePending: "update-pending", + Updating: "updating", + UpdateFailed: "update-failed", + DeletePending: "delete-pending", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + TeardownFailed: "teardown-failed", + Deleted: "deleted", + Error: "error", } as const; -export type DataReason63 = ClosedEnum; +/** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ +export type StateStatus = ClosedEnum; -export const StatusSeverity63 = { - Info: "info", - Warning: "warning", - Error: "error", +export const SyncReconcileRequestTargetReleaseTypeStringList = { + StringList: "stringList", } as const; -export type StatusSeverity63 = ClosedEnum; +export type SyncReconcileRequestTargetReleaseTypeStringList = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseTypeStringList +>; -export type DataCollectionIssue63 = { - message: string; - reason: DataReason63; - severity: StatusSeverity63; - source: string; +export type SyncReconcileRequestTargetReleaseDefaultStringList = { + type: SyncReconcileRequestTargetReleaseTypeStringList; + /** + * String list default. + */ + value: Array; }; -export const DataHealth63 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", +export const SyncReconcileRequestTargetReleaseTypeBoolean = { + Boolean: "boolean", } as const; -export type DataHealth63 = ClosedEnum; +export type SyncReconcileRequestTargetReleaseTypeBoolean = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseTypeBoolean +>; -export const StatusLifecycle63 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", +export type SyncReconcileRequestTargetReleaseDefaultBoolean = { + type: SyncReconcileRequestTargetReleaseTypeBoolean; + /** + * Boolean default. + */ + value: boolean; +}; + +export const SyncReconcileRequestTargetReleaseTypeNumber = { + Number: "number", } as const; -export type StatusLifecycle63 = ClosedEnum; +export type SyncReconcileRequestTargetReleaseTypeNumber = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseTypeNumber +>; -export type ResourceHeartbeatStatus63 = { - collectionIssues: Array; - health: DataHealth63; - lifecycle: StatusLifecycle63; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +export type SyncReconcileRequestTargetReleaseDefaultNumber = { + type: SyncReconcileRequestTargetReleaseTypeNumber; + /** + * Number default. + */ + value: string; }; -export type SyncReconcileRequestData3 = { - allowBlobPublicAccess?: boolean | null | undefined; - allowSharedKeyAccess?: boolean | null | undefined; - encryptionKeySource?: string | null | undefined; - kind?: string | null | undefined; - location?: string | null | undefined; - minimumTlsVersion?: string | null | undefined; - name: string; - networkBypass?: string | null | undefined; - networkDefaultAction?: string | null | undefined; - networkIpRuleCount?: number | null | undefined; - networkResourceAccessRuleCount?: number | null | undefined; - networkVirtualNetworkRuleCount?: number | null | undefined; - primaryEndpoints: PrimaryEndpoints; - provisioningState?: string | null | undefined; - publicNetworkAccess?: string | null | undefined; - requireInfrastructureEncryption?: boolean | null | undefined; - resourceGroup?: string | null | undefined; - resourceId?: string | null | undefined; - secondaryEndpoints: SecondaryEndpoints; - skuName?: string | null | undefined; - skuTier?: string | null | undefined; - status: ResourceHeartbeatStatus63; - supportsHttpsTrafficOnly?: boolean | null | undefined; -}; +export const SyncReconcileRequestTargetReleaseTypeString = { + String: "string", +} as const; +export type SyncReconcileRequestTargetReleaseTypeString = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseTypeString +>; -export type DataAzureStorageAccount = { - data: SyncReconcileRequestData3; - resourceType: "azure_storage_account"; +export type SyncReconcileRequestTargetReleaseDefaultString = { + type: SyncReconcileRequestTargetReleaseTypeString; + /** + * String default. + */ + value: string; }; -export const DataReason62 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason62 = ClosedEnum; +export type SyncReconcileRequestTargetReleaseDefaultUnion = + | SyncReconcileRequestTargetReleaseDefaultString + | SyncReconcileRequestTargetReleaseDefaultNumber + | SyncReconcileRequestTargetReleaseDefaultBoolean + | SyncReconcileRequestTargetReleaseDefaultStringList + | any; -export const StatusSeverity62 = { - Info: "info", - Warning: "warning", - Error: "error", +/** + * Environment variable handling for a stack input mapping. + */ +export const SyncReconcileRequestTargetReleaseTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; -export type StatusSeverity62 = ClosedEnum; +/** + * Environment variable handling for a stack input mapping. + */ +export type SyncReconcileRequestTargetReleaseTypeEnvEnum = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseTypeEnvEnum +>; -export type DataCollectionIssue62 = { - message: string; - reason: DataReason62; - severity: StatusSeverity62; - source: string; -}; +export type SyncReconcileRequestTargetReleaseTypeUnion = + | SyncReconcileRequestTargetReleaseTypeEnvEnum + | any; -export const DataHealth62 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth62 = ClosedEnum; - -export const StatusLifecycle62 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle62 = ClosedEnum; - -export type ResourceHeartbeatStatus62 = { - collectionIssues: Array; - health: DataHealth62; - lifecycle: StatusLifecycle62; - message?: string | null | undefined; - partial: boolean; - stale: boolean; -}; - -export type SyncReconcileRequestData2 = { - location?: string | null | undefined; - managedTags: { [k: string]: string }; +/** + * How a resolved stack input is injected into runtime environment variables. + */ +export type SyncReconcileRequestTargetReleaseEnv = { + /** + * Environment variable name. + */ name: string; - provisioningState?: string | null | undefined; - resourceId?: string | null | undefined; - status: ResourceHeartbeatStatus62; + /** + * Target resource IDs or patterns. None means every env-capable resource. + */ + targetResources?: Array | null | undefined; + type?: SyncReconcileRequestTargetReleaseTypeEnvEnum | any | null | undefined; }; -export type DataAzureResourceGroup = { - data: SyncReconcileRequestData2; - resourceType: "azure_resource_group"; -}; +/** + * Primitive stack input kind. + */ +export const TargetReleaseStateKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; +/** + * Primitive stack input kind. + */ +export type TargetReleaseStateKind = ClosedEnum; -export const DataReason61 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", +/** + * Represents the target cloud platform. + */ +export const SyncReconcileRequestTargetReleasePlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", } as const; -export type DataReason61 = ClosedEnum; +/** + * Represents the target cloud platform. + */ +export type SyncReconcileRequestTargetReleasePlatform = ClosedEnum< + typeof SyncReconcileRequestTargetReleasePlatform +>; -export const StatusSeverity61 = { - Info: "info", - Warning: "warning", - Error: "error", +/** + * Who can provide a stack input value. + */ +export const SyncReconcileRequestTargetReleaseProvidedBy = { + Developer: "developer", + Deployer: "deployer", } as const; -export type StatusSeverity61 = ClosedEnum; +/** + * Who can provide a stack input value. + */ +export type SyncReconcileRequestTargetReleaseProvidedBy = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseProvidedBy +>; -export type DataCollectionIssue61 = { - message: string; - reason: DataReason61; - severity: StatusSeverity61; - source: string; +/** + * Portable stack input validation constraints. + */ +export type SyncReconcileRequestTargetReleaseValidation = { + /** + * Semantic format hint such as url. + */ + format?: string | null | undefined; + /** + * Maximum number. + */ + max?: string | null | undefined; + /** + * Maximum string-list items. + */ + maxItems?: number | null | undefined; + /** + * Maximum string length. + */ + maxLength?: number | null | undefined; + /** + * Minimum number. + */ + min?: string | null | undefined; + /** + * Minimum string-list items. + */ + minItems?: number | null | undefined; + /** + * Minimum string length. + */ + minLength?: number | null | undefined; + /** + * Portable whole-value regex pattern. + */ + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; -export const DataHealth61 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth61 = ClosedEnum; +export type SyncReconcileRequestTargetReleaseValidationUnion = + | SyncReconcileRequestTargetReleaseValidation + | any; -export const StatusLifecycle61 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", +/** + * Stack input definition serialized into a release stack. + */ +export type SyncReconcileRequestTargetReleaseInput = { + default?: + | SyncReconcileRequestTargetReleaseDefaultString + | SyncReconcileRequestTargetReleaseDefaultNumber + | SyncReconcileRequestTargetReleaseDefaultBoolean + | SyncReconcileRequestTargetReleaseDefaultStringList + | any + | null + | undefined; + /** + * Human-facing helper text. + */ + description: string; + /** + * Runtime env-var mappings for v1 input resolution. + */ + env?: Array | undefined; + /** + * Stable input ID used by CLI/API calls. + */ + id: string; + /** + * Primitive stack input kind. + */ + kind: TargetReleaseStateKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: + | Array + | null + | undefined; + /** + * Who can provide this value. + */ + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: + | SyncReconcileRequestTargetReleaseValidation + | any + | null + | undefined; +}; + +export const SyncReconcileRequestTargetReleaseManagementEnum = { + Auto: "auto", } as const; -export type StatusLifecycle61 = ClosedEnum; +export type SyncReconcileRequestTargetReleaseManagementEnum = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseManagementEnum +>; -export type ResourceHeartbeatStatus61 = { - collectionIssues: Array; - health: DataHealth61; - lifecycle: StatusLifecycle61; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * AWS-specific binding specification + */ +export type TargetReleaseOverrideStateAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type DataAzureResourceProvider = { - namespace: string; - providerId?: string | null | undefined; - registered: boolean; - registrationPolicy?: string | null | undefined; - registrationState?: string | null | undefined; - resourceTypeCount: number; - status: ResourceHeartbeatStatus61; - backend: "azureResourceProvider"; +/** + * AWS-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseOverrideAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export const DataReason60 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason60 = ClosedEnum; - -export const StatusSeverity60 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity60 = ClosedEnum; - -export type DataCollectionIssue60 = { - message: string; - reason: DataReason60; - severity: StatusSeverity60; - source: string; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseOverrideAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: TargetReleaseOverrideStateAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseOverrideAwStack | undefined; }; -export const DataHealth60 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", +/** + * IAM effect. Defaults to Allow. + */ +export const SyncReconcileRequestTargetReleaseOverrideEffect = { + Allow: "Allow", + Deny: "Deny", } as const; -export type DataHealth60 = ClosedEnum; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncReconcileRequestTargetReleaseOverrideEffect = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseOverrideEffect +>; -export const StatusLifecycle60 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle60 = ClosedEnum; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseOverrideAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; -export type ResourceHeartbeatStatus60 = { - collectionIssues: Array; - health: DataHealth60; - lifecycle: StatusLifecycle60; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * AWS-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseOverrideAw = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseOverrideAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncReconcileRequestTargetReleaseOverrideEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseOverrideAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type DataGcpServiceUsage = { - enabled: boolean; - lastOperationName?: string | null | undefined; - projectId: string; - serviceName: string; - serviceResourceName?: string | null | undefined; - state?: string | null | undefined; - status: ResourceHeartbeatStatus60; - title?: string | null | undefined; - backend: "gcpServiceUsage"; +/** + * Azure-specific binding specification + */ +export type TargetReleaseOverrideStateAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; }; -export type SyncReconcileRequestDataUnion15 = - | DataGcpServiceUsage - | DataAzureResourceProvider; +/** + * Azure-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseOverrideAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; -export type DataServiceActivation = { - data: DataGcpServiceUsage | DataAzureResourceProvider; - resourceType: "service_activation"; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseOverrideAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: TargetReleaseOverrideStateAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseOverrideAzureStack | undefined; }; -export type InvolvedObject10 = { - apiVersion?: string | null | undefined; - fieldPath?: string | null | undefined; - kind?: string | null | undefined; - name?: string | null | undefined; - namespace?: string | null | undefined; - resourceVersion?: string | null | undefined; - uid?: string | null | undefined; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseOverrideAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export type InvolvedObjectUnion10 = InvolvedObject10 | any; +/** + * Azure-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseOverrideAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseOverrideAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; -export type SyncReconcileRequestSource10 = { - component?: string | null | undefined; - host?: string | null | undefined; +/** + * GCP IAM condition + */ +export type TargetReleaseOverrideConditionStateResource = { + expression: string; + title: string; }; -export type SourceUnion10 = SyncReconcileRequestSource10 | any; +export type TargetReleaseOverrideStateResourceConditionUnion = + | TargetReleaseOverrideConditionStateResource + | any; -export type SyncReconcileRequestEvent13 = { - count?: number | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject10 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource10 | any | null | undefined; - type?: string | null | undefined; +/** + * GCP-specific binding specification + */ +export type TargetReleaseOverrideStateGcpResource = { + condition?: + | TargetReleaseOverrideConditionStateResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; }; -export const DataReason59 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason59 = ClosedEnum; - -export const StatusSeverity59 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity59 = ClosedEnum; - -export type DataCollectionIssue59 = { - message: string; - reason: DataReason59; - severity: StatusSeverity59; - source: string; +/** + * GCP IAM condition + */ +export type TargetReleaseOverrideConditionState = { + expression: string; + title: string; }; -export const DataHealth59 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth59 = ClosedEnum; - -export const StatusLifecycle59 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle59 = ClosedEnum; +export type TargetReleaseOverrideStateConditionUnion = + | TargetReleaseOverrideConditionState + | any; -export type ResourceHeartbeatStatus59 = { - collectionIssues: Array; - health: DataHealth59; - lifecycle: StatusLifecycle59; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * GCP-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseOverrideGcpStack = { + condition?: TargetReleaseOverrideConditionState | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; }; -export type DataKubernetesJob = { - active?: number | null | undefined; - completionTime?: Date | null | undefined; - conditionCount: number; - events: Array; - failed?: number | null | undefined; - imageDigest?: string | null | undefined; - jobName: string; - namespace: string; - startTime?: Date | null | undefined; - status: ResourceHeartbeatStatus59; - succeeded?: number | null | undefined; - backend: "kubernetesJob"; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseOverrideGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: TargetReleaseOverrideStateGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseOverrideGcpStack | undefined; }; -export const DataReason58 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason58 = ClosedEnum; - -export const StatusSeverity58 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity58 = ClosedEnum; - -export type DataCollectionIssue58 = { - message: string; - reason: DataReason58; - severity: StatusSeverity58; - source: string; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseOverrideGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export const DataHealth58 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth58 = ClosedEnum; - -export const StatusLifecycle58 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle58 = ClosedEnum; - -export type ResourceHeartbeatStatus58 = { - collectionIssues: Array; - health: DataHealth58; - lifecycle: StatusLifecycle58; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * GCP-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseOverrideGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseOverrideGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseOverrideGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type DataAzureContainerApps2 = { - environmentVariableCount: number; - managedEnvironmentId: string; - managedIdentityId?: string | null | undefined; - resourceGroupName: string; - resourcePrefix?: string | null | undefined; - status: ResourceHeartbeatStatus58; - backend: "azureContainerApps"; +/** + * Platform-specific permission configurations + */ +export type SyncReconcileRequestTargetReleaseOverridePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; }; -export const DataReason57 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason57 = ClosedEnum; - -export const StatusSeverity57 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity57 = ClosedEnum; - -export type DataCollectionIssue57 = { - message: string; - reason: DataReason57; - severity: StatusSeverity57; - source: string; +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncReconcileRequestTargetReleaseOverride = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncReconcileRequestTargetReleaseOverridePlatforms; }; -export const DataHealth57 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth57 = ClosedEnum; - -export const StatusLifecycle57 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle57 = ClosedEnum; +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncReconcileRequestTargetReleaseOverrideUnion = + | SyncReconcileRequestTargetReleaseOverride + | string; -export type ResourceHeartbeatStatus57 = { - collectionIssues: Array; - health: DataHealth57; - lifecycle: StatusLifecycle57; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +export type SyncReconcileRequestTargetReleaseManagement2 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + override: { + [k: string]: Array; + }; }; -export type DataGcpCloudBuild = { - buildConfigId: string; - environmentVariableCount: number; - location: string; - projectId: string; - serviceAccount?: string | null | undefined; - status: ResourceHeartbeatStatus57; - backend: "gcpCloudBuild"; +/** + * AWS-specific binding specification + */ +export type TargetReleaseExtendStateAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export const DataReason56 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason56 = ClosedEnum; - -export const StatusSeverity56 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity56 = ClosedEnum; - -export type DataCollectionIssue56 = { - message: string; - reason: DataReason56; - severity: StatusSeverity56; - source: string; +/** + * AWS-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseExtendAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export const DataHealth56 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth56 = ClosedEnum; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseExtendAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: TargetReleaseExtendStateAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseExtendAwStack | undefined; +}; -export const StatusLifecycle56 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", +/** + * IAM effect. Defaults to Allow. + */ +export const SyncReconcileRequestTargetReleaseExtendEffect = { + Allow: "Allow", + Deny: "Deny", } as const; -export type StatusLifecycle56 = ClosedEnum; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncReconcileRequestTargetReleaseExtendEffect = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseExtendEffect +>; -export type ResourceHeartbeatStatus56 = { - collectionIssues: Array; - health: DataHealth56; - lifecycle: StatusLifecycle56; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseExtendAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export type DataAwsCodeBuild = { - artifactsEncryptionDisabled?: boolean | null | undefined; - artifactsType?: string | null | undefined; - cloudWatchLogsStatus?: string | null | undefined; - computeType?: string | null | undefined; - created?: number | null | undefined; +/** + * AWS-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseExtendAw = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseExtendAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ description?: string | null | undefined; - encryptionKeyPresent: boolean; - environmentImage?: string | null | undefined; - environmentType?: string | null | undefined; - environmentVariableCount: number; - imagePullCredentialsType?: string | null | undefined; - lastModified?: number | null | undefined; - privilegedMode?: boolean | null | undefined; - projectArn?: string | null | undefined; - projectName: string; - queuedTimeoutInMinutes?: number | null | undefined; - s3LogsStatus?: string | null | undefined; - serviceRolePresent: boolean; - sourceType?: string | null | undefined; - status: ResourceHeartbeatStatus56; - timeoutInMinutes?: number | null | undefined; - backend: "awsCodeBuild"; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncReconcileRequestTargetReleaseExtendEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type SyncReconcileRequestDataUnion14 = - | DataAwsCodeBuild - | DataGcpCloudBuild - | DataAzureContainerApps2 - | DataKubernetesJob; - -export type DataBuild = { - data: - | DataAwsCodeBuild - | DataGcpCloudBuild - | DataAzureContainerApps2 - | DataKubernetesJob; - resourceType: "build"; +/** + * Azure-specific binding specification + */ +export type TargetReleaseExtendStateAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; }; -export const DataReason55 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason55 = ClosedEnum; - -export const StatusSeverity55 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity55 = ClosedEnum; - -export type DataCollectionIssue55 = { - message: string; - reason: DataReason55; - severity: StatusSeverity55; - source: string; +/** + * Azure-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseExtendAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; }; -export const DataHealth55 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth55 = ClosedEnum; - -export const StatusLifecycle55 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle55 = ClosedEnum; - -export type ResourceHeartbeatStatus55 = { - collectionIssues: Array; - health: DataHealth55; - lifecycle: StatusLifecycle55; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: TargetReleaseExtendStateAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseExtendAzureStack | undefined; }; -export type DataLocal11 = { - reachable: boolean; - registryUrl: string; - status: ResourceHeartbeatStatus55; - backend: "local"; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseExtendAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export const DataReason54 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason54 = ClosedEnum; - -export const StatusSeverity54 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity54 = ClosedEnum; - -export type DataCollectionIssue54 = { - message: string; - reason: DataReason54; - severity: StatusSeverity54; - source: string; +/** + * Azure-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseExtendAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export const DataHealth54 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth54 = ClosedEnum; +/** + * GCP IAM condition + */ +export type TargetReleaseExtendConditionStateResource = { + expression: string; + title: string; +}; -export const StatusLifecycle54 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle54 = ClosedEnum; +export type TargetReleaseExtendStateResourceConditionUnion = + | TargetReleaseExtendConditionStateResource + | any; -export type ResourceHeartbeatStatus54 = { - collectionIssues: Array; - health: DataHealth54; - lifecycle: StatusLifecycle54; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * GCP-specific binding specification + */ +export type TargetReleaseExtendStateGcpResource = { + condition?: + | TargetReleaseExtendConditionStateResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; }; -export type DataAzureContainerRegistry = { - adminUserEnabled: boolean; - anonymousPullEnabled: boolean; - creationDate?: string | null | undefined; - dataEndpointEnabled?: boolean | null | undefined; - dataEndpointHostNames: Array; - encryptionKeyIdentifierPresent: boolean; - encryptionKeyVaultUriPresent: boolean; - encryptionStatus?: string | null | undefined; - ipRuleCount: number; - location: string; - loginServer?: string | null | undefined; - managedTagCount: number; - name: string; - networkRuleBypassOptions: string; - networkRuleDefaultAction?: string | null | undefined; - policiesPresent: boolean; - policyCount: number; - privateEndpointConnectionCount: number; - provisioningState?: string | null | undefined; - publicNetworkAccess: string; - resourceGroup: string; - resourceId?: string | null | undefined; - skuName: string; - skuTier?: string | null | undefined; - status: ResourceHeartbeatStatus54; - type?: string | null | undefined; - zoneRedundancy: string; - backend: "azureContainerRegistry"; +/** + * GCP IAM condition + */ +export type TargetReleaseExtendConditionState = { + expression: string; + title: string; }; -export const DataReason53 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason53 = ClosedEnum; - -export const StatusSeverity53 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity53 = ClosedEnum; +export type TargetReleaseExtendStateConditionUnion = + | TargetReleaseExtendConditionState + | any; -export type DataCollectionIssue53 = { - message: string; - reason: DataReason53; - severity: StatusSeverity53; - source: string; +/** + * GCP-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseExtendGcpStack = { + condition?: TargetReleaseExtendConditionState | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; }; -export const DataHealth53 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth53 = ClosedEnum; - -export const StatusLifecycle53 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle53 = ClosedEnum; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseExtendGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: TargetReleaseExtendStateGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseExtendGcpStack | undefined; +}; -export type ResourceHeartbeatStatus53 = { - collectionIssues: Array; - health: DataHealth53; - lifecycle: StatusLifecycle53; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseExtendGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export type DataGcpArtifactRegistry = { - cleanupPolicyCount: number; - cleanupPolicyDryRun?: boolean | null | undefined; - createTime?: string | null | undefined; +/** + * GCP-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseExtendGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ description?: string | null | undefined; - format?: string | null | undefined; - iamBindingCount: number; - iamPolicyEtagPresent: boolean; - iamRoles: Array; - kmsKeyNamePresent: boolean; - labelCount: number; - location: string; - mode?: string | null | undefined; - name?: string | null | undefined; - projectId: string; - pullServiceAccountEmail?: string | null | undefined; - pushServiceAccountEmail?: string | null | undefined; - repositoryId: string; - satisfiesPzs?: boolean | null | undefined; - sizeBytes?: string | null | undefined; - status: ResourceHeartbeatStatus53; - updateTime?: string | null | undefined; - backend: "gcpArtifactRegistry"; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type Repository = { - createdAt: number; - encryptionType?: string | null | undefined; - imageTagMutability?: string | null | undefined; - kmsKeyPresent: boolean; - registryId: string; - repositoryArn: string; - repositoryName: string; - repositoryUri: string; - scanOnPush?: boolean | null | undefined; +/** + * Platform-specific permission configurations + */ +export type SyncReconcileRequestTargetReleaseExtendPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; }; -export const DataReason52 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason52 = ClosedEnum; +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncReconcileRequestTargetReleaseExtend = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncReconcileRequestTargetReleaseExtendPlatforms; +}; -export const StatusSeverity52 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity52 = ClosedEnum; +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncReconcileRequestTargetReleaseExtendUnion = + | SyncReconcileRequestTargetReleaseExtend + | string; -export type DataCollectionIssue52 = { - message: string; - reason: DataReason52; - severity: StatusSeverity52; - source: string; +export type SyncReconcileRequestTargetReleaseManagement1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { + [k: string]: Array; + }; }; -export const DataHealth52 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth52 = ClosedEnum; - -export const StatusLifecycle52 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle52 = ClosedEnum; +/** + * Management permissions configuration for stack management access + */ +export type SyncReconcileRequestTargetReleaseManagementUnion = + | SyncReconcileRequestTargetReleaseManagement1 + | SyncReconcileRequestTargetReleaseManagement2 + | SyncReconcileRequestTargetReleaseManagementEnum; -export type ResourceHeartbeatStatus52 = { - collectionIssues: Array; - health: DataHealth52; - lifecycle: StatusLifecycle52; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * AWS-specific binding specification + */ +export type TargetReleaseProfileStateAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type DataAwsEcr = { - pullRoleArn?: string | null | undefined; - pushRoleArn?: string | null | undefined; - region: string; - registryId: string; - registryUri: string; - repositories: Array; - repositoriesTruncated: boolean; - repositoryCount: number; - repositoryPrefix: string; - status: ResourceHeartbeatStatus52; - backend: "awsEcr"; +/** + * AWS-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseProfileAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type SyncReconcileRequestDataUnion13 = - | DataAwsEcr - | DataGcpArtifactRegistry - | DataAzureContainerRegistry - | DataLocal11; - -export type DataArtifactRegistry = { - data: - | DataAwsEcr - | DataGcpArtifactRegistry - | DataAzureContainerRegistry - | DataLocal11; - resourceType: "artifact-registry"; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: TargetReleaseProfileStateAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseProfileAwStack | undefined; }; -export const DataReason51 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason51 = ClosedEnum; - -export const StatusSeverity51 = { - Info: "info", - Warning: "warning", - Error: "error", +/** + * IAM effect. Defaults to Allow. + */ +export const SyncReconcileRequestTargetReleaseProfileEffect = { + Allow: "Allow", + Deny: "Deny", } as const; -export type StatusSeverity51 = ClosedEnum; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncReconcileRequestTargetReleaseProfileEffect = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseProfileEffect +>; -export type DataCollectionIssue51 = { - message: string; - reason: DataReason51; - severity: StatusSeverity51; - source: string; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseProfileAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export const DataHealth51 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth51 = ClosedEnum; - -export const StatusLifecycle51 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle51 = ClosedEnum; - -export type ResourceHeartbeatStatus51 = { - collectionIssues: Array; - health: DataHealth51; - lifecycle: StatusLifecycle51; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * AWS-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseProfileAw = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncReconcileRequestTargetReleaseProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type DataAzureManagedIdentity2 = { - ficName?: string | null | undefined; - roleAssignmentIds: Array; - roleDefinitionId?: string | null | undefined; - status: ResourceHeartbeatStatus51; - tenantId?: string | null | undefined; - uamiClientId?: string | null | undefined; - uamiPrincipalId?: string | null | undefined; - uamiResourceId?: string | null | undefined; - backend: "azureManagedIdentity"; +/** + * Azure-specific binding specification + */ +export type TargetReleaseProfileStateAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; }; -export const DataReason50 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason50 = ClosedEnum; - -export const StatusSeverity50 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity50 = ClosedEnum; - -export type DataCollectionIssue50 = { - message: string; - reason: DataReason50; - severity: StatusSeverity50; - source: string; +/** + * Azure-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseProfileAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; }; -export const DataHealth50 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth50 = ClosedEnum; - -export const StatusLifecycle50 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle50 = ClosedEnum; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: TargetReleaseProfileStateAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseProfileAzureStack | undefined; +}; -export type ResourceHeartbeatStatus50 = { - collectionIssues: Array; - health: DataHealth50; - lifecycle: StatusLifecycle50; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseProfileAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export type DataGcpServiceAccount2 = { - impersonationGranted: boolean; - roleBound: boolean; - serviceAccountEmail?: string | null | undefined; - serviceAccountUniqueId?: string | null | undefined; - status: ResourceHeartbeatStatus50; - backend: "gcpServiceAccount"; +/** + * Azure-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export const DataReason49 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason49 = ClosedEnum; +/** + * GCP IAM condition + */ +export type TargetReleaseProfileConditionStateResource = { + expression: string; + title: string; +}; -export const StatusSeverity49 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity49 = ClosedEnum; +export type TargetReleaseProfileStateResourceConditionUnion = + | TargetReleaseProfileConditionStateResource + | any; -export type DataCollectionIssue49 = { - message: string; - reason: DataReason49; - severity: StatusSeverity49; - source: string; +/** + * GCP-specific binding specification + */ +export type TargetReleaseProfileStateGcpResource = { + condition?: + | TargetReleaseProfileConditionStateResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; }; -export const DataHealth49 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth49 = ClosedEnum; +/** + * GCP IAM condition + */ +export type TargetReleaseProfileConditionState = { + expression: string; + title: string; +}; -export const StatusLifecycle49 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle49 = ClosedEnum; +export type TargetReleaseProfileStateConditionUnion = + | TargetReleaseProfileConditionState + | any; -export type ResourceHeartbeatStatus49 = { - collectionIssues: Array; - health: DataHealth49; - lifecycle: StatusLifecycle49; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * GCP-specific binding specification + */ +export type SyncReconcileRequestTargetReleaseProfileGcpStack = { + condition?: TargetReleaseProfileConditionState | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; }; -export type DataAwsIamRole2 = { - managementPermissionsApplied: boolean; - roleArn?: string | null | undefined; - roleName?: string | null | undefined; - status: ResourceHeartbeatStatus49; - backend: "awsIamRole"; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileRequestTargetReleaseProfileGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: TargetReleaseProfileStateGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncReconcileRequestTargetReleaseProfileGcpStack | undefined; }; -export type SyncReconcileRequestDataUnion12 = - | DataAwsIamRole2 - | DataGcpServiceAccount2 - | DataAzureManagedIdentity2; - -export type DataRemoteStackManagement = { - data: DataAwsIamRole2 | DataGcpServiceAccount2 | DataAzureManagedIdentity2; - resourceType: "remote-stack-management"; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileRequestTargetReleaseProfileGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export const DataReason48 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason48 = ClosedEnum; +/** + * GCP-specific platform permission configuration + */ +export type SyncReconcileRequestTargetReleaseProfileGcp = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileRequestTargetReleaseProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileRequestTargetReleaseProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; -export const StatusSeverity48 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity48 = ClosedEnum; +/** + * Platform-specific permission configurations + */ +export type SyncReconcileRequestTargetReleaseProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; -export type DataCollectionIssue48 = { - message: string; - reason: DataReason48; - severity: StatusSeverity48; - source: string; +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncReconcileRequestTargetReleaseProfile = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncReconcileRequestTargetReleaseProfilePlatforms; }; -export const DataHealth48 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth48 = ClosedEnum; +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncReconcileRequestTargetReleaseProfileUnion = + | SyncReconcileRequestTargetReleaseProfile + | string; -export const StatusLifecycle48 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle48 = ClosedEnum; - -export type ResourceHeartbeatStatus48 = { - collectionIssues: Array; - health: DataHealth48; - lifecycle: StatusLifecycle48; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * Combined permissions configuration that contains both profiles and management + */ +export type SyncReconcileRequestTargetReleasePermissions = { + /** + * Management permissions configuration for stack management access + */ + management?: + | SyncReconcileRequestTargetReleaseManagement1 + | SyncReconcileRequestTargetReleaseManagement2 + | SyncReconcileRequestTargetReleaseManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; }; -export type DataAzureVnet = { - applicationGatewaySubnetName?: string | null | undefined; - cidrBlock?: string | null | undefined; - isByoVnet: boolean; - lastByoVnetVerificationErrorCode?: string | null | undefined; - location?: string | null | undefined; - natGatewayId?: string | null | undefined; - nsgId?: string | null | undefined; - privateEndpointSubnetName?: string | null | undefined; - privateSubnetName?: string | null | undefined; - publicIpId?: string | null | undefined; - publicSubnetName?: string | null | undefined; - resourceGroup?: string | null | undefined; - status: ResourceHeartbeatStatus48; - vnetName?: string | null | undefined; - vnetResourceId?: string | null | undefined; - backend: "azureVnet"; +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type SyncReconcileRequestTargetReleaseConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; -export const DataReason47 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason47 = ClosedEnum; +/** + * Reference to a resource by its stable id and resource type. + */ +export type SyncReconcileRequestTargetReleaseDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; -export const StatusSeverity47 = { - Info: "info", - Warning: "warning", - Error: "error", +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const TargetReleaseStateLifecycle = { + Frozen: "frozen", + Live: "live", } as const; -export type StatusSeverity47 = ClosedEnum; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type TargetReleaseStateLifecycle = ClosedEnum< + typeof TargetReleaseStateLifecycle +>; -export type DataCollectionIssue47 = { - message: string; - reason: DataReason47; - severity: StatusSeverity47; - source: string; +export type SyncReconcileRequestTargetReleaseResources = { + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: SyncReconcileRequestTargetReleaseConfig; + /** + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list + */ + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: TargetReleaseStateLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; }; -export const DataHealth47 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", +/** + * Represents the target cloud platform. + */ +export const SyncReconcileRequestTargetReleaseSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", } as const; -export type DataHealth47 = ClosedEnum; +/** + * Represents the target cloud platform. + */ +export type SyncReconcileRequestTargetReleaseSupportedPlatform = ClosedEnum< + typeof SyncReconcileRequestTargetReleaseSupportedPlatform +>; -export const StatusLifecycle47 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle47 = ClosedEnum; +/** + * A bag of resources, unaware of any cloud. + */ +export type SyncReconcileRequestTargetReleaseStack = { + /** + * Unique identifier for the stack + */ + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: SyncReconcileRequestTargetReleasePermissions | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { [k: string]: SyncReconcileRequestTargetReleaseResources }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; +}; -export type ResourceHeartbeatStatus47 = { - collectionIssues: Array; - health: DataHealth47; - lifecycle: StatusLifecycle47; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +/** + * Release metadata + * + * @remarks + * + * Identifies a specific release version and includes the stack definition. + * The deployment engine uses this to track which release is currently deployed + * and which is the target. + */ +export type SyncReconcileRequestTargetRelease = { + /** + * Short description of the release + */ + description?: string | null | undefined; + /** + * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no + * + * @remarks + * Alien-assigned release — the platform resolves a release from `version`. + */ + releaseId?: string | null | undefined; + /** + * A bag of resources, unaware of any cloud. + */ + stack: SyncReconcileRequestTargetReleaseStack; + /** + * Version string (e.g., 2.1.0) + */ + version?: string | null | undefined; }; -export type DataGcpVpc = { - cidrBlock?: string | null | undefined; - cloudNatName?: string | null | undefined; - firewallName?: string | null | undefined; - isByoVpc: boolean; - networkName?: string | null | undefined; - networkSelfLink?: string | null | undefined; - region?: string | null | undefined; - routerName?: string | null | undefined; - status: ResourceHeartbeatStatus47; - subnetworkName?: string | null | undefined; - subnetworkSelfLink?: string | null | undefined; - backend: "gcpVpc"; +export type SyncReconcileRequestTargetReleaseUnion = + | SyncReconcileRequestTargetRelease + | any; + +/** + * Complete deployment state after step() execution + */ +export type SyncReconcileRequestState = { + currentRelease?: SyncReconcileRequestCurrentRelease | any | null | undefined; + environmentInfo?: + | SyncReconcileRequestEnvironmentInfoGcp + | SyncReconcileRequestEnvironmentInfoAzure + | SyncReconcileRequestEnvironmentInfoLocal + | SyncReconcileRequestEnvironmentInfoAws + | SyncReconcileRequestEnvironmentInfoTest + | any + | null + | undefined; + error?: SyncReconcileRequestError | any | null | undefined; + /** + * Represents the target cloud platform. + */ + platform: SyncReconcileRequestPlatform; + /** + * Protocol version for cross-actor compatibility. + * + * @remarks + * All actors (manager, push client, agent) check this before stepping. + * Mismatched versions produce a clear error instead of silent corruption. + * See docs/02-manager/10-deployment-protocol.md. + */ + protocolVersion: number; + /** + * Whether a retry has been requested for a failed deployment + * + * @remarks + * When true and status is a failed state, the deployment system will retry failed resources + */ + retryRequested?: boolean | undefined; + runtimeMetadata?: + | SyncReconcileRequestRuntimeMetadata + | any + | null + | undefined; + stackState?: SyncReconcileRequestStackState | any | null | undefined; + /** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ + status: StateStatus; + targetRelease?: SyncReconcileRequestTargetRelease | any | null | undefined; }; -export const DataReason46 = { +export const ResourceHeartbeatBackendEnum = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Local: "local", + Managed: "managed", + External: "external", + Test: "test", +} as const; +export type ResourceHeartbeatBackendEnum = ClosedEnum< + typeof ResourceHeartbeatBackendEnum +>; + +/** + * Represents the target cloud platform. + */ +export const ResourceHeartbeatControllerPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type ResourceHeartbeatControllerPlatform = ClosedEnum< + typeof ResourceHeartbeatControllerPlatform +>; + +export const DataReason65 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason46 = ClosedEnum; +export type DataReason65 = ClosedEnum; -export const StatusSeverity46 = { +export const StatusSeverity65 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity46 = ClosedEnum; +export type StatusSeverity65 = ClosedEnum; -export type DataCollectionIssue46 = { +export type DataCollectionIssue65 = { message: string; - reason: DataReason46; - severity: StatusSeverity46; + reason: DataReason65; + severity: StatusSeverity65; source: string; }; -export const DataHealth46 = { +export const DataHealth65 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth46 = ClosedEnum; +export type DataHealth65 = ClosedEnum; -export const StatusLifecycle46 = { +export const StatusLifecycle65 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -6729,75 +6879,77 @@ export const StatusLifecycle46 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle46 = ClosedEnum; +export type StatusLifecycle65 = ClosedEnum; -export type ResourceHeartbeatStatus46 = { - collectionIssues: Array; - health: DataHealth46; - lifecycle: StatusLifecycle46; +export type ResourceHeartbeatStatus65 = { + collectionIssues: Array; + health: DataHealth65; + lifecycle: StatusLifecycle65; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsVpc = { - availabilityZones: Array; - cidrBlock?: string | null | undefined; - internetGatewayId?: string | null | undefined; - isByoVpc: boolean; - natGatewayId?: string | null | undefined; - privateSubnetIds: Array; - publicSubnetIds: Array; - routeTableCount: number; - securityGroupId?: string | null | undefined; - status: ResourceHeartbeatStatus46; - vpcId?: string | null | undefined; - vpcState?: string | null | undefined; - backend: "awsVpc"; +export type SyncReconcileRequestData5 = { + createdAt?: string | null | undefined; + disableLocalAuth?: boolean | null | undefined; + location?: string | null | undefined; + metricId?: string | null | undefined; + minimumTlsVersion?: string | null | undefined; + name: string; + namespaceStatus?: string | null | undefined; + premiumMessagingPartitions?: number | null | undefined; + privateEndpointConnectionCount: number; + provisioningState?: string | null | undefined; + publicNetworkAccess?: string | null | undefined; + resourceGroup?: string | null | undefined; + resourceId?: string | null | undefined; + serviceBusEndpoint?: string | null | undefined; + skuCapacity?: number | null | undefined; + skuName?: string | null | undefined; + skuTier?: string | null | undefined; + status: ResourceHeartbeatStatus65; + updatedAt?: string | null | undefined; + zoneRedundant?: boolean | null | undefined; }; -export type SyncReconcileRequestDataUnion11 = - | DataAwsVpc - | DataGcpVpc - | DataAzureVnet; - -export type DataNetwork = { - data: DataAwsVpc | DataGcpVpc | DataAzureVnet; - resourceType: "network"; +export type DataAzureServiceBusNamespace = { + data: SyncReconcileRequestData5; + resourceType: "azure_service_bus_namespace"; }; -export const DataReason45 = { +export const DataReason64 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason45 = ClosedEnum; +export type DataReason64 = ClosedEnum; -export const StatusSeverity45 = { +export const StatusSeverity64 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity45 = ClosedEnum; +export type StatusSeverity64 = ClosedEnum; -export type DataCollectionIssue45 = { +export type DataCollectionIssue64 = { message: string; - reason: DataReason45; - severity: StatusSeverity45; + reason: DataReason64; + severity: StatusSeverity64; source: string; }; -export const DataHealth45 = { +export const DataHealth64 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth45 = ClosedEnum; +export type DataHealth64 = ClosedEnum; -export const StatusLifecycle45 = { +export const StatusLifecycle64 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -6809,56 +6961,97 @@ export const StatusLifecycle45 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle45 = ClosedEnum; +export type StatusLifecycle64 = ClosedEnum; -export type ResourceHeartbeatStatus45 = { - collectionIssues: Array; - health: DataHealth45; - lifecycle: StatusLifecycle45; +export type ResourceHeartbeatStatus64 = { + collectionIssues: Array; + health: DataHealth64; + lifecycle: StatusLifecycle64; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal10 = { - configured: boolean; - identity: string; - status: ResourceHeartbeatStatus45; - backend: "local"; +export type WorkloadProfile = { + maximumCount?: number | null | undefined; + minimumCount?: number | null | undefined; + name: string; + workloadProfileType: string; }; -export const DataReason44 = { +export type SyncReconcileRequestData4 = { + customDomainVerificationId?: string | null | undefined; + defaultDomain?: string | null | undefined; + eventStreamEndpoint?: string | null | undefined; + infrastructureResourceGroup?: string | null | undefined; + kind?: string | null | undefined; + location?: string | null | undefined; + name: string; + provisioningState?: string | null | undefined; + resourceGroup?: string | null | undefined; + resourceId?: string | null | undefined; + staticIp?: string | null | undefined; + status: ResourceHeartbeatStatus64; + workloadProfileCount: number; + workloadProfiles: Array; + zoneRedundant?: boolean | null | undefined; +}; + +export type DataAzureContainerAppsEnvironment = { + data: SyncReconcileRequestData4; + resourceType: "azure_container_apps_environment"; +}; + +export type PrimaryEndpoints = { + blob?: string | null | undefined; + dfs?: string | null | undefined; + file?: string | null | undefined; + queue?: string | null | undefined; + table?: string | null | undefined; + web?: string | null | undefined; +}; + +export type SecondaryEndpoints = { + blob?: string | null | undefined; + dfs?: string | null | undefined; + file?: string | null | undefined; + queue?: string | null | undefined; + table?: string | null | undefined; + web?: string | null | undefined; +}; + +export const DataReason63 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason44 = ClosedEnum; +export type DataReason63 = ClosedEnum; -export const StatusSeverity44 = { +export const StatusSeverity63 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity44 = ClosedEnum; +export type StatusSeverity63 = ClosedEnum; -export type DataCollectionIssue44 = { +export type DataCollectionIssue63 = { message: string; - reason: DataReason44; - severity: StatusSeverity44; + reason: DataReason63; + severity: StatusSeverity63; source: string; }; -export const DataHealth44 = { +export const DataHealth63 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth44 = ClosedEnum; +export type DataHealth63 = ClosedEnum; -export const StatusLifecycle44 = { +export const StatusLifecycle63 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -6870,69 +7063,80 @@ export const StatusLifecycle44 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle44 = ClosedEnum; +export type StatusLifecycle63 = ClosedEnum; -export type ResourceHeartbeatStatus44 = { - collectionIssues: Array; - health: DataHealth44; - lifecycle: StatusLifecycle44; +export type ResourceHeartbeatStatus63 = { + collectionIssues: Array; + health: DataHealth63; + lifecycle: StatusLifecycle63; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzureManagedIdentity1 = { - clientId?: string | null | undefined; - customRoleDefinitionCount: number; - customRoleDefinitionIds: Array; - isolationScope?: string | null | undefined; - location: string; - managedTagCount: number; +export type SyncReconcileRequestData3 = { + allowBlobPublicAccess?: boolean | null | undefined; + allowSharedKeyAccess?: boolean | null | undefined; + encryptionKeySource?: string | null | undefined; + kind?: string | null | undefined; + location?: string | null | undefined; + minimumTlsVersion?: string | null | undefined; name: string; - principalId?: string | null | undefined; - resourceGroup: string; - resourceId: string; - roleAssignmentCount: number; - roleAssignmentIds: Array; - stackPermissionsApplied: boolean; - status: ResourceHeartbeatStatus44; - tenantId?: string | null | undefined; - type?: string | null | undefined; - backend: "azureManagedIdentity"; + networkBypass?: string | null | undefined; + networkDefaultAction?: string | null | undefined; + networkIpRuleCount?: number | null | undefined; + networkResourceAccessRuleCount?: number | null | undefined; + networkVirtualNetworkRuleCount?: number | null | undefined; + primaryEndpoints: PrimaryEndpoints; + provisioningState?: string | null | undefined; + publicNetworkAccess?: string | null | undefined; + requireInfrastructureEncryption?: boolean | null | undefined; + resourceGroup?: string | null | undefined; + resourceId?: string | null | undefined; + secondaryEndpoints: SecondaryEndpoints; + skuName?: string | null | undefined; + skuTier?: string | null | undefined; + status: ResourceHeartbeatStatus63; + supportsHttpsTrafficOnly?: boolean | null | undefined; }; -export const DataReason43 = { +export type DataAzureStorageAccount = { + data: SyncReconcileRequestData3; + resourceType: "azure_storage_account"; +}; + +export const DataReason62 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason43 = ClosedEnum; +export type DataReason62 = ClosedEnum; -export const StatusSeverity43 = { +export const StatusSeverity62 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity43 = ClosedEnum; +export type StatusSeverity62 = ClosedEnum; -export type DataCollectionIssue43 = { +export type DataCollectionIssue62 = { message: string; - reason: DataReason43; - severity: StatusSeverity43; + reason: DataReason62; + severity: StatusSeverity62; source: string; }; -export const DataHealth43 = { +export const DataHealth62 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth43 = ClosedEnum; +export type DataHealth62 = ClosedEnum; -export const StatusLifecycle43 = { +export const StatusLifecycle62 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -6944,67 +7148,63 @@ export const StatusLifecycle43 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle43 = ClosedEnum; +export type StatusLifecycle62 = ClosedEnum; -export type ResourceHeartbeatStatus43 = { - collectionIssues: Array; - health: DataHealth43; - lifecycle: StatusLifecycle43; +export type ResourceHeartbeatStatus62 = { + collectionIssues: Array; + health: DataHealth62; + lifecycle: StatusLifecycle62; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcpServiceAccount1 = { - description?: string | null | undefined; - disabled?: boolean | null | undefined; - displayName?: string | null | undefined; - email: string; - etag?: string | null | undefined; - name?: string | null | undefined; - oauth2ClientId?: string | null | undefined; - projectBindingCount: number; - projectId?: string | null | undefined; - projectRoles: Array; - serviceAccountBindingCount: number; - serviceAccountRoles: Array; - status: ResourceHeartbeatStatus43; - uniqueId?: string | null | undefined; - backend: "gcpServiceAccount"; +export type SyncReconcileRequestData2 = { + location?: string | null | undefined; + managedTags: { [k: string]: string }; + name: string; + provisioningState?: string | null | undefined; + resourceId?: string | null | undefined; + status: ResourceHeartbeatStatus62; }; -export const DataReason42 = { +export type DataAzureResourceGroup = { + data: SyncReconcileRequestData2; + resourceType: "azure_resource_group"; +}; + +export const DataReason61 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason42 = ClosedEnum; +export type DataReason61 = ClosedEnum; -export const StatusSeverity42 = { +export const StatusSeverity61 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity42 = ClosedEnum; +export type StatusSeverity61 = ClosedEnum; -export type DataCollectionIssue42 = { +export type DataCollectionIssue61 = { message: string; - reason: DataReason42; - severity: StatusSeverity42; + reason: DataReason61; + severity: StatusSeverity61; source: string; }; -export const DataHealth42 = { +export const DataHealth61 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth42 = ClosedEnum; +export type DataHealth61 = ClosedEnum; -export const StatusLifecycle42 = { +export const StatusLifecycle61 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7016,88 +7216,60 @@ export const StatusLifecycle42 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle42 = ClosedEnum; +export type StatusLifecycle61 = ClosedEnum; -export type ResourceHeartbeatStatus42 = { - collectionIssues: Array; - health: DataHealth42; - lifecycle: StatusLifecycle42; +export type ResourceHeartbeatStatus61 = { + collectionIssues: Array; + health: DataHealth61; + lifecycle: StatusLifecycle61; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsIamRole1 = { - assumeRolePolicyPresent: boolean; - attachedPolicyCount: number; - attachedPolicyNames: Array; - createDate: string; - description?: string | null | undefined; - inlinePolicyCount: number; - inlinePolicyNames: Array; - lastUsedDate?: string | null | undefined; - lastUsedRegion?: string | null | undefined; - managedTagCount: number; - maxSessionDuration?: number | null | undefined; - path: string; - permissionsBoundaryArn?: string | null | undefined; - permissionsBoundaryType?: string | null | undefined; - roleArn: string; - roleId: string; - roleName: string; - stackPermissionsApplied: boolean; - status: ResourceHeartbeatStatus42; - tagCount: number; - backend: "awsIamRole"; -}; - -export type SyncReconcileRequestDataUnion10 = - | DataAwsIamRole1 - | DataGcpServiceAccount1 - | DataAzureManagedIdentity1 - | DataLocal10; - -export type DataServiceAccount = { - data: - | DataAwsIamRole1 - | DataGcpServiceAccount1 - | DataAzureManagedIdentity1 - | DataLocal10; - resourceType: "service-account"; +export type DataAzureResourceProvider = { + namespace: string; + providerId?: string | null | undefined; + registered: boolean; + registrationPolicy?: string | null | undefined; + registrationState?: string | null | undefined; + resourceTypeCount: number; + status: ResourceHeartbeatStatus61; + backend: "azureResourceProvider"; }; -export const DataReason41 = { +export const DataReason60 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason41 = ClosedEnum; +export type DataReason60 = ClosedEnum; -export const StatusSeverity41 = { +export const StatusSeverity60 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity41 = ClosedEnum; +export type StatusSeverity60 = ClosedEnum; -export type DataCollectionIssue41 = { +export type DataCollectionIssue60 = { message: string; - reason: DataReason41; - severity: StatusSeverity41; + reason: DataReason60; + severity: StatusSeverity60; source: string; }; -export const DataHealth41 = { +export const DataHealth60 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth41 = ClosedEnum; +export type DataHealth60 = ClosedEnum; -export const StatusLifecycle41 = { +export const StatusLifecycle60 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7109,60 +7281,102 @@ export const StatusLifecycle41 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle41 = ClosedEnum; +export type StatusLifecycle60 = ClosedEnum; -export type ResourceHeartbeatStatus41 = { - collectionIssues: Array; - health: DataHealth41; - lifecycle: StatusLifecycle41; +export type ResourceHeartbeatStatus60 = { + collectionIssues: Array; + health: DataHealth60; + lifecycle: StatusLifecycle60; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal9 = { - isDirectory?: boolean | null | undefined; - modifiedAt?: Date | null | undefined; - path: string; - pathExists: boolean; - readonly?: boolean | null | undefined; - secretMetadataListed: boolean; - status: ResourceHeartbeatStatus41; - backend: "local"; +export type DataGcpServiceUsage = { + enabled: boolean; + lastOperationName?: string | null | undefined; + projectId: string; + serviceName: string; + serviceResourceName?: string | null | undefined; + state?: string | null | undefined; + status: ResourceHeartbeatStatus60; + title?: string | null | undefined; + backend: "gcpServiceUsage"; }; -export const DataReason40 = { +export type SyncReconcileRequestDataUnion15 = + | DataGcpServiceUsage + | DataAzureResourceProvider; + +export type DataServiceActivation = { + data: DataGcpServiceUsage | DataAzureResourceProvider; + resourceType: "service_activation"; +}; + +export type InvolvedObject10 = { + apiVersion?: string | null | undefined; + fieldPath?: string | null | undefined; + kind?: string | null | undefined; + name?: string | null | undefined; + namespace?: string | null | undefined; + resourceVersion?: string | null | undefined; + uid?: string | null | undefined; +}; + +export type InvolvedObjectUnion10 = InvolvedObject10 | any; + +export type SyncReconcileRequestSource10 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion10 = SyncReconcileRequestSource10 | any; + +export type SyncReconcileRequestEvent13 = { + count?: number | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject10 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource10 | any | null | undefined; + type?: string | null | undefined; +}; + +export const DataReason59 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason40 = ClosedEnum; +export type DataReason59 = ClosedEnum; -export const StatusSeverity40 = { +export const StatusSeverity59 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity40 = ClosedEnum; +export type StatusSeverity59 = ClosedEnum; -export type DataCollectionIssue40 = { +export type DataCollectionIssue59 = { message: string; - reason: DataReason40; - severity: StatusSeverity40; + reason: DataReason59; + severity: StatusSeverity59; source: string; }; -export const DataHealth40 = { +export const DataHealth59 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth40 = ClosedEnum; +export type DataHealth59 = ClosedEnum; -export const StatusLifecycle40 = { +export const StatusLifecycle59 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7174,57 +7388,64 @@ export const StatusLifecycle40 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle40 = ClosedEnum; +export type StatusLifecycle59 = ClosedEnum; -export type ResourceHeartbeatStatus40 = { - collectionIssues: Array; - health: DataHealth40; - lifecycle: StatusLifecycle40; +export type ResourceHeartbeatStatus59 = { + collectionIssues: Array; + health: DataHealth59; + lifecycle: StatusLifecycle59; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataKubernetesSecret = { +export type DataKubernetesJob = { + active?: number | null | undefined; + completionTime?: Date | null | undefined; + conditionCount: number; + events: Array; + failed?: number | null | undefined; + imageDigest?: string | null | undefined; + jobName: string; namespace: string; - prefix: string; - secretMetadataListed: boolean; - status: ResourceHeartbeatStatus40; - backend: "kubernetesSecret"; + startTime?: Date | null | undefined; + status: ResourceHeartbeatStatus59; + succeeded?: number | null | undefined; + backend: "kubernetesJob"; }; -export const DataReason39 = { +export const DataReason58 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason39 = ClosedEnum; +export type DataReason58 = ClosedEnum; -export const StatusSeverity39 = { +export const StatusSeverity58 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity39 = ClosedEnum; +export type StatusSeverity58 = ClosedEnum; -export type DataCollectionIssue39 = { +export type DataCollectionIssue58 = { message: string; - reason: DataReason39; - severity: StatusSeverity39; + reason: DataReason58; + severity: StatusSeverity58; source: string; }; -export const DataHealth39 = { +export const DataHealth58 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth39 = ClosedEnum; +export type DataHealth58 = ClosedEnum; -export const StatusLifecycle39 = { +export const StatusLifecycle58 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7236,70 +7457,59 @@ export const StatusLifecycle39 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle39 = ClosedEnum; +export type StatusLifecycle58 = ClosedEnum; -export type ResourceHeartbeatStatus39 = { - collectionIssues: Array; - health: DataHealth39; - lifecycle: StatusLifecycle39; +export type ResourceHeartbeatStatus58 = { + collectionIssues: Array; + health: DataHealth58; + lifecycle: StatusLifecycle58; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzureKeyVault = { - accessPolicyCount: number; - location?: string | null | undefined; - name: string; - privateEndpointConnectionCount: number; - provisioningState?: string | null | undefined; - publicNetworkAccess: string; - purgeProtectionEnabled?: boolean | null | undefined; - rbacAuthorizationEnabled: boolean; - resourceGroup?: string | null | undefined; - resourceId?: string | null | undefined; - secretMetadataListed: boolean; - skuFamily?: string | null | undefined; - skuName?: string | null | undefined; - softDeleteEnabled: boolean; - softDeleteRetentionDays: number; - status: ResourceHeartbeatStatus39; - vaultUri?: string | null | undefined; - backend: "azureKeyVault"; +export type DataAzureContainerApps2 = { + environmentVariableCount: number; + managedEnvironmentId: string; + managedIdentityId?: string | null | undefined; + resourceGroupName: string; + resourcePrefix?: string | null | undefined; + status: ResourceHeartbeatStatus58; + backend: "azureContainerApps"; }; -export const DataReason38 = { +export const DataReason57 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason38 = ClosedEnum; +export type DataReason57 = ClosedEnum; -export const StatusSeverity38 = { +export const StatusSeverity57 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity38 = ClosedEnum; +export type StatusSeverity57 = ClosedEnum; -export type DataCollectionIssue38 = { +export type DataCollectionIssue57 = { message: string; - reason: DataReason38; - severity: StatusSeverity38; + reason: DataReason57; + severity: StatusSeverity57; source: string; }; -export const DataHealth38 = { +export const DataHealth57 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth38 = ClosedEnum; +export type DataHealth57 = ClosedEnum; -export const StatusLifecycle38 = { +export const StatusLifecycle57 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7311,58 +7521,59 @@ export const StatusLifecycle38 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle38 = ClosedEnum; +export type StatusLifecycle57 = ClosedEnum; -export type ResourceHeartbeatStatus38 = { - collectionIssues: Array; - health: DataHealth38; - lifecycle: StatusLifecycle38; +export type ResourceHeartbeatStatus57 = { + collectionIssues: Array; + health: DataHealth57; + lifecycle: StatusLifecycle57; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcpSecretManager = { +export type DataGcpCloudBuild = { + buildConfigId: string; + environmentVariableCount: number; location: string; - prefix: string; projectId: string; - secretMetadataListed: boolean; - status: ResourceHeartbeatStatus38; - backend: "gcpSecretManager"; + serviceAccount?: string | null | undefined; + status: ResourceHeartbeatStatus57; + backend: "gcpCloudBuild"; }; -export const DataReason37 = { +export const DataReason56 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason37 = ClosedEnum; +export type DataReason56 = ClosedEnum; -export const StatusSeverity37 = { +export const StatusSeverity56 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity37 = ClosedEnum; +export type StatusSeverity56 = ClosedEnum; -export type DataCollectionIssue37 = { +export type DataCollectionIssue56 = { message: string; - reason: DataReason37; - severity: StatusSeverity37; + reason: DataReason56; + severity: StatusSeverity56; source: string; }; -export const DataHealth37 = { +export const DataHealth56 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth37 = ClosedEnum; +export type DataHealth56 = ClosedEnum; -export const StatusLifecycle37 = { +export const StatusLifecycle56 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7374,83 +7585,89 @@ export const StatusLifecycle37 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle37 = ClosedEnum; +export type StatusLifecycle56 = ClosedEnum; -export type ResourceHeartbeatStatus37 = { - collectionIssues: Array; - health: DataHealth37; - lifecycle: StatusLifecycle37; +export type ResourceHeartbeatStatus56 = { + collectionIssues: Array; + health: DataHealth56; + lifecycle: StatusLifecycle56; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsParameterStore = { - accountId: string; - hasMoreParameters?: boolean | null | undefined; - latestModifiedAt?: Date | null | undefined; - parameterMetadataSampled: boolean; - prefix: string; - region: string; - sampledAdvancedTierCount?: number | null | undefined; - sampledKmsKeyMetadataPresentCount?: number | null | undefined; - sampledParameterCount?: number | null | undefined; - sampledSecureStringCount?: number | null | undefined; - sampledStringCount?: number | null | undefined; - sampledStringListCount?: number | null | undefined; - status: ResourceHeartbeatStatus37; - backend: "awsParameterStore"; +export type DataAwsCodeBuild = { + artifactsEncryptionDisabled?: boolean | null | undefined; + artifactsType?: string | null | undefined; + cloudWatchLogsStatus?: string | null | undefined; + computeType?: string | null | undefined; + created?: number | null | undefined; + description?: string | null | undefined; + encryptionKeyPresent: boolean; + environmentImage?: string | null | undefined; + environmentType?: string | null | undefined; + environmentVariableCount: number; + imagePullCredentialsType?: string | null | undefined; + lastModified?: number | null | undefined; + privilegedMode?: boolean | null | undefined; + projectArn?: string | null | undefined; + projectName: string; + queuedTimeoutInMinutes?: number | null | undefined; + s3LogsStatus?: string | null | undefined; + serviceRolePresent: boolean; + sourceType?: string | null | undefined; + status: ResourceHeartbeatStatus56; + timeoutInMinutes?: number | null | undefined; + backend: "awsCodeBuild"; }; -export type SyncReconcileRequestDataUnion9 = - | DataAwsParameterStore - | DataGcpSecretManager - | DataAzureKeyVault - | DataKubernetesSecret - | DataLocal9; +export type SyncReconcileRequestDataUnion14 = + | DataAwsCodeBuild + | DataGcpCloudBuild + | DataAzureContainerApps2 + | DataKubernetesJob; -export type DataVault = { +export type DataBuild = { data: - | DataAwsParameterStore - | DataGcpSecretManager - | DataAzureKeyVault - | DataKubernetesSecret - | DataLocal9; - resourceType: "vault"; -}; - -export const DataReason36 = { - Forbidden: "forbidden", + | DataAwsCodeBuild + | DataGcpCloudBuild + | DataAzureContainerApps2 + | DataKubernetesJob; + resourceType: "build"; +}; + +export const DataReason55 = { + Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason36 = ClosedEnum; +export type DataReason55 = ClosedEnum; -export const StatusSeverity36 = { +export const StatusSeverity55 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity36 = ClosedEnum; +export type StatusSeverity55 = ClosedEnum; -export type DataCollectionIssue36 = { +export type DataCollectionIssue55 = { message: string; - reason: DataReason36; - severity: StatusSeverity36; + reason: DataReason55; + severity: StatusSeverity55; source: string; }; -export const DataHealth36 = { +export const DataHealth55 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth36 = ClosedEnum; +export type DataHealth55 = ClosedEnum; -export const StatusLifecycle36 = { +export const StatusLifecycle55 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7462,58 +7679,56 @@ export const StatusLifecycle36 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle36 = ClosedEnum; +export type StatusLifecycle55 = ClosedEnum; -export type ResourceHeartbeatStatus36 = { - collectionIssues: Array; - health: DataHealth36; - lifecycle: StatusLifecycle36; +export type ResourceHeartbeatStatus55 = { + collectionIssues: Array; + health: DataHealth55; + lifecycle: StatusLifecycle55; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal8 = { - name: string; - port?: number | null | undefined; - processRunning: boolean; - status: ResourceHeartbeatStatus36; - version: string; +export type DataLocal11 = { + reachable: boolean; + registryUrl: string; + status: ResourceHeartbeatStatus55; backend: "local"; }; -export const DataReason35 = { +export const DataReason54 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason35 = ClosedEnum; +export type DataReason54 = ClosedEnum; -export const StatusSeverity35 = { +export const StatusSeverity54 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity35 = ClosedEnum; +export type StatusSeverity54 = ClosedEnum; -export type DataCollectionIssue35 = { +export type DataCollectionIssue54 = { message: string; - reason: DataReason35; - severity: StatusSeverity35; + reason: DataReason54; + severity: StatusSeverity54; source: string; }; -export const DataHealth35 = { +export const DataHealth54 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth35 = ClosedEnum; +export type DataHealth54 = ClosedEnum; -export const StatusLifecycle35 = { +export const StatusLifecycle54 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7525,57 +7740,80 @@ export const StatusLifecycle35 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle35 = ClosedEnum; +export type StatusLifecycle54 = ClosedEnum; -export type ResourceHeartbeatStatus35 = { - collectionIssues: Array; - health: DataHealth35; - lifecycle: StatusLifecycle35; +export type ResourceHeartbeatStatus54 = { + collectionIssues: Array; + health: DataHealth54; + lifecycle: StatusLifecycle54; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataFlexibleServer = { - serverName: string; - state?: string | null | undefined; - status: ResourceHeartbeatStatus35; - version?: string | null | undefined; - backend: "flexibleServer"; +export type DataAzureContainerRegistry = { + adminUserEnabled: boolean; + anonymousPullEnabled: boolean; + creationDate?: string | null | undefined; + dataEndpointEnabled?: boolean | null | undefined; + dataEndpointHostNames: Array; + encryptionKeyIdentifierPresent: boolean; + encryptionKeyVaultUriPresent: boolean; + encryptionStatus?: string | null | undefined; + ipRuleCount: number; + location: string; + loginServer?: string | null | undefined; + managedTagCount: number; + name: string; + networkRuleBypassOptions: string; + networkRuleDefaultAction?: string | null | undefined; + policiesPresent: boolean; + policyCount: number; + privateEndpointConnectionCount: number; + provisioningState?: string | null | undefined; + publicNetworkAccess: string; + resourceGroup: string; + resourceId?: string | null | undefined; + skuName: string; + skuTier?: string | null | undefined; + status: ResourceHeartbeatStatus54; + type?: string | null | undefined; + zoneRedundancy: string; + backend: "azureContainerRegistry"; }; -export const DataReason34 = { +export const DataReason53 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason34 = ClosedEnum; +export type DataReason53 = ClosedEnum; -export const StatusSeverity34 = { +export const StatusSeverity53 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity34 = ClosedEnum; +export type StatusSeverity53 = ClosedEnum; -export type DataCollectionIssue34 = { +export type DataCollectionIssue53 = { message: string; - reason: DataReason34; - severity: StatusSeverity34; + reason: DataReason53; + severity: StatusSeverity53; source: string; }; -export const DataHealth34 = { +export const DataHealth53 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth34 = ClosedEnum; +export type DataHealth53 = ClosedEnum; -export const StatusLifecycle34 = { +export const StatusLifecycle53 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7587,57 +7825,86 @@ export const StatusLifecycle34 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle34 = ClosedEnum; +export type StatusLifecycle53 = ClosedEnum; -export type ResourceHeartbeatStatus34 = { - collectionIssues: Array; - health: DataHealth34; - lifecycle: StatusLifecycle34; +export type ResourceHeartbeatStatus53 = { + collectionIssues: Array; + health: DataHealth53; + lifecycle: StatusLifecycle53; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataCloudSQL = { - databaseVersion?: string | null | undefined; - instanceName: string; - state?: string | null | undefined; - status: ResourceHeartbeatStatus34; - backend: "cloudSql"; +export type DataGcpArtifactRegistry = { + cleanupPolicyCount: number; + cleanupPolicyDryRun?: boolean | null | undefined; + createTime?: string | null | undefined; + description?: string | null | undefined; + format?: string | null | undefined; + iamBindingCount: number; + iamPolicyEtagPresent: boolean; + iamRoles: Array; + kmsKeyNamePresent: boolean; + labelCount: number; + location: string; + mode?: string | null | undefined; + name?: string | null | undefined; + projectId: string; + pullServiceAccountEmail?: string | null | undefined; + pushServiceAccountEmail?: string | null | undefined; + repositoryId: string; + satisfiesPzs?: boolean | null | undefined; + sizeBytes?: string | null | undefined; + status: ResourceHeartbeatStatus53; + updateTime?: string | null | undefined; + backend: "gcpArtifactRegistry"; }; -export const DataReason33 = { +export type Repository = { + createdAt: number; + encryptionType?: string | null | undefined; + imageTagMutability?: string | null | undefined; + kmsKeyPresent: boolean; + registryId: string; + repositoryArn: string; + repositoryName: string; + repositoryUri: string; + scanOnPush?: boolean | null | undefined; +}; + +export const DataReason52 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason33 = ClosedEnum; +export type DataReason52 = ClosedEnum; -export const StatusSeverity33 = { +export const StatusSeverity52 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity33 = ClosedEnum; +export type StatusSeverity52 = ClosedEnum; -export type DataCollectionIssue33 = { +export type DataCollectionIssue52 = { message: string; - reason: DataReason33; - severity: StatusSeverity33; + reason: DataReason52; + severity: StatusSeverity52; source: string; }; -export const DataHealth33 = { +export const DataHealth52 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth33 = ClosedEnum; +export type DataHealth52 = ClosedEnum; -export const StatusLifecycle33 = { +export const StatusLifecycle52 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7649,79 +7916,78 @@ export const StatusLifecycle33 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle33 = ClosedEnum; +export type StatusLifecycle52 = ClosedEnum; -export type ResourceHeartbeatStatus33 = { - collectionIssues: Array; - health: DataHealth33; - lifecycle: StatusLifecycle33; +export type ResourceHeartbeatStatus52 = { + collectionIssues: Array; + health: DataHealth52; + lifecycle: StatusLifecycle52; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAurora = { - clusterIdentifier: string; - endpoint?: string | null | undefined; - engineVersion?: string | null | undefined; - /** - * True when a `minCapacity: 0` instance has not reached 0 ACU over the observation - * - * @remarks - * window — it is silently paying always-on prices (auto-pause verification). - */ - neverPauses: boolean; - /** - * Latest sampled `ServerlessDatabaseCapacity` (ACU). - */ - serverlessCapacity?: number | null | undefined; - status: ResourceHeartbeatStatus33; - backend: "aurora"; +export type DataAwsEcr = { + pullRoleArn?: string | null | undefined; + pushRoleArn?: string | null | undefined; + region: string; + registryId: string; + registryUri: string; + repositories: Array; + repositoriesTruncated: boolean; + repositoryCount: number; + repositoryPrefix: string; + status: ResourceHeartbeatStatus52; + backend: "awsEcr"; }; -export type SyncReconcileRequestDataUnion8 = - | DataAurora - | DataCloudSQL - | DataFlexibleServer - | DataLocal8; +export type SyncReconcileRequestDataUnion13 = + | DataAwsEcr + | DataGcpArtifactRegistry + | DataAzureContainerRegistry + | DataLocal11; -export type DataPostgres = { - data: DataAurora | DataCloudSQL | DataFlexibleServer | DataLocal8; - resourceType: "postgres"; +export type DataArtifactRegistry = { + data: + | DataAwsEcr + | DataGcpArtifactRegistry + | DataAzureContainerRegistry + | DataLocal11; + resourceType: "artifact-registry"; }; -export const DataReason32 = { +export const DataReason51 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason32 = ClosedEnum; +export type DataReason51 = ClosedEnum; -export const StatusSeverity32 = { +export const StatusSeverity51 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity32 = ClosedEnum; +export type StatusSeverity51 = ClosedEnum; -export type DataCollectionIssue32 = { +export type DataCollectionIssue51 = { message: string; - reason: DataReason32; - severity: StatusSeverity32; + reason: DataReason51; + severity: StatusSeverity51; source: string; }; -export const DataHealth32 = { +export const DataHealth51 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth32 = ClosedEnum; +export type DataHealth51 = ClosedEnum; -export const StatusLifecycle32 = { +export const StatusLifecycle51 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7733,59 +7999,61 @@ export const StatusLifecycle32 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle32 = ClosedEnum; +export type StatusLifecycle51 = ClosedEnum; -export type ResourceHeartbeatStatus32 = { - collectionIssues: Array; - health: DataHealth32; - lifecycle: StatusLifecycle32; +export type ResourceHeartbeatStatus51 = { + collectionIssues: Array; + health: DataHealth51; + lifecycle: StatusLifecycle51; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal7 = { - cloudMetadataSupported: boolean; - isDirectory?: boolean | null | undefined; - name: string; - path: string; - pathExists: boolean; - status: ResourceHeartbeatStatus32; - backend: "local"; +export type DataAzureManagedIdentity2 = { + ficName?: string | null | undefined; + roleAssignmentIds: Array; + roleDefinitionId?: string | null | undefined; + status: ResourceHeartbeatStatus51; + tenantId?: string | null | undefined; + uamiClientId?: string | null | undefined; + uamiPrincipalId?: string | null | undefined; + uamiResourceId?: string | null | undefined; + backend: "azureManagedIdentity"; }; -export const DataReason31 = { +export const DataReason50 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason31 = ClosedEnum; +export type DataReason50 = ClosedEnum; -export const StatusSeverity31 = { +export const StatusSeverity50 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity31 = ClosedEnum; +export type StatusSeverity50 = ClosedEnum; -export type DataCollectionIssue31 = { +export type DataCollectionIssue50 = { message: string; - reason: DataReason31; - severity: StatusSeverity31; + reason: DataReason50; + severity: StatusSeverity50; source: string; }; -export const DataHealth31 = { +export const DataHealth50 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth31 = ClosedEnum; +export type DataHealth50 = ClosedEnum; -export const StatusLifecycle31 = { +export const StatusLifecycle50 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7797,65 +8065,58 @@ export const StatusLifecycle31 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle31 = ClosedEnum; +export type StatusLifecycle50 = ClosedEnum; -export type ResourceHeartbeatStatus31 = { - collectionIssues: Array; - health: DataHealth31; - lifecycle: StatusLifecycle31; +export type ResourceHeartbeatStatus50 = { + collectionIssues: Array; + health: DataHealth50; + lifecycle: StatusLifecycle50; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzureTable = { - endpoint?: string | null | undefined; - resourceGroup?: string | null | undefined; - signedIdentifierCount?: number | null | undefined; - status: ResourceHeartbeatStatus31; - storageAccountKind?: string | null | undefined; - storageAccountLocation?: string | null | undefined; - storageAccountName: string; - storageAccountPrimaryStatus?: string | null | undefined; - storageAccountProvisioningState?: string | null | undefined; - storageAccountResourceId?: string | null | undefined; - tableExists: boolean; - tableName: string; - backend: "azureTable"; +export type DataGcpServiceAccount2 = { + impersonationGranted: boolean; + roleBound: boolean; + serviceAccountEmail?: string | null | undefined; + serviceAccountUniqueId?: string | null | undefined; + status: ResourceHeartbeatStatus50; + backend: "gcpServiceAccount"; }; -export const DataReason30 = { +export const DataReason49 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason30 = ClosedEnum; +export type DataReason49 = ClosedEnum; -export const StatusSeverity30 = { +export const StatusSeverity49 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity30 = ClosedEnum; +export type StatusSeverity49 = ClosedEnum; -export type DataCollectionIssue30 = { +export type DataCollectionIssue49 = { message: string; - reason: DataReason30; - severity: StatusSeverity30; + reason: DataReason49; + severity: StatusSeverity49; source: string; }; -export const DataHealth30 = { +export const DataHealth49 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth30 = ClosedEnum; +export type DataHealth49 = ClosedEnum; -export const StatusLifecycle30 = { +export const StatusLifecycle49 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7867,76 +8128,67 @@ export const StatusLifecycle30 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle30 = ClosedEnum; +export type StatusLifecycle49 = ClosedEnum; -export type ResourceHeartbeatStatus30 = { - collectionIssues: Array; - health: DataHealth30; - lifecycle: StatusLifecycle30; +export type ResourceHeartbeatStatus49 = { + collectionIssues: Array; + health: DataHealth49; + lifecycle: StatusLifecycle49; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcpFirestore = { - appEngineIntegrationMode?: string | null | undefined; - cmekEnabled: boolean; - concurrencyMode?: string | null | undefined; - createTime?: string | null | undefined; - databaseEdition?: string | null | undefined; - databaseName: string; - databaseType?: string | null | undefined; - deleteProtectionState?: string | null | undefined; - deleteTime?: string | null | undefined; - earliestVersionTime?: string | null | undefined; - endpoint?: string | null | undefined; - locationId?: string | null | undefined; - pointInTimeRecoveryEnablement?: string | null | undefined; - projectId?: string | null | undefined; - sourceInfoPresent: boolean; - status: ResourceHeartbeatStatus30; - updateTime?: string | null | undefined; - versionRetentionPeriod?: string | null | undefined; - backend: "gcpFirestore"; +export type DataAwsIamRole2 = { + managementPermissionsApplied: boolean; + roleArn?: string | null | undefined; + roleName?: string | null | undefined; + status: ResourceHeartbeatStatus49; + backend: "awsIamRole"; }; -export type KeySchema = { - attributeName: string; - keyType: string; +export type SyncReconcileRequestDataUnion12 = + | DataAwsIamRole2 + | DataGcpServiceAccount2 + | DataAzureManagedIdentity2; + +export type DataRemoteStackManagement = { + data: DataAwsIamRole2 | DataGcpServiceAccount2 | DataAzureManagedIdentity2; + resourceType: "remote-stack-management"; }; -export const DataReason29 = { +export const DataReason48 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason29 = ClosedEnum; +export type DataReason48 = ClosedEnum; -export const StatusSeverity29 = { +export const StatusSeverity48 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity29 = ClosedEnum; +export type StatusSeverity48 = ClosedEnum; -export type DataCollectionIssue29 = { +export type DataCollectionIssue48 = { message: string; - reason: DataReason29; - severity: StatusSeverity29; + reason: DataReason48; + severity: StatusSeverity48; source: string; }; -export const DataHealth29 = { +export const DataHealth48 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth29 = ClosedEnum; +export type DataHealth48 = ClosedEnum; -export const StatusLifecycle29 = { +export const StatusLifecycle48 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -7948,85 +8200,68 @@ export const StatusLifecycle29 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle29 = ClosedEnum; +export type StatusLifecycle48 = ClosedEnum; -export type ResourceHeartbeatStatus29 = { - collectionIssues: Array; - health: DataHealth29; - lifecycle: StatusLifecycle29; +export type ResourceHeartbeatStatus48 = { + collectionIssues: Array; + health: DataHealth48; + lifecycle: StatusLifecycle48; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsDynamoDb = { - billingMode?: string | null | undefined; - deletionProtectionEnabled?: boolean | null | undefined; - globalSecondaryIndexCount?: number | null | undefined; - itemCount?: number | null | undefined; - keySchema: Array; - localSecondaryIndexCount?: number | null | undefined; - name: string; - region?: string | null | undefined; - replicaCount?: number | null | undefined; - restoreInProgress?: boolean | null | undefined; - sseStatus?: string | null | undefined; - sseType?: string | null | undefined; - status: ResourceHeartbeatStatus29; - streamEnabled?: boolean | null | undefined; - streamViewType?: string | null | undefined; - tableArn?: string | null | undefined; - tableClass?: string | null | undefined; - tableSizeBytes?: number | null | undefined; - tableStatus?: string | null | undefined; - ttlAttributeName?: string | null | undefined; - ttlStatus?: string | null | undefined; - backend: "awsDynamoDb"; -}; - -export type SyncReconcileRequestDataUnion7 = - | DataAwsDynamoDb - | DataGcpFirestore - | DataAzureTable - | DataLocal7; - -export type DataKv = { - data: DataAwsDynamoDb | DataGcpFirestore | DataAzureTable | DataLocal7; - resourceType: "kv"; +export type DataAzureVnet = { + applicationGatewaySubnetName?: string | null | undefined; + cidrBlock?: string | null | undefined; + isByoVnet: boolean; + lastByoVnetVerificationErrorCode?: string | null | undefined; + location?: string | null | undefined; + natGatewayId?: string | null | undefined; + nsgId?: string | null | undefined; + privateEndpointSubnetName?: string | null | undefined; + privateSubnetName?: string | null | undefined; + publicIpId?: string | null | undefined; + publicSubnetName?: string | null | undefined; + resourceGroup?: string | null | undefined; + status: ResourceHeartbeatStatus48; + vnetName?: string | null | undefined; + vnetResourceId?: string | null | undefined; + backend: "azureVnet"; }; -export const DataReason28 = { +export const DataReason47 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason28 = ClosedEnum; +export type DataReason47 = ClosedEnum; -export const StatusSeverity28 = { +export const StatusSeverity47 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity28 = ClosedEnum; +export type StatusSeverity47 = ClosedEnum; -export type DataCollectionIssue28 = { +export type DataCollectionIssue47 = { message: string; - reason: DataReason28; - severity: StatusSeverity28; + reason: DataReason47; + severity: StatusSeverity47; source: string; }; -export const DataHealth28 = { +export const DataHealth47 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth28 = ClosedEnum; +export type DataHealth47 = ClosedEnum; -export const StatusLifecycle28 = { +export const StatusLifecycle47 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8038,57 +8273,64 @@ export const StatusLifecycle28 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle28 = ClosedEnum; +export type StatusLifecycle47 = ClosedEnum; -export type ResourceHeartbeatStatus28 = { - collectionIssues: Array; - health: DataHealth28; - lifecycle: StatusLifecycle28; +export type ResourceHeartbeatStatus47 = { + collectionIssues: Array; + health: DataHealth47; + lifecycle: StatusLifecycle47; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal6 = { - name: string; - path?: string | null | undefined; - serviceStatus?: string | null | undefined; - status: ResourceHeartbeatStatus28; - backend: "local"; +export type DataGcpVpc = { + cidrBlock?: string | null | undefined; + cloudNatName?: string | null | undefined; + firewallName?: string | null | undefined; + isByoVpc: boolean; + networkName?: string | null | undefined; + networkSelfLink?: string | null | undefined; + region?: string | null | undefined; + routerName?: string | null | undefined; + status: ResourceHeartbeatStatus47; + subnetworkName?: string | null | undefined; + subnetworkSelfLink?: string | null | undefined; + backend: "gcpVpc"; }; -export const DataReason27 = { +export const DataReason46 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason27 = ClosedEnum; +export type DataReason46 = ClosedEnum; -export const StatusSeverity27 = { +export const StatusSeverity46 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity27 = ClosedEnum; +export type StatusSeverity46 = ClosedEnum; -export type DataCollectionIssue27 = { +export type DataCollectionIssue46 = { message: string; - reason: DataReason27; - severity: StatusSeverity27; + reason: DataReason46; + severity: StatusSeverity46; source: string; }; -export const DataHealth27 = { +export const DataHealth46 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth27 = ClosedEnum; +export type DataHealth46 = ClosedEnum; -export const StatusLifecycle27 = { +export const StatusLifecycle46 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8100,85 +8342,75 @@ export const StatusLifecycle27 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle27 = ClosedEnum; +export type StatusLifecycle46 = ClosedEnum; -export type ResourceHeartbeatStatus27 = { - collectionIssues: Array; - health: DataHealth27; - lifecycle: StatusLifecycle27; +export type ResourceHeartbeatStatus46 = { + collectionIssues: Array; + health: DataHealth46; + lifecycle: StatusLifecycle46; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzureServiceBus = { - accessedAt?: string | null | undefined; - activeMessageCount?: number | null | undefined; - autoDeleteOnIdle?: string | null | undefined; - createdAt?: string | null | undefined; - deadLetterMessageCount?: number | null | undefined; - deadLetteringOnMessageExpiration?: boolean | null | undefined; - defaultMessageTimeToLive?: string | null | undefined; - duplicateDetectionHistoryTimeWindow?: string | null | undefined; - enableBatchedOperations?: boolean | null | undefined; - enableExpress?: boolean | null | undefined; - enablePartitioning?: boolean | null | undefined; - endpoint?: string | null | undefined; - forwardDeadLetteredMessagesTo?: string | null | undefined; - forwardTo?: string | null | undefined; - lockDuration?: string | null | undefined; - maxDeliveryCount?: number | null | undefined; - maxMessageSizeInKilobytes?: number | null | undefined; - maxSizeInMegabytes?: number | null | undefined; - messageCount?: number | null | undefined; - name: string; - namespaceName: string; - queueStatus?: string | null | undefined; - requiresDuplicateDetection?: boolean | null | undefined; - requiresSession?: boolean | null | undefined; - resourceGroup?: string | null | undefined; - resourceId?: string | null | undefined; - scheduledMessageCount?: number | null | undefined; - sizeInBytes?: number | null | undefined; - status: ResourceHeartbeatStatus27; - transferDeadLetterMessageCount?: number | null | undefined; - transferMessageCount?: number | null | undefined; - updatedAt?: string | null | undefined; - backend: "azureServiceBus"; +export type DataAwsVpc = { + availabilityZones: Array; + cidrBlock?: string | null | undefined; + internetGatewayId?: string | null | undefined; + isByoVpc: boolean; + natGatewayId?: string | null | undefined; + privateSubnetIds: Array; + publicSubnetIds: Array; + routeTableCount: number; + securityGroupId?: string | null | undefined; + status: ResourceHeartbeatStatus46; + vpcId?: string | null | undefined; + vpcState?: string | null | undefined; + backend: "awsVpc"; }; -export const DataReason26 = { +export type SyncReconcileRequestDataUnion11 = + | DataAwsVpc + | DataGcpVpc + | DataAzureVnet; + +export type DataNetwork = { + data: DataAwsVpc | DataGcpVpc | DataAzureVnet; + resourceType: "network"; +}; + +export const DataReason45 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason26 = ClosedEnum; +export type DataReason45 = ClosedEnum; -export const StatusSeverity26 = { +export const StatusSeverity45 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity26 = ClosedEnum; +export type StatusSeverity45 = ClosedEnum; -export type DataCollectionIssue26 = { +export type DataCollectionIssue45 = { message: string; - reason: DataReason26; - severity: StatusSeverity26; + reason: DataReason45; + severity: StatusSeverity45; source: string; }; -export const DataHealth26 = { +export const DataHealth45 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth26 = ClosedEnum; +export type DataHealth45 = ClosedEnum; -export const StatusLifecycle26 = { +export const StatusLifecycle45 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8190,87 +8422,56 @@ export const StatusLifecycle26 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle26 = ClosedEnum; +export type StatusLifecycle45 = ClosedEnum; -export type ResourceHeartbeatStatus26 = { - collectionIssues: Array; - health: DataHealth26; - lifecycle: StatusLifecycle26; +export type ResourceHeartbeatStatus45 = { + collectionIssues: Array; + health: DataHealth45; + lifecycle: StatusLifecycle45; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcpPubSub = { - endpoint?: string | null | undefined; - kmsKeyName?: string | null | undefined; - messageStorageAllowedPersistenceRegions: Array; - messageStorageEnforceInTransit?: boolean | null | undefined; - projectId?: string | null | undefined; - schemaEncoding?: string | null | undefined; - schemaFirstRevisionId?: string | null | undefined; - schemaLastRevisionId?: string | null | undefined; - schemaName?: string | null | undefined; - status: ResourceHeartbeatStatus26; - subscriptionAckDeadlineSeconds?: number | null | undefined; - subscriptionDeadLetterMaxDeliveryAttempts?: number | null | undefined; - subscriptionDeadLetterTopic?: string | null | undefined; - subscriptionDetached?: boolean | null | undefined; - subscriptionEnableMessageOrdering?: boolean | null | undefined; - subscriptionFilter?: string | null | undefined; - subscriptionFullName?: string | null | undefined; - subscriptionLabels: { [k: string]: string }; - subscriptionMessageRetentionDuration?: string | null | undefined; - subscriptionName?: string | null | undefined; - subscriptionPushAttributes: { [k: string]: string }; - subscriptionPushConfigPresent?: boolean | null | undefined; - subscriptionPushEndpoint?: string | null | undefined; - subscriptionPushNoWrapperWriteMetadata?: boolean | null | undefined; - subscriptionPushOidcAudience?: string | null | undefined; - subscriptionPushOidcServiceAccountEmail?: string | null | undefined; - subscriptionPushPubsubWrapperWriteMetadata?: boolean | null | undefined; - subscriptionRetainAckedMessages?: boolean | null | undefined; - subscriptionState?: string | null | undefined; - topicFullName?: string | null | undefined; - topicLabels: { [k: string]: string }; - topicMessageRetentionDuration?: string | null | undefined; - topicName: string; - topicState?: string | null | undefined; - backend: "gcpPubSub"; +export type DataLocal10 = { + configured: boolean; + identity: string; + status: ResourceHeartbeatStatus45; + backend: "local"; }; -export const DataReason25 = { +export const DataReason44 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason25 = ClosedEnum; +export type DataReason44 = ClosedEnum; -export const StatusSeverity25 = { +export const StatusSeverity44 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity25 = ClosedEnum; +export type StatusSeverity44 = ClosedEnum; -export type DataCollectionIssue25 = { +export type DataCollectionIssue44 = { message: string; - reason: DataReason25; - severity: StatusSeverity25; + reason: DataReason44; + severity: StatusSeverity44; source: string; }; -export const DataHealth25 = { +export const DataHealth44 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth25 = ClosedEnum; +export type DataHealth44 = ClosedEnum; -export const StatusLifecycle25 = { +export const StatusLifecycle44 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8282,308 +8483,299 @@ export const StatusLifecycle25 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle25 = ClosedEnum; +export type StatusLifecycle44 = ClosedEnum; -export type ResourceHeartbeatStatus25 = { - collectionIssues: Array; - health: DataHealth25; - lifecycle: StatusLifecycle25; +export type ResourceHeartbeatStatus44 = { + collectionIssues: Array; + health: DataHealth44; + lifecycle: StatusLifecycle44; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsSqs = { - approximateCounts: boolean; - approximateDelayedMessages?: number | null | undefined; - approximateInFlightMessages?: number | null | undefined; - approximateVisibleMessages?: number | null | undefined; - contentBasedDeduplication?: boolean | null | undefined; - deduplicationScope?: string | null | undefined; - delaySeconds?: number | null | undefined; - fifoQueue?: boolean | null | undefined; - fifoThroughputLimit?: string | null | undefined; - kmsDataKeyReusePeriodSeconds?: number | null | undefined; - kmsMasterKeyId?: string | null | undefined; - maximumMessageSize?: number | null | undefined; - messageRetentionPeriodSeconds?: number | null | undefined; +export type DataAzureManagedIdentity1 = { + clientId?: string | null | undefined; + customRoleDefinitionCount: number; + customRoleDefinitionIds: Array; + isolationScope?: string | null | undefined; + location: string; + managedTagCount: number; name: string; - queueArn?: string | null | undefined; - queueUrl?: string | null | undefined; - receiveMessageWaitTimeSeconds?: number | null | undefined; - redriveAllowPolicy?: string | null | undefined; - redrivePolicy?: string | null | undefined; - region?: string | null | undefined; - sqsManagedSseEnabled?: boolean | null | undefined; - sseEnabled?: boolean | null | undefined; - status: ResourceHeartbeatStatus25; - visibilityTimeoutSeconds?: number | null | undefined; - backend: "awsSqs"; + principalId?: string | null | undefined; + resourceGroup: string; + resourceId: string; + roleAssignmentCount: number; + roleAssignmentIds: Array; + stackPermissionsApplied: boolean; + status: ResourceHeartbeatStatus44; + tenantId?: string | null | undefined; + type?: string | null | undefined; + backend: "azureManagedIdentity"; }; -export type SyncReconcileRequestDataUnion6 = - | DataAwsSqs - | DataGcpPubSub - | DataAzureServiceBus - | DataLocal6; +export const DataReason43 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason43 = ClosedEnum; -export type DataQueue = { - data: DataAwsSqs | DataGcpPubSub | DataAzureServiceBus | DataLocal6; - resourceType: "queue"; +export const StatusSeverity43 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity43 = ClosedEnum; + +export type DataCollectionIssue43 = { + message: string; + reason: DataReason43; + severity: StatusSeverity43; + source: string; }; -export const CpuUnit11 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataHealth43 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", } as const; -export type CpuUnit11 = ClosedEnum; +export type DataHealth43 = ClosedEnum; -export type Cpu11 = { - unit: CpuUnit11; - value: number; -}; +export const StatusLifecycle43 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle43 = ClosedEnum; -export type CpuUnion11 = Cpu11 | any; +export type ResourceHeartbeatStatus43 = { + collectionIssues: Array; + health: DataHealth43; + lifecycle: StatusLifecycle43; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; -export type InvolvedObject9 = { - apiVersion?: string | null | undefined; - fieldPath?: string | null | undefined; - kind?: string | null | undefined; +export type DataGcpServiceAccount1 = { + description?: string | null | undefined; + disabled?: boolean | null | undefined; + displayName?: string | null | undefined; + email: string; + etag?: string | null | undefined; name?: string | null | undefined; - namespace?: string | null | undefined; - resourceVersion?: string | null | undefined; - uid?: string | null | undefined; + oauth2ClientId?: string | null | undefined; + projectBindingCount: number; + projectId?: string | null | undefined; + projectRoles: Array; + serviceAccountBindingCount: number; + serviceAccountRoles: Array; + status: ResourceHeartbeatStatus43; + uniqueId?: string | null | undefined; + backend: "gcpServiceAccount"; }; -export type InvolvedObjectUnion9 = InvolvedObject9 | any; - -export type SyncReconcileRequestSource9 = { - component?: string | null | undefined; - host?: string | null | undefined; -}; +export const DataReason42 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason42 = ClosedEnum; -export type SourceUnion9 = SyncReconcileRequestSource9 | any; +export const StatusSeverity42 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity42 = ClosedEnum; -export type SyncReconcileRequestEvent12 = { - count?: number | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject9 | any | null | undefined; - lastTimestamp?: Date | null | undefined; +export type DataCollectionIssue42 = { message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource9 | any | null | undefined; - type?: string | null | undefined; + reason: DataReason42; + severity: StatusSeverity42; + source: string; }; -export const MemoryUnit11 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataHealth42 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", } as const; -export type MemoryUnit11 = ClosedEnum; +export type DataHealth42 = ClosedEnum; -export type Memory11 = { - unit: MemoryUnit11; - value: number; -}; +export const StatusLifecycle42 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle42 = ClosedEnum; -export type MemoryUnion11 = Memory11 | any; +export type ResourceHeartbeatStatus42 = { + collectionIssues: Array; + health: DataHealth42; + lifecycle: StatusLifecycle42; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; -export type NodeCounts = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type DataAwsIamRole1 = { + assumeRolePolicyPresent: boolean; + attachedPolicyCount: number; + attachedPolicyNames: Array; + createDate: string; + description?: string | null | undefined; + inlinePolicyCount: number; + inlinePolicyNames: Array; + lastUsedDate?: string | null | undefined; + lastUsedRegion?: string | null | undefined; + managedTagCount: number; + maxSessionDuration?: number | null | undefined; + path: string; + permissionsBoundaryArn?: string | null | undefined; + permissionsBoundaryType?: string | null | undefined; + roleArn: string; + roleId: string; + roleName: string; + stackPermissionsApplied: boolean; + status: ResourceHeartbeatStatus42; + tagCount: number; + backend: "awsIamRole"; }; -export const CpuAllocatableUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type CpuAllocatableUnit = ClosedEnum; +export type SyncReconcileRequestDataUnion10 = + | DataAwsIamRole1 + | DataGcpServiceAccount1 + | DataAzureManagedIdentity1 + | DataLocal10; -export type CpuAllocatable = { - unit: CpuAllocatableUnit; - value: number; +export type DataServiceAccount = { + data: + | DataAwsIamRole1 + | DataGcpServiceAccount1 + | DataAzureManagedIdentity1 + | DataLocal10; + resourceType: "service-account"; }; -export type AllocatableCpuUnion = CpuAllocatable | any; - -export const MemoryAllocatableUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataReason41 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", } as const; -export type MemoryAllocatableUnit = ClosedEnum; +export type DataReason41 = ClosedEnum; -export type MemoryAllocatable = { - unit: MemoryAllocatableUnit; - value: number; -}; - -export type AllocatableMemoryUnion = MemoryAllocatable | any; - -export type Allocatable = { - cpu?: CpuAllocatable | any | null | undefined; - memory?: MemoryAllocatable | any | null | undefined; - pods?: number | null | undefined; -}; - -export const CpuCapacityUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type CpuCapacityUnit = ClosedEnum; - -export type CpuCapacity = { - unit: CpuCapacityUnit; - value: number; -}; - -export type CapacityCpuUnion = CpuCapacity | any; - -export const MemoryCapacityUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusSeverity41 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type MemoryCapacityUnit = ClosedEnum; - -export type MemoryCapacity = { - unit: MemoryCapacityUnit; - value: number; -}; - -export type CapacityMemoryUnion = MemoryCapacity | any; - -export type Capacity = { - cpu?: CpuCapacity | any | null | undefined; - memory?: MemoryCapacity | any | null | undefined; - pods?: number | null | undefined; -}; +export type StatusSeverity41 = ClosedEnum; -export type NodeStatusCondition = { - message?: string | null | undefined; - reason?: string | null | undefined; - status: string; - type: string; +export type DataCollectionIssue41 = { + message: string; + reason: DataReason41; + severity: StatusSeverity41; + source: string; }; -export const UsageCpuUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataHealth41 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", } as const; -export type UsageCpuUnit = ClosedEnum; - -export type UsageCpu = { - unit: UsageCpuUnit; - value: number; -}; - -export type UsageCpuUnion = UsageCpu | any; +export type DataHealth41 = ClosedEnum; -export const UsageMemoryUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle41 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type UsageMemoryUnit = ClosedEnum; - -export type UsageMemory = { - unit: UsageMemoryUnit; - value: number; -}; - -export type UsageMemoryUnion = UsageMemory | any; - -export type SyncReconcileRequestUsage = { - cpu?: UsageCpu | any | null | undefined; - memory?: UsageMemory | any | null | undefined; -}; - -export type Usage = SyncReconcileRequestUsage | any; +export type StatusLifecycle41 = ClosedEnum; -export type NodeStatus = { - allocatable: Allocatable; - capacity: Capacity; - conditions?: Array | undefined; - containerRuntimeVersion?: string | null | undefined; - kubeletVersion?: string | null | undefined; - labels: { [k: string]: string }; - name: string; - ready: boolean; - roles: Array; - uid?: string | null | undefined; - usage?: SyncReconcileRequestUsage | any | null | undefined; +export type ResourceHeartbeatStatus41 = { + collectionIssues: Array; + health: DataHealth41; + lifecycle: StatusLifecycle41; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type PodCounts = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type DataLocal9 = { + isDirectory?: boolean | null | undefined; + modifiedAt?: Date | null | undefined; + path: string; + pathExists: boolean; + readonly?: boolean | null | undefined; + secretMetadataListed: boolean; + status: ResourceHeartbeatStatus41; + backend: "local"; }; -export const DataReason24 = { +export const DataReason40 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason24 = ClosedEnum; +export type DataReason40 = ClosedEnum; -export const StatusSeverity24 = { +export const StatusSeverity40 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity24 = ClosedEnum; +export type StatusSeverity40 = ClosedEnum; -export type DataCollectionIssue24 = { +export type DataCollectionIssue40 = { message: string; - reason: DataReason24; - severity: StatusSeverity24; + reason: DataReason40; + severity: StatusSeverity40; source: string; }; -export const DataHealth24 = { +export const DataHealth40 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth24 = ClosedEnum; +export type DataHealth40 = ClosedEnum; -export const StatusLifecycle24 = { +export const StatusLifecycle40 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8595,74 +8787,57 @@ export const StatusLifecycle24 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle24 = ClosedEnum; +export type StatusLifecycle40 = ClosedEnum; -export type ResourceHeartbeatStatus24 = { - collectionIssues: Array; - health: DataHealth24; - lifecycle: StatusLifecycle24; +export type ResourceHeartbeatStatus40 = { + collectionIssues: Array; + health: DataHealth40; + lifecycle: StatusLifecycle40; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type SyncReconcileRequestData1 = { - cpu?: Cpu11 | any | null | undefined; - events: Array; - memory?: Memory11 | any | null | undefined; - name: string; - namespace?: string | null | undefined; - nodeCounts: NodeCounts; - nodeStatuses?: Array | undefined; - podCounts: PodCounts; - region?: string | null | undefined; - status: ResourceHeartbeatStatus24; - version?: string | null | undefined; -}; - -export type DataKubernetesCluster = { - data: SyncReconcileRequestData1; - resourceType: "kubernetes-cluster"; -}; - -export type Nodes5 = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type DataKubernetesSecret = { + namespace: string; + prefix: string; + secretMetadataListed: boolean; + status: ResourceHeartbeatStatus40; + backend: "kubernetesSecret"; }; -export const DataReason23 = { +export const DataReason39 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason23 = ClosedEnum; +export type DataReason39 = ClosedEnum; -export const StatusSeverity23 = { +export const StatusSeverity39 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity23 = ClosedEnum; +export type StatusSeverity39 = ClosedEnum; -export type DataCollectionIssue23 = { +export type DataCollectionIssue39 = { message: string; - reason: DataReason23; - severity: StatusSeverity23; + reason: DataReason39; + severity: StatusSeverity39; source: string; }; -export const DataHealth23 = { +export const DataHealth39 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth23 = ClosedEnum; +export type DataHealth39 = ClosedEnum; -export const StatusLifecycle23 = { +export const StatusLifecycle39 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8674,218 +8849,133 @@ export const StatusLifecycle23 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle23 = ClosedEnum; +export type StatusLifecycle39 = ClosedEnum; -export type ResourceHeartbeatStatus23 = { - collectionIssues: Array; - health: DataHealth23; - lifecycle: StatusLifecycle23; +export type ResourceHeartbeatStatus39 = { + collectionIssues: Array; + health: DataHealth39; + lifecycle: StatusLifecycle39; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal5 = { - dockerApiVersion?: string | null | undefined; - dockerArch?: string | null | undefined; - dockerAvailable: boolean; - dockerOs?: string | null | undefined; - dockerVersion?: string | null | undefined; - hostIdentifier?: string | null | undefined; +export type DataAzureKeyVault = { + accessPolicyCount: number; + location?: string | null | undefined; name: string; - networkAvailable: boolean; - networkName?: string | null | undefined; - nodes: Nodes5; - runningContainers?: number | null | undefined; - status: ResourceHeartbeatStatus23; - trackedContainers?: number | null | undefined; - backend: "local"; -}; - -export const Category4 = { - Quota: "quota", - Capacity: "capacity", - Allocation: "allocation", - Other: "other", -} as const; -export type Category4 = ClosedEnum; - -export type CapacityBlocker4 = { - category: Category4; - message: string; - observedAt: Date; - providerCode?: string | null | undefined; - providerReference?: string | null | undefined; -}; - -export type CapacityBlockerUnion4 = CapacityBlocker4 | any; - -export type Blocker4 = { - reason: string; - replicaId: string; - schedulingMode: string; - state: string; - workloadName: string; + privateEndpointConnectionCount: number; + provisioningState?: string | null | undefined; + publicNetworkAccess: string; + purgeProtectionEnabled?: boolean | null | undefined; + rbacAuthorizationEnabled: boolean; + resourceGroup?: string | null | undefined; + resourceId?: string | null | undefined; + secretMetadataListed: boolean; + skuFamily?: string | null | undefined; + skuName?: string | null | undefined; + softDeleteEnabled: boolean; + softDeleteRetentionDays: number; + status: ResourceHeartbeatStatus39; + vaultUri?: string | null | undefined; + backend: "azureKeyVault"; }; -export const DrainProgressStatus4 = { - Draining: "draining", - Drained: "drained", - Terminating: "terminating", +export const DataReason38 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", } as const; -export type DrainProgressStatus4 = ClosedEnum; - -export type DrainProgress4 = { - blockers?: Array | undefined; - drainDeadlineAt?: string | null | undefined; - drainRequestedAt?: string | null | undefined; - drainedAt?: string | null | undefined; - force: boolean; - machineId: string; - replicaCount: number; - stalled: boolean; - status: DrainProgressStatus4; -}; - -export type DrainProgressUnion4 = DrainProgress4 | any; +export type DataReason38 = ClosedEnum; -export const UtilizationUnit4 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusSeverity38 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type UtilizationUnit4 = ClosedEnum; - -export type Utilization4 = { - unit: UtilizationUnit4; - value: number; -}; - -export type UtilizationUnion4 = Utilization4 | any; - -export type Recommendation4 = { - desiredMachines: number; - reason?: string | null | undefined; - unschedulableReplicas?: number | null | undefined; - utilization?: Utilization4 | any | null | undefined; -}; - -export type RecommendationUnion4 = Recommendation4 | any; +export type StatusSeverity38 = ClosedEnum; -export type CapacityGroup4 = { - capacityBlocker?: CapacityBlocker4 | any | null | undefined; - currentMachines: number; - desiredMachines: number; - drainProgress?: DrainProgress4 | any | null | undefined; - groupId: string; - instanceType?: string | null | undefined; - maxMachines?: number | null | undefined; - minMachines?: number | null | undefined; - recommendation?: Recommendation4 | any | null | undefined; +export type DataCollectionIssue38 = { + message: string; + reason: DataReason38; + severity: StatusSeverity38; + source: string; }; -export const CpuUnit10 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataHealth38 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", } as const; -export type CpuUnit10 = ClosedEnum; - -export type Cpu10 = { - unit: CpuUnit10; - value: number; -}; - -export type CpuUnion10 = Cpu10 | any; - -export type DrainBlocker = { - reason: string; - replicaId: string; - schedulingMode: string; - state: string; - workloadName: string; -}; - -export type SyncReconcileRequestMachine = { - capacityGroup: string; - cpuCores?: number | null | undefined; - drainBlockers?: Array | undefined; - drainDeadlineAt?: string | null | undefined; - drainForce: boolean; - drainRequestedAt?: string | null | undefined; - drainedAt?: string | null | undefined; - horizondVersion?: string | null | undefined; - lastHeartbeat: string; - machineId: string; - memoryBytes?: number | null | undefined; - overlayIp?: string | null | undefined; - publicIp?: string | null | undefined; - replicaCount: number; - status: string; - zone: string; -}; +export type DataHealth38 = ClosedEnum; -export const MemoryUnit10 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle38 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type MemoryUnit10 = ClosedEnum; +export type StatusLifecycle38 = ClosedEnum; -export type Memory10 = { - unit: MemoryUnit10; - value: number; +export type ResourceHeartbeatStatus38 = { + collectionIssues: Array; + health: DataHealth38; + lifecycle: StatusLifecycle38; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type MemoryUnion10 = Memory10 | any; - -export type Nodes4 = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type DataGcpSecretManager = { + location: string; + prefix: string; + projectId: string; + secretMetadataListed: boolean; + status: ResourceHeartbeatStatus38; + backend: "gcpSecretManager"; }; -export const DataReason22 = { +export const DataReason37 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason22 = ClosedEnum; +export type DataReason37 = ClosedEnum; -export const StatusSeverity22 = { +export const StatusSeverity37 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity22 = ClosedEnum; +export type StatusSeverity37 = ClosedEnum; -export type DataCollectionIssue22 = { +export type DataCollectionIssue37 = { message: string; - reason: DataReason22; - severity: StatusSeverity22; + reason: DataReason37; + severity: StatusSeverity37; source: string; }; -export const DataHealth22 = { +export const DataHealth37 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth22 = ClosedEnum; +export type DataHealth37 = ClosedEnum; -export const StatusLifecycle22 = { +export const StatusLifecycle37 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -8897,194 +8987,146 @@ export const StatusLifecycle22 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle22 = ClosedEnum; +export type StatusLifecycle37 = ClosedEnum; -export type ResourceHeartbeatStatus22 = { - collectionIssues: Array; - health: DataHealth22; - lifecycle: StatusLifecycle22; +export type ResourceHeartbeatStatus37 = { + collectionIssues: Array; + health: DataHealth37; + lifecycle: StatusLifecycle37; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataMachines2 = { - backendClusterId?: string | null | undefined; - capacityGroups: Array; - cpu?: Cpu10 | any | null | undefined; - machines: Array; - memory?: Memory10 | any | null | undefined; - name: string; - nodes: Nodes4; - status: ResourceHeartbeatStatus22; - backend: "machines"; -}; - -export const Category3 = { - Quota: "quota", - Capacity: "capacity", - Allocation: "allocation", - Other: "other", -} as const; -export type Category3 = ClosedEnum; - -export type CapacityBlocker3 = { - category: Category3; - message: string; - observedAt: Date; - providerCode?: string | null | undefined; - providerReference?: string | null | undefined; +export type DataAwsParameterStore = { + accountId: string; + hasMoreParameters?: boolean | null | undefined; + latestModifiedAt?: Date | null | undefined; + parameterMetadataSampled: boolean; + prefix: string; + region: string; + sampledAdvancedTierCount?: number | null | undefined; + sampledKmsKeyMetadataPresentCount?: number | null | undefined; + sampledParameterCount?: number | null | undefined; + sampledSecureStringCount?: number | null | undefined; + sampledStringCount?: number | null | undefined; + sampledStringListCount?: number | null | undefined; + status: ResourceHeartbeatStatus37; + backend: "awsParameterStore"; }; -export type CapacityBlockerUnion3 = CapacityBlocker3 | any; +export type SyncReconcileRequestDataUnion9 = + | DataAwsParameterStore + | DataGcpSecretManager + | DataAzureKeyVault + | DataKubernetesSecret + | DataLocal9; -export type Blocker3 = { - reason: string; - replicaId: string; - schedulingMode: string; - state: string; - workloadName: string; +export type DataVault = { + data: + | DataAwsParameterStore + | DataGcpSecretManager + | DataAzureKeyVault + | DataKubernetesSecret + | DataLocal9; + resourceType: "vault"; }; -export const DrainProgressStatus3 = { - Draining: "draining", - Drained: "drained", - Terminating: "terminating", +export const DataReason36 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", } as const; -export type DrainProgressStatus3 = ClosedEnum; - -export type DrainProgress3 = { - blockers?: Array | undefined; - drainDeadlineAt?: string | null | undefined; - drainRequestedAt?: string | null | undefined; - drainedAt?: string | null | undefined; - force: boolean; - machineId: string; - replicaCount: number; - stalled: boolean; - status: DrainProgressStatus3; -}; - -export type DrainProgressUnion3 = DrainProgress3 | any; +export type DataReason36 = ClosedEnum; -export const UtilizationUnit3 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusSeverity36 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type UtilizationUnit3 = ClosedEnum; - -export type Utilization3 = { - unit: UtilizationUnit3; - value: number; -}; - -export type UtilizationUnion3 = Utilization3 | any; - -export type Recommendation3 = { - desiredMachines: number; - reason?: string | null | undefined; - unschedulableReplicas?: number | null | undefined; - utilization?: Utilization3 | any | null | undefined; -}; - -export type RecommendationUnion3 = Recommendation3 | any; +export type StatusSeverity36 = ClosedEnum; -export type CapacityGroup3 = { - capacityBlocker?: CapacityBlocker3 | any | null | undefined; - currentMachines: number; - desiredMachines: number; - drainProgress?: DrainProgress3 | any | null | undefined; - groupId: string; - instanceType?: string | null | undefined; - maxMachines?: number | null | undefined; - minMachines?: number | null | undefined; - recommendation?: Recommendation3 | any | null | undefined; +export type DataCollectionIssue36 = { + message: string; + reason: DataReason36; + severity: StatusSeverity36; + source: string; }; -export const CpuUnit9 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataHealth36 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", } as const; -export type CpuUnit9 = ClosedEnum; - -export type Cpu9 = { - unit: CpuUnit9; - value: number; -}; - -export type CpuUnion9 = Cpu9 | any; +export type DataHealth36 = ClosedEnum; -export const MemoryUnit9 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle36 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type MemoryUnit9 = ClosedEnum; - -export type Memory9 = { - unit: MemoryUnit9; - value: number; -}; - -export type MemoryUnion9 = Memory9 | any; +export type StatusLifecycle36 = ClosedEnum; -export type Nodes3 = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type ResourceHeartbeatStatus36 = { + collectionIssues: Array; + health: DataHealth36; + lifecycle: StatusLifecycle36; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type ProviderFleet3 = { - currentMachines: number; - desiredMachines: number; - groupId: string; - location?: string | null | undefined; - providerId: string; +export type DataLocal8 = { + name: string; + port?: number | null | undefined; + processRunning: boolean; + status: ResourceHeartbeatStatus36; + version: string; + backend: "local"; }; -export const DataReason21 = { +export const DataReason35 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason21 = ClosedEnum; +export type DataReason35 = ClosedEnum; -export const StatusSeverity21 = { +export const StatusSeverity35 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity21 = ClosedEnum; +export type StatusSeverity35 = ClosedEnum; -export type DataCollectionIssue21 = { +export type DataCollectionIssue35 = { message: string; - reason: DataReason21; - severity: StatusSeverity21; + reason: DataReason35; + severity: StatusSeverity35; source: string; }; -export const DataHealth21 = { +export const DataHealth35 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth21 = ClosedEnum; +export type DataHealth35 = ClosedEnum; -export const StatusLifecycle21 = { +export const StatusLifecycle35 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -9096,195 +9138,203 @@ export const StatusLifecycle21 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle21 = ClosedEnum; +export type StatusLifecycle35 = ClosedEnum; -export type ResourceHeartbeatStatus21 = { - collectionIssues: Array; - health: DataHealth21; - lifecycle: StatusLifecycle21; +export type ResourceHeartbeatStatus35 = { + collectionIssues: Array; + health: DataHealth35; + lifecycle: StatusLifecycle35; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzure2 = { - backendClusterId?: string | null | undefined; - capacityGroups: Array; - cpu?: Cpu9 | any | null | undefined; - memory?: Memory9 | any | null | undefined; - name: string; - nodes: Nodes3; - providerFleets: Array; - region?: string | null | undefined; - status: ResourceHeartbeatStatus21; - backend: "azure"; +export type DataFlexibleServer = { + serverName: string; + state?: string | null | undefined; + status: ResourceHeartbeatStatus35; + version?: string | null | undefined; + backend: "flexibleServer"; }; -export const Category2 = { - Quota: "quota", - Capacity: "capacity", - Allocation: "allocation", - Other: "other", +export const DataReason34 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", } as const; -export type Category2 = ClosedEnum; - -export type CapacityBlocker2 = { - category: Category2; - message: string; - observedAt: Date; - providerCode?: string | null | undefined; - providerReference?: string | null | undefined; -}; - -export type CapacityBlockerUnion2 = CapacityBlocker2 | any; - -export type Blocker2 = { - reason: string; - replicaId: string; - schedulingMode: string; - state: string; - workloadName: string; -}; +export type DataReason34 = ClosedEnum; -export const DrainProgressStatus2 = { - Draining: "draining", - Drained: "drained", - Terminating: "terminating", +export const StatusSeverity34 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type DrainProgressStatus2 = ClosedEnum; +export type StatusSeverity34 = ClosedEnum; -export type DrainProgress2 = { - blockers?: Array | undefined; - drainDeadlineAt?: string | null | undefined; - drainRequestedAt?: string | null | undefined; - drainedAt?: string | null | undefined; - force: boolean; - machineId: string; - replicaCount: number; - stalled: boolean; - status: DrainProgressStatus2; +export type DataCollectionIssue34 = { + message: string; + reason: DataReason34; + severity: StatusSeverity34; + source: string; }; -export type DrainProgressUnion2 = DrainProgress2 | any; +export const DataHealth34 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth34 = ClosedEnum; -export const UtilizationUnit2 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle34 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type UtilizationUnit2 = ClosedEnum; +export type StatusLifecycle34 = ClosedEnum; -export type Utilization2 = { - unit: UtilizationUnit2; - value: number; +export type ResourceHeartbeatStatus34 = { + collectionIssues: Array; + health: DataHealth34; + lifecycle: StatusLifecycle34; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type UtilizationUnion2 = Utilization2 | any; - -export type Recommendation2 = { - desiredMachines: number; - reason?: string | null | undefined; - unschedulableReplicas?: number | null | undefined; - utilization?: Utilization2 | any | null | undefined; +export type DataCloudSQL = { + databaseVersion?: string | null | undefined; + instanceName: string; + state?: string | null | undefined; + status: ResourceHeartbeatStatus34; + backend: "cloudSql"; }; -export type RecommendationUnion2 = Recommendation2 | any; - -export type CapacityGroup2 = { - capacityBlocker?: CapacityBlocker2 | any | null | undefined; - currentMachines: number; - desiredMachines: number; - drainProgress?: DrainProgress2 | any | null | undefined; - groupId: string; - instanceType?: string | null | undefined; - maxMachines?: number | null | undefined; - minMachines?: number | null | undefined; - recommendation?: Recommendation2 | any | null | undefined; -}; +export const DataReason33 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason33 = ClosedEnum; -export const CpuUnit8 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusSeverity33 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type CpuUnit8 = ClosedEnum; +export type StatusSeverity33 = ClosedEnum; -export type Cpu8 = { - unit: CpuUnit8; - value: number; +export type DataCollectionIssue33 = { + message: string; + reason: DataReason33; + severity: StatusSeverity33; + source: string; }; -export type CpuUnion8 = Cpu8 | any; +export const DataHealth33 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth33 = ClosedEnum; -export const MemoryUnit8 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle33 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type MemoryUnit8 = ClosedEnum; +export type StatusLifecycle33 = ClosedEnum; -export type Memory8 = { - unit: MemoryUnit8; - value: number; +export type ResourceHeartbeatStatus33 = { + collectionIssues: Array; + health: DataHealth33; + lifecycle: StatusLifecycle33; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type MemoryUnion8 = Memory8 | any; - -export type Nodes2 = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type DataAurora = { + clusterIdentifier: string; + endpoint?: string | null | undefined; + engineVersion?: string | null | undefined; + /** + * True when a `minCapacity: 0` instance has not reached 0 ACU over the observation + * + * @remarks + * window — it is silently paying always-on prices (auto-pause verification). + */ + neverPauses: boolean; + /** + * Latest sampled `ServerlessDatabaseCapacity` (ACU). + */ + serverlessCapacity?: number | null | undefined; + status: ResourceHeartbeatStatus33; + backend: "aurora"; }; -export type ProviderFleet2 = { - currentMachines: number; - desiredMachines: number; - groupId: string; - location?: string | null | undefined; - providerId: string; +export type SyncReconcileRequestDataUnion8 = + | DataAurora + | DataCloudSQL + | DataFlexibleServer + | DataLocal8; + +export type DataPostgres = { + data: DataAurora | DataCloudSQL | DataFlexibleServer | DataLocal8; + resourceType: "postgres"; }; -export const DataReason20 = { +export const DataReason32 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason20 = ClosedEnum; +export type DataReason32 = ClosedEnum; -export const StatusSeverity20 = { +export const StatusSeverity32 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity20 = ClosedEnum; +export type StatusSeverity32 = ClosedEnum; -export type DataCollectionIssue20 = { +export type DataCollectionIssue32 = { message: string; - reason: DataReason20; - severity: StatusSeverity20; + reason: DataReason32; + severity: StatusSeverity32; source: string; }; -export const DataHealth20 = { +export const DataHealth32 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth20 = ClosedEnum; +export type DataHealth32 = ClosedEnum; -export const StatusLifecycle20 = { +export const StatusLifecycle32 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -9296,195 +9346,210 @@ export const StatusLifecycle20 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle20 = ClosedEnum; +export type StatusLifecycle32 = ClosedEnum; -export type ResourceHeartbeatStatus20 = { - collectionIssues: Array; - health: DataHealth20; - lifecycle: StatusLifecycle20; +export type ResourceHeartbeatStatus32 = { + collectionIssues: Array; + health: DataHealth32; + lifecycle: StatusLifecycle32; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcp2 = { - backendClusterId?: string | null | undefined; - capacityGroups: Array; - cpu?: Cpu8 | any | null | undefined; - memory?: Memory8 | any | null | undefined; +export type DataLocal7 = { + cloudMetadataSupported: boolean; + isDirectory?: boolean | null | undefined; name: string; - nodes: Nodes2; - providerFleets: Array; - region?: string | null | undefined; - status: ResourceHeartbeatStatus20; - backend: "gcp"; + path: string; + pathExists: boolean; + status: ResourceHeartbeatStatus32; + backend: "local"; }; -export const Category1 = { - Quota: "quota", - Capacity: "capacity", - Allocation: "allocation", - Other: "other", +export const DataReason31 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", } as const; -export type Category1 = ClosedEnum; +export type DataReason31 = ClosedEnum; -export type CapacityBlocker1 = { - category: Category1; - message: string; - observedAt: Date; - providerCode?: string | null | undefined; - providerReference?: string | null | undefined; -}; - -export type CapacityBlockerUnion1 = CapacityBlocker1 | any; - -export type Blocker1 = { - reason: string; - replicaId: string; - schedulingMode: string; - state: string; - workloadName: string; -}; - -export const DrainProgressStatus1 = { - Draining: "draining", - Drained: "drained", - Terminating: "terminating", +export const StatusSeverity31 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type DrainProgressStatus1 = ClosedEnum; +export type StatusSeverity31 = ClosedEnum; -export type DrainProgress1 = { - blockers?: Array | undefined; - drainDeadlineAt?: string | null | undefined; - drainRequestedAt?: string | null | undefined; - drainedAt?: string | null | undefined; - force: boolean; - machineId: string; - replicaCount: number; - stalled: boolean; - status: DrainProgressStatus1; +export type DataCollectionIssue31 = { + message: string; + reason: DataReason31; + severity: StatusSeverity31; + source: string; }; -export type DrainProgressUnion1 = DrainProgress1 | any; +export const DataHealth31 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth31 = ClosedEnum; -export const UtilizationUnit1 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle31 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type UtilizationUnit1 = ClosedEnum; +export type StatusLifecycle31 = ClosedEnum; -export type Utilization1 = { - unit: UtilizationUnit1; - value: number; +export type ResourceHeartbeatStatus31 = { + collectionIssues: Array; + health: DataHealth31; + lifecycle: StatusLifecycle31; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type UtilizationUnion1 = Utilization1 | any; - -export type Recommendation1 = { - desiredMachines: number; - reason?: string | null | undefined; - unschedulableReplicas?: number | null | undefined; - utilization?: Utilization1 | any | null | undefined; +export type DataAzureTable = { + endpoint?: string | null | undefined; + resourceGroup?: string | null | undefined; + signedIdentifierCount?: number | null | undefined; + status: ResourceHeartbeatStatus31; + storageAccountKind?: string | null | undefined; + storageAccountLocation?: string | null | undefined; + storageAccountName: string; + storageAccountPrimaryStatus?: string | null | undefined; + storageAccountProvisioningState?: string | null | undefined; + storageAccountResourceId?: string | null | undefined; + tableExists: boolean; + tableName: string; + backend: "azureTable"; }; -export type RecommendationUnion1 = Recommendation1 | any; - -export type CapacityGroup1 = { - capacityBlocker?: CapacityBlocker1 | any | null | undefined; - currentMachines: number; - desiredMachines: number; - drainProgress?: DrainProgress1 | any | null | undefined; - groupId: string; - instanceType?: string | null | undefined; - maxMachines?: number | null | undefined; - minMachines?: number | null | undefined; - recommendation?: Recommendation1 | any | null | undefined; -}; +export const DataReason30 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason30 = ClosedEnum; -export const CpuUnit7 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusSeverity30 = { + Info: "info", + Warning: "warning", + Error: "error", } as const; -export type CpuUnit7 = ClosedEnum; +export type StatusSeverity30 = ClosedEnum; -export type Cpu7 = { - unit: CpuUnit7; - value: number; +export type DataCollectionIssue30 = { + message: string; + reason: DataReason30; + severity: StatusSeverity30; + source: string; }; -export type CpuUnion7 = Cpu7 | any; +export const DataHealth30 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth30 = ClosedEnum; -export const MemoryUnit7 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle30 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type MemoryUnit7 = ClosedEnum; +export type StatusLifecycle30 = ClosedEnum; -export type Memory7 = { - unit: MemoryUnit7; - value: number; +export type ResourceHeartbeatStatus30 = { + collectionIssues: Array; + health: DataHealth30; + lifecycle: StatusLifecycle30; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type MemoryUnion7 = Memory7 | any; - -export type Nodes1 = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; +export type DataGcpFirestore = { + appEngineIntegrationMode?: string | null | undefined; + cmekEnabled: boolean; + concurrencyMode?: string | null | undefined; + createTime?: string | null | undefined; + databaseEdition?: string | null | undefined; + databaseName: string; + databaseType?: string | null | undefined; + deleteProtectionState?: string | null | undefined; + deleteTime?: string | null | undefined; + earliestVersionTime?: string | null | undefined; + endpoint?: string | null | undefined; + locationId?: string | null | undefined; + pointInTimeRecoveryEnablement?: string | null | undefined; + projectId?: string | null | undefined; + sourceInfoPresent: boolean; + status: ResourceHeartbeatStatus30; + updateTime?: string | null | undefined; + versionRetentionPeriod?: string | null | undefined; + backend: "gcpFirestore"; }; -export type ProviderFleet1 = { - currentMachines: number; - desiredMachines: number; - groupId: string; - location?: string | null | undefined; - providerId: string; +export type KeySchema = { + attributeName: string; + keyType: string; }; -export const DataReason19 = { +export const DataReason29 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason19 = ClosedEnum; +export type DataReason29 = ClosedEnum; -export const StatusSeverity19 = { +export const StatusSeverity29 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity19 = ClosedEnum; +export type StatusSeverity29 = ClosedEnum; -export type DataCollectionIssue19 = { +export type DataCollectionIssue29 = { message: string; - reason: DataReason19; - severity: StatusSeverity19; + reason: DataReason29; + severity: StatusSeverity29; source: string; }; -export const DataHealth19 = { +export const DataHealth29 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth19 = ClosedEnum; +export type DataHealth29 = ClosedEnum; -export const StatusLifecycle19 = { +export const StatusLifecycle29 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -9496,157 +9561,237 @@ export const StatusLifecycle19 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle19 = ClosedEnum; +export type StatusLifecycle29 = ClosedEnum; -export type ResourceHeartbeatStatus19 = { - collectionIssues: Array; - health: DataHealth19; - lifecycle: StatusLifecycle19; +export type ResourceHeartbeatStatus29 = { + collectionIssues: Array; + health: DataHealth29; + lifecycle: StatusLifecycle29; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAws2 = { - backendClusterId?: string | null | undefined; - capacityGroups: Array; - cpu?: Cpu7 | any | null | undefined; - memory?: Memory7 | any | null | undefined; +export type DataAwsDynamoDb = { + billingMode?: string | null | undefined; + deletionProtectionEnabled?: boolean | null | undefined; + globalSecondaryIndexCount?: number | null | undefined; + itemCount?: number | null | undefined; + keySchema: Array; + localSecondaryIndexCount?: number | null | undefined; name: string; - nodes: Nodes1; - providerFleets: Array; region?: string | null | undefined; - status: ResourceHeartbeatStatus19; - backend: "aws"; + replicaCount?: number | null | undefined; + restoreInProgress?: boolean | null | undefined; + sseStatus?: string | null | undefined; + sseType?: string | null | undefined; + status: ResourceHeartbeatStatus29; + streamEnabled?: boolean | null | undefined; + streamViewType?: string | null | undefined; + tableArn?: string | null | undefined; + tableClass?: string | null | undefined; + tableSizeBytes?: number | null | undefined; + tableStatus?: string | null | undefined; + ttlAttributeName?: string | null | undefined; + ttlStatus?: string | null | undefined; + backend: "awsDynamoDb"; }; -export type SyncReconcileRequestDataUnion5 = - | DataAws2 - | DataGcp2 - | DataAzure2 - | DataMachines2 - | DataLocal5; +export type SyncReconcileRequestDataUnion7 = + | DataAwsDynamoDb + | DataGcpFirestore + | DataAzureTable + | DataLocal7; -export type DataComputeCluster = { - data: DataAws2 | DataGcp2 | DataAzure2 | DataMachines2 | DataLocal5; - resourceType: "compute-cluster"; +export type DataKv = { + data: DataAwsDynamoDb | DataGcpFirestore | DataAzureTable | DataLocal7; + resourceType: "kv"; }; -export const DaemonInstanceCpuUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DataReason28 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", } as const; -export type DaemonInstanceCpuUnit = ClosedEnum; +export type DataReason28 = ClosedEnum; -export type DaemonInstanceCpu = { - unit: DaemonInstanceCpuUnit; - value: number; -}; +export const StatusSeverity28 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity28 = ClosedEnum; -export type DaemonInstanceCpuUnion5 = DaemonInstanceCpu | any; +export type DataCollectionIssue28 = { + message: string; + reason: DataReason28; + severity: StatusSeverity28; + source: string; +}; -export const DaemonInstanceKind = { - Container: "container", - Process: "process", - Daemon: "daemon", +export const DataHealth28 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", } as const; -export type DaemonInstanceKind = ClosedEnum; +export type DataHealth28 = ClosedEnum; -export const DaemonInstanceMemoryUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const StatusLifecycle28 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", } as const; -export type DaemonInstanceMemoryUnit = ClosedEnum< - typeof DaemonInstanceMemoryUnit ->; +export type StatusLifecycle28 = ClosedEnum; -export type DaemonInstanceMemory = { - unit: DaemonInstanceMemoryUnit; - value: number; +export type ResourceHeartbeatStatus28 = { + collectionIssues: Array; + health: DataHealth28; + lifecycle: StatusLifecycle28; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export type DaemonInstanceMemoryUnion5 = DaemonInstanceMemory | any; - -export type DaemonInstance5 = { - cpu?: DaemonInstanceCpu | any | null | undefined; - kind: DaemonInstanceKind; - memory?: DaemonInstanceMemory | any | null | undefined; +export type DataLocal6 = { name: string; - phase?: string | null | undefined; - pid?: number | null | undefined; - ready: boolean; - restartCount?: number | null | undefined; - unitId: string; + path?: string | null | undefined; + serviceStatus?: string | null | undefined; + status: ResourceHeartbeatStatus28; + backend: "local"; }; -export type DaemonInstanceUnion = DaemonInstance5 | any; +export const DataReason27 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason27 = ClosedEnum; -export const EventSeverity3 = { +export const StatusSeverity27 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type EventSeverity3 = ClosedEnum; +export type StatusSeverity27 = ClosedEnum; -export type SyncReconcileRequestSubject3 = { - id?: string | null | undefined; - kind: string; - name?: string | null | undefined; +export type DataCollectionIssue27 = { + message: string; + reason: DataReason27; + severity: StatusSeverity27; + source: string; }; -export type SyncReconcileRequestSubjectUnion3 = - | SyncReconcileRequestSubject3 - | any; +export const DataHealth27 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth27 = ClosedEnum; -export type SyncReconcileRequestEvent11 = { - kind: string; - message: string; - raw?: any | null | undefined; - severity: EventSeverity3; - subject?: SyncReconcileRequestSubject3 | any | null | undefined; - timestamp: Date; +export const StatusLifecycle27 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle27 = ClosedEnum; + +export type ResourceHeartbeatStatus27 = { + collectionIssues: Array; + health: DataHealth27; + lifecycle: StatusLifecycle27; + message?: string | null | undefined; + partial: boolean; + stale: boolean; }; -export const DataReason18 = { +export type DataAzureServiceBus = { + accessedAt?: string | null | undefined; + activeMessageCount?: number | null | undefined; + autoDeleteOnIdle?: string | null | undefined; + createdAt?: string | null | undefined; + deadLetterMessageCount?: number | null | undefined; + deadLetteringOnMessageExpiration?: boolean | null | undefined; + defaultMessageTimeToLive?: string | null | undefined; + duplicateDetectionHistoryTimeWindow?: string | null | undefined; + enableBatchedOperations?: boolean | null | undefined; + enableExpress?: boolean | null | undefined; + enablePartitioning?: boolean | null | undefined; + endpoint?: string | null | undefined; + forwardDeadLetteredMessagesTo?: string | null | undefined; + forwardTo?: string | null | undefined; + lockDuration?: string | null | undefined; + maxDeliveryCount?: number | null | undefined; + maxMessageSizeInKilobytes?: number | null | undefined; + maxSizeInMegabytes?: number | null | undefined; + messageCount?: number | null | undefined; + name: string; + namespaceName: string; + queueStatus?: string | null | undefined; + requiresDuplicateDetection?: boolean | null | undefined; + requiresSession?: boolean | null | undefined; + resourceGroup?: string | null | undefined; + resourceId?: string | null | undefined; + scheduledMessageCount?: number | null | undefined; + sizeInBytes?: number | null | undefined; + status: ResourceHeartbeatStatus27; + transferDeadLetterMessageCount?: number | null | undefined; + transferMessageCount?: number | null | undefined; + updatedAt?: string | null | undefined; + backend: "azureServiceBus"; +}; + +export const DataReason26 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason18 = ClosedEnum; +export type DataReason26 = ClosedEnum; -export const StatusSeverity18 = { +export const StatusSeverity26 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity18 = ClosedEnum; +export type StatusSeverity26 = ClosedEnum; -export type DataCollectionIssue18 = { +export type DataCollectionIssue26 = { message: string; - reason: DataReason18; - severity: StatusSeverity18; + reason: DataReason26; + severity: StatusSeverity26; source: string; }; -export const DataHealth18 = { +export const DataHealth26 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth18 = ClosedEnum; +export type DataHealth26 = ClosedEnum; -export const StatusLifecycle18 = { +export const StatusLifecycle26 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -9658,32 +9803,149 @@ export const StatusLifecycle18 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle18 = ClosedEnum; +export type StatusLifecycle26 = ClosedEnum; -export type ResourceHeartbeatStatus18 = { - collectionIssues: Array; - health: DataHealth18; - lifecycle: StatusLifecycle18; +export type ResourceHeartbeatStatus26 = { + collectionIssues: Array; + health: DataHealth26; + lifecycle: StatusLifecycle26; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal4 = { - commandSupported: boolean; - daemonInstance?: DaemonInstance5 | any | null | undefined; - daemonName?: string | undefined; - events: Array; - exitReason?: string | null | undefined; - imagePathPresent: boolean; - pid?: number | null | undefined; - restartCount?: number | null | undefined; - runtimeId: string; - status: ResourceHeartbeatStatus18; - backend: "local"; +export type DataGcpPubSub = { + endpoint?: string | null | undefined; + kmsKeyName?: string | null | undefined; + messageStorageAllowedPersistenceRegions: Array; + messageStorageEnforceInTransit?: boolean | null | undefined; + projectId?: string | null | undefined; + schemaEncoding?: string | null | undefined; + schemaFirstRevisionId?: string | null | undefined; + schemaLastRevisionId?: string | null | undefined; + schemaName?: string | null | undefined; + status: ResourceHeartbeatStatus26; + subscriptionAckDeadlineSeconds?: number | null | undefined; + subscriptionDeadLetterMaxDeliveryAttempts?: number | null | undefined; + subscriptionDeadLetterTopic?: string | null | undefined; + subscriptionDetached?: boolean | null | undefined; + subscriptionEnableMessageOrdering?: boolean | null | undefined; + subscriptionFilter?: string | null | undefined; + subscriptionFullName?: string | null | undefined; + subscriptionLabels: { [k: string]: string }; + subscriptionMessageRetentionDuration?: string | null | undefined; + subscriptionName?: string | null | undefined; + subscriptionPushAttributes: { [k: string]: string }; + subscriptionPushConfigPresent?: boolean | null | undefined; + subscriptionPushEndpoint?: string | null | undefined; + subscriptionPushNoWrapperWriteMetadata?: boolean | null | undefined; + subscriptionPushOidcAudience?: string | null | undefined; + subscriptionPushOidcServiceAccountEmail?: string | null | undefined; + subscriptionPushPubsubWrapperWriteMetadata?: boolean | null | undefined; + subscriptionRetainAckedMessages?: boolean | null | undefined; + subscriptionState?: string | null | undefined; + topicFullName?: string | null | undefined; + topicLabels: { [k: string]: string }; + topicMessageRetentionDuration?: string | null | undefined; + topicName: string; + topicState?: string | null | undefined; + backend: "gcpPubSub"; }; -export const CpuUnit6 = { +export const DataReason25 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason25 = ClosedEnum; + +export const StatusSeverity25 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity25 = ClosedEnum; + +export type DataCollectionIssue25 = { + message: string; + reason: DataReason25; + severity: StatusSeverity25; + source: string; +}; + +export const DataHealth25 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth25 = ClosedEnum; + +export const StatusLifecycle25 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle25 = ClosedEnum; + +export type ResourceHeartbeatStatus25 = { + collectionIssues: Array; + health: DataHealth25; + lifecycle: StatusLifecycle25; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataAwsSqs = { + approximateCounts: boolean; + approximateDelayedMessages?: number | null | undefined; + approximateInFlightMessages?: number | null | undefined; + approximateVisibleMessages?: number | null | undefined; + contentBasedDeduplication?: boolean | null | undefined; + deduplicationScope?: string | null | undefined; + delaySeconds?: number | null | undefined; + fifoQueue?: boolean | null | undefined; + fifoThroughputLimit?: string | null | undefined; + kmsDataKeyReusePeriodSeconds?: number | null | undefined; + kmsMasterKeyId?: string | null | undefined; + maximumMessageSize?: number | null | undefined; + messageRetentionPeriodSeconds?: number | null | undefined; + name: string; + queueArn?: string | null | undefined; + queueUrl?: string | null | undefined; + receiveMessageWaitTimeSeconds?: number | null | undefined; + redriveAllowPolicy?: string | null | undefined; + redrivePolicy?: string | null | undefined; + region?: string | null | undefined; + sqsManagedSseEnabled?: boolean | null | undefined; + sseEnabled?: boolean | null | undefined; + status: ResourceHeartbeatStatus25; + visibilityTimeoutSeconds?: number | null | undefined; + backend: "awsSqs"; +}; + +export type SyncReconcileRequestDataUnion6 = + | DataAwsSqs + | DataGcpPubSub + | DataAzureServiceBus + | DataLocal6; + +export type DataQueue = { + data: DataAwsSqs | DataGcpPubSub | DataAzureServiceBus | DataLocal6; + resourceType: "queue"; +}; + +export const CpuUnit11 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -9691,16 +9953,16 @@ export const CpuUnit6 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuUnit6 = ClosedEnum; +export type CpuUnit11 = ClosedEnum; -export type Cpu6 = { - unit: CpuUnit6; +export type Cpu11 = { + unit: CpuUnit11; value: number; }; -export type CpuUnion6 = Cpu6 | any; +export type CpuUnion11 = Cpu11 | any; -export type InvolvedObject8 = { +export type InvolvedObject9 = { apiVersion?: string | null | undefined; fieldPath?: string | null | undefined; kind?: string | null | undefined; @@ -9710,29 +9972,29 @@ export type InvolvedObject8 = { uid?: string | null | undefined; }; -export type InvolvedObjectUnion8 = InvolvedObject8 | any; +export type InvolvedObjectUnion9 = InvolvedObject9 | any; -export type SyncReconcileRequestSource8 = { +export type SyncReconcileRequestSource9 = { component?: string | null | undefined; host?: string | null | undefined; }; -export type SourceUnion8 = SyncReconcileRequestSource8 | any; +export type SourceUnion9 = SyncReconcileRequestSource9 | any; -export type SyncReconcileRequestEvent10 = { +export type SyncReconcileRequestEvent12 = { count?: number | null | undefined; eventTime?: Date | null | undefined; firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject8 | any | null | undefined; + involvedObject?: InvolvedObject9 | any | null | undefined; lastTimestamp?: Date | null | undefined; message: string; raw?: any | null | undefined; reason: string; - source?: SyncReconcileRequestSource8 | any | null | undefined; + source?: SyncReconcileRequestSource9 | any | null | undefined; type?: string | null | undefined; }; -export const MemoryUnit6 = { +export const MemoryUnit11 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -9740,16 +10002,22 @@ export const MemoryUnit6 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryUnit6 = ClosedEnum; +export type MemoryUnit11 = ClosedEnum; -export type Memory6 = { - unit: MemoryUnit6; +export type Memory11 = { + unit: MemoryUnit11; value: number; }; -export type MemoryUnion6 = Memory6 | any; +export type MemoryUnion11 = Memory11 | any; -export const CpuPodUnit3 = { +export type NodeCounts = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; +}; + +export const CpuAllocatableUnit = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -9757,16 +10025,16 @@ export const CpuPodUnit3 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuPodUnit3 = ClosedEnum; +export type CpuAllocatableUnit = ClosedEnum; -export type CpuPod3 = { - unit: CpuPodUnit3; +export type CpuAllocatable = { + unit: CpuAllocatableUnit; value: number; }; -export type PodCpuUnion3 = CpuPod3 | any; +export type AllocatableCpuUnion = CpuAllocatable | any; -export const MemoryPodUnit3 = { +export const MemoryAllocatableUnit = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -9774,137 +10042,69 @@ export const MemoryPodUnit3 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryPodUnit3 = ClosedEnum; +export type MemoryAllocatableUnit = ClosedEnum; -export type MemoryPod3 = { - unit: MemoryPodUnit3; +export type MemoryAllocatable = { + unit: MemoryAllocatableUnit; value: number; }; -export type PodMemoryUnion3 = MemoryPod3 | any; +export type AllocatableMemoryUnion = MemoryAllocatable | any; -export type OwnerReference3 = { - controller: boolean; - kind: string; - name: string; - uid: string; +export type Allocatable = { + cpu?: CpuAllocatable | any | null | undefined; + memory?: MemoryAllocatable | any | null | undefined; + pods?: number | null | undefined; }; -export type Pod3 = { - cpu?: CpuPod3 | any | null | undefined; - memory?: MemoryPod3 | any | null | undefined; - name: string; - nodeName?: string | null | undefined; - ownerReferences: Array; - phase?: string | null | undefined; - podIp?: string | null | undefined; - ready: boolean; - restartCount: number; - terminatedReason?: string | null | undefined; - uid?: string | null | undefined; - waitingReason?: string | null | undefined; -}; +export const CpuCapacityUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuCapacityUnit = ClosedEnum; -export type Replicas4 = { - available?: number | null | undefined; - current?: number | null | undefined; - desired?: number | null | undefined; - misscheduled?: number | null | undefined; - ready?: number | null | undefined; - updated?: number | null | undefined; +export type CpuCapacity = { + unit: CpuCapacityUnit; + value: number; }; -export const DataReason17 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason17 = ClosedEnum; +export type CapacityCpuUnion = CpuCapacity | any; -export const StatusSeverity17 = { - Info: "info", - Warning: "warning", - Error: "error", +export const MemoryCapacityUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -export type StatusSeverity17 = ClosedEnum; +export type MemoryCapacityUnit = ClosedEnum; -export type DataCollectionIssue17 = { - message: string; - reason: DataReason17; - severity: StatusSeverity17; - source: string; +export type MemoryCapacity = { + unit: MemoryCapacityUnit; + value: number; }; -export const DataHealth17 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth17 = ClosedEnum; - -export const StatusLifecycle17 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle17 = ClosedEnum; +export type CapacityMemoryUnion = MemoryCapacity | any; -export type ResourceHeartbeatStatus17 = { - collectionIssues: Array; - health: DataHealth17; - lifecycle: StatusLifecycle17; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +export type Capacity = { + cpu?: CpuCapacity | any | null | undefined; + memory?: MemoryCapacity | any | null | undefined; + pods?: number | null | undefined; }; -export type WorkloadCondition3 = { - lastTransitionTime?: Date | null | undefined; +export type NodeStatusCondition = { message?: string | null | undefined; reason?: string | null | undefined; status: string; type: string; }; -export type Workload3 = { - availableReplicas?: number | null | undefined; - conditions: Array; - desiredGeneration?: number | null | undefined; - desiredReplicas?: number | null | undefined; - observedGeneration?: number | null | undefined; - readyReplicas?: number | null | undefined; - rolloutReason?: string | null | undefined; - updatedReplicas?: number | null | undefined; -}; - -export type WorkloadUnion3 = Workload3 | any; - -export type DataKubernetes3 = { - commandSupported: boolean; - cpu?: Cpu6 | any | null | undefined; - events: Array; - memory?: Memory6 | any | null | undefined; - name: string; - namespace: string; - pods: Array; - replicas: Replicas4; - restarts?: number | null | undefined; - status: ResourceHeartbeatStatus17; - workload?: Workload3 | any | null | undefined; - backend: "kubernetes"; -}; - -export const CpuDaemonInstanceUnit4 = { +export const UsageCpuUnit = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -9912,16 +10112,16 @@ export const CpuDaemonInstanceUnit4 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuDaemonInstanceUnit4 = ClosedEnum; +export type UsageCpuUnit = ClosedEnum; -export type CpuDaemonInstance4 = { - unit: CpuDaemonInstanceUnit4; +export type UsageCpu = { + unit: UsageCpuUnit; value: number; }; -export type DaemonInstanceCpuUnion4 = CpuDaemonInstance4 | any; +export type UsageCpuUnion = UsageCpu | any; -export const MemoryDaemonInstanceUnit4 = { +export const UsageMemoryUnit = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -9929,103 +10129,74 @@ export const MemoryDaemonInstanceUnit4 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryDaemonInstanceUnit4 = ClosedEnum< - typeof MemoryDaemonInstanceUnit4 ->; +export type UsageMemoryUnit = ClosedEnum; -export type MemoryDaemonInstance4 = { - unit: MemoryDaemonInstanceUnit4; +export type UsageMemory = { + unit: UsageMemoryUnit; value: number; }; -export type DaemonInstanceMemoryUnion4 = MemoryDaemonInstance4 | any; - -export type DaemonInstance4 = { - cpu?: CpuDaemonInstance4 | any | null | undefined; - ip?: string | null | undefined; - machineId?: string | null | undefined; - memory?: MemoryDaemonInstance4 | any | null | undefined; - message?: string | null | undefined; - metricsHealthy?: boolean | null | undefined; - metricsLastUpdated?: string | null | undefined; - metricsStatus?: string | null | undefined; - name: string; - nodeName?: string | null | undefined; - phase?: string | null | undefined; - ready: boolean; - reason?: string | null | undefined; - replicaId: string; - restartCount?: number | null | undefined; - status?: string | null | undefined; - terminatedReason?: string | null | undefined; - waitingReason?: string | null | undefined; -}; +export type UsageMemoryUnion = UsageMemory | any; -export type InvolvedObject7 = { - details?: any | null | undefined; - id?: string | null | undefined; - kind?: string | null | undefined; - machineId?: string | null | undefined; - name?: string | null | undefined; - replicaId?: string | null | undefined; +export type SyncReconcileRequestUsage = { + cpu?: UsageCpu | any | null | undefined; + memory?: UsageMemory | any | null | undefined; }; -export type InvolvedObjectUnion7 = InvolvedObject7 | any; +export type Usage = SyncReconcileRequestUsage | any; -export type SyncReconcileRequestSource7 = { - component?: string | null | undefined; - host?: string | null | undefined; +export type NodeStatus = { + allocatable: Allocatable; + capacity: Capacity; + conditions?: Array | undefined; + containerRuntimeVersion?: string | null | undefined; + kubeletVersion?: string | null | undefined; + labels: { [k: string]: string }; + name: string; + ready: boolean; + roles: Array; + uid?: string | null | undefined; + usage?: SyncReconcileRequestUsage | any | null | undefined; }; -export type SourceUnion7 = SyncReconcileRequestSource7 | any; - -export type SyncReconcileRequestEvent9 = { - count?: number | null | undefined; - details?: any | null | undefined; - eventId?: string | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject7 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource7 | any | null | undefined; - type?: string | null | undefined; +export type PodCounts = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; }; -export const DataReason16 = { +export const DataReason24 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason16 = ClosedEnum; +export type DataReason24 = ClosedEnum; -export const StatusSeverity16 = { +export const StatusSeverity24 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity16 = ClosedEnum; +export type StatusSeverity24 = ClosedEnum; -export type DataCollectionIssue16 = { +export type DataCollectionIssue24 = { message: string; - reason: DataReason16; - severity: StatusSeverity16; + reason: DataReason24; + severity: StatusSeverity24; source: string; }; -export const DataHealth16 = { +export const DataHealth24 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth16 = ClosedEnum; +export type DataHealth24 = ClosedEnum; -export const StatusLifecycle16 = { +export const StatusLifecycle24 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -10037,158 +10208,74 @@ export const StatusLifecycle16 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle16 = ClosedEnum; +export type StatusLifecycle24 = ClosedEnum; -export type ResourceHeartbeatStatus16 = { - collectionIssues: Array; - health: DataHealth16; - lifecycle: StatusLifecycle16; +export type ResourceHeartbeatStatus24 = { + collectionIssues: Array; + health: DataHealth24; + lifecycle: StatusLifecycle24; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataMachines1 = { - assignedMachines: number; - capacityGroup: string; - commandSupported: boolean; - daemonInstances: Array; - daemonName?: string | undefined; - desiredMachines: number; - events: Array; - healthyInstances: number; - horizonClusterId: string; - horizonStatus: string; - horizonStatusMessage?: string | null | undefined; - horizonStatusReason?: string | null | undefined; - latestUpdateTimestamp: string; - status: ResourceHeartbeatStatus16; - unavailableInstances: number; - backend: "machines"; +export type SyncReconcileRequestData1 = { + cpu?: Cpu11 | any | null | undefined; + events: Array; + memory?: Memory11 | any | null | undefined; + name: string; + namespace?: string | null | undefined; + nodeCounts: NodeCounts; + nodeStatuses?: Array | undefined; + podCounts: PodCounts; + region?: string | null | undefined; + status: ResourceHeartbeatStatus24; + version?: string | null | undefined; }; -export const CpuDaemonInstanceUnit3 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type CpuDaemonInstanceUnit3 = ClosedEnum; - -export type CpuDaemonInstance3 = { - unit: CpuDaemonInstanceUnit3; - value: number; +export type DataKubernetesCluster = { + data: SyncReconcileRequestData1; + resourceType: "kubernetes-cluster"; }; -export type DaemonInstanceCpuUnion3 = CpuDaemonInstance3 | any; +export type Nodes5 = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; +}; -export const MemoryDaemonInstanceUnit3 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type MemoryDaemonInstanceUnit3 = ClosedEnum< - typeof MemoryDaemonInstanceUnit3 ->; - -export type MemoryDaemonInstance3 = { - unit: MemoryDaemonInstanceUnit3; - value: number; -}; - -export type DaemonInstanceMemoryUnion3 = MemoryDaemonInstance3 | any; - -export type DaemonInstance3 = { - cpu?: CpuDaemonInstance3 | any | null | undefined; - ip?: string | null | undefined; - machineId?: string | null | undefined; - memory?: MemoryDaemonInstance3 | any | null | undefined; - message?: string | null | undefined; - metricsHealthy?: boolean | null | undefined; - metricsLastUpdated?: string | null | undefined; - metricsStatus?: string | null | undefined; - name: string; - nodeName?: string | null | undefined; - phase?: string | null | undefined; - ready: boolean; - reason?: string | null | undefined; - replicaId: string; - restartCount?: number | null | undefined; - status?: string | null | undefined; - terminatedReason?: string | null | undefined; - waitingReason?: string | null | undefined; -}; - -export type InvolvedObject6 = { - details?: any | null | undefined; - id?: string | null | undefined; - kind?: string | null | undefined; - machineId?: string | null | undefined; - name?: string | null | undefined; - replicaId?: string | null | undefined; -}; - -export type InvolvedObjectUnion6 = InvolvedObject6 | any; - -export type SyncReconcileRequestSource6 = { - component?: string | null | undefined; - host?: string | null | undefined; -}; - -export type SourceUnion6 = SyncReconcileRequestSource6 | any; - -export type SyncReconcileRequestEvent8 = { - count?: number | null | undefined; - details?: any | null | undefined; - eventId?: string | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject6 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource6 | any | null | undefined; - type?: string | null | undefined; -}; - -export const DataReason15 = { +export const DataReason23 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason15 = ClosedEnum; +export type DataReason23 = ClosedEnum; -export const StatusSeverity15 = { +export const StatusSeverity23 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity15 = ClosedEnum; +export type StatusSeverity23 = ClosedEnum; -export type DataCollectionIssue15 = { +export type DataCollectionIssue23 = { message: string; - reason: DataReason15; - severity: StatusSeverity15; + reason: DataReason23; + severity: StatusSeverity23; source: string; }; -export const DataHealth15 = { +export const DataHealth23 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth15 = ClosedEnum; +export type DataHealth23 = ClosedEnum; -export const StatusLifecycle15 = { +export const StatusLifecycle23 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -10200,37 +10287,82 @@ export const StatusLifecycle15 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle15 = ClosedEnum; +export type StatusLifecycle23 = ClosedEnum; -export type ResourceHeartbeatStatus15 = { - collectionIssues: Array; - health: DataHealth15; - lifecycle: StatusLifecycle15; +export type ResourceHeartbeatStatus23 = { + collectionIssues: Array; + health: DataHealth23; + lifecycle: StatusLifecycle23; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzure1 = { - assignedMachines: number; - capacityGroup: string; - commandSupported: boolean; - daemonInstances: Array; - daemonName?: string | undefined; - desiredMachines: number; - events: Array; - healthyInstances: number; - horizonClusterId: string; - horizonStatus: string; - horizonStatusMessage?: string | null | undefined; - horizonStatusReason?: string | null | undefined; - latestUpdateTimestamp: string; - status: ResourceHeartbeatStatus15; - unavailableInstances: number; - backend: "azure"; +export type DataLocal5 = { + dockerApiVersion?: string | null | undefined; + dockerArch?: string | null | undefined; + dockerAvailable: boolean; + dockerOs?: string | null | undefined; + dockerVersion?: string | null | undefined; + hostIdentifier?: string | null | undefined; + name: string; + networkAvailable: boolean; + networkName?: string | null | undefined; + nodes: Nodes5; + runningContainers?: number | null | undefined; + status: ResourceHeartbeatStatus23; + trackedContainers?: number | null | undefined; + backend: "local"; }; -export const CpuDaemonInstanceUnit2 = { +export const Category4 = { + Quota: "quota", + Capacity: "capacity", + Allocation: "allocation", + Other: "other", +} as const; +export type Category4 = ClosedEnum; + +export type CapacityBlocker4 = { + category: Category4; + message: string; + observedAt: Date; + providerCode?: string | null | undefined; + providerReference?: string | null | undefined; +}; + +export type CapacityBlockerUnion4 = CapacityBlocker4 | any; + +export type Blocker4 = { + reason: string; + replicaId: string; + schedulingMode: string; + state: string; + workloadName: string; +}; + +export const DrainProgressStatus4 = { + Draining: "draining", + Drained: "drained", + Terminating: "terminating", +} as const; +export type DrainProgressStatus4 = ClosedEnum; + +export type DrainProgress4 = { + blockers?: Array | undefined; + drainDeadlineAt?: string | null | undefined; + drainRequestedAt?: string | null | undefined; + drainedAt?: string | null | undefined; + force: boolean; + machineId: string; + replicaCount: number; + stalled: boolean; + status: DrainProgressStatus4; +}; + +export type DrainProgressUnion4 = DrainProgress4 | any; + +export const UtilizationUnit4 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10238,16 +10370,37 @@ export const CpuDaemonInstanceUnit2 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuDaemonInstanceUnit2 = ClosedEnum; +export type UtilizationUnit4 = ClosedEnum; -export type CpuDaemonInstance2 = { - unit: CpuDaemonInstanceUnit2; +export type Utilization4 = { + unit: UtilizationUnit4; value: number; }; -export type DaemonInstanceCpuUnion2 = CpuDaemonInstance2 | any; +export type UtilizationUnion4 = Utilization4 | any; -export const MemoryDaemonInstanceUnit2 = { +export type Recommendation4 = { + desiredMachines: number; + reason?: string | null | undefined; + unschedulableReplicas?: number | null | undefined; + utilization?: Utilization4 | any | null | undefined; +}; + +export type RecommendationUnion4 = Recommendation4 | any; + +export type CapacityGroup4 = { + capacityBlocker?: CapacityBlocker4 | any | null | undefined; + currentMachines: number; + desiredMachines: number; + drainProgress?: DrainProgress4 | any | null | undefined; + groupId: string; + instanceType?: string | null | undefined; + maxMachines?: number | null | undefined; + minMachines?: number | null | undefined; + recommendation?: Recommendation4 | any | null | undefined; +}; + +export const CpuUnit10 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10255,103 +10408,97 @@ export const MemoryDaemonInstanceUnit2 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryDaemonInstanceUnit2 = ClosedEnum< - typeof MemoryDaemonInstanceUnit2 ->; +export type CpuUnit10 = ClosedEnum; -export type MemoryDaemonInstance2 = { - unit: MemoryDaemonInstanceUnit2; +export type Cpu10 = { + unit: CpuUnit10; value: number; }; -export type DaemonInstanceMemoryUnion2 = MemoryDaemonInstance2 | any; +export type CpuUnion10 = Cpu10 | any; -export type DaemonInstance2 = { - cpu?: CpuDaemonInstance2 | any | null | undefined; - ip?: string | null | undefined; - machineId?: string | null | undefined; - memory?: MemoryDaemonInstance2 | any | null | undefined; - message?: string | null | undefined; - metricsHealthy?: boolean | null | undefined; - metricsLastUpdated?: string | null | undefined; - metricsStatus?: string | null | undefined; - name: string; - nodeName?: string | null | undefined; - phase?: string | null | undefined; - ready: boolean; - reason?: string | null | undefined; +export type DrainBlocker = { + reason: string; replicaId: string; - restartCount?: number | null | undefined; - status?: string | null | undefined; - terminatedReason?: string | null | undefined; - waitingReason?: string | null | undefined; + schedulingMode: string; + state: string; + workloadName: string; }; -export type InvolvedObject5 = { - details?: any | null | undefined; - id?: string | null | undefined; - kind?: string | null | undefined; - machineId?: string | null | undefined; - name?: string | null | undefined; - replicaId?: string | null | undefined; +export type SyncReconcileRequestMachine = { + capacityGroup: string; + cpuCores?: number | null | undefined; + drainBlockers?: Array | undefined; + drainDeadlineAt?: string | null | undefined; + drainForce: boolean; + drainRequestedAt?: string | null | undefined; + drainedAt?: string | null | undefined; + horizondVersion?: string | null | undefined; + lastHeartbeat: string; + machineId: string; + memoryBytes?: number | null | undefined; + overlayIp?: string | null | undefined; + publicIp?: string | null | undefined; + replicaCount: number; + status: string; + zone: string; }; -export type InvolvedObjectUnion5 = InvolvedObject5 | any; +export const MemoryUnit10 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryUnit10 = ClosedEnum; -export type SyncReconcileRequestSource5 = { - component?: string | null | undefined; - host?: string | null | undefined; +export type Memory10 = { + unit: MemoryUnit10; + value: number; }; -export type SourceUnion5 = SyncReconcileRequestSource5 | any; +export type MemoryUnion10 = Memory10 | any; -export type SyncReconcileRequestEvent7 = { - count?: number | null | undefined; - details?: any | null | undefined; - eventId?: string | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject5 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource5 | any | null | undefined; - type?: string | null | undefined; +export type Nodes4 = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; }; -export const DataReason14 = { +export const DataReason22 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason14 = ClosedEnum; +export type DataReason22 = ClosedEnum; -export const StatusSeverity14 = { +export const StatusSeverity22 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity14 = ClosedEnum; +export type StatusSeverity22 = ClosedEnum; -export type DataCollectionIssue14 = { +export type DataCollectionIssue22 = { message: string; - reason: DataReason14; - severity: StatusSeverity14; + reason: DataReason22; + severity: StatusSeverity22; source: string; }; -export const DataHealth14 = { +export const DataHealth22 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth14 = ClosedEnum; +export type DataHealth22 = ClosedEnum; -export const StatusLifecycle14 = { +export const StatusLifecycle22 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -10363,37 +10510,77 @@ export const StatusLifecycle14 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle14 = ClosedEnum; +export type StatusLifecycle22 = ClosedEnum; -export type ResourceHeartbeatStatus14 = { - collectionIssues: Array; - health: DataHealth14; - lifecycle: StatusLifecycle14; +export type ResourceHeartbeatStatus22 = { + collectionIssues: Array; + health: DataHealth22; + lifecycle: StatusLifecycle22; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcp1 = { - assignedMachines: number; - capacityGroup: string; - commandSupported: boolean; - daemonInstances: Array; - daemonName?: string | undefined; - desiredMachines: number; - events: Array; - healthyInstances: number; - horizonClusterId: string; - horizonStatus: string; - horizonStatusMessage?: string | null | undefined; - horizonStatusReason?: string | null | undefined; - latestUpdateTimestamp: string; - status: ResourceHeartbeatStatus14; - unavailableInstances: number; - backend: "gcp"; +export type DataMachines2 = { + backendClusterId?: string | null | undefined; + capacityGroups: Array; + cpu?: Cpu10 | any | null | undefined; + machines: Array; + memory?: Memory10 | any | null | undefined; + name: string; + nodes: Nodes4; + status: ResourceHeartbeatStatus22; + backend: "machines"; }; -export const CpuDaemonInstanceUnit1 = { +export const Category3 = { + Quota: "quota", + Capacity: "capacity", + Allocation: "allocation", + Other: "other", +} as const; +export type Category3 = ClosedEnum; + +export type CapacityBlocker3 = { + category: Category3; + message: string; + observedAt: Date; + providerCode?: string | null | undefined; + providerReference?: string | null | undefined; +}; + +export type CapacityBlockerUnion3 = CapacityBlocker3 | any; + +export type Blocker3 = { + reason: string; + replicaId: string; + schedulingMode: string; + state: string; + workloadName: string; +}; + +export const DrainProgressStatus3 = { + Draining: "draining", + Drained: "drained", + Terminating: "terminating", +} as const; +export type DrainProgressStatus3 = ClosedEnum; + +export type DrainProgress3 = { + blockers?: Array | undefined; + drainDeadlineAt?: string | null | undefined; + drainRequestedAt?: string | null | undefined; + drainedAt?: string | null | undefined; + force: boolean; + machineId: string; + replicaCount: number; + stalled: boolean; + status: DrainProgressStatus3; +}; + +export type DrainProgressUnion3 = DrainProgress3 | any; + +export const UtilizationUnit3 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10401,16 +10588,37 @@ export const CpuDaemonInstanceUnit1 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuDaemonInstanceUnit1 = ClosedEnum; +export type UtilizationUnit3 = ClosedEnum; -export type CpuDaemonInstance1 = { - unit: CpuDaemonInstanceUnit1; +export type Utilization3 = { + unit: UtilizationUnit3; value: number; }; -export type DaemonInstanceCpuUnion1 = CpuDaemonInstance1 | any; +export type UtilizationUnion3 = Utilization3 | any; -export const MemoryDaemonInstanceUnit1 = { +export type Recommendation3 = { + desiredMachines: number; + reason?: string | null | undefined; + unschedulableReplicas?: number | null | undefined; + utilization?: Utilization3 | any | null | undefined; +}; + +export type RecommendationUnion3 = Recommendation3 | any; + +export type CapacityGroup3 = { + capacityBlocker?: CapacityBlocker3 | any | null | undefined; + currentMachines: number; + desiredMachines: number; + drainProgress?: DrainProgress3 | any | null | undefined; + groupId: string; + instanceType?: string | null | undefined; + maxMachines?: number | null | undefined; + minMachines?: number | null | undefined; + recommendation?: Recommendation3 | any | null | undefined; +}; + +export const CpuUnit9 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10418,103 +10626,78 @@ export const MemoryDaemonInstanceUnit1 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryDaemonInstanceUnit1 = ClosedEnum< - typeof MemoryDaemonInstanceUnit1 ->; +export type CpuUnit9 = ClosedEnum; -export type MemoryDaemonInstance1 = { - unit: MemoryDaemonInstanceUnit1; +export type Cpu9 = { + unit: CpuUnit9; value: number; }; -export type DaemonInstanceMemoryUnion1 = MemoryDaemonInstance1 | any; +export type CpuUnion9 = Cpu9 | any; -export type DaemonInstance1 = { - cpu?: CpuDaemonInstance1 | any | null | undefined; - ip?: string | null | undefined; - machineId?: string | null | undefined; - memory?: MemoryDaemonInstance1 | any | null | undefined; - message?: string | null | undefined; - metricsHealthy?: boolean | null | undefined; - metricsLastUpdated?: string | null | undefined; - metricsStatus?: string | null | undefined; - name: string; - nodeName?: string | null | undefined; - phase?: string | null | undefined; - ready: boolean; - reason?: string | null | undefined; - replicaId: string; - restartCount?: number | null | undefined; - status?: string | null | undefined; - terminatedReason?: string | null | undefined; - waitingReason?: string | null | undefined; -}; +export const MemoryUnit9 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryUnit9 = ClosedEnum; -export type InvolvedObject4 = { - details?: any | null | undefined; - id?: string | null | undefined; - kind?: string | null | undefined; - machineId?: string | null | undefined; - name?: string | null | undefined; - replicaId?: string | null | undefined; +export type Memory9 = { + unit: MemoryUnit9; + value: number; }; -export type InvolvedObjectUnion4 = InvolvedObject4 | any; +export type MemoryUnion9 = Memory9 | any; -export type SyncReconcileRequestSource4 = { - component?: string | null | undefined; - host?: string | null | undefined; +export type Nodes3 = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; }; -export type SourceUnion4 = SyncReconcileRequestSource4 | any; +export type ProviderFleet3 = { + currentMachines: number; + desiredMachines: number; + groupId: string; + location?: string | null | undefined; + providerId: string; +}; -export type SyncReconcileRequestEvent6 = { - count?: number | null | undefined; - details?: any | null | undefined; - eventId?: string | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject4 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource4 | any | null | undefined; - type?: string | null | undefined; -}; - -export const DataReason13 = { +export const DataReason21 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason13 = ClosedEnum; +export type DataReason21 = ClosedEnum; -export const StatusSeverity13 = { +export const StatusSeverity21 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity13 = ClosedEnum; +export type StatusSeverity21 = ClosedEnum; -export type DataCollectionIssue13 = { +export type DataCollectionIssue21 = { message: string; - reason: DataReason13; - severity: StatusSeverity13; + reason: DataReason21; + severity: StatusSeverity21; source: string; }; -export const DataHealth13 = { +export const DataHealth21 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth13 = ClosedEnum; +export type DataHealth21 = ClosedEnum; -export const StatusLifecycle13 = { +export const StatusLifecycle21 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -10526,80 +10709,78 @@ export const StatusLifecycle13 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle13 = ClosedEnum; +export type StatusLifecycle21 = ClosedEnum; -export type ResourceHeartbeatStatus13 = { - collectionIssues: Array; - health: DataHealth13; - lifecycle: StatusLifecycle13; +export type ResourceHeartbeatStatus21 = { + collectionIssues: Array; + health: DataHealth21; + lifecycle: StatusLifecycle21; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAws1 = { - assignedMachines: number; - capacityGroup: string; - commandSupported: boolean; - daemonInstances: Array; - daemonName?: string | undefined; - desiredMachines: number; - events: Array; - healthyInstances: number; - horizonClusterId: string; - horizonStatus: string; - horizonStatusMessage?: string | null | undefined; - horizonStatusReason?: string | null | undefined; - latestUpdateTimestamp: string; - status: ResourceHeartbeatStatus13; - unavailableInstances: number; - backend: "aws"; +export type DataAzure2 = { + backendClusterId?: string | null | undefined; + capacityGroups: Array; + cpu?: Cpu9 | any | null | undefined; + memory?: Memory9 | any | null | undefined; + name: string; + nodes: Nodes3; + providerFleets: Array; + region?: string | null | undefined; + status: ResourceHeartbeatStatus21; + backend: "azure"; }; -export type SyncReconcileRequestDataUnion4 = - | DataAws1 - | DataGcp1 - | DataAzure1 - | DataMachines1 - | DataKubernetes3 - | DataLocal4; +export const Category2 = { + Quota: "quota", + Capacity: "capacity", + Allocation: "allocation", + Other: "other", +} as const; +export type Category2 = ClosedEnum; -export type DataDaemon = { - data: - | DataAws1 - | DataGcp1 - | DataAzure1 - | DataMachines1 - | DataKubernetes3 - | DataLocal4; - resourceType: "daemon"; +export type CapacityBlocker2 = { + category: Category2; + message: string; + observedAt: Date; + providerCode?: string | null | undefined; + providerReference?: string | null | undefined; }; -export const ContainerUnitCpuUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type ContainerUnitCpuUnit = ClosedEnum; +export type CapacityBlockerUnion2 = CapacityBlocker2 | any; -export type ContainerUnitCpu = { - unit: ContainerUnitCpuUnit; - value: number; +export type Blocker2 = { + reason: string; + replicaId: string; + schedulingMode: string; + state: string; + workloadName: string; }; -export type ContainerUnitCpuUnion = ContainerUnitCpu | any; - -export const ContainerUnitKind = { - Container: "container", - Process: "process", - Daemon: "daemon", +export const DrainProgressStatus2 = { + Draining: "draining", + Drained: "drained", + Terminating: "terminating", } as const; -export type ContainerUnitKind = ClosedEnum; +export type DrainProgressStatus2 = ClosedEnum; -export const ContainerUnitMemoryUnit = { +export type DrainProgress2 = { + blockers?: Array | undefined; + drainDeadlineAt?: string | null | undefined; + drainRequestedAt?: string | null | undefined; + drainedAt?: string | null | undefined; + force: boolean; + machineId: string; + replicaCount: number; + stalled: boolean; + status: DrainProgressStatus2; +}; + +export type DrainProgressUnion2 = DrainProgress2 | any; + +export const UtilizationUnit2 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10607,32 +10788,37 @@ export const ContainerUnitMemoryUnit = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type ContainerUnitMemoryUnit = ClosedEnum< - typeof ContainerUnitMemoryUnit ->; +export type UtilizationUnit2 = ClosedEnum; -export type ContainerUnitMemory = { - unit: ContainerUnitMemoryUnit; +export type Utilization2 = { + unit: UtilizationUnit2; value: number; }; -export type ContainerUnitMemoryUnion = ContainerUnitMemory | any; +export type UtilizationUnion2 = Utilization2 | any; -export type ContainerUnit = { - cpu?: ContainerUnitCpu | any | null | undefined; - kind: ContainerUnitKind; - memory?: ContainerUnitMemory | any | null | undefined; - name: string; - phase?: string | null | undefined; - pid?: number | null | undefined; - ready: boolean; - restartCount?: number | null | undefined; - unitId: string; +export type Recommendation2 = { + desiredMachines: number; + reason?: string | null | undefined; + unschedulableReplicas?: number | null | undefined; + utilization?: Utilization2 | any | null | undefined; }; -export type ContainerUnitUnion = ContainerUnit | any; +export type RecommendationUnion2 = Recommendation2 | any; -export const CpuUnit5 = { +export type CapacityGroup2 = { + capacityBlocker?: CapacityBlocker2 | any | null | undefined; + currentMachines: number; + desiredMachines: number; + drainProgress?: DrainProgress2 | any | null | undefined; + groupId: string; + instanceType?: string | null | undefined; + maxMachines?: number | null | undefined; + minMachines?: number | null | undefined; + recommendation?: Recommendation2 | any | null | undefined; +}; + +export const CpuUnit8 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10640,42 +10826,16 @@ export const CpuUnit5 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuUnit5 = ClosedEnum; +export type CpuUnit8 = ClosedEnum; -export type Cpu5 = { - unit: CpuUnit5; +export type Cpu8 = { + unit: CpuUnit8; value: number; }; -export type CpuUnion5 = Cpu5 | any; - -export const EventSeverity2 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type EventSeverity2 = ClosedEnum; - -export type SyncReconcileRequestSubject2 = { - id?: string | null | undefined; - kind: string; - name?: string | null | undefined; -}; - -export type SyncReconcileRequestSubjectUnion2 = - | SyncReconcileRequestSubject2 - | any; - -export type SyncReconcileRequestEvent5 = { - kind: string; - message: string; - raw?: any | null | undefined; - severity: EventSeverity2; - subject?: SyncReconcileRequestSubject2 | any | null | undefined; - timestamp: Date; -}; +export type CpuUnion8 = Cpu8 | any; -export const MemoryUnit5 = { +export const MemoryUnit8 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10683,47 +10843,61 @@ export const MemoryUnit5 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryUnit5 = ClosedEnum; +export type MemoryUnit8 = ClosedEnum; -export type Memory5 = { - unit: MemoryUnit5; +export type Memory8 = { + unit: MemoryUnit8; value: number; }; -export type MemoryUnion5 = Memory5 | any; +export type MemoryUnion8 = Memory8 | any; -export const DataReason12 = { +export type Nodes2 = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; +}; + +export type ProviderFleet2 = { + currentMachines: number; + desiredMachines: number; + groupId: string; + location?: string | null | undefined; + providerId: string; +}; + +export const DataReason20 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason12 = ClosedEnum; +export type DataReason20 = ClosedEnum; -export const StatusSeverity12 = { +export const StatusSeverity20 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity12 = ClosedEnum; +export type StatusSeverity20 = ClosedEnum; -export type DataCollectionIssue12 = { +export type DataCollectionIssue20 = { message: string; - reason: DataReason12; - severity: StatusSeverity12; + reason: DataReason20; + severity: StatusSeverity20; source: string; }; -export const DataHealth12 = { +export const DataHealth20 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth12 = ClosedEnum; +export type DataHealth20 = ClosedEnum; -export const StatusLifecycle12 = { +export const StatusLifecycle20 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -10735,85 +10909,78 @@ export const StatusLifecycle12 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle12 = ClosedEnum; +export type StatusLifecycle20 = ClosedEnum; -export type ResourceHeartbeatStatus12 = { - collectionIssues: Array; - health: DataHealth12; - lifecycle: StatusLifecycle12; +export type ResourceHeartbeatStatus20 = { + collectionIssues: Array; + health: DataHealth20; + lifecycle: StatusLifecycle20; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal3 = { - bindMountCount: number; - containerId?: string | null | undefined; - containerUnit?: ContainerUnit | any | null | undefined; - cpu?: Cpu5 | any | null | undefined; - events: Array; - image?: string | null | undefined; - localUrl?: string | null | undefined; - memory?: Memory5 | any | null | undefined; - name?: string | null | undefined; - portCount: number; - restartCount?: number | null | undefined; - runtimeReachable: boolean; - runtimeStatus?: string | null | undefined; - status: ResourceHeartbeatStatus12; - backend: "local"; +export type DataGcp2 = { + backendClusterId?: string | null | undefined; + capacityGroups: Array; + cpu?: Cpu8 | any | null | undefined; + memory?: Memory8 | any | null | undefined; + name: string; + nodes: Nodes2; + providerFleets: Array; + region?: string | null | undefined; + status: ResourceHeartbeatStatus20; + backend: "gcp"; }; -export const CpuUnit4 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const Category1 = { + Quota: "quota", + Capacity: "capacity", + Allocation: "allocation", + Other: "other", } as const; -export type CpuUnit4 = ClosedEnum; +export type Category1 = ClosedEnum; -export type Cpu4 = { - unit: CpuUnit4; - value: number; +export type CapacityBlocker1 = { + category: Category1; + message: string; + observedAt: Date; + providerCode?: string | null | undefined; + providerReference?: string | null | undefined; }; -export type CpuUnion4 = Cpu4 | any; +export type CapacityBlockerUnion1 = CapacityBlocker1 | any; -export type InvolvedObject3 = { - apiVersion?: string | null | undefined; - fieldPath?: string | null | undefined; - kind?: string | null | undefined; - name?: string | null | undefined; - namespace?: string | null | undefined; - resourceVersion?: string | null | undefined; - uid?: string | null | undefined; +export type Blocker1 = { + reason: string; + replicaId: string; + schedulingMode: string; + state: string; + workloadName: string; }; -export type InvolvedObjectUnion3 = InvolvedObject3 | any; +export const DrainProgressStatus1 = { + Draining: "draining", + Drained: "drained", + Terminating: "terminating", +} as const; +export type DrainProgressStatus1 = ClosedEnum; -export type SyncReconcileRequestSource3 = { - component?: string | null | undefined; - host?: string | null | undefined; +export type DrainProgress1 = { + blockers?: Array | undefined; + drainDeadlineAt?: string | null | undefined; + drainRequestedAt?: string | null | undefined; + drainedAt?: string | null | undefined; + force: boolean; + machineId: string; + replicaCount: number; + stalled: boolean; + status: DrainProgressStatus1; }; -export type SourceUnion3 = SyncReconcileRequestSource3 | any; - -export type SyncReconcileRequestEvent4 = { - count?: number | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject3 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource3 | any | null | undefined; - type?: string | null | undefined; -}; +export type DrainProgressUnion1 = DrainProgress1 | any; -export const MemoryUnit4 = { +export const UtilizationUnit1 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10821,16 +10988,37 @@ export const MemoryUnit4 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryUnit4 = ClosedEnum; +export type UtilizationUnit1 = ClosedEnum; -export type Memory4 = { - unit: MemoryUnit4; +export type Utilization1 = { + unit: UtilizationUnit1; value: number; }; -export type MemoryUnion4 = Memory4 | any; +export type UtilizationUnion1 = Utilization1 | any; -export const CpuPodUnit2 = { +export type Recommendation1 = { + desiredMachines: number; + reason?: string | null | undefined; + unschedulableReplicas?: number | null | undefined; + utilization?: Utilization1 | any | null | undefined; +}; + +export type RecommendationUnion1 = Recommendation1 | any; + +export type CapacityGroup1 = { + capacityBlocker?: CapacityBlocker1 | any | null | undefined; + currentMachines: number; + desiredMachines: number; + drainProgress?: DrainProgress1 | any | null | undefined; + groupId: string; + instanceType?: string | null | undefined; + maxMachines?: number | null | undefined; + minMachines?: number | null | undefined; + recommendation?: Recommendation1 | any | null | undefined; +}; + +export const CpuUnit7 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10838,16 +11026,16 @@ export const CpuPodUnit2 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuPodUnit2 = ClosedEnum; +export type CpuUnit7 = ClosedEnum; -export type CpuPod2 = { - unit: CpuPodUnit2; +export type Cpu7 = { + unit: CpuUnit7; value: number; }; -export type PodCpuUnion2 = CpuPod2 | any; +export type CpuUnion7 = Cpu7 | any; -export const MemoryPodUnit2 = { +export const MemoryUnit7 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -10855,78 +11043,61 @@ export const MemoryPodUnit2 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryPodUnit2 = ClosedEnum; +export type MemoryUnit7 = ClosedEnum; -export type MemoryPod2 = { - unit: MemoryPodUnit2; +export type Memory7 = { + unit: MemoryUnit7; value: number; }; -export type PodMemoryUnion2 = MemoryPod2 | any; - -export type OwnerReference2 = { - controller: boolean; - kind: string; - name: string; - uid: string; -}; - -export type Pod2 = { - cpu?: CpuPod2 | any | null | undefined; - memory?: MemoryPod2 | any | null | undefined; - name: string; - nodeName?: string | null | undefined; - ownerReferences: Array; - phase?: string | null | undefined; - podIp?: string | null | undefined; - ready: boolean; - restartCount: number; - terminatedReason?: string | null | undefined; - uid?: string | null | undefined; - waitingReason?: string | null | undefined; -}; +export type MemoryUnion7 = Memory7 | any; -export type Replicas3 = { - available?: number | null | undefined; +export type Nodes1 = { current?: number | null | undefined; desired?: number | null | undefined; - misscheduled?: number | null | undefined; ready?: number | null | undefined; - updated?: number | null | undefined; }; -export const DataReason11 = { +export type ProviderFleet1 = { + currentMachines: number; + desiredMachines: number; + groupId: string; + location?: string | null | undefined; + providerId: string; +}; + +export const DataReason19 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason11 = ClosedEnum; +export type DataReason19 = ClosedEnum; -export const StatusSeverity11 = { +export const StatusSeverity19 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity11 = ClosedEnum; +export type StatusSeverity19 = ClosedEnum; -export type DataCollectionIssue11 = { +export type DataCollectionIssue19 = { message: string; - reason: DataReason11; - severity: StatusSeverity11; + reason: DataReason19; + severity: StatusSeverity19; source: string; }; -export const DataHealth11 = { +export const DataHealth19 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth11 = ClosedEnum; +export type DataHealth19 = ClosedEnum; -export const StatusLifecycle11 = { +export const StatusLifecycle19 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -10938,113 +11109,43 @@ export const StatusLifecycle11 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle11 = ClosedEnum; +export type StatusLifecycle19 = ClosedEnum; -export type ResourceHeartbeatStatus11 = { - collectionIssues: Array; - health: DataHealth11; - lifecycle: StatusLifecycle11; +export type ResourceHeartbeatStatus19 = { + collectionIssues: Array; + health: DataHealth19; + lifecycle: StatusLifecycle19; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type WorkloadCondition2 = { - lastTransitionTime?: Date | null | undefined; - message?: string | null | undefined; - reason?: string | null | undefined; - status: string; - type: string; +export type DataAws2 = { + backendClusterId?: string | null | undefined; + capacityGroups: Array; + cpu?: Cpu7 | any | null | undefined; + memory?: Memory7 | any | null | undefined; + name: string; + nodes: Nodes1; + providerFleets: Array; + region?: string | null | undefined; + status: ResourceHeartbeatStatus19; + backend: "aws"; }; -export type Workload2 = { - availableReplicas?: number | null | undefined; - conditions: Array; - desiredGeneration?: number | null | undefined; - desiredReplicas?: number | null | undefined; - observedGeneration?: number | null | undefined; - readyReplicas?: number | null | undefined; - rolloutReason?: string | null | undefined; - updatedReplicas?: number | null | undefined; -}; - -export type WorkloadUnion2 = Workload2 | any; - -export const WorkloadKind2 = { - Deployment: "deployment", - StatefulSet: "statefulSet", - DaemonSet: "daemonSet", - ReplicaSet: "replicaSet", - Pod: "pod", -} as const; -export type WorkloadKind2 = ClosedEnum; - -export type DataKubernetes2 = { - cpu?: Cpu4 | any | null | undefined; - events: Array; - memory?: Memory4 | any | null | undefined; - name: string; - namespace: string; - pods: Array; - replicas: Replicas3; - restarts?: number | null | undefined; - status: ResourceHeartbeatStatus11; - workload?: Workload2 | any | null | undefined; - workloadKind: WorkloadKind2; - backend: "kubernetes"; -}; - -export const CpuUnit3 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type CpuUnit3 = ClosedEnum; - -export type Cpu3 = { - unit: CpuUnit3; - value: number; -}; - -export type CpuUnion3 = Cpu3 | any; - -export type InvolvedObject2 = { - details?: any | null | undefined; - id?: string | null | undefined; - kind?: string | null | undefined; - machineId?: string | null | undefined; - name?: string | null | undefined; - replicaId?: string | null | undefined; -}; - -export type InvolvedObjectUnion2 = InvolvedObject2 | any; - -export type SyncReconcileRequestSource2 = { - component?: string | null | undefined; - host?: string | null | undefined; -}; - -export type SourceUnion2 = SyncReconcileRequestSource2 | any; +export type SyncReconcileRequestDataUnion5 = + | DataAws2 + | DataGcp2 + | DataAzure2 + | DataMachines2 + | DataLocal5; -export type SyncReconcileRequestEvent3 = { - count?: number | null | undefined; - details?: any | null | undefined; - eventId?: string | null | undefined; - eventTime?: Date | null | undefined; - firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject2 | any | null | undefined; - lastTimestamp?: Date | null | undefined; - message: string; - raw?: any | null | undefined; - reason: string; - source?: SyncReconcileRequestSource2 | any | null | undefined; - type?: string | null | undefined; +export type DataComputeCluster = { + data: DataAws2 | DataGcp2 | DataAzure2 | DataMachines2 | DataLocal5; + resourceType: "compute-cluster"; }; -export const MemoryUnit3 = { +export const DaemonInstanceCpuUnit = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -11052,33 +11153,23 @@ export const MemoryUnit3 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryUnit3 = ClosedEnum; +export type DaemonInstanceCpuUnit = ClosedEnum; -export type Memory3 = { - unit: MemoryUnit3; +export type DaemonInstanceCpu = { + unit: DaemonInstanceCpuUnit; value: number; }; -export type MemoryUnion3 = Memory3 | any; +export type DaemonInstanceCpuUnion5 = DaemonInstanceCpu | any; -export const CpuReplicaUnitUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", +export const DaemonInstanceKind = { + Container: "container", + Process: "process", + Daemon: "daemon", } as const; -export type CpuReplicaUnitUnit = ClosedEnum; - -export type CpuReplicaUnit = { - unit: CpuReplicaUnitUnit; - value: number; -}; - -export type ReplicaUnitCpuUnion = CpuReplicaUnit | any; +export type DaemonInstanceKind = ClosedEnum; -export const MemoryReplicaUnitUnit = { +export const DaemonInstanceMemoryUnit = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -11086,277 +11177,89 @@ export const MemoryReplicaUnitUnit = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryReplicaUnitUnit = ClosedEnum; +export type DaemonInstanceMemoryUnit = ClosedEnum< + typeof DaemonInstanceMemoryUnit +>; -export type MemoryReplicaUnit = { - unit: MemoryReplicaUnitUnit; +export type DaemonInstanceMemory = { + unit: DaemonInstanceMemoryUnit; value: number; }; -export type ReplicaUnitMemoryUnion = MemoryReplicaUnit | any; +export type DaemonInstanceMemoryUnion5 = DaemonInstanceMemory | any; -export type ReplicaUnit = { - cpu?: CpuReplicaUnit | any | null | undefined; - ip?: string | null | undefined; - machineId?: string | null | undefined; - memory?: MemoryReplicaUnit | any | null | undefined; - message?: string | null | undefined; - metricsHealthy?: boolean | null | undefined; - metricsLastUpdated?: string | null | undefined; - metricsStatus?: string | null | undefined; +export type DaemonInstance5 = { + cpu?: DaemonInstanceCpu | any | null | undefined; + kind: DaemonInstanceKind; + memory?: DaemonInstanceMemory | any | null | undefined; name: string; - nodeName?: string | null | undefined; phase?: string | null | undefined; + pid?: number | null | undefined; ready: boolean; - reason?: string | null | undefined; - replicaId: string; restartCount?: number | null | undefined; - status?: string | null | undefined; - terminatedReason?: string | null | undefined; - waitingReason?: string | null | undefined; -}; - -export type Replicas2 = { - available?: number | null | undefined; - current?: number | null | undefined; - desired?: number | null | undefined; - misscheduled?: number | null | undefined; - ready?: number | null | undefined; - updated?: number | null | undefined; -}; - -export const SchedulingMode = { - Replicated: "replicated", - Stateful: "stateful", - Daemon: "daemon", -} as const; -export type SchedulingMode = ClosedEnum; - -export const DataReason10 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason10 = ClosedEnum; - -export const StatusSeverity10 = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type StatusSeverity10 = ClosedEnum; - -export type DataCollectionIssue10 = { - message: string; - reason: DataReason10; - severity: StatusSeverity10; - source: string; -}; - -export const DataHealth10 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth10 = ClosedEnum; - -export const StatusLifecycle10 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type StatusLifecycle10 = ClosedEnum; - -export type ResourceHeartbeatStatus10 = { - collectionIssues: Array; - health: DataHealth10; - lifecycle: StatusLifecycle10; - message?: string | null | undefined; - partial: boolean; - stale: boolean; -}; - -export type DataHorizonPlatform = { - attentionCount: number; - containerId: string; - cpu?: Cpu3 | any | null | undefined; - events: Array; - image?: string | null | undefined; - memory?: Memory3 | any | null | undefined; - replicaUnits: Array; - replicas: Replicas2; - schedulingMode: SchedulingMode; - status: ResourceHeartbeatStatus10; - backend: "horizonPlatform"; -}; - -export type SyncReconcileRequestDataUnion3 = - | DataHorizonPlatform - | DataKubernetes2 - | DataLocal3; - -export type DataContainer = { - data: DataHorizonPlatform | DataKubernetes2 | DataLocal3; - resourceType: "container"; -}; - -export const CpuUnit2 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type CpuUnit2 = ClosedEnum; - -export type Cpu2 = { - unit: CpuUnit2; - value: number; + unitId: string; }; -export type CpuUnion2 = Cpu2 | any; +export type DaemonInstanceUnion = DaemonInstance5 | any; -export const EventSeverity1 = { +export const EventSeverity3 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type EventSeverity1 = ClosedEnum; +export type EventSeverity3 = ClosedEnum; -export type SyncReconcileRequestSubject1 = { +export type SyncReconcileRequestSubject3 = { id?: string | null | undefined; kind: string; name?: string | null | undefined; }; -export type SyncReconcileRequestSubjectUnion1 = - | SyncReconcileRequestSubject1 +export type SyncReconcileRequestSubjectUnion3 = + | SyncReconcileRequestSubject3 | any; -export type SyncReconcileRequestEvent2 = { +export type SyncReconcileRequestEvent11 = { kind: string; message: string; raw?: any | null | undefined; - severity: EventSeverity1; - subject?: SyncReconcileRequestSubject1 | any | null | undefined; + severity: EventSeverity3; + subject?: SyncReconcileRequestSubject3 | any | null | undefined; timestamp: Date; }; -export const MemoryUnit2 = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type MemoryUnit2 = ClosedEnum; - -export type Memory2 = { - unit: MemoryUnit2; - value: number; -}; - -export type MemoryUnion2 = Memory2 | any; - -export const ProcessCpuUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type ProcessCpuUnit = ClosedEnum; - -export type ProcessCpu = { - unit: ProcessCpuUnit; - value: number; -}; - -export type ProcessCpuUnion = ProcessCpu | any; - -export const ProcessKind = { - Container: "container", - Process: "process", - Daemon: "daemon", -} as const; -export type ProcessKind = ClosedEnum; - -export const ProcessMemoryUnit = { - Count: "count", - Percent: "percent", - Bytes: "bytes", - Cores: "cores", - Milliseconds: "milliseconds", - RequestsPerSecond: "requests-per-second", -} as const; -export type ProcessMemoryUnit = ClosedEnum; - -export type ProcessMemory = { - unit: ProcessMemoryUnit; - value: number; -}; - -export type ProcessMemoryUnion = ProcessMemory | any; - -export type Process = { - cpu?: ProcessCpu | any | null | undefined; - kind: ProcessKind; - memory?: ProcessMemory | any | null | undefined; - name: string; - phase?: string | null | undefined; - pid?: number | null | undefined; - ready: boolean; - restartCount?: number | null | undefined; - unitId: string; -}; - -export type ProcessUnion = Process | any; - -export const DataReason9 = { +export const DataReason18 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason9 = ClosedEnum; +export type DataReason18 = ClosedEnum; -export const StatusSeverity9 = { +export const StatusSeverity18 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity9 = ClosedEnum; +export type StatusSeverity18 = ClosedEnum; -export type DataCollectionIssue9 = { +export type DataCollectionIssue18 = { message: string; - reason: DataReason9; - severity: StatusSeverity9; + reason: DataReason18; + severity: StatusSeverity18; source: string; }; -export const DataHealth9 = { +export const DataHealth18 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth9 = ClosedEnum; +export type DataHealth18 = ClosedEnum; -export const StatusLifecycle9 = { +export const StatusLifecycle18 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -11368,32 +11271,32 @@ export const StatusLifecycle9 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle9 = ClosedEnum; +export type StatusLifecycle18 = ClosedEnum; -export type ResourceHeartbeatStatus9 = { - collectionIssues: Array; - health: DataHealth9; - lifecycle: StatusLifecycle9; +export type ResourceHeartbeatStatus18 = { + collectionIssues: Array; + health: DataHealth18; + lifecycle: StatusLifecycle18; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal2 = { +export type DataLocal4 = { commandSupported: boolean; - cpu?: Cpu2 | any | null | undefined; - events: Array; + daemonInstance?: DaemonInstance5 | any | null | undefined; + daemonName?: string | undefined; + events: Array; + exitReason?: string | null | undefined; imagePathPresent: boolean; - memory?: Memory2 | any | null | undefined; pid?: number | null | undefined; - process?: Process | any | null | undefined; - readinessProbeOk?: boolean | null | undefined; - status: ResourceHeartbeatStatus9; - triggerCount: number; + restartCount?: number | null | undefined; + runtimeId: string; + status: ResourceHeartbeatStatus18; backend: "local"; }; -export const CpuUnit1 = { +export const CpuUnit6 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -11401,16 +11304,16 @@ export const CpuUnit1 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuUnit1 = ClosedEnum; +export type CpuUnit6 = ClosedEnum; -export type Cpu1 = { - unit: CpuUnit1; +export type Cpu6 = { + unit: CpuUnit6; value: number; }; -export type CpuUnion1 = Cpu1 | any; +export type CpuUnion6 = Cpu6 | any; -export type InvolvedObject1 = { +export type InvolvedObject8 = { apiVersion?: string | null | undefined; fieldPath?: string | null | undefined; kind?: string | null | undefined; @@ -11420,29 +11323,29 @@ export type InvolvedObject1 = { uid?: string | null | undefined; }; -export type InvolvedObjectUnion1 = InvolvedObject1 | any; +export type InvolvedObjectUnion8 = InvolvedObject8 | any; -export type SyncReconcileRequestSource1 = { +export type SyncReconcileRequestSource8 = { component?: string | null | undefined; host?: string | null | undefined; }; -export type SourceUnion1 = SyncReconcileRequestSource1 | any; +export type SourceUnion8 = SyncReconcileRequestSource8 | any; -export type SyncReconcileRequestEvent1 = { +export type SyncReconcileRequestEvent10 = { count?: number | null | undefined; eventTime?: Date | null | undefined; firstTimestamp?: Date | null | undefined; - involvedObject?: InvolvedObject1 | any | null | undefined; + involvedObject?: InvolvedObject8 | any | null | undefined; lastTimestamp?: Date | null | undefined; message: string; raw?: any | null | undefined; reason: string; - source?: SyncReconcileRequestSource1 | any | null | undefined; + source?: SyncReconcileRequestSource8 | any | null | undefined; type?: string | null | undefined; }; -export const MemoryUnit1 = { +export const MemoryUnit6 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -11450,16 +11353,16 @@ export const MemoryUnit1 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryUnit1 = ClosedEnum; +export type MemoryUnit6 = ClosedEnum; -export type Memory1 = { - unit: MemoryUnit1; +export type Memory6 = { + unit: MemoryUnit6; value: number; }; -export type MemoryUnion1 = Memory1 | any; +export type MemoryUnion6 = Memory6 | any; -export const CpuPodUnit1 = { +export const CpuPodUnit3 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -11467,16 +11370,16 @@ export const CpuPodUnit1 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type CpuPodUnit1 = ClosedEnum; +export type CpuPodUnit3 = ClosedEnum; -export type CpuPod1 = { - unit: CpuPodUnit1; +export type CpuPod3 = { + unit: CpuPodUnit3; value: number; }; -export type PodCpuUnion1 = CpuPod1 | any; +export type PodCpuUnion3 = CpuPod3 | any; -export const MemoryPodUnit1 = { +export const MemoryPodUnit3 = { Count: "count", Percent: "percent", Bytes: "bytes", @@ -11484,28 +11387,28 @@ export const MemoryPodUnit1 = { Milliseconds: "milliseconds", RequestsPerSecond: "requests-per-second", } as const; -export type MemoryPodUnit1 = ClosedEnum; +export type MemoryPodUnit3 = ClosedEnum; -export type MemoryPod1 = { - unit: MemoryPodUnit1; +export type MemoryPod3 = { + unit: MemoryPodUnit3; value: number; }; -export type PodMemoryUnion1 = MemoryPod1 | any; +export type PodMemoryUnion3 = MemoryPod3 | any; -export type OwnerReference1 = { +export type OwnerReference3 = { controller: boolean; kind: string; name: string; uid: string; }; -export type Pod1 = { - cpu?: CpuPod1 | any | null | undefined; - memory?: MemoryPod1 | any | null | undefined; +export type Pod3 = { + cpu?: CpuPod3 | any | null | undefined; + memory?: MemoryPod3 | any | null | undefined; name: string; nodeName?: string | null | undefined; - ownerReferences: Array; + ownerReferences: Array; phase?: string | null | undefined; podIp?: string | null | undefined; ready: boolean; @@ -11515,7 +11418,7 @@ export type Pod1 = { waitingReason?: string | null | undefined; }; -export type Replicas1 = { +export type Replicas4 = { available?: number | null | undefined; current?: number | null | undefined; desired?: number | null | undefined; @@ -11524,38 +11427,38 @@ export type Replicas1 = { updated?: number | null | undefined; }; -export const DataReason8 = { +export const DataReason17 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason8 = ClosedEnum; +export type DataReason17 = ClosedEnum; -export const StatusSeverity8 = { +export const StatusSeverity17 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity8 = ClosedEnum; +export type StatusSeverity17 = ClosedEnum; -export type DataCollectionIssue8 = { +export type DataCollectionIssue17 = { message: string; - reason: DataReason8; - severity: StatusSeverity8; + reason: DataReason17; + severity: StatusSeverity17; source: string; }; -export const DataHealth8 = { +export const DataHealth17 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth8 = ClosedEnum; +export type DataHealth17 = ClosedEnum; -export const StatusLifecycle8 = { +export const StatusLifecycle17 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -11567,18 +11470,18 @@ export const StatusLifecycle8 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle8 = ClosedEnum; +export type StatusLifecycle17 = ClosedEnum; -export type ResourceHeartbeatStatus8 = { - collectionIssues: Array; - health: DataHealth8; - lifecycle: StatusLifecycle8; +export type ResourceHeartbeatStatus17 = { + collectionIssues: Array; + health: DataHealth17; + lifecycle: StatusLifecycle17; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type WorkloadCondition1 = { +export type WorkloadCondition3 = { lastTransitionTime?: Date | null | undefined; message?: string | null | undefined; reason?: string | null | undefined; @@ -11586,9 +11489,9 @@ export type WorkloadCondition1 = { type: string; }; -export type Workload1 = { +export type Workload3 = { availableReplicas?: number | null | undefined; - conditions: Array; + conditions: Array; desiredGeneration?: number | null | undefined; desiredReplicas?: number | null | undefined; observedGeneration?: number | null | undefined; @@ -11597,134 +11500,145 @@ export type Workload1 = { updatedReplicas?: number | null | undefined; }; -export type WorkloadUnion1 = Workload1 | any; - -export const WorkloadKind1 = { - Deployment: "deployment", - StatefulSet: "statefulSet", - DaemonSet: "daemonSet", - ReplicaSet: "replicaSet", - Pod: "pod", -} as const; -export type WorkloadKind1 = ClosedEnum; +export type WorkloadUnion3 = Workload3 | any; -export type DataKubernetes1 = { - cpu?: Cpu1 | any | null | undefined; - events: Array; - memory?: Memory1 | any | null | undefined; - name: string; - namespace: string; - pods: Array; - replicas: Replicas1; +export type DataKubernetes3 = { + commandSupported: boolean; + cpu?: Cpu6 | any | null | undefined; + events: Array; + memory?: Memory6 | any | null | undefined; + name: string; + namespace: string; + pods: Array; + replicas: Replicas4; restarts?: number | null | undefined; - status: ResourceHeartbeatStatus8; - triggerCount: number; - workload?: Workload1 | any | null | undefined; - workloadKind: WorkloadKind1; + status: ResourceHeartbeatStatus17; + workload?: Workload3 | any | null | undefined; backend: "kubernetes"; }; -export const DataReason7 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", -} as const; -export type DataReason7 = ClosedEnum; - -export const StatusSeverity7 = { - Info: "info", - Warning: "warning", - Error: "error", +export const CpuDaemonInstanceUnit4 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -export type StatusSeverity7 = ClosedEnum; +export type CpuDaemonInstanceUnit4 = ClosedEnum; -export type DataCollectionIssue7 = { - message: string; - reason: DataReason7; - severity: StatusSeverity7; - source: string; +export type CpuDaemonInstance4 = { + unit: CpuDaemonInstanceUnit4; + value: number; }; -export const DataHealth7 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth7 = ClosedEnum; +export type DaemonInstanceCpuUnion4 = CpuDaemonInstance4 | any; -export const StatusLifecycle7 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", +export const MemoryDaemonInstanceUnit4 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -export type StatusLifecycle7 = ClosedEnum; +export type MemoryDaemonInstanceUnit4 = ClosedEnum< + typeof MemoryDaemonInstanceUnit4 +>; -export type ResourceHeartbeatStatus7 = { - collectionIssues: Array; - health: DataHealth7; - lifecycle: StatusLifecycle7; +export type MemoryDaemonInstance4 = { + unit: MemoryDaemonInstanceUnit4; + value: number; +}; + +export type DaemonInstanceMemoryUnion4 = MemoryDaemonInstance4 | any; + +export type DaemonInstance4 = { + cpu?: CpuDaemonInstance4 | any | null | undefined; + ip?: string | null | undefined; + machineId?: string | null | undefined; + memory?: MemoryDaemonInstance4 | any | null | undefined; message?: string | null | undefined; - partial: boolean; - stale: boolean; + metricsHealthy?: boolean | null | undefined; + metricsLastUpdated?: string | null | undefined; + metricsStatus?: string | null | undefined; + name: string; + nodeName?: string | null | undefined; + phase?: string | null | undefined; + ready: boolean; + reason?: string | null | undefined; + replicaId: string; + restartCount?: number | null | undefined; + status?: string | null | undefined; + terminatedReason?: string | null | undefined; + waitingReason?: string | null | undefined; }; -export type DataAzureContainerApps1 = { - appName: string; - cpu?: number | null | undefined; - environmentName?: string | null | undefined; - ingressFqdn?: string | null | undefined; - maxReplicas?: number | null | undefined; - memory?: string | null | undefined; - minReplicas?: number | null | undefined; - provisioningState?: string | null | undefined; - revision?: string | null | undefined; - runningStatus?: string | null | undefined; - status: ResourceHeartbeatStatus7; - backend: "azureContainerApps"; +export type InvolvedObject7 = { + details?: any | null | undefined; + id?: string | null | undefined; + kind?: string | null | undefined; + machineId?: string | null | undefined; + name?: string | null | undefined; + replicaId?: string | null | undefined; }; -export const DataReason6 = { +export type InvolvedObjectUnion7 = InvolvedObject7 | any; + +export type SyncReconcileRequestSource7 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion7 = SyncReconcileRequestSource7 | any; + +export type SyncReconcileRequestEvent9 = { + count?: number | null | undefined; + details?: any | null | undefined; + eventId?: string | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject7 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource7 | any | null | undefined; + type?: string | null | undefined; +}; + +export const DataReason16 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason6 = ClosedEnum; +export type DataReason16 = ClosedEnum; -export const StatusSeverity6 = { +export const StatusSeverity16 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity6 = ClosedEnum; +export type StatusSeverity16 = ClosedEnum; -export type DataCollectionIssue6 = { +export type DataCollectionIssue16 = { message: string; - reason: DataReason6; - severity: StatusSeverity6; + reason: DataReason16; + severity: StatusSeverity16; source: string; }; -export const DataHealth6 = { +export const DataHealth16 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth6 = ClosedEnum; +export type DataHealth16 = ClosedEnum; -export const StatusLifecycle6 = { +export const StatusLifecycle16 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -11736,68 +11650,159 @@ export const StatusLifecycle6 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle6 = ClosedEnum; +export type StatusLifecycle16 = ClosedEnum; -export type ResourceHeartbeatStatus6 = { - collectionIssues: Array; - health: DataHealth6; - lifecycle: StatusLifecycle6; +export type ResourceHeartbeatStatus16 = { + collectionIssues: Array; + health: DataHealth16; + lifecycle: StatusLifecycle16; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataGcpCloudRun = { - containerImage?: string | null | undefined; - cpuLimit?: string | null | undefined; - generation?: number | null | undefined; - latestCreatedRevision?: string | null | undefined; - latestReadyRevision?: string | null | undefined; - maxInstanceCount?: number | null | undefined; - memoryLimit?: string | null | undefined; - minInstanceCount?: number | null | undefined; - observedGeneration?: number | null | undefined; - region?: string | null | undefined; - service: string; - status: ResourceHeartbeatStatus6; - trafficCount: number; - uri?: string | null | undefined; - urls: Array; - backend: "gcpCloudRun"; +export type DataMachines1 = { + assignedMachines: number; + capacityGroup: string; + commandSupported: boolean; + daemonInstances: Array; + daemonName?: string | undefined; + desiredMachines: number; + events: Array; + healthyInstances: number; + horizonClusterId: string; + horizonStatus: string; + horizonStatusMessage?: string | null | undefined; + horizonStatusReason?: string | null | undefined; + latestUpdateTimestamp: string; + observedImage?: string | null | undefined; + status: ResourceHeartbeatStatus16; + unavailableInstances: number; + backend: "machines"; }; -export const DataReason5 = { +export const CpuDaemonInstanceUnit3 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuDaemonInstanceUnit3 = ClosedEnum; + +export type CpuDaemonInstance3 = { + unit: CpuDaemonInstanceUnit3; + value: number; +}; + +export type DaemonInstanceCpuUnion3 = CpuDaemonInstance3 | any; + +export const MemoryDaemonInstanceUnit3 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryDaemonInstanceUnit3 = ClosedEnum< + typeof MemoryDaemonInstanceUnit3 +>; + +export type MemoryDaemonInstance3 = { + unit: MemoryDaemonInstanceUnit3; + value: number; +}; + +export type DaemonInstanceMemoryUnion3 = MemoryDaemonInstance3 | any; + +export type DaemonInstance3 = { + cpu?: CpuDaemonInstance3 | any | null | undefined; + ip?: string | null | undefined; + machineId?: string | null | undefined; + memory?: MemoryDaemonInstance3 | any | null | undefined; + message?: string | null | undefined; + metricsHealthy?: boolean | null | undefined; + metricsLastUpdated?: string | null | undefined; + metricsStatus?: string | null | undefined; + name: string; + nodeName?: string | null | undefined; + phase?: string | null | undefined; + ready: boolean; + reason?: string | null | undefined; + replicaId: string; + restartCount?: number | null | undefined; + status?: string | null | undefined; + terminatedReason?: string | null | undefined; + waitingReason?: string | null | undefined; +}; + +export type InvolvedObject6 = { + details?: any | null | undefined; + id?: string | null | undefined; + kind?: string | null | undefined; + machineId?: string | null | undefined; + name?: string | null | undefined; + replicaId?: string | null | undefined; +}; + +export type InvolvedObjectUnion6 = InvolvedObject6 | any; + +export type SyncReconcileRequestSource6 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion6 = SyncReconcileRequestSource6 | any; + +export type SyncReconcileRequestEvent8 = { + count?: number | null | undefined; + details?: any | null | undefined; + eventId?: string | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject6 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource6 | any | null | undefined; + type?: string | null | undefined; +}; + +export const DataReason15 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason5 = ClosedEnum; +export type DataReason15 = ClosedEnum; -export const StatusSeverity5 = { +export const StatusSeverity15 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity5 = ClosedEnum; +export type StatusSeverity15 = ClosedEnum; -export type DataCollectionIssue5 = { +export type DataCollectionIssue15 = { message: string; - reason: DataReason5; - severity: StatusSeverity5; + reason: DataReason15; + severity: StatusSeverity15; source: string; }; -export const DataHealth5 = { +export const DataHealth15 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth5 = ClosedEnum; +export type DataHealth15 = ClosedEnum; -export const StatusLifecycle5 = { +export const StatusLifecycle15 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -11809,90 +11814,159 @@ export const StatusLifecycle5 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle5 = ClosedEnum; +export type StatusLifecycle15 = ClosedEnum; -export type ResourceHeartbeatStatus5 = { - collectionIssues: Array; - health: DataHealth5; - lifecycle: StatusLifecycle5; +export type ResourceHeartbeatStatus15 = { + collectionIssues: Array; + health: DataHealth15; + lifecycle: StatusLifecycle15; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsLambda = { - codeSha256?: string | null | undefined; - functionName: string; - functionUrlAuthType?: string | null | undefined; - functionUrlCorsPresent: boolean; - lastModified?: string | null | undefined; - lastUpdateStatus?: string | null | undefined; - lastUpdateStatusReason?: string | null | undefined; - lastUpdateStatusReasonCode?: string | null | undefined; - layerCount: number; - memorySizeMb?: number | null | undefined; - packageType?: string | null | undefined; - revisionId?: string | null | undefined; - runtime?: string | null | undefined; - state?: string | null | undefined; - stateReason?: string | null | undefined; - stateReasonCode?: string | null | undefined; - status: ResourceHeartbeatStatus5; - timeoutSeconds?: number | null | undefined; - triggerCount: number; - version?: string | null | undefined; - backend: "awsLambda"; +export type DataAzure1 = { + assignedMachines: number; + capacityGroup: string; + commandSupported: boolean; + daemonInstances: Array; + daemonName?: string | undefined; + desiredMachines: number; + events: Array; + healthyInstances: number; + horizonClusterId: string; + horizonStatus: string; + horizonStatusMessage?: string | null | undefined; + horizonStatusReason?: string | null | undefined; + latestUpdateTimestamp: string; + observedImage?: string | null | undefined; + status: ResourceHeartbeatStatus15; + unavailableInstances: number; + backend: "azure"; }; -export type SyncReconcileRequestDataUnion2 = - | DataAwsLambda - | DataGcpCloudRun - | DataAzureContainerApps1 - | DataKubernetes1 - | DataLocal2; +export const CpuDaemonInstanceUnit2 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuDaemonInstanceUnit2 = ClosedEnum; -export type DataWorker = { - data: - | DataAwsLambda - | DataGcpCloudRun - | DataAzureContainerApps1 - | DataKubernetes1 - | DataLocal2; - resourceType: "worker"; +export type CpuDaemonInstance2 = { + unit: CpuDaemonInstanceUnit2; + value: number; }; -export const DataReason4 = { +export type DaemonInstanceCpuUnion2 = CpuDaemonInstance2 | any; + +export const MemoryDaemonInstanceUnit2 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryDaemonInstanceUnit2 = ClosedEnum< + typeof MemoryDaemonInstanceUnit2 +>; + +export type MemoryDaemonInstance2 = { + unit: MemoryDaemonInstanceUnit2; + value: number; +}; + +export type DaemonInstanceMemoryUnion2 = MemoryDaemonInstance2 | any; + +export type DaemonInstance2 = { + cpu?: CpuDaemonInstance2 | any | null | undefined; + ip?: string | null | undefined; + machineId?: string | null | undefined; + memory?: MemoryDaemonInstance2 | any | null | undefined; + message?: string | null | undefined; + metricsHealthy?: boolean | null | undefined; + metricsLastUpdated?: string | null | undefined; + metricsStatus?: string | null | undefined; + name: string; + nodeName?: string | null | undefined; + phase?: string | null | undefined; + ready: boolean; + reason?: string | null | undefined; + replicaId: string; + restartCount?: number | null | undefined; + status?: string | null | undefined; + terminatedReason?: string | null | undefined; + waitingReason?: string | null | undefined; +}; + +export type InvolvedObject5 = { + details?: any | null | undefined; + id?: string | null | undefined; + kind?: string | null | undefined; + machineId?: string | null | undefined; + name?: string | null | undefined; + replicaId?: string | null | undefined; +}; + +export type InvolvedObjectUnion5 = InvolvedObject5 | any; + +export type SyncReconcileRequestSource5 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion5 = SyncReconcileRequestSource5 | any; + +export type SyncReconcileRequestEvent7 = { + count?: number | null | undefined; + details?: any | null | undefined; + eventId?: string | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject5 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource5 | any | null | undefined; + type?: string | null | undefined; +}; + +export const DataReason14 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason4 = ClosedEnum; +export type DataReason14 = ClosedEnum; -export const StatusSeverity4 = { +export const StatusSeverity14 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity4 = ClosedEnum; +export type StatusSeverity14 = ClosedEnum; -export type DataCollectionIssue4 = { +export type DataCollectionIssue14 = { message: string; - reason: DataReason4; - severity: StatusSeverity4; + reason: DataReason14; + severity: StatusSeverity14; source: string; }; -export const DataHealth4 = { +export const DataHealth14 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth4 = ClosedEnum; +export type DataHealth14 = ClosedEnum; -export const StatusLifecycle4 = { +export const StatusLifecycle14 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -11904,59 +11978,159 @@ export const StatusLifecycle4 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle4 = ClosedEnum; +export type StatusLifecycle14 = ClosedEnum; -export type ResourceHeartbeatStatus4 = { - collectionIssues: Array; - health: DataHealth4; - lifecycle: StatusLifecycle4; +export type ResourceHeartbeatStatus14 = { + collectionIssues: Array; + health: DataHealth14; + lifecycle: StatusLifecycle14; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataLocal1 = { - isDirectory?: boolean | null | undefined; - modifiedAt?: Date | null | undefined; - path: string; - pathExists: boolean; - readonly?: boolean | null | undefined; - status: ResourceHeartbeatStatus4; - backend: "local"; +export type DataGcp1 = { + assignedMachines: number; + capacityGroup: string; + commandSupported: boolean; + daemonInstances: Array; + daemonName?: string | undefined; + desiredMachines: number; + events: Array; + healthyInstances: number; + horizonClusterId: string; + horizonStatus: string; + horizonStatusMessage?: string | null | undefined; + horizonStatusReason?: string | null | undefined; + latestUpdateTimestamp: string; + observedImage?: string | null | undefined; + status: ResourceHeartbeatStatus14; + unavailableInstances: number; + backend: "gcp"; }; -export const DataReason3 = { +export const CpuDaemonInstanceUnit1 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuDaemonInstanceUnit1 = ClosedEnum; + +export type CpuDaemonInstance1 = { + unit: CpuDaemonInstanceUnit1; + value: number; +}; + +export type DaemonInstanceCpuUnion1 = CpuDaemonInstance1 | any; + +export const MemoryDaemonInstanceUnit1 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryDaemonInstanceUnit1 = ClosedEnum< + typeof MemoryDaemonInstanceUnit1 +>; + +export type MemoryDaemonInstance1 = { + unit: MemoryDaemonInstanceUnit1; + value: number; +}; + +export type DaemonInstanceMemoryUnion1 = MemoryDaemonInstance1 | any; + +export type DaemonInstance1 = { + cpu?: CpuDaemonInstance1 | any | null | undefined; + ip?: string | null | undefined; + machineId?: string | null | undefined; + memory?: MemoryDaemonInstance1 | any | null | undefined; + message?: string | null | undefined; + metricsHealthy?: boolean | null | undefined; + metricsLastUpdated?: string | null | undefined; + metricsStatus?: string | null | undefined; + name: string; + nodeName?: string | null | undefined; + phase?: string | null | undefined; + ready: boolean; + reason?: string | null | undefined; + replicaId: string; + restartCount?: number | null | undefined; + status?: string | null | undefined; + terminatedReason?: string | null | undefined; + waitingReason?: string | null | undefined; +}; + +export type InvolvedObject4 = { + details?: any | null | undefined; + id?: string | null | undefined; + kind?: string | null | undefined; + machineId?: string | null | undefined; + name?: string | null | undefined; + replicaId?: string | null | undefined; +}; + +export type InvolvedObjectUnion4 = InvolvedObject4 | any; + +export type SyncReconcileRequestSource4 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion4 = SyncReconcileRequestSource4 | any; + +export type SyncReconcileRequestEvent6 = { + count?: number | null | undefined; + details?: any | null | undefined; + eventId?: string | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject4 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource4 | any | null | undefined; + type?: string | null | undefined; +}; + +export const DataReason13 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason3 = ClosedEnum; +export type DataReason13 = ClosedEnum; -export const StatusSeverity3 = { +export const StatusSeverity13 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity3 = ClosedEnum; +export type StatusSeverity13 = ClosedEnum; -export type DataCollectionIssue3 = { +export type DataCollectionIssue13 = { message: string; - reason: DataReason3; - severity: StatusSeverity3; + reason: DataReason13; + severity: StatusSeverity13; source: string; }; -export const DataHealth3 = { +export const DataHealth13 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth3 = ClosedEnum; +export type DataHealth13 = ClosedEnum; -export const StatusLifecycle3 = { +export const StatusLifecycle13 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -11968,159 +12142,205 @@ export const StatusLifecycle3 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle3 = ClosedEnum; +export type StatusLifecycle13 = ClosedEnum; -export type ResourceHeartbeatStatus3 = { - collectionIssues: Array; - health: DataHealth3; - lifecycle: StatusLifecycle3; +export type ResourceHeartbeatStatus13 = { + collectionIssues: Array; + health: DataHealth13; + lifecycle: StatusLifecycle13; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAzureBlob = { - accessTier?: string | null | undefined; - accountKind?: string | null | undefined; - allowBlobPublicAccess?: boolean | null | undefined; - blobDeleteRetentionDays?: number | null | undefined; - blobDeleteRetentionEnabled?: boolean | null | undefined; - blobEncryptionEnabled?: boolean | null | undefined; - blobVersioningEnabled?: boolean | null | undefined; - changeFeedEnabled?: boolean | null | undefined; - changeFeedRetentionDays?: number | null | undefined; - containerDeleteRetentionDays?: number | null | undefined; - containerDeleteRetentionEnabled?: boolean | null | undefined; - containerPublicAccess?: string | null | undefined; - encryptionKeySource?: string | null | undefined; - fileEncryptionEnabled?: boolean | null | undefined; - location?: string | null | undefined; +export type DataAws1 = { + assignedMachines: number; + capacityGroup: string; + commandSupported: boolean; + daemonInstances: Array; + daemonName?: string | undefined; + desiredMachines: number; + events: Array; + healthyInstances: number; + horizonClusterId: string; + horizonStatus: string; + horizonStatusMessage?: string | null | undefined; + horizonStatusReason?: string | null | undefined; + latestUpdateTimestamp: string; + observedImage?: string | null | undefined; + status: ResourceHeartbeatStatus13; + unavailableInstances: number; + backend: "aws"; +}; + +export type SyncReconcileRequestDataUnion4 = + | DataAws1 + | DataGcp1 + | DataAzure1 + | DataMachines1 + | DataKubernetes3 + | DataLocal4; + +export type DataDaemon = { + data: + | DataAws1 + | DataGcp1 + | DataAzure1 + | DataMachines1 + | DataKubernetes3 + | DataLocal4; + resourceType: "daemon"; +}; + +export const ContainerUnitCpuUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type ContainerUnitCpuUnit = ClosedEnum; + +export type ContainerUnitCpu = { + unit: ContainerUnitCpuUnit; + value: number; +}; + +export type ContainerUnitCpuUnion = ContainerUnitCpu | any; + +export const ContainerUnitKind = { + Container: "container", + Process: "process", + Daemon: "daemon", +} as const; +export type ContainerUnitKind = ClosedEnum; + +export const ContainerUnitMemoryUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type ContainerUnitMemoryUnit = ClosedEnum< + typeof ContainerUnitMemoryUnit +>; + +export type ContainerUnitMemory = { + unit: ContainerUnitMemoryUnit; + value: number; +}; + +export type ContainerUnitMemoryUnion = ContainerUnitMemory | any; + +export type ContainerUnit = { + cpu?: ContainerUnitCpu | any | null | undefined; + kind: ContainerUnitKind; + memory?: ContainerUnitMemory | any | null | undefined; name: string; - primaryLocation?: string | null | undefined; - provisioningState?: string | null | undefined; - publicNetworkAccess?: string | null | undefined; - queueEncryptionEnabled?: boolean | null | undefined; - resourceGroup?: string | null | undefined; - secondaryLocation?: string | null | undefined; - skuName?: string | null | undefined; - skuTier?: string | null | undefined; - status: ResourceHeartbeatStatus3; - statusOfPrimary?: string | null | undefined; - statusOfSecondary?: string | null | undefined; - storageAccountName?: string | null | undefined; - tableEncryptionEnabled?: boolean | null | undefined; - backend: "azureBlob"; + phase?: string | null | undefined; + pid?: number | null | undefined; + ready: boolean; + restartCount?: number | null | undefined; + unitId: string; }; -export const DataReason2 = { - Forbidden: "forbidden", - NotInstalled: "not-installed", - ApiUnavailable: "api-unavailable", - CollectionFailed: "collection-failed", - TimedOut: "timed-out", +export type ContainerUnitUnion = ContainerUnit | any; + +export const CpuUnit5 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -export type DataReason2 = ClosedEnum; +export type CpuUnit5 = ClosedEnum; -export const StatusSeverity2 = { +export type Cpu5 = { + unit: CpuUnit5; + value: number; +}; + +export type CpuUnion5 = Cpu5 | any; + +export const EventSeverity2 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity2 = ClosedEnum; +export type EventSeverity2 = ClosedEnum; -export type DataCollectionIssue2 = { - message: string; - reason: DataReason2; - severity: StatusSeverity2; - source: string; +export type SyncReconcileRequestSubject2 = { + id?: string | null | undefined; + kind: string; + name?: string | null | undefined; }; -export const DataHealth2 = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type DataHealth2 = ClosedEnum; +export type SyncReconcileRequestSubjectUnion2 = + | SyncReconcileRequestSubject2 + | any; -export const StatusLifecycle2 = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", +export type SyncReconcileRequestEvent5 = { + kind: string; + message: string; + raw?: any | null | undefined; + severity: EventSeverity2; + subject?: SyncReconcileRequestSubject2 | any | null | undefined; + timestamp: Date; +}; + +export const MemoryUnit5 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -export type StatusLifecycle2 = ClosedEnum; +export type MemoryUnit5 = ClosedEnum; -export type ResourceHeartbeatStatus2 = { - collectionIssues: Array; - health: DataHealth2; - lifecycle: StatusLifecycle2; - message?: string | null | undefined; - partial: boolean; - stale: boolean; +export type Memory5 = { + unit: MemoryUnit5; + value: number; }; -export type DataGcpCloudStorage = { - bucketId?: string | null | undefined; - defaultKmsKeyName?: string | null | undefined; - encryptionConfigPresent: boolean; - lifecyclePresent: boolean; - lifecycleRuleCount?: number | null | undefined; - location?: string | null | undefined; - locationType?: string | null | undefined; - name: string; - publicAccessPrevention?: string | null | undefined; - retentionPeriod?: string | null | undefined; - retentionPolicyEffectiveTime?: string | null | undefined; - retentionPolicyIsLocked?: boolean | null | undefined; - softDeleteEffectiveTime?: string | null | undefined; - softDeleteRetentionDurationSeconds?: string | null | undefined; - status: ResourceHeartbeatStatus2; - storageClass?: string | null | undefined; - uniformBucketLevelAccessEnabled?: boolean | null | undefined; - uniformBucketLevelAccessLockedTime?: string | null | undefined; - versioningEnabled?: boolean | null | undefined; - backend: "gcpCloudStorage"; -}; +export type MemoryUnion5 = Memory5 | any; -export const DataReason1 = { +export const DataReason12 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type DataReason1 = ClosedEnum; +export type DataReason12 = ClosedEnum; -export const StatusSeverity1 = { +export const StatusSeverity12 = { Info: "info", Warning: "warning", Error: "error", } as const; -export type StatusSeverity1 = ClosedEnum; +export type StatusSeverity12 = ClosedEnum; -export type DataCollectionIssue1 = { +export type DataCollectionIssue12 = { message: string; - reason: DataReason1; - severity: StatusSeverity1; + reason: DataReason12; + severity: StatusSeverity12; source: string; }; -export const DataHealth1 = { +export const DataHealth12 = { Unknown: "unknown", Healthy: "healthy", Degraded: "degraded", Unhealthy: "unhealthy", } as const; -export type DataHealth1 = ClosedEnum; +export type DataHealth12 = ClosedEnum; -export const StatusLifecycle1 = { +export const StatusLifecycle12 = { Unknown: "unknown", Creating: "creating", Updating: "updating", @@ -12132,609 +12352,5120 @@ export const StatusLifecycle1 = { Deleted: "deleted", Failed: "failed", } as const; -export type StatusLifecycle1 = ClosedEnum; +export type StatusLifecycle12 = ClosedEnum; -export type ResourceHeartbeatStatus1 = { - collectionIssues: Array; - health: DataHealth1; - lifecycle: StatusLifecycle1; +export type ResourceHeartbeatStatus12 = { + collectionIssues: Array; + health: DataHealth12; + lifecycle: StatusLifecycle12; message?: string | null | undefined; partial: boolean; stale: boolean; }; -export type DataAwsS3 = { - blockPublicAcls?: boolean | null | undefined; - blockPublicPolicy?: boolean | null | undefined; - bucketAclPresent?: boolean | null | undefined; - bucketLocation?: string | null | undefined; - bucketPolicyPresent?: boolean | null | undefined; - encryptionConfigPresent: boolean; - encryptionEnabled?: boolean | null | undefined; - ignorePublicAcls?: boolean | null | undefined; - lifecyclePresent: boolean; - lifecycleRuleCount?: number | null | undefined; - name: string; - publicAccessBlockPresent: boolean; - region?: string | null | undefined; - restrictPublicBuckets?: boolean | null | undefined; - status: ResourceHeartbeatStatus1; - versioningEnabled?: boolean | null | undefined; - versioningStatus?: string | null | undefined; - backend: "awsS3"; +export type DataLocal3 = { + bindMountCount: number; + containerId?: string | null | undefined; + containerUnit?: ContainerUnit | any | null | undefined; + cpu?: Cpu5 | any | null | undefined; + events: Array; + image?: string | null | undefined; + localUrl?: string | null | undefined; + memory?: Memory5 | any | null | undefined; + name?: string | null | undefined; + portCount: number; + restartCount?: number | null | undefined; + runtimeReachable: boolean; + runtimeStatus?: string | null | undefined; + status: ResourceHeartbeatStatus12; + backend: "local"; }; -export type SyncReconcileRequestDataUnion1 = - | DataAwsS3 - | DataGcpCloudStorage - | DataAzureBlob - | DataLocal1; +export const CpuUnit4 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuUnit4 = ClosedEnum; -export type DataStorage = { - data: DataAwsS3 | DataGcpCloudStorage | DataAzureBlob | DataLocal1; - resourceType: "storage"; +export type Cpu4 = { + unit: CpuUnit4; + value: number; }; -export type SyncReconcileRequestDataUnion16 = - | DataStorage - | DataWorker - | DataContainer - | DataDaemon - | DataComputeCluster - | DataKubernetesCluster - | DataQueue - | DataKv - | DataPostgres - | DataVault - | DataServiceAccount - | DataNetwork - | DataRemoteStackManagement - | DataArtifactRegistry - | DataBuild - | DataServiceActivation - | DataAzureResourceGroup - | DataAzureStorageAccount - | DataAzureContainerAppsEnvironment - | DataAzureServiceBusNamespace; +export type CpuUnion4 = Cpu4 | any; -export const ResourceHeartbeatFormat = { - Json: "json", - Yaml: "yaml", - Text: "text", -} as const; -export type ResourceHeartbeatFormat = ClosedEnum< - typeof ResourceHeartbeatFormat ->; +export type InvolvedObject3 = { + apiVersion?: string | null | undefined; + fieldPath?: string | null | undefined; + kind?: string | null | undefined; + name?: string | null | undefined; + namespace?: string | null | undefined; + resourceVersion?: string | null | undefined; + uid?: string | null | undefined; +}; -export type ResourceHeartbeatRaw = { - body: string; - collectedAt: Date; - format: ResourceHeartbeatFormat; - source: string; - truncated: boolean; +export type InvolvedObjectUnion3 = InvolvedObject3 | any; + +export type SyncReconcileRequestSource3 = { + component?: string | null | undefined; + host?: string | null | undefined; }; -export type ResourceHeartbeat = { - backend: ResourceHeartbeatBackendEnum; - /** - * Represents the target cloud platform. - */ - controllerPlatform: ResourceHeartbeatControllerPlatform; - data: - | DataStorage - | DataWorker - | DataContainer - | DataDaemon - | DataComputeCluster - | DataKubernetesCluster - | DataQueue - | DataKv - | DataPostgres - | DataVault - | DataServiceAccount - | DataNetwork - | DataRemoteStackManagement - | DataArtifactRegistry - | DataBuild - | DataServiceActivation - | DataAzureResourceGroup - | DataAzureStorageAccount - | DataAzureContainerAppsEnvironment - | DataAzureServiceBusNamespace; - deploymentId?: string | null | undefined; - observedAt: Date; - raw: Array; - /** - * Alien resource id, such as the `alien.Container` or `alien.Storage` - * - * @remarks - * resource id from the stack. - */ - resourceId: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - resourceType: string; +export type SourceUnion3 = SyncReconcileRequestSource3 | any; + +export type SyncReconcileRequestEvent4 = { + count?: number | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject3 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource3 | any | null | undefined; + type?: string | null | undefined; }; -/** - * Backend whose observer produced this snapshot. - */ -export const ObservedInventoryBatchBackend = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Local: "local", - Managed: "managed", - External: "external", - Test: "test", +export const MemoryUnit4 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -/** - * Backend whose observer produced this snapshot. - */ -export type ObservedInventoryBatchBackend = ClosedEnum< - typeof ObservedInventoryBatchBackend ->; +export type MemoryUnit4 = ClosedEnum; -/** - * Represents the target cloud platform. - */ -export const ObservedInventoryBatchControllerPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", +export type Memory4 = { + unit: MemoryUnit4; + value: number; +}; + +export type MemoryUnion4 = Memory4 | any; + +export const CpuPodUnit2 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", } as const; -/** - * Represents the target cloud platform. - */ -export type ObservedInventoryBatchControllerPlatform = ClosedEnum< - typeof ObservedInventoryBatchControllerPlatform ->; +export type CpuPodUnit2 = ClosedEnum; -export const ResourceReason = { +export type CpuPod2 = { + unit: CpuPodUnit2; + value: number; +}; + +export type PodCpuUnion2 = CpuPod2 | any; + +export const MemoryPodUnit2 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryPodUnit2 = ClosedEnum; + +export type MemoryPod2 = { + unit: MemoryPodUnit2; + value: number; +}; + +export type PodMemoryUnion2 = MemoryPod2 | any; + +export type OwnerReference2 = { + controller: boolean; + kind: string; + name: string; + uid: string; +}; + +export type Pod2 = { + cpu?: CpuPod2 | any | null | undefined; + memory?: MemoryPod2 | any | null | undefined; + name: string; + nodeName?: string | null | undefined; + ownerReferences: Array; + phase?: string | null | undefined; + podIp?: string | null | undefined; + ready: boolean; + restartCount: number; + terminatedReason?: string | null | undefined; + uid?: string | null | undefined; + waitingReason?: string | null | undefined; +}; + +export type Replicas3 = { + available?: number | null | undefined; + current?: number | null | undefined; + desired?: number | null | undefined; + misscheduled?: number | null | undefined; + ready?: number | null | undefined; + updated?: number | null | undefined; +}; + +export const DataReason11 = { Forbidden: "forbidden", NotInstalled: "not-installed", ApiUnavailable: "api-unavailable", CollectionFailed: "collection-failed", TimedOut: "timed-out", } as const; -export type ResourceReason = ClosedEnum; +export type DataReason11 = ClosedEnum; + +export const StatusSeverity11 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity11 = ClosedEnum; + +export type DataCollectionIssue11 = { + message: string; + reason: DataReason11; + severity: StatusSeverity11; + source: string; +}; + +export const DataHealth11 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth11 = ClosedEnum; + +export const StatusLifecycle11 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle11 = ClosedEnum; + +export type ResourceHeartbeatStatus11 = { + collectionIssues: Array; + health: DataHealth11; + lifecycle: StatusLifecycle11; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type WorkloadCondition2 = { + lastTransitionTime?: Date | null | undefined; + message?: string | null | undefined; + reason?: string | null | undefined; + status: string; + type: string; +}; + +export type Workload2 = { + availableReplicas?: number | null | undefined; + conditions: Array; + desiredGeneration?: number | null | undefined; + desiredReplicas?: number | null | undefined; + observedGeneration?: number | null | undefined; + readyReplicas?: number | null | undefined; + rolloutReason?: string | null | undefined; + updatedReplicas?: number | null | undefined; +}; + +export type WorkloadUnion2 = Workload2 | any; + +export const WorkloadKind2 = { + Deployment: "deployment", + StatefulSet: "statefulSet", + DaemonSet: "daemonSet", + ReplicaSet: "replicaSet", + Pod: "pod", +} as const; +export type WorkloadKind2 = ClosedEnum; + +export type DataKubernetes2 = { + cpu?: Cpu4 | any | null | undefined; + events: Array; + memory?: Memory4 | any | null | undefined; + name: string; + namespace: string; + pods: Array; + replicas: Replicas3; + restarts?: number | null | undefined; + status: ResourceHeartbeatStatus11; + workload?: Workload2 | any | null | undefined; + workloadKind: WorkloadKind2; + backend: "kubernetes"; +}; + +export const CpuUnit3 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuUnit3 = ClosedEnum; + +export type Cpu3 = { + unit: CpuUnit3; + value: number; +}; + +export type CpuUnion3 = Cpu3 | any; + +export type InvolvedObject2 = { + details?: any | null | undefined; + id?: string | null | undefined; + kind?: string | null | undefined; + machineId?: string | null | undefined; + name?: string | null | undefined; + replicaId?: string | null | undefined; +}; + +export type InvolvedObjectUnion2 = InvolvedObject2 | any; + +export type SyncReconcileRequestSource2 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion2 = SyncReconcileRequestSource2 | any; + +export type SyncReconcileRequestEvent3 = { + count?: number | null | undefined; + details?: any | null | undefined; + eventId?: string | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject2 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource2 | any | null | undefined; + type?: string | null | undefined; +}; + +export const MemoryUnit3 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryUnit3 = ClosedEnum; + +export type Memory3 = { + unit: MemoryUnit3; + value: number; +}; + +export type MemoryUnion3 = Memory3 | any; + +export const CpuReplicaUnitUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuReplicaUnitUnit = ClosedEnum; + +export type CpuReplicaUnit = { + unit: CpuReplicaUnitUnit; + value: number; +}; + +export type ReplicaUnitCpuUnion = CpuReplicaUnit | any; + +export const MemoryReplicaUnitUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryReplicaUnitUnit = ClosedEnum; + +export type MemoryReplicaUnit = { + unit: MemoryReplicaUnitUnit; + value: number; +}; + +export type ReplicaUnitMemoryUnion = MemoryReplicaUnit | any; + +export type ReplicaUnit = { + cpu?: CpuReplicaUnit | any | null | undefined; + ip?: string | null | undefined; + machineId?: string | null | undefined; + memory?: MemoryReplicaUnit | any | null | undefined; + message?: string | null | undefined; + metricsHealthy?: boolean | null | undefined; + metricsLastUpdated?: string | null | undefined; + metricsStatus?: string | null | undefined; + name: string; + nodeName?: string | null | undefined; + phase?: string | null | undefined; + ready: boolean; + reason?: string | null | undefined; + replicaId: string; + restartCount?: number | null | undefined; + status?: string | null | undefined; + terminatedReason?: string | null | undefined; + waitingReason?: string | null | undefined; +}; + +export type Replicas2 = { + available?: number | null | undefined; + current?: number | null | undefined; + desired?: number | null | undefined; + misscheduled?: number | null | undefined; + ready?: number | null | undefined; + updated?: number | null | undefined; +}; + +export const SchedulingMode = { + Replicated: "replicated", + Stateful: "stateful", + Daemon: "daemon", +} as const; +export type SchedulingMode = ClosedEnum; + +export const DataReason10 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason10 = ClosedEnum; + +export const StatusSeverity10 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity10 = ClosedEnum; + +export type DataCollectionIssue10 = { + message: string; + reason: DataReason10; + severity: StatusSeverity10; + source: string; +}; + +export const DataHealth10 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth10 = ClosedEnum; + +export const StatusLifecycle10 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle10 = ClosedEnum; + +export type ResourceHeartbeatStatus10 = { + collectionIssues: Array; + health: DataHealth10; + lifecycle: StatusLifecycle10; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataHorizonPlatform = { + attentionCount: number; + containerId: string; + cpu?: Cpu3 | any | null | undefined; + events: Array; + image?: string | null | undefined; + latestUpdateTimestamp?: string | null | undefined; + memory?: Memory3 | any | null | undefined; + observedImage?: string | null | undefined; + replicaUnits: Array; + replicas: Replicas2; + schedulingMode: SchedulingMode; + status: ResourceHeartbeatStatus10; + backend: "horizonPlatform"; +}; + +export type SyncReconcileRequestDataUnion3 = + | DataHorizonPlatform + | DataKubernetes2 + | DataLocal3; + +export type DataContainer = { + data: DataHorizonPlatform | DataKubernetes2 | DataLocal3; + resourceType: "container"; +}; + +export const CpuUnit2 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuUnit2 = ClosedEnum; + +export type Cpu2 = { + unit: CpuUnit2; + value: number; +}; + +export type CpuUnion2 = Cpu2 | any; + +export const EventSeverity1 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type EventSeverity1 = ClosedEnum; + +export type SyncReconcileRequestSubject1 = { + id?: string | null | undefined; + kind: string; + name?: string | null | undefined; +}; + +export type SyncReconcileRequestSubjectUnion1 = + | SyncReconcileRequestSubject1 + | any; + +export type SyncReconcileRequestEvent2 = { + kind: string; + message: string; + raw?: any | null | undefined; + severity: EventSeverity1; + subject?: SyncReconcileRequestSubject1 | any | null | undefined; + timestamp: Date; +}; + +export const MemoryUnit2 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryUnit2 = ClosedEnum; + +export type Memory2 = { + unit: MemoryUnit2; + value: number; +}; + +export type MemoryUnion2 = Memory2 | any; + +export const ProcessCpuUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type ProcessCpuUnit = ClosedEnum; + +export type ProcessCpu = { + unit: ProcessCpuUnit; + value: number; +}; + +export type ProcessCpuUnion = ProcessCpu | any; + +export const ProcessKind = { + Container: "container", + Process: "process", + Daemon: "daemon", +} as const; +export type ProcessKind = ClosedEnum; + +export const ProcessMemoryUnit = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type ProcessMemoryUnit = ClosedEnum; + +export type ProcessMemory = { + unit: ProcessMemoryUnit; + value: number; +}; + +export type ProcessMemoryUnion = ProcessMemory | any; + +export type Process = { + cpu?: ProcessCpu | any | null | undefined; + kind: ProcessKind; + memory?: ProcessMemory | any | null | undefined; + name: string; + phase?: string | null | undefined; + pid?: number | null | undefined; + ready: boolean; + restartCount?: number | null | undefined; + unitId: string; +}; + +export type ProcessUnion = Process | any; + +export const DataReason9 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason9 = ClosedEnum; + +export const StatusSeverity9 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity9 = ClosedEnum; + +export type DataCollectionIssue9 = { + message: string; + reason: DataReason9; + severity: StatusSeverity9; + source: string; +}; + +export const DataHealth9 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth9 = ClosedEnum; + +export const StatusLifecycle9 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle9 = ClosedEnum; + +export type ResourceHeartbeatStatus9 = { + collectionIssues: Array; + health: DataHealth9; + lifecycle: StatusLifecycle9; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataLocal2 = { + commandSupported: boolean; + cpu?: Cpu2 | any | null | undefined; + events: Array; + imagePathPresent: boolean; + memory?: Memory2 | any | null | undefined; + pid?: number | null | undefined; + process?: Process | any | null | undefined; + readinessProbeOk?: boolean | null | undefined; + status: ResourceHeartbeatStatus9; + triggerCount: number; + backend: "local"; +}; + +export const CpuUnit1 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuUnit1 = ClosedEnum; + +export type Cpu1 = { + unit: CpuUnit1; + value: number; +}; + +export type CpuUnion1 = Cpu1 | any; + +export type InvolvedObject1 = { + apiVersion?: string | null | undefined; + fieldPath?: string | null | undefined; + kind?: string | null | undefined; + name?: string | null | undefined; + namespace?: string | null | undefined; + resourceVersion?: string | null | undefined; + uid?: string | null | undefined; +}; + +export type InvolvedObjectUnion1 = InvolvedObject1 | any; + +export type SyncReconcileRequestSource1 = { + component?: string | null | undefined; + host?: string | null | undefined; +}; + +export type SourceUnion1 = SyncReconcileRequestSource1 | any; + +export type SyncReconcileRequestEvent1 = { + count?: number | null | undefined; + eventTime?: Date | null | undefined; + firstTimestamp?: Date | null | undefined; + involvedObject?: InvolvedObject1 | any | null | undefined; + lastTimestamp?: Date | null | undefined; + message: string; + raw?: any | null | undefined; + reason: string; + source?: SyncReconcileRequestSource1 | any | null | undefined; + type?: string | null | undefined; +}; + +export const MemoryUnit1 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryUnit1 = ClosedEnum; + +export type Memory1 = { + unit: MemoryUnit1; + value: number; +}; + +export type MemoryUnion1 = Memory1 | any; + +export const CpuPodUnit1 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type CpuPodUnit1 = ClosedEnum; + +export type CpuPod1 = { + unit: CpuPodUnit1; + value: number; +}; + +export type PodCpuUnion1 = CpuPod1 | any; + +export const MemoryPodUnit1 = { + Count: "count", + Percent: "percent", + Bytes: "bytes", + Cores: "cores", + Milliseconds: "milliseconds", + RequestsPerSecond: "requests-per-second", +} as const; +export type MemoryPodUnit1 = ClosedEnum; + +export type MemoryPod1 = { + unit: MemoryPodUnit1; + value: number; +}; + +export type PodMemoryUnion1 = MemoryPod1 | any; + +export type OwnerReference1 = { + controller: boolean; + kind: string; + name: string; + uid: string; +}; + +export type Pod1 = { + cpu?: CpuPod1 | any | null | undefined; + memory?: MemoryPod1 | any | null | undefined; + name: string; + nodeName?: string | null | undefined; + ownerReferences: Array; + phase?: string | null | undefined; + podIp?: string | null | undefined; + ready: boolean; + restartCount: number; + terminatedReason?: string | null | undefined; + uid?: string | null | undefined; + waitingReason?: string | null | undefined; +}; + +export type Replicas1 = { + available?: number | null | undefined; + current?: number | null | undefined; + desired?: number | null | undefined; + misscheduled?: number | null | undefined; + ready?: number | null | undefined; + updated?: number | null | undefined; +}; + +export const DataReason8 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason8 = ClosedEnum; + +export const StatusSeverity8 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity8 = ClosedEnum; + +export type DataCollectionIssue8 = { + message: string; + reason: DataReason8; + severity: StatusSeverity8; + source: string; +}; + +export const DataHealth8 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth8 = ClosedEnum; + +export const StatusLifecycle8 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle8 = ClosedEnum; + +export type ResourceHeartbeatStatus8 = { + collectionIssues: Array; + health: DataHealth8; + lifecycle: StatusLifecycle8; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type WorkloadCondition1 = { + lastTransitionTime?: Date | null | undefined; + message?: string | null | undefined; + reason?: string | null | undefined; + status: string; + type: string; +}; + +export type Workload1 = { + availableReplicas?: number | null | undefined; + conditions: Array; + desiredGeneration?: number | null | undefined; + desiredReplicas?: number | null | undefined; + observedGeneration?: number | null | undefined; + readyReplicas?: number | null | undefined; + rolloutReason?: string | null | undefined; + updatedReplicas?: number | null | undefined; +}; + +export type WorkloadUnion1 = Workload1 | any; + +export const WorkloadKind1 = { + Deployment: "deployment", + StatefulSet: "statefulSet", + DaemonSet: "daemonSet", + ReplicaSet: "replicaSet", + Pod: "pod", +} as const; +export type WorkloadKind1 = ClosedEnum; + +export type DataKubernetes1 = { + cpu?: Cpu1 | any | null | undefined; + events: Array; + memory?: Memory1 | any | null | undefined; + name: string; + namespace: string; + pods: Array; + replicas: Replicas1; + restarts?: number | null | undefined; + status: ResourceHeartbeatStatus8; + triggerCount: number; + workload?: Workload1 | any | null | undefined; + workloadKind: WorkloadKind1; + backend: "kubernetes"; +}; + +export const DataReason7 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason7 = ClosedEnum; + +export const StatusSeverity7 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity7 = ClosedEnum; + +export type DataCollectionIssue7 = { + message: string; + reason: DataReason7; + severity: StatusSeverity7; + source: string; +}; + +export const DataHealth7 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth7 = ClosedEnum; + +export const StatusLifecycle7 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle7 = ClosedEnum; + +export type ResourceHeartbeatStatus7 = { + collectionIssues: Array; + health: DataHealth7; + lifecycle: StatusLifecycle7; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataAzureContainerApps1 = { + appName: string; + cpu?: number | null | undefined; + environmentName?: string | null | undefined; + ingressFqdn?: string | null | undefined; + maxReplicas?: number | null | undefined; + memory?: string | null | undefined; + minReplicas?: number | null | undefined; + provisioningState?: string | null | undefined; + revision?: string | null | undefined; + runningStatus?: string | null | undefined; + status: ResourceHeartbeatStatus7; + backend: "azureContainerApps"; +}; + +export const DataReason6 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason6 = ClosedEnum; + +export const StatusSeverity6 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity6 = ClosedEnum; + +export type DataCollectionIssue6 = { + message: string; + reason: DataReason6; + severity: StatusSeverity6; + source: string; +}; + +export const DataHealth6 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth6 = ClosedEnum; + +export const StatusLifecycle6 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle6 = ClosedEnum; + +export type ResourceHeartbeatStatus6 = { + collectionIssues: Array; + health: DataHealth6; + lifecycle: StatusLifecycle6; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataGcpCloudRun = { + containerImage?: string | null | undefined; + cpuLimit?: string | null | undefined; + generation?: number | null | undefined; + latestCreatedRevision?: string | null | undefined; + latestReadyRevision?: string | null | undefined; + maxInstanceCount?: number | null | undefined; + memoryLimit?: string | null | undefined; + minInstanceCount?: number | null | undefined; + observedGeneration?: number | null | undefined; + region?: string | null | undefined; + service: string; + status: ResourceHeartbeatStatus6; + trafficCount: number; + uri?: string | null | undefined; + urls: Array; + backend: "gcpCloudRun"; +}; + +export const DataReason5 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason5 = ClosedEnum; + +export const StatusSeverity5 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity5 = ClosedEnum; + +export type DataCollectionIssue5 = { + message: string; + reason: DataReason5; + severity: StatusSeverity5; + source: string; +}; + +export const DataHealth5 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth5 = ClosedEnum; + +export const StatusLifecycle5 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle5 = ClosedEnum; + +export type ResourceHeartbeatStatus5 = { + collectionIssues: Array; + health: DataHealth5; + lifecycle: StatusLifecycle5; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataAwsLambda = { + codeSha256?: string | null | undefined; + functionName: string; + functionUrlAuthType?: string | null | undefined; + functionUrlCorsPresent: boolean; + lastModified?: string | null | undefined; + lastUpdateStatus?: string | null | undefined; + lastUpdateStatusReason?: string | null | undefined; + lastUpdateStatusReasonCode?: string | null | undefined; + layerCount: number; + memorySizeMb?: number | null | undefined; + packageType?: string | null | undefined; + revisionId?: string | null | undefined; + runtime?: string | null | undefined; + state?: string | null | undefined; + stateReason?: string | null | undefined; + stateReasonCode?: string | null | undefined; + status: ResourceHeartbeatStatus5; + timeoutSeconds?: number | null | undefined; + triggerCount: number; + version?: string | null | undefined; + backend: "awsLambda"; +}; + +export type SyncReconcileRequestDataUnion2 = + | DataAwsLambda + | DataGcpCloudRun + | DataAzureContainerApps1 + | DataKubernetes1 + | DataLocal2; + +export type DataWorker = { + data: + | DataAwsLambda + | DataGcpCloudRun + | DataAzureContainerApps1 + | DataKubernetes1 + | DataLocal2; + resourceType: "worker"; +}; + +export const DataReason4 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason4 = ClosedEnum; + +export const StatusSeverity4 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity4 = ClosedEnum; + +export type DataCollectionIssue4 = { + message: string; + reason: DataReason4; + severity: StatusSeverity4; + source: string; +}; + +export const DataHealth4 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth4 = ClosedEnum; + +export const StatusLifecycle4 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle4 = ClosedEnum; + +export type ResourceHeartbeatStatus4 = { + collectionIssues: Array; + health: DataHealth4; + lifecycle: StatusLifecycle4; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataLocal1 = { + isDirectory?: boolean | null | undefined; + modifiedAt?: Date | null | undefined; + path: string; + pathExists: boolean; + readonly?: boolean | null | undefined; + status: ResourceHeartbeatStatus4; + backend: "local"; +}; + +export const DataReason3 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason3 = ClosedEnum; + +export const StatusSeverity3 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity3 = ClosedEnum; + +export type DataCollectionIssue3 = { + message: string; + reason: DataReason3; + severity: StatusSeverity3; + source: string; +}; + +export const DataHealth3 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth3 = ClosedEnum; + +export const StatusLifecycle3 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle3 = ClosedEnum; + +export type ResourceHeartbeatStatus3 = { + collectionIssues: Array; + health: DataHealth3; + lifecycle: StatusLifecycle3; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataAzureBlob = { + accessTier?: string | null | undefined; + accountKind?: string | null | undefined; + allowBlobPublicAccess?: boolean | null | undefined; + blobDeleteRetentionDays?: number | null | undefined; + blobDeleteRetentionEnabled?: boolean | null | undefined; + blobEncryptionEnabled?: boolean | null | undefined; + blobVersioningEnabled?: boolean | null | undefined; + changeFeedEnabled?: boolean | null | undefined; + changeFeedRetentionDays?: number | null | undefined; + containerDeleteRetentionDays?: number | null | undefined; + containerDeleteRetentionEnabled?: boolean | null | undefined; + containerPublicAccess?: string | null | undefined; + encryptionKeySource?: string | null | undefined; + fileEncryptionEnabled?: boolean | null | undefined; + location?: string | null | undefined; + name: string; + primaryLocation?: string | null | undefined; + provisioningState?: string | null | undefined; + publicNetworkAccess?: string | null | undefined; + queueEncryptionEnabled?: boolean | null | undefined; + resourceGroup?: string | null | undefined; + secondaryLocation?: string | null | undefined; + skuName?: string | null | undefined; + skuTier?: string | null | undefined; + status: ResourceHeartbeatStatus3; + statusOfPrimary?: string | null | undefined; + statusOfSecondary?: string | null | undefined; + storageAccountName?: string | null | undefined; + tableEncryptionEnabled?: boolean | null | undefined; + backend: "azureBlob"; +}; + +export const DataReason2 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason2 = ClosedEnum; + +export const StatusSeverity2 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity2 = ClosedEnum; + +export type DataCollectionIssue2 = { + message: string; + reason: DataReason2; + severity: StatusSeverity2; + source: string; +}; + +export const DataHealth2 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth2 = ClosedEnum; + +export const StatusLifecycle2 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle2 = ClosedEnum; + +export type ResourceHeartbeatStatus2 = { + collectionIssues: Array; + health: DataHealth2; + lifecycle: StatusLifecycle2; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataGcpCloudStorage = { + bucketId?: string | null | undefined; + defaultKmsKeyName?: string | null | undefined; + encryptionConfigPresent: boolean; + lifecyclePresent: boolean; + lifecycleRuleCount?: number | null | undefined; + location?: string | null | undefined; + locationType?: string | null | undefined; + name: string; + publicAccessPrevention?: string | null | undefined; + retentionPeriod?: string | null | undefined; + retentionPolicyEffectiveTime?: string | null | undefined; + retentionPolicyIsLocked?: boolean | null | undefined; + softDeleteEffectiveTime?: string | null | undefined; + softDeleteRetentionDurationSeconds?: string | null | undefined; + status: ResourceHeartbeatStatus2; + storageClass?: string | null | undefined; + uniformBucketLevelAccessEnabled?: boolean | null | undefined; + uniformBucketLevelAccessLockedTime?: string | null | undefined; + versioningEnabled?: boolean | null | undefined; + backend: "gcpCloudStorage"; +}; + +export const DataReason1 = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type DataReason1 = ClosedEnum; + +export const StatusSeverity1 = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type StatusSeverity1 = ClosedEnum; + +export type DataCollectionIssue1 = { + message: string; + reason: DataReason1; + severity: StatusSeverity1; + source: string; +}; + +export const DataHealth1 = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type DataHealth1 = ClosedEnum; + +export const StatusLifecycle1 = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type StatusLifecycle1 = ClosedEnum; + +export type ResourceHeartbeatStatus1 = { + collectionIssues: Array; + health: DataHealth1; + lifecycle: StatusLifecycle1; + message?: string | null | undefined; + partial: boolean; + stale: boolean; +}; + +export type DataAwsS3 = { + blockPublicAcls?: boolean | null | undefined; + blockPublicPolicy?: boolean | null | undefined; + bucketAclPresent?: boolean | null | undefined; + bucketLocation?: string | null | undefined; + bucketPolicyPresent?: boolean | null | undefined; + encryptionConfigPresent: boolean; + encryptionEnabled?: boolean | null | undefined; + ignorePublicAcls?: boolean | null | undefined; + lifecyclePresent: boolean; + lifecycleRuleCount?: number | null | undefined; + name: string; + publicAccessBlockPresent: boolean; + region?: string | null | undefined; + restrictPublicBuckets?: boolean | null | undefined; + status: ResourceHeartbeatStatus1; + versioningEnabled?: boolean | null | undefined; + versioningStatus?: string | null | undefined; + backend: "awsS3"; +}; + +export type SyncReconcileRequestDataUnion1 = + | DataAwsS3 + | DataGcpCloudStorage + | DataAzureBlob + | DataLocal1; + +export type DataStorage = { + data: DataAwsS3 | DataGcpCloudStorage | DataAzureBlob | DataLocal1; + resourceType: "storage"; +}; + +export type SyncReconcileRequestDataUnion16 = + | DataStorage + | DataWorker + | DataContainer + | DataDaemon + | DataComputeCluster + | DataKubernetesCluster + | DataQueue + | DataKv + | DataPostgres + | DataVault + | DataServiceAccount + | DataNetwork + | DataRemoteStackManagement + | DataArtifactRegistry + | DataBuild + | DataServiceActivation + | DataAzureResourceGroup + | DataAzureStorageAccount + | DataAzureContainerAppsEnvironment + | DataAzureServiceBusNamespace; + +export const ResourceHeartbeatFormat = { + Json: "json", + Yaml: "yaml", + Text: "text", +} as const; +export type ResourceHeartbeatFormat = ClosedEnum< + typeof ResourceHeartbeatFormat +>; + +export type ResourceHeartbeatRaw = { + body: string; + collectedAt: Date; + format: ResourceHeartbeatFormat; + source: string; + truncated: boolean; +}; + +export type ResourceHeartbeat = { + backend: ResourceHeartbeatBackendEnum; + /** + * Represents the target cloud platform. + */ + controllerPlatform: ResourceHeartbeatControllerPlatform; + data: + | DataStorage + | DataWorker + | DataContainer + | DataDaemon + | DataComputeCluster + | DataKubernetesCluster + | DataQueue + | DataKv + | DataPostgres + | DataVault + | DataServiceAccount + | DataNetwork + | DataRemoteStackManagement + | DataArtifactRegistry + | DataBuild + | DataServiceActivation + | DataAzureResourceGroup + | DataAzureStorageAccount + | DataAzureContainerAppsEnvironment + | DataAzureServiceBusNamespace; + deploymentId?: string | null | undefined; + observedAt: Date; + raw: Array; + /** + * Alien resource id, such as the `alien.Container` or `alien.Storage` + * + * @remarks + * resource id from the stack. + */ + resourceId: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + resourceType: string; +}; + +/** + * Backend whose observer produced this snapshot. + */ +export const ObservedInventoryBatchBackend = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Local: "local", + Managed: "managed", + External: "external", + Test: "test", +} as const; +/** + * Backend whose observer produced this snapshot. + */ +export type ObservedInventoryBatchBackend = ClosedEnum< + typeof ObservedInventoryBatchBackend +>; + +/** + * Represents the target cloud platform. + */ +export const ObservedInventoryBatchControllerPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type ObservedInventoryBatchControllerPlatform = ClosedEnum< + typeof ObservedInventoryBatchControllerPlatform +>; + +export const ResourceReason = { + Forbidden: "forbidden", + NotInstalled: "not-installed", + ApiUnavailable: "api-unavailable", + CollectionFailed: "collection-failed", + TimedOut: "timed-out", +} as const; +export type ResourceReason = ClosedEnum; + +export const ResourceSeverity = { + Info: "info", + Warning: "warning", + Error: "error", +} as const; +export type ResourceSeverity = ClosedEnum; + +export type ResourceCollectionIssue = { + message: string; + reason: ResourceReason; + severity: ResourceSeverity; + source: string; +}; + +export type Counts = { + current?: number | null | undefined; + desired?: number | null | undefined; + ready?: number | null | undefined; +}; + +export type CountsUnion = Counts | any; + +export const ResourceHealth = { + Unknown: "unknown", + Healthy: "healthy", + Degraded: "degraded", + Unhealthy: "unhealthy", +} as const; +export type ResourceHealth = ClosedEnum; + +export const ResourceLifecycle = { + Unknown: "unknown", + Creating: "creating", + Updating: "updating", + Running: "running", + Scaling: "scaling", + Stopping: "stopping", + Stopped: "stopped", + Deleting: "deleting", + Deleted: "deleted", + Failed: "failed", +} as const; +export type ResourceLifecycle = ClosedEnum; + +export const ResourceFormat = { + Json: "json", + Yaml: "yaml", + Text: "text", +} as const; +export type ResourceFormat = ClosedEnum; + +export type ResourceRaw = { + body: string; + collectedAt: Date; + format: ResourceFormat; + source: string; + truncated: boolean; +}; + +export type ResourceTypeHint = string | any; + +export type ObservedInventoryBatchResource = { + alienResourceId?: string | null | undefined; + attributes?: { [k: string]: any | null } | undefined; + collectionIssues?: Array | undefined; + counts?: Counts | any | null | undefined; + deploymentId?: string | null | undefined; + displayName: string; + health: ResourceHealth; + labels?: { [k: string]: string } | undefined; + lifecycle: ResourceLifecycle; + message?: string | null | undefined; + namespace?: string | null | undefined; + partial: boolean; + /** + * Provider-native kind, such as `apps/v1/Deployment`, + * + * @remarks + * `AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure + * resource type. + */ + providerKind: string; + providerStale: boolean; + raw?: Array | undefined; + /** + * Provider-native stable identity: Kubernetes object identity, cloud ARN, + * + * @remarks + * GCP full resource name, Azure resource id, etc. + */ + rawIdentity: string; + region?: string | null | undefined; + resourceTypeHint?: string | any | null | undefined; + scope?: string | null | undefined; + /** + * Release/version identity observed from the provider resource, when available. + */ + version?: string | null | undefined; +}; + +export type ObservedInventoryBatch = { + /** + * Backend whose observer produced this snapshot. + */ + backend: ObservedInventoryBatchBackend; + /** + * Whether this batch is a complete replacement for the scope. Complete + * + * @remarks + * batches tombstone previously observed rows in the same scope when they + * are absent from `resources`. + */ + complete: boolean; + /** + * Represents the target cloud platform. + */ + controllerPlatform: ObservedInventoryBatchControllerPlatform; + /** + * Stable scope for the provider list operation that produced this batch. + */ + inventoryScope: string; + /** + * Time the inventory scope was observed. + */ + observedAt: Date; + resources: Array; + /** + * Writer/source for this inventory pass, such as `operator` or + * + * @remarks + * `manager-observer`. + */ + sourceKind: string; +}; + +/** + * Request to reconcile deployment state + */ +export type SyncReconcileRequest = { + /** + * Deployment ID to reconcile state for + */ + deploymentId: string; + /** + * Lock session (push model only) - verifies lock ownership + */ + session?: string | undefined; + /** + * Complete deployment state after step() execution + */ + state: SyncReconcileRequestState; + /** + * Update heartbeat timestamp (for successful health checks) + */ + updateHeartbeat?: boolean | undefined; + /** + * Delay before this deployment should be acquired again. + */ + suggestedDelayMs?: number | undefined; + /** + * Latest typed resource heartbeats collected during this step. + */ + resourceHeartbeats?: Array | undefined; + /** + * Observed raw-resource inventory batches read during this step. + */ + observedInventoryBatches?: Array | undefined; + /** + * Operator-reported runtime capabilities. + */ + capabilities?: Array | undefined; + /** + * Operator binary version reported by the runtime. + */ + operatorVersion?: string | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseTypeStringList$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseTypeStringList, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound = { + type: string; + value: Array; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound, + SyncReconcileRequestCurrentReleaseDefaultStringList + > = z.object({ + type: SyncReconcileRequestCurrentReleaseTypeStringList$outboundSchema, + value: z.array(z.string()), + }); + +export function syncReconcileRequestCurrentReleaseDefaultStringListToJSON( + syncReconcileRequestCurrentReleaseDefaultStringList: + SyncReconcileRequestCurrentReleaseDefaultStringList, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema.parse( + syncReconcileRequestCurrentReleaseDefaultStringList, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseTypeBoolean$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseTypeBoolean, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound = { + type: string; + value: boolean; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound, + SyncReconcileRequestCurrentReleaseDefaultBoolean + > = z.object({ + type: SyncReconcileRequestCurrentReleaseTypeBoolean$outboundSchema, + value: z.boolean(), + }); + +export function syncReconcileRequestCurrentReleaseDefaultBooleanToJSON( + syncReconcileRequestCurrentReleaseDefaultBoolean: + SyncReconcileRequestCurrentReleaseDefaultBoolean, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema.parse( + syncReconcileRequestCurrentReleaseDefaultBoolean, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseTypeNumber$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseTypeNumber, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound = { + type: string; + value: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound, + SyncReconcileRequestCurrentReleaseDefaultNumber + > = z.object({ + type: SyncReconcileRequestCurrentReleaseTypeNumber$outboundSchema, + value: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseDefaultNumberToJSON( + syncReconcileRequestCurrentReleaseDefaultNumber: + SyncReconcileRequestCurrentReleaseDefaultNumber, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema.parse( + syncReconcileRequestCurrentReleaseDefaultNumber, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseTypeString$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseTypeString, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseDefaultString$Outbound = { + type: string; + value: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseDefaultString$Outbound, + SyncReconcileRequestCurrentReleaseDefaultString + > = z.object({ + type: SyncReconcileRequestCurrentReleaseTypeString$outboundSchema, + value: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseDefaultStringToJSON( + syncReconcileRequestCurrentReleaseDefaultString: + SyncReconcileRequestCurrentReleaseDefaultString, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema.parse( + syncReconcileRequestCurrentReleaseDefaultString, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseDefaultUnion$Outbound = + | SyncReconcileRequestCurrentReleaseDefaultString$Outbound + | SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound + | SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound + | SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound + | any; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseDefaultUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseDefaultUnion$Outbound, + SyncReconcileRequestCurrentReleaseDefaultUnion + > = z.union([ + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema + ), + z.any(), + ]); + +export function syncReconcileRequestCurrentReleaseDefaultUnionToJSON( + syncReconcileRequestCurrentReleaseDefaultUnion: + SyncReconcileRequestCurrentReleaseDefaultUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseDefaultUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseDefaultUnion, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseTypeEnvEnum$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseTypeEnvEnum, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseTypeUnion$Outbound = string | any; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseTypeUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseTypeUnion$Outbound, + SyncReconcileRequestCurrentReleaseTypeUnion + > = z.union([ + SyncReconcileRequestCurrentReleaseTypeEnvEnum$outboundSchema, + z.any(), + ]); + +export function syncReconcileRequestCurrentReleaseTypeUnionToJSON( + syncReconcileRequestCurrentReleaseTypeUnion: + SyncReconcileRequestCurrentReleaseTypeUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseTypeUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseTypeUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseEnv$Outbound = { + name: string; + targetResources?: Array | null | undefined; + type?: string | any | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseEnv$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentReleaseEnv$Outbound, + SyncReconcileRequestCurrentReleaseEnv +> = z.object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncReconcileRequestCurrentReleaseTypeEnvEnum$outboundSchema, + z.any(), + ]), + ).optional(), +}); + +export function syncReconcileRequestCurrentReleaseEnvToJSON( + syncReconcileRequestCurrentReleaseEnv: SyncReconcileRequestCurrentReleaseEnv, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseEnv$outboundSchema.parse( + syncReconcileRequestCurrentReleaseEnv, + ), + ); +} + +/** @internal */ +export const CurrentReleaseStateKind$outboundSchema: z.ZodEnum< + typeof CurrentReleaseStateKind +> = z.enum(CurrentReleaseStateKind); + +/** @internal */ +export const SyncReconcileRequestCurrentReleasePlatform$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleasePlatform, + ); + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProvidedBy$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseProvidedBy, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseValidation$Outbound = { + format?: string | null | undefined; + max?: string | null | undefined; + maxItems?: number | null | undefined; + maxLength?: number | null | undefined; + min?: string | null | undefined; + minItems?: number | null | undefined; + minLength?: number | null | undefined; + pattern?: string | null | undefined; + values?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseValidation$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseValidation$Outbound, + SyncReconcileRequestCurrentReleaseValidation + > = z.object({ + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseValidationToJSON( + syncReconcileRequestCurrentReleaseValidation: + SyncReconcileRequestCurrentReleaseValidation, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseValidation$outboundSchema.parse( + syncReconcileRequestCurrentReleaseValidation, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseValidationUnion$Outbound = + | SyncReconcileRequestCurrentReleaseValidation$Outbound + | any; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseValidationUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseValidationUnion$Outbound, + SyncReconcileRequestCurrentReleaseValidationUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseValidation$outboundSchema), + z.any(), + ]); + +export function syncReconcileRequestCurrentReleaseValidationUnionToJSON( + syncReconcileRequestCurrentReleaseValidationUnion: + SyncReconcileRequestCurrentReleaseValidationUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseValidationUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseValidationUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseInput$Outbound = { + default?: + | SyncReconcileRequestCurrentReleaseDefaultString$Outbound + | SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound + | SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound + | SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound + | any + | null + | undefined; + description: string; + env?: Array | undefined; + id: string; + kind: string; + label: string; + placeholder?: string | null | undefined; + platforms?: Array | null | undefined; + providedBy: Array; + required: boolean; + validation?: + | SyncReconcileRequestCurrentReleaseValidation$Outbound + | any + | null + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseInput$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentReleaseInput$Outbound, + SyncReconcileRequestCurrentReleaseInput +> = z.object({ + default: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => SyncReconcileRequestCurrentReleaseEnv$outboundSchema), + ).optional(), + id: z.string(), + kind: CurrentReleaseStateKind$outboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array(SyncReconcileRequestCurrentReleasePlatform$outboundSchema), + ).optional(), + providedBy: z.array( + SyncReconcileRequestCurrentReleaseProvidedBy$outboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseValidation$outboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function syncReconcileRequestCurrentReleaseInputToJSON( + syncReconcileRequestCurrentReleaseInput: + SyncReconcileRequestCurrentReleaseInput, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseInput$outboundSchema.parse( + syncReconcileRequestCurrentReleaseInput, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseManagementEnum$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseManagementEnum, + ); + +/** @internal */ +export type CurrentReleaseOverrideStateAwResource$Outbound = { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; +}; + +/** @internal */ +export const CurrentReleaseOverrideStateAwResource$outboundSchema: z.ZodType< + CurrentReleaseOverrideStateAwResource$Outbound, + CurrentReleaseOverrideStateAwResource +> = z.object({ + condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) + .optional(), + resources: z.array(z.string()), +}); + +export function currentReleaseOverrideStateAwResourceToJSON( + currentReleaseOverrideStateAwResource: CurrentReleaseOverrideStateAwResource, +): string { + return JSON.stringify( + CurrentReleaseOverrideStateAwResource$outboundSchema.parse( + currentReleaseOverrideStateAwResource, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAwStack$Outbound = { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAwStack$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAwStack + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAwStackToJSON( + syncReconcileRequestCurrentReleaseOverrideAwStack: + SyncReconcileRequestCurrentReleaseOverrideAwStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAwStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAwBinding$Outbound = { + resource?: CurrentReleaseOverrideStateAwResource$Outbound | undefined; + stack?: + | SyncReconcileRequestCurrentReleaseOverrideAwStack$Outbound + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAwBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAwBinding$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAwBinding + > = z.object({ + resource: z.lazy(() => CurrentReleaseOverrideStateAwResource$outboundSchema) + .optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAwBindingToJSON( + syncReconcileRequestCurrentReleaseOverrideAwBinding: + SyncReconcileRequestCurrentReleaseOverrideAwBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAwBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAwBinding, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideEffect$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseOverrideEffect, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAwGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAwGrantToJSON( + syncReconcileRequestCurrentReleaseOverrideAwGrant: + SyncReconcileRequestCurrentReleaseOverrideAwGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAwGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAw$Outbound = { + binding: SyncReconcileRequestCurrentReleaseOverrideAwBinding$Outbound; + description?: string | null | undefined; + effect?: string | undefined; + grant: SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAw$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAw$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAw + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAwBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncReconcileRequestCurrentReleaseOverrideEffect$outboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAwToJSON( + syncReconcileRequestCurrentReleaseOverrideAw: + SyncReconcileRequestCurrentReleaseOverrideAw, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAw$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAw, + ), + ); +} + +/** @internal */ +export type CurrentReleaseOverrideStateAzureResource$Outbound = { + scope: string; +}; + +/** @internal */ +export const CurrentReleaseOverrideStateAzureResource$outboundSchema: z.ZodType< + CurrentReleaseOverrideStateAzureResource$Outbound, + CurrentReleaseOverrideStateAzureResource +> = z.object({ + scope: z.string(), +}); + +export function currentReleaseOverrideStateAzureResourceToJSON( + currentReleaseOverrideStateAzureResource: + CurrentReleaseOverrideStateAzureResource, +): string { + return JSON.stringify( + CurrentReleaseOverrideStateAzureResource$outboundSchema.parse( + currentReleaseOverrideStateAzureResource, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAzureStack$Outbound = { + scope: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAzureStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAzureStack$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAzureStack + > = z.object({ + scope: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAzureStackToJSON( + syncReconcileRequestCurrentReleaseOverrideAzureStack: + SyncReconcileRequestCurrentReleaseOverrideAzureStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAzureStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAzureStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAzureBinding$Outbound = { + resource?: CurrentReleaseOverrideStateAzureResource$Outbound | undefined; + stack?: + | SyncReconcileRequestCurrentReleaseOverrideAzureStack$Outbound + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAzureBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAzureBinding$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAzureBinding + > = z.object({ + resource: z.lazy(() => + CurrentReleaseOverrideStateAzureResource$outboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAzureStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAzureBindingToJSON( + syncReconcileRequestCurrentReleaseOverrideAzureBinding: + SyncReconcileRequestCurrentReleaseOverrideAzureBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAzureBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAzureBinding, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAzureGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAzureGrant$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAzureGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAzureGrantToJSON( + syncReconcileRequestCurrentReleaseOverrideAzureGrant: + SyncReconcileRequestCurrentReleaseOverrideAzureGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAzureGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideAzure$Outbound = { + binding: SyncReconcileRequestCurrentReleaseOverrideAzureBinding$Outbound; + description?: string | null | undefined; + grant: SyncReconcileRequestCurrentReleaseOverrideAzureGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideAzure$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideAzure$Outbound, + SyncReconcileRequestCurrentReleaseOverrideAzure + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAzureBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideAzureToJSON( + syncReconcileRequestCurrentReleaseOverrideAzure: + SyncReconcileRequestCurrentReleaseOverrideAzure, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideAzure$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideAzure, + ), + ); +} + +/** @internal */ +export type CurrentReleaseOverrideConditionStateResource$Outbound = { + expression: string; + title: string; +}; + +/** @internal */ +export const CurrentReleaseOverrideConditionStateResource$outboundSchema: + z.ZodType< + CurrentReleaseOverrideConditionStateResource$Outbound, + CurrentReleaseOverrideConditionStateResource + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function currentReleaseOverrideConditionStateResourceToJSON( + currentReleaseOverrideConditionStateResource: + CurrentReleaseOverrideConditionStateResource, +): string { + return JSON.stringify( + CurrentReleaseOverrideConditionStateResource$outboundSchema.parse( + currentReleaseOverrideConditionStateResource, + ), + ); +} + +/** @internal */ +export type CurrentReleaseOverrideStateResourceConditionUnion$Outbound = + | CurrentReleaseOverrideConditionStateResource$Outbound + | any; + +/** @internal */ +export const CurrentReleaseOverrideStateResourceConditionUnion$outboundSchema: + z.ZodType< + CurrentReleaseOverrideStateResourceConditionUnion$Outbound, + CurrentReleaseOverrideStateResourceConditionUnion + > = z.union([ + z.lazy(() => CurrentReleaseOverrideConditionStateResource$outboundSchema), + z.any(), + ]); + +export function currentReleaseOverrideStateResourceConditionUnionToJSON( + currentReleaseOverrideStateResourceConditionUnion: + CurrentReleaseOverrideStateResourceConditionUnion, +): string { + return JSON.stringify( + CurrentReleaseOverrideStateResourceConditionUnion$outboundSchema.parse( + currentReleaseOverrideStateResourceConditionUnion, + ), + ); +} + +/** @internal */ +export type CurrentReleaseOverrideStateGcpResource$Outbound = { + condition?: + | CurrentReleaseOverrideConditionStateResource$Outbound + | any + | null + | undefined; + scope: string; +}; + +/** @internal */ +export const CurrentReleaseOverrideStateGcpResource$outboundSchema: z.ZodType< + CurrentReleaseOverrideStateGcpResource$Outbound, + CurrentReleaseOverrideStateGcpResource +> = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => CurrentReleaseOverrideConditionStateResource$outboundSchema), + z.any(), + ]), + ).optional(), + scope: z.string(), +}); + +export function currentReleaseOverrideStateGcpResourceToJSON( + currentReleaseOverrideStateGcpResource: + CurrentReleaseOverrideStateGcpResource, +): string { + return JSON.stringify( + CurrentReleaseOverrideStateGcpResource$outboundSchema.parse( + currentReleaseOverrideStateGcpResource, + ), + ); +} + +/** @internal */ +export type CurrentReleaseOverrideConditionState$Outbound = { + expression: string; + title: string; +}; + +/** @internal */ +export const CurrentReleaseOverrideConditionState$outboundSchema: z.ZodType< + CurrentReleaseOverrideConditionState$Outbound, + CurrentReleaseOverrideConditionState +> = z.object({ + expression: z.string(), + title: z.string(), +}); + +export function currentReleaseOverrideConditionStateToJSON( + currentReleaseOverrideConditionState: CurrentReleaseOverrideConditionState, +): string { + return JSON.stringify( + CurrentReleaseOverrideConditionState$outboundSchema.parse( + currentReleaseOverrideConditionState, + ), + ); +} + +/** @internal */ +export type CurrentReleaseOverrideStateConditionUnion$Outbound = + | CurrentReleaseOverrideConditionState$Outbound + | any; + +/** @internal */ +export const CurrentReleaseOverrideStateConditionUnion$outboundSchema: + z.ZodType< + CurrentReleaseOverrideStateConditionUnion$Outbound, + CurrentReleaseOverrideStateConditionUnion + > = z.union([ + z.lazy(() => CurrentReleaseOverrideConditionState$outboundSchema), + z.any(), + ]); + +export function currentReleaseOverrideStateConditionUnionToJSON( + currentReleaseOverrideStateConditionUnion: + CurrentReleaseOverrideStateConditionUnion, +): string { + return JSON.stringify( + CurrentReleaseOverrideStateConditionUnion$outboundSchema.parse( + currentReleaseOverrideStateConditionUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideGcpStack$Outbound = { + condition?: + | CurrentReleaseOverrideConditionState$Outbound + | any + | null + | undefined; + scope: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideGcpStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideGcpStack$Outbound, + SyncReconcileRequestCurrentReleaseOverrideGcpStack + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => CurrentReleaseOverrideConditionState$outboundSchema), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideGcpStackToJSON( + syncReconcileRequestCurrentReleaseOverrideGcpStack: + SyncReconcileRequestCurrentReleaseOverrideGcpStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideGcpStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideGcpStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideGcpBinding$Outbound = { + resource?: CurrentReleaseOverrideStateGcpResource$Outbound | undefined; + stack?: + | SyncReconcileRequestCurrentReleaseOverrideGcpStack$Outbound + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideGcpBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideGcpBinding$Outbound, + SyncReconcileRequestCurrentReleaseOverrideGcpBinding + > = z.object({ + resource: z.lazy(() => + CurrentReleaseOverrideStateGcpResource$outboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideGcpStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideGcpBindingToJSON( + syncReconcileRequestCurrentReleaseOverrideGcpBinding: + SyncReconcileRequestCurrentReleaseOverrideGcpBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideGcpBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideGcpBinding, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideGcpGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideGcpGrant$Outbound, + SyncReconcileRequestCurrentReleaseOverrideGcpGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideGcpGrantToJSON( + syncReconcileRequestCurrentReleaseOverrideGcpGrant: + SyncReconcileRequestCurrentReleaseOverrideGcpGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideGcpGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideGcp$Outbound = { + binding: SyncReconcileRequestCurrentReleaseOverrideGcpBinding$Outbound; + description?: string | null | undefined; + grant: SyncReconcileRequestCurrentReleaseOverrideGcpGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideGcp$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideGcp$Outbound, + SyncReconcileRequestCurrentReleaseOverrideGcp + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideGcpBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverrideGcpToJSON( + syncReconcileRequestCurrentReleaseOverrideGcp: + SyncReconcileRequestCurrentReleaseOverrideGcp, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideGcp$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideGcp, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverridePlatforms$Outbound = { + aws?: + | Array + | null + | undefined; + azure?: + | Array + | null + | undefined; + gcp?: + | Array + | null + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverridePlatforms$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverridePlatforms$Outbound, + SyncReconcileRequestCurrentReleaseOverridePlatforms + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAw$outboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideAzure$outboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseOverrideGcp$outboundSchema + )), + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseOverridePlatformsToJSON( + syncReconcileRequestCurrentReleaseOverridePlatforms: + SyncReconcileRequestCurrentReleaseOverridePlatforms, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverridePlatforms$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverridePlatforms, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverride$Outbound = { + description: string; + id: string; + platforms: SyncReconcileRequestCurrentReleaseOverridePlatforms$Outbound; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverride$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverride$Outbound, + SyncReconcileRequestCurrentReleaseOverride + > = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileRequestCurrentReleaseOverridePlatforms$outboundSchema + ), + }); + +export function syncReconcileRequestCurrentReleaseOverrideToJSON( + syncReconcileRequestCurrentReleaseOverride: + SyncReconcileRequestCurrentReleaseOverride, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverride$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverride, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseOverrideUnion$Outbound = + | SyncReconcileRequestCurrentReleaseOverride$Outbound + | string; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseOverrideUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseOverrideUnion$Outbound, + SyncReconcileRequestCurrentReleaseOverrideUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseOverride$outboundSchema), + z.string(), + ]); + +export function syncReconcileRequestCurrentReleaseOverrideUnionToJSON( + syncReconcileRequestCurrentReleaseOverrideUnion: + SyncReconcileRequestCurrentReleaseOverrideUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseOverrideUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseOverrideUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseManagement2$Outbound = { + override: { + [k: string]: Array< + SyncReconcileRequestCurrentReleaseOverride$Outbound | string + >; + }; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseManagement2$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseManagement2$Outbound, + SyncReconcileRequestCurrentReleaseManagement2 + > = z.object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseOverride$outboundSchema), + z.string(), + ])), + ), + }); + +export function syncReconcileRequestCurrentReleaseManagement2ToJSON( + syncReconcileRequestCurrentReleaseManagement2: + SyncReconcileRequestCurrentReleaseManagement2, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseManagement2$outboundSchema.parse( + syncReconcileRequestCurrentReleaseManagement2, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendStateAwResource$Outbound = { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; +}; + +/** @internal */ +export const CurrentReleaseExtendStateAwResource$outboundSchema: z.ZodType< + CurrentReleaseExtendStateAwResource$Outbound, + CurrentReleaseExtendStateAwResource +> = z.object({ + condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) + .optional(), + resources: z.array(z.string()), +}); + +export function currentReleaseExtendStateAwResourceToJSON( + currentReleaseExtendStateAwResource: CurrentReleaseExtendStateAwResource, +): string { + return JSON.stringify( + CurrentReleaseExtendStateAwResource$outboundSchema.parse( + currentReleaseExtendStateAwResource, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAwStack$Outbound = { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAwStack$Outbound, + SyncReconcileRequestCurrentReleaseExtendAwStack + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileRequestCurrentReleaseExtendAwStackToJSON( + syncReconcileRequestCurrentReleaseExtendAwStack: + SyncReconcileRequestCurrentReleaseExtendAwStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAwStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAwBinding$Outbound = { + resource?: CurrentReleaseExtendStateAwResource$Outbound | undefined; + stack?: SyncReconcileRequestCurrentReleaseExtendAwStack$Outbound | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAwBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAwBinding$Outbound, + SyncReconcileRequestCurrentReleaseExtendAwBinding + > = z.object({ + resource: z.lazy(() => CurrentReleaseExtendStateAwResource$outboundSchema) + .optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAwBindingToJSON( + syncReconcileRequestCurrentReleaseExtendAwBinding: + SyncReconcileRequestCurrentReleaseExtendAwBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAwBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAwBinding, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendEffect$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseExtendEffect, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound, + SyncReconcileRequestCurrentReleaseExtendAwGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAwGrantToJSON( + syncReconcileRequestCurrentReleaseExtendAwGrant: + SyncReconcileRequestCurrentReleaseExtendAwGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAwGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAw$Outbound = { + binding: SyncReconcileRequestCurrentReleaseExtendAwBinding$Outbound; + description?: string | null | undefined; + effect?: string | undefined; + grant: SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAw$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAw$Outbound, + SyncReconcileRequestCurrentReleaseExtendAw + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAwBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncReconcileRequestCurrentReleaseExtendEffect$outboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAwToJSON( + syncReconcileRequestCurrentReleaseExtendAw: + SyncReconcileRequestCurrentReleaseExtendAw, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAw$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAw, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendStateAzureResource$Outbound = { + scope: string; +}; + +/** @internal */ +export const CurrentReleaseExtendStateAzureResource$outboundSchema: z.ZodType< + CurrentReleaseExtendStateAzureResource$Outbound, + CurrentReleaseExtendStateAzureResource +> = z.object({ + scope: z.string(), +}); + +export function currentReleaseExtendStateAzureResourceToJSON( + currentReleaseExtendStateAzureResource: + CurrentReleaseExtendStateAzureResource, +): string { + return JSON.stringify( + CurrentReleaseExtendStateAzureResource$outboundSchema.parse( + currentReleaseExtendStateAzureResource, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAzureStack$Outbound = { + scope: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAzureStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAzureStack$Outbound, + SyncReconcileRequestCurrentReleaseExtendAzureStack + > = z.object({ + scope: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAzureStackToJSON( + syncReconcileRequestCurrentReleaseExtendAzureStack: + SyncReconcileRequestCurrentReleaseExtendAzureStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAzureStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAzureStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAzureBinding$Outbound = { + resource?: CurrentReleaseExtendStateAzureResource$Outbound | undefined; + stack?: + | SyncReconcileRequestCurrentReleaseExtendAzureStack$Outbound + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAzureBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAzureBinding$Outbound, + SyncReconcileRequestCurrentReleaseExtendAzureBinding + > = z.object({ + resource: z.lazy(() => + CurrentReleaseExtendStateAzureResource$outboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAzureStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAzureBindingToJSON( + syncReconcileRequestCurrentReleaseExtendAzureBinding: + SyncReconcileRequestCurrentReleaseExtendAzureBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAzureBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAzureBinding, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAzureGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAzureGrant$Outbound, + SyncReconcileRequestCurrentReleaseExtendAzureGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAzureGrantToJSON( + syncReconcileRequestCurrentReleaseExtendAzureGrant: + SyncReconcileRequestCurrentReleaseExtendAzureGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAzureGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendAzure$Outbound = { + binding: SyncReconcileRequestCurrentReleaseExtendAzureBinding$Outbound; + description?: string | null | undefined; + grant: SyncReconcileRequestCurrentReleaseExtendAzureGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendAzure$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendAzure$Outbound, + SyncReconcileRequestCurrentReleaseExtendAzure + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAzureBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendAzureToJSON( + syncReconcileRequestCurrentReleaseExtendAzure: + SyncReconcileRequestCurrentReleaseExtendAzure, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendAzure$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendAzure, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendConditionStateResource$Outbound = { + expression: string; + title: string; +}; + +/** @internal */ +export const CurrentReleaseExtendConditionStateResource$outboundSchema: + z.ZodType< + CurrentReleaseExtendConditionStateResource$Outbound, + CurrentReleaseExtendConditionStateResource + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function currentReleaseExtendConditionStateResourceToJSON( + currentReleaseExtendConditionStateResource: + CurrentReleaseExtendConditionStateResource, +): string { + return JSON.stringify( + CurrentReleaseExtendConditionStateResource$outboundSchema.parse( + currentReleaseExtendConditionStateResource, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendStateResourceConditionUnion$Outbound = + | CurrentReleaseExtendConditionStateResource$Outbound + | any; + +/** @internal */ +export const CurrentReleaseExtendStateResourceConditionUnion$outboundSchema: + z.ZodType< + CurrentReleaseExtendStateResourceConditionUnion$Outbound, + CurrentReleaseExtendStateResourceConditionUnion + > = z.union([ + z.lazy(() => CurrentReleaseExtendConditionStateResource$outboundSchema), + z.any(), + ]); + +export function currentReleaseExtendStateResourceConditionUnionToJSON( + currentReleaseExtendStateResourceConditionUnion: + CurrentReleaseExtendStateResourceConditionUnion, +): string { + return JSON.stringify( + CurrentReleaseExtendStateResourceConditionUnion$outboundSchema.parse( + currentReleaseExtendStateResourceConditionUnion, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendStateGcpResource$Outbound = { + condition?: + | CurrentReleaseExtendConditionStateResource$Outbound + | any + | null + | undefined; + scope: string; +}; + +/** @internal */ +export const CurrentReleaseExtendStateGcpResource$outboundSchema: z.ZodType< + CurrentReleaseExtendStateGcpResource$Outbound, + CurrentReleaseExtendStateGcpResource +> = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => CurrentReleaseExtendConditionStateResource$outboundSchema), + z.any(), + ]), + ).optional(), + scope: z.string(), +}); + +export function currentReleaseExtendStateGcpResourceToJSON( + currentReleaseExtendStateGcpResource: CurrentReleaseExtendStateGcpResource, +): string { + return JSON.stringify( + CurrentReleaseExtendStateGcpResource$outboundSchema.parse( + currentReleaseExtendStateGcpResource, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendConditionState$Outbound = { + expression: string; + title: string; +}; + +/** @internal */ +export const CurrentReleaseExtendConditionState$outboundSchema: z.ZodType< + CurrentReleaseExtendConditionState$Outbound, + CurrentReleaseExtendConditionState +> = z.object({ + expression: z.string(), + title: z.string(), +}); + +export function currentReleaseExtendConditionStateToJSON( + currentReleaseExtendConditionState: CurrentReleaseExtendConditionState, +): string { + return JSON.stringify( + CurrentReleaseExtendConditionState$outboundSchema.parse( + currentReleaseExtendConditionState, + ), + ); +} + +/** @internal */ +export type CurrentReleaseExtendStateConditionUnion$Outbound = + | CurrentReleaseExtendConditionState$Outbound + | any; + +/** @internal */ +export const CurrentReleaseExtendStateConditionUnion$outboundSchema: z.ZodType< + CurrentReleaseExtendStateConditionUnion$Outbound, + CurrentReleaseExtendStateConditionUnion +> = z.union([ + z.lazy(() => CurrentReleaseExtendConditionState$outboundSchema), + z.any(), +]); + +export function currentReleaseExtendStateConditionUnionToJSON( + currentReleaseExtendStateConditionUnion: + CurrentReleaseExtendStateConditionUnion, +): string { + return JSON.stringify( + CurrentReleaseExtendStateConditionUnion$outboundSchema.parse( + currentReleaseExtendStateConditionUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound = { + condition?: + | CurrentReleaseExtendConditionState$Outbound + | any + | null + | undefined; + scope: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendGcpStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound, + SyncReconcileRequestCurrentReleaseExtendGcpStack + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => CurrentReleaseExtendConditionState$outboundSchema), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseExtendGcpStackToJSON( + syncReconcileRequestCurrentReleaseExtendGcpStack: + SyncReconcileRequestCurrentReleaseExtendGcpStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendGcpStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendGcpStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendGcpBinding$Outbound = { + resource?: CurrentReleaseExtendStateGcpResource$Outbound | undefined; + stack?: SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendGcpBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendGcpBinding$Outbound, + SyncReconcileRequestCurrentReleaseExtendGcpBinding + > = z.object({ + resource: z.lazy(() => CurrentReleaseExtendStateGcpResource$outboundSchema) + .optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendGcpStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendGcpBindingToJSON( + syncReconcileRequestCurrentReleaseExtendGcpBinding: + SyncReconcileRequestCurrentReleaseExtendGcpBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendGcpBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendGcpBinding, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound, + SyncReconcileRequestCurrentReleaseExtendGcpGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendGcpGrantToJSON( + syncReconcileRequestCurrentReleaseExtendGcpGrant: + SyncReconcileRequestCurrentReleaseExtendGcpGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendGcpGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendGcp$Outbound = { + binding: SyncReconcileRequestCurrentReleaseExtendGcpBinding$Outbound; + description?: string | null | undefined; + grant: SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendGcp$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendGcp$Outbound, + SyncReconcileRequestCurrentReleaseExtendGcp + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendGcpBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendGcpToJSON( + syncReconcileRequestCurrentReleaseExtendGcp: + SyncReconcileRequestCurrentReleaseExtendGcp, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendGcp$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendGcp, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendPlatforms$Outbound = { + aws?: + | Array + | null + | undefined; + azure?: + | Array + | null + | undefined; + gcp?: + | Array + | null + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendPlatforms$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendPlatforms$Outbound, + SyncReconcileRequestCurrentReleaseExtendPlatforms + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAw$outboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendAzure$outboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendGcp$outboundSchema + )), + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseExtendPlatformsToJSON( + syncReconcileRequestCurrentReleaseExtendPlatforms: + SyncReconcileRequestCurrentReleaseExtendPlatforms, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendPlatforms$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendPlatforms, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtend$Outbound = { + description: string; + id: string; + platforms: SyncReconcileRequestCurrentReleaseExtendPlatforms$Outbound; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtend$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentReleaseExtend$Outbound, + SyncReconcileRequestCurrentReleaseExtend +> = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileRequestCurrentReleaseExtendPlatforms$outboundSchema + ), +}); + +export function syncReconcileRequestCurrentReleaseExtendToJSON( + syncReconcileRequestCurrentReleaseExtend: + SyncReconcileRequestCurrentReleaseExtend, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtend$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtend, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseExtendUnion$Outbound = + | SyncReconcileRequestCurrentReleaseExtend$Outbound + | string; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseExtendUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseExtendUnion$Outbound, + SyncReconcileRequestCurrentReleaseExtendUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseExtend$outboundSchema), + z.string(), + ]); + +export function syncReconcileRequestCurrentReleaseExtendUnionToJSON( + syncReconcileRequestCurrentReleaseExtendUnion: + SyncReconcileRequestCurrentReleaseExtendUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseExtendUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseExtendUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseManagement1$Outbound = { + extend: { + [k: string]: Array< + SyncReconcileRequestCurrentReleaseExtend$Outbound | string + >; + }; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseManagement1$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseManagement1$Outbound, + SyncReconcileRequestCurrentReleaseManagement1 + > = z.object({ + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseExtend$outboundSchema), + z.string(), + ])), + ), + }); + +export function syncReconcileRequestCurrentReleaseManagement1ToJSON( + syncReconcileRequestCurrentReleaseManagement1: + SyncReconcileRequestCurrentReleaseManagement1, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseManagement1$outboundSchema.parse( + syncReconcileRequestCurrentReleaseManagement1, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseManagementUnion$Outbound = + | SyncReconcileRequestCurrentReleaseManagement1$Outbound + | SyncReconcileRequestCurrentReleaseManagement2$Outbound + | string; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseManagementUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseManagementUnion$Outbound, + SyncReconcileRequestCurrentReleaseManagementUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseManagement1$outboundSchema), + z.lazy(() => SyncReconcileRequestCurrentReleaseManagement2$outboundSchema), + SyncReconcileRequestCurrentReleaseManagementEnum$outboundSchema, + ]); + +export function syncReconcileRequestCurrentReleaseManagementUnionToJSON( + syncReconcileRequestCurrentReleaseManagementUnion: + SyncReconcileRequestCurrentReleaseManagementUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseManagementUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseManagementUnion, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileStateAwResource$Outbound = { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; +}; + +/** @internal */ +export const CurrentReleaseProfileStateAwResource$outboundSchema: z.ZodType< + CurrentReleaseProfileStateAwResource$Outbound, + CurrentReleaseProfileStateAwResource +> = z.object({ + condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) + .optional(), + resources: z.array(z.string()), +}); + +export function currentReleaseProfileStateAwResourceToJSON( + currentReleaseProfileStateAwResource: CurrentReleaseProfileStateAwResource, +): string { + return JSON.stringify( + CurrentReleaseProfileStateAwResource$outboundSchema.parse( + currentReleaseProfileStateAwResource, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAwStack$Outbound = { + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + resources: Array; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAwStack$Outbound, + SyncReconcileRequestCurrentReleaseProfileAwStack + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileRequestCurrentReleaseProfileAwStackToJSON( + syncReconcileRequestCurrentReleaseProfileAwStack: + SyncReconcileRequestCurrentReleaseProfileAwStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAwStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAwBinding$Outbound = { + resource?: CurrentReleaseProfileStateAwResource$Outbound | undefined; + stack?: SyncReconcileRequestCurrentReleaseProfileAwStack$Outbound | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAwBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAwBinding$Outbound, + SyncReconcileRequestCurrentReleaseProfileAwBinding + > = z.object({ + resource: z.lazy(() => CurrentReleaseProfileStateAwResource$outboundSchema) + .optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAwBindingToJSON( + syncReconcileRequestCurrentReleaseProfileAwBinding: + SyncReconcileRequestCurrentReleaseProfileAwBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAwBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAwBinding, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileEffect$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestCurrentReleaseProfileEffect, + ); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound, + SyncReconcileRequestCurrentReleaseProfileAwGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAwGrantToJSON( + syncReconcileRequestCurrentReleaseProfileAwGrant: + SyncReconcileRequestCurrentReleaseProfileAwGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAwGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAw$Outbound = { + binding: SyncReconcileRequestCurrentReleaseProfileAwBinding$Outbound; + description?: string | null | undefined; + effect?: string | undefined; + grant: SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAw$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAw$Outbound, + SyncReconcileRequestCurrentReleaseProfileAw + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAwBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncReconcileRequestCurrentReleaseProfileEffect$outboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAwToJSON( + syncReconcileRequestCurrentReleaseProfileAw: + SyncReconcileRequestCurrentReleaseProfileAw, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAw$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAw, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileStateAzureResource$Outbound = { + scope: string; +}; + +/** @internal */ +export const CurrentReleaseProfileStateAzureResource$outboundSchema: z.ZodType< + CurrentReleaseProfileStateAzureResource$Outbound, + CurrentReleaseProfileStateAzureResource +> = z.object({ + scope: z.string(), +}); + +export function currentReleaseProfileStateAzureResourceToJSON( + currentReleaseProfileStateAzureResource: + CurrentReleaseProfileStateAzureResource, +): string { + return JSON.stringify( + CurrentReleaseProfileStateAzureResource$outboundSchema.parse( + currentReleaseProfileStateAzureResource, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAzureStack$Outbound = { + scope: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAzureStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAzureStack$Outbound, + SyncReconcileRequestCurrentReleaseProfileAzureStack + > = z.object({ + scope: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAzureStackToJSON( + syncReconcileRequestCurrentReleaseProfileAzureStack: + SyncReconcileRequestCurrentReleaseProfileAzureStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAzureStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAzureStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAzureBinding$Outbound = { + resource?: CurrentReleaseProfileStateAzureResource$Outbound | undefined; + stack?: + | SyncReconcileRequestCurrentReleaseProfileAzureStack$Outbound + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAzureBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAzureBinding$Outbound, + SyncReconcileRequestCurrentReleaseProfileAzureBinding + > = z.object({ + resource: z.lazy(() => + CurrentReleaseProfileStateAzureResource$outboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAzureStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAzureBindingToJSON( + syncReconcileRequestCurrentReleaseProfileAzureBinding: + SyncReconcileRequestCurrentReleaseProfileAzureBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAzureBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAzureBinding, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAzureGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAzureGrant$Outbound, + SyncReconcileRequestCurrentReleaseProfileAzureGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAzureGrantToJSON( + syncReconcileRequestCurrentReleaseProfileAzureGrant: + SyncReconcileRequestCurrentReleaseProfileAzureGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAzureGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileAzure$Outbound = { + binding: SyncReconcileRequestCurrentReleaseProfileAzureBinding$Outbound; + description?: string | null | undefined; + grant: SyncReconcileRequestCurrentReleaseProfileAzureGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileAzure$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileAzure$Outbound, + SyncReconcileRequestCurrentReleaseProfileAzure + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAzureBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileAzureToJSON( + syncReconcileRequestCurrentReleaseProfileAzure: + SyncReconcileRequestCurrentReleaseProfileAzure, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileAzure$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileAzure, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileConditionStateResource$Outbound = { + expression: string; + title: string; +}; + +/** @internal */ +export const CurrentReleaseProfileConditionStateResource$outboundSchema: + z.ZodType< + CurrentReleaseProfileConditionStateResource$Outbound, + CurrentReleaseProfileConditionStateResource + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function currentReleaseProfileConditionStateResourceToJSON( + currentReleaseProfileConditionStateResource: + CurrentReleaseProfileConditionStateResource, +): string { + return JSON.stringify( + CurrentReleaseProfileConditionStateResource$outboundSchema.parse( + currentReleaseProfileConditionStateResource, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileStateResourceConditionUnion$Outbound = + | CurrentReleaseProfileConditionStateResource$Outbound + | any; + +/** @internal */ +export const CurrentReleaseProfileStateResourceConditionUnion$outboundSchema: + z.ZodType< + CurrentReleaseProfileStateResourceConditionUnion$Outbound, + CurrentReleaseProfileStateResourceConditionUnion + > = z.union([ + z.lazy(() => CurrentReleaseProfileConditionStateResource$outboundSchema), + z.any(), + ]); + +export function currentReleaseProfileStateResourceConditionUnionToJSON( + currentReleaseProfileStateResourceConditionUnion: + CurrentReleaseProfileStateResourceConditionUnion, +): string { + return JSON.stringify( + CurrentReleaseProfileStateResourceConditionUnion$outboundSchema.parse( + currentReleaseProfileStateResourceConditionUnion, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileStateGcpResource$Outbound = { + condition?: + | CurrentReleaseProfileConditionStateResource$Outbound + | any + | null + | undefined; + scope: string; +}; + +/** @internal */ +export const CurrentReleaseProfileStateGcpResource$outboundSchema: z.ZodType< + CurrentReleaseProfileStateGcpResource$Outbound, + CurrentReleaseProfileStateGcpResource +> = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => CurrentReleaseProfileConditionStateResource$outboundSchema), + z.any(), + ]), + ).optional(), + scope: z.string(), +}); + +export function currentReleaseProfileStateGcpResourceToJSON( + currentReleaseProfileStateGcpResource: CurrentReleaseProfileStateGcpResource, +): string { + return JSON.stringify( + CurrentReleaseProfileStateGcpResource$outboundSchema.parse( + currentReleaseProfileStateGcpResource, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileConditionState$Outbound = { + expression: string; + title: string; +}; + +/** @internal */ +export const CurrentReleaseProfileConditionState$outboundSchema: z.ZodType< + CurrentReleaseProfileConditionState$Outbound, + CurrentReleaseProfileConditionState +> = z.object({ + expression: z.string(), + title: z.string(), +}); + +export function currentReleaseProfileConditionStateToJSON( + currentReleaseProfileConditionState: CurrentReleaseProfileConditionState, +): string { + return JSON.stringify( + CurrentReleaseProfileConditionState$outboundSchema.parse( + currentReleaseProfileConditionState, + ), + ); +} + +/** @internal */ +export type CurrentReleaseProfileStateConditionUnion$Outbound = + | CurrentReleaseProfileConditionState$Outbound + | any; + +/** @internal */ +export const CurrentReleaseProfileStateConditionUnion$outboundSchema: z.ZodType< + CurrentReleaseProfileStateConditionUnion$Outbound, + CurrentReleaseProfileStateConditionUnion +> = z.union([ + z.lazy(() => CurrentReleaseProfileConditionState$outboundSchema), + z.any(), +]); + +export function currentReleaseProfileStateConditionUnionToJSON( + currentReleaseProfileStateConditionUnion: + CurrentReleaseProfileStateConditionUnion, +): string { + return JSON.stringify( + CurrentReleaseProfileStateConditionUnion$outboundSchema.parse( + currentReleaseProfileStateConditionUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound = { + condition?: + | CurrentReleaseProfileConditionState$Outbound + | any + | null + | undefined; + scope: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileGcpStack$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound, + SyncReconcileRequestCurrentReleaseProfileGcpStack + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => CurrentReleaseProfileConditionState$outboundSchema), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseProfileGcpStackToJSON( + syncReconcileRequestCurrentReleaseProfileGcpStack: + SyncReconcileRequestCurrentReleaseProfileGcpStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileGcpStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileGcpStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileGcpBinding$Outbound = { + resource?: CurrentReleaseProfileStateGcpResource$Outbound | undefined; + stack?: + | SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileGcpBinding$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileGcpBinding$Outbound, + SyncReconcileRequestCurrentReleaseProfileGcpBinding + > = z.object({ + resource: z.lazy(() => CurrentReleaseProfileStateGcpResource$outboundSchema) + .optional(), + stack: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileGcpStack$outboundSchema + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileGcpBindingToJSON( + syncReconcileRequestCurrentReleaseProfileGcpBinding: + SyncReconcileRequestCurrentReleaseProfileGcpBinding, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileGcpBinding$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileGcpBinding, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound = { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound, + SyncReconcileRequestCurrentReleaseProfileGcpGrant + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileGcpGrantToJSON( + syncReconcileRequestCurrentReleaseProfileGcpGrant: + SyncReconcileRequestCurrentReleaseProfileGcpGrant, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileGcpGrant, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileGcp$Outbound = { + binding: SyncReconcileRequestCurrentReleaseProfileGcpBinding$Outbound; + description?: string | null | undefined; + grant: SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound; + label?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileGcp$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileGcp$Outbound, + SyncReconcileRequestCurrentReleaseProfileGcp + > = z.object({ + binding: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileGcpBinding$outboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfileGcpToJSON( + syncReconcileRequestCurrentReleaseProfileGcp: + SyncReconcileRequestCurrentReleaseProfileGcp, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileGcp$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileGcp, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfilePlatforms$Outbound = { + aws?: + | Array + | null + | undefined; + azure?: + | Array + | null + | undefined; + gcp?: + | Array + | null + | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfilePlatforms$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfilePlatforms$Outbound, + SyncReconcileRequestCurrentReleaseProfilePlatforms + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAw$outboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileAzure$outboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileRequestCurrentReleaseProfileGcp$outboundSchema + )), + ).optional(), + }); + +export function syncReconcileRequestCurrentReleaseProfilePlatformsToJSON( + syncReconcileRequestCurrentReleaseProfilePlatforms: + SyncReconcileRequestCurrentReleaseProfilePlatforms, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfilePlatforms$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfilePlatforms, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfile$Outbound = { + description: string; + id: string; + platforms: SyncReconcileRequestCurrentReleaseProfilePlatforms$Outbound; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfile$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfile$Outbound, + SyncReconcileRequestCurrentReleaseProfile + > = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileRequestCurrentReleaseProfilePlatforms$outboundSchema + ), + }); + +export function syncReconcileRequestCurrentReleaseProfileToJSON( + syncReconcileRequestCurrentReleaseProfile: + SyncReconcileRequestCurrentReleaseProfile, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfile$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfile, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseProfileUnion$Outbound = + | SyncReconcileRequestCurrentReleaseProfile$Outbound + | string; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseProfileUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseProfileUnion$Outbound, + SyncReconcileRequestCurrentReleaseProfileUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestCurrentReleaseProfile$outboundSchema), + z.string(), + ]); + +export function syncReconcileRequestCurrentReleaseProfileUnionToJSON( + syncReconcileRequestCurrentReleaseProfileUnion: + SyncReconcileRequestCurrentReleaseProfileUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseProfileUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseProfileUnion, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleasePermissions$Outbound = { + management?: + | SyncReconcileRequestCurrentReleaseManagement1$Outbound + | SyncReconcileRequestCurrentReleaseManagement2$Outbound + | string + | undefined; + profiles: { + [k: string]: { + [k: string]: Array< + SyncReconcileRequestCurrentReleaseProfile$Outbound | string + >; + }; + }; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleasePermissions$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleasePermissions$Outbound, + SyncReconcileRequestCurrentReleasePermissions + > = z.object({ + management: z.union([ + z.lazy(() => + SyncReconcileRequestCurrentReleaseManagement1$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestCurrentReleaseManagement2$outboundSchema + ), + SyncReconcileRequestCurrentReleaseManagementEnum$outboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncReconcileRequestCurrentReleaseProfile$outboundSchema + ), + z.string(), + ]), + ), + ), + ), + }); + +export function syncReconcileRequestCurrentReleasePermissionsToJSON( + syncReconcileRequestCurrentReleasePermissions: + SyncReconcileRequestCurrentReleasePermissions, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleasePermissions$outboundSchema.parse( + syncReconcileRequestCurrentReleasePermissions, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseConfig$Outbound = { + id: string; + type: string; + [additionalProperties: string]: unknown; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseConfig$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentReleaseConfig$Outbound, + SyncReconcileRequestCurrentReleaseConfig +> = z.object({ + id: z.string(), + type: z.string(), + additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(), +}).transform((v) => { + return { + ...v.additionalProperties, + ...remap$(v, { + additionalProperties: null, + }), + }; +}); + +export function syncReconcileRequestCurrentReleaseConfigToJSON( + syncReconcileRequestCurrentReleaseConfig: + SyncReconcileRequestCurrentReleaseConfig, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseConfig$outboundSchema.parse( + syncReconcileRequestCurrentReleaseConfig, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseDependency$Outbound = { + id: string; + type: string; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseDependency$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseDependency$Outbound, + SyncReconcileRequestCurrentReleaseDependency + > = z.object({ + id: z.string(), + type: z.string(), + }); + +export function syncReconcileRequestCurrentReleaseDependencyToJSON( + syncReconcileRequestCurrentReleaseDependency: + SyncReconcileRequestCurrentReleaseDependency, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseDependency$outboundSchema.parse( + syncReconcileRequestCurrentReleaseDependency, + ), + ); +} + +/** @internal */ +export const CurrentReleaseStateLifecycle$outboundSchema: z.ZodEnum< + typeof CurrentReleaseStateLifecycle +> = z.enum(CurrentReleaseStateLifecycle); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseResources$Outbound = { + config: SyncReconcileRequestCurrentReleaseConfig$Outbound; + dependencies: Array; + enabledWhen?: string | null | undefined; + lifecycle: string; + remoteAccess?: boolean | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseResources$outboundSchema: + z.ZodType< + SyncReconcileRequestCurrentReleaseResources$Outbound, + SyncReconcileRequestCurrentReleaseResources + > = z.object({ + config: z.lazy(() => + SyncReconcileRequestCurrentReleaseConfig$outboundSchema + ), + dependencies: z.array( + z.lazy(() => SyncReconcileRequestCurrentReleaseDependency$outboundSchema), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: CurrentReleaseStateLifecycle$outboundSchema, + remoteAccess: z.boolean().optional(), + }); + +export function syncReconcileRequestCurrentReleaseResourcesToJSON( + syncReconcileRequestCurrentReleaseResources: + SyncReconcileRequestCurrentReleaseResources, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseResources$outboundSchema.parse( + syncReconcileRequestCurrentReleaseResources, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseSupportedPlatform$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestCurrentReleaseSupportedPlatform); + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseStack$Outbound = { + id: string; + inputs?: Array | undefined; + permissions?: + | SyncReconcileRequestCurrentReleasePermissions$Outbound + | undefined; + resources: { + [k: string]: SyncReconcileRequestCurrentReleaseResources$Outbound; + }; + supportedPlatforms?: Array | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseStack$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentReleaseStack$Outbound, + SyncReconcileRequestCurrentReleaseStack +> = z.object({ + id: z.string(), + inputs: z.array( + z.lazy(() => SyncReconcileRequestCurrentReleaseInput$outboundSchema), + ).optional(), + permissions: z.lazy(() => + SyncReconcileRequestCurrentReleasePermissions$outboundSchema + ).optional(), + resources: z.record( + z.string(), + z.lazy(() => SyncReconcileRequestCurrentReleaseResources$outboundSchema), + ), + supportedPlatforms: z.nullable( + z.array(SyncReconcileRequestCurrentReleaseSupportedPlatform$outboundSchema), + ).optional(), +}); + +export function syncReconcileRequestCurrentReleaseStackToJSON( + syncReconcileRequestCurrentReleaseStack: + SyncReconcileRequestCurrentReleaseStack, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseStack$outboundSchema.parse( + syncReconcileRequestCurrentReleaseStack, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentRelease$Outbound = { + description?: string | null | undefined; + releaseId?: string | null | undefined; + stack: SyncReconcileRequestCurrentReleaseStack$Outbound; + version?: string | null | undefined; +}; + +/** @internal */ +export const SyncReconcileRequestCurrentRelease$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentRelease$Outbound, + SyncReconcileRequestCurrentRelease +> = z.object({ + description: z.nullable(z.string()).optional(), + releaseId: z.nullable(z.string()).optional(), + stack: z.lazy(() => SyncReconcileRequestCurrentReleaseStack$outboundSchema), + version: z.nullable(z.string()).optional(), +}); + +export function syncReconcileRequestCurrentReleaseToJSON( + syncReconcileRequestCurrentRelease: SyncReconcileRequestCurrentRelease, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentRelease$outboundSchema.parse( + syncReconcileRequestCurrentRelease, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestCurrentReleaseUnion$Outbound = + | SyncReconcileRequestCurrentRelease$Outbound + | any; + +/** @internal */ +export const SyncReconcileRequestCurrentReleaseUnion$outboundSchema: z.ZodType< + SyncReconcileRequestCurrentReleaseUnion$Outbound, + SyncReconcileRequestCurrentReleaseUnion +> = z.union([ + z.lazy(() => SyncReconcileRequestCurrentRelease$outboundSchema), + z.any(), +]); + +export function syncReconcileRequestCurrentReleaseUnionToJSON( + syncReconcileRequestCurrentReleaseUnion: + SyncReconcileRequestCurrentReleaseUnion, +): string { + return JSON.stringify( + SyncReconcileRequestCurrentReleaseUnion$outboundSchema.parse( + syncReconcileRequestCurrentReleaseUnion, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestPlatformTest$outboundSchema: z.ZodEnum< + typeof SyncReconcileRequestPlatformTest +> = z.enum(SyncReconcileRequestPlatformTest); + +/** @internal */ +export type SyncReconcileRequestEnvironmentInfoTest$Outbound = { + testId: string; + platform: string; +}; + +/** @internal */ +export const SyncReconcileRequestEnvironmentInfoTest$outboundSchema: z.ZodType< + SyncReconcileRequestEnvironmentInfoTest$Outbound, + SyncReconcileRequestEnvironmentInfoTest +> = z.object({ + testId: z.string(), + platform: SyncReconcileRequestPlatformTest$outboundSchema, +}); + +export function syncReconcileRequestEnvironmentInfoTestToJSON( + syncReconcileRequestEnvironmentInfoTest: + SyncReconcileRequestEnvironmentInfoTest, +): string { + return JSON.stringify( + SyncReconcileRequestEnvironmentInfoTest$outboundSchema.parse( + syncReconcileRequestEnvironmentInfoTest, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestPlatformLocal$outboundSchema: z.ZodEnum< + typeof SyncReconcileRequestPlatformLocal +> = z.enum(SyncReconcileRequestPlatformLocal); + +/** @internal */ +export type SyncReconcileRequestEnvironmentInfoLocal$Outbound = { + arch: string; + hostname: string; + os: string; + platform: string; +}; + +/** @internal */ +export const SyncReconcileRequestEnvironmentInfoLocal$outboundSchema: z.ZodType< + SyncReconcileRequestEnvironmentInfoLocal$Outbound, + SyncReconcileRequestEnvironmentInfoLocal +> = z.object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: SyncReconcileRequestPlatformLocal$outboundSchema, +}); + +export function syncReconcileRequestEnvironmentInfoLocalToJSON( + syncReconcileRequestEnvironmentInfoLocal: + SyncReconcileRequestEnvironmentInfoLocal, +): string { + return JSON.stringify( + SyncReconcileRequestEnvironmentInfoLocal$outboundSchema.parse( + syncReconcileRequestEnvironmentInfoLocal, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestPlatformAzure$outboundSchema: z.ZodEnum< + typeof SyncReconcileRequestPlatformAzure +> = z.enum(SyncReconcileRequestPlatformAzure); + +/** @internal */ +export type SyncReconcileRequestEnvironmentInfoAzure$Outbound = { + location: string; + subscriptionId: string; + tenantId: string; + platform: string; +}; + +/** @internal */ +export const SyncReconcileRequestEnvironmentInfoAzure$outboundSchema: z.ZodType< + SyncReconcileRequestEnvironmentInfoAzure$Outbound, + SyncReconcileRequestEnvironmentInfoAzure +> = z.object({ + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: SyncReconcileRequestPlatformAzure$outboundSchema, +}); + +export function syncReconcileRequestEnvironmentInfoAzureToJSON( + syncReconcileRequestEnvironmentInfoAzure: + SyncReconcileRequestEnvironmentInfoAzure, +): string { + return JSON.stringify( + SyncReconcileRequestEnvironmentInfoAzure$outboundSchema.parse( + syncReconcileRequestEnvironmentInfoAzure, + ), + ); +} + +/** @internal */ +export const SyncReconcileRequestPlatformGcp$outboundSchema: z.ZodEnum< + typeof SyncReconcileRequestPlatformGcp +> = z.enum(SyncReconcileRequestPlatformGcp); + +/** @internal */ +export type SyncReconcileRequestEnvironmentInfoGcp$Outbound = { + projectId: string; + projectNumber: string; + region: string; + platform: string; +}; + +/** @internal */ +export const SyncReconcileRequestEnvironmentInfoGcp$outboundSchema: z.ZodType< + SyncReconcileRequestEnvironmentInfoGcp$Outbound, + SyncReconcileRequestEnvironmentInfoGcp +> = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: SyncReconcileRequestPlatformGcp$outboundSchema, +}); + +export function syncReconcileRequestEnvironmentInfoGcpToJSON( + syncReconcileRequestEnvironmentInfoGcp: + SyncReconcileRequestEnvironmentInfoGcp, +): string { + return JSON.stringify( + SyncReconcileRequestEnvironmentInfoGcp$outboundSchema.parse( + syncReconcileRequestEnvironmentInfoGcp, + ), + ); +} -export const ResourceSeverity = { - Info: "info", - Warning: "warning", - Error: "error", -} as const; -export type ResourceSeverity = ClosedEnum; +/** @internal */ +export const SyncReconcileRequestPlatformAws$outboundSchema: z.ZodEnum< + typeof SyncReconcileRequestPlatformAws +> = z.enum(SyncReconcileRequestPlatformAws); -export type ResourceCollectionIssue = { - message: string; - reason: ResourceReason; - severity: ResourceSeverity; - source: string; +/** @internal */ +export type SyncReconcileRequestEnvironmentInfoAws$Outbound = { + accountId: string; + region: string; + platform: string; }; -export type Counts = { - current?: number | null | undefined; - desired?: number | null | undefined; - ready?: number | null | undefined; -}; +/** @internal */ +export const SyncReconcileRequestEnvironmentInfoAws$outboundSchema: z.ZodType< + SyncReconcileRequestEnvironmentInfoAws$Outbound, + SyncReconcileRequestEnvironmentInfoAws +> = z.object({ + accountId: z.string(), + region: z.string(), + platform: SyncReconcileRequestPlatformAws$outboundSchema, +}); -export type CountsUnion = Counts | any; +export function syncReconcileRequestEnvironmentInfoAwsToJSON( + syncReconcileRequestEnvironmentInfoAws: + SyncReconcileRequestEnvironmentInfoAws, +): string { + return JSON.stringify( + SyncReconcileRequestEnvironmentInfoAws$outboundSchema.parse( + syncReconcileRequestEnvironmentInfoAws, + ), + ); +} -export const ResourceHealth = { - Unknown: "unknown", - Healthy: "healthy", - Degraded: "degraded", - Unhealthy: "unhealthy", -} as const; -export type ResourceHealth = ClosedEnum; +/** @internal */ +export type SyncReconcileRequestEnvironmentInfoUnion$Outbound = + | SyncReconcileRequestEnvironmentInfoGcp$Outbound + | SyncReconcileRequestEnvironmentInfoAzure$Outbound + | SyncReconcileRequestEnvironmentInfoLocal$Outbound + | SyncReconcileRequestEnvironmentInfoAws$Outbound + | SyncReconcileRequestEnvironmentInfoTest$Outbound + | any; -export const ResourceLifecycle = { - Unknown: "unknown", - Creating: "creating", - Updating: "updating", - Running: "running", - Scaling: "scaling", - Stopping: "stopping", - Stopped: "stopped", - Deleting: "deleting", - Deleted: "deleted", - Failed: "failed", -} as const; -export type ResourceLifecycle = ClosedEnum; +/** @internal */ +export const SyncReconcileRequestEnvironmentInfoUnion$outboundSchema: z.ZodType< + SyncReconcileRequestEnvironmentInfoUnion$Outbound, + SyncReconcileRequestEnvironmentInfoUnion +> = z.union([ + z.lazy(() => SyncReconcileRequestEnvironmentInfoGcp$outboundSchema), + z.lazy(() => SyncReconcileRequestEnvironmentInfoAzure$outboundSchema), + z.lazy(() => SyncReconcileRequestEnvironmentInfoLocal$outboundSchema), + z.lazy(() => SyncReconcileRequestEnvironmentInfoAws$outboundSchema), + z.lazy(() => SyncReconcileRequestEnvironmentInfoTest$outboundSchema), + z.any(), +]); -export const ResourceFormat = { - Json: "json", - Yaml: "yaml", - Text: "text", -} as const; -export type ResourceFormat = ClosedEnum; +export function syncReconcileRequestEnvironmentInfoUnionToJSON( + syncReconcileRequestEnvironmentInfoUnion: + SyncReconcileRequestEnvironmentInfoUnion, +): string { + return JSON.stringify( + SyncReconcileRequestEnvironmentInfoUnion$outboundSchema.parse( + syncReconcileRequestEnvironmentInfoUnion, + ), + ); +} -export type ResourceRaw = { - body: string; - collectedAt: Date; - format: ResourceFormat; - source: string; - truncated: boolean; +/** @internal */ +export type SyncReconcileRequestError$Outbound = { + code: string; + context?: any | null | undefined; + hint?: string | null | undefined; + httpStatusCode?: number | null | undefined; + internal: boolean; + message: string; + retryable: boolean; + source?: any | null | undefined; }; -export type ResourceTypeHint = string | any; - -export type ObservedInventoryBatchResource = { - alienResourceId?: string | null | undefined; - attributes?: { [k: string]: any | null } | undefined; - collectionIssues?: Array | undefined; - counts?: Counts | any | null | undefined; - deploymentId?: string | null | undefined; - displayName: string; - health: ResourceHealth; - labels?: { [k: string]: string } | undefined; - lifecycle: ResourceLifecycle; - message?: string | null | undefined; - namespace?: string | null | undefined; - partial: boolean; - /** - * Provider-native kind, such as `apps/v1/Deployment`, - * - * @remarks - * `AWS::S3::Bucket`, `storage.googleapis.com/Bucket`, or an Azure - * resource type. - */ - providerKind: string; - providerStale: boolean; - raw?: Array | undefined; - /** - * Provider-native stable identity: Kubernetes object identity, cloud ARN, - * - * @remarks - * GCP full resource name, Azure resource id, etc. - */ - rawIdentity: string; - region?: string | null | undefined; - resourceTypeHint?: string | any | null | undefined; - scope?: string | null | undefined; - /** - * Release/version identity observed from the provider resource, when available. - */ - version?: string | null | undefined; -}; +/** @internal */ +export const SyncReconcileRequestError$outboundSchema: z.ZodType< + SyncReconcileRequestError$Outbound, + SyncReconcileRequestError +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); -export type ObservedInventoryBatch = { - /** - * Backend whose observer produced this snapshot. - */ - backend: ObservedInventoryBatchBackend; - /** - * Whether this batch is a complete replacement for the scope. Complete - * - * @remarks - * batches tombstone previously observed rows in the same scope when they - * are absent from `resources`. - */ - complete: boolean; - /** - * Represents the target cloud platform. - */ - controllerPlatform: ObservedInventoryBatchControllerPlatform; - /** - * Stable scope for the provider list operation that produced this batch. - */ - inventoryScope: string; - /** - * Time the inventory scope was observed. - */ - observedAt: Date; - resources: Array; - /** - * Writer/source for this inventory pass, such as `operator` or - * - * @remarks - * `manager-observer`. - */ - sourceKind: string; -}; +export function syncReconcileRequestErrorToJSON( + syncReconcileRequestError: SyncReconcileRequestError, +): string { + return JSON.stringify( + SyncReconcileRequestError$outboundSchema.parse(syncReconcileRequestError), + ); +} -/** - * Request to reconcile deployment state - */ -export type SyncReconcileRequest = { - /** - * Deployment ID to reconcile state for - */ - deploymentId: string; - /** - * Lock session (push model only) - verifies lock ownership - */ - session?: string | undefined; - /** - * Complete deployment state after step() execution - */ - state: SyncReconcileRequestState; - /** - * Update heartbeat timestamp (for successful health checks) - */ - updateHeartbeat?: boolean | undefined; - /** - * Delay before this deployment should be acquired again. - */ - suggestedDelayMs?: number | undefined; - /** - * Latest typed resource heartbeats collected during this step. - */ - resourceHeartbeats?: Array | undefined; - /** - * Observed raw-resource inventory batches read during this step. - */ - observedInventoryBatches?: Array | undefined; - /** - * Operator-reported runtime capabilities. - */ - capabilities?: Array | undefined; - /** - * Operator binary version reported by the runtime. - */ - operatorVersion?: string | undefined; -}; +/** @internal */ +export type SyncReconcileRequestErrorUnion$Outbound = + | SyncReconcileRequestError$Outbound + | any; /** @internal */ -export const SyncReconcileRequestCurrentReleaseTypeStringList$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseTypeStringList, +export const SyncReconcileRequestErrorUnion$outboundSchema: z.ZodType< + SyncReconcileRequestErrorUnion$Outbound, + SyncReconcileRequestErrorUnion +> = z.union([z.lazy(() => SyncReconcileRequestError$outboundSchema), z.any()]); + +export function syncReconcileRequestErrorUnionToJSON( + syncReconcileRequestErrorUnion: SyncReconcileRequestErrorUnion, +): string { + return JSON.stringify( + SyncReconcileRequestErrorUnion$outboundSchema.parse( + syncReconcileRequestErrorUnion, + ), ); +} /** @internal */ -export type SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound = { - type: string; - value: Array; -}; +export const SyncReconcileRequestPlatform$outboundSchema: z.ZodEnum< + typeof SyncReconcileRequestPlatform +> = z.enum(SyncReconcileRequestPlatform); /** @internal */ -export const SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackTypeStringList$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackTypeStringList); + +/** @internal */ +export type SyncReconcileRequestPendingPreparedStackDefaultStringList$Outbound = + { + type: string; + value: Array; + }; + +/** @internal */ +export const SyncReconcileRequestPendingPreparedStackDefaultStringList$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound, - SyncReconcileRequestCurrentReleaseDefaultStringList + SyncReconcileRequestPendingPreparedStackDefaultStringList$Outbound, + SyncReconcileRequestPendingPreparedStackDefaultStringList > = z.object({ - type: SyncReconcileRequestCurrentReleaseTypeStringList$outboundSchema, + type: SyncReconcileRequestPendingPreparedStackTypeStringList$outboundSchema, value: z.array(z.string()), }); -export function syncReconcileRequestCurrentReleaseDefaultStringListToJSON( - syncReconcileRequestCurrentReleaseDefaultStringList: - SyncReconcileRequestCurrentReleaseDefaultStringList, +export function syncReconcileRequestPendingPreparedStackDefaultStringListToJSON( + syncReconcileRequestPendingPreparedStackDefaultStringList: + SyncReconcileRequestPendingPreparedStackDefaultStringList, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema.parse( - syncReconcileRequestCurrentReleaseDefaultStringList, - ), + SyncReconcileRequestPendingPreparedStackDefaultStringList$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackDefaultStringList), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseTypeBoolean$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseTypeBoolean, - ); +export const SyncReconcileRequestPendingPreparedStackTypeBoolean$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackTypeBoolean); /** @internal */ -export type SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound = { +export type SyncReconcileRequestPendingPreparedStackDefaultBoolean$Outbound = { type: string; value: boolean; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackDefaultBoolean$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound, - SyncReconcileRequestCurrentReleaseDefaultBoolean + SyncReconcileRequestPendingPreparedStackDefaultBoolean$Outbound, + SyncReconcileRequestPendingPreparedStackDefaultBoolean > = z.object({ - type: SyncReconcileRequestCurrentReleaseTypeBoolean$outboundSchema, + type: SyncReconcileRequestPendingPreparedStackTypeBoolean$outboundSchema, value: z.boolean(), }); -export function syncReconcileRequestCurrentReleaseDefaultBooleanToJSON( - syncReconcileRequestCurrentReleaseDefaultBoolean: - SyncReconcileRequestCurrentReleaseDefaultBoolean, +export function syncReconcileRequestPendingPreparedStackDefaultBooleanToJSON( + syncReconcileRequestPendingPreparedStackDefaultBoolean: + SyncReconcileRequestPendingPreparedStackDefaultBoolean, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema.parse( - syncReconcileRequestCurrentReleaseDefaultBoolean, + SyncReconcileRequestPendingPreparedStackDefaultBoolean$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackDefaultBoolean, ), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseTypeNumber$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseTypeNumber, +export const SyncReconcileRequestPendingPreparedStackTypeNumber$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestPendingPreparedStackTypeNumber, ); /** @internal */ -export type SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound = { +export type SyncReconcileRequestPendingPreparedStackDefaultNumber$Outbound = { type: string; value: string; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackDefaultNumber$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound, - SyncReconcileRequestCurrentReleaseDefaultNumber + SyncReconcileRequestPendingPreparedStackDefaultNumber$Outbound, + SyncReconcileRequestPendingPreparedStackDefaultNumber > = z.object({ - type: SyncReconcileRequestCurrentReleaseTypeNumber$outboundSchema, + type: SyncReconcileRequestPendingPreparedStackTypeNumber$outboundSchema, value: z.string(), }); -export function syncReconcileRequestCurrentReleaseDefaultNumberToJSON( - syncReconcileRequestCurrentReleaseDefaultNumber: - SyncReconcileRequestCurrentReleaseDefaultNumber, +export function syncReconcileRequestPendingPreparedStackDefaultNumberToJSON( + syncReconcileRequestPendingPreparedStackDefaultNumber: + SyncReconcileRequestPendingPreparedStackDefaultNumber, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema.parse( - syncReconcileRequestCurrentReleaseDefaultNumber, + SyncReconcileRequestPendingPreparedStackDefaultNumber$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackDefaultNumber, ), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseTypeString$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseTypeString, +export const SyncReconcileRequestPendingPreparedStackTypeString$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestPendingPreparedStackTypeString, ); /** @internal */ -export type SyncReconcileRequestCurrentReleaseDefaultString$Outbound = { +export type SyncReconcileRequestPendingPreparedStackDefaultString$Outbound = { type: string; value: string; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackDefaultString$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseDefaultString$Outbound, - SyncReconcileRequestCurrentReleaseDefaultString + SyncReconcileRequestPendingPreparedStackDefaultString$Outbound, + SyncReconcileRequestPendingPreparedStackDefaultString > = z.object({ - type: SyncReconcileRequestCurrentReleaseTypeString$outboundSchema, + type: SyncReconcileRequestPendingPreparedStackTypeString$outboundSchema, value: z.string(), }); -export function syncReconcileRequestCurrentReleaseDefaultStringToJSON( - syncReconcileRequestCurrentReleaseDefaultString: - SyncReconcileRequestCurrentReleaseDefaultString, +export function syncReconcileRequestPendingPreparedStackDefaultStringToJSON( + syncReconcileRequestPendingPreparedStackDefaultString: + SyncReconcileRequestPendingPreparedStackDefaultString, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema.parse( - syncReconcileRequestCurrentReleaseDefaultString, + SyncReconcileRequestPendingPreparedStackDefaultString$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackDefaultString, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseDefaultUnion$Outbound = - | SyncReconcileRequestCurrentReleaseDefaultString$Outbound - | SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound - | SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound - | SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound +export type SyncReconcileRequestPendingPreparedStackDefaultUnion$Outbound = + | SyncReconcileRequestPendingPreparedStackDefaultString$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultNumber$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultBoolean$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultStringList$Outbound | any; /** @internal */ -export const SyncReconcileRequestCurrentReleaseDefaultUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackDefaultUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseDefaultUnion$Outbound, - SyncReconcileRequestCurrentReleaseDefaultUnion + SyncReconcileRequestPendingPreparedStackDefaultUnion$Outbound, + SyncReconcileRequestPendingPreparedStackDefaultUnion > = z.union([ z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema + SyncReconcileRequestPendingPreparedStackDefaultString$outboundSchema ), z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema + SyncReconcileRequestPendingPreparedStackDefaultNumber$outboundSchema ), z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema + SyncReconcileRequestPendingPreparedStackDefaultBoolean$outboundSchema ), z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema + SyncReconcileRequestPendingPreparedStackDefaultStringList$outboundSchema ), z.any(), ]); -export function syncReconcileRequestCurrentReleaseDefaultUnionToJSON( - syncReconcileRequestCurrentReleaseDefaultUnion: - SyncReconcileRequestCurrentReleaseDefaultUnion, +export function syncReconcileRequestPendingPreparedStackDefaultUnionToJSON( + syncReconcileRequestPendingPreparedStackDefaultUnion: + SyncReconcileRequestPendingPreparedStackDefaultUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseDefaultUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseDefaultUnion, + SyncReconcileRequestPendingPreparedStackDefaultUnion$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackDefaultUnion, ), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseTypeEnvEnum$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseTypeEnvEnum, - ); +export const SyncReconcileRequestPendingPreparedStackTypeEnvEnum$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackTypeEnvEnum); /** @internal */ -export type SyncReconcileRequestCurrentReleaseTypeUnion$Outbound = string | any; +export type SyncReconcileRequestPendingPreparedStackTypeUnion$Outbound = + | string + | any; /** @internal */ -export const SyncReconcileRequestCurrentReleaseTypeUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackTypeUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseTypeUnion$Outbound, - SyncReconcileRequestCurrentReleaseTypeUnion + SyncReconcileRequestPendingPreparedStackTypeUnion$Outbound, + SyncReconcileRequestPendingPreparedStackTypeUnion > = z.union([ - SyncReconcileRequestCurrentReleaseTypeEnvEnum$outboundSchema, + SyncReconcileRequestPendingPreparedStackTypeEnvEnum$outboundSchema, z.any(), ]); -export function syncReconcileRequestCurrentReleaseTypeUnionToJSON( - syncReconcileRequestCurrentReleaseTypeUnion: - SyncReconcileRequestCurrentReleaseTypeUnion, +export function syncReconcileRequestPendingPreparedStackTypeUnionToJSON( + syncReconcileRequestPendingPreparedStackTypeUnion: + SyncReconcileRequestPendingPreparedStackTypeUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseTypeUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseTypeUnion, + SyncReconcileRequestPendingPreparedStackTypeUnion$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackTypeUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseEnv$Outbound = { +export type SyncReconcileRequestPendingPreparedStackEnv$Outbound = { name: string; targetResources?: Array | null | undefined; type?: string | any | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseEnv$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseEnv$Outbound, - SyncReconcileRequestCurrentReleaseEnv -> = z.object({ - name: z.string(), - targetResources: z.nullable(z.array(z.string())).optional(), - type: z.nullable( - z.union([ - SyncReconcileRequestCurrentReleaseTypeEnvEnum$outboundSchema, - z.any(), - ]), - ).optional(), -}); +export const SyncReconcileRequestPendingPreparedStackEnv$outboundSchema: + z.ZodType< + SyncReconcileRequestPendingPreparedStackEnv$Outbound, + SyncReconcileRequestPendingPreparedStackEnv + > = z.object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncReconcileRequestPendingPreparedStackTypeEnvEnum$outboundSchema, + z.any(), + ]), + ).optional(), + }); -export function syncReconcileRequestCurrentReleaseEnvToJSON( - syncReconcileRequestCurrentReleaseEnv: SyncReconcileRequestCurrentReleaseEnv, +export function syncReconcileRequestPendingPreparedStackEnvToJSON( + syncReconcileRequestPendingPreparedStackEnv: + SyncReconcileRequestPendingPreparedStackEnv, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseEnv$outboundSchema.parse( - syncReconcileRequestCurrentReleaseEnv, + SyncReconcileRequestPendingPreparedStackEnv$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackEnv, ), ); } /** @internal */ -export const CurrentReleaseStateKind$outboundSchema: z.ZodEnum< - typeof CurrentReleaseStateKind -> = z.enum(CurrentReleaseStateKind); +export const PendingPreparedStackStateKind$outboundSchema: z.ZodEnum< + typeof PendingPreparedStackStateKind +> = z.enum(PendingPreparedStackStateKind); /** @internal */ -export const SyncReconcileRequestCurrentReleasePlatform$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleasePlatform, +export const SyncReconcileRequestPendingPreparedStackPlatform$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestPendingPreparedStackPlatform, ); /** @internal */ -export const SyncReconcileRequestCurrentReleaseProvidedBy$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseProvidedBy, +export const SyncReconcileRequestPendingPreparedStackProvidedBy$outboundSchema: + z.ZodEnum = z.enum( + SyncReconcileRequestPendingPreparedStackProvidedBy, ); /** @internal */ -export type SyncReconcileRequestCurrentReleaseValidation$Outbound = { +export type SyncReconcileRequestPendingPreparedStackValidation$Outbound = { format?: string | null | undefined; max?: string | null | undefined; maxItems?: number | null | undefined; @@ -12747,10 +17478,10 @@ export type SyncReconcileRequestCurrentReleaseValidation$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseValidation$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackValidation$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseValidation$Outbound, - SyncReconcileRequestCurrentReleaseValidation + SyncReconcileRequestPendingPreparedStackValidation$Outbound, + SyncReconcileRequestPendingPreparedStackValidation > = z.object({ format: z.nullable(z.string()).optional(), max: z.nullable(z.string()).optional(), @@ -12763,55 +17494,56 @@ export const SyncReconcileRequestCurrentReleaseValidation$outboundSchema: values: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseValidationToJSON( - syncReconcileRequestCurrentReleaseValidation: - SyncReconcileRequestCurrentReleaseValidation, +export function syncReconcileRequestPendingPreparedStackValidationToJSON( + syncReconcileRequestPendingPreparedStackValidation: + SyncReconcileRequestPendingPreparedStackValidation, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseValidation$outboundSchema.parse( - syncReconcileRequestCurrentReleaseValidation, + SyncReconcileRequestPendingPreparedStackValidation$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackValidation, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseValidationUnion$Outbound = - | SyncReconcileRequestCurrentReleaseValidation$Outbound +export type SyncReconcileRequestPendingPreparedStackValidationUnion$Outbound = + | SyncReconcileRequestPendingPreparedStackValidation$Outbound | any; /** @internal */ -export const SyncReconcileRequestCurrentReleaseValidationUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackValidationUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseValidationUnion$Outbound, - SyncReconcileRequestCurrentReleaseValidationUnion + SyncReconcileRequestPendingPreparedStackValidationUnion$Outbound, + SyncReconcileRequestPendingPreparedStackValidationUnion > = z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseValidation$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackValidation$outboundSchema + ), z.any(), ]); -export function syncReconcileRequestCurrentReleaseValidationUnionToJSON( - syncReconcileRequestCurrentReleaseValidationUnion: - SyncReconcileRequestCurrentReleaseValidationUnion, +export function syncReconcileRequestPendingPreparedStackValidationUnionToJSON( + syncReconcileRequestPendingPreparedStackValidationUnion: + SyncReconcileRequestPendingPreparedStackValidationUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseValidationUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseValidationUnion, - ), + SyncReconcileRequestPendingPreparedStackValidationUnion$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackValidationUnion), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseInput$Outbound = { +export type SyncReconcileRequestPendingPreparedStackInput$Outbound = { default?: - | SyncReconcileRequestCurrentReleaseDefaultString$Outbound - | SyncReconcileRequestCurrentReleaseDefaultNumber$Outbound - | SyncReconcileRequestCurrentReleaseDefaultBoolean$Outbound - | SyncReconcileRequestCurrentReleaseDefaultStringList$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultString$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultNumber$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultBoolean$Outbound + | SyncReconcileRequestPendingPreparedStackDefaultStringList$Outbound | any | null | undefined; description: string; - env?: Array | undefined; + env?: Array | undefined; id: string; kind: string; label: string; @@ -12820,111 +17552,116 @@ export type SyncReconcileRequestCurrentReleaseInput$Outbound = { providedBy: Array; required: boolean; validation?: - | SyncReconcileRequestCurrentReleaseValidation$Outbound + | SyncReconcileRequestPendingPreparedStackValidation$Outbound | any | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseInput$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseInput$Outbound, - SyncReconcileRequestCurrentReleaseInput -> = z.object({ - default: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultString$outboundSchema - ), - z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultNumber$outboundSchema - ), - z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultBoolean$outboundSchema - ), - z.lazy(() => - SyncReconcileRequestCurrentReleaseDefaultStringList$outboundSchema - ), - z.any(), - ]), - ).optional(), - description: z.string(), - env: z.array( - z.lazy(() => SyncReconcileRequestCurrentReleaseEnv$outboundSchema), - ).optional(), - id: z.string(), - kind: CurrentReleaseStateKind$outboundSchema, - label: z.string(), - placeholder: z.nullable(z.string()).optional(), - platforms: z.nullable( - z.array(SyncReconcileRequestCurrentReleasePlatform$outboundSchema), - ).optional(), - providedBy: z.array( - SyncReconcileRequestCurrentReleaseProvidedBy$outboundSchema, - ), - required: z.boolean(), - validation: z.nullable( - z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseValidation$outboundSchema), - z.any(), - ]), - ).optional(), -}); +export const SyncReconcileRequestPendingPreparedStackInput$outboundSchema: + z.ZodType< + SyncReconcileRequestPendingPreparedStackInput$Outbound, + SyncReconcileRequestPendingPreparedStackInput + > = z.object({ + default: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileRequestPendingPreparedStackDefaultString$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackDefaultNumber$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackDefaultBoolean$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackDefaultStringList$outboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => SyncReconcileRequestPendingPreparedStackEnv$outboundSchema), + ).optional(), + id: z.string(), + kind: PendingPreparedStackStateKind$outboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array(SyncReconcileRequestPendingPreparedStackPlatform$outboundSchema), + ).optional(), + providedBy: z.array( + SyncReconcileRequestPendingPreparedStackProvidedBy$outboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileRequestPendingPreparedStackValidation$outboundSchema + ), + z.any(), + ]), + ).optional(), + }); -export function syncReconcileRequestCurrentReleaseInputToJSON( - syncReconcileRequestCurrentReleaseInput: - SyncReconcileRequestCurrentReleaseInput, +export function syncReconcileRequestPendingPreparedStackInputToJSON( + syncReconcileRequestPendingPreparedStackInput: + SyncReconcileRequestPendingPreparedStackInput, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseInput$outboundSchema.parse( - syncReconcileRequestCurrentReleaseInput, + SyncReconcileRequestPendingPreparedStackInput$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackInput, ), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseManagementEnum$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseManagementEnum, - ); +export const SyncReconcileRequestPendingPreparedStackManagementEnum$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackManagementEnum); /** @internal */ -export type CurrentReleaseOverrideStateAwResource$Outbound = { +export type PendingPreparedStackOverrideStateAwResource$Outbound = { condition?: { [k: string]: { [k: string]: string } } | null | undefined; resources: Array; }; /** @internal */ -export const CurrentReleaseOverrideStateAwResource$outboundSchema: z.ZodType< - CurrentReleaseOverrideStateAwResource$Outbound, - CurrentReleaseOverrideStateAwResource -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const PendingPreparedStackOverrideStateAwResource$outboundSchema: + z.ZodType< + PendingPreparedStackOverrideStateAwResource$Outbound, + PendingPreparedStackOverrideStateAwResource + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function currentReleaseOverrideStateAwResourceToJSON( - currentReleaseOverrideStateAwResource: CurrentReleaseOverrideStateAwResource, +export function pendingPreparedStackOverrideStateAwResourceToJSON( + pendingPreparedStackOverrideStateAwResource: + PendingPreparedStackOverrideStateAwResource, ): string { return JSON.stringify( - CurrentReleaseOverrideStateAwResource$outboundSchema.parse( - currentReleaseOverrideStateAwResource, + PendingPreparedStackOverrideStateAwResource$outboundSchema.parse( + pendingPreparedStackOverrideStateAwResource, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAwStack$Outbound = { +export type SyncReconcileRequestPendingPreparedStackOverrideAwStack$Outbound = { condition?: { [k: string]: { [k: string]: string } } | null | undefined; resources: Array; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAwStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAwStack$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAwStack + SyncReconcileRequestPendingPreparedStackOverrideAwStack$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAwStack > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -12932,57 +17669,56 @@ export const SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema: resources: z.array(z.string()), }); -export function syncReconcileRequestCurrentReleaseOverrideAwStackToJSON( - syncReconcileRequestCurrentReleaseOverrideAwStack: - SyncReconcileRequestCurrentReleaseOverrideAwStack, +export function syncReconcileRequestPendingPreparedStackOverrideAwStackToJSON( + syncReconcileRequestPendingPreparedStackOverrideAwStack: + SyncReconcileRequestPendingPreparedStackOverrideAwStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAwStack, - ), + SyncReconcileRequestPendingPreparedStackOverrideAwStack$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideAwStack), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAwBinding$Outbound = { - resource?: CurrentReleaseOverrideStateAwResource$Outbound | undefined; - stack?: - | SyncReconcileRequestCurrentReleaseOverrideAwStack$Outbound - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideAwBinding$Outbound = + { + resource?: PendingPreparedStackOverrideStateAwResource$Outbound | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackOverrideAwStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAwBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAwBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAwBinding$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAwBinding + SyncReconcileRequestPendingPreparedStackOverrideAwBinding$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAwBinding > = z.object({ - resource: z.lazy(() => CurrentReleaseOverrideStateAwResource$outboundSchema) - .optional(), + resource: z.lazy(() => + PendingPreparedStackOverrideStateAwResource$outboundSchema + ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAwStack$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAwStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideAwBindingToJSON( - syncReconcileRequestCurrentReleaseOverrideAwBinding: - SyncReconcileRequestCurrentReleaseOverrideAwBinding, +export function syncReconcileRequestPendingPreparedStackOverrideAwBindingToJSON( + syncReconcileRequestPendingPreparedStackOverrideAwBinding: + SyncReconcileRequestPendingPreparedStackOverrideAwBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAwBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAwBinding, - ), + SyncReconcileRequestPendingPreparedStackOverrideAwBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideAwBinding), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideEffect$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseOverrideEffect, - ); +export const SyncReconcileRequestPendingPreparedStackOverrideEffect$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackOverrideEffect); /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound = { +export type SyncReconcileRequestPendingPreparedStackOverrideAwGrant$Outbound = { actions?: Array | null | undefined; dataActions?: Array | null | undefined; permissions?: Array | null | undefined; @@ -12991,10 +17727,10 @@ export type SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAwGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAwGrant + SyncReconcileRequestPendingPreparedStackOverrideAwGrant$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAwGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -13003,151 +17739,155 @@ export const SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideAwGrantToJSON( - syncReconcileRequestCurrentReleaseOverrideAwGrant: - SyncReconcileRequestCurrentReleaseOverrideAwGrant, +export function syncReconcileRequestPendingPreparedStackOverrideAwGrantToJSON( + syncReconcileRequestPendingPreparedStackOverrideAwGrant: + SyncReconcileRequestPendingPreparedStackOverrideAwGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAwGrant, - ), + SyncReconcileRequestPendingPreparedStackOverrideAwGrant$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideAwGrant), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAw$Outbound = { - binding: SyncReconcileRequestCurrentReleaseOverrideAwBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackOverrideAw$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackOverrideAwBinding$Outbound; description?: string | null | undefined; effect?: string | undefined; - grant: SyncReconcileRequestCurrentReleaseOverrideAwGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackOverrideAwGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAw$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAw$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAw$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAw + SyncReconcileRequestPendingPreparedStackOverrideAw$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAw > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAwBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAwBinding$outboundSchema ), description: z.nullable(z.string()).optional(), - effect: SyncReconcileRequestCurrentReleaseOverrideEffect$outboundSchema - .optional(), + effect: + SyncReconcileRequestPendingPreparedStackOverrideEffect$outboundSchema + .optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAwGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAwGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideAwToJSON( - syncReconcileRequestCurrentReleaseOverrideAw: - SyncReconcileRequestCurrentReleaseOverrideAw, +export function syncReconcileRequestPendingPreparedStackOverrideAwToJSON( + syncReconcileRequestPendingPreparedStackOverrideAw: + SyncReconcileRequestPendingPreparedStackOverrideAw, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAw$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAw, + SyncReconcileRequestPendingPreparedStackOverrideAw$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackOverrideAw, ), ); } /** @internal */ -export type CurrentReleaseOverrideStateAzureResource$Outbound = { +export type PendingPreparedStackOverrideStateAzureResource$Outbound = { scope: string; }; /** @internal */ -export const CurrentReleaseOverrideStateAzureResource$outboundSchema: z.ZodType< - CurrentReleaseOverrideStateAzureResource$Outbound, - CurrentReleaseOverrideStateAzureResource -> = z.object({ - scope: z.string(), -}); +export const PendingPreparedStackOverrideStateAzureResource$outboundSchema: + z.ZodType< + PendingPreparedStackOverrideStateAzureResource$Outbound, + PendingPreparedStackOverrideStateAzureResource + > = z.object({ + scope: z.string(), + }); -export function currentReleaseOverrideStateAzureResourceToJSON( - currentReleaseOverrideStateAzureResource: - CurrentReleaseOverrideStateAzureResource, +export function pendingPreparedStackOverrideStateAzureResourceToJSON( + pendingPreparedStackOverrideStateAzureResource: + PendingPreparedStackOverrideStateAzureResource, ): string { return JSON.stringify( - CurrentReleaseOverrideStateAzureResource$outboundSchema.parse( - currentReleaseOverrideStateAzureResource, + PendingPreparedStackOverrideStateAzureResource$outboundSchema.parse( + pendingPreparedStackOverrideStateAzureResource, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAzureStack$Outbound = { - scope: string; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAzureStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAzureStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAzureStack$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAzureStack + SyncReconcileRequestPendingPreparedStackOverrideAzureStack$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAzureStack > = z.object({ scope: z.string(), }); -export function syncReconcileRequestCurrentReleaseOverrideAzureStackToJSON( - syncReconcileRequestCurrentReleaseOverrideAzureStack: - SyncReconcileRequestCurrentReleaseOverrideAzureStack, +export function syncReconcileRequestPendingPreparedStackOverrideAzureStackToJSON( + syncReconcileRequestPendingPreparedStackOverrideAzureStack: + SyncReconcileRequestPendingPreparedStackOverrideAzureStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAzureStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAzureStack, - ), + SyncReconcileRequestPendingPreparedStackOverrideAzureStack$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideAzureStack), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAzureBinding$Outbound = { - resource?: CurrentReleaseOverrideStateAzureResource$Outbound | undefined; - stack?: - | SyncReconcileRequestCurrentReleaseOverrideAzureStack$Outbound - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideAzureBinding$Outbound = + { + resource?: + | PendingPreparedStackOverrideStateAzureResource$Outbound + | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackOverrideAzureStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAzureBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAzureBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAzureBinding$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAzureBinding + SyncReconcileRequestPendingPreparedStackOverrideAzureBinding$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAzureBinding > = z.object({ resource: z.lazy(() => - CurrentReleaseOverrideStateAzureResource$outboundSchema + PendingPreparedStackOverrideStateAzureResource$outboundSchema ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAzureStack$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAzureStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideAzureBindingToJSON( - syncReconcileRequestCurrentReleaseOverrideAzureBinding: - SyncReconcileRequestCurrentReleaseOverrideAzureBinding, +export function syncReconcileRequestPendingPreparedStackOverrideAzureBindingToJSON( + syncReconcileRequestPendingPreparedStackOverrideAzureBinding: + SyncReconcileRequestPendingPreparedStackOverrideAzureBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAzureBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAzureBinding, - ), + SyncReconcileRequestPendingPreparedStackOverrideAzureBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideAzureBinding), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAzureGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAzureGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAzureGrant$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAzureGrant + SyncReconcileRequestPendingPreparedStackOverrideAzureGrant$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAzureGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -13156,109 +17896,110 @@ export const SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideAzureGrantToJSON( - syncReconcileRequestCurrentReleaseOverrideAzureGrant: - SyncReconcileRequestCurrentReleaseOverrideAzureGrant, +export function syncReconcileRequestPendingPreparedStackOverrideAzureGrantToJSON( + syncReconcileRequestPendingPreparedStackOverrideAzureGrant: + SyncReconcileRequestPendingPreparedStackOverrideAzureGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAzureGrant, - ), + SyncReconcileRequestPendingPreparedStackOverrideAzureGrant$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideAzureGrant), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideAzure$Outbound = { - binding: SyncReconcileRequestCurrentReleaseOverrideAzureBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackOverrideAzure$Outbound = { + binding: + SyncReconcileRequestPendingPreparedStackOverrideAzureBinding$Outbound; description?: string | null | undefined; - grant: SyncReconcileRequestCurrentReleaseOverrideAzureGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackOverrideAzureGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideAzure$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideAzure$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideAzure$Outbound, - SyncReconcileRequestCurrentReleaseOverrideAzure + SyncReconcileRequestPendingPreparedStackOverrideAzure$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideAzure > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAzureBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAzureBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAzureGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAzureGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideAzureToJSON( - syncReconcileRequestCurrentReleaseOverrideAzure: - SyncReconcileRequestCurrentReleaseOverrideAzure, +export function syncReconcileRequestPendingPreparedStackOverrideAzureToJSON( + syncReconcileRequestPendingPreparedStackOverrideAzure: + SyncReconcileRequestPendingPreparedStackOverrideAzure, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideAzure$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideAzure, + SyncReconcileRequestPendingPreparedStackOverrideAzure$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackOverrideAzure, ), ); } /** @internal */ -export type CurrentReleaseOverrideConditionStateResource$Outbound = { +export type PendingPreparedStackOverrideConditionStateResource$Outbound = { expression: string; title: string; }; /** @internal */ -export const CurrentReleaseOverrideConditionStateResource$outboundSchema: +export const PendingPreparedStackOverrideConditionStateResource$outboundSchema: z.ZodType< - CurrentReleaseOverrideConditionStateResource$Outbound, - CurrentReleaseOverrideConditionStateResource + PendingPreparedStackOverrideConditionStateResource$Outbound, + PendingPreparedStackOverrideConditionStateResource > = z.object({ expression: z.string(), title: z.string(), }); -export function currentReleaseOverrideConditionStateResourceToJSON( - currentReleaseOverrideConditionStateResource: - CurrentReleaseOverrideConditionStateResource, +export function pendingPreparedStackOverrideConditionStateResourceToJSON( + pendingPreparedStackOverrideConditionStateResource: + PendingPreparedStackOverrideConditionStateResource, ): string { return JSON.stringify( - CurrentReleaseOverrideConditionStateResource$outboundSchema.parse( - currentReleaseOverrideConditionStateResource, + PendingPreparedStackOverrideConditionStateResource$outboundSchema.parse( + pendingPreparedStackOverrideConditionStateResource, ), ); } /** @internal */ -export type CurrentReleaseOverrideStateResourceConditionUnion$Outbound = - | CurrentReleaseOverrideConditionStateResource$Outbound +export type PendingPreparedStackOverrideStateResourceConditionUnion$Outbound = + | PendingPreparedStackOverrideConditionStateResource$Outbound | any; /** @internal */ -export const CurrentReleaseOverrideStateResourceConditionUnion$outboundSchema: +export const PendingPreparedStackOverrideStateResourceConditionUnion$outboundSchema: z.ZodType< - CurrentReleaseOverrideStateResourceConditionUnion$Outbound, - CurrentReleaseOverrideStateResourceConditionUnion + PendingPreparedStackOverrideStateResourceConditionUnion$Outbound, + PendingPreparedStackOverrideStateResourceConditionUnion > = z.union([ - z.lazy(() => CurrentReleaseOverrideConditionStateResource$outboundSchema), + z.lazy(() => + PendingPreparedStackOverrideConditionStateResource$outboundSchema + ), z.any(), ]); -export function currentReleaseOverrideStateResourceConditionUnionToJSON( - currentReleaseOverrideStateResourceConditionUnion: - CurrentReleaseOverrideStateResourceConditionUnion, +export function pendingPreparedStackOverrideStateResourceConditionUnionToJSON( + pendingPreparedStackOverrideStateResourceConditionUnion: + PendingPreparedStackOverrideStateResourceConditionUnion, ): string { return JSON.stringify( - CurrentReleaseOverrideStateResourceConditionUnion$outboundSchema.parse( - currentReleaseOverrideStateResourceConditionUnion, - ), + PendingPreparedStackOverrideStateResourceConditionUnion$outboundSchema + .parse(pendingPreparedStackOverrideStateResourceConditionUnion), ); } /** @internal */ -export type CurrentReleaseOverrideStateGcpResource$Outbound = { +export type PendingPreparedStackOverrideStateGcpResource$Outbound = { condition?: - | CurrentReleaseOverrideConditionStateResource$Outbound + | PendingPreparedStackOverrideConditionStateResource$Outbound | any | null | undefined; @@ -13266,164 +18007,176 @@ export type CurrentReleaseOverrideStateGcpResource$Outbound = { }; /** @internal */ -export const CurrentReleaseOverrideStateGcpResource$outboundSchema: z.ZodType< - CurrentReleaseOverrideStateGcpResource$Outbound, - CurrentReleaseOverrideStateGcpResource -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => CurrentReleaseOverrideConditionStateResource$outboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const PendingPreparedStackOverrideStateGcpResource$outboundSchema: + z.ZodType< + PendingPreparedStackOverrideStateGcpResource$Outbound, + PendingPreparedStackOverrideStateGcpResource + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + PendingPreparedStackOverrideConditionStateResource$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function currentReleaseOverrideStateGcpResourceToJSON( - currentReleaseOverrideStateGcpResource: - CurrentReleaseOverrideStateGcpResource, +export function pendingPreparedStackOverrideStateGcpResourceToJSON( + pendingPreparedStackOverrideStateGcpResource: + PendingPreparedStackOverrideStateGcpResource, ): string { return JSON.stringify( - CurrentReleaseOverrideStateGcpResource$outboundSchema.parse( - currentReleaseOverrideStateGcpResource, + PendingPreparedStackOverrideStateGcpResource$outboundSchema.parse( + pendingPreparedStackOverrideStateGcpResource, ), ); } /** @internal */ -export type CurrentReleaseOverrideConditionState$Outbound = { +export type PendingPreparedStackOverrideConditionStateStack$Outbound = { expression: string; title: string; }; /** @internal */ -export const CurrentReleaseOverrideConditionState$outboundSchema: z.ZodType< - CurrentReleaseOverrideConditionState$Outbound, - CurrentReleaseOverrideConditionState -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const PendingPreparedStackOverrideConditionStateStack$outboundSchema: + z.ZodType< + PendingPreparedStackOverrideConditionStateStack$Outbound, + PendingPreparedStackOverrideConditionStateStack + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function currentReleaseOverrideConditionStateToJSON( - currentReleaseOverrideConditionState: CurrentReleaseOverrideConditionState, +export function pendingPreparedStackOverrideConditionStateStackToJSON( + pendingPreparedStackOverrideConditionStateStack: + PendingPreparedStackOverrideConditionStateStack, ): string { return JSON.stringify( - CurrentReleaseOverrideConditionState$outboundSchema.parse( - currentReleaseOverrideConditionState, + PendingPreparedStackOverrideConditionStateStack$outboundSchema.parse( + pendingPreparedStackOverrideConditionStateStack, ), ); } /** @internal */ -export type CurrentReleaseOverrideStateConditionUnion$Outbound = - | CurrentReleaseOverrideConditionState$Outbound +export type PendingPreparedStackOverrideStateStackConditionUnion$Outbound = + | PendingPreparedStackOverrideConditionStateStack$Outbound | any; /** @internal */ -export const CurrentReleaseOverrideStateConditionUnion$outboundSchema: +export const PendingPreparedStackOverrideStateStackConditionUnion$outboundSchema: z.ZodType< - CurrentReleaseOverrideStateConditionUnion$Outbound, - CurrentReleaseOverrideStateConditionUnion + PendingPreparedStackOverrideStateStackConditionUnion$Outbound, + PendingPreparedStackOverrideStateStackConditionUnion > = z.union([ - z.lazy(() => CurrentReleaseOverrideConditionState$outboundSchema), + z.lazy(() => + PendingPreparedStackOverrideConditionStateStack$outboundSchema + ), z.any(), ]); -export function currentReleaseOverrideStateConditionUnionToJSON( - currentReleaseOverrideStateConditionUnion: - CurrentReleaseOverrideStateConditionUnion, +export function pendingPreparedStackOverrideStateStackConditionUnionToJSON( + pendingPreparedStackOverrideStateStackConditionUnion: + PendingPreparedStackOverrideStateStackConditionUnion, ): string { return JSON.stringify( - CurrentReleaseOverrideStateConditionUnion$outboundSchema.parse( - currentReleaseOverrideStateConditionUnion, + PendingPreparedStackOverrideStateStackConditionUnion$outboundSchema.parse( + pendingPreparedStackOverrideStateStackConditionUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideGcpStack$Outbound = { - condition?: - | CurrentReleaseOverrideConditionState$Outbound - | any - | null - | undefined; - scope: string; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideGcpStack$Outbound = + { + condition?: + | PendingPreparedStackOverrideConditionStateStack$Outbound + | any + | null + | undefined; + scope: string; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideGcpStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideGcpStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideGcpStack$Outbound, - SyncReconcileRequestCurrentReleaseOverrideGcpStack + SyncReconcileRequestPendingPreparedStackOverrideGcpStack$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideGcpStack > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => CurrentReleaseOverrideConditionState$outboundSchema), + z.lazy(() => + PendingPreparedStackOverrideConditionStateStack$outboundSchema + ), z.any(), ]), ).optional(), scope: z.string(), }); -export function syncReconcileRequestCurrentReleaseOverrideGcpStackToJSON( - syncReconcileRequestCurrentReleaseOverrideGcpStack: - SyncReconcileRequestCurrentReleaseOverrideGcpStack, +export function syncReconcileRequestPendingPreparedStackOverrideGcpStackToJSON( + syncReconcileRequestPendingPreparedStackOverrideGcpStack: + SyncReconcileRequestPendingPreparedStackOverrideGcpStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideGcpStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideGcpStack, - ), + SyncReconcileRequestPendingPreparedStackOverrideGcpStack$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideGcpStack), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideGcpBinding$Outbound = { - resource?: CurrentReleaseOverrideStateGcpResource$Outbound | undefined; - stack?: - | SyncReconcileRequestCurrentReleaseOverrideGcpStack$Outbound - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideGcpBinding$Outbound = + { + resource?: + | PendingPreparedStackOverrideStateGcpResource$Outbound + | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackOverrideGcpStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideGcpBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideGcpBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideGcpBinding$Outbound, - SyncReconcileRequestCurrentReleaseOverrideGcpBinding + SyncReconcileRequestPendingPreparedStackOverrideGcpBinding$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideGcpBinding > = z.object({ resource: z.lazy(() => - CurrentReleaseOverrideStateGcpResource$outboundSchema + PendingPreparedStackOverrideStateGcpResource$outboundSchema ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideGcpStack$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideGcpStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideGcpBindingToJSON( - syncReconcileRequestCurrentReleaseOverrideGcpBinding: - SyncReconcileRequestCurrentReleaseOverrideGcpBinding, +export function syncReconcileRequestPendingPreparedStackOverrideGcpBindingToJSON( + syncReconcileRequestPendingPreparedStackOverrideGcpBinding: + SyncReconcileRequestPendingPreparedStackOverrideGcpBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideGcpBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideGcpBinding, - ), + SyncReconcileRequestPendingPreparedStackOverrideGcpBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideGcpBinding), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideGcpGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackOverrideGcpGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideGcpGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideGcpGrant$Outbound, - SyncReconcileRequestCurrentReleaseOverrideGcpGrant + SyncReconcileRequestPendingPreparedStackOverrideGcpGrant$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideGcpGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -13432,231 +18185,237 @@ export const SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideGcpGrantToJSON( - syncReconcileRequestCurrentReleaseOverrideGcpGrant: - SyncReconcileRequestCurrentReleaseOverrideGcpGrant, +export function syncReconcileRequestPendingPreparedStackOverrideGcpGrantToJSON( + syncReconcileRequestPendingPreparedStackOverrideGcpGrant: + SyncReconcileRequestPendingPreparedStackOverrideGcpGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideGcpGrant, - ), + SyncReconcileRequestPendingPreparedStackOverrideGcpGrant$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverrideGcpGrant), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideGcp$Outbound = { - binding: SyncReconcileRequestCurrentReleaseOverrideGcpBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackOverrideGcp$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackOverrideGcpBinding$Outbound; description?: string | null | undefined; - grant: SyncReconcileRequestCurrentReleaseOverrideGcpGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackOverrideGcpGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideGcp$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideGcp$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideGcp$Outbound, - SyncReconcileRequestCurrentReleaseOverrideGcp + SyncReconcileRequestPendingPreparedStackOverrideGcp$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideGcp > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideGcpBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideGcpBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideGcpGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideGcpGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseOverrideGcpToJSON( - syncReconcileRequestCurrentReleaseOverrideGcp: - SyncReconcileRequestCurrentReleaseOverrideGcp, +export function syncReconcileRequestPendingPreparedStackOverrideGcpToJSON( + syncReconcileRequestPendingPreparedStackOverrideGcp: + SyncReconcileRequestPendingPreparedStackOverrideGcp, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideGcp$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideGcp, + SyncReconcileRequestPendingPreparedStackOverrideGcp$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackOverrideGcp, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverridePlatforms$Outbound = { - aws?: - | Array - | null - | undefined; - azure?: - | Array - | null - | undefined; - gcp?: - | Array - | null - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackOverridePlatforms$Outbound = + { + aws?: + | Array + | null + | undefined; + azure?: + | Array + | null + | undefined; + gcp?: + | Array + | null + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverridePlatforms$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverridePlatforms$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverridePlatforms$Outbound, - SyncReconcileRequestCurrentReleaseOverridePlatforms + SyncReconcileRequestPendingPreparedStackOverridePlatforms$Outbound, + SyncReconcileRequestPendingPreparedStackOverridePlatforms > = z.object({ aws: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAw$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAw$outboundSchema )), ).optional(), azure: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideAzure$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideAzure$outboundSchema )), ).optional(), gcp: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseOverrideGcp$outboundSchema + SyncReconcileRequestPendingPreparedStackOverrideGcp$outboundSchema )), ).optional(), }); -export function syncReconcileRequestCurrentReleaseOverridePlatformsToJSON( - syncReconcileRequestCurrentReleaseOverridePlatforms: - SyncReconcileRequestCurrentReleaseOverridePlatforms, +export function syncReconcileRequestPendingPreparedStackOverridePlatformsToJSON( + syncReconcileRequestPendingPreparedStackOverridePlatforms: + SyncReconcileRequestPendingPreparedStackOverridePlatforms, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverridePlatforms$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverridePlatforms, - ), + SyncReconcileRequestPendingPreparedStackOverridePlatforms$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackOverridePlatforms), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverride$Outbound = { +export type SyncReconcileRequestPendingPreparedStackOverride$Outbound = { description: string; id: string; - platforms: SyncReconcileRequestCurrentReleaseOverridePlatforms$Outbound; + platforms: SyncReconcileRequestPendingPreparedStackOverridePlatforms$Outbound; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverride$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverride$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverride$Outbound, - SyncReconcileRequestCurrentReleaseOverride + SyncReconcileRequestPendingPreparedStackOverride$Outbound, + SyncReconcileRequestPendingPreparedStackOverride > = z.object({ description: z.string(), id: z.string(), platforms: z.lazy(() => - SyncReconcileRequestCurrentReleaseOverridePlatforms$outboundSchema + SyncReconcileRequestPendingPreparedStackOverridePlatforms$outboundSchema ), }); -export function syncReconcileRequestCurrentReleaseOverrideToJSON( - syncReconcileRequestCurrentReleaseOverride: - SyncReconcileRequestCurrentReleaseOverride, +export function syncReconcileRequestPendingPreparedStackOverrideToJSON( + syncReconcileRequestPendingPreparedStackOverride: + SyncReconcileRequestPendingPreparedStackOverride, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverride$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverride, + SyncReconcileRequestPendingPreparedStackOverride$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackOverride, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseOverrideUnion$Outbound = - | SyncReconcileRequestCurrentReleaseOverride$Outbound +export type SyncReconcileRequestPendingPreparedStackOverrideUnion$Outbound = + | SyncReconcileRequestPendingPreparedStackOverride$Outbound | string; /** @internal */ -export const SyncReconcileRequestCurrentReleaseOverrideUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackOverrideUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseOverrideUnion$Outbound, - SyncReconcileRequestCurrentReleaseOverrideUnion + SyncReconcileRequestPendingPreparedStackOverrideUnion$Outbound, + SyncReconcileRequestPendingPreparedStackOverrideUnion > = z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseOverride$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackOverride$outboundSchema + ), z.string(), ]); -export function syncReconcileRequestCurrentReleaseOverrideUnionToJSON( - syncReconcileRequestCurrentReleaseOverrideUnion: - SyncReconcileRequestCurrentReleaseOverrideUnion, +export function syncReconcileRequestPendingPreparedStackOverrideUnionToJSON( + syncReconcileRequestPendingPreparedStackOverrideUnion: + SyncReconcileRequestPendingPreparedStackOverrideUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseOverrideUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseOverrideUnion, + SyncReconcileRequestPendingPreparedStackOverrideUnion$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackOverrideUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseManagement2$Outbound = { +export type SyncReconcileRequestPendingPreparedStackManagement2$Outbound = { override: { [k: string]: Array< - SyncReconcileRequestCurrentReleaseOverride$Outbound | string + SyncReconcileRequestPendingPreparedStackOverride$Outbound | string >; }; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseManagement2$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackManagement2$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseManagement2$Outbound, - SyncReconcileRequestCurrentReleaseManagement2 + SyncReconcileRequestPendingPreparedStackManagement2$Outbound, + SyncReconcileRequestPendingPreparedStackManagement2 > = z.object({ override: z.record( z.string(), z.array(z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseOverride$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackOverride$outboundSchema + ), z.string(), ])), ), }); -export function syncReconcileRequestCurrentReleaseManagement2ToJSON( - syncReconcileRequestCurrentReleaseManagement2: - SyncReconcileRequestCurrentReleaseManagement2, +export function syncReconcileRequestPendingPreparedStackManagement2ToJSON( + syncReconcileRequestPendingPreparedStackManagement2: + SyncReconcileRequestPendingPreparedStackManagement2, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseManagement2$outboundSchema.parse( - syncReconcileRequestCurrentReleaseManagement2, + SyncReconcileRequestPendingPreparedStackManagement2$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackManagement2, ), ); } /** @internal */ -export type CurrentReleaseExtendStateAwResource$Outbound = { +export type PendingPreparedStackExtendStateAwResource$Outbound = { condition?: { [k: string]: { [k: string]: string } } | null | undefined; resources: Array; }; /** @internal */ -export const CurrentReleaseExtendStateAwResource$outboundSchema: z.ZodType< - CurrentReleaseExtendStateAwResource$Outbound, - CurrentReleaseExtendStateAwResource -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const PendingPreparedStackExtendStateAwResource$outboundSchema: + z.ZodType< + PendingPreparedStackExtendStateAwResource$Outbound, + PendingPreparedStackExtendStateAwResource + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function currentReleaseExtendStateAwResourceToJSON( - currentReleaseExtendStateAwResource: CurrentReleaseExtendStateAwResource, +export function pendingPreparedStackExtendStateAwResourceToJSON( + pendingPreparedStackExtendStateAwResource: + PendingPreparedStackExtendStateAwResource, ): string { return JSON.stringify( - CurrentReleaseExtendStateAwResource$outboundSchema.parse( - currentReleaseExtendStateAwResource, + PendingPreparedStackExtendStateAwResource$outboundSchema.parse( + pendingPreparedStackExtendStateAwResource, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAwStack$Outbound = { +export type SyncReconcileRequestPendingPreparedStackExtendAwStack$Outbound = { condition?: { [k: string]: { [k: string]: string } } | null | undefined; resources: Array; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAwStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAwStack$Outbound, - SyncReconcileRequestCurrentReleaseExtendAwStack + SyncReconcileRequestPendingPreparedStackExtendAwStack$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAwStack > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -13664,55 +18423,56 @@ export const SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema: resources: z.array(z.string()), }); -export function syncReconcileRequestCurrentReleaseExtendAwStackToJSON( - syncReconcileRequestCurrentReleaseExtendAwStack: - SyncReconcileRequestCurrentReleaseExtendAwStack, +export function syncReconcileRequestPendingPreparedStackExtendAwStackToJSON( + syncReconcileRequestPendingPreparedStackExtendAwStack: + SyncReconcileRequestPendingPreparedStackExtendAwStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAwStack, + SyncReconcileRequestPendingPreparedStackExtendAwStack$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendAwStack, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAwBinding$Outbound = { - resource?: CurrentReleaseExtendStateAwResource$Outbound | undefined; - stack?: SyncReconcileRequestCurrentReleaseExtendAwStack$Outbound | undefined; +export type SyncReconcileRequestPendingPreparedStackExtendAwBinding$Outbound = { + resource?: PendingPreparedStackExtendStateAwResource$Outbound | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackExtendAwStack$Outbound + | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAwBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAwBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAwBinding$Outbound, - SyncReconcileRequestCurrentReleaseExtendAwBinding + SyncReconcileRequestPendingPreparedStackExtendAwBinding$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAwBinding > = z.object({ - resource: z.lazy(() => CurrentReleaseExtendStateAwResource$outboundSchema) - .optional(), + resource: z.lazy(() => + PendingPreparedStackExtendStateAwResource$outboundSchema + ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAwStack$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAwStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendAwBindingToJSON( - syncReconcileRequestCurrentReleaseExtendAwBinding: - SyncReconcileRequestCurrentReleaseExtendAwBinding, +export function syncReconcileRequestPendingPreparedStackExtendAwBindingToJSON( + syncReconcileRequestPendingPreparedStackExtendAwBinding: + SyncReconcileRequestPendingPreparedStackExtendAwBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAwBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAwBinding, - ), + SyncReconcileRequestPendingPreparedStackExtendAwBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackExtendAwBinding), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendEffect$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseExtendEffect, - ); +export const SyncReconcileRequestPendingPreparedStackExtendEffect$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackExtendEffect); /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound = { +export type SyncReconcileRequestPendingPreparedStackExtendAwGrant$Outbound = { actions?: Array | null | undefined; dataActions?: Array | null | undefined; permissions?: Array | null | undefined; @@ -13721,10 +18481,10 @@ export type SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAwGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound, - SyncReconcileRequestCurrentReleaseExtendAwGrant + SyncReconcileRequestPendingPreparedStackExtendAwGrant$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAwGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -13733,151 +18493,155 @@ export const SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendAwGrantToJSON( - syncReconcileRequestCurrentReleaseExtendAwGrant: - SyncReconcileRequestCurrentReleaseExtendAwGrant, +export function syncReconcileRequestPendingPreparedStackExtendAwGrantToJSON( + syncReconcileRequestPendingPreparedStackExtendAwGrant: + SyncReconcileRequestPendingPreparedStackExtendAwGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAwGrant, + SyncReconcileRequestPendingPreparedStackExtendAwGrant$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendAwGrant, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAw$Outbound = { - binding: SyncReconcileRequestCurrentReleaseExtendAwBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackExtendAw$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackExtendAwBinding$Outbound; description?: string | null | undefined; effect?: string | undefined; - grant: SyncReconcileRequestCurrentReleaseExtendAwGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackExtendAwGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAw$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAw$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAw$Outbound, - SyncReconcileRequestCurrentReleaseExtendAw + SyncReconcileRequestPendingPreparedStackExtendAw$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAw > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAwBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAwBinding$outboundSchema ), description: z.nullable(z.string()).optional(), - effect: SyncReconcileRequestCurrentReleaseExtendEffect$outboundSchema + effect: SyncReconcileRequestPendingPreparedStackExtendEffect$outboundSchema .optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAwGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAwGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendAwToJSON( - syncReconcileRequestCurrentReleaseExtendAw: - SyncReconcileRequestCurrentReleaseExtendAw, +export function syncReconcileRequestPendingPreparedStackExtendAwToJSON( + syncReconcileRequestPendingPreparedStackExtendAw: + SyncReconcileRequestPendingPreparedStackExtendAw, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAw$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAw, + SyncReconcileRequestPendingPreparedStackExtendAw$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendAw, ), ); } /** @internal */ -export type CurrentReleaseExtendStateAzureResource$Outbound = { +export type PendingPreparedStackExtendStateAzureResource$Outbound = { scope: string; }; /** @internal */ -export const CurrentReleaseExtendStateAzureResource$outboundSchema: z.ZodType< - CurrentReleaseExtendStateAzureResource$Outbound, - CurrentReleaseExtendStateAzureResource -> = z.object({ - scope: z.string(), -}); +export const PendingPreparedStackExtendStateAzureResource$outboundSchema: + z.ZodType< + PendingPreparedStackExtendStateAzureResource$Outbound, + PendingPreparedStackExtendStateAzureResource + > = z.object({ + scope: z.string(), + }); -export function currentReleaseExtendStateAzureResourceToJSON( - currentReleaseExtendStateAzureResource: - CurrentReleaseExtendStateAzureResource, +export function pendingPreparedStackExtendStateAzureResourceToJSON( + pendingPreparedStackExtendStateAzureResource: + PendingPreparedStackExtendStateAzureResource, ): string { return JSON.stringify( - CurrentReleaseExtendStateAzureResource$outboundSchema.parse( - currentReleaseExtendStateAzureResource, + PendingPreparedStackExtendStateAzureResource$outboundSchema.parse( + pendingPreparedStackExtendStateAzureResource, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAzureStack$Outbound = { - scope: string; -}; +export type SyncReconcileRequestPendingPreparedStackExtendAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAzureStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAzureStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAzureStack$Outbound, - SyncReconcileRequestCurrentReleaseExtendAzureStack + SyncReconcileRequestPendingPreparedStackExtendAzureStack$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAzureStack > = z.object({ scope: z.string(), }); -export function syncReconcileRequestCurrentReleaseExtendAzureStackToJSON( - syncReconcileRequestCurrentReleaseExtendAzureStack: - SyncReconcileRequestCurrentReleaseExtendAzureStack, +export function syncReconcileRequestPendingPreparedStackExtendAzureStackToJSON( + syncReconcileRequestPendingPreparedStackExtendAzureStack: + SyncReconcileRequestPendingPreparedStackExtendAzureStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAzureStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAzureStack, - ), + SyncReconcileRequestPendingPreparedStackExtendAzureStack$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackExtendAzureStack), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAzureBinding$Outbound = { - resource?: CurrentReleaseExtendStateAzureResource$Outbound | undefined; - stack?: - | SyncReconcileRequestCurrentReleaseExtendAzureStack$Outbound - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackExtendAzureBinding$Outbound = + { + resource?: + | PendingPreparedStackExtendStateAzureResource$Outbound + | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackExtendAzureStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAzureBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAzureBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAzureBinding$Outbound, - SyncReconcileRequestCurrentReleaseExtendAzureBinding + SyncReconcileRequestPendingPreparedStackExtendAzureBinding$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAzureBinding > = z.object({ resource: z.lazy(() => - CurrentReleaseExtendStateAzureResource$outboundSchema + PendingPreparedStackExtendStateAzureResource$outboundSchema ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAzureStack$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAzureStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendAzureBindingToJSON( - syncReconcileRequestCurrentReleaseExtendAzureBinding: - SyncReconcileRequestCurrentReleaseExtendAzureBinding, +export function syncReconcileRequestPendingPreparedStackExtendAzureBindingToJSON( + syncReconcileRequestPendingPreparedStackExtendAzureBinding: + SyncReconcileRequestPendingPreparedStackExtendAzureBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAzureBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAzureBinding, - ), + SyncReconcileRequestPendingPreparedStackExtendAzureBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackExtendAzureBinding), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAzureGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackExtendAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAzureGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAzureGrant$Outbound, - SyncReconcileRequestCurrentReleaseExtendAzureGrant + SyncReconcileRequestPendingPreparedStackExtendAzureGrant$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAzureGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -13886,109 +18650,110 @@ export const SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendAzureGrantToJSON( - syncReconcileRequestCurrentReleaseExtendAzureGrant: - SyncReconcileRequestCurrentReleaseExtendAzureGrant, +export function syncReconcileRequestPendingPreparedStackExtendAzureGrantToJSON( + syncReconcileRequestPendingPreparedStackExtendAzureGrant: + SyncReconcileRequestPendingPreparedStackExtendAzureGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAzureGrant, - ), + SyncReconcileRequestPendingPreparedStackExtendAzureGrant$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackExtendAzureGrant), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendAzure$Outbound = { - binding: SyncReconcileRequestCurrentReleaseExtendAzureBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackExtendAzure$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackExtendAzureBinding$Outbound; description?: string | null | undefined; - grant: SyncReconcileRequestCurrentReleaseExtendAzureGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackExtendAzureGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendAzure$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendAzure$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendAzure$Outbound, - SyncReconcileRequestCurrentReleaseExtendAzure + SyncReconcileRequestPendingPreparedStackExtendAzure$Outbound, + SyncReconcileRequestPendingPreparedStackExtendAzure > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAzureBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAzureBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAzureGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAzureGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendAzureToJSON( - syncReconcileRequestCurrentReleaseExtendAzure: - SyncReconcileRequestCurrentReleaseExtendAzure, +export function syncReconcileRequestPendingPreparedStackExtendAzureToJSON( + syncReconcileRequestPendingPreparedStackExtendAzure: + SyncReconcileRequestPendingPreparedStackExtendAzure, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendAzure$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendAzure, + SyncReconcileRequestPendingPreparedStackExtendAzure$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendAzure, ), ); } /** @internal */ -export type CurrentReleaseExtendConditionStateResource$Outbound = { +export type PendingPreparedStackExtendConditionStateResource$Outbound = { expression: string; title: string; }; /** @internal */ -export const CurrentReleaseExtendConditionStateResource$outboundSchema: +export const PendingPreparedStackExtendConditionStateResource$outboundSchema: z.ZodType< - CurrentReleaseExtendConditionStateResource$Outbound, - CurrentReleaseExtendConditionStateResource + PendingPreparedStackExtendConditionStateResource$Outbound, + PendingPreparedStackExtendConditionStateResource > = z.object({ expression: z.string(), title: z.string(), }); -export function currentReleaseExtendConditionStateResourceToJSON( - currentReleaseExtendConditionStateResource: - CurrentReleaseExtendConditionStateResource, +export function pendingPreparedStackExtendConditionStateResourceToJSON( + pendingPreparedStackExtendConditionStateResource: + PendingPreparedStackExtendConditionStateResource, ): string { return JSON.stringify( - CurrentReleaseExtendConditionStateResource$outboundSchema.parse( - currentReleaseExtendConditionStateResource, + PendingPreparedStackExtendConditionStateResource$outboundSchema.parse( + pendingPreparedStackExtendConditionStateResource, ), ); } /** @internal */ -export type CurrentReleaseExtendStateResourceConditionUnion$Outbound = - | CurrentReleaseExtendConditionStateResource$Outbound +export type PendingPreparedStackExtendStateResourceConditionUnion$Outbound = + | PendingPreparedStackExtendConditionStateResource$Outbound | any; /** @internal */ -export const CurrentReleaseExtendStateResourceConditionUnion$outboundSchema: +export const PendingPreparedStackExtendStateResourceConditionUnion$outboundSchema: z.ZodType< - CurrentReleaseExtendStateResourceConditionUnion$Outbound, - CurrentReleaseExtendStateResourceConditionUnion + PendingPreparedStackExtendStateResourceConditionUnion$Outbound, + PendingPreparedStackExtendStateResourceConditionUnion > = z.union([ - z.lazy(() => CurrentReleaseExtendConditionStateResource$outboundSchema), + z.lazy(() => + PendingPreparedStackExtendConditionStateResource$outboundSchema + ), z.any(), ]); -export function currentReleaseExtendStateResourceConditionUnionToJSON( - currentReleaseExtendStateResourceConditionUnion: - CurrentReleaseExtendStateResourceConditionUnion, +export function pendingPreparedStackExtendStateResourceConditionUnionToJSON( + pendingPreparedStackExtendStateResourceConditionUnion: + PendingPreparedStackExtendStateResourceConditionUnion, ): string { return JSON.stringify( - CurrentReleaseExtendStateResourceConditionUnion$outboundSchema.parse( - currentReleaseExtendStateResourceConditionUnion, + PendingPreparedStackExtendStateResourceConditionUnion$outboundSchema.parse( + pendingPreparedStackExtendStateResourceConditionUnion, ), ); } /** @internal */ -export type CurrentReleaseExtendStateGcpResource$Outbound = { +export type PendingPreparedStackExtendStateGcpResource$Outbound = { condition?: - | CurrentReleaseExtendConditionStateResource$Outbound + | PendingPreparedStackExtendConditionStateResource$Outbound | any | null | undefined; @@ -13996,83 +18761,90 @@ export type CurrentReleaseExtendStateGcpResource$Outbound = { }; /** @internal */ -export const CurrentReleaseExtendStateGcpResource$outboundSchema: z.ZodType< - CurrentReleaseExtendStateGcpResource$Outbound, - CurrentReleaseExtendStateGcpResource -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => CurrentReleaseExtendConditionStateResource$outboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const PendingPreparedStackExtendStateGcpResource$outboundSchema: + z.ZodType< + PendingPreparedStackExtendStateGcpResource$Outbound, + PendingPreparedStackExtendStateGcpResource + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + PendingPreparedStackExtendConditionStateResource$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function currentReleaseExtendStateGcpResourceToJSON( - currentReleaseExtendStateGcpResource: CurrentReleaseExtendStateGcpResource, +export function pendingPreparedStackExtendStateGcpResourceToJSON( + pendingPreparedStackExtendStateGcpResource: + PendingPreparedStackExtendStateGcpResource, ): string { return JSON.stringify( - CurrentReleaseExtendStateGcpResource$outboundSchema.parse( - currentReleaseExtendStateGcpResource, + PendingPreparedStackExtendStateGcpResource$outboundSchema.parse( + pendingPreparedStackExtendStateGcpResource, ), ); } /** @internal */ -export type CurrentReleaseExtendConditionState$Outbound = { +export type PendingPreparedStackExtendConditionStateStack$Outbound = { expression: string; title: string; }; /** @internal */ -export const CurrentReleaseExtendConditionState$outboundSchema: z.ZodType< - CurrentReleaseExtendConditionState$Outbound, - CurrentReleaseExtendConditionState -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const PendingPreparedStackExtendConditionStateStack$outboundSchema: + z.ZodType< + PendingPreparedStackExtendConditionStateStack$Outbound, + PendingPreparedStackExtendConditionStateStack + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function currentReleaseExtendConditionStateToJSON( - currentReleaseExtendConditionState: CurrentReleaseExtendConditionState, +export function pendingPreparedStackExtendConditionStateStackToJSON( + pendingPreparedStackExtendConditionStateStack: + PendingPreparedStackExtendConditionStateStack, ): string { return JSON.stringify( - CurrentReleaseExtendConditionState$outboundSchema.parse( - currentReleaseExtendConditionState, + PendingPreparedStackExtendConditionStateStack$outboundSchema.parse( + pendingPreparedStackExtendConditionStateStack, ), ); } /** @internal */ -export type CurrentReleaseExtendStateConditionUnion$Outbound = - | CurrentReleaseExtendConditionState$Outbound +export type PendingPreparedStackExtendStateStackConditionUnion$Outbound = + | PendingPreparedStackExtendConditionStateStack$Outbound | any; /** @internal */ -export const CurrentReleaseExtendStateConditionUnion$outboundSchema: z.ZodType< - CurrentReleaseExtendStateConditionUnion$Outbound, - CurrentReleaseExtendStateConditionUnion -> = z.union([ - z.lazy(() => CurrentReleaseExtendConditionState$outboundSchema), - z.any(), -]); +export const PendingPreparedStackExtendStateStackConditionUnion$outboundSchema: + z.ZodType< + PendingPreparedStackExtendStateStackConditionUnion$Outbound, + PendingPreparedStackExtendStateStackConditionUnion + > = z.union([ + z.lazy(() => PendingPreparedStackExtendConditionStateStack$outboundSchema), + z.any(), + ]); -export function currentReleaseExtendStateConditionUnionToJSON( - currentReleaseExtendStateConditionUnion: - CurrentReleaseExtendStateConditionUnion, +export function pendingPreparedStackExtendStateStackConditionUnionToJSON( + pendingPreparedStackExtendStateStackConditionUnion: + PendingPreparedStackExtendStateStackConditionUnion, ): string { return JSON.stringify( - CurrentReleaseExtendStateConditionUnion$outboundSchema.parse( - currentReleaseExtendStateConditionUnion, + PendingPreparedStackExtendStateStackConditionUnion$outboundSchema.parse( + pendingPreparedStackExtendStateStackConditionUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound = { +export type SyncReconcileRequestPendingPreparedStackExtendGcpStack$Outbound = { condition?: - | CurrentReleaseExtendConditionState$Outbound + | PendingPreparedStackExtendConditionStateStack$Outbound | any | null | undefined; @@ -14080,63 +18852,68 @@ export type SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendGcpStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendGcpStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound, - SyncReconcileRequestCurrentReleaseExtendGcpStack + SyncReconcileRequestPendingPreparedStackExtendGcpStack$Outbound, + SyncReconcileRequestPendingPreparedStackExtendGcpStack > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => CurrentReleaseExtendConditionState$outboundSchema), + z.lazy(() => + PendingPreparedStackExtendConditionStateStack$outboundSchema + ), z.any(), ]), ).optional(), scope: z.string(), }); -export function syncReconcileRequestCurrentReleaseExtendGcpStackToJSON( - syncReconcileRequestCurrentReleaseExtendGcpStack: - SyncReconcileRequestCurrentReleaseExtendGcpStack, +export function syncReconcileRequestPendingPreparedStackExtendGcpStackToJSON( + syncReconcileRequestPendingPreparedStackExtendGcpStack: + SyncReconcileRequestPendingPreparedStackExtendGcpStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendGcpStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendGcpStack, + SyncReconcileRequestPendingPreparedStackExtendGcpStack$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendGcpStack, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendGcpBinding$Outbound = { - resource?: CurrentReleaseExtendStateGcpResource$Outbound | undefined; - stack?: SyncReconcileRequestCurrentReleaseExtendGcpStack$Outbound | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackExtendGcpBinding$Outbound = + { + resource?: PendingPreparedStackExtendStateGcpResource$Outbound | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackExtendGcpStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendGcpBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendGcpBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendGcpBinding$Outbound, - SyncReconcileRequestCurrentReleaseExtendGcpBinding + SyncReconcileRequestPendingPreparedStackExtendGcpBinding$Outbound, + SyncReconcileRequestPendingPreparedStackExtendGcpBinding > = z.object({ - resource: z.lazy(() => CurrentReleaseExtendStateGcpResource$outboundSchema) - .optional(), + resource: z.lazy(() => + PendingPreparedStackExtendStateGcpResource$outboundSchema + ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendGcpStack$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendGcpStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendGcpBindingToJSON( - syncReconcileRequestCurrentReleaseExtendGcpBinding: - SyncReconcileRequestCurrentReleaseExtendGcpBinding, +export function syncReconcileRequestPendingPreparedStackExtendGcpBindingToJSON( + syncReconcileRequestPendingPreparedStackExtendGcpBinding: + SyncReconcileRequestPendingPreparedStackExtendGcpBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendGcpBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendGcpBinding, - ), + SyncReconcileRequestPendingPreparedStackExtendGcpBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackExtendGcpBinding), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound = { +export type SyncReconcileRequestPendingPreparedStackExtendGcpGrant$Outbound = { actions?: Array | null | undefined; dataActions?: Array | null | undefined; permissions?: Array | null | undefined; @@ -14145,10 +18922,10 @@ export type SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendGcpGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound, - SyncReconcileRequestCurrentReleaseExtendGcpGrant + SyncReconcileRequestPendingPreparedStackExtendGcpGrant$Outbound, + SyncReconcileRequestPendingPreparedStackExtendGcpGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -14157,258 +18934,266 @@ export const SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendGcpGrantToJSON( - syncReconcileRequestCurrentReleaseExtendGcpGrant: - SyncReconcileRequestCurrentReleaseExtendGcpGrant, +export function syncReconcileRequestPendingPreparedStackExtendGcpGrantToJSON( + syncReconcileRequestPendingPreparedStackExtendGcpGrant: + SyncReconcileRequestPendingPreparedStackExtendGcpGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendGcpGrant, + SyncReconcileRequestPendingPreparedStackExtendGcpGrant$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendGcpGrant, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendGcp$Outbound = { - binding: SyncReconcileRequestCurrentReleaseExtendGcpBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackExtendGcp$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackExtendGcpBinding$Outbound; description?: string | null | undefined; - grant: SyncReconcileRequestCurrentReleaseExtendGcpGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackExtendGcpGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendGcp$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendGcp$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendGcp$Outbound, - SyncReconcileRequestCurrentReleaseExtendGcp + SyncReconcileRequestPendingPreparedStackExtendGcp$Outbound, + SyncReconcileRequestPendingPreparedStackExtendGcp > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendGcpBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendGcpBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendGcpGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendGcpGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendGcpToJSON( - syncReconcileRequestCurrentReleaseExtendGcp: - SyncReconcileRequestCurrentReleaseExtendGcp, +export function syncReconcileRequestPendingPreparedStackExtendGcpToJSON( + syncReconcileRequestPendingPreparedStackExtendGcp: + SyncReconcileRequestPendingPreparedStackExtendGcp, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendGcp$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendGcp, + SyncReconcileRequestPendingPreparedStackExtendGcp$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendGcp, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendPlatforms$Outbound = { +export type SyncReconcileRequestPendingPreparedStackExtendPlatforms$Outbound = { aws?: - | Array + | Array | null | undefined; azure?: - | Array + | Array | null | undefined; gcp?: - | Array + | Array | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendPlatforms$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendPlatforms$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendPlatforms$Outbound, - SyncReconcileRequestCurrentReleaseExtendPlatforms + SyncReconcileRequestPendingPreparedStackExtendPlatforms$Outbound, + SyncReconcileRequestPendingPreparedStackExtendPlatforms > = z.object({ aws: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAw$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAw$outboundSchema )), ).optional(), azure: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendAzure$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendAzure$outboundSchema )), ).optional(), gcp: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendGcp$outboundSchema + SyncReconcileRequestPendingPreparedStackExtendGcp$outboundSchema )), ).optional(), }); -export function syncReconcileRequestCurrentReleaseExtendPlatformsToJSON( - syncReconcileRequestCurrentReleaseExtendPlatforms: - SyncReconcileRequestCurrentReleaseExtendPlatforms, +export function syncReconcileRequestPendingPreparedStackExtendPlatformsToJSON( + syncReconcileRequestPendingPreparedStackExtendPlatforms: + SyncReconcileRequestPendingPreparedStackExtendPlatforms, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendPlatforms$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendPlatforms, - ), + SyncReconcileRequestPendingPreparedStackExtendPlatforms$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackExtendPlatforms), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtend$Outbound = { +export type SyncReconcileRequestPendingPreparedStackExtend$Outbound = { description: string; id: string; - platforms: SyncReconcileRequestCurrentReleaseExtendPlatforms$Outbound; + platforms: SyncReconcileRequestPendingPreparedStackExtendPlatforms$Outbound; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtend$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtend$Outbound, - SyncReconcileRequestCurrentReleaseExtend -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncReconcileRequestCurrentReleaseExtendPlatforms$outboundSchema - ), -}); +export const SyncReconcileRequestPendingPreparedStackExtend$outboundSchema: + z.ZodType< + SyncReconcileRequestPendingPreparedStackExtend$Outbound, + SyncReconcileRequestPendingPreparedStackExtend + > = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileRequestPendingPreparedStackExtendPlatforms$outboundSchema + ), + }); -export function syncReconcileRequestCurrentReleaseExtendToJSON( - syncReconcileRequestCurrentReleaseExtend: - SyncReconcileRequestCurrentReleaseExtend, +export function syncReconcileRequestPendingPreparedStackExtendToJSON( + syncReconcileRequestPendingPreparedStackExtend: + SyncReconcileRequestPendingPreparedStackExtend, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtend$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtend, + SyncReconcileRequestPendingPreparedStackExtend$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtend, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseExtendUnion$Outbound = - | SyncReconcileRequestCurrentReleaseExtend$Outbound +export type SyncReconcileRequestPendingPreparedStackExtendUnion$Outbound = + | SyncReconcileRequestPendingPreparedStackExtend$Outbound | string; /** @internal */ -export const SyncReconcileRequestCurrentReleaseExtendUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackExtendUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseExtendUnion$Outbound, - SyncReconcileRequestCurrentReleaseExtendUnion + SyncReconcileRequestPendingPreparedStackExtendUnion$Outbound, + SyncReconcileRequestPendingPreparedStackExtendUnion > = z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseExtend$outboundSchema), + z.lazy(() => SyncReconcileRequestPendingPreparedStackExtend$outboundSchema), z.string(), ]); -export function syncReconcileRequestCurrentReleaseExtendUnionToJSON( - syncReconcileRequestCurrentReleaseExtendUnion: - SyncReconcileRequestCurrentReleaseExtendUnion, +export function syncReconcileRequestPendingPreparedStackExtendUnionToJSON( + syncReconcileRequestPendingPreparedStackExtendUnion: + SyncReconcileRequestPendingPreparedStackExtendUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseExtendUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseExtendUnion, + SyncReconcileRequestPendingPreparedStackExtendUnion$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackExtendUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseManagement1$Outbound = { +export type SyncReconcileRequestPendingPreparedStackManagement1$Outbound = { extend: { [k: string]: Array< - SyncReconcileRequestCurrentReleaseExtend$Outbound | string + SyncReconcileRequestPendingPreparedStackExtend$Outbound | string >; }; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseManagement1$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackManagement1$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseManagement1$Outbound, - SyncReconcileRequestCurrentReleaseManagement1 + SyncReconcileRequestPendingPreparedStackManagement1$Outbound, + SyncReconcileRequestPendingPreparedStackManagement1 > = z.object({ extend: z.record( z.string(), z.array(z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseExtend$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackExtend$outboundSchema + ), z.string(), ])), ), }); -export function syncReconcileRequestCurrentReleaseManagement1ToJSON( - syncReconcileRequestCurrentReleaseManagement1: - SyncReconcileRequestCurrentReleaseManagement1, +export function syncReconcileRequestPendingPreparedStackManagement1ToJSON( + syncReconcileRequestPendingPreparedStackManagement1: + SyncReconcileRequestPendingPreparedStackManagement1, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseManagement1$outboundSchema.parse( - syncReconcileRequestCurrentReleaseManagement1, + SyncReconcileRequestPendingPreparedStackManagement1$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackManagement1, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseManagementUnion$Outbound = - | SyncReconcileRequestCurrentReleaseManagement1$Outbound - | SyncReconcileRequestCurrentReleaseManagement2$Outbound +export type SyncReconcileRequestPendingPreparedStackManagementUnion$Outbound = + | SyncReconcileRequestPendingPreparedStackManagement1$Outbound + | SyncReconcileRequestPendingPreparedStackManagement2$Outbound | string; /** @internal */ -export const SyncReconcileRequestCurrentReleaseManagementUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackManagementUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseManagementUnion$Outbound, - SyncReconcileRequestCurrentReleaseManagementUnion + SyncReconcileRequestPendingPreparedStackManagementUnion$Outbound, + SyncReconcileRequestPendingPreparedStackManagementUnion > = z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseManagement1$outboundSchema), - z.lazy(() => SyncReconcileRequestCurrentReleaseManagement2$outboundSchema), - SyncReconcileRequestCurrentReleaseManagementEnum$outboundSchema, + z.lazy(() => + SyncReconcileRequestPendingPreparedStackManagement1$outboundSchema + ), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackManagement2$outboundSchema + ), + SyncReconcileRequestPendingPreparedStackManagementEnum$outboundSchema, ]); -export function syncReconcileRequestCurrentReleaseManagementUnionToJSON( - syncReconcileRequestCurrentReleaseManagementUnion: - SyncReconcileRequestCurrentReleaseManagementUnion, +export function syncReconcileRequestPendingPreparedStackManagementUnionToJSON( + syncReconcileRequestPendingPreparedStackManagementUnion: + SyncReconcileRequestPendingPreparedStackManagementUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseManagementUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseManagementUnion, - ), + SyncReconcileRequestPendingPreparedStackManagementUnion$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackManagementUnion), ); } /** @internal */ -export type CurrentReleaseProfileStateAwResource$Outbound = { +export type PendingPreparedStackProfileStateAwResource$Outbound = { condition?: { [k: string]: { [k: string]: string } } | null | undefined; resources: Array; }; /** @internal */ -export const CurrentReleaseProfileStateAwResource$outboundSchema: z.ZodType< - CurrentReleaseProfileStateAwResource$Outbound, - CurrentReleaseProfileStateAwResource -> = z.object({ - condition: z.nullable(z.record(z.string(), z.record(z.string(), z.string()))) - .optional(), - resources: z.array(z.string()), -}); +export const PendingPreparedStackProfileStateAwResource$outboundSchema: + z.ZodType< + PendingPreparedStackProfileStateAwResource$Outbound, + PendingPreparedStackProfileStateAwResource + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function currentReleaseProfileStateAwResourceToJSON( - currentReleaseProfileStateAwResource: CurrentReleaseProfileStateAwResource, +export function pendingPreparedStackProfileStateAwResourceToJSON( + pendingPreparedStackProfileStateAwResource: + PendingPreparedStackProfileStateAwResource, ): string { return JSON.stringify( - CurrentReleaseProfileStateAwResource$outboundSchema.parse( - currentReleaseProfileStateAwResource, + PendingPreparedStackProfileStateAwResource$outboundSchema.parse( + pendingPreparedStackProfileStateAwResource, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAwStack$Outbound = { +export type SyncReconcileRequestPendingPreparedStackProfileAwStack$Outbound = { condition?: { [k: string]: { [k: string]: string } } | null | undefined; resources: Array; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAwStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAwStack$Outbound, - SyncReconcileRequestCurrentReleaseProfileAwStack + SyncReconcileRequestPendingPreparedStackProfileAwStack$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAwStack > = z.object({ condition: z.nullable( z.record(z.string(), z.record(z.string(), z.string())), @@ -14416,55 +19201,57 @@ export const SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema: resources: z.array(z.string()), }); -export function syncReconcileRequestCurrentReleaseProfileAwStackToJSON( - syncReconcileRequestCurrentReleaseProfileAwStack: - SyncReconcileRequestCurrentReleaseProfileAwStack, +export function syncReconcileRequestPendingPreparedStackProfileAwStackToJSON( + syncReconcileRequestPendingPreparedStackProfileAwStack: + SyncReconcileRequestPendingPreparedStackProfileAwStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAwStack, + SyncReconcileRequestPendingPreparedStackProfileAwStack$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfileAwStack, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAwBinding$Outbound = { - resource?: CurrentReleaseProfileStateAwResource$Outbound | undefined; - stack?: SyncReconcileRequestCurrentReleaseProfileAwStack$Outbound | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackProfileAwBinding$Outbound = + { + resource?: PendingPreparedStackProfileStateAwResource$Outbound | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackProfileAwStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAwBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAwBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAwBinding$Outbound, - SyncReconcileRequestCurrentReleaseProfileAwBinding + SyncReconcileRequestPendingPreparedStackProfileAwBinding$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAwBinding > = z.object({ - resource: z.lazy(() => CurrentReleaseProfileStateAwResource$outboundSchema) - .optional(), + resource: z.lazy(() => + PendingPreparedStackProfileStateAwResource$outboundSchema + ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAwStack$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAwStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileAwBindingToJSON( - syncReconcileRequestCurrentReleaseProfileAwBinding: - SyncReconcileRequestCurrentReleaseProfileAwBinding, +export function syncReconcileRequestPendingPreparedStackProfileAwBindingToJSON( + syncReconcileRequestPendingPreparedStackProfileAwBinding: + SyncReconcileRequestPendingPreparedStackProfileAwBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAwBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAwBinding, - ), + SyncReconcileRequestPendingPreparedStackProfileAwBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileAwBinding), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileEffect$outboundSchema: - z.ZodEnum = z.enum( - SyncReconcileRequestCurrentReleaseProfileEffect, - ); +export const SyncReconcileRequestPendingPreparedStackProfileEffect$outboundSchema: + z.ZodEnum = z + .enum(SyncReconcileRequestPendingPreparedStackProfileEffect); /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound = { +export type SyncReconcileRequestPendingPreparedStackProfileAwGrant$Outbound = { actions?: Array | null | undefined; dataActions?: Array | null | undefined; permissions?: Array | null | undefined; @@ -14473,10 +19260,10 @@ export type SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAwGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound, - SyncReconcileRequestCurrentReleaseProfileAwGrant + SyncReconcileRequestPendingPreparedStackProfileAwGrant$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAwGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -14485,151 +19272,155 @@ export const SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileAwGrantToJSON( - syncReconcileRequestCurrentReleaseProfileAwGrant: - SyncReconcileRequestCurrentReleaseProfileAwGrant, +export function syncReconcileRequestPendingPreparedStackProfileAwGrantToJSON( + syncReconcileRequestPendingPreparedStackProfileAwGrant: + SyncReconcileRequestPendingPreparedStackProfileAwGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAwGrant, + SyncReconcileRequestPendingPreparedStackProfileAwGrant$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfileAwGrant, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAw$Outbound = { - binding: SyncReconcileRequestCurrentReleaseProfileAwBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackProfileAw$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackProfileAwBinding$Outbound; description?: string | null | undefined; effect?: string | undefined; - grant: SyncReconcileRequestCurrentReleaseProfileAwGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackProfileAwGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAw$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAw$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAw$Outbound, - SyncReconcileRequestCurrentReleaseProfileAw + SyncReconcileRequestPendingPreparedStackProfileAw$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAw > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAwBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAwBinding$outboundSchema ), description: z.nullable(z.string()).optional(), - effect: SyncReconcileRequestCurrentReleaseProfileEffect$outboundSchema + effect: SyncReconcileRequestPendingPreparedStackProfileEffect$outboundSchema .optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAwGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAwGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileAwToJSON( - syncReconcileRequestCurrentReleaseProfileAw: - SyncReconcileRequestCurrentReleaseProfileAw, +export function syncReconcileRequestPendingPreparedStackProfileAwToJSON( + syncReconcileRequestPendingPreparedStackProfileAw: + SyncReconcileRequestPendingPreparedStackProfileAw, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAw$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAw, + SyncReconcileRequestPendingPreparedStackProfileAw$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfileAw, ), ); } /** @internal */ -export type CurrentReleaseProfileStateAzureResource$Outbound = { +export type PendingPreparedStackProfileStateAzureResource$Outbound = { scope: string; }; /** @internal */ -export const CurrentReleaseProfileStateAzureResource$outboundSchema: z.ZodType< - CurrentReleaseProfileStateAzureResource$Outbound, - CurrentReleaseProfileStateAzureResource -> = z.object({ - scope: z.string(), -}); +export const PendingPreparedStackProfileStateAzureResource$outboundSchema: + z.ZodType< + PendingPreparedStackProfileStateAzureResource$Outbound, + PendingPreparedStackProfileStateAzureResource + > = z.object({ + scope: z.string(), + }); -export function currentReleaseProfileStateAzureResourceToJSON( - currentReleaseProfileStateAzureResource: - CurrentReleaseProfileStateAzureResource, +export function pendingPreparedStackProfileStateAzureResourceToJSON( + pendingPreparedStackProfileStateAzureResource: + PendingPreparedStackProfileStateAzureResource, ): string { return JSON.stringify( - CurrentReleaseProfileStateAzureResource$outboundSchema.parse( - currentReleaseProfileStateAzureResource, + PendingPreparedStackProfileStateAzureResource$outboundSchema.parse( + pendingPreparedStackProfileStateAzureResource, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAzureStack$Outbound = { - scope: string; -}; +export type SyncReconcileRequestPendingPreparedStackProfileAzureStack$Outbound = + { + scope: string; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAzureStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAzureStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAzureStack$Outbound, - SyncReconcileRequestCurrentReleaseProfileAzureStack + SyncReconcileRequestPendingPreparedStackProfileAzureStack$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAzureStack > = z.object({ scope: z.string(), }); -export function syncReconcileRequestCurrentReleaseProfileAzureStackToJSON( - syncReconcileRequestCurrentReleaseProfileAzureStack: - SyncReconcileRequestCurrentReleaseProfileAzureStack, +export function syncReconcileRequestPendingPreparedStackProfileAzureStackToJSON( + syncReconcileRequestPendingPreparedStackProfileAzureStack: + SyncReconcileRequestPendingPreparedStackProfileAzureStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAzureStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAzureStack, - ), + SyncReconcileRequestPendingPreparedStackProfileAzureStack$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileAzureStack), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAzureBinding$Outbound = { - resource?: CurrentReleaseProfileStateAzureResource$Outbound | undefined; - stack?: - | SyncReconcileRequestCurrentReleaseProfileAzureStack$Outbound - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackProfileAzureBinding$Outbound = + { + resource?: + | PendingPreparedStackProfileStateAzureResource$Outbound + | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackProfileAzureStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAzureBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAzureBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAzureBinding$Outbound, - SyncReconcileRequestCurrentReleaseProfileAzureBinding + SyncReconcileRequestPendingPreparedStackProfileAzureBinding$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAzureBinding > = z.object({ resource: z.lazy(() => - CurrentReleaseProfileStateAzureResource$outboundSchema + PendingPreparedStackProfileStateAzureResource$outboundSchema ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAzureStack$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAzureStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileAzureBindingToJSON( - syncReconcileRequestCurrentReleaseProfileAzureBinding: - SyncReconcileRequestCurrentReleaseProfileAzureBinding, +export function syncReconcileRequestPendingPreparedStackProfileAzureBindingToJSON( + syncReconcileRequestPendingPreparedStackProfileAzureBinding: + SyncReconcileRequestPendingPreparedStackProfileAzureBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAzureBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAzureBinding, - ), + SyncReconcileRequestPendingPreparedStackProfileAzureBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileAzureBinding), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAzureGrant$Outbound = { - actions?: Array | null | undefined; - dataActions?: Array | null | undefined; - permissions?: Array | null | undefined; - predefinedRoles?: Array | null | undefined; - residualPermissions?: Array | null | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackProfileAzureGrant$Outbound = + { + actions?: Array | null | undefined; + dataActions?: Array | null | undefined; + permissions?: Array | null | undefined; + predefinedRoles?: Array | null | undefined; + residualPermissions?: Array | null | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAzureGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAzureGrant$Outbound, - SyncReconcileRequestCurrentReleaseProfileAzureGrant + SyncReconcileRequestPendingPreparedStackProfileAzureGrant$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAzureGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -14638,109 +19429,110 @@ export const SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileAzureGrantToJSON( - syncReconcileRequestCurrentReleaseProfileAzureGrant: - SyncReconcileRequestCurrentReleaseProfileAzureGrant, +export function syncReconcileRequestPendingPreparedStackProfileAzureGrantToJSON( + syncReconcileRequestPendingPreparedStackProfileAzureGrant: + SyncReconcileRequestPendingPreparedStackProfileAzureGrant, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAzureGrant, - ), + SyncReconcileRequestPendingPreparedStackProfileAzureGrant$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileAzureGrant), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileAzure$Outbound = { - binding: SyncReconcileRequestCurrentReleaseProfileAzureBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackProfileAzure$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackProfileAzureBinding$Outbound; description?: string | null | undefined; - grant: SyncReconcileRequestCurrentReleaseProfileAzureGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackProfileAzureGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileAzure$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileAzure$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileAzure$Outbound, - SyncReconcileRequestCurrentReleaseProfileAzure + SyncReconcileRequestPendingPreparedStackProfileAzure$Outbound, + SyncReconcileRequestPendingPreparedStackProfileAzure > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAzureBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAzureBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAzureGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAzureGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileAzureToJSON( - syncReconcileRequestCurrentReleaseProfileAzure: - SyncReconcileRequestCurrentReleaseProfileAzure, +export function syncReconcileRequestPendingPreparedStackProfileAzureToJSON( + syncReconcileRequestPendingPreparedStackProfileAzure: + SyncReconcileRequestPendingPreparedStackProfileAzure, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileAzure$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileAzure, + SyncReconcileRequestPendingPreparedStackProfileAzure$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfileAzure, ), ); } /** @internal */ -export type CurrentReleaseProfileConditionStateResource$Outbound = { +export type PendingPreparedStackProfileConditionStateResource$Outbound = { expression: string; title: string; }; /** @internal */ -export const CurrentReleaseProfileConditionStateResource$outboundSchema: +export const PendingPreparedStackProfileConditionStateResource$outboundSchema: z.ZodType< - CurrentReleaseProfileConditionStateResource$Outbound, - CurrentReleaseProfileConditionStateResource + PendingPreparedStackProfileConditionStateResource$Outbound, + PendingPreparedStackProfileConditionStateResource > = z.object({ expression: z.string(), title: z.string(), }); -export function currentReleaseProfileConditionStateResourceToJSON( - currentReleaseProfileConditionStateResource: - CurrentReleaseProfileConditionStateResource, +export function pendingPreparedStackProfileConditionStateResourceToJSON( + pendingPreparedStackProfileConditionStateResource: + PendingPreparedStackProfileConditionStateResource, ): string { return JSON.stringify( - CurrentReleaseProfileConditionStateResource$outboundSchema.parse( - currentReleaseProfileConditionStateResource, + PendingPreparedStackProfileConditionStateResource$outboundSchema.parse( + pendingPreparedStackProfileConditionStateResource, ), ); } /** @internal */ -export type CurrentReleaseProfileStateResourceConditionUnion$Outbound = - | CurrentReleaseProfileConditionStateResource$Outbound +export type PendingPreparedStackProfileStateResourceConditionUnion$Outbound = + | PendingPreparedStackProfileConditionStateResource$Outbound | any; /** @internal */ -export const CurrentReleaseProfileStateResourceConditionUnion$outboundSchema: +export const PendingPreparedStackProfileStateResourceConditionUnion$outboundSchema: z.ZodType< - CurrentReleaseProfileStateResourceConditionUnion$Outbound, - CurrentReleaseProfileStateResourceConditionUnion + PendingPreparedStackProfileStateResourceConditionUnion$Outbound, + PendingPreparedStackProfileStateResourceConditionUnion > = z.union([ - z.lazy(() => CurrentReleaseProfileConditionStateResource$outboundSchema), + z.lazy(() => + PendingPreparedStackProfileConditionStateResource$outboundSchema + ), z.any(), ]); -export function currentReleaseProfileStateResourceConditionUnionToJSON( - currentReleaseProfileStateResourceConditionUnion: - CurrentReleaseProfileStateResourceConditionUnion, +export function pendingPreparedStackProfileStateResourceConditionUnionToJSON( + pendingPreparedStackProfileStateResourceConditionUnion: + PendingPreparedStackProfileStateResourceConditionUnion, ): string { return JSON.stringify( - CurrentReleaseProfileStateResourceConditionUnion$outboundSchema.parse( - currentReleaseProfileStateResourceConditionUnion, + PendingPreparedStackProfileStateResourceConditionUnion$outboundSchema.parse( + pendingPreparedStackProfileStateResourceConditionUnion, ), ); } /** @internal */ -export type CurrentReleaseProfileStateGcpResource$Outbound = { +export type PendingPreparedStackProfileStateGcpResource$Outbound = { condition?: - | CurrentReleaseProfileConditionStateResource$Outbound + | PendingPreparedStackProfileConditionStateResource$Outbound | any | null | undefined; @@ -14748,83 +19540,90 @@ export type CurrentReleaseProfileStateGcpResource$Outbound = { }; /** @internal */ -export const CurrentReleaseProfileStateGcpResource$outboundSchema: z.ZodType< - CurrentReleaseProfileStateGcpResource$Outbound, - CurrentReleaseProfileStateGcpResource -> = z.object({ - condition: z.nullable( - z.union([ - z.lazy(() => CurrentReleaseProfileConditionStateResource$outboundSchema), - z.any(), - ]), - ).optional(), - scope: z.string(), -}); +export const PendingPreparedStackProfileStateGcpResource$outboundSchema: + z.ZodType< + PendingPreparedStackProfileStateGcpResource$Outbound, + PendingPreparedStackProfileStateGcpResource + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + PendingPreparedStackProfileConditionStateResource$outboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function currentReleaseProfileStateGcpResourceToJSON( - currentReleaseProfileStateGcpResource: CurrentReleaseProfileStateGcpResource, +export function pendingPreparedStackProfileStateGcpResourceToJSON( + pendingPreparedStackProfileStateGcpResource: + PendingPreparedStackProfileStateGcpResource, ): string { return JSON.stringify( - CurrentReleaseProfileStateGcpResource$outboundSchema.parse( - currentReleaseProfileStateGcpResource, + PendingPreparedStackProfileStateGcpResource$outboundSchema.parse( + pendingPreparedStackProfileStateGcpResource, ), ); } /** @internal */ -export type CurrentReleaseProfileConditionState$Outbound = { +export type PendingPreparedStackProfileConditionStateStack$Outbound = { expression: string; title: string; }; /** @internal */ -export const CurrentReleaseProfileConditionState$outboundSchema: z.ZodType< - CurrentReleaseProfileConditionState$Outbound, - CurrentReleaseProfileConditionState -> = z.object({ - expression: z.string(), - title: z.string(), -}); +export const PendingPreparedStackProfileConditionStateStack$outboundSchema: + z.ZodType< + PendingPreparedStackProfileConditionStateStack$Outbound, + PendingPreparedStackProfileConditionStateStack + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function currentReleaseProfileConditionStateToJSON( - currentReleaseProfileConditionState: CurrentReleaseProfileConditionState, +export function pendingPreparedStackProfileConditionStateStackToJSON( + pendingPreparedStackProfileConditionStateStack: + PendingPreparedStackProfileConditionStateStack, ): string { return JSON.stringify( - CurrentReleaseProfileConditionState$outboundSchema.parse( - currentReleaseProfileConditionState, + PendingPreparedStackProfileConditionStateStack$outboundSchema.parse( + pendingPreparedStackProfileConditionStateStack, ), ); } /** @internal */ -export type CurrentReleaseProfileStateConditionUnion$Outbound = - | CurrentReleaseProfileConditionState$Outbound +export type PendingPreparedStackProfileStateStackConditionUnion$Outbound = + | PendingPreparedStackProfileConditionStateStack$Outbound | any; /** @internal */ -export const CurrentReleaseProfileStateConditionUnion$outboundSchema: z.ZodType< - CurrentReleaseProfileStateConditionUnion$Outbound, - CurrentReleaseProfileStateConditionUnion -> = z.union([ - z.lazy(() => CurrentReleaseProfileConditionState$outboundSchema), - z.any(), -]); +export const PendingPreparedStackProfileStateStackConditionUnion$outboundSchema: + z.ZodType< + PendingPreparedStackProfileStateStackConditionUnion$Outbound, + PendingPreparedStackProfileStateStackConditionUnion + > = z.union([ + z.lazy(() => PendingPreparedStackProfileConditionStateStack$outboundSchema), + z.any(), + ]); -export function currentReleaseProfileStateConditionUnionToJSON( - currentReleaseProfileStateConditionUnion: - CurrentReleaseProfileStateConditionUnion, +export function pendingPreparedStackProfileStateStackConditionUnionToJSON( + pendingPreparedStackProfileStateStackConditionUnion: + PendingPreparedStackProfileStateStackConditionUnion, ): string { return JSON.stringify( - CurrentReleaseProfileStateConditionUnion$outboundSchema.parse( - currentReleaseProfileStateConditionUnion, + PendingPreparedStackProfileStateStackConditionUnion$outboundSchema.parse( + pendingPreparedStackProfileStateStackConditionUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound = { +export type SyncReconcileRequestPendingPreparedStackProfileGcpStack$Outbound = { condition?: - | CurrentReleaseProfileConditionState$Outbound + | PendingPreparedStackProfileConditionStateStack$Outbound | any | null | undefined; @@ -14832,65 +19631,67 @@ export type SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileGcpStack$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileGcpStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound, - SyncReconcileRequestCurrentReleaseProfileGcpStack + SyncReconcileRequestPendingPreparedStackProfileGcpStack$Outbound, + SyncReconcileRequestPendingPreparedStackProfileGcpStack > = z.object({ condition: z.nullable( z.union([ - z.lazy(() => CurrentReleaseProfileConditionState$outboundSchema), + z.lazy(() => + PendingPreparedStackProfileConditionStateStack$outboundSchema + ), z.any(), ]), ).optional(), scope: z.string(), }); -export function syncReconcileRequestCurrentReleaseProfileGcpStackToJSON( - syncReconcileRequestCurrentReleaseProfileGcpStack: - SyncReconcileRequestCurrentReleaseProfileGcpStack, +export function syncReconcileRequestPendingPreparedStackProfileGcpStackToJSON( + syncReconcileRequestPendingPreparedStackProfileGcpStack: + SyncReconcileRequestPendingPreparedStackProfileGcpStack, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileGcpStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileGcpStack, - ), + SyncReconcileRequestPendingPreparedStackProfileGcpStack$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileGcpStack), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileGcpBinding$Outbound = { - resource?: CurrentReleaseProfileStateGcpResource$Outbound | undefined; - stack?: - | SyncReconcileRequestCurrentReleaseProfileGcpStack$Outbound - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackProfileGcpBinding$Outbound = + { + resource?: PendingPreparedStackProfileStateGcpResource$Outbound | undefined; + stack?: + | SyncReconcileRequestPendingPreparedStackProfileGcpStack$Outbound + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileGcpBinding$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileGcpBinding$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileGcpBinding$Outbound, - SyncReconcileRequestCurrentReleaseProfileGcpBinding + SyncReconcileRequestPendingPreparedStackProfileGcpBinding$Outbound, + SyncReconcileRequestPendingPreparedStackProfileGcpBinding > = z.object({ - resource: z.lazy(() => CurrentReleaseProfileStateGcpResource$outboundSchema) - .optional(), + resource: z.lazy(() => + PendingPreparedStackProfileStateGcpResource$outboundSchema + ).optional(), stack: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileGcpStack$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileGcpStack$outboundSchema ).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileGcpBindingToJSON( - syncReconcileRequestCurrentReleaseProfileGcpBinding: - SyncReconcileRequestCurrentReleaseProfileGcpBinding, +export function syncReconcileRequestPendingPreparedStackProfileGcpBindingToJSON( + syncReconcileRequestPendingPreparedStackProfileGcpBinding: + SyncReconcileRequestPendingPreparedStackProfileGcpBinding, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileGcpBinding$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileGcpBinding, - ), + SyncReconcileRequestPendingPreparedStackProfileGcpBinding$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileGcpBinding), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound = { +export type SyncReconcileRequestPendingPreparedStackProfileGcpGrant$Outbound = { actions?: Array | null | undefined; dataActions?: Array | null | undefined; permissions?: Array | null | undefined; @@ -14899,10 +19700,10 @@ export type SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound = { }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileGcpGrant$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound, - SyncReconcileRequestCurrentReleaseProfileGcpGrant + SyncReconcileRequestPendingPreparedStackProfileGcpGrant$Outbound, + SyncReconcileRequestPendingPreparedStackProfileGcpGrant > = z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), @@ -14911,189 +19712,190 @@ export const SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileGcpGrantToJSON( - syncReconcileRequestCurrentReleaseProfileGcpGrant: - SyncReconcileRequestCurrentReleaseProfileGcpGrant, +export function syncReconcileRequestPendingPreparedStackProfileGcpGrantToJSON( + syncReconcileRequestPendingPreparedStackProfileGcpGrant: + SyncReconcileRequestPendingPreparedStackProfileGcpGrant, ): string { - return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileGcpGrant, - ), + return JSON.stringify( + SyncReconcileRequestPendingPreparedStackProfileGcpGrant$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfileGcpGrant), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileGcp$Outbound = { - binding: SyncReconcileRequestCurrentReleaseProfileGcpBinding$Outbound; +export type SyncReconcileRequestPendingPreparedStackProfileGcp$Outbound = { + binding: SyncReconcileRequestPendingPreparedStackProfileGcpBinding$Outbound; description?: string | null | undefined; - grant: SyncReconcileRequestCurrentReleaseProfileGcpGrant$Outbound; + grant: SyncReconcileRequestPendingPreparedStackProfileGcpGrant$Outbound; label?: string | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileGcp$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileGcp$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileGcp$Outbound, - SyncReconcileRequestCurrentReleaseProfileGcp + SyncReconcileRequestPendingPreparedStackProfileGcp$Outbound, + SyncReconcileRequestPendingPreparedStackProfileGcp > = z.object({ binding: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileGcpBinding$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileGcpBinding$outboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileGcpGrant$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileGcpGrant$outboundSchema ), label: z.nullable(z.string()).optional(), }); -export function syncReconcileRequestCurrentReleaseProfileGcpToJSON( - syncReconcileRequestCurrentReleaseProfileGcp: - SyncReconcileRequestCurrentReleaseProfileGcp, +export function syncReconcileRequestPendingPreparedStackProfileGcpToJSON( + syncReconcileRequestPendingPreparedStackProfileGcp: + SyncReconcileRequestPendingPreparedStackProfileGcp, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileGcp$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileGcp, + SyncReconcileRequestPendingPreparedStackProfileGcp$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfileGcp, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfilePlatforms$Outbound = { - aws?: - | Array - | null - | undefined; - azure?: - | Array - | null - | undefined; - gcp?: - | Array - | null - | undefined; -}; +export type SyncReconcileRequestPendingPreparedStackProfilePlatforms$Outbound = + { + aws?: + | Array + | null + | undefined; + azure?: + | Array + | null + | undefined; + gcp?: + | Array + | null + | undefined; + }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfilePlatforms$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfilePlatforms$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfilePlatforms$Outbound, - SyncReconcileRequestCurrentReleaseProfilePlatforms + SyncReconcileRequestPendingPreparedStackProfilePlatforms$Outbound, + SyncReconcileRequestPendingPreparedStackProfilePlatforms > = z.object({ aws: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAw$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAw$outboundSchema )), ).optional(), azure: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileAzure$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileAzure$outboundSchema )), ).optional(), gcp: z.nullable( z.array(z.lazy(() => - SyncReconcileRequestCurrentReleaseProfileGcp$outboundSchema + SyncReconcileRequestPendingPreparedStackProfileGcp$outboundSchema )), ).optional(), }); -export function syncReconcileRequestCurrentReleaseProfilePlatformsToJSON( - syncReconcileRequestCurrentReleaseProfilePlatforms: - SyncReconcileRequestCurrentReleaseProfilePlatforms, +export function syncReconcileRequestPendingPreparedStackProfilePlatformsToJSON( + syncReconcileRequestPendingPreparedStackProfilePlatforms: + SyncReconcileRequestPendingPreparedStackProfilePlatforms, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfilePlatforms$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfilePlatforms, - ), + SyncReconcileRequestPendingPreparedStackProfilePlatforms$outboundSchema + .parse(syncReconcileRequestPendingPreparedStackProfilePlatforms), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfile$Outbound = { +export type SyncReconcileRequestPendingPreparedStackProfile$Outbound = { description: string; id: string; - platforms: SyncReconcileRequestCurrentReleaseProfilePlatforms$Outbound; + platforms: SyncReconcileRequestPendingPreparedStackProfilePlatforms$Outbound; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfile$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfile$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfile$Outbound, - SyncReconcileRequestCurrentReleaseProfile + SyncReconcileRequestPendingPreparedStackProfile$Outbound, + SyncReconcileRequestPendingPreparedStackProfile > = z.object({ description: z.string(), id: z.string(), platforms: z.lazy(() => - SyncReconcileRequestCurrentReleaseProfilePlatforms$outboundSchema + SyncReconcileRequestPendingPreparedStackProfilePlatforms$outboundSchema ), }); -export function syncReconcileRequestCurrentReleaseProfileToJSON( - syncReconcileRequestCurrentReleaseProfile: - SyncReconcileRequestCurrentReleaseProfile, +export function syncReconcileRequestPendingPreparedStackProfileToJSON( + syncReconcileRequestPendingPreparedStackProfile: + SyncReconcileRequestPendingPreparedStackProfile, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfile$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfile, + SyncReconcileRequestPendingPreparedStackProfile$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfile, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseProfileUnion$Outbound = - | SyncReconcileRequestCurrentReleaseProfile$Outbound +export type SyncReconcileRequestPendingPreparedStackProfileUnion$Outbound = + | SyncReconcileRequestPendingPreparedStackProfile$Outbound | string; /** @internal */ -export const SyncReconcileRequestCurrentReleaseProfileUnion$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackProfileUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseProfileUnion$Outbound, - SyncReconcileRequestCurrentReleaseProfileUnion + SyncReconcileRequestPendingPreparedStackProfileUnion$Outbound, + SyncReconcileRequestPendingPreparedStackProfileUnion > = z.union([ - z.lazy(() => SyncReconcileRequestCurrentReleaseProfile$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackProfile$outboundSchema + ), z.string(), ]); -export function syncReconcileRequestCurrentReleaseProfileUnionToJSON( - syncReconcileRequestCurrentReleaseProfileUnion: - SyncReconcileRequestCurrentReleaseProfileUnion, +export function syncReconcileRequestPendingPreparedStackProfileUnionToJSON( + syncReconcileRequestPendingPreparedStackProfileUnion: + SyncReconcileRequestPendingPreparedStackProfileUnion, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseProfileUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseProfileUnion, + SyncReconcileRequestPendingPreparedStackProfileUnion$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackProfileUnion, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleasePermissions$Outbound = { +export type SyncReconcileRequestPendingPreparedStackPermissions$Outbound = { management?: - | SyncReconcileRequestCurrentReleaseManagement1$Outbound - | SyncReconcileRequestCurrentReleaseManagement2$Outbound + | SyncReconcileRequestPendingPreparedStackManagement1$Outbound + | SyncReconcileRequestPendingPreparedStackManagement2$Outbound | string | undefined; profiles: { [k: string]: { [k: string]: Array< - SyncReconcileRequestCurrentReleaseProfile$Outbound | string + SyncReconcileRequestPendingPreparedStackProfile$Outbound | string >; }; }; }; /** @internal */ -export const SyncReconcileRequestCurrentReleasePermissions$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackPermissions$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleasePermissions$Outbound, - SyncReconcileRequestCurrentReleasePermissions + SyncReconcileRequestPendingPreparedStackPermissions$Outbound, + SyncReconcileRequestPendingPreparedStackPermissions > = z.object({ management: z.union([ z.lazy(() => - SyncReconcileRequestCurrentReleaseManagement1$outboundSchema + SyncReconcileRequestPendingPreparedStackManagement1$outboundSchema ), z.lazy(() => - SyncReconcileRequestCurrentReleaseManagement2$outboundSchema + SyncReconcileRequestPendingPreparedStackManagement2$outboundSchema ), - SyncReconcileRequestCurrentReleaseManagementEnum$outboundSchema, + SyncReconcileRequestPendingPreparedStackManagementEnum$outboundSchema, ]).optional(), profiles: z.record( z.string(), @@ -15102,7 +19904,7 @@ export const SyncReconcileRequestCurrentReleasePermissions$outboundSchema: z.array( z.union([ z.lazy(() => - SyncReconcileRequestCurrentReleaseProfile$outboundSchema + SyncReconcileRequestPendingPreparedStackProfile$outboundSchema ), z.string(), ]), @@ -15111,486 +19913,208 @@ export const SyncReconcileRequestCurrentReleasePermissions$outboundSchema: ), }); -export function syncReconcileRequestCurrentReleasePermissionsToJSON( - syncReconcileRequestCurrentReleasePermissions: - SyncReconcileRequestCurrentReleasePermissions, +export function syncReconcileRequestPendingPreparedStackPermissionsToJSON( + syncReconcileRequestPendingPreparedStackPermissions: + SyncReconcileRequestPendingPreparedStackPermissions, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleasePermissions$outboundSchema.parse( - syncReconcileRequestCurrentReleasePermissions, + SyncReconcileRequestPendingPreparedStackPermissions$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackPermissions, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseConfig$Outbound = { +export type SyncReconcileRequestPendingPreparedStackConfig$Outbound = { id: string; type: string; [additionalProperties: string]: unknown; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseConfig$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseConfig$Outbound, - SyncReconcileRequestCurrentReleaseConfig -> = z.object({ - id: z.string(), - type: z.string(), - additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(), -}).transform((v) => { - return { - ...v.additionalProperties, - ...remap$(v, { - additionalProperties: null, - }), - }; -}); +export const SyncReconcileRequestPendingPreparedStackConfig$outboundSchema: + z.ZodType< + SyncReconcileRequestPendingPreparedStackConfig$Outbound, + SyncReconcileRequestPendingPreparedStackConfig + > = z.object({ + id: z.string(), + type: z.string(), + additionalProperties: z.record(z.string(), z.nullable(z.any())).optional(), + }).transform((v) => { + return { + ...v.additionalProperties, + ...remap$(v, { + additionalProperties: null, + }), + }; + }); -export function syncReconcileRequestCurrentReleaseConfigToJSON( - syncReconcileRequestCurrentReleaseConfig: - SyncReconcileRequestCurrentReleaseConfig, +export function syncReconcileRequestPendingPreparedStackConfigToJSON( + syncReconcileRequestPendingPreparedStackConfig: + SyncReconcileRequestPendingPreparedStackConfig, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseConfig$outboundSchema.parse( - syncReconcileRequestCurrentReleaseConfig, + SyncReconcileRequestPendingPreparedStackConfig$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackConfig, ), ); } /** @internal */ -export type SyncReconcileRequestCurrentReleaseDependency$Outbound = { +export type SyncReconcileRequestPendingPreparedStackDependency$Outbound = { id: string; type: string; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseDependency$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackDependency$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseDependency$Outbound, - SyncReconcileRequestCurrentReleaseDependency + SyncReconcileRequestPendingPreparedStackDependency$Outbound, + SyncReconcileRequestPendingPreparedStackDependency > = z.object({ id: z.string(), type: z.string(), }); -export function syncReconcileRequestCurrentReleaseDependencyToJSON( - syncReconcileRequestCurrentReleaseDependency: - SyncReconcileRequestCurrentReleaseDependency, +export function syncReconcileRequestPendingPreparedStackDependencyToJSON( + syncReconcileRequestPendingPreparedStackDependency: + SyncReconcileRequestPendingPreparedStackDependency, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseDependency$outboundSchema.parse( - syncReconcileRequestCurrentReleaseDependency, + SyncReconcileRequestPendingPreparedStackDependency$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackDependency, ), ); } /** @internal */ -export const CurrentReleaseStateLifecycle$outboundSchema: z.ZodEnum< - typeof CurrentReleaseStateLifecycle -> = z.enum(CurrentReleaseStateLifecycle); +export const PendingPreparedStackStateLifecycle$outboundSchema: z.ZodEnum< + typeof PendingPreparedStackStateLifecycle +> = z.enum(PendingPreparedStackStateLifecycle); /** @internal */ -export type SyncReconcileRequestCurrentReleaseResources$Outbound = { - config: SyncReconcileRequestCurrentReleaseConfig$Outbound; - dependencies: Array; +export type SyncReconcileRequestPendingPreparedStackResources$Outbound = { + config: SyncReconcileRequestPendingPreparedStackConfig$Outbound; + dependencies: Array< + SyncReconcileRequestPendingPreparedStackDependency$Outbound + >; + enabledWhen?: string | null | undefined; lifecycle: string; remoteAccess?: boolean | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseResources$outboundSchema: +export const SyncReconcileRequestPendingPreparedStackResources$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseResources$Outbound, - SyncReconcileRequestCurrentReleaseResources + SyncReconcileRequestPendingPreparedStackResources$Outbound, + SyncReconcileRequestPendingPreparedStackResources > = z.object({ config: z.lazy(() => - SyncReconcileRequestCurrentReleaseConfig$outboundSchema + SyncReconcileRequestPendingPreparedStackConfig$outboundSchema ), dependencies: z.array( - z.lazy(() => SyncReconcileRequestCurrentReleaseDependency$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackDependency$outboundSchema + ), ), - lifecycle: CurrentReleaseStateLifecycle$outboundSchema, + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: PendingPreparedStackStateLifecycle$outboundSchema, remoteAccess: z.boolean().optional(), }); -export function syncReconcileRequestCurrentReleaseResourcesToJSON( - syncReconcileRequestCurrentReleaseResources: - SyncReconcileRequestCurrentReleaseResources, +export function syncReconcileRequestPendingPreparedStackResourcesToJSON( + syncReconcileRequestPendingPreparedStackResources: + SyncReconcileRequestPendingPreparedStackResources, ): string { return JSON.stringify( - SyncReconcileRequestCurrentReleaseResources$outboundSchema.parse( - syncReconcileRequestCurrentReleaseResources, + SyncReconcileRequestPendingPreparedStackResources$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackResources, ), ); } /** @internal */ -export const SyncReconcileRequestCurrentReleaseSupportedPlatform$outboundSchema: - z.ZodEnum = z - .enum(SyncReconcileRequestCurrentReleaseSupportedPlatform); +export const SyncReconcileRequestPendingPreparedStackSupportedPlatform$outboundSchema: + z.ZodEnum = + z.enum(SyncReconcileRequestPendingPreparedStackSupportedPlatform); /** @internal */ -export type SyncReconcileRequestCurrentReleaseStack$Outbound = { +export type SyncReconcileRequestPendingPreparedStack$Outbound = { id: string; - inputs?: Array | undefined; + inputs?: + | Array + | undefined; permissions?: - | SyncReconcileRequestCurrentReleasePermissions$Outbound + | SyncReconcileRequestPendingPreparedStackPermissions$Outbound | undefined; resources: { - [k: string]: SyncReconcileRequestCurrentReleaseResources$Outbound; + [k: string]: SyncReconcileRequestPendingPreparedStackResources$Outbound; }; supportedPlatforms?: Array | null | undefined; }; /** @internal */ -export const SyncReconcileRequestCurrentReleaseStack$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseStack$Outbound, - SyncReconcileRequestCurrentReleaseStack +export const SyncReconcileRequestPendingPreparedStack$outboundSchema: z.ZodType< + SyncReconcileRequestPendingPreparedStack$Outbound, + SyncReconcileRequestPendingPreparedStack > = z.object({ id: z.string(), inputs: z.array( - z.lazy(() => SyncReconcileRequestCurrentReleaseInput$outboundSchema), + z.lazy(() => SyncReconcileRequestPendingPreparedStackInput$outboundSchema), ).optional(), permissions: z.lazy(() => - SyncReconcileRequestCurrentReleasePermissions$outboundSchema + SyncReconcileRequestPendingPreparedStackPermissions$outboundSchema ).optional(), resources: z.record( z.string(), - z.lazy(() => SyncReconcileRequestCurrentReleaseResources$outboundSchema), + z.lazy(() => + SyncReconcileRequestPendingPreparedStackResources$outboundSchema + ), ), supportedPlatforms: z.nullable( - z.array(SyncReconcileRequestCurrentReleaseSupportedPlatform$outboundSchema), - ).optional(), -}); - -export function syncReconcileRequestCurrentReleaseStackToJSON( - syncReconcileRequestCurrentReleaseStack: - SyncReconcileRequestCurrentReleaseStack, -): string { - return JSON.stringify( - SyncReconcileRequestCurrentReleaseStack$outboundSchema.parse( - syncReconcileRequestCurrentReleaseStack, - ), - ); -} - -/** @internal */ -export type SyncReconcileRequestCurrentRelease$Outbound = { - description?: string | null | undefined; - releaseId?: string | null | undefined; - stack: SyncReconcileRequestCurrentReleaseStack$Outbound; - version?: string | null | undefined; -}; - -/** @internal */ -export const SyncReconcileRequestCurrentRelease$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentRelease$Outbound, - SyncReconcileRequestCurrentRelease -> = z.object({ - description: z.nullable(z.string()).optional(), - releaseId: z.nullable(z.string()).optional(), - stack: z.lazy(() => SyncReconcileRequestCurrentReleaseStack$outboundSchema), - version: z.nullable(z.string()).optional(), -}); - -export function syncReconcileRequestCurrentReleaseToJSON( - syncReconcileRequestCurrentRelease: SyncReconcileRequestCurrentRelease, -): string { - return JSON.stringify( - SyncReconcileRequestCurrentRelease$outboundSchema.parse( - syncReconcileRequestCurrentRelease, - ), - ); -} - -/** @internal */ -export type SyncReconcileRequestCurrentReleaseUnion$Outbound = - | SyncReconcileRequestCurrentRelease$Outbound - | any; - -/** @internal */ -export const SyncReconcileRequestCurrentReleaseUnion$outboundSchema: z.ZodType< - SyncReconcileRequestCurrentReleaseUnion$Outbound, - SyncReconcileRequestCurrentReleaseUnion -> = z.union([ - z.lazy(() => SyncReconcileRequestCurrentRelease$outboundSchema), - z.any(), -]); - -export function syncReconcileRequestCurrentReleaseUnionToJSON( - syncReconcileRequestCurrentReleaseUnion: - SyncReconcileRequestCurrentReleaseUnion, -): string { - return JSON.stringify( - SyncReconcileRequestCurrentReleaseUnion$outboundSchema.parse( - syncReconcileRequestCurrentReleaseUnion, - ), - ); -} - -/** @internal */ -export const SyncReconcileRequestPlatformTest$outboundSchema: z.ZodEnum< - typeof SyncReconcileRequestPlatformTest -> = z.enum(SyncReconcileRequestPlatformTest); - -/** @internal */ -export type SyncReconcileRequestEnvironmentInfoTest$Outbound = { - testId: string; - platform: string; -}; - -/** @internal */ -export const SyncReconcileRequestEnvironmentInfoTest$outboundSchema: z.ZodType< - SyncReconcileRequestEnvironmentInfoTest$Outbound, - SyncReconcileRequestEnvironmentInfoTest -> = z.object({ - testId: z.string(), - platform: SyncReconcileRequestPlatformTest$outboundSchema, -}); - -export function syncReconcileRequestEnvironmentInfoTestToJSON( - syncReconcileRequestEnvironmentInfoTest: - SyncReconcileRequestEnvironmentInfoTest, -): string { - return JSON.stringify( - SyncReconcileRequestEnvironmentInfoTest$outboundSchema.parse( - syncReconcileRequestEnvironmentInfoTest, - ), - ); -} - -/** @internal */ -export const SyncReconcileRequestPlatformLocal$outboundSchema: z.ZodEnum< - typeof SyncReconcileRequestPlatformLocal -> = z.enum(SyncReconcileRequestPlatformLocal); - -/** @internal */ -export type SyncReconcileRequestEnvironmentInfoLocal$Outbound = { - arch: string; - hostname: string; - os: string; - platform: string; -}; - -/** @internal */ -export const SyncReconcileRequestEnvironmentInfoLocal$outboundSchema: z.ZodType< - SyncReconcileRequestEnvironmentInfoLocal$Outbound, - SyncReconcileRequestEnvironmentInfoLocal -> = z.object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: SyncReconcileRequestPlatformLocal$outboundSchema, -}); - -export function syncReconcileRequestEnvironmentInfoLocalToJSON( - syncReconcileRequestEnvironmentInfoLocal: - SyncReconcileRequestEnvironmentInfoLocal, -): string { - return JSON.stringify( - SyncReconcileRequestEnvironmentInfoLocal$outboundSchema.parse( - syncReconcileRequestEnvironmentInfoLocal, - ), - ); -} - -/** @internal */ -export const SyncReconcileRequestPlatformAzure$outboundSchema: z.ZodEnum< - typeof SyncReconcileRequestPlatformAzure -> = z.enum(SyncReconcileRequestPlatformAzure); - -/** @internal */ -export type SyncReconcileRequestEnvironmentInfoAzure$Outbound = { - location: string; - subscriptionId: string; - tenantId: string; - platform: string; -}; - -/** @internal */ -export const SyncReconcileRequestEnvironmentInfoAzure$outboundSchema: z.ZodType< - SyncReconcileRequestEnvironmentInfoAzure$Outbound, - SyncReconcileRequestEnvironmentInfoAzure -> = z.object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: SyncReconcileRequestPlatformAzure$outboundSchema, -}); - -export function syncReconcileRequestEnvironmentInfoAzureToJSON( - syncReconcileRequestEnvironmentInfoAzure: - SyncReconcileRequestEnvironmentInfoAzure, -): string { - return JSON.stringify( - SyncReconcileRequestEnvironmentInfoAzure$outboundSchema.parse( - syncReconcileRequestEnvironmentInfoAzure, - ), - ); -} - -/** @internal */ -export const SyncReconcileRequestPlatformGcp$outboundSchema: z.ZodEnum< - typeof SyncReconcileRequestPlatformGcp -> = z.enum(SyncReconcileRequestPlatformGcp); - -/** @internal */ -export type SyncReconcileRequestEnvironmentInfoGcp$Outbound = { - projectId: string; - projectNumber: string; - region: string; - platform: string; -}; - -/** @internal */ -export const SyncReconcileRequestEnvironmentInfoGcp$outboundSchema: z.ZodType< - SyncReconcileRequestEnvironmentInfoGcp$Outbound, - SyncReconcileRequestEnvironmentInfoGcp -> = z.object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: SyncReconcileRequestPlatformGcp$outboundSchema, -}); - -export function syncReconcileRequestEnvironmentInfoGcpToJSON( - syncReconcileRequestEnvironmentInfoGcp: - SyncReconcileRequestEnvironmentInfoGcp, -): string { - return JSON.stringify( - SyncReconcileRequestEnvironmentInfoGcp$outboundSchema.parse( - syncReconcileRequestEnvironmentInfoGcp, + z.array( + SyncReconcileRequestPendingPreparedStackSupportedPlatform$outboundSchema, ), - ); -} - -/** @internal */ -export const SyncReconcileRequestPlatformAws$outboundSchema: z.ZodEnum< - typeof SyncReconcileRequestPlatformAws -> = z.enum(SyncReconcileRequestPlatformAws); - -/** @internal */ -export type SyncReconcileRequestEnvironmentInfoAws$Outbound = { - accountId: string; - region: string; - platform: string; -}; - -/** @internal */ -export const SyncReconcileRequestEnvironmentInfoAws$outboundSchema: z.ZodType< - SyncReconcileRequestEnvironmentInfoAws$Outbound, - SyncReconcileRequestEnvironmentInfoAws -> = z.object({ - accountId: z.string(), - region: z.string(), - platform: SyncReconcileRequestPlatformAws$outboundSchema, + ).optional(), }); -export function syncReconcileRequestEnvironmentInfoAwsToJSON( - syncReconcileRequestEnvironmentInfoAws: - SyncReconcileRequestEnvironmentInfoAws, -): string { - return JSON.stringify( - SyncReconcileRequestEnvironmentInfoAws$outboundSchema.parse( - syncReconcileRequestEnvironmentInfoAws, - ), - ); -} - -/** @internal */ -export type SyncReconcileRequestEnvironmentInfoUnion$Outbound = - | SyncReconcileRequestEnvironmentInfoGcp$Outbound - | SyncReconcileRequestEnvironmentInfoAzure$Outbound - | SyncReconcileRequestEnvironmentInfoLocal$Outbound - | SyncReconcileRequestEnvironmentInfoAws$Outbound - | SyncReconcileRequestEnvironmentInfoTest$Outbound - | any; - -/** @internal */ -export const SyncReconcileRequestEnvironmentInfoUnion$outboundSchema: z.ZodType< - SyncReconcileRequestEnvironmentInfoUnion$Outbound, - SyncReconcileRequestEnvironmentInfoUnion -> = z.union([ - z.lazy(() => SyncReconcileRequestEnvironmentInfoGcp$outboundSchema), - z.lazy(() => SyncReconcileRequestEnvironmentInfoAzure$outboundSchema), - z.lazy(() => SyncReconcileRequestEnvironmentInfoLocal$outboundSchema), - z.lazy(() => SyncReconcileRequestEnvironmentInfoAws$outboundSchema), - z.lazy(() => SyncReconcileRequestEnvironmentInfoTest$outboundSchema), - z.any(), -]); - -export function syncReconcileRequestEnvironmentInfoUnionToJSON( - syncReconcileRequestEnvironmentInfoUnion: - SyncReconcileRequestEnvironmentInfoUnion, +export function syncReconcileRequestPendingPreparedStackToJSON( + syncReconcileRequestPendingPreparedStack: + SyncReconcileRequestPendingPreparedStack, ): string { return JSON.stringify( - SyncReconcileRequestEnvironmentInfoUnion$outboundSchema.parse( - syncReconcileRequestEnvironmentInfoUnion, + SyncReconcileRequestPendingPreparedStack$outboundSchema.parse( + syncReconcileRequestPendingPreparedStack, ), ); } /** @internal */ -export type SyncReconcileRequestError$Outbound = { - code: string; - context?: any | null | undefined; - hint?: string | null | undefined; - httpStatusCode?: number | null | undefined; - internal: boolean; - message: string; - retryable: boolean; - source?: any | null | undefined; -}; - -/** @internal */ -export const SyncReconcileRequestError$outboundSchema: z.ZodType< - SyncReconcileRequestError$Outbound, - SyncReconcileRequestError -> = z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), -}); - -export function syncReconcileRequestErrorToJSON( - syncReconcileRequestError: SyncReconcileRequestError, -): string { - return JSON.stringify( - SyncReconcileRequestError$outboundSchema.parse(syncReconcileRequestError), - ); -} - -/** @internal */ -export type SyncReconcileRequestErrorUnion$Outbound = - | SyncReconcileRequestError$Outbound +export type SyncReconcileRequestPendingPreparedStackUnion$Outbound = + | SyncReconcileRequestPendingPreparedStack$Outbound | any; /** @internal */ -export const SyncReconcileRequestErrorUnion$outboundSchema: z.ZodType< - SyncReconcileRequestErrorUnion$Outbound, - SyncReconcileRequestErrorUnion -> = z.union([z.lazy(() => SyncReconcileRequestError$outboundSchema), z.any()]); +export const SyncReconcileRequestPendingPreparedStackUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestPendingPreparedStackUnion$Outbound, + SyncReconcileRequestPendingPreparedStackUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestPendingPreparedStack$outboundSchema), + z.any(), + ]); -export function syncReconcileRequestErrorUnionToJSON( - syncReconcileRequestErrorUnion: SyncReconcileRequestErrorUnion, +export function syncReconcileRequestPendingPreparedStackUnionToJSON( + syncReconcileRequestPendingPreparedStackUnion: + SyncReconcileRequestPendingPreparedStackUnion, ): string { return JSON.stringify( - SyncReconcileRequestErrorUnion$outboundSchema.parse( - syncReconcileRequestErrorUnion, + SyncReconcileRequestPendingPreparedStackUnion$outboundSchema.parse( + syncReconcileRequestPendingPreparedStackUnion, ), ); } -/** @internal */ -export const SyncReconcileRequestPlatform$outboundSchema: z.ZodEnum< - typeof SyncReconcileRequestPlatform -> = z.enum(SyncReconcileRequestPlatform); - /** @internal */ export const SyncReconcileRequestPreparedStackTypeStringList$outboundSchema: z.ZodEnum = z.enum( @@ -18290,6 +22814,7 @@ export const PreparedStackStateLifecycle$outboundSchema: z.ZodEnum< export type SyncReconcileRequestPreparedStackResources$Outbound = { config: SyncReconcileRequestPreparedStackConfig$Outbound; dependencies: Array; + enabledWhen?: string | null | undefined; lifecycle: string; remoteAccess?: boolean | undefined; }; @@ -18306,6 +22831,7 @@ export const SyncReconcileRequestPreparedStackResources$outboundSchema: dependencies: z.array( z.lazy(() => SyncReconcileRequestPreparedStackDependency$outboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: PreparedStackStateLifecycle$outboundSchema, remoteAccess: z.boolean().optional(), }); @@ -18396,16 +22922,89 @@ export function syncReconcileRequestPreparedStackUnionToJSON( ); } +/** @internal */ +export type SyncReconcileRequestSetupUpdateAuthorization$Outbound = { + baselineFrozenDigest: string; + nonce: string; + releaseId: string; + setupFingerprint: string; + setupFingerprintVersion: number; + setupTarget: string; + targetFrozenDigest: string; +}; + +/** @internal */ +export const SyncReconcileRequestSetupUpdateAuthorization$outboundSchema: + z.ZodType< + SyncReconcileRequestSetupUpdateAuthorization$Outbound, + SyncReconcileRequestSetupUpdateAuthorization + > = z.object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), + }); + +export function syncReconcileRequestSetupUpdateAuthorizationToJSON( + syncReconcileRequestSetupUpdateAuthorization: + SyncReconcileRequestSetupUpdateAuthorization, +): string { + return JSON.stringify( + SyncReconcileRequestSetupUpdateAuthorization$outboundSchema.parse( + syncReconcileRequestSetupUpdateAuthorization, + ), + ); +} + +/** @internal */ +export type SyncReconcileRequestSetupUpdateAuthorizationUnion$Outbound = + | SyncReconcileRequestSetupUpdateAuthorization$Outbound + | any; + +/** @internal */ +export const SyncReconcileRequestSetupUpdateAuthorizationUnion$outboundSchema: + z.ZodType< + SyncReconcileRequestSetupUpdateAuthorizationUnion$Outbound, + SyncReconcileRequestSetupUpdateAuthorizationUnion + > = z.union([ + z.lazy(() => SyncReconcileRequestSetupUpdateAuthorization$outboundSchema), + z.any(), + ]); + +export function syncReconcileRequestSetupUpdateAuthorizationUnionToJSON( + syncReconcileRequestSetupUpdateAuthorizationUnion: + SyncReconcileRequestSetupUpdateAuthorizationUnion, +): string { + return JSON.stringify( + SyncReconcileRequestSetupUpdateAuthorizationUnion$outboundSchema.parse( + syncReconcileRequestSetupUpdateAuthorizationUnion, + ), + ); +} + /** @internal */ export type SyncReconcileRequestRuntimeMetadata$Outbound = { lastSyncedEnvVarsHash?: string | null | undefined; lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | SyncReconcileRequestPendingPreparedStack$Outbound + | any + | null + | undefined; preparedStack?: | SyncReconcileRequestPreparedStack$Outbound | any | null | undefined; registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | SyncReconcileRequestSetupUpdateAuthorization$Outbound + | any + | null + | undefined; }; /** @internal */ @@ -18415,6 +23014,12 @@ export const SyncReconcileRequestRuntimeMetadata$outboundSchema: z.ZodType< > = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => SyncReconcileRequestPendingPreparedStack$outboundSchema), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([ z.lazy(() => SyncReconcileRequestPreparedStack$outboundSchema), @@ -18422,6 +23027,12 @@ export const SyncReconcileRequestRuntimeMetadata$outboundSchema: z.ZodType< ]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => SyncReconcileRequestSetupUpdateAuthorization$outboundSchema), + z.any(), + ]), + ).optional(), }); export function syncReconcileRequestRuntimeMetadataToJSON( @@ -21583,6 +26194,7 @@ export const TargetReleaseStateLifecycle$outboundSchema: z.ZodEnum< export type SyncReconcileRequestTargetReleaseResources$Outbound = { config: SyncReconcileRequestTargetReleaseConfig$Outbound; dependencies: Array; + enabledWhen?: string | null | undefined; lifecycle: string; remoteAccess?: boolean | undefined; }; @@ -21599,6 +26211,7 @@ export const SyncReconcileRequestTargetReleaseResources$outboundSchema: dependencies: z.array( z.lazy(() => SyncReconcileRequestTargetReleaseDependency$outboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: TargetReleaseStateLifecycle$outboundSchema, remoteAccess: z.boolean().optional(), }); @@ -31935,6 +36548,7 @@ export type DataMachines1$Outbound = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: ResourceHeartbeatStatus16$Outbound; unavailableInstances: number; backend: "machines"; @@ -31958,6 +36572,7 @@ export const DataMachines1$outboundSchema: z.ZodType< horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => ResourceHeartbeatStatus16$outboundSchema), unavailableInstances: z.int(), backend: z.literal("machines"), @@ -32348,6 +36963,7 @@ export type DataAzure1$Outbound = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: ResourceHeartbeatStatus15$Outbound; unavailableInstances: number; backend: "azure"; @@ -32371,6 +36987,7 @@ export const DataAzure1$outboundSchema: z.ZodType< horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => ResourceHeartbeatStatus15$outboundSchema), unavailableInstances: z.int(), backend: z.literal("azure"), @@ -32761,6 +37378,7 @@ export type DataGcp1$Outbound = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: ResourceHeartbeatStatus14$Outbound; unavailableInstances: number; backend: "gcp"; @@ -32782,6 +37400,7 @@ export const DataGcp1$outboundSchema: z.ZodType = z horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => ResourceHeartbeatStatus14$outboundSchema), unavailableInstances: z.int(), backend: z.literal("gcp"), @@ -33172,6 +37791,7 @@ export type DataAws1$Outbound = { horizonStatusMessage?: string | null | undefined; horizonStatusReason?: string | null | undefined; latestUpdateTimestamp: string; + observedImage?: string | null | undefined; status: ResourceHeartbeatStatus13$Outbound; unavailableInstances: number; backend: "aws"; @@ -33193,6 +37813,7 @@ export const DataAws1$outboundSchema: z.ZodType = z horizonStatusMessage: z.nullable(z.string()).optional(), horizonStatusReason: z.nullable(z.string()).optional(), latestUpdateTimestamp: z.string(), + observedImage: z.nullable(z.string()).optional(), status: z.lazy(() => ResourceHeartbeatStatus13$outboundSchema), unavailableInstances: z.int(), backend: z.literal("aws"), @@ -34734,7 +39355,9 @@ export type DataHorizonPlatform$Outbound = { cpu?: Cpu3$Outbound | any | null | undefined; events: Array; image?: string | null | undefined; + latestUpdateTimestamp?: string | null | undefined; memory?: Memory3$Outbound | any | null | undefined; + observedImage?: string | null | undefined; replicaUnits: Array; replicas: Replicas2$Outbound; schedulingMode: string; @@ -34753,8 +39376,10 @@ export const DataHorizonPlatform$outboundSchema: z.ZodType< .optional(), events: z.array(z.lazy(() => SyncReconcileRequestEvent3$outboundSchema)), image: z.nullable(z.string()).optional(), + latestUpdateTimestamp: z.nullable(z.string()).optional(), memory: z.nullable(z.union([z.lazy(() => Memory3$outboundSchema), z.any()])) .optional(), + observedImage: z.nullable(z.string()).optional(), replicaUnits: z.array(z.lazy(() => ReplicaUnit$outboundSchema)), replicas: z.lazy(() => Replicas2$outboundSchema), schedulingMode: SchedulingMode$outboundSchema, diff --git a/client-sdks/platform/typescript/src/models/syncreconcileresponse.ts b/client-sdks/platform/typescript/src/models/syncreconcileresponse.ts index 695cca7cf..0133bdffb 100644 --- a/client-sdks/platform/typescript/src/models/syncreconcileresponse.ts +++ b/client-sdks/platform/typescript/src/models/syncreconcileresponse.ts @@ -1451,6 +1451,17 @@ export type SyncReconcileResponseCurrentReleaseResources = { * The total dependencies are: resource.get_dependencies() + this list */ dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ @@ -1781,95 +1792,94 @@ export type SyncReconcileResponseCurrentPlatform = ClosedEnum< typeof SyncReconcileResponseCurrentPlatform >; -export const SyncReconcileResponsePreparedStackTypeStringList = { +export const SyncReconcileResponsePendingPreparedStackTypeStringList = { StringList: "stringList", } as const; -export type SyncReconcileResponsePreparedStackTypeStringList = ClosedEnum< - typeof SyncReconcileResponsePreparedStackTypeStringList ->; +export type SyncReconcileResponsePendingPreparedStackTypeStringList = + ClosedEnum; -export type SyncReconcileResponsePreparedStackDefaultStringList = { - type: SyncReconcileResponsePreparedStackTypeStringList; +export type SyncReconcileResponsePendingPreparedStackDefaultStringList = { + type: SyncReconcileResponsePendingPreparedStackTypeStringList; /** * String list default. */ value: Array; }; -export const SyncReconcileResponsePreparedStackTypeBoolean = { +export const SyncReconcileResponsePendingPreparedStackTypeBoolean = { Boolean: "boolean", } as const; -export type SyncReconcileResponsePreparedStackTypeBoolean = ClosedEnum< - typeof SyncReconcileResponsePreparedStackTypeBoolean +export type SyncReconcileResponsePendingPreparedStackTypeBoolean = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackTypeBoolean >; -export type SyncReconcileResponsePreparedStackDefaultBoolean = { - type: SyncReconcileResponsePreparedStackTypeBoolean; +export type SyncReconcileResponsePendingPreparedStackDefaultBoolean = { + type: SyncReconcileResponsePendingPreparedStackTypeBoolean; /** * Boolean default. */ value: boolean; }; -export const SyncReconcileResponsePreparedStackTypeNumber = { +export const SyncReconcileResponsePendingPreparedStackTypeNumber = { Number: "number", } as const; -export type SyncReconcileResponsePreparedStackTypeNumber = ClosedEnum< - typeof SyncReconcileResponsePreparedStackTypeNumber +export type SyncReconcileResponsePendingPreparedStackTypeNumber = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackTypeNumber >; -export type SyncReconcileResponsePreparedStackDefaultNumber = { - type: SyncReconcileResponsePreparedStackTypeNumber; +export type SyncReconcileResponsePendingPreparedStackDefaultNumber = { + type: SyncReconcileResponsePendingPreparedStackTypeNumber; /** * Number default. */ value: string; }; -export const SyncReconcileResponsePreparedStackTypeString = { +export const SyncReconcileResponsePendingPreparedStackTypeString = { String: "string", } as const; -export type SyncReconcileResponsePreparedStackTypeString = ClosedEnum< - typeof SyncReconcileResponsePreparedStackTypeString +export type SyncReconcileResponsePendingPreparedStackTypeString = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackTypeString >; -export type SyncReconcileResponsePreparedStackDefaultString = { - type: SyncReconcileResponsePreparedStackTypeString; +export type SyncReconcileResponsePendingPreparedStackDefaultString = { + type: SyncReconcileResponsePendingPreparedStackTypeString; /** * String default. */ value: string; }; -export type SyncReconcileResponsePreparedStackDefaultUnion = - | SyncReconcileResponsePreparedStackDefaultString - | SyncReconcileResponsePreparedStackDefaultNumber - | SyncReconcileResponsePreparedStackDefaultBoolean - | SyncReconcileResponsePreparedStackDefaultStringList +export type SyncReconcileResponsePendingPreparedStackDefaultUnion = + | SyncReconcileResponsePendingPreparedStackDefaultString + | SyncReconcileResponsePendingPreparedStackDefaultNumber + | SyncReconcileResponsePendingPreparedStackDefaultBoolean + | SyncReconcileResponsePendingPreparedStackDefaultStringList | any; /** * Environment variable handling for a stack input mapping. */ -export const SyncReconcileResponsePreparedStackTypeEnvEnum = { +export const SyncReconcileResponsePendingPreparedStackTypeEnvEnum = { Plain: "plain", Secret: "secret", } as const; /** * Environment variable handling for a stack input mapping. */ -export type SyncReconcileResponsePreparedStackTypeEnvEnum = ClosedEnum< - typeof SyncReconcileResponsePreparedStackTypeEnvEnum +export type SyncReconcileResponsePendingPreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackTypeEnvEnum >; -export type SyncReconcileResponsePreparedStackTypeUnion = - | SyncReconcileResponsePreparedStackTypeEnvEnum +export type SyncReconcileResponsePendingPreparedStackTypeUnion = + | SyncReconcileResponsePendingPreparedStackTypeEnvEnum | any; /** * How a resolved stack input is injected into runtime environment variables. */ -export type SyncReconcileResponsePreparedStackEnv = { +export type SyncReconcileResponsePendingPreparedStackEnv = { /** * Environment variable name. */ @@ -1878,13 +1888,17 @@ export type SyncReconcileResponsePreparedStackEnv = { * Target resource IDs or patterns. None means every env-capable resource. */ targetResources?: Array | null | undefined; - type?: SyncReconcileResponsePreparedStackTypeEnvEnum | any | null | undefined; + type?: + | SyncReconcileResponsePendingPreparedStackTypeEnvEnum + | any + | null + | undefined; }; /** * Primitive stack input kind. */ -export const SyncReconcileResponsePreparedStackKind = { +export const SyncReconcileResponsePendingPreparedStackKind = { String: "string", Secret: "secret", Number: "number", @@ -1896,14 +1910,14 @@ export const SyncReconcileResponsePreparedStackKind = { /** * Primitive stack input kind. */ -export type SyncReconcileResponsePreparedStackKind = ClosedEnum< - typeof SyncReconcileResponsePreparedStackKind +export type SyncReconcileResponsePendingPreparedStackKind = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackKind >; /** * Represents the target cloud platform. */ -export const SyncReconcileResponsePreparedStackPlatform = { +export const SyncReconcileResponsePendingPreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -1915,28 +1929,28 @@ export const SyncReconcileResponsePreparedStackPlatform = { /** * Represents the target cloud platform. */ -export type SyncReconcileResponsePreparedStackPlatform = ClosedEnum< - typeof SyncReconcileResponsePreparedStackPlatform +export type SyncReconcileResponsePendingPreparedStackPlatform = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackPlatform >; /** * Who can provide a stack input value. */ -export const SyncReconcileResponsePreparedStackProvidedBy = { +export const SyncReconcileResponsePendingPreparedStackProvidedBy = { Developer: "developer", Deployer: "deployer", } as const; /** * Who can provide a stack input value. */ -export type SyncReconcileResponsePreparedStackProvidedBy = ClosedEnum< - typeof SyncReconcileResponsePreparedStackProvidedBy +export type SyncReconcileResponsePendingPreparedStackProvidedBy = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackProvidedBy >; /** * Portable stack input validation constraints. */ -export type SyncReconcileResponsePreparedStackValidation = { +export type SyncReconcileResponsePendingPreparedStackValidation = { /** * Semantic format hint such as url. */ @@ -1975,19 +1989,19 @@ export type SyncReconcileResponsePreparedStackValidation = { values?: Array | null | undefined; }; -export type SyncReconcileResponsePreparedStackValidationUnion = - | SyncReconcileResponsePreparedStackValidation +export type SyncReconcileResponsePendingPreparedStackValidationUnion = + | SyncReconcileResponsePendingPreparedStackValidation | any; /** * Stack input definition serialized into a release stack. */ -export type SyncReconcileResponsePreparedStackInput = { +export type SyncReconcileResponsePendingPreparedStackInput = { default?: - | SyncReconcileResponsePreparedStackDefaultString - | SyncReconcileResponsePreparedStackDefaultNumber - | SyncReconcileResponsePreparedStackDefaultBoolean - | SyncReconcileResponsePreparedStackDefaultStringList + | SyncReconcileResponsePendingPreparedStackDefaultString + | SyncReconcileResponsePendingPreparedStackDefaultNumber + | SyncReconcileResponsePendingPreparedStackDefaultBoolean + | SyncReconcileResponsePendingPreparedStackDefaultStringList | any | null | undefined; @@ -1998,7 +2012,7 @@ export type SyncReconcileResponsePreparedStackInput = { /** * Runtime env-var mappings for v1 input resolution. */ - env?: Array | undefined; + env?: Array | undefined; /** * Stable input ID used by CLI/API calls. */ @@ -2006,7 +2020,7 @@ export type SyncReconcileResponsePreparedStackInput = { /** * Primitive stack input kind. */ - kind: SyncReconcileResponsePreparedStackKind; + kind: SyncReconcileResponsePendingPreparedStackKind; /** * Human-facing field label. */ @@ -2019,35 +2033,34 @@ export type SyncReconcileResponsePreparedStackInput = { * Platforms where this input applies. */ platforms?: - | Array + | Array | null | undefined; /** * Who can provide this value. */ - providedBy: Array; + providedBy: Array; /** * Whether a resolved value is required before deployment can proceed. */ required: boolean; validation?: - | SyncReconcileResponsePreparedStackValidation + | SyncReconcileResponsePendingPreparedStackValidation | any | null | undefined; }; -export const SyncReconcileResponsePreparedStackManagementEnum = { +export const SyncReconcileResponsePendingPreparedStackManagementEnum = { Auto: "auto", } as const; -export type SyncReconcileResponsePreparedStackManagementEnum = ClosedEnum< - typeof SyncReconcileResponsePreparedStackManagementEnum ->; +export type SyncReconcileResponsePendingPreparedStackManagementEnum = + ClosedEnum; /** * AWS-specific binding specification */ -export type SyncReconcileResponsePreparedStackOverrideAwResource = { +export type SyncReconcileResponsePendingPreparedStackOverrideAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2061,7 +2074,7 @@ export type SyncReconcileResponsePreparedStackOverrideAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileResponsePreparedStackOverrideAwStack = { +export type SyncReconcileResponsePendingPreparedStackOverrideAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2075,35 +2088,36 @@ export type SyncReconcileResponsePreparedStackOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackOverrideAwBinding = { +export type SyncReconcileResponsePendingPreparedStackOverrideAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackOverrideAwResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackOverrideAwResource + | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackOverrideAwStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackOverrideAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileResponsePreparedStackOverrideEffect = { +export const SyncReconcileResponsePendingPreparedStackOverrideEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileResponsePreparedStackOverrideEffect = ClosedEnum< - typeof SyncReconcileResponsePreparedStackOverrideEffect ->; +export type SyncReconcileResponsePendingPreparedStackOverrideEffect = + ClosedEnum; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackOverrideAwGrant = { +export type SyncReconcileResponsePendingPreparedStackOverrideAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2129,11 +2143,11 @@ export type SyncReconcileResponsePreparedStackOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackOverrideAw = { +export type SyncReconcileResponsePendingPreparedStackOverrideAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackOverrideAwBinding; + binding: SyncReconcileResponsePendingPreparedStackOverrideAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2141,11 +2155,11 @@ export type SyncReconcileResponsePreparedStackOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileResponsePreparedStackOverrideEffect | undefined; + effect?: SyncReconcileResponsePendingPreparedStackOverrideEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackOverrideAwGrant; + grant: SyncReconcileResponsePendingPreparedStackOverrideAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2155,7 +2169,7 @@ export type SyncReconcileResponsePreparedStackOverrideAw = { /** * Azure-specific binding specification */ -export type SyncReconcileResponsePreparedStackOverrideAzureResource = { +export type SyncReconcileResponsePendingPreparedStackOverrideAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2165,7 +2179,7 @@ export type SyncReconcileResponsePreparedStackOverrideAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileResponsePreparedStackOverrideAzureStack = { +export type SyncReconcileResponsePendingPreparedStackOverrideAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2175,23 +2189,25 @@ export type SyncReconcileResponsePreparedStackOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackOverrideAzureBinding = { +export type SyncReconcileResponsePendingPreparedStackOverrideAzureBinding = { /** * Azure-specific binding specification */ resource?: - | SyncReconcileResponsePreparedStackOverrideAzureResource + | SyncReconcileResponsePendingPreparedStackOverrideAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackOverrideAzureStack | undefined; + stack?: + | SyncReconcileResponsePendingPreparedStackOverrideAzureStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackOverrideAzureGrant = { +export type SyncReconcileResponsePendingPreparedStackOverrideAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2217,11 +2233,11 @@ export type SyncReconcileResponsePreparedStackOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackOverrideAzure = { +export type SyncReconcileResponsePendingPreparedStackOverrideAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackOverrideAzureBinding; + binding: SyncReconcileResponsePendingPreparedStackOverrideAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2229,7 +2245,7 @@ export type SyncReconcileResponsePreparedStackOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackOverrideAzureGrant; + grant: SyncReconcileResponsePendingPreparedStackOverrideAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2239,21 +2255,22 @@ export type SyncReconcileResponsePreparedStackOverrideAzure = { /** * GCP IAM condition */ -export type SyncReconcileResponsePreparedStackOverrideConditionResource = { - expression: string; - title: string; -}; +export type SyncReconcileResponsePendingPreparedStackOverrideConditionResource = + { + expression: string; + title: string; + }; -export type SyncReconcileResponsePreparedStackOverrideResourceConditionUnion = - | SyncReconcileResponsePreparedStackOverrideConditionResource +export type SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion = + | SyncReconcileResponsePendingPreparedStackOverrideConditionResource | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponsePreparedStackOverrideGcpResource = { +export type SyncReconcileResponsePendingPreparedStackOverrideGcpResource = { condition?: - | SyncReconcileResponsePreparedStackOverrideConditionResource + | SyncReconcileResponsePendingPreparedStackOverrideConditionResource | any | null | undefined; @@ -2266,21 +2283,21 @@ export type SyncReconcileResponsePreparedStackOverrideGcpResource = { /** * GCP IAM condition */ -export type SyncReconcileResponsePreparedStackOverrideConditionStack = { +export type SyncReconcileResponsePendingPreparedStackOverrideConditionStack = { expression: string; title: string; }; -export type SyncReconcileResponsePreparedStackOverrideStackConditionUnion = - | SyncReconcileResponsePreparedStackOverrideConditionStack +export type SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion = + | SyncReconcileResponsePendingPreparedStackOverrideConditionStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponsePreparedStackOverrideGcpStack = { +export type SyncReconcileResponsePendingPreparedStackOverrideGcpStack = { condition?: - | SyncReconcileResponsePreparedStackOverrideConditionStack + | SyncReconcileResponsePendingPreparedStackOverrideConditionStack | any | null | undefined; @@ -2293,21 +2310,23 @@ export type SyncReconcileResponsePreparedStackOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackOverrideGcpBinding = { +export type SyncReconcileResponsePendingPreparedStackOverrideGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackOverrideGcpResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackOverrideGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackOverrideGcpStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackOverrideGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackOverrideGcpGrant = { +export type SyncReconcileResponsePendingPreparedStackOverrideGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2333,11 +2352,11 @@ export type SyncReconcileResponsePreparedStackOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackOverrideGcp = { +export type SyncReconcileResponsePendingPreparedStackOverrideGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackOverrideGcpBinding; + binding: SyncReconcileResponsePendingPreparedStackOverrideGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2345,7 +2364,7 @@ export type SyncReconcileResponsePreparedStackOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackOverrideGcpGrant; + grant: SyncReconcileResponsePendingPreparedStackOverrideGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2355,28 +2374,34 @@ export type SyncReconcileResponsePreparedStackOverrideGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileResponsePreparedStackOverridePlatforms = { +export type SyncReconcileResponsePendingPreparedStackOverridePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponsePreparedStackOverride = { +export type SyncReconcileResponsePendingPreparedStackOverride = { /** * Human-readable description of what this permission set allows */ @@ -2388,17 +2413,17 @@ export type SyncReconcileResponsePreparedStackOverride = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileResponsePreparedStackOverridePlatforms; + platforms: SyncReconcileResponsePendingPreparedStackOverridePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponsePreparedStackOverrideUnion = - | SyncReconcileResponsePreparedStackOverride +export type SyncReconcileResponsePendingPreparedStackOverrideUnion = + | SyncReconcileResponsePendingPreparedStackOverride | string; -export type SyncReconcileResponsePreparedStackManagement2 = { +export type SyncReconcileResponsePendingPreparedStackManagement2 = { /** * Permission profile that maps resources to permission sets * @@ -2406,14 +2431,16 @@ export type SyncReconcileResponsePreparedStackManagement2 = { * Key can be "*" for all resources or resource name for specific resource */ override: { - [k: string]: Array; + [k: string]: Array< + SyncReconcileResponsePendingPreparedStackOverride | string + >; }; }; /** * AWS-specific binding specification */ -export type SyncReconcileResponsePreparedStackExtendAwResource = { +export type SyncReconcileResponsePendingPreparedStackExtendAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2427,7 +2454,7 @@ export type SyncReconcileResponsePreparedStackExtendAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileResponsePreparedStackExtendAwStack = { +export type SyncReconcileResponsePendingPreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2441,35 +2468,37 @@ export type SyncReconcileResponsePreparedStackExtendAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackExtendAwBinding = { +export type SyncReconcileResponsePendingPreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackExtendAwResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackExtendAwResource + | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackExtendAwStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileResponsePreparedStackExtendEffect = { +export const SyncReconcileResponsePendingPreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileResponsePreparedStackExtendEffect = ClosedEnum< - typeof SyncReconcileResponsePreparedStackExtendEffect +export type SyncReconcileResponsePendingPreparedStackExtendEffect = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackExtendEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackExtendAwGrant = { +export type SyncReconcileResponsePendingPreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2495,11 +2524,11 @@ export type SyncReconcileResponsePreparedStackExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackExtendAw = { +export type SyncReconcileResponsePendingPreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackExtendAwBinding; + binding: SyncReconcileResponsePendingPreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2507,11 +2536,11 @@ export type SyncReconcileResponsePreparedStackExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileResponsePreparedStackExtendEffect | undefined; + effect?: SyncReconcileResponsePendingPreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackExtendAwGrant; + grant: SyncReconcileResponsePendingPreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2521,7 +2550,7 @@ export type SyncReconcileResponsePreparedStackExtendAw = { /** * Azure-specific binding specification */ -export type SyncReconcileResponsePreparedStackExtendAzureResource = { +export type SyncReconcileResponsePendingPreparedStackExtendAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2531,7 +2560,7 @@ export type SyncReconcileResponsePreparedStackExtendAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileResponsePreparedStackExtendAzureStack = { +export type SyncReconcileResponsePendingPreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2541,21 +2570,23 @@ export type SyncReconcileResponsePreparedStackExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackExtendAzureBinding = { +export type SyncReconcileResponsePendingPreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackExtendAzureResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackExtendAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackExtendAzureStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackExtendAzureGrant = { +export type SyncReconcileResponsePendingPreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2581,11 +2612,11 @@ export type SyncReconcileResponsePreparedStackExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackExtendAzure = { +export type SyncReconcileResponsePendingPreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackExtendAzureBinding; + binding: SyncReconcileResponsePendingPreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2593,7 +2624,7 @@ export type SyncReconcileResponsePreparedStackExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackExtendAzureGrant; + grant: SyncReconcileResponsePendingPreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2603,21 +2634,21 @@ export type SyncReconcileResponsePreparedStackExtendAzure = { /** * GCP IAM condition */ -export type SyncReconcileResponsePreparedStackExtendConditionResource = { +export type SyncReconcileResponsePendingPreparedStackExtendConditionResource = { expression: string; title: string; }; -export type SyncReconcileResponsePreparedStackExtendResourceConditionUnion = - | SyncReconcileResponsePreparedStackExtendConditionResource +export type SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion = + | SyncReconcileResponsePendingPreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponsePreparedStackExtendGcpResource = { +export type SyncReconcileResponsePendingPreparedStackExtendGcpResource = { condition?: - | SyncReconcileResponsePreparedStackExtendConditionResource + | SyncReconcileResponsePendingPreparedStackExtendConditionResource | any | null | undefined; @@ -2630,21 +2661,21 @@ export type SyncReconcileResponsePreparedStackExtendGcpResource = { /** * GCP IAM condition */ -export type SyncReconcileResponsePreparedStackExtendConditionStack = { +export type SyncReconcileResponsePendingPreparedStackExtendConditionStack = { expression: string; title: string; }; -export type SyncReconcileResponsePreparedStackExtendStackConditionUnion = - | SyncReconcileResponsePreparedStackExtendConditionStack +export type SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion = + | SyncReconcileResponsePendingPreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponsePreparedStackExtendGcpStack = { +export type SyncReconcileResponsePendingPreparedStackExtendGcpStack = { condition?: - | SyncReconcileResponsePreparedStackExtendConditionStack + | SyncReconcileResponsePendingPreparedStackExtendConditionStack | any | null | undefined; @@ -2657,21 +2688,23 @@ export type SyncReconcileResponsePreparedStackExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackExtendGcpBinding = { +export type SyncReconcileResponsePendingPreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackExtendGcpResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackExtendGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackExtendGcpStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackExtendGcpGrant = { +export type SyncReconcileResponsePendingPreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2697,11 +2730,11 @@ export type SyncReconcileResponsePreparedStackExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackExtendGcp = { +export type SyncReconcileResponsePendingPreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackExtendGcpBinding; + binding: SyncReconcileResponsePendingPreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2709,7 +2742,7 @@ export type SyncReconcileResponsePreparedStackExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackExtendGcpGrant; + grant: SyncReconcileResponsePendingPreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2719,28 +2752,34 @@ export type SyncReconcileResponsePreparedStackExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileResponsePreparedStackExtendPlatforms = { +export type SyncReconcileResponsePendingPreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: + | Array + | null + | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponsePreparedStackExtend = { +export type SyncReconcileResponsePendingPreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -2752,17 +2791,17 @@ export type SyncReconcileResponsePreparedStackExtend = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileResponsePreparedStackExtendPlatforms; + platforms: SyncReconcileResponsePendingPreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponsePreparedStackExtendUnion = - | SyncReconcileResponsePreparedStackExtend +export type SyncReconcileResponsePendingPreparedStackExtendUnion = + | SyncReconcileResponsePendingPreparedStackExtend | string; -export type SyncReconcileResponsePreparedStackManagement1 = { +export type SyncReconcileResponsePendingPreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * @@ -2770,22 +2809,24 @@ export type SyncReconcileResponsePreparedStackManagement1 = { * Key can be "*" for all resources or resource name for specific resource */ extend: { - [k: string]: Array; + [k: string]: Array< + SyncReconcileResponsePendingPreparedStackExtend | string + >; }; }; /** * Management permissions configuration for stack management access */ -export type SyncReconcileResponsePreparedStackManagementUnion = - | SyncReconcileResponsePreparedStackManagement1 - | SyncReconcileResponsePreparedStackManagement2 - | SyncReconcileResponsePreparedStackManagementEnum; +export type SyncReconcileResponsePendingPreparedStackManagementUnion = + | SyncReconcileResponsePendingPreparedStackManagement1 + | SyncReconcileResponsePendingPreparedStackManagement2 + | SyncReconcileResponsePendingPreparedStackManagementEnum; /** * AWS-specific binding specification */ -export type SyncReconcileResponsePreparedStackProfileAwResource = { +export type SyncReconcileResponsePendingPreparedStackProfileAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -2799,7 +2840,7 @@ export type SyncReconcileResponsePreparedStackProfileAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileResponsePreparedStackProfileAwStack = { +export type SyncReconcileResponsePendingPreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -2813,35 +2854,37 @@ export type SyncReconcileResponsePreparedStackProfileAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackProfileAwBinding = { +export type SyncReconcileResponsePendingPreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackProfileAwResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackProfileAwResource + | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackProfileAwStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackProfileAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileResponsePreparedStackProfileEffect = { +export const SyncReconcileResponsePendingPreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileResponsePreparedStackProfileEffect = ClosedEnum< - typeof SyncReconcileResponsePreparedStackProfileEffect +export type SyncReconcileResponsePendingPreparedStackProfileEffect = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackProfileEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackProfileAwGrant = { +export type SyncReconcileResponsePendingPreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2867,11 +2910,11 @@ export type SyncReconcileResponsePreparedStackProfileAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackProfileAw = { +export type SyncReconcileResponsePendingPreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackProfileAwBinding; + binding: SyncReconcileResponsePendingPreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2879,11 +2922,11 @@ export type SyncReconcileResponsePreparedStackProfileAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileResponsePreparedStackProfileEffect | undefined; + effect?: SyncReconcileResponsePendingPreparedStackProfileEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackProfileAwGrant; + grant: SyncReconcileResponsePendingPreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2893,7 +2936,7 @@ export type SyncReconcileResponsePreparedStackProfileAw = { /** * Azure-specific binding specification */ -export type SyncReconcileResponsePreparedStackProfileAzureResource = { +export type SyncReconcileResponsePendingPreparedStackProfileAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -2903,7 +2946,7 @@ export type SyncReconcileResponsePreparedStackProfileAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileResponsePreparedStackProfileAzureStack = { +export type SyncReconcileResponsePendingPreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -2913,21 +2956,25 @@ export type SyncReconcileResponsePreparedStackProfileAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackProfileAzureBinding = { +export type SyncReconcileResponsePendingPreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackProfileAzureResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackProfileAzureResource + | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackProfileAzureStack | undefined; + stack?: + | SyncReconcileResponsePendingPreparedStackProfileAzureStack + | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackProfileAzureGrant = { +export type SyncReconcileResponsePendingPreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -2953,11 +3000,11 @@ export type SyncReconcileResponsePreparedStackProfileAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackProfileAzure = { +export type SyncReconcileResponsePendingPreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackProfileAzureBinding; + binding: SyncReconcileResponsePendingPreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -2965,7 +3012,7 @@ export type SyncReconcileResponsePreparedStackProfileAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackProfileAzureGrant; + grant: SyncReconcileResponsePendingPreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -2975,21 +3022,22 @@ export type SyncReconcileResponsePreparedStackProfileAzure = { /** * GCP IAM condition */ -export type SyncReconcileResponsePreparedStackProfileConditionResource = { - expression: string; - title: string; -}; +export type SyncReconcileResponsePendingPreparedStackProfileConditionResource = + { + expression: string; + title: string; + }; -export type SyncReconcileResponsePreparedStackProfileResourceConditionUnion = - | SyncReconcileResponsePreparedStackProfileConditionResource +export type SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion = + | SyncReconcileResponsePendingPreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponsePreparedStackProfileGcpResource = { +export type SyncReconcileResponsePendingPreparedStackProfileGcpResource = { condition?: - | SyncReconcileResponsePreparedStackProfileConditionResource + | SyncReconcileResponsePendingPreparedStackProfileConditionResource | any | null | undefined; @@ -3002,21 +3050,21 @@ export type SyncReconcileResponsePreparedStackProfileGcpResource = { /** * GCP IAM condition */ -export type SyncReconcileResponsePreparedStackProfileConditionStack = { +export type SyncReconcileResponsePendingPreparedStackProfileConditionStack = { expression: string; title: string; }; -export type SyncReconcileResponsePreparedStackProfileStackConditionUnion = - | SyncReconcileResponsePreparedStackProfileConditionStack +export type SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion = + | SyncReconcileResponsePendingPreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponsePreparedStackProfileGcpStack = { +export type SyncReconcileResponsePendingPreparedStackProfileGcpStack = { condition?: - | SyncReconcileResponsePreparedStackProfileConditionStack + | SyncReconcileResponsePendingPreparedStackProfileConditionStack | any | null | undefined; @@ -3029,21 +3077,23 @@ export type SyncReconcileResponsePreparedStackProfileGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponsePreparedStackProfileGcpBinding = { +export type SyncReconcileResponsePendingPreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncReconcileResponsePreparedStackProfileGcpResource | undefined; + resource?: + | SyncReconcileResponsePendingPreparedStackProfileGcpResource + | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileResponsePreparedStackProfileGcpStack | undefined; + stack?: SyncReconcileResponsePendingPreparedStackProfileGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePreparedStackProfileGcpGrant = { +export type SyncReconcileResponsePendingPreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -3069,11 +3119,11 @@ export type SyncReconcileResponsePreparedStackProfileGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileResponsePreparedStackProfileGcp = { +export type SyncReconcileResponsePendingPreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponsePreparedStackProfileGcpBinding; + binding: SyncReconcileResponsePendingPreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -3081,7 +3131,7 @@ export type SyncReconcileResponsePreparedStackProfileGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponsePreparedStackProfileGcpGrant; + grant: SyncReconcileResponsePendingPreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -3091,28 +3141,34 @@ export type SyncReconcileResponsePreparedStackProfileGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileResponsePreparedStackProfilePlatforms = { +export type SyncReconcileResponsePendingPreparedStackProfilePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: + | Array + | null + | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; -}; - + gcp?: + | Array + | null + | undefined; +}; + /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponsePreparedStackProfile = { +export type SyncReconcileResponsePendingPreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -3124,27 +3180,27 @@ export type SyncReconcileResponsePreparedStackProfile = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileResponsePreparedStackProfilePlatforms; + platforms: SyncReconcileResponsePendingPreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponsePreparedStackProfileUnion = - | SyncReconcileResponsePreparedStackProfile +export type SyncReconcileResponsePendingPreparedStackProfileUnion = + | SyncReconcileResponsePendingPreparedStackProfile | string; /** * Combined permissions configuration that contains both profiles and management */ -export type SyncReconcileResponsePreparedStackPermissions = { +export type SyncReconcileResponsePendingPreparedStackPermissions = { /** * Management permissions configuration for stack management access */ management?: - | SyncReconcileResponsePreparedStackManagement1 - | SyncReconcileResponsePreparedStackManagement2 - | SyncReconcileResponsePreparedStackManagementEnum + | SyncReconcileResponsePendingPreparedStackManagement1 + | SyncReconcileResponsePendingPreparedStackManagement2 + | SyncReconcileResponsePendingPreparedStackManagementEnum | undefined; /** * Permission profiles that define access control for compute services @@ -3154,7 +3210,9 @@ export type SyncReconcileResponsePreparedStackPermissions = { */ profiles: { [k: string]: { - [k: string]: Array; + [k: string]: Array< + SyncReconcileResponsePendingPreparedStackProfile | string + >; }; }; }; @@ -3162,7 +3220,7 @@ export type SyncReconcileResponsePreparedStackPermissions = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileResponsePreparedStackConfig = { +export type SyncReconcileResponsePendingPreparedStackConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -3177,7 +3235,7 @@ export type SyncReconcileResponsePreparedStackConfig = { /** * Reference to a resource by its stable id and resource type. */ -export type SyncReconcileResponsePreparedStackDependency = { +export type SyncReconcileResponsePendingPreparedStackDependency = { id: string; /** * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. @@ -3188,33 +3246,44 @@ export type SyncReconcileResponsePreparedStackDependency = { /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const SyncReconcileResponsePreparedStackLifecycle = { +export const SyncReconcileResponsePendingPreparedStackLifecycle = { Frozen: "frozen", Live: "live", } as const; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncReconcileResponsePreparedStackLifecycle = ClosedEnum< - typeof SyncReconcileResponsePreparedStackLifecycle +export type SyncReconcileResponsePendingPreparedStackLifecycle = ClosedEnum< + typeof SyncReconcileResponsePendingPreparedStackLifecycle >; -export type SyncReconcileResponsePreparedStackResources = { +export type SyncReconcileResponsePendingPreparedStackResources = { /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: SyncReconcileResponsePreparedStackConfig; + config: SyncReconcileResponsePendingPreparedStackConfig; /** * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks * The total dependencies are: resource.get_dependencies() + this list */ - dependencies: Array; + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; /** * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - lifecycle: SyncReconcileResponsePreparedStackLifecycle; + lifecycle: SyncReconcileResponsePendingPreparedStackLifecycle; /** * Enable remote bindings for this resource (BYOB use case). * @@ -3228,7 +3297,7 @@ export type SyncReconcileResponsePreparedStackResources = { /** * Represents the target cloud platform. */ -export const SyncReconcileResponsePreparedStackSupportedPlatform = { +export const SyncReconcileResponsePendingPreparedStackSupportedPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3240,14 +3309,13 @@ export const SyncReconcileResponsePreparedStackSupportedPlatform = { /** * Represents the target cloud platform. */ -export type SyncReconcileResponsePreparedStackSupportedPlatform = ClosedEnum< - typeof SyncReconcileResponsePreparedStackSupportedPlatform ->; +export type SyncReconcileResponsePendingPreparedStackSupportedPlatform = + ClosedEnum; /** * A bag of resources, unaware of any cloud. */ -export type SyncReconcileResponsePreparedStack = { +export type SyncReconcileResponsePendingPreparedStack = { /** * Unique identifier for the stack */ @@ -3255,105 +3323,155 @@ export type SyncReconcileResponsePreparedStack = { /** * Input definitions required before setup or deployment can proceed. */ - inputs?: Array | undefined; + inputs?: Array | undefined; /** * Combined permissions configuration that contains both profiles and management */ - permissions?: SyncReconcileResponsePreparedStackPermissions | undefined; + permissions?: + | SyncReconcileResponsePendingPreparedStackPermissions + | undefined; /** * Map of resource IDs to their configurations and lifecycle settings */ - resources: { [k: string]: SyncReconcileResponsePreparedStackResources }; + resources: { + [k: string]: SyncReconcileResponsePendingPreparedStackResources; + }; /** * Which platforms this stack supports. When None, all platforms are supported. */ supportedPlatforms?: - | Array + | Array | null | undefined; }; -export type SyncReconcileResponsePreparedStackUnion = - | SyncReconcileResponsePreparedStack +export type SyncReconcileResponsePendingPreparedStackUnion = + | SyncReconcileResponsePendingPreparedStack | any; -/** - * Runtime metadata for deployment - * - * @remarks - * - * Stores deployment state that needs to persist across step calls. - */ -export type SyncReconcileResponseRuntimeMetadata = { +export const SyncReconcileResponsePreparedStackTypeStringList = { + StringList: "stringList", +} as const; +export type SyncReconcileResponsePreparedStackTypeStringList = ClosedEnum< + typeof SyncReconcileResponsePreparedStackTypeStringList +>; + +export type SyncReconcileResponsePreparedStackDefaultStringList = { + type: SyncReconcileResponsePreparedStackTypeStringList; /** - * Hash of the environment variables snapshot that was last synced to the vault - * - * @remarks - * Used to avoid redundant sync operations during incremental deployment + * String list default. */ - lastSyncedEnvVarsHash?: string | null | undefined; + value: Array; +}; + +export const SyncReconcileResponsePreparedStackTypeBoolean = { + Boolean: "boolean", +} as const; +export type SyncReconcileResponsePreparedStackTypeBoolean = ClosedEnum< + typeof SyncReconcileResponsePreparedStackTypeBoolean +>; + +export type SyncReconcileResponsePreparedStackDefaultBoolean = { + type: SyncReconcileResponsePreparedStackTypeBoolean; /** - * Exact vault keys owned by the deployment secret synchronizer. This - * - * @remarks - * inventory lets a later snapshot delete removed keys without listing or - * touching unrelated values in the same vault. + * Boolean default. */ - lastSyncedSecretNames?: Array | undefined; - preparedStack?: SyncReconcileResponsePreparedStack | any | null | undefined; + value: boolean; +}; + +export const SyncReconcileResponsePreparedStackTypeNumber = { + Number: "number", +} as const; +export type SyncReconcileResponsePreparedStackTypeNumber = ClosedEnum< + typeof SyncReconcileResponsePreparedStackTypeNumber +>; + +export type SyncReconcileResponsePreparedStackDefaultNumber = { + type: SyncReconcileResponsePreparedStackTypeNumber; /** - * Whether cross-account registry access has been successfully granted. - * - * @remarks - * Set to true after the manager successfully sets the ECR/GAR repo policy - * for this deployment's target account. Prevents redundant API calls on - * every reconcile tick. + * Number default. */ - registryAccessGranted?: boolean | undefined; + value: string; }; -export type SyncReconcileResponseRuntimeMetadataUnion = - | SyncReconcileResponseRuntimeMetadata +export const SyncReconcileResponsePreparedStackTypeString = { + String: "string", +} as const; +export type SyncReconcileResponsePreparedStackTypeString = ClosedEnum< + typeof SyncReconcileResponsePreparedStackTypeString +>; + +export type SyncReconcileResponsePreparedStackDefaultString = { + type: SyncReconcileResponsePreparedStackTypeString; + /** + * String default. + */ + value: string; +}; + +export type SyncReconcileResponsePreparedStackDefaultUnion = + | SyncReconcileResponsePreparedStackDefaultString + | SyncReconcileResponsePreparedStackDefaultNumber + | SyncReconcileResponsePreparedStackDefaultBoolean + | SyncReconcileResponsePreparedStackDefaultStringList | any; /** - * Represents the target cloud platform. + * Environment variable handling for a stack input mapping. */ -export const SyncReconcileResponseStackStatePlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", +export const SyncReconcileResponsePreparedStackTypeEnvEnum = { + Plain: "plain", + Secret: "secret", } as const; /** - * Represents the target cloud platform. + * Environment variable handling for a stack input mapping. */ -export type SyncReconcileResponseStackStatePlatform = ClosedEnum< - typeof SyncReconcileResponseStackStatePlatform +export type SyncReconcileResponsePreparedStackTypeEnvEnum = ClosedEnum< + typeof SyncReconcileResponsePreparedStackTypeEnvEnum >; +export type SyncReconcileResponsePreparedStackTypeUnion = + | SyncReconcileResponsePreparedStackTypeEnvEnum + | any; + /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * How a resolved stack input is injected into runtime environment variables. */ -export type SyncReconcileResponseStackStateConfig = { +export type SyncReconcileResponsePreparedStackEnv = { /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + * Environment variable name. */ - id: string; + name: string; /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Target resource IDs or patterns. None means every env-capable resource. */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; + targetResources?: Array | null | undefined; + type?: SyncReconcileResponsePreparedStackTypeEnvEnum | any | null | undefined; }; +/** + * Primitive stack input kind. + */ +export const SyncReconcileResponsePreparedStackKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; +/** + * Primitive stack input kind. + */ +export type SyncReconcileResponsePreparedStackKind = ClosedEnum< + typeof SyncReconcileResponsePreparedStackKind +>; + /** * Represents the target cloud platform. */ -export const SyncReconcileResponseControllerPlatformEnum = { +export const SyncReconcileResponsePreparedStackPlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -3365,589 +3483,505 @@ export const SyncReconcileResponseControllerPlatformEnum = { /** * Represents the target cloud platform. */ -export type SyncReconcileResponseControllerPlatformEnum = ClosedEnum< - typeof SyncReconcileResponseControllerPlatformEnum +export type SyncReconcileResponsePreparedStackPlatform = ClosedEnum< + typeof SyncReconcileResponsePreparedStackPlatform >; -export type SyncReconcileResponseControllerPlatformUnion = - | SyncReconcileResponseControllerPlatformEnum - | any; - /** - * Reference to a resource by its stable id and resource type. + * Who can provide a stack input value. */ -export type SyncReconcileResponseStackStateDependency = { - id: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; -}; +export const SyncReconcileResponsePreparedStackProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type SyncReconcileResponsePreparedStackProvidedBy = ClosedEnum< + typeof SyncReconcileResponsePreparedStackProvidedBy +>; /** - * Canonical error container that provides a structured way to represent errors - * - * @remarks - * with rich metadata including error codes, human-readable messages, context, - * and chaining capabilities for error propagation. - * - * This struct is designed to be both machine-readable and user-friendly, - * supporting serialization for API responses and detailed error reporting - * in distributed systems. + * Portable stack input validation constraints. */ -export type SyncReconcileResponseStackStateError = { +export type SyncReconcileResponsePreparedStackValidation = { /** - * A unique identifier for the type of error. - * - * @remarks - * - * This should be a short, machine-readable string that can be used - * by clients to programmatically handle different error types. - * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + * Semantic format hint such as url. */ - code: string; + format?: string | null | undefined; /** - * Additional diagnostic information about the error context. - * - * @remarks - * - * This optional field can contain structured data providing more details - * about the error, such as validation errors, request parameters that - * caused the issue, or other relevant context information. + * Maximum number. */ - context?: any | null | undefined; + max?: string | null | undefined; /** - * Optional human-facing remediation hint. + * Maximum string-list items. */ - hint?: string | null | undefined; + maxItems?: number | null | undefined; /** - * HTTP status code for this error. - * - * @remarks - * - * Used when converting the error to an HTTP response. If None, falls back to - * the error type's default status code or 500. + * Maximum string length. */ - httpStatusCode?: number | null | undefined; + maxLength?: number | null | undefined; /** - * Indicates if this is an internal error that should not be exposed to users. - * - * @remarks - * - * When `true`, this error contains sensitive information or implementation - * details that should not be shown to end-users. Such errors should be - * logged for debugging but replaced with generic error messages in responses. + * Minimum number. */ - internal: boolean; + min?: string | null | undefined; /** - * Human-readable error message. - * - * @remarks - * - * This message should be clear and actionable for developers or end-users, - * providing context about what went wrong and potentially how to fix it. + * Minimum string-list items. */ - message: string; + minItems?: number | null | undefined; /** - * Indicates whether the operation that caused the error should be retried. - * - * @remarks - * - * When `true`, the error is transient and the operation might succeed - * if attempted again. When `false`, retrying the same operation is - * unlikely to succeed without changes. + * Minimum string length. */ - retryable: boolean; + minLength?: number | null | undefined; /** - * The underlying error that caused this error, creating an error chain. - * - * @remarks - * - * This allows for proper error propagation and debugging by maintaining - * the full context of how an error occurred through multiple layers - * of an application. + * Portable whole-value regex pattern. */ - source?: any | null | undefined; + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; -export type SyncReconcileResponseStackStateErrorUnion = - | SyncReconcileResponseStackStateError +export type SyncReconcileResponsePreparedStackValidationUnion = + | SyncReconcileResponsePreparedStackValidation | any; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Stack input definition serialized into a release stack. */ -export const SyncReconcileResponseStackStateLifecycleEnum = { - Frozen: "frozen", - Live: "live", +export type SyncReconcileResponsePreparedStackInput = { + default?: + | SyncReconcileResponsePreparedStackDefaultString + | SyncReconcileResponsePreparedStackDefaultNumber + | SyncReconcileResponsePreparedStackDefaultBoolean + | SyncReconcileResponsePreparedStackDefaultStringList + | any + | null + | undefined; + /** + * Human-facing helper text. + */ + description: string; + /** + * Runtime env-var mappings for v1 input resolution. + */ + env?: Array | undefined; + /** + * Stable input ID used by CLI/API calls. + */ + id: string; + /** + * Primitive stack input kind. + */ + kind: SyncReconcileResponsePreparedStackKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: + | Array + | null + | undefined; + /** + * Who can provide this value. + */ + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: + | SyncReconcileResponsePreparedStackValidation + | any + | null + | undefined; +}; + +export const SyncReconcileResponsePreparedStackManagementEnum = { + Auto: "auto", } as const; -/** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - */ -export type SyncReconcileResponseStackStateLifecycleEnum = ClosedEnum< - typeof SyncReconcileResponseStackStateLifecycleEnum +export type SyncReconcileResponsePreparedStackManagementEnum = ClosedEnum< + typeof SyncReconcileResponsePreparedStackManagementEnum >; -export type SyncReconcileResponseLifecycleUnion = - | SyncReconcileResponseStackStateLifecycleEnum - | any; - /** - * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. + * AWS-specific binding specification */ -export type SyncReconcileResponseOutputs = { +export type SyncReconcileResponsePreparedStackOverrideAwResource = { /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Optional condition for additional filtering (rare) */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type SyncReconcileResponseOutputsUnion = - | SyncReconcileResponseOutputs - | any; - /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * AWS-specific binding specification */ -export type SyncReconcileResponsePreviousConfig = { +export type SyncReconcileResponsePreparedStackOverrideAwStack = { /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + * Optional condition for additional filtering (rare) */ - id: string; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Resource ARNs to bind to */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; + resources: Array; }; -export type SyncReconcileResponsePreviousConfigUnion = - | SyncReconcileResponsePreviousConfig - | any; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileResponsePreparedStackOverrideAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: SyncReconcileResponsePreparedStackOverrideAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileResponsePreparedStackOverrideAwStack | undefined; +}; /** - * Represents the high-level status of a resource during its lifecycle. + * IAM effect. Defaults to Allow. */ -export const SyncReconcileResponseStackStateStatus = { - Pending: "pending", - Provisioning: "provisioning", - ProvisionFailed: "provision-failed", - Running: "running", - Updating: "updating", - UpdateFailed: "update-failed", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - Deleted: "deleted", - RefreshFailed: "refresh-failed", +export const SyncReconcileResponsePreparedStackOverrideEffect = { + Allow: "Allow", + Deny: "Deny", } as const; /** - * Represents the high-level status of a resource during its lifecycle. + * IAM effect. Defaults to Allow. */ -export type SyncReconcileResponseStackStateStatus = ClosedEnum< - typeof SyncReconcileResponseStackStateStatus +export type SyncReconcileResponsePreparedStackOverrideEffect = ClosedEnum< + typeof SyncReconcileResponsePreparedStackOverrideEffect >; /** - * Represents the state of a single resource within the stack for a specific platform. + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseStackStateResources = { +export type SyncReconcileResponsePreparedStackOverrideAwGrant = { /** - * The platform-specific resource controller that manages this resource's lifecycle. - * - * @remarks - * This is None when the resource status is Pending. - * Stored as JSON to make the struct serializable and movable to alien-core. + * AWS IAM actions (only for AWS) */ - internal?: any | null | undefined; + actions?: Array | null | undefined; /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * Azure actions (only for Azure) */ - config: SyncReconcileResponseStackStateConfig; - controllerPlatform?: - | SyncReconcileResponseControllerPlatformEnum - | any - | null - | undefined; + dataActions?: Array | null | undefined; /** - * Complete list of dependencies for this resource, including infrastructure dependencies. - * - * @remarks - * This preserves the full dependency information from the stack definition. + * GCP permissions that require an exact residual custom role. */ - dependencies?: Array | undefined; - error?: SyncReconcileResponseStackStateError | any | null | undefined; + permissions?: Array | null | undefined; /** - * Stores the controller state that failed, used for manual retry operations. - * - * @remarks - * This allows resuming from the exact point where the failure occurred. - * Stored as JSON to make the struct serializable and movable to alien-core. + * Provider predefined roles to bind directly. */ - lastFailedState?: any | null | undefined; - lifecycle?: - | SyncReconcileResponseStackStateLifecycleEnum - | any - | null - | undefined; - outputs?: SyncReconcileResponseOutputs | any | null | undefined; - previousConfig?: SyncReconcileResponsePreviousConfig | any | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Binding parameters for remote access. - * - * @remarks - * Only populated when the resource has `remote_access: true` in its ResourceEntry. - * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). - * Populated by controllers during provisioning using get_binding_params(). + * GCP residual custom permissions to pair with predefined roles. */ - remoteBindingParams?: any | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncReconcileResponsePreparedStackOverrideAw = { /** - * Tracks consecutive retry attempts for the current state transition. + * Generic binding configuration for permissions */ - retryAttempt?: number | undefined; + binding: SyncReconcileResponsePreparedStackOverrideAwBinding; /** - * Represents the high-level status of a resource during its lifecycle. + * Short admin-facing description of why this entry exists. */ - status: SyncReconcileResponseStackStateStatus; - /** - * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). - */ - type: string; -}; - -/** - * Represents the collective state of all resources in a stack, including platform and pending actions. - */ -export type SyncReconcileResponseStackState = { + description?: string | null | undefined; /** - * Represents the target cloud platform. + * IAM effect. Defaults to Allow. */ - platform: SyncReconcileResponseStackStatePlatform; + effect?: SyncReconcileResponsePreparedStackOverrideEffect | undefined; /** - * A prefix used for resource naming to ensure uniqueness across deployments. + * Grant permissions for a specific cloud platform */ - resourcePrefix: string; + grant: SyncReconcileResponsePreparedStackOverrideAwGrant; /** - * The state of individual resources, keyed by resource ID. + * Stable admin-facing label for this permission entry. */ - resources: { [k: string]: SyncReconcileResponseStackStateResources }; + label?: string | null | undefined; }; -export type SyncReconcileResponseStackStateUnion = - | SyncReconcileResponseStackState - | any; - /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Azure-specific binding specification */ -export const SyncReconcileResponseStatus = { - Pending: "pending", - PreflightsFailed: "preflights-failed", - InitialSetup: "initial-setup", - InitialSetupFailed: "initial-setup-failed", - Provisioning: "provisioning", - WaitingForMachines: "waiting-for-machines", - ProvisioningFailed: "provisioning-failed", - Running: "running", - RefreshFailed: "refresh-failed", - UpdatePending: "update-pending", - Updating: "updating", - UpdateFailed: "update-failed", - DeletePending: "delete-pending", - Deleting: "deleting", - DeleteFailed: "delete-failed", - TeardownRequired: "teardown-required", - TeardownFailed: "teardown-failed", - Deleted: "deleted", - Error: "error", -} as const; +export type SyncReconcileResponsePreparedStackOverrideAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Azure-specific binding specification */ -export type SyncReconcileResponseStatus = ClosedEnum< - typeof SyncReconcileResponseStatus ->; - -export const SyncReconcileResponseTargetReleaseTypeStringList = { - StringList: "stringList", -} as const; -export type SyncReconcileResponseTargetReleaseTypeStringList = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseTypeStringList ->; - -export type SyncReconcileResponseTargetReleaseDefaultStringList = { - type: SyncReconcileResponseTargetReleaseTypeStringList; +export type SyncReconcileResponsePreparedStackOverrideAzureStack = { /** - * String list default. + * Scope (subscription/resource group/resource level) */ - value: Array; + scope: string; }; -export const SyncReconcileResponseTargetReleaseTypeBoolean = { - Boolean: "boolean", -} as const; -export type SyncReconcileResponseTargetReleaseTypeBoolean = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseTypeBoolean ->; - -export type SyncReconcileResponseTargetReleaseDefaultBoolean = { - type: SyncReconcileResponseTargetReleaseTypeBoolean; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileResponsePreparedStackOverrideAzureBinding = { /** - * Boolean default. + * Azure-specific binding specification */ - value: boolean; + resource?: + | SyncReconcileResponsePreparedStackOverrideAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileResponsePreparedStackOverrideAzureStack | undefined; }; -export const SyncReconcileResponseTargetReleaseTypeNumber = { - Number: "number", -} as const; -export type SyncReconcileResponseTargetReleaseTypeNumber = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseTypeNumber ->; - -export type SyncReconcileResponseTargetReleaseDefaultNumber = { - type: SyncReconcileResponseTargetReleaseTypeNumber; +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileResponsePreparedStackOverrideAzureGrant = { /** - * Number default. + * AWS IAM actions (only for AWS) */ - value: string; + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; -export const SyncReconcileResponseTargetReleaseTypeString = { - String: "string", -} as const; -export type SyncReconcileResponseTargetReleaseTypeString = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseTypeString ->; - -export type SyncReconcileResponseTargetReleaseDefaultString = { - type: SyncReconcileResponseTargetReleaseTypeString; +/** + * Azure-specific platform permission configuration + */ +export type SyncReconcileResponsePreparedStackOverrideAzure = { /** - * String default. + * Generic binding configuration for permissions */ - value: string; + binding: SyncReconcileResponsePreparedStackOverrideAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponsePreparedStackOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type SyncReconcileResponseTargetReleaseDefaultUnion = - | SyncReconcileResponseTargetReleaseDefaultString - | SyncReconcileResponseTargetReleaseDefaultNumber - | SyncReconcileResponseTargetReleaseDefaultBoolean - | SyncReconcileResponseTargetReleaseDefaultStringList +/** + * GCP IAM condition + */ +export type SyncReconcileResponsePreparedStackOverrideConditionResource = { + expression: string; + title: string; +}; + +export type SyncReconcileResponsePreparedStackOverrideResourceConditionUnion = + | SyncReconcileResponsePreparedStackOverrideConditionResource | any; /** - * Environment variable handling for a stack input mapping. + * GCP-specific binding specification */ -export const SyncReconcileResponseTargetReleaseTypeEnvEnum = { - Plain: "plain", - Secret: "secret", -} as const; +export type SyncReconcileResponsePreparedStackOverrideGcpResource = { + condition?: + | SyncReconcileResponsePreparedStackOverrideConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + /** - * Environment variable handling for a stack input mapping. + * GCP IAM condition */ -export type SyncReconcileResponseTargetReleaseTypeEnvEnum = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseTypeEnvEnum ->; +export type SyncReconcileResponsePreparedStackOverrideConditionStack = { + expression: string; + title: string; +}; -export type SyncReconcileResponseTargetReleaseTypeUnion = - | SyncReconcileResponseTargetReleaseTypeEnvEnum +export type SyncReconcileResponsePreparedStackOverrideStackConditionUnion = + | SyncReconcileResponsePreparedStackOverrideConditionStack | any; /** - * How a resolved stack input is injected into runtime environment variables. + * GCP-specific binding specification */ -export type SyncReconcileResponseTargetReleaseEnv = { +export type SyncReconcileResponsePreparedStackOverrideGcpStack = { + condition?: + | SyncReconcileResponsePreparedStackOverrideConditionStack + | any + | null + | undefined; /** - * Environment variable name. + * Scope (project/resource level) */ - name: string; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileResponsePreparedStackOverrideGcpBinding = { /** - * Target resource IDs or patterns. None means every env-capable resource. + * GCP-specific binding specification */ - targetResources?: Array | null | undefined; - type?: SyncReconcileResponseTargetReleaseTypeEnvEnum | any | null | undefined; + resource?: SyncReconcileResponsePreparedStackOverrideGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncReconcileResponsePreparedStackOverrideGcpStack | undefined; }; /** - * Primitive stack input kind. + * Grant permissions for a specific cloud platform */ -export const SyncReconcileResponseTargetReleaseKind = { - String: "string", - Secret: "secret", - Number: "number", - Integer: "integer", - Boolean: "boolean", - Enum: "enum", - StringList: "stringList", -} as const; -/** - * Primitive stack input kind. - */ -export type SyncReconcileResponseTargetReleaseKind = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseKind ->; - -/** - * Represents the target cloud platform. - */ -export const SyncReconcileResponseTargetReleasePlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type SyncReconcileResponseTargetReleasePlatform = ClosedEnum< - typeof SyncReconcileResponseTargetReleasePlatform ->; - -/** - * Who can provide a stack input value. - */ -export const SyncReconcileResponseTargetReleaseProvidedBy = { - Developer: "developer", - Deployer: "deployer", -} as const; -/** - * Who can provide a stack input value. - */ -export type SyncReconcileResponseTargetReleaseProvidedBy = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseProvidedBy ->; - -/** - * Portable stack input validation constraints. - */ -export type SyncReconcileResponseTargetReleaseValidation = { +export type SyncReconcileResponsePreparedStackOverrideGcpGrant = { /** - * Semantic format hint such as url. + * AWS IAM actions (only for AWS) */ - format?: string | null | undefined; + actions?: Array | null | undefined; /** - * Maximum number. + * Azure actions (only for Azure) */ - max?: string | null | undefined; + dataActions?: Array | null | undefined; /** - * Maximum string-list items. + * GCP permissions that require an exact residual custom role. */ - maxItems?: number | null | undefined; + permissions?: Array | null | undefined; /** - * Maximum string length. + * Provider predefined roles to bind directly. */ - maxLength?: number | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Minimum number. + * GCP residual custom permissions to pair with predefined roles. */ - min?: string | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type SyncReconcileResponsePreparedStackOverrideGcp = { /** - * Minimum string-list items. + * Generic binding configuration for permissions */ - minItems?: number | null | undefined; + binding: SyncReconcileResponsePreparedStackOverrideGcpBinding; /** - * Minimum string length. + * Short admin-facing description of why this entry exists. */ - minLength?: number | null | undefined; + description?: string | null | undefined; /** - * Portable whole-value regex pattern. + * Grant permissions for a specific cloud platform */ - pattern?: string | null | undefined; + grant: SyncReconcileResponsePreparedStackOverrideGcpGrant; /** - * Allowed string enum values. + * Stable admin-facing label for this permission entry. */ - values?: Array | null | undefined; + label?: string | null | undefined; }; -export type SyncReconcileResponseTargetReleaseValidationUnion = - | SyncReconcileResponseTargetReleaseValidation - | any; - /** - * Stack input definition serialized into a release stack. + * Platform-specific permission configurations */ -export type SyncReconcileResponseTargetReleaseInput = { - default?: - | SyncReconcileResponseTargetReleaseDefaultString - | SyncReconcileResponseTargetReleaseDefaultNumber - | SyncReconcileResponseTargetReleaseDefaultBoolean - | SyncReconcileResponseTargetReleaseDefaultStringList - | any - | null - | undefined; - /** - * Human-facing helper text. - */ - description: string; - /** - * Runtime env-var mappings for v1 input resolution. - */ - env?: Array | undefined; +export type SyncReconcileResponsePreparedStackOverridePlatforms = { /** - * Stable input ID used by CLI/API calls. + * AWS permission configurations */ - id: string; + aws?: Array | null | undefined; /** - * Primitive stack input kind. + * Azure permission configurations */ - kind: SyncReconcileResponseTargetReleaseKind; + azure?: + | Array + | null + | undefined; /** - * Human-facing field label. + * GCP permission configurations */ - label: string; + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncReconcileResponsePreparedStackOverride = { /** - * Example placeholder shown in UI. + * Human-readable description of what this permission set allows */ - placeholder?: string | null | undefined; + description: string; /** - * Platforms where this input applies. + * Unique identifier for the permission set (e.g., "storage/data-read") */ - platforms?: - | Array - | null - | undefined; + id: string; /** - * Who can provide this value. + * Platform-specific permission configurations */ - providedBy: Array; + platforms: SyncReconcileResponsePreparedStackOverridePlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type SyncReconcileResponsePreparedStackOverrideUnion = + | SyncReconcileResponsePreparedStackOverride + | string; + +export type SyncReconcileResponsePreparedStackManagement2 = { /** - * Whether a resolved value is required before deployment can proceed. + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource */ - required: boolean; - validation?: - | SyncReconcileResponseTargetReleaseValidation - | any - | null - | undefined; + override: { + [k: string]: Array; + }; }; -export const SyncReconcileResponseTargetReleaseManagementEnum = { - Auto: "auto", -} as const; -export type SyncReconcileResponseTargetReleaseManagementEnum = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseManagementEnum ->; - /** * AWS-specific binding specification */ -export type SyncReconcileResponseTargetReleaseOverrideAwResource = { +export type SyncReconcileResponsePreparedStackExtendAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -3961,7 +3995,7 @@ export type SyncReconcileResponseTargetReleaseOverrideAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileResponseTargetReleaseOverrideAwStack = { +export type SyncReconcileResponsePreparedStackExtendAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -3975,35 +4009,35 @@ export type SyncReconcileResponseTargetReleaseOverrideAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponseTargetReleaseOverrideAwBinding = { +export type SyncReconcileResponsePreparedStackExtendAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncReconcileResponseTargetReleaseOverrideAwResource | undefined; + resource?: SyncReconcileResponsePreparedStackExtendAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileResponseTargetReleaseOverrideAwStack | undefined; + stack?: SyncReconcileResponsePreparedStackExtendAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileResponseTargetReleaseOverrideEffect = { +export const SyncReconcileResponsePreparedStackExtendEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileResponseTargetReleaseOverrideEffect = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseOverrideEffect +export type SyncReconcileResponsePreparedStackExtendEffect = ClosedEnum< + typeof SyncReconcileResponsePreparedStackExtendEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseTargetReleaseOverrideAwGrant = { +export type SyncReconcileResponsePreparedStackExtendAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4029,11 +4063,11 @@ export type SyncReconcileResponseTargetReleaseOverrideAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileResponseTargetReleaseOverrideAw = { +export type SyncReconcileResponsePreparedStackExtendAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponseTargetReleaseOverrideAwBinding; + binding: SyncReconcileResponsePreparedStackExtendAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4041,11 +4075,11 @@ export type SyncReconcileResponseTargetReleaseOverrideAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileResponseTargetReleaseOverrideEffect | undefined; + effect?: SyncReconcileResponsePreparedStackExtendEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponseTargetReleaseOverrideAwGrant; + grant: SyncReconcileResponsePreparedStackExtendAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4055,7 +4089,7 @@ export type SyncReconcileResponseTargetReleaseOverrideAw = { /** * Azure-specific binding specification */ -export type SyncReconcileResponseTargetReleaseOverrideAzureResource = { +export type SyncReconcileResponsePreparedStackExtendAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4065,7 +4099,7 @@ export type SyncReconcileResponseTargetReleaseOverrideAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileResponseTargetReleaseOverrideAzureStack = { +export type SyncReconcileResponsePreparedStackExtendAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4075,23 +4109,21 @@ export type SyncReconcileResponseTargetReleaseOverrideAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponseTargetReleaseOverrideAzureBinding = { +export type SyncReconcileResponsePreparedStackExtendAzureBinding = { /** * Azure-specific binding specification */ - resource?: - | SyncReconcileResponseTargetReleaseOverrideAzureResource - | undefined; + resource?: SyncReconcileResponsePreparedStackExtendAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileResponseTargetReleaseOverrideAzureStack | undefined; + stack?: SyncReconcileResponsePreparedStackExtendAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseTargetReleaseOverrideAzureGrant = { +export type SyncReconcileResponsePreparedStackExtendAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4117,11 +4149,11 @@ export type SyncReconcileResponseTargetReleaseOverrideAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileResponseTargetReleaseOverrideAzure = { +export type SyncReconcileResponsePreparedStackExtendAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponseTargetReleaseOverrideAzureBinding; + binding: SyncReconcileResponsePreparedStackExtendAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4129,7 +4161,7 @@ export type SyncReconcileResponseTargetReleaseOverrideAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponseTargetReleaseOverrideAzureGrant; + grant: SyncReconcileResponsePreparedStackExtendAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4139,21 +4171,21 @@ export type SyncReconcileResponseTargetReleaseOverrideAzure = { /** * GCP IAM condition */ -export type SyncReconcileResponseTargetReleaseOverrideConditionResource = { +export type SyncReconcileResponsePreparedStackExtendConditionResource = { expression: string; title: string; }; -export type SyncReconcileResponseTargetReleaseOverrideResourceConditionUnion = - | SyncReconcileResponseTargetReleaseOverrideConditionResource +export type SyncReconcileResponsePreparedStackExtendResourceConditionUnion = + | SyncReconcileResponsePreparedStackExtendConditionResource | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponseTargetReleaseOverrideGcpResource = { +export type SyncReconcileResponsePreparedStackExtendGcpResource = { condition?: - | SyncReconcileResponseTargetReleaseOverrideConditionResource + | SyncReconcileResponsePreparedStackExtendConditionResource | any | null | undefined; @@ -4166,21 +4198,21 @@ export type SyncReconcileResponseTargetReleaseOverrideGcpResource = { /** * GCP IAM condition */ -export type SyncReconcileResponseTargetReleaseOverrideCondition = { +export type SyncReconcileResponsePreparedStackExtendConditionStack = { expression: string; title: string; }; -export type SyncReconcileResponseTargetReleaseOverrideConditionUnion = - | SyncReconcileResponseTargetReleaseOverrideCondition +export type SyncReconcileResponsePreparedStackExtendStackConditionUnion = + | SyncReconcileResponsePreparedStackExtendConditionStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponseTargetReleaseOverrideGcpStack = { +export type SyncReconcileResponsePreparedStackExtendGcpStack = { condition?: - | SyncReconcileResponseTargetReleaseOverrideCondition + | SyncReconcileResponsePreparedStackExtendConditionStack | any | null | undefined; @@ -4193,21 +4225,21 @@ export type SyncReconcileResponseTargetReleaseOverrideGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponseTargetReleaseOverrideGcpBinding = { +export type SyncReconcileResponsePreparedStackExtendGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncReconcileResponseTargetReleaseOverrideGcpResource | undefined; + resource?: SyncReconcileResponsePreparedStackExtendGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileResponseTargetReleaseOverrideGcpStack | undefined; + stack?: SyncReconcileResponsePreparedStackExtendGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseTargetReleaseOverrideGcpGrant = { +export type SyncReconcileResponsePreparedStackExtendGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4233,11 +4265,11 @@ export type SyncReconcileResponseTargetReleaseOverrideGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileResponseTargetReleaseOverrideGcp = { +export type SyncReconcileResponsePreparedStackExtendGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponseTargetReleaseOverrideGcpBinding; + binding: SyncReconcileResponsePreparedStackExtendGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4245,7 +4277,7 @@ export type SyncReconcileResponseTargetReleaseOverrideGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponseTargetReleaseOverrideGcpGrant; + grant: SyncReconcileResponsePreparedStackExtendGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4255,28 +4287,28 @@ export type SyncReconcileResponseTargetReleaseOverrideGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileResponseTargetReleaseOverridePlatforms = { +export type SyncReconcileResponsePreparedStackExtendPlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponseTargetReleaseOverride = { +export type SyncReconcileResponsePreparedStackExtend = { /** * Human-readable description of what this permission set allows */ @@ -4288,32 +4320,40 @@ export type SyncReconcileResponseTargetReleaseOverride = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileResponseTargetReleaseOverridePlatforms; + platforms: SyncReconcileResponsePreparedStackExtendPlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponseTargetReleaseOverrideUnion = - | SyncReconcileResponseTargetReleaseOverride +export type SyncReconcileResponsePreparedStackExtendUnion = + | SyncReconcileResponsePreparedStackExtend | string; -export type SyncReconcileResponseTargetReleaseManagement2 = { +export type SyncReconcileResponsePreparedStackManagement1 = { /** * Permission profile that maps resources to permission sets * * @remarks * Key can be "*" for all resources or resource name for specific resource */ - override: { - [k: string]: Array; + extend: { + [k: string]: Array; }; }; +/** + * Management permissions configuration for stack management access + */ +export type SyncReconcileResponsePreparedStackManagementUnion = + | SyncReconcileResponsePreparedStackManagement1 + | SyncReconcileResponsePreparedStackManagement2 + | SyncReconcileResponsePreparedStackManagementEnum; + /** * AWS-specific binding specification */ -export type SyncReconcileResponseTargetReleaseExtendAwResource = { +export type SyncReconcileResponsePreparedStackProfileAwResource = { /** * Optional condition for additional filtering (rare) */ @@ -4327,7 +4367,7 @@ export type SyncReconcileResponseTargetReleaseExtendAwResource = { /** * AWS-specific binding specification */ -export type SyncReconcileResponseTargetReleaseExtendAwStack = { +export type SyncReconcileResponsePreparedStackProfileAwStack = { /** * Optional condition for additional filtering (rare) */ @@ -4341,35 +4381,35 @@ export type SyncReconcileResponseTargetReleaseExtendAwStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponseTargetReleaseExtendAwBinding = { +export type SyncReconcileResponsePreparedStackProfileAwBinding = { /** * AWS-specific binding specification */ - resource?: SyncReconcileResponseTargetReleaseExtendAwResource | undefined; + resource?: SyncReconcileResponsePreparedStackProfileAwResource | undefined; /** * AWS-specific binding specification */ - stack?: SyncReconcileResponseTargetReleaseExtendAwStack | undefined; + stack?: SyncReconcileResponsePreparedStackProfileAwStack | undefined; }; /** * IAM effect. Defaults to Allow. */ -export const SyncReconcileResponseTargetReleaseExtendEffect = { +export const SyncReconcileResponsePreparedStackProfileEffect = { Allow: "Allow", Deny: "Deny", } as const; /** * IAM effect. Defaults to Allow. */ -export type SyncReconcileResponseTargetReleaseExtendEffect = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseExtendEffect +export type SyncReconcileResponsePreparedStackProfileEffect = ClosedEnum< + typeof SyncReconcileResponsePreparedStackProfileEffect >; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseTargetReleaseExtendAwGrant = { +export type SyncReconcileResponsePreparedStackProfileAwGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4395,11 +4435,11 @@ export type SyncReconcileResponseTargetReleaseExtendAwGrant = { /** * AWS-specific platform permission configuration */ -export type SyncReconcileResponseTargetReleaseExtendAw = { +export type SyncReconcileResponsePreparedStackProfileAw = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponseTargetReleaseExtendAwBinding; + binding: SyncReconcileResponsePreparedStackProfileAwBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4407,11 +4447,11 @@ export type SyncReconcileResponseTargetReleaseExtendAw = { /** * IAM effect. Defaults to Allow. */ - effect?: SyncReconcileResponseTargetReleaseExtendEffect | undefined; + effect?: SyncReconcileResponsePreparedStackProfileEffect | undefined; /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponseTargetReleaseExtendAwGrant; + grant: SyncReconcileResponsePreparedStackProfileAwGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4421,7 +4461,7 @@ export type SyncReconcileResponseTargetReleaseExtendAw = { /** * Azure-specific binding specification */ -export type SyncReconcileResponseTargetReleaseExtendAzureResource = { +export type SyncReconcileResponsePreparedStackProfileAzureResource = { /** * Scope (subscription/resource group/resource level) */ @@ -4431,7 +4471,7 @@ export type SyncReconcileResponseTargetReleaseExtendAzureResource = { /** * Azure-specific binding specification */ -export type SyncReconcileResponseTargetReleaseExtendAzureStack = { +export type SyncReconcileResponsePreparedStackProfileAzureStack = { /** * Scope (subscription/resource group/resource level) */ @@ -4441,21 +4481,21 @@ export type SyncReconcileResponseTargetReleaseExtendAzureStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponseTargetReleaseExtendAzureBinding = { +export type SyncReconcileResponsePreparedStackProfileAzureBinding = { /** * Azure-specific binding specification */ - resource?: SyncReconcileResponseTargetReleaseExtendAzureResource | undefined; + resource?: SyncReconcileResponsePreparedStackProfileAzureResource | undefined; /** * Azure-specific binding specification */ - stack?: SyncReconcileResponseTargetReleaseExtendAzureStack | undefined; + stack?: SyncReconcileResponsePreparedStackProfileAzureStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseTargetReleaseExtendAzureGrant = { +export type SyncReconcileResponsePreparedStackProfileAzureGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4481,11 +4521,11 @@ export type SyncReconcileResponseTargetReleaseExtendAzureGrant = { /** * Azure-specific platform permission configuration */ -export type SyncReconcileResponseTargetReleaseExtendAzure = { +export type SyncReconcileResponsePreparedStackProfileAzure = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponseTargetReleaseExtendAzureBinding; + binding: SyncReconcileResponsePreparedStackProfileAzureBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4493,7 +4533,7 @@ export type SyncReconcileResponseTargetReleaseExtendAzure = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponseTargetReleaseExtendAzureGrant; + grant: SyncReconcileResponsePreparedStackProfileAzureGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4503,21 +4543,21 @@ export type SyncReconcileResponseTargetReleaseExtendAzure = { /** * GCP IAM condition */ -export type SyncReconcileResponseTargetReleaseExtendConditionResource = { +export type SyncReconcileResponsePreparedStackProfileConditionResource = { expression: string; title: string; }; -export type SyncReconcileResponseTargetReleaseExtendResourceConditionUnion = - | SyncReconcileResponseTargetReleaseExtendConditionResource +export type SyncReconcileResponsePreparedStackProfileResourceConditionUnion = + | SyncReconcileResponsePreparedStackProfileConditionResource | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponseTargetReleaseExtendGcpResource = { +export type SyncReconcileResponsePreparedStackProfileGcpResource = { condition?: - | SyncReconcileResponseTargetReleaseExtendConditionResource + | SyncReconcileResponsePreparedStackProfileConditionResource | any | null | undefined; @@ -4530,21 +4570,21 @@ export type SyncReconcileResponseTargetReleaseExtendGcpResource = { /** * GCP IAM condition */ -export type SyncReconcileResponseTargetReleaseExtendCondition = { +export type SyncReconcileResponsePreparedStackProfileConditionStack = { expression: string; title: string; }; -export type SyncReconcileResponseTargetReleaseExtendConditionUnion = - | SyncReconcileResponseTargetReleaseExtendCondition +export type SyncReconcileResponsePreparedStackProfileStackConditionUnion = + | SyncReconcileResponsePreparedStackProfileConditionStack | any; /** * GCP-specific binding specification */ -export type SyncReconcileResponseTargetReleaseExtendGcpStack = { +export type SyncReconcileResponsePreparedStackProfileGcpStack = { condition?: - | SyncReconcileResponseTargetReleaseExtendCondition + | SyncReconcileResponsePreparedStackProfileConditionStack | any | null | undefined; @@ -4557,21 +4597,21 @@ export type SyncReconcileResponseTargetReleaseExtendGcpStack = { /** * Generic binding configuration for permissions */ -export type SyncReconcileResponseTargetReleaseExtendGcpBinding = { +export type SyncReconcileResponsePreparedStackProfileGcpBinding = { /** * GCP-specific binding specification */ - resource?: SyncReconcileResponseTargetReleaseExtendGcpResource | undefined; + resource?: SyncReconcileResponsePreparedStackProfileGcpResource | undefined; /** * GCP-specific binding specification */ - stack?: SyncReconcileResponseTargetReleaseExtendGcpStack | undefined; + stack?: SyncReconcileResponsePreparedStackProfileGcpStack | undefined; }; /** * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseTargetReleaseExtendGcpGrant = { +export type SyncReconcileResponsePreparedStackProfileGcpGrant = { /** * AWS IAM actions (only for AWS) */ @@ -4597,11 +4637,11 @@ export type SyncReconcileResponseTargetReleaseExtendGcpGrant = { /** * GCP-specific platform permission configuration */ -export type SyncReconcileResponseTargetReleaseExtendGcp = { +export type SyncReconcileResponsePreparedStackProfileGcp = { /** * Generic binding configuration for permissions */ - binding: SyncReconcileResponseTargetReleaseExtendGcpBinding; + binding: SyncReconcileResponsePreparedStackProfileGcpBinding; /** * Short admin-facing description of why this entry exists. */ @@ -4609,7 +4649,7 @@ export type SyncReconcileResponseTargetReleaseExtendGcp = { /** * Grant permissions for a specific cloud platform */ - grant: SyncReconcileResponseTargetReleaseExtendGcpGrant; + grant: SyncReconcileResponsePreparedStackProfileGcpGrant; /** * Stable admin-facing label for this permission entry. */ @@ -4619,28 +4659,28 @@ export type SyncReconcileResponseTargetReleaseExtendGcp = { /** * Platform-specific permission configurations */ -export type SyncReconcileResponseTargetReleaseExtendPlatforms = { +export type SyncReconcileResponsePreparedStackProfilePlatforms = { /** * AWS permission configurations */ - aws?: Array | null | undefined; + aws?: Array | null | undefined; /** * Azure permission configurations */ azure?: - | Array + | Array | null | undefined; /** * GCP permission configurations */ - gcp?: Array | null | undefined; + gcp?: Array | null | undefined; }; /** * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponseTargetReleaseExtend = { +export type SyncReconcileResponsePreparedStackProfile = { /** * Human-readable description of what this permission set allows */ @@ -4652,417 +4692,452 @@ export type SyncReconcileResponseTargetReleaseExtend = { /** * Platform-specific permission configurations */ - platforms: SyncReconcileResponseTargetReleaseExtendPlatforms; + platforms: SyncReconcileResponsePreparedStackProfilePlatforms; }; /** * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponseTargetReleaseExtendUnion = - | SyncReconcileResponseTargetReleaseExtend +export type SyncReconcileResponsePreparedStackProfileUnion = + | SyncReconcileResponsePreparedStackProfile | string; -export type SyncReconcileResponseTargetReleaseManagement1 = { - /** - * Permission profile that maps resources to permission sets - * - * @remarks - * Key can be "*" for all resources or resource name for specific resource - */ - extend: { - [k: string]: Array; - }; -}; - -/** - * Management permissions configuration for stack management access - */ -export type SyncReconcileResponseTargetReleaseManagementUnion = - | SyncReconcileResponseTargetReleaseManagement1 - | SyncReconcileResponseTargetReleaseManagement2 - | SyncReconcileResponseTargetReleaseManagementEnum; - /** - * AWS-specific binding specification + * Combined permissions configuration that contains both profiles and management */ -export type SyncReconcileResponseTargetReleaseProfileAwResource = { +export type SyncReconcileResponsePreparedStackPermissions = { /** - * Optional condition for additional filtering (rare) + * Management permissions configuration for stack management access */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + management?: + | SyncReconcileResponsePreparedStackManagement1 + | SyncReconcileResponsePreparedStackManagement2 + | SyncReconcileResponsePreparedStackManagementEnum + | undefined; /** - * Resource ARNs to bind to + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration */ - resources: Array; + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; }; /** - * AWS-specific binding specification + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileResponseTargetReleaseProfileAwStack = { +export type SyncReconcileResponsePreparedStackConfig = { /** - * Optional condition for additional filtering (rare) + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + id: string; /** - * Resource ARNs to bind to + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - resources: Array; + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; /** - * Generic binding configuration for permissions + * Reference to a resource by its stable id and resource type. */ -export type SyncReconcileResponseTargetReleaseProfileAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: SyncReconcileResponseTargetReleaseProfileAwResource | undefined; +export type SyncReconcileResponsePreparedStackDependency = { + id: string; /** - * AWS-specific binding specification + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - stack?: SyncReconcileResponseTargetReleaseProfileAwStack | undefined; + type: string; }; /** - * IAM effect. Defaults to Allow. + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export const SyncReconcileResponseTargetReleaseProfileEffect = { - Allow: "Allow", - Deny: "Deny", +export const SyncReconcileResponsePreparedStackLifecycle = { + Frozen: "frozen", + Live: "live", } as const; /** - * IAM effect. Defaults to Allow. + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncReconcileResponseTargetReleaseProfileEffect = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseProfileEffect +export type SyncReconcileResponsePreparedStackLifecycle = ClosedEnum< + typeof SyncReconcileResponsePreparedStackLifecycle >; -/** - * Grant permissions for a specific cloud platform - */ -export type SyncReconcileResponseTargetReleaseProfileAwGrant = { +export type SyncReconcileResponsePreparedStackResources = { /** - * AWS IAM actions (only for AWS) + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - actions?: Array | null | undefined; + config: SyncReconcileResponsePreparedStackConfig; /** - * Azure actions (only for Azure) + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list */ - dataActions?: Array | null | undefined; + dependencies: Array; /** - * GCP permissions that require an exact residual custom role. + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. */ - permissions?: Array | null | undefined; + enabledWhen?: string | null | undefined; /** - * Provider predefined roles to bind directly. + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - predefinedRoles?: Array | null | undefined; + lifecycle: SyncReconcileResponsePreparedStackLifecycle; /** - * GCP residual custom permissions to pair with predefined roles. + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). */ - residualPermissions?: Array | null | undefined; + remoteAccess?: boolean | undefined; }; /** - * AWS-specific platform permission configuration + * Represents the target cloud platform. */ -export type SyncReconcileResponseTargetReleaseProfileAw = { - /** - * Generic binding configuration for permissions - */ - binding: SyncReconcileResponseTargetReleaseProfileAwBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; +export const SyncReconcileResponsePreparedStackSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncReconcileResponsePreparedStackSupportedPlatform = ClosedEnum< + typeof SyncReconcileResponsePreparedStackSupportedPlatform +>; + +/** + * A bag of resources, unaware of any cloud. + */ +export type SyncReconcileResponsePreparedStack = { /** - * IAM effect. Defaults to Allow. + * Unique identifier for the stack */ - effect?: SyncReconcileResponseTargetReleaseProfileEffect | undefined; + id: string; /** - * Grant permissions for a specific cloud platform + * Input definitions required before setup or deployment can proceed. */ - grant: SyncReconcileResponseTargetReleaseProfileAwGrant; + inputs?: Array | undefined; /** - * Stable admin-facing label for this permission entry. + * Combined permissions configuration that contains both profiles and management */ - label?: string | null | undefined; -}; - -/** - * Azure-specific binding specification - */ -export type SyncReconcileResponseTargetReleaseProfileAzureResource = { + permissions?: SyncReconcileResponsePreparedStackPermissions | undefined; /** - * Scope (subscription/resource group/resource level) + * Map of resource IDs to their configurations and lifecycle settings */ - scope: string; -}; - -/** - * Azure-specific binding specification - */ -export type SyncReconcileResponseTargetReleaseProfileAzureStack = { + resources: { [k: string]: SyncReconcileResponsePreparedStackResources }; /** - * Scope (subscription/resource group/resource level) + * Which platforms this stack supports. When None, all platforms are supported. */ - scope: string; + supportedPlatforms?: + | Array + | null + | undefined; }; +export type SyncReconcileResponsePreparedStackUnion = + | SyncReconcileResponsePreparedStack + | any; + /** - * Generic binding configuration for permissions + * One-shot authority for a setup re-import to replace setup-owned resources. */ -export type SyncReconcileResponseTargetReleaseProfileAzureBinding = { +export type SyncReconcileResponseSetupUpdateAuthorization = { /** - * Azure-specific binding specification + * Frozen resource projection from the last successful deployment. */ - resource?: SyncReconcileResponseTargetReleaseProfileAzureResource | undefined; + baselineFrozenDigest: string; /** - * Azure-specific binding specification + * Unique revision used by persistence layers for compare-and-swap updates. */ - stack?: SyncReconcileResponseTargetReleaseProfileAzureStack | undefined; -}; - -/** - * Grant permissions for a specific cloud platform - */ -export type SyncReconcileResponseTargetReleaseProfileAzureGrant = { + nonce: string; /** - * AWS IAM actions (only for AWS) + * Release whose stack was prepared by setup. */ - actions?: Array | null | undefined; + releaseId: string; /** - * Azure actions (only for Azure) + * Exact setup artifact revision that authored this authority. */ - dataActions?: Array | null | undefined; + setupFingerprint: string; /** - * GCP permissions that require an exact residual custom role. + * Setup fingerprint contract version. */ - permissions?: Array | null | undefined; + setupFingerprintVersion: number; /** - * Provider predefined roles to bind directly. + * Stable setup target recorded on the imported deployment. */ - predefinedRoles?: Array | null | undefined; + setupTarget: string; /** - * GCP residual custom permissions to pair with predefined roles. + * Frozen resource projection prepared by the setup re-import. */ - residualPermissions?: Array | null | undefined; + targetFrozenDigest: string; }; +export type SyncReconcileResponseSetupUpdateAuthorizationUnion = + | SyncReconcileResponseSetupUpdateAuthorization + | any; + /** - * Azure-specific platform permission configuration + * Runtime metadata for deployment + * + * @remarks + * + * Stores deployment state that needs to persist across step calls. */ -export type SyncReconcileResponseTargetReleaseProfileAzure = { - /** - * Generic binding configuration for permissions - */ - binding: SyncReconcileResponseTargetReleaseProfileAzureBinding; +export type SyncReconcileResponseRuntimeMetadata = { /** - * Short admin-facing description of why this entry exists. + * Hash of the environment variables snapshot that was last synced to the vault + * + * @remarks + * Used to avoid redundant sync operations during incremental deployment */ - description?: string | null | undefined; + lastSyncedEnvVarsHash?: string | null | undefined; /** - * Grant permissions for a specific cloud platform + * Exact vault keys owned by the deployment secret synchronizer. This + * + * @remarks + * inventory lets a later snapshot delete removed keys without listing or + * touching unrelated values in the same vault. */ - grant: SyncReconcileResponseTargetReleaseProfileAzureGrant; + lastSyncedSecretNames?: Array | undefined; + pendingPreparedStack?: + | SyncReconcileResponsePendingPreparedStack + | any + | null + | undefined; + preparedStack?: SyncReconcileResponsePreparedStack | any | null | undefined; /** - * Stable admin-facing label for this permission entry. + * Whether cross-account registry access has been successfully granted. + * + * @remarks + * Set to true after the manager successfully sets the ECR/GAR repo policy + * for this deployment's target account. Prevents redundant API calls on + * every reconcile tick. */ - label?: string | null | undefined; + registryAccessGranted?: boolean | undefined; + setupUpdateAuthorization?: + | SyncReconcileResponseSetupUpdateAuthorization + | any + | null + | undefined; }; +export type SyncReconcileResponseRuntimeMetadataUnion = + | SyncReconcileResponseRuntimeMetadata + | any; + /** - * GCP IAM condition + * Represents the target cloud platform. */ -export type SyncReconcileResponseTargetReleaseProfileConditionResource = { - expression: string; - title: string; -}; - -export type SyncReconcileResponseTargetReleaseProfileResourceConditionUnion = - | SyncReconcileResponseTargetReleaseProfileConditionResource - | any; +export const SyncReconcileResponseStackStatePlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncReconcileResponseStackStatePlatform = ClosedEnum< + typeof SyncReconcileResponseStackStatePlatform +>; /** - * GCP-specific binding specification + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileResponseTargetReleaseProfileGcpResource = { - condition?: - | SyncReconcileResponseTargetReleaseProfileConditionResource - | any - | null - | undefined; +export type SyncReconcileResponseStackStateConfig = { /** - * Scope (project/resource level) + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ - scope: string; + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; /** - * GCP IAM condition + * Represents the target cloud platform. */ -export type SyncReconcileResponseTargetReleaseProfileCondition = { - expression: string; - title: string; -}; +export const SyncReconcileResponseControllerPlatformEnum = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type SyncReconcileResponseControllerPlatformEnum = ClosedEnum< + typeof SyncReconcileResponseControllerPlatformEnum +>; -export type SyncReconcileResponseTargetReleaseProfileConditionUnion = - | SyncReconcileResponseTargetReleaseProfileCondition +export type SyncReconcileResponseControllerPlatformUnion = + | SyncReconcileResponseControllerPlatformEnum | any; /** - * GCP-specific binding specification + * Reference to a resource by its stable id and resource type. */ -export type SyncReconcileResponseTargetReleaseProfileGcpStack = { - condition?: - | SyncReconcileResponseTargetReleaseProfileCondition - | any - | null - | undefined; +export type SyncReconcileResponseStackStateDependency = { + id: string; /** - * Scope (project/resource level) + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - scope: string; + type: string; }; /** - * Generic binding configuration for permissions + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. */ -export type SyncReconcileResponseTargetReleaseProfileGcpBinding = { +export type SyncReconcileResponseStackStateError = { /** - * GCP-specific binding specification + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" */ - resource?: SyncReconcileResponseTargetReleaseProfileGcpResource | undefined; + code: string; /** - * GCP-specific binding specification + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. */ - stack?: SyncReconcileResponseTargetReleaseProfileGcpStack | undefined; -}; - -/** - * Grant permissions for a specific cloud platform - */ -export type SyncReconcileResponseTargetReleaseProfileGcpGrant = { + context?: any | null | undefined; /** - * AWS IAM actions (only for AWS) + * Optional human-facing remediation hint. */ - actions?: Array | null | undefined; + hint?: string | null | undefined; /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. */ - residualPermissions?: Array | null | undefined; -}; - -/** - * GCP-specific platform permission configuration - */ -export type SyncReconcileResponseTargetReleaseProfileGcp = { + httpStatusCode?: number | null | undefined; /** - * Generic binding configuration for permissions + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. */ - binding: SyncReconcileResponseTargetReleaseProfileGcpBinding; + internal: boolean; /** - * Short admin-facing description of why this entry exists. + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. */ - description?: string | null | undefined; + message: string; /** - * Grant permissions for a specific cloud platform + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. */ - grant: SyncReconcileResponseTargetReleaseProfileGcpGrant; + retryable: boolean; /** - * Stable admin-facing label for this permission entry. + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. */ - label?: string | null | undefined; + source?: any | null | undefined; }; -/** - * Platform-specific permission configurations - */ -export type SyncReconcileResponseTargetReleaseProfilePlatforms = { - /** - * AWS permission configurations - */ - aws?: Array | null | undefined; - /** - * Azure permission configurations - */ - azure?: - | Array - | null - | undefined; - /** - * GCP permission configurations - */ - gcp?: Array | null | undefined; -}; +export type SyncReconcileResponseStackStateErrorUnion = + | SyncReconcileResponseStackStateError + | any; /** - * A permission set that can be applied across different cloud platforms + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncReconcileResponseTargetReleaseProfile = { - /** - * Human-readable description of what this permission set allows - */ - description: string; - /** - * Unique identifier for the permission set (e.g., "storage/data-read") - */ - id: string; - /** - * Platform-specific permission configurations - */ - platforms: SyncReconcileResponseTargetReleaseProfilePlatforms; -}; - +export const SyncReconcileResponseStackStateLifecycleEnum = { + Frozen: "frozen", + Live: "live", +} as const; /** - * Reference to a permission set - either by name or inline definition + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncReconcileResponseTargetReleaseProfileUnion = - | SyncReconcileResponseTargetReleaseProfile - | string; +export type SyncReconcileResponseStackStateLifecycleEnum = ClosedEnum< + typeof SyncReconcileResponseStackStateLifecycleEnum +>; + +export type SyncReconcileResponseLifecycleUnion = + | SyncReconcileResponseStackStateLifecycleEnum + | any; /** - * Combined permissions configuration that contains both profiles and management + * Resource outputs that can hold output data for any resource type in the Alien system. All resource outputs share a common 'type' field with additional type-specific output properties. */ -export type SyncReconcileResponseTargetReleasePermissions = { - /** - * Management permissions configuration for stack management access - */ - management?: - | SyncReconcileResponseTargetReleaseManagement1 - | SyncReconcileResponseTargetReleaseManagement2 - | SyncReconcileResponseTargetReleaseManagementEnum - | undefined; +export type SyncReconcileResponseOutputs = { /** - * Permission profiles that define access control for compute services - * - * @remarks - * Key is the profile name, value is the permission configuration + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - profiles: { - [k: string]: { - [k: string]: Array; - }; - }; + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; +export type SyncReconcileResponseOutputsUnion = + | SyncReconcileResponseOutputs + | any; + /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileResponseTargetReleaseConfig = { +export type SyncReconcileResponsePreviousConfig = { /** * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ @@ -5074,198 +5149,288 @@ export type SyncReconcileResponseTargetReleaseConfig = { additionalProperties?: { [k: string]: any | null } | undefined; }; -/** - * Reference to a resource by its stable id and resource type. - */ -export type SyncReconcileResponseTargetReleaseDependency = { - id: string; - /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. - */ - type: string; -}; +export type SyncReconcileResponsePreviousConfigUnion = + | SyncReconcileResponsePreviousConfig + | any; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Represents the high-level status of a resource during its lifecycle. */ -export const SyncReconcileResponseTargetReleaseLifecycle = { - Frozen: "frozen", - Live: "live", +export const SyncReconcileResponseStackStateStatus = { + Pending: "pending", + Provisioning: "provisioning", + ProvisionFailed: "provision-failed", + Running: "running", + Updating: "updating", + UpdateFailed: "update-failed", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + Deleted: "deleted", + RefreshFailed: "refresh-failed", } as const; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Represents the high-level status of a resource during its lifecycle. */ -export type SyncReconcileResponseTargetReleaseLifecycle = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseLifecycle +export type SyncReconcileResponseStackStateStatus = ClosedEnum< + typeof SyncReconcileResponseStackStateStatus >; -export type SyncReconcileResponseTargetReleaseResources = { +/** + * Represents the state of a single resource within the stack for a specific platform. + */ +export type SyncReconcileResponseStackStateResources = { + /** + * The platform-specific resource controller that manages this resource's lifecycle. + * + * @remarks + * This is None when the resource status is Pending. + * Stored as JSON to make the struct serializable and movable to alien-core. + */ + internal?: any | null | undefined; /** * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - config: SyncReconcileResponseTargetReleaseConfig; + config: SyncReconcileResponseStackStateConfig; + controllerPlatform?: + | SyncReconcileResponseControllerPlatformEnum + | any + | null + | undefined; /** - * Additional dependencies for this resource beyond those defined in the resource itself. + * Complete list of dependencies for this resource, including infrastructure dependencies. * * @remarks - * The total dependencies are: resource.get_dependencies() + this list + * This preserves the full dependency information from the stack definition. */ - dependencies: Array; + dependencies?: Array | undefined; + error?: SyncReconcileResponseStackStateError | any | null | undefined; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Stores the controller state that failed, used for manual retry operations. + * + * @remarks + * This allows resuming from the exact point where the failure occurred. + * Stored as JSON to make the struct serializable and movable to alien-core. */ - lifecycle: SyncReconcileResponseTargetReleaseLifecycle; + lastFailedState?: any | null | undefined; + lifecycle?: + | SyncReconcileResponseStackStateLifecycleEnum + | any + | null + | undefined; + outputs?: SyncReconcileResponseOutputs | any | null | undefined; + previousConfig?: SyncReconcileResponsePreviousConfig | any | null | undefined; /** - * Enable remote bindings for this resource (BYOB use case). + * Binding parameters for remote access. * * @remarks - * When true, binding params are synced to StackState's `remote_binding_params`. - * Default: false (prevents sensitive data in synced state). + * Only populated when the resource has `remote_access: true` in its ResourceEntry. + * This is the JSON serialization of the binding configuration (e.g., StorageBinding, VaultBinding). + * Populated by controllers during provisioning using get_binding_params(). */ - remoteAccess?: boolean | undefined; + remoteBindingParams?: any | null | undefined; + /** + * Tracks consecutive retry attempts for the current state transition. + */ + retryAttempt?: number | undefined; + /** + * Represents the high-level status of a resource during its lifecycle. + */ + status: SyncReconcileResponseStackStateStatus; + /** + * The high-level type of the resource (e.g., Worker::RESOURCE_TYPE, Storage::RESOURCE_TYPE). + */ + type: string; }; /** - * Represents the target cloud platform. + * Represents the collective state of all resources in a stack, including platform and pending actions. */ -export const SyncReconcileResponseTargetReleaseSupportedPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type SyncReconcileResponseTargetReleaseSupportedPlatform = ClosedEnum< - typeof SyncReconcileResponseTargetReleaseSupportedPlatform ->; - -/** - * A bag of resources, unaware of any cloud. - */ -export type SyncReconcileResponseTargetReleaseStack = { - /** - * Unique identifier for the stack - */ - id: string; - /** - * Input definitions required before setup or deployment can proceed. - */ - inputs?: Array | undefined; +export type SyncReconcileResponseStackState = { /** - * Combined permissions configuration that contains both profiles and management + * Represents the target cloud platform. */ - permissions?: SyncReconcileResponseTargetReleasePermissions | undefined; + platform: SyncReconcileResponseStackStatePlatform; /** - * Map of resource IDs to their configurations and lifecycle settings + * A prefix used for resource naming to ensure uniqueness across deployments. */ - resources: { [k: string]: SyncReconcileResponseTargetReleaseResources }; + resourcePrefix: string; /** - * Which platforms this stack supports. When None, all platforms are supported. + * The state of individual resources, keyed by resource ID. */ - supportedPlatforms?: - | Array - | null - | undefined; + resources: { [k: string]: SyncReconcileResponseStackStateResources }; }; +export type SyncReconcileResponseStackStateUnion = + | SyncReconcileResponseStackState + | any; + /** - * Release metadata + * Deployment status in the deployment lifecycle. * * @remarks * - * Identifies a specific release version and includes the stack definition. - * The deployment engine uses this to track which release is currently deployed - * and which is the target. + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. */ -export type SyncReconcileResponseTargetRelease = { +export const SyncReconcileResponseStatus = { + Pending: "pending", + PreflightsFailed: "preflights-failed", + InitialSetup: "initial-setup", + InitialSetupFailed: "initial-setup-failed", + Provisioning: "provisioning", + WaitingForMachines: "waiting-for-machines", + ProvisioningFailed: "provisioning-failed", + Running: "running", + RefreshFailed: "refresh-failed", + UpdatePending: "update-pending", + Updating: "updating", + UpdateFailed: "update-failed", + DeletePending: "delete-pending", + Deleting: "deleting", + DeleteFailed: "delete-failed", + TeardownRequired: "teardown-required", + TeardownFailed: "teardown-failed", + Deleted: "deleted", + Error: "error", +} as const; +/** + * Deployment status in the deployment lifecycle. + * + * @remarks + * + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. + */ +export type SyncReconcileResponseStatus = ClosedEnum< + typeof SyncReconcileResponseStatus +>; + +export const SyncReconcileResponseTargetReleaseTypeStringList = { + StringList: "stringList", +} as const; +export type SyncReconcileResponseTargetReleaseTypeStringList = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseTypeStringList +>; + +export type SyncReconcileResponseTargetReleaseDefaultStringList = { + type: SyncReconcileResponseTargetReleaseTypeStringList; /** - * Short description of the release + * String list default. */ - description?: string | null | undefined; + value: Array; +}; + +export const SyncReconcileResponseTargetReleaseTypeBoolean = { + Boolean: "boolean", +} as const; +export type SyncReconcileResponseTargetReleaseTypeBoolean = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseTypeBoolean +>; + +export type SyncReconcileResponseTargetReleaseDefaultBoolean = { + type: SyncReconcileResponseTargetReleaseTypeBoolean; /** - * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no - * - * @remarks - * Alien-assigned release — the platform resolves a release from `version`. + * Boolean default. */ - releaseId?: string | null | undefined; + value: boolean; +}; + +export const SyncReconcileResponseTargetReleaseTypeNumber = { + Number: "number", +} as const; +export type SyncReconcileResponseTargetReleaseTypeNumber = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseTypeNumber +>; + +export type SyncReconcileResponseTargetReleaseDefaultNumber = { + type: SyncReconcileResponseTargetReleaseTypeNumber; /** - * A bag of resources, unaware of any cloud. + * Number default. */ - stack: SyncReconcileResponseTargetReleaseStack; + value: string; +}; + +export const SyncReconcileResponseTargetReleaseTypeString = { + String: "string", +} as const; +export type SyncReconcileResponseTargetReleaseTypeString = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseTypeString +>; + +export type SyncReconcileResponseTargetReleaseDefaultString = { + type: SyncReconcileResponseTargetReleaseTypeString; /** - * Version string (e.g., 2.1.0) + * String default. */ - version?: string | null | undefined; + value: string; }; -export type SyncReconcileResponseTargetReleaseUnion = - | SyncReconcileResponseTargetRelease +export type SyncReconcileResponseTargetReleaseDefaultUnion = + | SyncReconcileResponseTargetReleaseDefaultString + | SyncReconcileResponseTargetReleaseDefaultNumber + | SyncReconcileResponseTargetReleaseDefaultBoolean + | SyncReconcileResponseTargetReleaseDefaultStringList | any; /** - * Current deployment state after reconciliation + * Environment variable handling for a stack input mapping. */ -export type SyncReconcileResponseCurrent = { - currentRelease?: SyncReconcileResponseCurrentRelease | any | null | undefined; - environmentInfo?: - | SyncReconcileResponseEnvironmentInfoGcp - | SyncReconcileResponseEnvironmentInfoAzure - | SyncReconcileResponseEnvironmentInfoLocal - | SyncReconcileResponseEnvironmentInfoAws - | SyncReconcileResponseEnvironmentInfoTest - | any - | null - | undefined; - error?: SyncReconcileResponseError | any | null | undefined; - /** - * Represents the target cloud platform. - */ - platform: SyncReconcileResponseCurrentPlatform; - /** - * Protocol version for cross-actor compatibility. - * - * @remarks - * All actors (manager, push client, agent) check this before stepping. - * Mismatched versions produce a clear error instead of silent corruption. - * See docs/02-manager/10-deployment-protocol.md. - */ - protocolVersion: number; +export const SyncReconcileResponseTargetReleaseTypeEnvEnum = { + Plain: "plain", + Secret: "secret", +} as const; +/** + * Environment variable handling for a stack input mapping. + */ +export type SyncReconcileResponseTargetReleaseTypeEnvEnum = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseTypeEnvEnum +>; + +export type SyncReconcileResponseTargetReleaseTypeUnion = + | SyncReconcileResponseTargetReleaseTypeEnvEnum + | any; + +/** + * How a resolved stack input is injected into runtime environment variables. + */ +export type SyncReconcileResponseTargetReleaseEnv = { /** - * Whether a retry has been requested for a failed deployment - * - * @remarks - * When true and status is a failed state, the deployment system will retry failed resources + * Environment variable name. */ - retryRequested?: boolean | undefined; - runtimeMetadata?: - | SyncReconcileResponseRuntimeMetadata - | any - | null - | undefined; - stackState?: SyncReconcileResponseStackState | any | null | undefined; + name: string; /** - * Deployment status in the deployment lifecycle. - * - * @remarks - * - * For observe-only deployments with no release or stack state, `Running` - * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; - * resource health comes from inventory and resource heartbeat data. + * Target resource IDs or patterns. None means every env-capable resource. */ - status: SyncReconcileResponseStatus; - targetRelease?: SyncReconcileResponseTargetRelease | any | null | undefined; + targetResources?: Array | null | undefined; + type?: SyncReconcileResponseTargetReleaseTypeEnvEnum | any | null | undefined; }; +/** + * Primitive stack input kind. + */ +export const SyncReconcileResponseTargetReleaseKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; +/** + * Primitive stack input kind. + */ +export type SyncReconcileResponseTargetReleaseKind = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseKind +>; + /** * Represents the target cloud platform. */ -export const SyncReconcileResponseBasePlatformEnum = { +export const SyncReconcileResponseTargetReleasePlatform = { Aws: "aws", Gcp: "gcp", Azure: "azure", @@ -5277,2009 +5442,2054 @@ export const SyncReconcileResponseBasePlatformEnum = { /** * Represents the target cloud platform. */ -export type SyncReconcileResponseBasePlatformEnum = ClosedEnum< - typeof SyncReconcileResponseBasePlatformEnum +export type SyncReconcileResponseTargetReleasePlatform = ClosedEnum< + typeof SyncReconcileResponseTargetReleasePlatform >; -export type SyncReconcileResponseBasePlatformUnion = - | SyncReconcileResponseBasePlatformEnum - | any; - /** - * Configuration for a single container worker cluster. - * - * @remarks - * - * Contains the cluster ID and management token needed to interact with - * the managed container control plane API for container operations. + * Who can provide a stack input value. */ -export type SyncReconcileResponseClusters = { +export const SyncReconcileResponseTargetReleaseProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type SyncReconcileResponseTargetReleaseProvidedBy = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseProvidedBy +>; + +/** + * Portable stack input validation constraints. + */ +export type SyncReconcileResponseTargetReleaseValidation = { /** - * Cluster ID (deterministic: workspace/project/deployment/resourceid) + * Semantic format hint such as url. */ - clusterId: string; + format?: string | null | undefined; /** - * Management token for API access (hm_...) - * - * @remarks - * Used by alien-deployment controllers to create/update containers + * Maximum number. */ - managementToken: string; -}; - -/** - * AWS Horizon machine image catalog. - */ -export type SyncReconcileResponseHorizonMachineImageAws = { + max?: string | null | undefined; /** - * AMI IDs by architecture, then AWS region. + * Maximum string-list items. */ - amis: { [k: string]: { [k: string]: string } }; + maxItems?: number | null | undefined; + /** + * Maximum string length. + */ + maxLength?: number | null | undefined; + /** + * Minimum number. + */ + min?: string | null | undefined; + /** + * Minimum string-list items. + */ + minItems?: number | null | undefined; + /** + * Minimum string length. + */ + minLength?: number | null | undefined; + /** + * Portable whole-value regex pattern. + */ + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; -export type SyncReconcileResponseHorizonMachineImageAwsUnion = - | SyncReconcileResponseHorizonMachineImageAws +export type SyncReconcileResponseTargetReleaseValidationUnion = + | SyncReconcileResponseTargetReleaseValidation | any; /** - * Azure Horizon machine image entry. + * Stack input definition serialized into a release stack. */ -export type SyncReconcileResponseAzureImages = { +export type SyncReconcileResponseTargetReleaseInput = { + default?: + | SyncReconcileResponseTargetReleaseDefaultString + | SyncReconcileResponseTargetReleaseDefaultNumber + | SyncReconcileResponseTargetReleaseDefaultBoolean + | SyncReconcileResponseTargetReleaseDefaultStringList + | any + | null + | undefined; /** - * Azure Compute Gallery image version ID. + * Human-facing helper text. */ - imageVersionId: string; -}; - -/** - * Azure Horizon machine image catalog. - */ -export type HorizonMachineImageAzureTarget = { + description: string; /** - * Images by architecture. + * Runtime env-var mappings for v1 input resolution. */ - images: { [k: string]: SyncReconcileResponseAzureImages }; + env?: Array | undefined; + /** + * Stable input ID used by CLI/API calls. + */ + id: string; + /** + * Primitive stack input kind. + */ + kind: SyncReconcileResponseTargetReleaseKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: + | Array + | null + | undefined; + /** + * Who can provide this value. + */ + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: + | SyncReconcileResponseTargetReleaseValidation + | any + | null + | undefined; }; -export type HorizonMachineImageTargetAzureUnion = - | HorizonMachineImageAzureTarget - | any; +export const SyncReconcileResponseTargetReleaseManagementEnum = { + Auto: "auto", +} as const; +export type SyncReconcileResponseTargetReleaseManagementEnum = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseManagementEnum +>; /** - * Base image metadata for the Horizon machine image. + * AWS-specific binding specification */ -export type SyncReconcileResponseBaseImage = { +export type SyncReconcileResponseTargetReleaseOverrideAwResource = { /** - * Base OS image name. + * Optional condition for additional filtering (rare) */ - name: string; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * Base OS image version or channel. + * Resource ARNs to bind to */ - version: string; + resources: Array; }; /** - * GCP Horizon machine image entry. + * AWS-specific binding specification */ -export type SyncReconcileResponseGcpImages = { +export type SyncReconcileResponseTargetReleaseOverrideAwStack = { /** - * Source image self link or image-family URL. + * Optional condition for additional filtering (rare) */ - sourceImage: string; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * GCP Horizon machine image catalog. + * Generic binding configuration for permissions */ -export type HorizonMachineImageGcpTarget = { +export type SyncReconcileResponseTargetReleaseOverrideAwBinding = { /** - * Images by architecture. + * AWS-specific binding specification */ - images: { [k: string]: SyncReconcileResponseGcpImages }; + resource?: SyncReconcileResponseTargetReleaseOverrideAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseOverrideAwStack | undefined; }; -export type HorizonMachineImageTargetGcpUnion = - | HorizonMachineImageGcpTarget - | any; +/** + * IAM effect. Defaults to Allow. + */ +export const SyncReconcileResponseTargetReleaseOverrideEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncReconcileResponseTargetReleaseOverrideEffect = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseOverrideEffect +>; /** - * Download artifact for one horizond release platform. + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseHorizondArtifacts = { +export type SyncReconcileResponseTargetReleaseOverrideAwGrant = { /** - * SHA-256 digest for the artifact payload. + * AWS IAM actions (only for AWS) */ - sha256: string; + actions?: Array | null | undefined; /** - * HTTPS URL for the artifact. + * Azure actions (only for Azure) */ - url: string; -}; - -/** - * Horizon machine image catalog. - * - * @remarks - * - * Platform resolves concrete provider images from this catalog during rollout. - */ -export type SyncReconcileResponseHorizonMachineImage = { - aws?: SyncReconcileResponseHorizonMachineImageAws | any | null | undefined; - azure?: HorizonMachineImageAzureTarget | any | null | undefined; + dataActions?: Array | null | undefined; /** - * Base image metadata for the Horizon machine image. + * GCP permissions that require an exact residual custom role. */ - baseImage: SyncReconcileResponseBaseImage; + permissions?: Array | null | undefined; /** - * Logical image channel, such as prod, staging, or canary. + * Provider predefined roles to bind directly. */ - channel: string; + predefinedRoles?: Array | null | undefined; /** - * Image manifest creation timestamp. + * GCP residual custom permissions to pair with predefined roles. */ - createdAt: string; - gcp?: HorizonMachineImageGcpTarget | any | null | undefined; + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type SyncReconcileResponseTargetReleaseOverrideAw = { /** - * Git commit SHA used to build the image. + * Generic binding configuration for permissions */ - gitSha: string; + binding: SyncReconcileResponseTargetReleaseOverrideAwBinding; /** - * Per-architecture horizond artifacts by release-platform key. + * Short admin-facing description of why this entry exists. */ - horizondArtifacts: { [k: string]: SyncReconcileResponseHorizondArtifacts }; + description?: string | null | undefined; /** - * horizond daemon version baked into the image. + * IAM effect. Defaults to Allow. */ - horizondVersion: string; + effect?: SyncReconcileResponseTargetReleaseOverrideEffect | undefined; /** - * Published immutable machine image version. + * Grant permissions for a specific cloud platform */ - machineImageVersion: string; + grant: SyncReconcileResponseTargetReleaseOverrideAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; -export type SyncReconcileResponseHorizonMachineImageUnion = - | SyncReconcileResponseHorizonMachineImage - | any; - -export const ComputeBackendTargetType = { - Horizon: "horizon", -} as const; -export type ComputeBackendTargetType = ClosedEnum< - typeof ComputeBackendTargetType ->; - /** - * Compute backend for Container and Worker resources. - * - * @remarks - * - * Determines how compute workloads are orchestrated on cloud platforms. - * When None, the platform default is used for cloud platforms. + * Azure-specific binding specification */ -export type SyncReconcileResponseComputeBackendHorizon = { - /** - * Cluster configurations (one per ComputeCluster resource) - * - * @remarks - * Key: ComputeCluster resource ID from stack - * Value: Cluster ID and management token for that cluster - */ - clusters: { [k: string]: SyncReconcileResponseClusters }; - horizonMachineImage?: - | SyncReconcileResponseHorizonMachineImage - | any - | null - | undefined; +export type SyncReconcileResponseTargetReleaseOverrideAzureResource = { /** - * Horizon control-plane API base URL. + * Scope (subscription/resource group/resource level) */ - url: string; - type: ComputeBackendTargetType; + scope: string; }; -export type SyncReconcileResponseComputeBackendUnion = - | SyncReconcileResponseComputeBackendHorizon - | any; - -/** - * Certificate status in the certificate lifecycle - */ -export const SyncReconcileResponseAliasCertificateStatus = { - Pending: "pending", - Issued: "issued", - Renewing: "renewing", - RenewalFailed: "renewal-failed", - Failed: "failed", - Deleting: "deleting", -} as const; /** - * Certificate status in the certificate lifecycle + * Azure-specific binding specification */ -export type SyncReconcileResponseAliasCertificateStatus = ClosedEnum< - typeof SyncReconcileResponseAliasCertificateStatus ->; +export type SyncReconcileResponseTargetReleaseOverrideAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; /** - * DNS record status in the DNS lifecycle - */ -export const SyncReconcileResponseAliasDnsStatus = { - Pending: "pending", - Active: "active", - Updating: "updating", - Deleting: "deleting", - Failed: "failed", -} as const; -/** - * DNS record status in the DNS lifecycle + * Generic binding configuration for permissions */ -export type SyncReconcileResponseAliasDnsStatus = ClosedEnum< - typeof SyncReconcileResponseAliasDnsStatus ->; +export type SyncReconcileResponseTargetReleaseOverrideAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: + | SyncReconcileResponseTargetReleaseOverrideAzureResource + | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseOverrideAzureStack | undefined; +}; /** - * Certificate and DNS metadata for a managed hostname. - * - * @remarks - * - * Includes decrypted certificate data for issued certificates. - * Private keys are deployment-scoped secrets (like environment variables). + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseAlias = { +export type SyncReconcileResponseTargetReleaseOverrideAzureGrant = { /** - * Full PEM certificate chain (only present if status is "issued"). + * AWS IAM actions (only for AWS) */ - certificateChain?: string | null | undefined; + actions?: Array | null | undefined; /** - * Certificate ID (for tracking/logging). + * Azure actions (only for Azure) */ - certificateId: string; + dataActions?: Array | null | undefined; /** - * Certificate status in the certificate lifecycle + * GCP permissions that require an exact residual custom role. */ - certificateStatus: SyncReconcileResponseAliasCertificateStatus; + permissions?: Array | null | undefined; /** - * Last DNS error message. Present when DNS previously failed, even if status - * - * @remarks - * was reset to pending for retry. Used to surface actionable error context - * in WaitingForDns failure messages. + * Provider predefined roles to bind directly. */ - dnsError?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * DNS record status in the DNS lifecycle + * GCP residual custom permissions to pair with predefined roles. */ - dnsStatus: SyncReconcileResponseAliasDnsStatus; + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type SyncReconcileResponseTargetReleaseOverrideAzure = { /** - * Fully qualified domain name. + * Generic binding configuration for permissions */ - fqdn: string; + binding: SyncReconcileResponseTargetReleaseOverrideAzureBinding; /** - * ISO 8601 timestamp when certificate was issued (for renewal detection). + * Short admin-facing description of why this entry exists. */ - issuedAt?: string | null | undefined; + description?: string | null | undefined; /** - * Decrypted private key (only present if status is "issued"). + * Grant permissions for a specific cloud platform */ - privateKey?: string | null | undefined; + grant: SyncReconcileResponseTargetReleaseOverrideAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Certificate status in the certificate lifecycle - */ -export const SyncReconcileResponseCertificateStatus = { - Pending: "pending", - Issued: "issued", - Renewing: "renewing", - RenewalFailed: "renewal-failed", - Failed: "failed", - Deleting: "deleting", -} as const; -/** - * Certificate status in the certificate lifecycle + * GCP IAM condition */ -export type SyncReconcileResponseCertificateStatus = ClosedEnum< - typeof SyncReconcileResponseCertificateStatus ->; +export type SyncReconcileResponseTargetReleaseOverrideConditionResource = { + expression: string; + title: string; +}; -/** - * DNS record status in the DNS lifecycle - */ -export const SyncReconcileResponseDnsStatus = { - Pending: "pending", - Active: "active", - Updating: "updating", - Deleting: "deleting", - Failed: "failed", -} as const; -/** - * DNS record status in the DNS lifecycle - */ -export type SyncReconcileResponseDnsStatus = ClosedEnum< - typeof SyncReconcileResponseDnsStatus ->; +export type SyncReconcileResponseTargetReleaseOverrideResourceConditionUnion = + | SyncReconcileResponseTargetReleaseOverrideConditionResource + | any; /** - * Certificate status in the certificate lifecycle - */ -export const SyncReconcileResponseEndpointsCertificateStatus = { - Pending: "pending", - Issued: "issued", - Renewing: "renewing", - RenewalFailed: "renewal-failed", - Failed: "failed", - Deleting: "deleting", -} as const; -/** - * Certificate status in the certificate lifecycle + * GCP-specific binding specification */ -export type SyncReconcileResponseEndpointsCertificateStatus = ClosedEnum< - typeof SyncReconcileResponseEndpointsCertificateStatus ->; +export type SyncReconcileResponseTargetReleaseOverrideGcpResource = { + condition?: + | SyncReconcileResponseTargetReleaseOverrideConditionResource + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; /** - * DNS record status in the DNS lifecycle + * GCP IAM condition */ -export const SyncReconcileResponseEndpointsDnsStatus = { - Pending: "pending", - Active: "active", - Updating: "updating", - Deleting: "deleting", - Failed: "failed", -} as const; +export type SyncReconcileResponseTargetReleaseOverrideCondition = { + expression: string; + title: string; +}; + +export type SyncReconcileResponseTargetReleaseOverrideConditionUnion = + | SyncReconcileResponseTargetReleaseOverrideCondition + | any; + /** - * DNS record status in the DNS lifecycle + * GCP-specific binding specification */ -export type SyncReconcileResponseEndpointsDnsStatus = ClosedEnum< - typeof SyncReconcileResponseEndpointsDnsStatus ->; +export type SyncReconcileResponseTargetReleaseOverrideGcpStack = { + condition?: + | SyncReconcileResponseTargetReleaseOverrideCondition + | any + | null + | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; /** - * Certificate and DNS metadata for a managed hostname. - * - * @remarks - * - * Includes decrypted certificate data for issued certificates. - * Private keys are deployment-scoped secrets (like environment variables). + * Generic binding configuration for permissions */ -export type SyncReconcileResponseEndpoints = { +export type SyncReconcileResponseTargetReleaseOverrideGcpBinding = { /** - * Full PEM certificate chain (only present if status is "issued"). - */ - certificateChain?: string | null | undefined; - /** - * Certificate ID (for tracking/logging). + * GCP-specific binding specification */ - certificateId: string; + resource?: SyncReconcileResponseTargetReleaseOverrideGcpResource | undefined; /** - * Certificate status in the certificate lifecycle + * GCP-specific binding specification */ - certificateStatus: SyncReconcileResponseEndpointsCertificateStatus; + stack?: SyncReconcileResponseTargetReleaseOverrideGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileResponseTargetReleaseOverrideGcpGrant = { /** - * Last DNS error message. Present when DNS previously failed, even if status - * - * @remarks - * was reset to pending for retry. Used to surface actionable error context - * in WaitingForDns failure messages. + * AWS IAM actions (only for AWS) */ - dnsError?: string | null | undefined; + actions?: Array | null | undefined; /** - * DNS record status in the DNS lifecycle + * Azure actions (only for Azure) */ - dnsStatus: SyncReconcileResponseEndpointsDnsStatus; + dataActions?: Array | null | undefined; /** - * Fully qualified domain name. + * GCP permissions that require an exact residual custom role. */ - fqdn: string; + permissions?: Array | null | undefined; /** - * ISO 8601 timestamp when certificate was issued (for renewal detection). + * Provider predefined roles to bind directly. */ - issuedAt?: string | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Decrypted private key (only present if status is "issued"). + * GCP residual custom permissions to pair with predefined roles. */ - privateKey?: string | null | undefined; + residualPermissions?: Array | null | undefined; }; /** - * Certificate and DNS metadata for a public resource. - * - * @remarks - * - * The direct fields describe the primary endpoint hostname. `endpoints` - * contains endpoint-scoped metadata keyed by endpoint name. `aliases` contains - * additional managed hostnames that route directly to the primary endpoint. + * GCP-specific platform permission configuration */ -export type DomainMetadataTargetResources = { +export type SyncReconcileResponseTargetReleaseOverrideGcp = { /** - * Additional managed hostnames for the resource. + * Generic binding configuration for permissions */ - aliases?: Array | undefined; + binding: SyncReconcileResponseTargetReleaseOverrideGcpBinding; /** - * Full PEM certificate chain (only present if status is "issued"). + * Short admin-facing description of why this entry exists. */ - certificateChain?: string | null | undefined; + description?: string | null | undefined; /** - * Certificate ID (for tracking/logging). + * Grant permissions for a specific cloud platform */ - certificateId: string; + grant: SyncReconcileResponseTargetReleaseOverrideGcpGrant; /** - * Certificate status in the certificate lifecycle + * Stable admin-facing label for this permission entry. */ - certificateStatus: SyncReconcileResponseCertificateStatus; + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type SyncReconcileResponseTargetReleaseOverridePlatforms = { /** - * Last DNS error message. + * AWS permission configurations */ - dnsError?: string | null | undefined; + aws?: Array | null | undefined; /** - * DNS record status in the DNS lifecycle + * Azure permission configurations */ - dnsStatus: SyncReconcileResponseDnsStatus; + azure?: + | Array + | null + | undefined; /** - * Endpoint-scoped metadata keyed by endpoint name. + * GCP permission configurations */ - endpoints?: { [k: string]: SyncReconcileResponseEndpoints } | undefined; + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type SyncReconcileResponseTargetReleaseOverride = { /** - * Fully qualified domain name. + * Human-readable description of what this permission set allows */ - fqdn: string; + description: string; /** - * ISO 8601 timestamp when certificate was issued (for renewal detection). + * Unique identifier for the permission set (e.g., "storage/data-read") */ - issuedAt?: string | null | undefined; + id: string; /** - * Decrypted private key (only present if status is "issued"). + * Platform-specific permission configurations */ - privateKey?: string | null | undefined; + platforms: SyncReconcileResponseTargetReleaseOverridePlatforms; }; /** - * Domain metadata for auto-managed public resources (no private keys). + * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponseDomainMetadata = { +export type SyncReconcileResponseTargetReleaseOverrideUnion = + | SyncReconcileResponseTargetReleaseOverride + | string; + +export type SyncReconcileResponseTargetReleaseManagement2 = { /** - * Base domain for auto-generated domains (e.g., "vpc.direct"). + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource */ - baseDomain: string; + override: { + [k: string]: Array; + }; +}; + +/** + * AWS-specific binding specification + */ +export type SyncReconcileResponseTargetReleaseExtendAwResource = { /** - * Hosted zone ID for DNS records. + * Optional condition for additional filtering (rare) */ - hostedZoneId: string; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * Deployment public subdomain (e.g., "k8f2j3"). + * Resource ARNs to bind to */ - publicSubdomain: string; + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type SyncReconcileResponseTargetReleaseExtendAwStack = { /** - * Metadata per resource ID. + * Optional condition for additional filtering (rare) */ - resources: { [k: string]: DomainMetadataTargetResources }; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type SyncReconcileResponseDomainMetadataUnion = - | SyncReconcileResponseDomainMetadata - | any; +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileResponseTargetReleaseExtendAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: SyncReconcileResponseTargetReleaseExtendAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseExtendAwStack | undefined; +}; /** - * Type of environment variable + * IAM effect. Defaults to Allow. */ -export const TargetEnvironmentVariablesType = { - Plain: "plain", - Secret: "secret", +export const SyncReconcileResponseTargetReleaseExtendEffect = { + Allow: "Allow", + Deny: "Deny", } as const; /** - * Type of environment variable + * IAM effect. Defaults to Allow. */ -export type TargetEnvironmentVariablesType = ClosedEnum< - typeof TargetEnvironmentVariablesType +export type SyncReconcileResponseTargetReleaseExtendEffect = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseExtendEffect >; /** - * Environment variable for deployment + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseVariable = { +export type SyncReconcileResponseTargetReleaseExtendAwGrant = { /** - * Variable name + * AWS IAM actions (only for AWS) */ - name: string; + actions?: Array | null | undefined; /** - * Target resource patterns (null = all resources, Some = wildcard patterns) + * Azure actions (only for Azure) */ - targetResources?: Array | null | undefined; + dataActions?: Array | null | undefined; /** - * Type of environment variable + * GCP permissions that require an exact residual custom role. */ - type: TargetEnvironmentVariablesType; + permissions?: Array | null | undefined; /** - * Variable value (decrypted - deployment has access to decryption keys) + * Provider predefined roles to bind directly. */ - value: string; + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Snapshot of environment variables at a point in time + * AWS-specific platform permission configuration */ -export type SyncReconcileResponseEnvironmentVariables = { +export type SyncReconcileResponseTargetReleaseExtendAw = { /** - * ISO 8601 timestamp when snapshot was created + * Generic binding configuration for permissions */ - createdAt: string; + binding: SyncReconcileResponseTargetReleaseExtendAwBinding; /** - * Deterministic hash of all variables (for change detection) + * Short admin-facing description of why this entry exists. */ - hash: string; + description?: string | null | undefined; /** - * Environment variables in the snapshot + * IAM effect. Defaults to Allow. */ - variables: Array; + effect?: SyncReconcileResponseTargetReleaseExtendEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponseTargetReleaseExtendAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncReconcileResponseDatabaseSecretRef6 = { - key: string; - name: string; +export type SyncReconcileResponseTargetReleaseExtendAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; }; -export type SyncReconcileResponseDatabase6 = { +/** + * Azure-specific binding specification + */ +export type SyncReconcileResponseTargetReleaseExtendAzureStack = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncReconcileResponseDatabaseSecretRef6; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncReconcileResponseDatabaseUnion5 = - | SyncReconcileResponseDatabase6 - | any - | string; +export type SyncReconcileResponseTargetReleaseExtendAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: SyncReconcileResponseTargetReleaseExtendAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseExtendAzureStack | undefined; +}; /** - * Reference to a Kubernetes Secret + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseHostSecretRef4 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseHost4 = { +export type SyncReconcileResponseTargetReleaseExtendAzureGrant = { /** - * Reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - secretRef: SyncReconcileResponseHostSecretRef4; + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure-specific platform permission configuration */ -export type SyncReconcileResponseHostUnion4 = - | SyncReconcileResponseHost4 - | any - | string; +export type SyncReconcileResponseTargetReleaseExtendAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileResponseTargetReleaseExtendAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponseTargetReleaseExtendAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; /** - * Reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncReconcileResponsePortSecretRef5 = { - key: string; - name: string; +export type SyncReconcileResponseTargetReleaseExtendConditionResource = { + expression: string; + title: string; }; -export type SyncReconcileResponsePort5 = { +export type SyncReconcileResponseTargetReleaseExtendResourceConditionUnion = + | SyncReconcileResponseTargetReleaseExtendConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type SyncReconcileResponseTargetReleaseExtendGcpResource = { + condition?: + | SyncReconcileResponseTargetReleaseExtendConditionResource + | any + | null + | undefined; /** - * Reference to a Kubernetes Secret + * Scope (project/resource level) */ - secretRef: SyncReconcileResponsePortSecretRef5; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncReconcileResponsePortUnion5 = - | SyncReconcileResponsePort5 - | number +export type SyncReconcileResponseTargetReleaseExtendCondition = { + expression: string; + title: string; +}; + +export type SyncReconcileResponseTargetReleaseExtendConditionUnion = + | SyncReconcileResponseTargetReleaseExtendCondition | any; /** - * Reference to a Kubernetes Secret + * GCP-specific binding specification */ -export type SyncReconcileResponseUsernameSecretRef5 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseUsername5 = { +export type SyncReconcileResponseTargetReleaseExtendGcpStack = { + condition?: + | SyncReconcileResponseTargetReleaseExtendCondition + | any + | null + | undefined; /** - * Reference to a Kubernetes Secret + * Scope (project/resource level) */ - secretRef: SyncReconcileResponseUsernameSecretRef5; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncReconcileResponseUsernameUnion5 = - | SyncReconcileResponseUsername5 - | any - | string; - -export const TargetTypePostgres5 = { - Postgres: "postgres", -} as const; -export type TargetTypePostgres5 = ClosedEnum; +export type SyncReconcileResponseTargetReleaseExtendGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: SyncReconcileResponseTargetReleaseExtendGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseExtendGcpStack | undefined; +}; /** - * Local embedded Postgres binding. + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseExternalBindingsLocalPostgres = { +export type SyncReconcileResponseTargetReleaseExtendGcpGrant = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - database?: SyncReconcileResponseDatabase6 | any | string | null | undefined; + actions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure actions (only for Azure) */ - host?: SyncReconcileResponseHost4 | any | string | null | undefined; - password: string; + dataActions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP permissions that require an exact residual custom role. */ - port?: SyncReconcileResponsePort5 | number | any | null | undefined; + permissions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Provider predefined roles to bind directly. */ - username?: SyncReconcileResponseUsername5 | any | string | null | undefined; - service: "local-postgres"; - type: TargetTypePostgres5; + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Reference to a Kubernetes Secret + * GCP-specific platform permission configuration */ -export type SyncReconcileResponseDatabaseSecretRef5 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseDatabase5 = { +export type SyncReconcileResponseTargetReleaseExtendGcp = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncReconcileResponseDatabaseSecretRef5; + binding: SyncReconcileResponseTargetReleaseExtendGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponseTargetReleaseExtendGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseDatabaseUnion4 = - | SyncReconcileResponseDatabase5 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Platform-specific permission configurations */ -export type SyncReconcileResponseHostSecretRef3 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseHost3 = { +export type SyncReconcileResponseTargetReleaseExtendPlatforms = { /** - * Reference to a Kubernetes Secret + * AWS permission configurations */ - secretRef: SyncReconcileResponseHostSecretRef3; + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponseHostUnion3 = - | SyncReconcileResponseHost3 - | any - | string; +export type SyncReconcileResponseTargetReleaseExtend = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncReconcileResponseTargetReleaseExtendPlatforms; +}; /** - * Reference to a Kubernetes Secret + * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponsePortSecretRef4 = { - key: string; - name: string; -}; +export type SyncReconcileResponseTargetReleaseExtendUnion = + | SyncReconcileResponseTargetReleaseExtend + | string; -export type SyncReconcileResponsePort4 = { +export type SyncReconcileResponseTargetReleaseManagement1 = { /** - * Reference to a Kubernetes Secret + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource */ - secretRef: SyncReconcileResponsePortSecretRef4; + extend: { + [k: string]: Array; + }; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Management permissions configuration for stack management access */ -export type SyncReconcileResponsePortUnion4 = - | SyncReconcileResponsePort4 - | number - | any; +export type SyncReconcileResponseTargetReleaseManagementUnion = + | SyncReconcileResponseTargetReleaseManagement1 + | SyncReconcileResponseTargetReleaseManagement2 + | SyncReconcileResponseTargetReleaseManagementEnum; /** - * Reference to a Kubernetes Secret + * AWS-specific binding specification */ -export type SyncReconcileResponseUsernameSecretRef4 = { - key: string; - name: string; +export type SyncReconcileResponseTargetReleaseProfileAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; -export type SyncReconcileResponseUsername4 = { +/** + * AWS-specific binding specification + */ +export type SyncReconcileResponseTargetReleaseProfileAwStack = { /** - * Reference to a Kubernetes Secret + * Optional condition for additional filtering (rare) */ - secretRef: SyncReconcileResponseUsernameSecretRef4; + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncReconcileResponseUsernameUnion4 = - | SyncReconcileResponseUsername4 - | any - | string; +export type SyncReconcileResponseTargetReleaseProfileAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: SyncReconcileResponseTargetReleaseProfileAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseProfileAwStack | undefined; +}; -export const TargetTypePostgres4 = { - Postgres: "postgres", +/** + * IAM effect. Defaults to Allow. + */ +export const SyncReconcileResponseTargetReleaseProfileEffect = { + Allow: "Allow", + Deny: "Deny", } as const; -export type TargetTypePostgres4 = ClosedEnum; +/** + * IAM effect. Defaults to Allow. + */ +export type SyncReconcileResponseTargetReleaseProfileEffect = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseProfileEffect +>; /** - * Operator-provided / BYO database binding. + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponseExternalBindingsExternal = { +export type SyncReconcileResponseTargetReleaseProfileAwGrant = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - database?: SyncReconcileResponseDatabase5 | any | string | null | undefined; + actions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure actions (only for Azure) */ - host?: SyncReconcileResponseHost3 | any | string | null | undefined; + dataActions?: Array | null | undefined; /** - * Connection password as a concrete value, never an unresolved `SecretRef`: the platform - * - * @remarks - * materializes the Kubernetes secret into the pod env. The cloud variants carry a secret - * locator instead. + * GCP permissions that require an exact residual custom role. */ - password: string; + permissions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Provider predefined roles to bind directly. */ - port?: SyncReconcileResponsePort4 | number | any | null | undefined; + predefinedRoles?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP residual custom permissions to pair with predefined roles. */ - username?: SyncReconcileResponseUsername4 | any | string | null | undefined; - service: "external"; - type: TargetTypePostgres4; + residualPermissions?: Array | null | undefined; }; /** - * Reference to a Kubernetes Secret + * AWS-specific platform permission configuration */ -export type SyncReconcileResponseDatabaseSecretRef4 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseDatabase4 = { +export type SyncReconcileResponseTargetReleaseProfileAw = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncReconcileResponseDatabaseSecretRef4; + binding: SyncReconcileResponseTargetReleaseProfileAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: SyncReconcileResponseTargetReleaseProfileEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponseTargetReleaseProfileAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseDatabaseUnion3 = - | SyncReconcileResponseDatabase4 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncReconcileResponseHostSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseHost2 = { +export type SyncReconcileResponseTargetReleaseProfileAzureResource = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncReconcileResponseHostSecretRef2; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseHostUnion2 = - | SyncReconcileResponseHost2 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Azure-specific binding specification */ -export type SyncReconcileResponsePasswordSecretUriSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePasswordSecretUri = { +export type SyncReconcileResponseTargetReleaseProfileAzureStack = { /** - * Reference to a Kubernetes Secret + * Scope (subscription/resource group/resource level) */ - secretRef: SyncReconcileResponsePasswordSecretUriSecretRef; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Generic binding configuration for permissions */ -export type SyncReconcileResponsePasswordSecretUriUnion = - | SyncReconcileResponsePasswordSecretUri - | any - | string; +export type SyncReconcileResponseTargetReleaseProfileAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: SyncReconcileResponseTargetReleaseProfileAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: SyncReconcileResponseTargetReleaseProfileAzureStack | undefined; +}; /** - * Reference to a Kubernetes Secret + * Grant permissions for a specific cloud platform */ -export type SyncReconcileResponsePortSecretRef3 = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePort3 = { +export type SyncReconcileResponseTargetReleaseProfileAzureGrant = { /** - * Reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - secretRef: SyncReconcileResponsePortSecretRef3; + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure-specific platform permission configuration */ -export type SyncReconcileResponsePortUnion3 = - | SyncReconcileResponsePort3 - | number - | any; +export type SyncReconcileResponseTargetReleaseProfileAzure = { + /** + * Generic binding configuration for permissions + */ + binding: SyncReconcileResponseTargetReleaseProfileAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponseTargetReleaseProfileAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; /** - * Reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncReconcileResponseUsernameSecretRef3 = { - key: string; - name: string; +export type SyncReconcileResponseTargetReleaseProfileConditionResource = { + expression: string; + title: string; }; -export type SyncReconcileResponseUsername3 = { +export type SyncReconcileResponseTargetReleaseProfileResourceConditionUnion = + | SyncReconcileResponseTargetReleaseProfileConditionResource + | any; + +/** + * GCP-specific binding specification + */ +export type SyncReconcileResponseTargetReleaseProfileGcpResource = { + condition?: + | SyncReconcileResponseTargetReleaseProfileConditionResource + | any + | null + | undefined; /** - * Reference to a Kubernetes Secret + * Scope (project/resource level) */ - secretRef: SyncReconcileResponseUsernameSecretRef3; + scope: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP IAM condition */ -export type SyncReconcileResponseUsernameUnion3 = - | SyncReconcileResponseUsername3 - | any - | string; +export type SyncReconcileResponseTargetReleaseProfileCondition = { + expression: string; + title: string; +}; -export const TargetTypePostgres3 = { - Postgres: "postgres", -} as const; -export type TargetTypePostgres3 = ClosedEnum; +export type SyncReconcileResponseTargetReleaseProfileConditionUnion = + | SyncReconcileResponseTargetReleaseProfileCondition + | any; /** - * Azure Flexible Server binding. + * GCP-specific binding specification */ -export type SyncReconcileResponseExternalBindingsFlexibleServer = { +export type SyncReconcileResponseTargetReleaseProfileGcpStack = { + condition?: + | SyncReconcileResponseTargetReleaseProfileCondition + | any + | null + | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Scope (project/resource level) */ - database?: SyncReconcileResponseDatabase4 | any | string | null | undefined; + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type SyncReconcileResponseTargetReleaseProfileGcpBinding = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP-specific binding specification */ - host?: SyncReconcileResponseHost2 | any | string | null | undefined; + resource?: SyncReconcileResponseTargetReleaseProfileGcpResource | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP-specific binding specification */ - passwordSecretUri?: - | SyncReconcileResponsePasswordSecretUri - | any - | string - | null - | undefined; + stack?: SyncReconcileResponseTargetReleaseProfileGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type SyncReconcileResponseTargetReleaseProfileGcpGrant = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * AWS IAM actions (only for AWS) */ - port?: SyncReconcileResponsePort3 | number | any | null | undefined; + actions?: Array | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure actions (only for Azure) */ - username?: SyncReconcileResponseUsername3 | any | string | null | undefined; - service: "flexible-server"; - type: TargetTypePostgres3; + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; }; /** - * Reference to a Kubernetes Secret + * GCP-specific platform permission configuration */ -export type SyncReconcileResponseDatabaseSecretRef3 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseDatabase3 = { +export type SyncReconcileResponseTargetReleaseProfileGcp = { /** - * Reference to a Kubernetes Secret + * Generic binding configuration for permissions */ - secretRef: SyncReconcileResponseDatabaseSecretRef3; + binding: SyncReconcileResponseTargetReleaseProfileGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: SyncReconcileResponseTargetReleaseProfileGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Platform-specific permission configurations */ -export type SyncReconcileResponseDatabaseUnion2 = - | SyncReconcileResponseDatabase3 - | any - | string; +export type SyncReconcileResponseTargetReleaseProfilePlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: + | Array + | null + | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; /** - * Reference to a Kubernetes Secret + * A permission set that can be applied across different cloud platforms */ -export type SyncReconcileResponseHostSecretRef1 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseHost1 = { +export type SyncReconcileResponseTargetReleaseProfile = { /** - * Reference to a Kubernetes Secret + * Human-readable description of what this permission set allows */ - secretRef: SyncReconcileResponseHostSecretRef1; + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: SyncReconcileResponseTargetReleaseProfilePlatforms; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Reference to a permission set - either by name or inline definition */ -export type SyncReconcileResponseHostUnion1 = - | SyncReconcileResponseHost1 - | any +export type SyncReconcileResponseTargetReleaseProfileUnion = + | SyncReconcileResponseTargetReleaseProfile | string; /** - * Reference to a Kubernetes Secret + * Combined permissions configuration that contains both profiles and management */ -export type SyncReconcileResponsePasswordSecretNameSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePasswordSecretName = { +export type SyncReconcileResponseTargetReleasePermissions = { /** - * Reference to a Kubernetes Secret + * Management permissions configuration for stack management access */ - secretRef: SyncReconcileResponsePasswordSecretNameSecretRef; + management?: + | SyncReconcileResponseTargetReleaseManagement1 + | SyncReconcileResponseTargetReleaseManagement2 + | SyncReconcileResponseTargetReleaseManagementEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { + [k: string]: Array; + }; + }; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponsePasswordSecretNameUnion = - | SyncReconcileResponsePasswordSecretName - | any - | string; - -/** - * Reference to a Kubernetes Secret + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ -export type SyncReconcileResponsePortSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePort2 = { +export type SyncReconcileResponseTargetReleaseConfig = { /** - * Reference to a Kubernetes Secret + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. */ - secretRef: SyncReconcileResponsePortSecretRef2; + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponsePortUnion2 = - | SyncReconcileResponsePort2 - | number - | any; - -/** - * Reference to a Kubernetes Secret + * Reference to a resource by its stable id and resource type. */ -export type SyncReconcileResponseUsernameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseUsername2 = { +export type SyncReconcileResponseTargetReleaseDependency = { + id: string; /** - * Reference to a Kubernetes Secret + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. */ - secretRef: SyncReconcileResponseUsernameSecretRef2; + type: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncReconcileResponseUsernameUnion2 = - | SyncReconcileResponseUsername2 - | any - | string; - -export const TargetTypePostgres2 = { - Postgres: "postgres", +export const SyncReconcileResponseTargetReleaseLifecycle = { + Frozen: "frozen", + Live: "live", } as const; -export type TargetTypePostgres2 = ClosedEnum; - /** - * GCP Cloud SQL binding. + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ -export type SyncReconcileResponseExternalBindingsCloudSQL = { +export type SyncReconcileResponseTargetReleaseLifecycle = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseLifecycle +>; + +export type SyncReconcileResponseTargetReleaseResources = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. */ - database?: SyncReconcileResponseDatabase3 | any | string | null | undefined; + config: SyncReconcileResponseTargetReleaseConfig; /** - * Represents a value that can be either a concrete value, a template expression, + * Additional dependencies for this resource beyond those defined in the resource itself. * * @remarks - * or a reference to a Kubernetes Secret + * The total dependencies are: resource.get_dependencies() + this list */ - host?: SyncReconcileResponseHost1 | any | string | null | undefined; + dependencies: Array; /** - * Represents a value that can be either a concrete value, a template expression, + * Id of the boolean stack input that decides whether this resource is * * @remarks - * or a reference to a Kubernetes Secret + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. */ - passwordSecretName?: - | SyncReconcileResponsePasswordSecretName - | any - | string - | null - | undefined; + enabledWhen?: string | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. */ - port?: SyncReconcileResponsePort2 | number | any | null | undefined; + lifecycle: SyncReconcileResponseTargetReleaseLifecycle; /** - * Represents a value that can be either a concrete value, a template expression, + * Enable remote bindings for this resource (BYOB use case). * * @remarks - * or a reference to a Kubernetes Secret + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). */ - username?: SyncReconcileResponseUsername2 | any | string | null | undefined; - service: "cloud-sql"; - type: TargetTypePostgres2; + remoteAccess?: boolean | undefined; }; /** - * Reference to a Kubernetes Secret + * Represents the target cloud platform. */ -export type SyncReconcileResponseClusterEndpointSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponseClusterEndpoint = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseClusterEndpointSecretRef; -}; - +export const SyncReconcileResponseTargetReleaseSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Represents the target cloud platform. */ -export type SyncReconcileResponseClusterEndpointUnion = - | SyncReconcileResponseClusterEndpoint - | any - | string; +export type SyncReconcileResponseTargetReleaseSupportedPlatform = ClosedEnum< + typeof SyncReconcileResponseTargetReleaseSupportedPlatform +>; /** - * Reference to a Kubernetes Secret + * A bag of resources, unaware of any cloud. */ -export type SyncReconcileResponseDatabaseSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseDatabase2 = { +export type SyncReconcileResponseTargetReleaseStack = { /** - * Reference to a Kubernetes Secret + * Unique identifier for the stack */ - secretRef: SyncReconcileResponseDatabaseSecretRef2; + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: SyncReconcileResponseTargetReleasePermissions | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { [k: string]: SyncReconcileResponseTargetReleaseResources }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: + | Array + | null + | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, + * Release metadata * * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseDatabaseUnion1 = - | SyncReconcileResponseDatabase2 - | any - | string; - -/** - * Reference to a Kubernetes Secret + * + * Identifies a specific release version and includes the stack definition. + * The deployment engine uses this to track which release is currently deployed + * and which is the target. */ -export type SyncReconcileResponsePasswordSecretArnSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePasswordSecretArn = { +export type SyncReconcileResponseTargetRelease = { /** - * Reference to a Kubernetes Secret + * Short description of the release */ - secretRef: SyncReconcileResponsePasswordSecretArnSecretRef; + description?: string | null | undefined; + /** + * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no + * + * @remarks + * Alien-assigned release — the platform resolves a release from `version`. + */ + releaseId?: string | null | undefined; + /** + * A bag of resources, unaware of any cloud. + */ + stack: SyncReconcileResponseTargetReleaseStack; + /** + * Version string (e.g., 2.1.0) + */ + version?: string | null | undefined; }; +export type SyncReconcileResponseTargetReleaseUnion = + | SyncReconcileResponseTargetRelease + | any; + /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponsePasswordSecretArnUnion = - | SyncReconcileResponsePasswordSecretArn - | any - | string; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponsePortSecretRef1 = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePort1 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponsePortSecretRef1; -}; - -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponsePortUnion1 = - | SyncReconcileResponsePort1 - | number - | any; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseUsernameSecretRef1 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseUsername1 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseUsernameSecretRef1; -}; - -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseUsernameUnion1 = - | SyncReconcileResponseUsername1 - | any - | string; - -export const TargetTypePostgres1 = { - Postgres: "postgres", -} as const; -export type TargetTypePostgres1 = ClosedEnum; - -/** - * AWS Aurora Serverless v2 binding. + * Current deployment state after reconciliation */ -export type SyncReconcileResponseExternalBindingsAurora = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - clusterEndpoint?: - | SyncReconcileResponseClusterEndpoint +export type SyncReconcileResponseCurrent = { + currentRelease?: SyncReconcileResponseCurrentRelease | any | null | undefined; + environmentInfo?: + | SyncReconcileResponseEnvironmentInfoGcp + | SyncReconcileResponseEnvironmentInfoAzure + | SyncReconcileResponseEnvironmentInfoLocal + | SyncReconcileResponseEnvironmentInfoAws + | SyncReconcileResponseEnvironmentInfoTest | any - | string | null | undefined; + error?: SyncReconcileResponseError | any | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, + * Represents the target cloud platform. + */ + platform: SyncReconcileResponseCurrentPlatform; + /** + * Protocol version for cross-actor compatibility. * * @remarks - * or a reference to a Kubernetes Secret + * All actors (manager, push client, agent) check this before stepping. + * Mismatched versions produce a clear error instead of silent corruption. + * See docs/02-manager/10-deployment-protocol.md. */ - database?: SyncReconcileResponseDatabase2 | any | string | null | undefined; + protocolVersion: number; /** - * Represents a value that can be either a concrete value, a template expression, + * Whether a retry has been requested for a failed deployment * * @remarks - * or a reference to a Kubernetes Secret + * When true and status is a failed state, the deployment system will retry failed resources */ - passwordSecretArn?: - | SyncReconcileResponsePasswordSecretArn + retryRequested?: boolean | undefined; + runtimeMetadata?: + | SyncReconcileResponseRuntimeMetadata | any - | string | null | undefined; + stackState?: SyncReconcileResponseStackState | any | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, + * Deployment status in the deployment lifecycle. * * @remarks - * or a reference to a Kubernetes Secret - */ - port?: SyncReconcileResponsePort1 | number | any | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, * - * @remarks - * or a reference to a Kubernetes Secret + * For observe-only deployments with no release or stack state, `Running` + * means the Operator is attached. Connectivity comes from `lastHeartbeatAt`; + * resource health comes from inventory and resource heartbeat data. */ - username?: SyncReconcileResponseUsername1 | any | string | null | undefined; - service: "aurora"; - type: TargetTypePostgres1; + status: SyncReconcileResponseStatus; + targetRelease?: SyncReconcileResponseTargetRelease | any | null | undefined; }; /** - * Connection details for a Postgres database, one variant per backend. + * Represents the target cloud platform. */ -export type SyncReconcileResponseExternalBindingsUnion6 = - | SyncReconcileResponseExternalBindingsAurora - | SyncReconcileResponseExternalBindingsCloudSQL - | SyncReconcileResponseExternalBindingsFlexibleServer - | SyncReconcileResponseExternalBindingsExternal - | SyncReconcileResponseExternalBindingsLocalPostgres; - +export const SyncReconcileResponseBasePlatformEnum = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; /** - * Reference to a Kubernetes Secret + * Represents the target cloud platform. */ -export type SyncReconcileResponseDefaultDomainSecretRef = { - key: string; - name: string; -}; +export type SyncReconcileResponseBasePlatformEnum = ClosedEnum< + typeof SyncReconcileResponseBasePlatformEnum +>; -export type SyncReconcileResponseDefaultDomain = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseDefaultDomainSecretRef; -}; +export type SyncReconcileResponseBasePlatformUnion = + | SyncReconcileResponseBasePlatformEnum + | any; /** - * Represents a value that can be either a concrete value, a template expression, + * Configuration for a single container worker cluster. * * @remarks - * or a reference to a Kubernetes Secret + * + * Contains the cluster ID and management token needed to interact with + * the managed container control plane API for container operations. */ -export type SyncReconcileResponseDefaultDomainUnion = - | SyncReconcileResponseDefaultDomain - | any - | string; +export type SyncReconcileResponseClusters = { + /** + * Cluster ID (deterministic: workspace/project/deployment/resourceid) + */ + clusterId: string; + /** + * Management token for API access (hm_...) + * + * @remarks + * Used by alien-deployment controllers to create/update containers + */ + managementToken: string; +}; /** - * Reference to a Kubernetes Secret + * AWS Horizon machine image catalog. */ -export type SyncReconcileResponseEnvironmentNameSecretRef = { - key: string; - name: string; +export type SyncReconcileResponseHorizonMachineImageAws = { + /** + * AMI IDs by architecture, then AWS region. + */ + amis: { [k: string]: { [k: string]: string } }; }; -export type SyncReconcileResponseEnvironmentName = { +export type SyncReconcileResponseHorizonMachineImageAwsUnion = + | SyncReconcileResponseHorizonMachineImageAws + | any; + +/** + * Azure Horizon machine image entry. + */ +export type SyncReconcileResponseAzureImages = { /** - * Reference to a Kubernetes Secret + * Azure Compute Gallery image version ID. */ - secretRef: SyncReconcileResponseEnvironmentNameSecretRef; + imageVersionId: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Azure Horizon machine image catalog. */ -export type SyncReconcileResponseEnvironmentNameUnion = - | SyncReconcileResponseEnvironmentName - | any - | string; +export type HorizonMachineImageAzureTarget = { + /** + * Images by architecture. + */ + images: { [k: string]: SyncReconcileResponseAzureImages }; +}; + +export type HorizonMachineImageTargetAzureUnion = + | HorizonMachineImageAzureTarget + | any; /** - * Reference to a Kubernetes Secret + * Base image metadata for the Horizon machine image. */ -export type SyncReconcileResponseResourceGroupNameSecretRef3 = { - key: string; +export type SyncReconcileResponseBaseImage = { + /** + * Base OS image name. + */ name: string; -}; - -export type SyncReconcileResponseResourceGroupName3 = { /** - * Reference to a Kubernetes Secret + * Base OS image version or channel. */ - secretRef: SyncReconcileResponseResourceGroupNameSecretRef3; + version: string; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * GCP Horizon machine image entry. */ -export type SyncReconcileResponseResourceGroupNameUnion3 = - | SyncReconcileResponseResourceGroupName3 - | any - | string; +export type SyncReconcileResponseGcpImages = { + /** + * Source image self link or image-family URL. + */ + sourceImage: string; +}; /** - * Reference to a Kubernetes Secret + * GCP Horizon machine image catalog. */ -export type SyncReconcileResponseResourceIdSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponseResourceId = { +export type HorizonMachineImageGcpTarget = { /** - * Reference to a Kubernetes Secret + * Images by architecture. */ - secretRef: SyncReconcileResponseResourceIdSecretRef; + images: { [k: string]: SyncReconcileResponseGcpImages }; }; -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseResourceIdUnion = - | SyncReconcileResponseResourceId - | any - | string; +export type HorizonMachineImageTargetGcpUnion = + | HorizonMachineImageGcpTarget + | any; /** - * Reference to a Kubernetes Secret + * Download artifact for one horizond release platform. */ -export type SyncReconcileResponseStaticIpSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponseStaticIp = { +export type SyncReconcileResponseHorizondArtifacts = { /** - * Reference to a Kubernetes Secret + * SHA-256 digest for the artifact payload. */ - secretRef: SyncReconcileResponseStaticIpSecretRef; + sha256: string; + /** + * HTTPS URL for the artifact. + */ + url: string; }; -export const TargetTypeContainerAppsEnvironment = { - ContainerAppsEnvironment: "container_apps_environment", -} as const; -export type TargetTypeContainerAppsEnvironment = ClosedEnum< - typeof TargetTypeContainerAppsEnvironment ->; - /** - * Binding configuration for a pre-existing Azure Container Apps Environment. + * Horizon machine image catalog. * * @remarks * - * Used when deploying to an existing environment instead of having Alien provision one. - * This is useful for shared environments (e.g., test infrastructure) or enterprise - * setups where environments are managed by a separate team. + * Platform resolves concrete provider images from this catalog during rollout. */ -export type SyncReconcileResponseExternalBindingsContainerAppsEnvironment = { +export type SyncReconcileResponseHorizonMachineImage = { + aws?: SyncReconcileResponseHorizonMachineImageAws | any | null | undefined; + azure?: HorizonMachineImageAzureTarget | any | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Base image metadata for the Horizon machine image. */ - defaultDomain?: - | SyncReconcileResponseDefaultDomain - | any - | string - | null - | undefined; + baseImage: SyncReconcileResponseBaseImage; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Logical image channel, such as prod, staging, or canary. */ - environmentName?: - | SyncReconcileResponseEnvironmentName - | any - | string - | null - | undefined; + channel: string; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Image manifest creation timestamp. */ - resourceGroupName?: - | SyncReconcileResponseResourceGroupName3 - | any - | string - | null - | undefined; + createdAt: string; + gcp?: HorizonMachineImageGcpTarget | any | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Git commit SHA used to build the image. */ - resourceId?: - | SyncReconcileResponseResourceId - | any - | string - | null - | undefined; - staticIp?: any | null | undefined; - type: TargetTypeContainerAppsEnvironment; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseDataDirSecretRef3 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseDataDir3 = { + gitSha: string; /** - * Reference to a Kubernetes Secret + * Per-architecture horizond artifacts by release-platform key. */ - secretRef: SyncReconcileResponseDataDirSecretRef3; + horizondArtifacts: { [k: string]: SyncReconcileResponseHorizondArtifacts }; + /** + * horizond daemon version baked into the image. + */ + horizondVersion: string; + /** + * Published immutable machine image version. + */ + machineImageVersion: string; }; -/** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseDataDirUnion2 = - | SyncReconcileResponseDataDir3 - | any - | string; +export type SyncReconcileResponseHorizonMachineImageUnion = + | SyncReconcileResponseHorizonMachineImage + | any; -export const TargetTypeVault5 = { - Vault: "vault", +export const ComputeBackendTargetType = { + Horizon: "horizon", } as const; -export type TargetTypeVault5 = ClosedEnum; +export type ComputeBackendTargetType = ClosedEnum< + typeof ComputeBackendTargetType +>; /** - * Local development vault binding (for testing/development) + * Compute backend for Container and Worker resources. + * + * @remarks + * + * Determines how compute workloads are orchestrated on cloud platforms. + * When None, the platform default is used for cloud platforms. */ -export type SyncReconcileResponseExternalBindingsLocalVault = { +export type SyncReconcileResponseComputeBackendHorizon = { /** - * Represents a value that can be either a concrete value, a template expression, + * Cluster configurations (one per ComputeCluster resource) * * @remarks - * or a reference to a Kubernetes Secret + * Key: ComputeCluster resource ID from stack + * Value: Cluster ID and management token for that cluster */ - dataDir?: SyncReconcileResponseDataDir3 | any | string | null | undefined; + clusters: { [k: string]: SyncReconcileResponseClusters }; + horizonMachineImage?: + | SyncReconcileResponseHorizonMachineImage + | any + | null + | undefined; /** - * The vault name for local storage + * Horizon control-plane API base URL. */ - vaultName: string; - service: "local-vault"; - type: TargetTypeVault5; + url: string; + type: ComputeBackendTargetType; }; +export type SyncReconcileResponseComputeBackendUnion = + | SyncReconcileResponseComputeBackendHorizon + | any; + /** - * Reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncReconcileResponseNamespaceSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseNamespace2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseNamespaceSecretRef2; -}; - +export const SyncReconcileResponseAliasCertificateStatus = { + Pending: "pending", + Issued: "issued", + Renewing: "renewing", + RenewalFailed: "renewal-failed", + Failed: "failed", + Deleting: "deleting", +} as const; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncReconcileResponseNamespaceUnion2 = - | SyncReconcileResponseNamespace2 - | any - | string; +export type SyncReconcileResponseAliasCertificateStatus = ClosedEnum< + typeof SyncReconcileResponseAliasCertificateStatus +>; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ -export type SyncReconcileResponseVaultPrefixSecretRef3 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseVaultPrefix3 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseVaultPrefixSecretRef3; -}; +export const SyncReconcileResponseAliasDnsStatus = { + Pending: "pending", + Active: "active", + Updating: "updating", + Deleting: "deleting", + Failed: "failed", +} as const; +/** + * DNS record status in the DNS lifecycle + */ +export type SyncReconcileResponseAliasDnsStatus = ClosedEnum< + typeof SyncReconcileResponseAliasDnsStatus +>; /** - * Represents a value that can be either a concrete value, a template expression, + * Certificate and DNS metadata for a managed hostname. * * @remarks - * or a reference to a Kubernetes Secret + * + * Includes decrypted certificate data for issued certificates. + * Private keys are deployment-scoped secrets (like environment variables). */ -export type SyncReconcileResponseVaultPrefixUnion3 = - | SyncReconcileResponseVaultPrefix3 - | any - | string; - -export const TargetTypeVault4 = { - Vault: "vault", -} as const; -export type TargetTypeVault4 = ClosedEnum; - -/** - * Kubernetes Secrets vault binding configuration - */ -export type SyncReconcileResponseExternalBindingsKubernetesSecret = { +export type SyncReconcileResponseAlias = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Full PEM certificate chain (only present if status is "issued"). */ - namespace?: SyncReconcileResponseNamespace2 | any | string | null | undefined; + certificateChain?: string | null | undefined; /** - * Represents a value that can be either a concrete value, a template expression, + * Certificate ID (for tracking/logging). + */ + certificateId: string; + /** + * Certificate status in the certificate lifecycle + */ + certificateStatus: SyncReconcileResponseAliasCertificateStatus; + /** + * Last DNS error message. Present when DNS previously failed, even if status * * @remarks - * or a reference to a Kubernetes Secret + * was reset to pending for retry. Used to surface actionable error context + * in WaitingForDns failure messages. */ - vaultPrefix?: - | SyncReconcileResponseVaultPrefix3 - | any - | string - | null - | undefined; - service: "kubernetes-secret"; - type: TargetTypeVault4; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseVaultNameSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponseVaultName = { + dnsError?: string | null | undefined; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ - secretRef: SyncReconcileResponseVaultNameSecretRef; + dnsStatus: SyncReconcileResponseAliasDnsStatus; + /** + * Fully qualified domain name. + */ + fqdn: string; + /** + * ISO 8601 timestamp when certificate was issued (for renewal detection). + */ + issuedAt?: string | null | undefined; + /** + * Decrypted private key (only present if status is "issued"). + */ + privateKey?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncReconcileResponseVaultNameUnion = - | SyncReconcileResponseVaultName - | any - | string; - -export const TargetTypeVault3 = { - Vault: "vault", +export const SyncReconcileResponseCertificateStatus = { + Pending: "pending", + Issued: "issued", + Renewing: "renewing", + RenewalFailed: "renewal-failed", + Failed: "failed", + Deleting: "deleting", } as const; -export type TargetTypeVault3 = ClosedEnum; - /** - * Azure Key Vault binding configuration + * Certificate status in the certificate lifecycle */ -export type SyncReconcileResponseExternalBindingsKeyVault = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - vaultName?: SyncReconcileResponseVaultName | any | string | null | undefined; - service: "key-vault"; - type: TargetTypeVault3; -}; +export type SyncReconcileResponseCertificateStatus = ClosedEnum< + typeof SyncReconcileResponseCertificateStatus +>; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ -export type SyncReconcileResponseVaultPrefixSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseVaultPrefix2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseVaultPrefixSecretRef2; -}; +export const SyncReconcileResponseDnsStatus = { + Pending: "pending", + Active: "active", + Updating: "updating", + Deleting: "deleting", + Failed: "failed", +} as const; +/** + * DNS record status in the DNS lifecycle + */ +export type SyncReconcileResponseDnsStatus = ClosedEnum< + typeof SyncReconcileResponseDnsStatus +>; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Certificate status in the certificate lifecycle */ -export type SyncReconcileResponseVaultPrefixUnion2 = - | SyncReconcileResponseVaultPrefix2 - | any - | string; +export const SyncReconcileResponseEndpointsCertificateStatus = { + Pending: "pending", + Issued: "issued", + Renewing: "renewing", + RenewalFailed: "renewal-failed", + Failed: "failed", + Deleting: "deleting", +} as const; +/** + * Certificate status in the certificate lifecycle + */ +export type SyncReconcileResponseEndpointsCertificateStatus = ClosedEnum< + typeof SyncReconcileResponseEndpointsCertificateStatus +>; -export const TargetTypeVault2 = { - Vault: "vault", +/** + * DNS record status in the DNS lifecycle + */ +export const SyncReconcileResponseEndpointsDnsStatus = { + Pending: "pending", + Active: "active", + Updating: "updating", + Deleting: "deleting", + Failed: "failed", } as const; -export type TargetTypeVault2 = ClosedEnum; +/** + * DNS record status in the DNS lifecycle + */ +export type SyncReconcileResponseEndpointsDnsStatus = ClosedEnum< + typeof SyncReconcileResponseEndpointsDnsStatus +>; /** - * GCP Secret Manager vault binding configuration + * Certificate and DNS metadata for a managed hostname. + * + * @remarks + * + * Includes decrypted certificate data for issued certificates. + * Private keys are deployment-scoped secrets (like environment variables). */ -export type SyncReconcileResponseExternalBindingsSecretManager = { +export type SyncReconcileResponseEndpoints = { /** - * Represents a value that can be either a concrete value, a template expression, + * Full PEM certificate chain (only present if status is "issued"). + */ + certificateChain?: string | null | undefined; + /** + * Certificate ID (for tracking/logging). + */ + certificateId: string; + /** + * Certificate status in the certificate lifecycle + */ + certificateStatus: SyncReconcileResponseEndpointsCertificateStatus; + /** + * Last DNS error message. Present when DNS previously failed, even if status * * @remarks - * or a reference to a Kubernetes Secret + * was reset to pending for retry. Used to surface actionable error context + * in WaitingForDns failure messages. */ - vaultPrefix?: - | SyncReconcileResponseVaultPrefix2 - | any - | string - | null - | undefined; - service: "secret-manager"; - type: TargetTypeVault2; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseVaultPrefixSecretRef1 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseVaultPrefix1 = { + dnsError?: string | null | undefined; /** - * Reference to a Kubernetes Secret + * DNS record status in the DNS lifecycle */ - secretRef: SyncReconcileResponseVaultPrefixSecretRef1; + dnsStatus: SyncReconcileResponseEndpointsDnsStatus; + /** + * Fully qualified domain name. + */ + fqdn: string; + /** + * ISO 8601 timestamp when certificate was issued (for renewal detection). + */ + issuedAt?: string | null | undefined; + /** + * Decrypted private key (only present if status is "issued"). + */ + privateKey?: string | null | undefined; }; /** - * Represents a value that can be either a concrete value, a template expression, + * Certificate and DNS metadata for a public resource. * * @remarks - * or a reference to a Kubernetes Secret - */ -export type SyncReconcileResponseVaultPrefixUnion1 = - | SyncReconcileResponseVaultPrefix1 - | any - | string; - -export const TargetTypeVault1 = { - Vault: "vault", -} as const; -export type TargetTypeVault1 = ClosedEnum; - -/** - * AWS SSM Parameter Store vault binding configuration + * + * The direct fields describe the primary endpoint hostname. `endpoints` + * contains endpoint-scoped metadata keyed by endpoint name. `aliases` contains + * additional managed hostnames that route directly to the primary endpoint. */ -export type SyncReconcileResponseExternalBindingsParameterStore = { +export type DomainMetadataTargetResources = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Additional managed hostnames for the resource. */ - vaultPrefix?: - | SyncReconcileResponseVaultPrefix1 - | any - | string - | null - | undefined; - service: "parameter-store"; - type: TargetTypeVault1; -}; - -/** - * Represents a vault binding for secure secret management - */ -export type SyncReconcileResponseExternalBindingsUnion5 = - | SyncReconcileResponseExternalBindingsParameterStore - | SyncReconcileResponseExternalBindingsSecretManager - | SyncReconcileResponseExternalBindingsKeyVault - | SyncReconcileResponseExternalBindingsKubernetesSecret - | SyncReconcileResponseExternalBindingsLocalVault; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseDataDirSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseDataDir2 = { + aliases?: Array | undefined; /** - * Reference to a Kubernetes Secret + * Full PEM certificate chain (only present if status is "issued"). */ - secretRef: SyncReconcileResponseDataDirSecretRef2; + certificateChain?: string | null | undefined; + /** + * Certificate ID (for tracking/logging). + */ + certificateId: string; + /** + * Certificate status in the certificate lifecycle + */ + certificateStatus: SyncReconcileResponseCertificateStatus; + /** + * Last DNS error message. + */ + dnsError?: string | null | undefined; + /** + * DNS record status in the DNS lifecycle + */ + dnsStatus: SyncReconcileResponseDnsStatus; + /** + * Endpoint-scoped metadata keyed by endpoint name. + */ + endpoints?: { [k: string]: SyncReconcileResponseEndpoints } | undefined; + /** + * Fully qualified domain name. + */ + fqdn: string; + /** + * ISO 8601 timestamp when certificate was issued (for renewal detection). + */ + issuedAt?: string | null | undefined; + /** + * Decrypted private key (only present if status is "issued"). + */ + privateKey?: string | null | undefined; }; /** - * Reference to a Kubernetes Secret + * Domain metadata for auto-managed public resources (no private keys). */ -export type SyncReconcileResponseRegistryUrlSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponseRegistryUrl = { +export type SyncReconcileResponseDomainMetadata = { /** - * Reference to a Kubernetes Secret + * Base domain for auto-generated domains (e.g., "vpc.direct"). */ - secretRef: SyncReconcileResponseRegistryUrlSecretRef; + baseDomain: string; + /** + * Hosted zone ID for DNS records. + */ + hostedZoneId: string; + /** + * Deployment public subdomain (e.g., "k8f2j3"). + */ + publicSubdomain: string; + /** + * Metadata per resource ID. + */ + resources: { [k: string]: DomainMetadataTargetResources }; }; +export type SyncReconcileResponseDomainMetadataUnion = + | SyncReconcileResponseDomainMetadata + | any; + /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Type of environment variable */ -export type SyncReconcileResponseRegistryUrlUnion = - | SyncReconcileResponseRegistryUrl - | any - | string; - -export const TargetTypeArtifactRegistry4 = { - ArtifactRegistry: "artifact_registry", +export const TargetEnvironmentVariablesType = { + Plain: "plain", + Secret: "secret", } as const; -export type TargetTypeArtifactRegistry4 = ClosedEnum< - typeof TargetTypeArtifactRegistry4 +/** + * Type of environment variable + */ +export type TargetEnvironmentVariablesType = ClosedEnum< + typeof TargetEnvironmentVariablesType >; /** - * Local container registry binding configuration. - * - * @remarks - * - * The local registry runs on localhost only and does not require authentication. - * Security boundary is the OS process isolation on the customer's machine. - * External image access is secured by the manager's registry proxy (deployment tokens). + * Environment variable for deployment */ -export type SyncReconcileResponseExternalBindingsLocal = { +export type SyncReconcileResponseVariable = { /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Variable name */ - dataDir?: any | null | undefined; + name: string; /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret + * Target resource patterns (null = all resources, Some = wildcard patterns) */ - registryUrl?: - | SyncReconcileResponseRegistryUrl - | any - | string - | null - | undefined; - service: "local"; - type: TargetTypeArtifactRegistry4; + targetResources?: Array | null | undefined; + /** + * Type of environment variable + */ + type: TargetEnvironmentVariablesType; + /** + * Variable value (decrypted - deployment has access to decryption keys) + */ + value: string; }; /** - * Reference to a Kubernetes Secret + * Snapshot of environment variables at a point in time */ -export type SyncReconcileResponsePullServiceAccountEmailSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePullServiceAccountEmail = { +export type SyncReconcileResponseEnvironmentVariables = { /** - * Reference to a Kubernetes Secret + * ISO 8601 timestamp when snapshot was created */ - secretRef: SyncReconcileResponsePullServiceAccountEmailSecretRef; + createdAt: string; + /** + * Deterministic hash of all variables (for change detection) + */ + hash: string; + /** + * Environment variables in the snapshot + */ + variables: Array; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponsePushServiceAccountEmailSecretRef = { +export type SyncReconcileResponseDatabaseSecretRef6 = { key: string; name: string; }; -export type SyncReconcileResponsePushServiceAccountEmail = { +export type SyncReconcileResponseDatabase6 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponsePushServiceAccountEmailSecretRef; + secretRef: SyncReconcileResponseDatabaseSecretRef6; }; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseDatabaseUnion5 = + | SyncReconcileResponseDatabase6 + | any + | string; + /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRepositoryNameSecretRef = { +export type SyncReconcileResponseHostSecretRef4 = { key: string; name: string; }; -export type SyncReconcileResponseRepositoryName = { +export type SyncReconcileResponseHost4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseRepositoryNameSecretRef; + secretRef: SyncReconcileResponseHostSecretRef4; }; /** @@ -7288,53 +7498,24 @@ export type SyncReconcileResponseRepositoryName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseRepositoryNameUnion = - | SyncReconcileResponseRepositoryName +export type SyncReconcileResponseHostUnion4 = + | SyncReconcileResponseHost4 | any | string; -export const TargetTypeArtifactRegistry3 = { - ArtifactRegistry: "artifact_registry", -} as const; -export type TargetTypeArtifactRegistry3 = ClosedEnum< - typeof TargetTypeArtifactRegistry3 ->; - -/** - * Google Artifact Registry binding configuration - */ -export type SyncReconcileResponseExternalBindingsGar = { - pullServiceAccountEmail?: any | null | undefined; - pushServiceAccountEmail?: any | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - repositoryName?: - | SyncReconcileResponseRepositoryName - | any - | string - | null - | undefined; - service: "gar"; - type: TargetTypeArtifactRegistry3; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRegistryNameSecretRef = { +export type SyncReconcileResponsePortSecretRef5 = { key: string; name: string; }; -export type SyncReconcileResponseRegistryName = { +export type SyncReconcileResponsePort5 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseRegistryNameSecretRef; + secretRef: SyncReconcileResponsePortSecretRef5; }; /** @@ -7343,39 +7524,24 @@ export type SyncReconcileResponseRegistryName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseRegistryNameUnion = - | SyncReconcileResponseRegistryName - | any - | string; +export type SyncReconcileResponsePortUnion5 = + | SyncReconcileResponsePort5 + | number + | any; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRepositoryPrefixSecretRef2 = { +export type SyncReconcileResponseUsernameSecretRef5 = { key: string; name: string; }; -export type SyncReconcileResponseRepositoryPrefix2 = { +export type SyncReconcileResponseUsername5 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseRepositoryPrefixSecretRef2; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseResourceGroupNameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseResourceGroupName2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseResourceGroupNameSecretRef2; + secretRef: SyncReconcileResponseUsernameSecretRef5; }; /** @@ -7384,94 +7550,92 @@ export type SyncReconcileResponseResourceGroupName2 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseResourceGroupNameUnion2 = - | SyncReconcileResponseResourceGroupName2 +export type SyncReconcileResponseUsernameUnion5 = + | SyncReconcileResponseUsername5 | any | string; -export const TargetTypeArtifactRegistry2 = { - ArtifactRegistry: "artifact_registry", +export const TargetTypePostgres5 = { + Postgres: "postgres", } as const; -export type TargetTypeArtifactRegistry2 = ClosedEnum< - typeof TargetTypeArtifactRegistry2 ->; +export type TargetTypePostgres5 = ClosedEnum; /** - * Azure Container Registry binding configuration + * Local embedded Postgres binding. */ -export type SyncReconcileResponseExternalBindingsAcr = { +export type SyncReconcileResponseExternalBindingsLocalPostgres = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - registryName?: - | SyncReconcileResponseRegistryName - | any - | string - | null - | undefined; - repositoryPrefix?: any | null | undefined; + database?: SyncReconcileResponseDatabase6 | any | string | null | undefined; /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - resourceGroupName?: - | SyncReconcileResponseResourceGroupName2 - | any - | string - | null - | undefined; - service: "acr"; - type: TargetTypeArtifactRegistry2; + host?: SyncReconcileResponseHost4 | any | string | null | undefined; + password: string; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + port?: SyncReconcileResponsePort5 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: SyncReconcileResponseUsername5 | any | string | null | undefined; + service: "local-postgres"; + type: TargetTypePostgres5; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponsePullRoleArnSecretRef = { +export type SyncReconcileResponseDatabaseSecretRef5 = { key: string; name: string; }; -export type SyncReconcileResponsePullRoleArn = { +export type SyncReconcileResponseDatabase5 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponsePullRoleArnSecretRef; + secretRef: SyncReconcileResponseDatabaseSecretRef5; }; /** - * Reference to a Kubernetes Secret + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponsePushRoleArnSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponsePushRoleArn = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponsePushRoleArnSecretRef; -}; +export type SyncReconcileResponseDatabaseUnion4 = + | SyncReconcileResponseDatabase5 + | any + | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRepositoryPrefixSecretRef1 = { +export type SyncReconcileResponseHostSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseRepositoryPrefix1 = { +export type SyncReconcileResponseHost3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseRepositoryPrefixSecretRef1; + secretRef: SyncReconcileResponseHostSecretRef3; }; /** @@ -7480,62 +7644,24 @@ export type SyncReconcileResponseRepositoryPrefix1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseRepositoryPrefixUnion = - | SyncReconcileResponseRepositoryPrefix1 +export type SyncReconcileResponseHostUnion3 = + | SyncReconcileResponseHost3 | any | string; -export const TargetTypeArtifactRegistry1 = { - ArtifactRegistry: "artifact_registry", -} as const; -export type TargetTypeArtifactRegistry1 = ClosedEnum< - typeof TargetTypeArtifactRegistry1 ->; - -/** - * AWS ECR (Elastic Container Registry) binding configuration - */ -export type SyncReconcileResponseExternalBindingsEcr = { - pullRoleArn?: any | null | undefined; - pushRoleArn?: any | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - repositoryPrefix?: - | SyncReconcileResponseRepositoryPrefix1 - | any - | string - | null - | undefined; - service: "ecr"; - type: TargetTypeArtifactRegistry1; -}; - -/** - * Service-type based artifact registry binding that supports multiple registry providers - */ -export type SyncReconcileResponseExternalBindingsUnion4 = - | SyncReconcileResponseExternalBindingsEcr - | SyncReconcileResponseExternalBindingsAcr - | SyncReconcileResponseExternalBindingsGar - | SyncReconcileResponseExternalBindingsLocal; - /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseDataDirSecretRef1 = { +export type SyncReconcileResponsePortSecretRef4 = { key: string; name: string; }; -export type SyncReconcileResponseDataDir1 = { +export type SyncReconcileResponsePort4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseDataDirSecretRef1; + secretRef: SyncReconcileResponsePortSecretRef4; }; /** @@ -7544,60 +7670,99 @@ export type SyncReconcileResponseDataDir1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseDataDirUnion1 = - | SyncReconcileResponseDataDir1 - | any - | string; +export type SyncReconcileResponsePortUnion4 = + | SyncReconcileResponsePort4 + | number + | any; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseKeyPrefixSecretRef2 = { +export type SyncReconcileResponseUsernameSecretRef4 = { key: string; name: string; }; -export type SyncReconcileResponseKeyPrefix2 = { +export type SyncReconcileResponseUsername4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseKeyPrefixSecretRef2; + secretRef: SyncReconcileResponseUsernameSecretRef4; }; -export const TargetTypeKv5 = { - Kv: "kv", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseUsernameUnion4 = + | SyncReconcileResponseUsername4 + | any + | string; + +export const TargetTypePostgres4 = { + Postgres: "postgres", } as const; -export type TargetTypeKv5 = ClosedEnum; +export type TargetTypePostgres4 = ClosedEnum; /** - * Local development KV binding configuration + * Operator-provided / BYO database binding. */ -export type SyncReconcileResponseExternalBindingsLocalKv = { +export type SyncReconcileResponseExternalBindingsExternal = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - dataDir?: SyncReconcileResponseDataDir1 | any | string | null | undefined; - keyPrefix?: any | null | undefined; - service: "local-kv"; - type: TargetTypeKv5; + database?: SyncReconcileResponseDatabase5 | any | string | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + host?: SyncReconcileResponseHost3 | any | string | null | undefined; + /** + * Connection password as a concrete value, never an unresolved `SecretRef`: the platform + * + * @remarks + * materializes the Kubernetes secret into the pod env. The cloud variants carry a secret + * locator instead. + */ + password: string; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + port?: SyncReconcileResponsePort4 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: SyncReconcileResponseUsername4 | any | string | null | undefined; + service: "external"; + type: TargetTypePostgres4; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseConnectionUrlSecretRef = { +export type SyncReconcileResponseDatabaseSecretRef4 = { key: string; name: string; }; -export type SyncReconcileResponseConnectionUrl = { +export type SyncReconcileResponseDatabase4 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseConnectionUrlSecretRef; + secretRef: SyncReconcileResponseDatabaseSecretRef4; }; /** @@ -7606,81 +7771,50 @@ export type SyncReconcileResponseConnectionUrl = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseConnectionUrlUnion = - | SyncReconcileResponseConnectionUrl +export type SyncReconcileResponseDatabaseUnion3 = + | SyncReconcileResponseDatabase4 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseDatabaseSecretRef1 = { +export type SyncReconcileResponseHostSecretRef2 = { key: string; name: string; }; -export type SyncReconcileResponseDatabase1 = { +export type SyncReconcileResponseHost2 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseDatabaseSecretRef1; + secretRef: SyncReconcileResponseHostSecretRef2; }; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseHostUnion2 = + | SyncReconcileResponseHost2 + | any + | string; + /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseKeyPrefixSecretRef1 = { +export type SyncReconcileResponsePasswordSecretUriSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseKeyPrefix1 = { +export type SyncReconcileResponsePasswordSecretUri = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseKeyPrefixSecretRef1; -}; - -export const TargetTypeKv4 = { - Kv: "kv", -} as const; -export type TargetTypeKv4 = ClosedEnum; - -/** - * Redis KV binding configuration - */ -export type SyncReconcileResponseExternalBindingsRedis = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - connectionUrl?: - | SyncReconcileResponseConnectionUrl - | any - | string - | null - | undefined; - database?: any | null | undefined; - keyPrefix?: any | null | undefined; - service: "redis"; - type: TargetTypeKv4; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseAccountNameSecretRef2 = { - key: string; - name: string; -}; - -export type SyncReconcileResponseAccountName2 = { - /** - * Reference to a Kubernetes Secret - */ - secretRef: SyncReconcileResponseAccountNameSecretRef2; + secretRef: SyncReconcileResponsePasswordSecretUriSecretRef; }; /** @@ -7689,24 +7823,24 @@ export type SyncReconcileResponseAccountName2 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseAccountNameUnion2 = - | SyncReconcileResponseAccountName2 +export type SyncReconcileResponsePasswordSecretUriUnion = + | SyncReconcileResponsePasswordSecretUri | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseResourceGroupNameSecretRef1 = { +export type SyncReconcileResponsePortSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseResourceGroupName1 = { +export type SyncReconcileResponsePort3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseResourceGroupNameSecretRef1; + secretRef: SyncReconcileResponsePortSecretRef3; }; /** @@ -7715,24 +7849,24 @@ export type SyncReconcileResponseResourceGroupName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseResourceGroupNameUnion1 = - | SyncReconcileResponseResourceGroupName1 - | any - | string; +export type SyncReconcileResponsePortUnion3 = + | SyncReconcileResponsePort3 + | number + | any; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseTableNameSecretRef2 = { +export type SyncReconcileResponseUsernameSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseTableName2 = { +export type SyncReconcileResponseUsername3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseTableNameSecretRef2; + secretRef: SyncReconcileResponseUsernameSecretRef3; }; /** @@ -7741,40 +7875,42 @@ export type SyncReconcileResponseTableName2 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseTableNameUnion2 = - | SyncReconcileResponseTableName2 +export type SyncReconcileResponseUsernameUnion3 = + | SyncReconcileResponseUsername3 | any | string; -export const TargetTypeKv3 = { - Kv: "kv", +export const TargetTypePostgres3 = { + Postgres: "postgres", } as const; -export type TargetTypeKv3 = ClosedEnum; +export type TargetTypePostgres3 = ClosedEnum; /** - * Azure Table Storage KV binding configuration + * Azure Flexible Server binding. */ -export type SyncReconcileResponseExternalBindingsTablestorage = { +export type SyncReconcileResponseExternalBindingsFlexibleServer = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - accountName?: - | SyncReconcileResponseAccountName2 - | any - | string - | null - | undefined; + database?: SyncReconcileResponseDatabase4 | any | string | null | undefined; /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - resourceGroupName?: - | SyncReconcileResponseResourceGroupName1 + host?: SyncReconcileResponseHost2 | any | string | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + passwordSecretUri?: + | SyncReconcileResponsePasswordSecretUri | any | string | null @@ -7785,24 +7921,31 @@ export type SyncReconcileResponseExternalBindingsTablestorage = { * @remarks * or a reference to a Kubernetes Secret */ - tableName?: SyncReconcileResponseTableName2 | any | string | null | undefined; - service: "tablestorage"; - type: TargetTypeKv3; + port?: SyncReconcileResponsePort3 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: SyncReconcileResponseUsername3 | any | string | null | undefined; + service: "flexible-server"; + type: TargetTypePostgres3; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseCollectionNameSecretRef = { +export type SyncReconcileResponseDatabaseSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseCollectionName = { +export type SyncReconcileResponseDatabase3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseCollectionNameSecretRef; + secretRef: SyncReconcileResponseDatabaseSecretRef3; }; /** @@ -7811,24 +7954,24 @@ export type SyncReconcileResponseCollectionName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseCollectionNameUnion = - | SyncReconcileResponseCollectionName +export type SyncReconcileResponseDatabaseUnion2 = + | SyncReconcileResponseDatabase3 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseDatabaseIdSecretRef = { +export type SyncReconcileResponseHostSecretRef1 = { key: string; name: string; }; -export type SyncReconcileResponseDatabaseId = { +export type SyncReconcileResponseHost1 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseDatabaseIdSecretRef; + secretRef: SyncReconcileResponseHostSecretRef1; }; /** @@ -7837,24 +7980,24 @@ export type SyncReconcileResponseDatabaseId = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseDatabaseIdUnion = - | SyncReconcileResponseDatabaseId +export type SyncReconcileResponseHostUnion1 = + | SyncReconcileResponseHost1 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseProjectIdSecretRef = { +export type SyncReconcileResponsePasswordSecretNameSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseProjectId = { +export type SyncReconcileResponsePasswordSecretName = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseProjectIdSecretRef; + secretRef: SyncReconcileResponsePasswordSecretNameSecretRef; }; /** @@ -7863,40 +8006,94 @@ export type SyncReconcileResponseProjectId = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseProjectIdUnion = - | SyncReconcileResponseProjectId +export type SyncReconcileResponsePasswordSecretNameUnion = + | SyncReconcileResponsePasswordSecretName | any | string; -export const TargetTypeKv2 = { - Kv: "kv", +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponsePortSecretRef2 = { + key: string; + name: string; +}; + +export type SyncReconcileResponsePort2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponsePortSecretRef2; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponsePortUnion2 = + | SyncReconcileResponsePort2 + | number + | any; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseUsernameSecretRef2 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseUsername2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseUsernameSecretRef2; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseUsernameUnion2 = + | SyncReconcileResponseUsername2 + | any + | string; + +export const TargetTypePostgres2 = { + Postgres: "postgres", } as const; -export type TargetTypeKv2 = ClosedEnum; +export type TargetTypePostgres2 = ClosedEnum; /** - * GCP Firestore KV binding configuration + * GCP Cloud SQL binding. */ -export type SyncReconcileResponseExternalBindingsFirestore = { +export type SyncReconcileResponseExternalBindingsCloudSQL = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - collectionName?: - | SyncReconcileResponseCollectionName - | any - | string - | null - | undefined; + database?: SyncReconcileResponseDatabase3 | any | string | null | undefined; /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - databaseId?: - | SyncReconcileResponseDatabaseId + host?: SyncReconcileResponseHost1 | any | string | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + passwordSecretName?: + | SyncReconcileResponsePasswordSecretName | any | string | null @@ -7907,39 +8104,31 @@ export type SyncReconcileResponseExternalBindingsFirestore = { * @remarks * or a reference to a Kubernetes Secret */ - projectId?: SyncReconcileResponseProjectId | any | string | null | undefined; - service: "firestore"; - type: TargetTypeKv2; -}; - -/** - * Reference to a Kubernetes Secret - */ -export type SyncReconcileResponseEndpointUrlSecretRef = { - key: string; - name: string; -}; - -export type SyncReconcileResponseEndpointUrl = { + port?: SyncReconcileResponsePort2 | number | any | null | undefined; /** - * Reference to a Kubernetes Secret + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseEndpointUrlSecretRef; + username?: SyncReconcileResponseUsername2 | any | string | null | undefined; + service: "cloud-sql"; + type: TargetTypePostgres2; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRegionSecretRef = { +export type SyncReconcileResponseClusterEndpointSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseRegion = { +export type SyncReconcileResponseClusterEndpoint = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseRegionSecretRef; + secretRef: SyncReconcileResponseClusterEndpointSecretRef; }; /** @@ -7948,24 +8137,24 @@ export type SyncReconcileResponseRegion = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseRegionUnion = - | SyncReconcileResponseRegion +export type SyncReconcileResponseClusterEndpointUnion = + | SyncReconcileResponseClusterEndpoint | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseTableNameSecretRef1 = { +export type SyncReconcileResponseDatabaseSecretRef2 = { key: string; name: string; }; -export type SyncReconcileResponseTableName1 = { +export type SyncReconcileResponseDatabase2 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseTableNameSecretRef1; + secretRef: SyncReconcileResponseDatabaseSecretRef2; }; /** @@ -7974,62 +8163,24 @@ export type SyncReconcileResponseTableName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseTableNameUnion1 = - | SyncReconcileResponseTableName1 +export type SyncReconcileResponseDatabaseUnion1 = + | SyncReconcileResponseDatabase2 | any | string; -export const TargetTypeKv1 = { - Kv: "kv", -} as const; -export type TargetTypeKv1 = ClosedEnum; - -/** - * AWS DynamoDB KV binding configuration - */ -export type SyncReconcileResponseExternalBindingsDynamodb = { - endpointUrl?: any | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - region?: SyncReconcileResponseRegion | any | string | null | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - tableName?: SyncReconcileResponseTableName1 | any | string | null | undefined; - service: "dynamodb"; - type: TargetTypeKv1; -}; - -/** - * Represents a KV binding for key-value storage across platforms - */ -export type SyncReconcileResponseExternalBindingsUnion3 = - | SyncReconcileResponseExternalBindingsDynamodb - | SyncReconcileResponseExternalBindingsFirestore - | SyncReconcileResponseExternalBindingsTablestorage - | SyncReconcileResponseExternalBindingsRedis - | SyncReconcileResponseExternalBindingsLocalKv; - /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseQueuePathSecretRef = { +export type SyncReconcileResponsePasswordSecretArnSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseQueuePath = { +export type SyncReconcileResponsePasswordSecretArn = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseQueuePathSecretRef; + secretRef: SyncReconcileResponsePasswordSecretArnSecretRef; }; /** @@ -8038,44 +8189,24 @@ export type SyncReconcileResponseQueuePath = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseQueuePathUnion = - | SyncReconcileResponseQueuePath +export type SyncReconcileResponsePasswordSecretArnUnion = + | SyncReconcileResponsePasswordSecretArn | any | string; -export const TargetTypeQueue4 = { - Queue: "queue", -} as const; -export type TargetTypeQueue4 = ClosedEnum; - -/** - * Local queue parameters - */ -export type SyncReconcileResponseExternalBindingsLocalQueue = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - queuePath?: SyncReconcileResponseQueuePath | any | string | null | undefined; - service: "local-queue"; - type: TargetTypeQueue4; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseNamespaceSecretRef1 = { +export type SyncReconcileResponsePortSecretRef1 = { key: string; name: string; }; -export type SyncReconcileResponseNamespace1 = { +export type SyncReconcileResponsePort1 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseNamespaceSecretRef1; + secretRef: SyncReconcileResponsePortSecretRef1; }; /** @@ -8084,24 +8215,24 @@ export type SyncReconcileResponseNamespace1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseNamespaceUnion1 = - | SyncReconcileResponseNamespace1 - | any - | string; +export type SyncReconcileResponsePortUnion1 = + | SyncReconcileResponsePort1 + | number + | any; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseQueueNameSecretRef = { +export type SyncReconcileResponseUsernameSecretRef1 = { key: string; name: string; }; -export type SyncReconcileResponseQueueName = { +export type SyncReconcileResponseUsername1 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseQueueNameSecretRef; + secretRef: SyncReconcileResponseUsernameSecretRef1; }; /** @@ -8110,51 +8241,92 @@ export type SyncReconcileResponseQueueName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseQueueNameUnion = - | SyncReconcileResponseQueueName +export type SyncReconcileResponseUsernameUnion1 = + | SyncReconcileResponseUsername1 | any | string; -export const TargetTypeQueue3 = { - Queue: "queue", +export const TargetTypePostgres1 = { + Postgres: "postgres", } as const; -export type TargetTypeQueue3 = ClosedEnum; +export type TargetTypePostgres1 = ClosedEnum; /** - * Azure Service Bus parameters + * AWS Aurora Serverless v2 binding. */ -export type SyncReconcileResponseExternalBindingsServicebus = { +export type SyncReconcileResponseExternalBindingsAurora = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - namespace?: SyncReconcileResponseNamespace1 | any | string | null | undefined; + clusterEndpoint?: + | SyncReconcileResponseClusterEndpoint + | any + | string + | null + | undefined; /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - queueName?: SyncReconcileResponseQueueName | any | string | null | undefined; - service: "servicebus"; - type: TargetTypeQueue3; + database?: SyncReconcileResponseDatabase2 | any | string | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + passwordSecretArn?: + | SyncReconcileResponsePasswordSecretArn + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + port?: SyncReconcileResponsePort1 | number | any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + username?: SyncReconcileResponseUsername1 | any | string | null | undefined; + service: "aurora"; + type: TargetTypePostgres1; }; +/** + * Connection details for a Postgres database, one variant per backend. + */ +export type SyncReconcileResponseExternalBindingsUnion6 = + | SyncReconcileResponseExternalBindingsAurora + | SyncReconcileResponseExternalBindingsCloudSQL + | SyncReconcileResponseExternalBindingsFlexibleServer + | SyncReconcileResponseExternalBindingsExternal + | SyncReconcileResponseExternalBindingsLocalPostgres; + /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseSubscriptionSecretRef = { +export type SyncReconcileResponseDefaultDomainSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseSubscription = { +export type SyncReconcileResponseDefaultDomain = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseSubscriptionSecretRef; + secretRef: SyncReconcileResponseDefaultDomainSecretRef; }; /** @@ -8163,24 +8335,24 @@ export type SyncReconcileResponseSubscription = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseSubscriptionUnion = - | SyncReconcileResponseSubscription +export type SyncReconcileResponseDefaultDomainUnion = + | SyncReconcileResponseDefaultDomain | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseTopicSecretRef = { +export type SyncReconcileResponseEnvironmentNameSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseTopic = { +export type SyncReconcileResponseEnvironmentName = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseTopicSecretRef; + secretRef: SyncReconcileResponseEnvironmentNameSecretRef; }; /** @@ -8189,56 +8361,24 @@ export type SyncReconcileResponseTopic = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseTopicUnion = - | SyncReconcileResponseTopic +export type SyncReconcileResponseEnvironmentNameUnion = + | SyncReconcileResponseEnvironmentName | any | string; -export const TargetTypeQueue2 = { - Queue: "queue", -} as const; -export type TargetTypeQueue2 = ClosedEnum; - -/** - * GCP Pub/Sub parameters - */ -export type SyncReconcileResponseExternalBindingsPubsub = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - subscription?: - | SyncReconcileResponseSubscription - | any - | string - | null - | undefined; - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - topic?: SyncReconcileResponseTopic | any | string | null | undefined; - service: "pubsub"; - type: TargetTypeQueue2; -}; - /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseQueueUrlSecretRef = { +export type SyncReconcileResponseResourceGroupNameSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseQueueUrl = { +export type SyncReconcileResponseResourceGroupName3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseQueueUrlSecretRef; + secretRef: SyncReconcileResponseResourceGroupNameSecretRef3; }; /** @@ -8247,53 +8387,24 @@ export type SyncReconcileResponseQueueUrl = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseQueueUrlUnion = - | SyncReconcileResponseQueueUrl +export type SyncReconcileResponseResourceGroupNameUnion3 = + | SyncReconcileResponseResourceGroupName3 | any | string; -export const TargetTypeQueue1 = { - Queue: "queue", -} as const; -export type TargetTypeQueue1 = ClosedEnum; - -/** - * AWS SQS queue parameters - */ -export type SyncReconcileResponseExternalBindingsSqs = { - /** - * Represents a value that can be either a concrete value, a template expression, - * - * @remarks - * or a reference to a Kubernetes Secret - */ - queueUrl?: SyncReconcileResponseQueueUrl | any | string | null | undefined; - service: "sqs"; - type: TargetTypeQueue1; -}; - -/** - * Binding parameters for Queue at runtime or in templates. - */ -export type SyncReconcileResponseExternalBindingsUnion2 = - | SyncReconcileResponseExternalBindingsSqs - | SyncReconcileResponseExternalBindingsPubsub - | SyncReconcileResponseExternalBindingsServicebus - | SyncReconcileResponseExternalBindingsLocalQueue; - /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseStoragePathSecretRef = { +export type SyncReconcileResponseResourceIdSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseStoragePath = { +export type SyncReconcileResponseResourceId = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseStoragePathSecretRef; + secretRef: SyncReconcileResponseResourceIdSecretRef; }; /** @@ -8302,49 +8413,108 @@ export type SyncReconcileResponseStoragePath = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseStoragePathUnion = - | SyncReconcileResponseStoragePath +export type SyncReconcileResponseResourceIdUnion = + | SyncReconcileResponseResourceId | any | string; -export const TargetTypeStorage4 = { - Storage: "storage", +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseStaticIpSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseStaticIp = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseStaticIpSecretRef; +}; + +export const TargetTypeContainerAppsEnvironment = { + ContainerAppsEnvironment: "container_apps_environment", } as const; -export type TargetTypeStorage4 = ClosedEnum; +export type TargetTypeContainerAppsEnvironment = ClosedEnum< + typeof TargetTypeContainerAppsEnvironment +>; /** - * Local filesystem storage binding configuration + * Binding configuration for a pre-existing Azure Container Apps Environment. + * + * @remarks + * + * Used when deploying to an existing environment instead of having Alien provision one. + * This is useful for shared environments (e.g., test infrastructure) or enterprise + * setups where environments are managed by a separate team. */ -export type SyncReconcileResponseExternalBindingsLocalStorage = { +export type SyncReconcileResponseExternalBindingsContainerAppsEnvironment = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - storagePath?: - | SyncReconcileResponseStoragePath + defaultDomain?: + | SyncReconcileResponseDefaultDomain | any | string | null | undefined; - service: "local-storage"; - type: TargetTypeStorage4; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + environmentName?: + | SyncReconcileResponseEnvironmentName + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + resourceGroupName?: + | SyncReconcileResponseResourceGroupName3 + | any + | string + | null + | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + resourceId?: + | SyncReconcileResponseResourceId + | any + | string + | null + | undefined; + staticIp?: any | null | undefined; + type: TargetTypeContainerAppsEnvironment; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseBucketNameSecretRef2 = { +export type SyncReconcileResponseDataDirSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseBucketName2 = { +export type SyncReconcileResponseDataDir3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseBucketNameSecretRef2; + secretRef: SyncReconcileResponseDataDirSecretRef3; }; /** @@ -8353,49 +8523,48 @@ export type SyncReconcileResponseBucketName2 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseBucketNameUnion2 = - | SyncReconcileResponseBucketName2 +export type SyncReconcileResponseDataDirUnion2 = + | SyncReconcileResponseDataDir3 | any | string; -export const TargetTypeStorage3 = { - Storage: "storage", +export const TargetTypeVault5 = { + Vault: "vault", } as const; -export type TargetTypeStorage3 = ClosedEnum; +export type TargetTypeVault5 = ClosedEnum; /** - * Google Cloud Storage binding configuration + * Local development vault binding (for testing/development) */ -export type SyncReconcileResponseExternalBindingsGcs = { +export type SyncReconcileResponseExternalBindingsLocalVault = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - bucketName?: - | SyncReconcileResponseBucketName2 - | any - | string - | null - | undefined; - service: "gcs"; - type: TargetTypeStorage3; + dataDir?: SyncReconcileResponseDataDir3 | any | string | null | undefined; + /** + * The vault name for local storage + */ + vaultName: string; + service: "local-vault"; + type: TargetTypeVault5; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseAccountNameSecretRef1 = { +export type SyncReconcileResponseNamespaceSecretRef2 = { key: string; name: string; }; -export type SyncReconcileResponseAccountName1 = { +export type SyncReconcileResponseNamespace2 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseAccountNameSecretRef1; + secretRef: SyncReconcileResponseNamespaceSecretRef2; }; /** @@ -8404,24 +8573,24 @@ export type SyncReconcileResponseAccountName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseAccountNameUnion1 = - | SyncReconcileResponseAccountName1 +export type SyncReconcileResponseNamespaceUnion2 = + | SyncReconcileResponseNamespace2 | any | string; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseContainerNameSecretRef = { +export type SyncReconcileResponseVaultPrefixSecretRef3 = { key: string; name: string; }; -export type SyncReconcileResponseContainerName = { +export type SyncReconcileResponseVaultPrefix3 = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseContainerNameSecretRef; + secretRef: SyncReconcileResponseVaultPrefixSecretRef3; }; /** @@ -8430,61 +8599,56 @@ export type SyncReconcileResponseContainerName = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseContainerNameUnion = - | SyncReconcileResponseContainerName +export type SyncReconcileResponseVaultPrefixUnion3 = + | SyncReconcileResponseVaultPrefix3 | any | string; -export const TargetTypeStorage2 = { - Storage: "storage", +export const TargetTypeVault4 = { + Vault: "vault", } as const; -export type TargetTypeStorage2 = ClosedEnum; +export type TargetTypeVault4 = ClosedEnum; /** - * Azure Blob Storage binding configuration + * Kubernetes Secrets vault binding configuration */ -export type SyncReconcileResponseExternalBindingsBlob = { +export type SyncReconcileResponseExternalBindingsKubernetesSecret = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - accountName?: - | SyncReconcileResponseAccountName1 - | any - | string - | null - | undefined; + namespace?: SyncReconcileResponseNamespace2 | any | string | null | undefined; /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - containerName?: - | SyncReconcileResponseContainerName + vaultPrefix?: + | SyncReconcileResponseVaultPrefix3 | any | string | null | undefined; - service: "blob"; - type: TargetTypeStorage2; + service: "kubernetes-secret"; + type: TargetTypeVault4; }; /** * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseBucketNameSecretRef1 = { +export type SyncReconcileResponseVaultNameSecretRef = { key: string; name: string; }; -export type SyncReconcileResponseBucketName1 = { +export type SyncReconcileResponseVaultName = { /** * Reference to a Kubernetes Secret */ - secretRef: SyncReconcileResponseBucketNameSecretRef1; + secretRef: SyncReconcileResponseVaultNameSecretRef; }; /** @@ -8493,4779 +8657,8777 @@ export type SyncReconcileResponseBucketName1 = { * @remarks * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseBucketNameUnion1 = - | SyncReconcileResponseBucketName1 +export type SyncReconcileResponseVaultNameUnion = + | SyncReconcileResponseVaultName | any | string; -export const TargetTypeStorage1 = { - Storage: "storage", +export const TargetTypeVault3 = { + Vault: "vault", } as const; -export type TargetTypeStorage1 = ClosedEnum; +export type TargetTypeVault3 = ClosedEnum; /** - * AWS S3 storage binding configuration + * Azure Key Vault binding configuration */ -export type SyncReconcileResponseExternalBindingsS3 = { +export type SyncReconcileResponseExternalBindingsKeyVault = { /** * Represents a value that can be either a concrete value, a template expression, * * @remarks * or a reference to a Kubernetes Secret */ - bucketName?: - | SyncReconcileResponseBucketName1 + vaultName?: SyncReconcileResponseVaultName | any | string | null | undefined; + service: "key-vault"; + type: TargetTypeVault3; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseVaultPrefixSecretRef2 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseVaultPrefix2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseVaultPrefixSecretRef2; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseVaultPrefixUnion2 = + | SyncReconcileResponseVaultPrefix2 + | any + | string; + +export const TargetTypeVault2 = { + Vault: "vault", +} as const; +export type TargetTypeVault2 = ClosedEnum; + +/** + * GCP Secret Manager vault binding configuration + */ +export type SyncReconcileResponseExternalBindingsSecretManager = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + vaultPrefix?: + | SyncReconcileResponseVaultPrefix2 | any | string | null | undefined; - service: "s3"; - type: TargetTypeStorage1; + service: "secret-manager"; + type: TargetTypeVault2; }; /** - * Service-type based storage binding that supports multiple storage providers + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseExternalBindingsUnion1 = - | SyncReconcileResponseExternalBindingsS3 - | SyncReconcileResponseExternalBindingsBlob - | SyncReconcileResponseExternalBindingsGcs - | SyncReconcileResponseExternalBindingsLocalStorage; +export type SyncReconcileResponseVaultPrefixSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseVaultPrefix1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseVaultPrefixSecretRef1; +}; /** - * Represents a binding to pre-existing infrastructure. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * The binding type must match the resource type it's applied to. - * Validated at runtime by the executor. + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseExternalBindingsUnion7 = - | SyncReconcileResponseExternalBindingsContainerAppsEnvironment - | SyncReconcileResponseExternalBindingsS3 - | SyncReconcileResponseExternalBindingsBlob - | SyncReconcileResponseExternalBindingsGcs - | SyncReconcileResponseExternalBindingsLocalStorage - | SyncReconcileResponseExternalBindingsSqs - | SyncReconcileResponseExternalBindingsPubsub - | SyncReconcileResponseExternalBindingsServicebus - | SyncReconcileResponseExternalBindingsLocalQueue - | SyncReconcileResponseExternalBindingsDynamodb - | SyncReconcileResponseExternalBindingsFirestore - | SyncReconcileResponseExternalBindingsTablestorage - | SyncReconcileResponseExternalBindingsRedis - | SyncReconcileResponseExternalBindingsLocalKv - | SyncReconcileResponseExternalBindingsEcr - | SyncReconcileResponseExternalBindingsAcr - | SyncReconcileResponseExternalBindingsGar - | SyncReconcileResponseExternalBindingsLocal - | SyncReconcileResponseExternalBindingsParameterStore - | SyncReconcileResponseExternalBindingsSecretManager - | SyncReconcileResponseExternalBindingsKeyVault - | SyncReconcileResponseExternalBindingsKubernetesSecret - | SyncReconcileResponseExternalBindingsLocalVault - | SyncReconcileResponseExternalBindingsAurora - | SyncReconcileResponseExternalBindingsCloudSQL - | SyncReconcileResponseExternalBindingsFlexibleServer - | SyncReconcileResponseExternalBindingsExternal - | SyncReconcileResponseExternalBindingsLocalPostgres; - -export const TargetPlatformKubernetes = { - Kubernetes: "kubernetes", -} as const; -export type TargetPlatformKubernetes = ClosedEnum< - typeof TargetPlatformKubernetes ->; - -export type SyncReconcileResponseManagementConfigKubernetes = { - platform: TargetPlatformKubernetes; -}; +export type SyncReconcileResponseVaultPrefixUnion1 = + | SyncReconcileResponseVaultPrefix1 + | any + | string; -export const TargetPlatformAzure = { - Azure: "azure", +export const TargetTypeVault1 = { + Vault: "vault", } as const; -export type TargetPlatformAzure = ClosedEnum; +export type TargetTypeVault1 = ClosedEnum; /** - * Azure management configuration extracted from stack settings + * AWS SSM Parameter Store vault binding configuration */ -export type SyncReconcileResponseManagementConfigAzure = { - /** - * The managing Azure Tenant ID for cross-tenant access - */ - managingTenantId: string; - /** - * OIDC issuer URL trusted by the target-side managed identity. - */ - oidcIssuer: string; +export type SyncReconcileResponseExternalBindingsParameterStore = { /** - * OIDC subject claim trusted by the target-side managed identity. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - oidcSubject: string; - platform: TargetPlatformAzure; + vaultPrefix?: + | SyncReconcileResponseVaultPrefix1 + | any + | string + | null + | undefined; + service: "parameter-store"; + type: TargetTypeVault1; }; -export const TargetPlatformGcp = { - Gcp: "gcp", -} as const; -export type TargetPlatformGcp = ClosedEnum; +/** + * Represents a vault binding for secure secret management + */ +export type SyncReconcileResponseExternalBindingsUnion5 = + | SyncReconcileResponseExternalBindingsParameterStore + | SyncReconcileResponseExternalBindingsSecretManager + | SyncReconcileResponseExternalBindingsKeyVault + | SyncReconcileResponseExternalBindingsKubernetesSecret + | SyncReconcileResponseExternalBindingsLocalVault; /** - * GCP management configuration extracted from stack settings + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseManagementConfigGcp = { +export type SyncReconcileResponseDataDirSecretRef2 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseDataDir2 = { /** - * Service account email for management roles + * Reference to a Kubernetes Secret */ - serviceAccountEmail: string; - platform: TargetPlatformGcp; + secretRef: SyncReconcileResponseDataDirSecretRef2; }; -export const TargetPlatformAws = { - Aws: "aws", -} as const; -export type TargetPlatformAws = ClosedEnum; - /** - * AWS management configuration extracted from stack settings + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseManagementConfigAws = { +export type SyncReconcileResponseRegistryUrlSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseRegistryUrl = { /** - * The managing AWS IAM role ARN that can assume cross-account roles + * Reference to a Kubernetes Secret */ - managingRoleArn: string; - platform: TargetPlatformAws; + secretRef: SyncReconcileResponseRegistryUrlSecretRef; }; -export type SyncReconcileResponseManagementConfigUnion = - | SyncReconcileResponseManagementConfigAzure - | SyncReconcileResponseManagementConfigAws - | SyncReconcileResponseManagementConfigGcp - | SyncReconcileResponseManagementConfigKubernetes - | any; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseRegistryUrlUnion = + | SyncReconcileResponseRegistryUrl + | any + | string; + +export const TargetTypeArtifactRegistry4 = { + ArtifactRegistry: "artifact_registry", +} as const; +export type TargetTypeArtifactRegistry4 = ClosedEnum< + typeof TargetTypeArtifactRegistry4 +>; /** - * OTLP log export configuration for a deployment. + * Local container registry binding configuration. * * @remarks * - * When set, injected compute runtimes export captured application logs - * through the given endpoint via OTLP/HTTP; which resources are injected - * is platform-dependent. Workers read auth headers from a runtime-only - * secret. Runtime-less Containers and Daemons receive standard OTEL auth - * variables only at the final hosting boundary: Local passes them directly - * to the process and Kubernetes projects them from a per-workload Secret. + * The local registry runs on localhost only and does not require authentication. + * Security boundary is the OS process isolation on the customer's machine. + * External image access is secured by the manager's registry proxy (deployment tokens). */ -export type SyncReconcileResponseMonitoring = { - /** - * Auth header value in "key=value,..." format. - * - * @remarks - * Example: "authorization=Bearer " - */ - logsAuthHeader: string; - /** - * Full OTLP logs endpoint URL. - * - * @remarks - * Example: "https:///v1/logs" - */ - logsEndpoint: string; - /** - * Auth header value for the metrics endpoint in "key=value,..." format (optional). - * - * @remarks - * - * When absent, `logs_auth_header` is reused for metrics -- suitable when the same - * credential covers both signals. When present (e.g. Axiom with separate datasets), - * this value is used exclusively for metrics. - * - * Example: "authorization=Bearer ,x-axiom-dataset=" - */ - metricsAuthHeader?: string | null | undefined; +export type SyncReconcileResponseExternalBindingsLocal = { /** - * Full OTLP metrics endpoint URL (optional). + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * When set, the worker runtime exports its own VM/container orchestration metrics here. - * Example: "https://api.axiom.co/v1/metrics" + * or a reference to a Kubernetes Secret */ - metricsEndpoint?: string | null | undefined; + dataDir?: any | null | undefined; /** - * Resource attributes attached to every OTLP signal emitted for this deployment. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Platform managers use this for stable identity such as `alien.workspace_id`, - * `alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`. - * Runtime-specific resource attributes such as `service.name` remain owned by - * the runtime/exporter. + * or a reference to a Kubernetes Secret */ - resourceAttributes?: { [k: string]: string } | undefined; + registryUrl?: + | SyncReconcileResponseRegistryUrl + | any + | string + | null + | undefined; + service: "local"; + type: TargetTypeArtifactRegistry4; }; -export type SyncReconcileResponseMonitoringUnion = - | SyncReconcileResponseMonitoring - | any; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponsePullServiceAccountEmailSecretRef = { + key: string; + name: string; +}; -export type SyncReconcileResponsePoolsAutoscale = { - /** - * Provider machine type selected for this deployment. - */ - machine?: string | null | undefined; - /** - * Maximum machine count. - */ - max: number; +export type SyncReconcileResponsePullServiceAccountEmail = { /** - * Minimum machine count. + * Reference to a Kubernetes Secret */ - min: number; - mode: "autoscale"; + secretRef: SyncReconcileResponsePullServiceAccountEmailSecretRef; }; -export type SyncReconcileResponsePoolsFixed = { - /** - * Provider machine type selected for this deployment. - */ - machine?: string | null | undefined; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponsePushServiceAccountEmailSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponsePushServiceAccountEmail = { /** - * Number of machines to run. + * Reference to a Kubernetes Secret */ - machines: number; - mode: "fixed"; + secretRef: SyncReconcileResponsePushServiceAccountEmailSecretRef; }; /** - * User-selected deployment settings for one compute pool. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponsePoolsUnion = - | SyncReconcileResponsePoolsFixed - | SyncReconcileResponsePoolsAutoscale; +export type SyncReconcileResponseRepositoryNameSecretRef = { + key: string; + name: string; +}; -/** - * Deployment-time compute choices for Alien-managed compute pools. - * - * @remarks - * - * Application source declares portable pool requirements. This settings - * object stores the concrete choices made for one deployment, such as the - * provider machine type and selected machine counts. - */ -export type SyncReconcileResponseCompute = { +export type SyncReconcileResponseRepositoryName = { /** - * Selected compute choices keyed by pool ID. + * Reference to a Kubernetes Secret */ - pools?: { - [k: string]: - | SyncReconcileResponsePoolsFixed - | SyncReconcileResponsePoolsAutoscale; - } | undefined; + secretRef: SyncReconcileResponseRepositoryNameSecretRef; }; -export type SyncReconcileResponseComputeUnion = - | SyncReconcileResponseCompute - | any; - /** - * Deployment model: how updates are delivered to the remote environment. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export const SyncReconcileResponseDeploymentModel = { - Push: "push", - Pull: "pull", +export type SyncReconcileResponseRepositoryNameUnion = + | SyncReconcileResponseRepositoryName + | any + | string; + +export const TargetTypeArtifactRegistry3 = { + ArtifactRegistry: "artifact_registry", } as const; -/** - * Deployment model: how updates are delivered to the remote environment. - */ -export type SyncReconcileResponseDeploymentModel = ClosedEnum< - typeof SyncReconcileResponseDeploymentModel +export type TargetTypeArtifactRegistry3 = ClosedEnum< + typeof TargetTypeArtifactRegistry3 >; -export type SyncReconcileResponseAwsStackSettings = { - certificateArn: string; -}; - -export type SyncReconcileResponseStackSettingsAwsUnion = - | SyncReconcileResponseAwsStackSettings - | any; - -export type AzureTargetStackSettings = { - keyVaultCertificateId: string; - keyVaultResourceId?: string | null | undefined; -}; - -export type TargetStackSettingsAzureUnion = AzureTargetStackSettings | any; - -export type GcpTargetStackSettings = { - certificateName: string; -}; - -export type TargetStackSettingsGcpUnion = GcpTargetStackSettings | any; - /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Google Artifact Registry binding configuration */ -export type SyncReconcileResponseTlsSecretRef = { - /** - * Secret namespace. Defaults to the release namespace when omitted. - */ - namespace?: string | null | undefined; +export type SyncReconcileResponseExternalBindingsGar = { + pullServiceAccountEmail?: any | null | undefined; + pushServiceAccountEmail?: any | null | undefined; /** - * Secret name. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - secretName: string; + repositoryName?: + | SyncReconcileResponseRepositoryName + | any + | string + | null + | undefined; + service: "gar"; + type: TargetTypeArtifactRegistry3; }; -export type SyncReconcileResponseDomainsKubernetes = { +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseRegistryNameSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseRegistryName = { /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Reference to a Kubernetes Secret */ - tlsSecretRef: SyncReconcileResponseTlsSecretRef; + secretRef: SyncReconcileResponseRegistryNameSecretRef; }; -export type SyncReconcileResponseDomainsKubernetesUnion = - | SyncReconcileResponseDomainsKubernetes - | any; - /** - * Platform-specific certificate references for custom domains. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseDomainsCertificate = { - aws?: SyncReconcileResponseAwsStackSettings | any | null | undefined; - azure?: AzureTargetStackSettings | any | null | undefined; - gcp?: GcpTargetStackSettings | any | null | undefined; - kubernetes?: SyncReconcileResponseDomainsKubernetes | any | null | undefined; -}; +export type SyncReconcileResponseRegistryNameUnion = + | SyncReconcileResponseRegistryName + | any + | string; /** - * Custom domain configuration for a single resource. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseCustomDomains = { - /** - * Platform-specific certificate references for custom domains. - */ - certificate: SyncReconcileResponseDomainsCertificate; +export type SyncReconcileResponseRepositoryPrefixSecretRef2 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseRepositoryPrefix2 = { /** - * Fully qualified domain name to use. + * Reference to a Kubernetes Secret */ - domain: string; + secretRef: SyncReconcileResponseRepositoryPrefixSecretRef2; }; -export const SyncReconcileResponseModeLoadBalancer = { - LoadBalancer: "loadBalancer", -} as const; -export type SyncReconcileResponseModeLoadBalancer = ClosedEnum< - typeof SyncReconcileResponseModeLoadBalancer ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseResourceGroupNameSecretRef2 = { + key: string; + name: string; +}; -export type SyncReconcileResponsePublicEndpointTargetLoadBalancer = { +export type SyncReconcileResponseResourceGroupName2 = { /** - * DNS name or URL for the external load balancer. + * Reference to a Kubernetes Secret */ - cnameTarget: string; - mode: SyncReconcileResponseModeLoadBalancer; + secretRef: SyncReconcileResponseResourceGroupNameSecretRef2; }; -export const SyncReconcileResponseModeMachineAddresses = { - MachineAddresses: "machineAddresses", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseResourceGroupNameUnion2 = + | SyncReconcileResponseResourceGroupName2 + | any + | string; + +export const TargetTypeArtifactRegistry2 = { + ArtifactRegistry: "artifact_registry", } as const; -export type SyncReconcileResponseModeMachineAddresses = ClosedEnum< - typeof SyncReconcileResponseModeMachineAddresses +export type TargetTypeArtifactRegistry2 = ClosedEnum< + typeof TargetTypeArtifactRegistry2 >; -export type SyncReconcileResponsePublicEndpointTargetMachineAddresses = { - mode: SyncReconcileResponseModeMachineAddresses; -}; - -export type SyncReconcileResponsePublicEndpointTargetUnion = - | SyncReconcileResponsePublicEndpointTargetLoadBalancer - | SyncReconcileResponsePublicEndpointTargetMachineAddresses - | any; - /** - * Domain configuration for the stack. - * - * @remarks - * - * When `custom_domains` is set, the specified resources use customer-provided - * domains and certificates. Otherwise, Alien auto-generates domains. + * Azure Container Registry binding configuration */ -export type SyncReconcileResponseDomains = { +export type SyncReconcileResponseExternalBindingsAcr = { /** - * Custom domain configuration per resource ID. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - customDomains?: - | { [k: string]: SyncReconcileResponseCustomDomains } + registryName?: + | SyncReconcileResponseRegistryName + | any + | string | null | undefined; - publicEndpointTarget?: - | SyncReconcileResponsePublicEndpointTargetLoadBalancer - | SyncReconcileResponsePublicEndpointTargetMachineAddresses + repositoryPrefix?: any | null | undefined; + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + resourceGroupName?: + | SyncReconcileResponseResourceGroupName2 | any + | string | null | undefined; + service: "acr"; + type: TargetTypeArtifactRegistry2; }; -export type SyncReconcileResponseDomainsUnion = - | SyncReconcileResponseDomains - | any; - /** - * External bindings for pre-existing infrastructure. - * - * @remarks - * Allows using existing resources (MinIO, Redis, shared Container Apps - * Environment, etc.) instead of having Alien provision them. - * Required for Kubernetes platform, optional for cloud platforms. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseStackSettingsExternalBindings = {}; +export type SyncReconcileResponsePullRoleArnSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponsePullRoleArn = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponsePullRoleArnSecretRef; +}; /** - * How heartbeat health checks are handled. + * Reference to a Kubernetes Secret */ -export const SyncReconcileResponseHeartbeats = { - Off: "off", - On: "on", -} as const; -/** - * How heartbeat health checks are handled. - */ -export type SyncReconcileResponseHeartbeats = ClosedEnum< - typeof SyncReconcileResponseHeartbeats ->; +export type SyncReconcileResponsePushRoleArnSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponsePushRoleArn = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponsePushRoleArnSecretRef; +}; /** - * Optional provider-specific identity for a cloud-backed Kubernetes cluster. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseCloud = { - accountId?: string | null | undefined; - clusterId?: string | null | undefined; - clusterName?: string | null | undefined; - projectId?: string | null | undefined; - region?: string | null | undefined; - resourceGroup?: string | null | undefined; - subscriptionId?: string | null | undefined; +export type SyncReconcileResponseRepositoryPrefixSecretRef1 = { + key: string; + name: string; }; -export type SyncReconcileResponseCloudUnion = SyncReconcileResponseCloud | any; +export type SyncReconcileResponseRepositoryPrefix1 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseRepositoryPrefixSecretRef1; +}; /** - * Ownership model for the Kubernetes cluster. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export const SyncReconcileResponseOwnership = { - Managed: "managed", - Existing: "existing", - External: "external", +export type SyncReconcileResponseRepositoryPrefixUnion = + | SyncReconcileResponseRepositoryPrefix1 + | any + | string; + +export const TargetTypeArtifactRegistry1 = { + ArtifactRegistry: "artifact_registry", } as const; -/** - * Ownership model for the Kubernetes cluster. - */ -export type SyncReconcileResponseOwnership = ClosedEnum< - typeof SyncReconcileResponseOwnership +export type TargetTypeArtifactRegistry1 = ClosedEnum< + typeof TargetTypeArtifactRegistry1 >; /** - * Kubernetes cluster setup settings. + * AWS ECR (Elastic Container Registry) binding configuration */ -export type SyncReconcileResponseCluster = { - cloud?: SyncReconcileResponseCloud | any | null | undefined; +export type SyncReconcileResponseExternalBindingsEcr = { + pullRoleArn?: any | null | undefined; + pushRoleArn?: any | null | undefined; /** - * Namespace where the Alien chart and application resources run. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - namespace?: string | null | undefined; + repositoryPrefix?: + | SyncReconcileResponseRepositoryPrefix1 + | any + | string + | null + | undefined; + service: "ecr"; + type: TargetTypeArtifactRegistry1; +}; + +/** + * Service-type based artifact registry binding that supports multiple registry providers + */ +export type SyncReconcileResponseExternalBindingsUnion4 = + | SyncReconcileResponseExternalBindingsEcr + | SyncReconcileResponseExternalBindingsAcr + | SyncReconcileResponseExternalBindingsGar + | SyncReconcileResponseExternalBindingsLocal; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseDataDirSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseDataDir1 = { /** - * Ownership model for the Kubernetes cluster. + * Reference to a Kubernetes Secret */ - ownership: SyncReconcileResponseOwnership; + secretRef: SyncReconcileResponseDataDirSecretRef1; }; -export type SyncReconcileResponseClusterUnion = - | SyncReconcileResponseCluster - | any; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseDataDirUnion1 = + | SyncReconcileResponseDataDir1 + | any + | string; -export type SyncReconcileResponseCertificateNone2 = { - mode: "none"; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseKeyPrefixSecretRef2 = { + key: string; + name: string; }; -export type SyncReconcileResponseCertificateManagedTLSSecret2 = { - mode: "managedTlsSecret"; +export type SyncReconcileResponseKeyPrefix2 = { /** - * Secret name template. Runtime may substitute resource/deployment tokens. + * Reference to a Kubernetes Secret */ - secretNameTemplate: string; + secretRef: SyncReconcileResponseKeyPrefixSecretRef2; }; -export type SyncReconcileResponseCertificateAwsAcmArn2 = { +export const TargetTypeKv5 = { + Kv: "kv", +} as const; +export type TargetTypeKv5 = ClosedEnum; + +/** + * Local development KV binding configuration + */ +export type SyncReconcileResponseExternalBindingsLocalKv = { /** - * Existing ACM certificate ARN. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - certificateArn: string; - mode: "awsAcmArn"; + dataDir?: SyncReconcileResponseDataDir1 | any | string | null | undefined; + keyPrefix?: any | null | undefined; + service: "local-kv"; + type: TargetTypeKv5; }; -export type SyncReconcileResponseCertificateManagedAcmImport2 = { - mode: "managedAcmImport"; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseConnectionUrlSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseConnectionUrl = { /** - * ACM region. Defaults to the deployment region when omitted. + * Reference to a Kubernetes Secret */ - region?: string | null | undefined; + secretRef: SyncReconcileResponseConnectionUrlSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseConnectionUrlUnion = + | SyncReconcileResponseConnectionUrl + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseDatabaseSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseDatabase1 = { /** - * Tags applied to runtime-imported ACM certificates. + * Reference to a Kubernetes Secret */ - tags?: { [k: string]: string } | undefined; + secretRef: SyncReconcileResponseDatabaseSecretRef1; }; /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseCertificateTLSSecretRef2 = { +export type SyncReconcileResponseKeyPrefixSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseKeyPrefix1 = { /** - * Secret namespace. Defaults to the release namespace when omitted. + * Reference to a Kubernetes Secret */ - namespace?: string | null | undefined; + secretRef: SyncReconcileResponseKeyPrefixSecretRef1; +}; + +export const TargetTypeKv4 = { + Kv: "kv", +} as const; +export type TargetTypeKv4 = ClosedEnum; + +/** + * Redis KV binding configuration + */ +export type SyncReconcileResponseExternalBindingsRedis = { /** - * Secret name. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - secretName: string; - mode: "tlsSecretRef"; + connectionUrl?: + | SyncReconcileResponseConnectionUrl + | any + | string + | null + | undefined; + database?: any | null | undefined; + keyPrefix?: any | null | undefined; + service: "redis"; + type: TargetTypeKv4; }; /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseCertificateUnion2 = - | SyncReconcileResponseCertificateTLSSecretRef2 - | SyncReconcileResponseCertificateManagedAcmImport2 - | SyncReconcileResponseCertificateAwsAcmArn2 - | SyncReconcileResponseCertificateManagedTLSSecret2 - | SyncReconcileResponseCertificateNone2; - -export const SyncReconcileResponseModeCustom = { - Custom: "custom", -} as const; -export type SyncReconcileResponseModeCustom = ClosedEnum< - typeof SyncReconcileResponseModeCustom ->; +export type SyncReconcileResponseAccountNameSecretRef2 = { + key: string; + name: string; +}; -export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4 = - ClosedEnum< - typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4 - >; - -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers4 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4; - }; - -export const SyncReconcileResponseProviderGkeGatewayEnum4 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncReconcileResponseProviderGkeGatewayEnum4 = ClosedEnum< - typeof SyncReconcileResponseProviderGkeGatewayEnum4 ->; - -export type SyncReconcileResponseProviderGkeGateway4 = { - provider: SyncReconcileResponseProviderGkeGatewayEnum4; +export type SyncReconcileResponseAccountName2 = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncReconcileResponseAccountNameSecretRef2; }; -export const SyncReconcileResponseProviderAwsAlbEnum4 = { - AwsAlb: "awsAlb", -} as const; -export type SyncReconcileResponseProviderAwsAlbEnum4 = ClosedEnum< - typeof SyncReconcileResponseProviderAwsAlbEnum4 ->; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseAccountNameUnion2 = + | SyncReconcileResponseAccountName2 + | any + | string; -export type SyncReconcileResponseProviderAwsAlb4 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncReconcileResponseProviderAwsAlbEnum4; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; - /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. - */ - subnetIds?: Array | undefined; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseResourceGroupNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseResourceGroupName1 = { /** - * ALB target type, usually `ip`. + * Reference to a Kubernetes Secret */ - targetType: string; + secretRef: SyncReconcileResponseResourceGroupNameSecretRef1; }; -export type SyncReconcileResponseProviderUnion4 = - | SyncReconcileResponseProviderAwsAlb4 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers4 - | SyncReconcileResponseProviderGkeGateway4 - | any; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseResourceGroupNameUnion1 = + | SyncReconcileResponseResourceGroupName1 + | any + | string; /** - * Shared Gateway API route profile values. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRouteGateway2 = { - /** - * Annotations applied to route objects. - */ - annotations?: { [k: string]: string } | undefined; - /** - * Route controller identifier, for example a cloud Gateway controller. - */ - controller?: string | null | undefined; - /** - * GatewayClass selected for generated Gateways. - */ - gatewayClassName: string; - /** - * Labels applied to route objects. - */ - labels?: { [k: string]: string } | undefined; - /** - * Listener port, usually 443. - */ - listenerPort: number; - provider?: - | SyncReconcileResponseProviderAwsAlb4 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers4 - | SyncReconcileResponseProviderGkeGateway4 - | any - | null - | undefined; - routeApi: "gateway"; +export type SyncReconcileResponseTableNameSecretRef2 = { + key: string; + name: string; }; -export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3 = - ClosedEnum< - typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3 - >; - -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers3 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3; - }; - -export const SyncReconcileResponseProviderGkeGatewayEnum3 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncReconcileResponseProviderGkeGatewayEnum3 = ClosedEnum< - typeof SyncReconcileResponseProviderGkeGatewayEnum3 ->; - -export type SyncReconcileResponseProviderGkeGateway3 = { - provider: SyncReconcileResponseProviderGkeGatewayEnum3; +export type SyncReconcileResponseTableName2 = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncReconcileResponseTableNameSecretRef2; }; -export const SyncReconcileResponseProviderAwsAlbEnum3 = { - AwsAlb: "awsAlb", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseTableNameUnion2 = + | SyncReconcileResponseTableName2 + | any + | string; + +export const TargetTypeKv3 = { + Kv: "kv", } as const; -export type SyncReconcileResponseProviderAwsAlbEnum3 = ClosedEnum< - typeof SyncReconcileResponseProviderAwsAlbEnum3 ->; +export type TargetTypeKv3 = ClosedEnum; -export type SyncReconcileResponseProviderAwsAlb3 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncReconcileResponseProviderAwsAlbEnum3; +/** + * Azure Table Storage KV binding configuration + */ +export type SyncReconcileResponseExternalBindingsTablestorage = { /** - * Internet-facing or internal ALB scheme. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - scheme: string; + accountName?: + | SyncReconcileResponseAccountName2 + | any + | string + | null + | undefined; /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - subnetIds?: Array | undefined; + resourceGroupName?: + | SyncReconcileResponseResourceGroupName1 + | any + | string + | null + | undefined; /** - * ALB target type, usually `ip`. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - targetType: string; + tableName?: SyncReconcileResponseTableName2 | any | string | null | undefined; + service: "tablestorage"; + type: TargetTypeKv3; }; -export type SyncReconcileResponseProviderUnion3 = - | SyncReconcileResponseProviderAwsAlb3 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers3 - | SyncReconcileResponseProviderGkeGateway3 - | any; - /** - * Shared Ingress route profile values. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRouteIngress2 = { +export type SyncReconcileResponseCollectionNameSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseCollectionName = { /** - * Annotations applied to route objects. + * Reference to a Kubernetes Secret */ - annotations?: { [k: string]: string } | undefined; - /** - * Route controller identifier, for example `eks.amazonaws.com/alb`. - */ - controller?: string | null | undefined; + secretRef: SyncReconcileResponseCollectionNameSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseCollectionNameUnion = + | SyncReconcileResponseCollectionName + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseDatabaseIdSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseDatabaseId = { /** - * `spec.ingressClassName` for generated Ingresses. + * Reference to a Kubernetes Secret */ - ingressClassName: string; + secretRef: SyncReconcileResponseDatabaseIdSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseDatabaseIdUnion = + | SyncReconcileResponseDatabaseId + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseProjectIdSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseProjectId = { /** - * Labels applied to route objects. + * Reference to a Kubernetes Secret */ - labels?: { [k: string]: string } | undefined; - provider?: - | SyncReconcileResponseProviderAwsAlb3 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers3 - | SyncReconcileResponseProviderGkeGateway3 - | any - | null - | undefined; - routeApi: "ingress"; + secretRef: SyncReconcileResponseProjectIdSecretRef; }; /** - * Kubernetes route API selected for public endpoints. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseRouteUnion2 = - | SyncReconcileResponseRouteIngress2 - | SyncReconcileResponseRouteGateway2; +export type SyncReconcileResponseProjectIdUnion = + | SyncReconcileResponseProjectId + | any + | string; -export type SyncReconcileResponseExposureCustom = { +export const TargetTypeKv2 = { + Kv: "kv", +} as const; +export type TargetTypeKv2 = ClosedEnum; + +/** + * GCP Firestore KV binding configuration + */ +export type SyncReconcileResponseExternalBindingsFirestore = { /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - certificate: - | SyncReconcileResponseCertificateTLSSecretRef2 - | SyncReconcileResponseCertificateManagedAcmImport2 - | SyncReconcileResponseCertificateAwsAcmArn2 - | SyncReconcileResponseCertificateManagedTLSSecret2 - | SyncReconcileResponseCertificateNone2; + collectionName?: + | SyncReconcileResponseCollectionName + | any + | string + | null + | undefined; /** - * Hostname routed by the Kubernetes public endpoint. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - domain: string; - mode: SyncReconcileResponseModeCustom; + databaseId?: + | SyncReconcileResponseDatabaseId + | any + | string + | null + | undefined; /** - * Kubernetes route API selected for public endpoints. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - route: - | SyncReconcileResponseRouteIngress2 - | SyncReconcileResponseRouteGateway2; + projectId?: SyncReconcileResponseProjectId | any | string | null | undefined; + service: "firestore"; + type: TargetTypeKv2; }; -export type SyncReconcileResponseCertificateNone1 = { - mode: "none"; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseEndpointUrlSecretRef = { + key: string; + name: string; }; -export type SyncReconcileResponseCertificateManagedTLSSecret1 = { - mode: "managedTlsSecret"; +export type SyncReconcileResponseEndpointUrl = { /** - * Secret name template. Runtime may substitute resource/deployment tokens. + * Reference to a Kubernetes Secret */ - secretNameTemplate: string; + secretRef: SyncReconcileResponseEndpointUrlSecretRef; }; -export type SyncReconcileResponseCertificateAwsAcmArn1 = { - /** - * Existing ACM certificate ARN. - */ - certificateArn: string; - mode: "awsAcmArn"; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseRegionSecretRef = { + key: string; + name: string; }; -export type SyncReconcileResponseCertificateManagedAcmImport1 = { - mode: "managedAcmImport"; +export type SyncReconcileResponseRegion = { /** - * ACM region. Defaults to the deployment region when omitted. + * Reference to a Kubernetes Secret */ - region?: string | null | undefined; + secretRef: SyncReconcileResponseRegionSecretRef; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseRegionUnion = + | SyncReconcileResponseRegion + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseTableNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseTableName1 = { /** - * Tags applied to runtime-imported ACM certificates. + * Reference to a Kubernetes Secret */ - tags?: { [k: string]: string } | undefined; + secretRef: SyncReconcileResponseTableNameSecretRef1; }; /** - * Namespace-scoped Kubernetes TLS Secret reference. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseCertificateTLSSecretRef1 = { +export type SyncReconcileResponseTableNameUnion1 = + | SyncReconcileResponseTableName1 + | any + | string; + +export const TargetTypeKv1 = { + Kv: "kv", +} as const; +export type TargetTypeKv1 = ClosedEnum; + +/** + * AWS DynamoDB KV binding configuration + */ +export type SyncReconcileResponseExternalBindingsDynamodb = { + endpointUrl?: any | null | undefined; /** - * Secret namespace. Defaults to the release namespace when omitted. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - namespace?: string | null | undefined; + region?: SyncReconcileResponseRegion | any | string | null | undefined; /** - * Secret name. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - secretName: string; - mode: "tlsSecretRef"; + tableName?: SyncReconcileResponseTableName1 | any | string | null | undefined; + service: "dynamodb"; + type: TargetTypeKv1; }; /** - * Certificate publication or reference mode for Kubernetes public endpoints. + * Represents a KV binding for key-value storage across platforms */ -export type SyncReconcileResponseCertificateUnion1 = - | SyncReconcileResponseCertificateTLSSecretRef1 - | SyncReconcileResponseCertificateManagedAcmImport1 - | SyncReconcileResponseCertificateAwsAcmArn1 - | SyncReconcileResponseCertificateManagedTLSSecret1 - | SyncReconcileResponseCertificateNone1; +export type SyncReconcileResponseExternalBindingsUnion3 = + | SyncReconcileResponseExternalBindingsDynamodb + | SyncReconcileResponseExternalBindingsFirestore + | SyncReconcileResponseExternalBindingsTablestorage + | SyncReconcileResponseExternalBindingsRedis + | SyncReconcileResponseExternalBindingsLocalKv; -export const SyncReconcileResponseModeGenerated = { - Generated: "generated", -} as const; -export type SyncReconcileResponseModeGenerated = ClosedEnum< - typeof SyncReconcileResponseModeGenerated ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseQueuePathSecretRef = { + key: string; + name: string; +}; -export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2 = - ClosedEnum< - typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2 - >; - -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers2 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2; - }; - -export const SyncReconcileResponseProviderGkeGatewayEnum2 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncReconcileResponseProviderGkeGatewayEnum2 = ClosedEnum< - typeof SyncReconcileResponseProviderGkeGatewayEnum2 ->; - -export type SyncReconcileResponseProviderGkeGateway2 = { - provider: SyncReconcileResponseProviderGkeGatewayEnum2; +export type SyncReconcileResponseQueuePath = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncReconcileResponseQueuePathSecretRef; }; -export const SyncReconcileResponseProviderAwsAlbEnum2 = { - AwsAlb: "awsAlb", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseQueuePathUnion = + | SyncReconcileResponseQueuePath + | any + | string; + +export const TargetTypeQueue4 = { + Queue: "queue", } as const; -export type SyncReconcileResponseProviderAwsAlbEnum2 = ClosedEnum< - typeof SyncReconcileResponseProviderAwsAlbEnum2 ->; +export type TargetTypeQueue4 = ClosedEnum; -export type SyncReconcileResponseProviderAwsAlb2 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncReconcileResponseProviderAwsAlbEnum2; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; - /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. - */ - subnetIds?: Array | undefined; +/** + * Local queue parameters + */ +export type SyncReconcileResponseExternalBindingsLocalQueue = { /** - * ALB target type, usually `ip`. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - targetType: string; + queuePath?: SyncReconcileResponseQueuePath | any | string | null | undefined; + service: "local-queue"; + type: TargetTypeQueue4; }; -export type SyncReconcileResponseProviderUnion2 = - | SyncReconcileResponseProviderAwsAlb2 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers2 - | SyncReconcileResponseProviderGkeGateway2 - | any; - /** - * Shared Gateway API route profile values. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRouteGateway1 = { - /** - * Annotations applied to route objects. - */ - annotations?: { [k: string]: string } | undefined; - /** - * Route controller identifier, for example a cloud Gateway controller. - */ - controller?: string | null | undefined; - /** - * GatewayClass selected for generated Gateways. - */ - gatewayClassName: string; - /** - * Labels applied to route objects. - */ - labels?: { [k: string]: string } | undefined; +export type SyncReconcileResponseNamespaceSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseNamespace1 = { /** - * Listener port, usually 443. + * Reference to a Kubernetes Secret */ - listenerPort: number; - provider?: - | SyncReconcileResponseProviderAwsAlb2 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers2 - | SyncReconcileResponseProviderGkeGateway2 - | any - | null - | undefined; - routeApi: "gateway"; + secretRef: SyncReconcileResponseNamespaceSecretRef1; }; -export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1 = - { - AzureApplicationGatewayForContainers: - "azureApplicationGatewayForContainers", - } as const; -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1 = - ClosedEnum< - typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1 - >; - -export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers1 = - { - /** - * Optional ALB name when using BYO Application Gateway resources. - */ - albName?: string | null | undefined; - /** - * Optional ALB namespace when using BYO Application Gateway resources. - */ - albNamespace?: string | null | undefined; - /** - * Public or internal frontend exposure. - */ - frontend: string; - provider: - SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1; - }; +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseNamespaceUnion1 = + | SyncReconcileResponseNamespace1 + | any + | string; -export const SyncReconcileResponseProviderGkeGatewayEnum1 = { - GkeGateway: "gkeGateway", -} as const; -export type SyncReconcileResponseProviderGkeGatewayEnum1 = ClosedEnum< - typeof SyncReconcileResponseProviderGkeGatewayEnum1 ->; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseQueueNameSecretRef = { + key: string; + name: string; +}; -export type SyncReconcileResponseProviderGkeGateway1 = { - provider: SyncReconcileResponseProviderGkeGatewayEnum1; +export type SyncReconcileResponseQueueName = { /** - * Optional static address name for the Gateway frontend. + * Reference to a Kubernetes Secret */ - staticAddressName?: string | null | undefined; + secretRef: SyncReconcileResponseQueueNameSecretRef; }; -export const SyncReconcileResponseProviderAwsAlbEnum1 = { - AwsAlb: "awsAlb", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseQueueNameUnion = + | SyncReconcileResponseQueueName + | any + | string; + +export const TargetTypeQueue3 = { + Queue: "queue", } as const; -export type SyncReconcileResponseProviderAwsAlbEnum1 = ClosedEnum< - typeof SyncReconcileResponseProviderAwsAlbEnum1 ->; +export type TargetTypeQueue3 = ClosedEnum; -export type SyncReconcileResponseProviderAwsAlb1 = { - /** - * Optional ALB IP address type, such as `dualstack`. - */ - ipAddressType?: string | null | undefined; - provider: SyncReconcileResponseProviderAwsAlbEnum1; - /** - * Internet-facing or internal ALB scheme. - */ - scheme: string; +/** + * Azure Service Bus parameters + */ +export type SyncReconcileResponseExternalBindingsServicebus = { /** - * Explicit subnet IDs when the profile cannot rely on controller discovery. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - subnetIds?: Array | undefined; + namespace?: SyncReconcileResponseNamespace1 | any | string | null | undefined; /** - * ALB target type, usually `ip`. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - targetType: string; + queueName?: SyncReconcileResponseQueueName | any | string | null | undefined; + service: "servicebus"; + type: TargetTypeQueue3; }; -export type SyncReconcileResponseProviderUnion1 = - | SyncReconcileResponseProviderAwsAlb1 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers1 - | SyncReconcileResponseProviderGkeGateway1 - | any; - /** - * Shared Ingress route profile values. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseRouteIngress1 = { - /** - * Annotations applied to route objects. - */ - annotations?: { [k: string]: string } | undefined; +export type SyncReconcileResponseSubscriptionSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseSubscription = { /** - * Route controller identifier, for example `eks.amazonaws.com/alb`. + * Reference to a Kubernetes Secret */ - controller?: string | null | undefined; - /** - * `spec.ingressClassName` for generated Ingresses. - */ - ingressClassName: string; - /** - * Labels applied to route objects. - */ - labels?: { [k: string]: string } | undefined; - provider?: - | SyncReconcileResponseProviderAwsAlb1 - | SyncReconcileResponseProviderAzureApplicationGatewayForContainers1 - | SyncReconcileResponseProviderGkeGateway1 - | any - | null - | undefined; - routeApi: "ingress"; + secretRef: SyncReconcileResponseSubscriptionSecretRef; }; /** - * Kubernetes route API selected for public endpoints. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseRouteUnion1 = - | SyncReconcileResponseRouteIngress1 - | SyncReconcileResponseRouteGateway1; +export type SyncReconcileResponseSubscriptionUnion = + | SyncReconcileResponseSubscription + | any + | string; -export type SyncReconcileResponseExposureGenerated = { - /** - * Certificate publication or reference mode for Kubernetes public endpoints. - */ - certificate: - | SyncReconcileResponseCertificateTLSSecretRef1 - | SyncReconcileResponseCertificateManagedAcmImport1 - | SyncReconcileResponseCertificateAwsAcmArn1 - | SyncReconcileResponseCertificateManagedTLSSecret1 - | SyncReconcileResponseCertificateNone1; - mode: SyncReconcileResponseModeGenerated; - /** - * Kubernetes route API selected for public endpoints. - */ - route: - | SyncReconcileResponseRouteIngress1 - | SyncReconcileResponseRouteGateway1; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseTopicSecretRef = { + key: string; + name: string; }; -export const SyncReconcileResponseModeDisabled = { - Disabled: "disabled", -} as const; -export type SyncReconcileResponseModeDisabled = ClosedEnum< - typeof SyncReconcileResponseModeDisabled ->; - -export type SyncReconcileResponseExposureDisabled = { - mode: SyncReconcileResponseModeDisabled; +export type SyncReconcileResponseTopic = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseTopicSecretRef; }; -export type SyncReconcileResponseExposureUnion = - | SyncReconcileResponseExposureCustom - | SyncReconcileResponseExposureGenerated - | SyncReconcileResponseExposureDisabled - | any; - /** - * Kubernetes runtime substrate configuration. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * This controls how setup chooses the cluster backing `Platform::Kubernetes` - * deployments. When omitted, cloud-backed Kubernetes deployments default to a - * managed cluster and generic/on-prem Kubernetes defaults to an external - * cluster. + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseKubernetes = { - cluster?: SyncReconcileResponseCluster | any | null | undefined; - exposure?: - | SyncReconcileResponseExposureCustom - | SyncReconcileResponseExposureGenerated - | SyncReconcileResponseExposureDisabled - | any - | null - | undefined; -}; - -export type SyncReconcileResponseKubernetesUnion = - | SyncReconcileResponseKubernetes - | any; +export type SyncReconcileResponseTopicUnion = + | SyncReconcileResponseTopic + | any + | string; -export const TargetTypeByoVnetAzure = { - ByoVnetAzure: "byo-vnet-azure", +export const TargetTypeQueue2 = { + Queue: "queue", } as const; -export type TargetTypeByoVnetAzure = ClosedEnum; +export type TargetTypeQueue2 = ClosedEnum; -export type SyncReconcileResponseNetworkByoVnetAzure = { - /** - * Name of the dedicated classic Application Gateway subnet within the VNet. - */ - applicationGatewaySubnetName?: string | null | undefined; +/** + * GCP Pub/Sub parameters + */ +export type SyncReconcileResponseExternalBindingsPubsub = { /** - * Name of the dedicated subnet that hosts Private Endpoints (e.g. for a + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * Postgres Flexible Server). A Private Endpoint must not share the private - * subnet, which is already claimed by the Container Apps environment's - * `infrastructure_subnet_id`. Required only when the stack contains a - * Postgres resource; otherwise unused. - */ - privateEndpointSubnetName?: string | null | undefined; - /** - * Name of the private subnet within the VNet - */ - privateSubnetName: string; - /** - * Name of the public subnet within the VNet + * or a reference to a Kubernetes Secret */ - publicSubnetName: string; - type: TargetTypeByoVnetAzure; + subscription?: + | SyncReconcileResponseSubscription + | any + | string + | null + | undefined; /** - * The full resource ID of the existing VNet + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ - vnetResourceId: string; + topic?: SyncReconcileResponseTopic | any | string | null | undefined; + service: "pubsub"; + type: TargetTypeQueue2; }; -export const TargetTypeByoVpcGcp = { - ByoVpcGcp: "byo-vpc-gcp", -} as const; -export type TargetTypeByoVpcGcp = ClosedEnum; - -export type SyncReconcileResponseNetworkByoVpcGcp = { - /** - * The name of the existing VPC network - */ - networkName: string; - /** - * The region of the subnet - */ - region: string; - /** - * The name of the subnet to use - */ - subnetName: string; - type: TargetTypeByoVpcGcp; +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseQueueUrlSecretRef = { + key: string; + name: string; }; -export const TargetTypeByoVpcAws = { - ByoVpcAws: "byo-vpc-aws", -} as const; -export type TargetTypeByoVpcAws = ClosedEnum; - -export type SyncReconcileResponseNetworkByoVpcAws = { - /** - * IDs of private subnets - */ - privateSubnetIds: Array; - /** - * IDs of public subnets (required for public ingress) - */ - publicSubnetIds: Array; - /** - * Optional security group IDs to use - */ - securityGroupIds?: Array | undefined; - type: TargetTypeByoVpcAws; +export type SyncReconcileResponseQueueUrl = { /** - * The ID of the existing VPC + * Reference to a Kubernetes Secret */ - vpcId: string; + secretRef: SyncReconcileResponseQueueUrlSecretRef; }; -export const TargetTypeCreate = { - Create: "create", +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseQueueUrlUnion = + | SyncReconcileResponseQueueUrl + | any + | string; + +export const TargetTypeQueue1 = { + Queue: "queue", } as const; -export type TargetTypeCreate = ClosedEnum; +export type TargetTypeQueue1 = ClosedEnum; -export type SyncReconcileResponseNetworkCreate = { - /** - * Number of availability zones (default: 2). - */ - availabilityZones?: number | undefined; +/** + * AWS SQS queue parameters + */ +export type SyncReconcileResponseExternalBindingsSqs = { /** - * VPC/VNet CIDR block. If not specified, auto-generated from stack ID + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * to reduce conflicts (e.g., "10.{hash}.0.0/16"). + * or a reference to a Kubernetes Secret */ - cidr?: string | null | undefined; - type: TargetTypeCreate; -}; - -export const TargetTypeUseDefault = { - UseDefault: "use-default", -} as const; -export type TargetTypeUseDefault = ClosedEnum; - -export type SyncReconcileResponseNetworkUseDefault = { - type: TargetTypeUseDefault; + queueUrl?: SyncReconcileResponseQueueUrl | any | string | null | undefined; + service: "sqs"; + type: TargetTypeQueue1; }; -export type SyncReconcileResponseNetworkUnion = - | SyncReconcileResponseNetworkByoVpcAws - | SyncReconcileResponseNetworkByoVpcGcp - | SyncReconcileResponseNetworkByoVnetAzure - | SyncReconcileResponseNetworkUseDefault - | SyncReconcileResponseNetworkCreate - | any; +/** + * Binding parameters for Queue at runtime or in templates. + */ +export type SyncReconcileResponseExternalBindingsUnion2 = + | SyncReconcileResponseExternalBindingsSqs + | SyncReconcileResponseExternalBindingsPubsub + | SyncReconcileResponseExternalBindingsServicebus + | SyncReconcileResponseExternalBindingsLocalQueue; /** - * How telemetry (logs, metrics, traces) is handled. + * Reference to a Kubernetes Secret */ -export const SyncReconcileResponseTelemetry = { - Off: "off", - Auto: "auto", - ApprovalRequired: "approval-required", -} as const; +export type SyncReconcileResponseStoragePathSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseStoragePath = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseStoragePathSecretRef; +}; + /** - * How telemetry (logs, metrics, traces) is handled. + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseTelemetry = ClosedEnum< - typeof SyncReconcileResponseTelemetry ->; +export type SyncReconcileResponseStoragePathUnion = + | SyncReconcileResponseStoragePath + | any + | string; + +export const TargetTypeStorage4 = { + Storage: "storage", +} as const; +export type TargetTypeStorage4 = ClosedEnum; /** - * How updates are delivered to the deployment. + * Local filesystem storage binding configuration */ -export const SyncReconcileResponseUpdates = { - Auto: "auto", - ApprovalRequired: "approval-required", -} as const; +export type SyncReconcileResponseExternalBindingsLocalStorage = { + /** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ + storagePath?: + | SyncReconcileResponseStoragePath + | any + | string + | null + | undefined; + service: "local-storage"; + type: TargetTypeStorage4; +}; + /** - * How updates are delivered to the deployment. + * Reference to a Kubernetes Secret */ -export type SyncReconcileResponseUpdates = ClosedEnum< - typeof SyncReconcileResponseUpdates ->; +export type SyncReconcileResponseBucketNameSecretRef2 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseBucketName2 = { + /** + * Reference to a Kubernetes Secret + */ + secretRef: SyncReconcileResponseBucketNameSecretRef2; +}; /** - * User-customizable deployment settings specified at deploy time. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * These settings are provided by the customer via CloudFormation parameters, - * Terraform attributes, CLI flags, or Helm values. They customize how the - * deployment runs and what capabilities are enabled. - * - * **Key distinction**: StackSettings is user-customizable, while ManagementConfig - * is platform-derived (from the Manager's ServiceAccount). + * or a reference to a Kubernetes Secret */ -export type SyncReconcileResponseStackSettings = { - compute?: SyncReconcileResponseCompute | any | null | undefined; - /** - * Deployment model: how updates are delivered to the remote environment. - */ - deploymentModel?: SyncReconcileResponseDeploymentModel | undefined; - domains?: SyncReconcileResponseDomains | any | null | undefined; +export type SyncReconcileResponseBucketNameUnion2 = + | SyncReconcileResponseBucketName2 + | any + | string; + +export const TargetTypeStorage3 = { + Storage: "storage", +} as const; +export type TargetTypeStorage3 = ClosedEnum; + +/** + * Google Cloud Storage binding configuration + */ +export type SyncReconcileResponseExternalBindingsGcs = { /** - * External bindings for pre-existing infrastructure. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * Allows using existing resources (MinIO, Redis, shared Container Apps - * Environment, etc.) instead of having Alien provision them. - * Required for Kubernetes platform, optional for cloud platforms. - */ - externalBindings?: - | SyncReconcileResponseStackSettingsExternalBindings - | null - | undefined; - /** - * How heartbeat health checks are handled. + * or a reference to a Kubernetes Secret */ - heartbeats?: SyncReconcileResponseHeartbeats | undefined; - kubernetes?: SyncReconcileResponseKubernetes | any | null | undefined; - network?: - | SyncReconcileResponseNetworkByoVpcAws - | SyncReconcileResponseNetworkByoVpcGcp - | SyncReconcileResponseNetworkByoVnetAzure - | SyncReconcileResponseNetworkUseDefault - | SyncReconcileResponseNetworkCreate + bucketName?: + | SyncReconcileResponseBucketName2 | any + | string | null | undefined; + service: "gcs"; + type: TargetTypeStorage3; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseAccountNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseAccountName1 = { /** - * How telemetry (logs, metrics, traces) is handled. + * Reference to a Kubernetes Secret */ - telemetry?: SyncReconcileResponseTelemetry | undefined; + secretRef: SyncReconcileResponseAccountNameSecretRef1; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseAccountNameUnion1 = + | SyncReconcileResponseAccountName1 + | any + | string; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseContainerNameSecretRef = { + key: string; + name: string; +}; + +export type SyncReconcileResponseContainerName = { /** - * How updates are delivered to the deployment. + * Reference to a Kubernetes Secret */ - updates?: SyncReconcileResponseUpdates | undefined; + secretRef: SyncReconcileResponseContainerNameSecretRef; }; /** - * Deployment configuration + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Configuration for how to perform the deployment. - * Note: Credentials (ClientConfig) are passed separately to step() function. + * or a reference to a Kubernetes Secret */ -export type TargetConfig = { +export type SyncReconcileResponseContainerNameUnion = + | SyncReconcileResponseContainerName + | any + | string; + +export const TargetTypeStorage2 = { + Storage: "storage", +} as const; +export type TargetTypeStorage2 = ClosedEnum; + +/** + * Azure Blob Storage binding configuration + */ +export type SyncReconcileResponseExternalBindingsBlob = { /** - * Allow frozen resource changes during updates + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * When true, skips the frozen resources compatibility check. - * This requires running with elevated cloud credentials. + * or a reference to a Kubernetes Secret */ - allowFrozenChanges?: boolean | undefined; - basePlatform?: SyncReconcileResponseBasePlatformEnum | any | null | undefined; - computeBackend?: - | SyncReconcileResponseComputeBackendHorizon + accountName?: + | SyncReconcileResponseAccountName1 | any + | string | null | undefined; /** - * Human-readable deployment name for cloud console metadata. - * - * @remarks - * - * This is separate from the physical resource prefix in StackState. It is - * used only for display text such as IAM role descriptions, service - * account descriptions, and custom role titles. - */ - deploymentName?: string | null | undefined; - /** - * Deployment token for pull authentication with the manager's registry. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Used by controllers to configure registry credentials so cloud platforms - * and K8s can pull images from the manager's `/v2/` endpoint. - */ - deploymentToken?: string | null | undefined; - domainMetadata?: SyncReconcileResponseDomainMetadata | any | null | undefined; - /** - * Snapshot of environment variables at a point in time + * or a reference to a Kubernetes Secret */ - environmentVariables: SyncReconcileResponseEnvironmentVariables; + containerName?: + | SyncReconcileResponseContainerName + | any + | string + | null + | undefined; + service: "blob"; + type: TargetTypeStorage2; +}; + +/** + * Reference to a Kubernetes Secret + */ +export type SyncReconcileResponseBucketNameSecretRef1 = { + key: string; + name: string; +}; + +export type SyncReconcileResponseBucketName1 = { /** - * Map from resource ID to external binding. - * - * @remarks - * - * Validated at runtime: binding type must match resource type. + * Reference to a Kubernetes Secret */ - externalBindings?: { - [k: string]: - | SyncReconcileResponseExternalBindingsContainerAppsEnvironment - | SyncReconcileResponseExternalBindingsS3 - | SyncReconcileResponseExternalBindingsBlob - | SyncReconcileResponseExternalBindingsGcs - | SyncReconcileResponseExternalBindingsLocalStorage - | SyncReconcileResponseExternalBindingsSqs - | SyncReconcileResponseExternalBindingsPubsub - | SyncReconcileResponseExternalBindingsServicebus - | SyncReconcileResponseExternalBindingsLocalQueue - | SyncReconcileResponseExternalBindingsDynamodb - | SyncReconcileResponseExternalBindingsFirestore - | SyncReconcileResponseExternalBindingsTablestorage - | SyncReconcileResponseExternalBindingsRedis - | SyncReconcileResponseExternalBindingsLocalKv - | SyncReconcileResponseExternalBindingsEcr - | SyncReconcileResponseExternalBindingsAcr - | SyncReconcileResponseExternalBindingsGar - | SyncReconcileResponseExternalBindingsLocal - | SyncReconcileResponseExternalBindingsParameterStore - | SyncReconcileResponseExternalBindingsSecretManager - | SyncReconcileResponseExternalBindingsKeyVault - | SyncReconcileResponseExternalBindingsKubernetesSecret - | SyncReconcileResponseExternalBindingsLocalVault - | SyncReconcileResponseExternalBindingsAurora - | SyncReconcileResponseExternalBindingsCloudSQL - | SyncReconcileResponseExternalBindingsFlexibleServer - | SyncReconcileResponseExternalBindingsExternal - | SyncReconcileResponseExternalBindingsLocalPostgres; - } | undefined; + secretRef: SyncReconcileResponseBucketNameSecretRef1; +}; + +/** + * Represents a value that can be either a concrete value, a template expression, + * + * @remarks + * or a reference to a Kubernetes Secret + */ +export type SyncReconcileResponseBucketNameUnion1 = + | SyncReconcileResponseBucketName1 + | any + | string; + +export const TargetTypeStorage1 = { + Storage: "storage", +} as const; +export type TargetTypeStorage1 = ClosedEnum; + +/** + * AWS S3 storage binding configuration + */ +export type SyncReconcileResponseExternalBindingsS3 = { /** - * DNS-style label domain used for Kubernetes resource ownership labels. + * Represents a value that can be either a concrete value, a template expression, * * @remarks - * - * Defaults to `alien.dev` when absent. Whitelabeled Operator builds set this - * so generated workloads and optional log collectors share the same label - * namespace. + * or a reference to a Kubernetes Secret */ - labelDomain?: string | null | undefined; - managementConfig?: - | SyncReconcileResponseManagementConfigAzure - | SyncReconcileResponseManagementConfigAws - | SyncReconcileResponseManagementConfigGcp - | SyncReconcileResponseManagementConfigKubernetes + bucketName?: + | SyncReconcileResponseBucketName1 | any + | string | null | undefined; - /** - * Manager base URL (e.g., "https://manager.alien.dev"). - * - * @remarks - * - * The manager IS the container registry — its `/v2/` endpoint serves as - * the OCI Distribution API. Controllers derive the proxy host from this - * to configure pull auth (RegistryCredentials, imagePullSecrets). - * - * When None (e.g., `alien dev`), controllers use image URIs as-is. - */ - managerUrl?: string | null | undefined; - monitoring?: SyncReconcileResponseMonitoring | any | null | undefined; - /** - * Native image registry host+prefix for platforms that require it. - * - * @remarks - * - * Lambda (ECR) and Cloud Run (GAR) require native registry URIs. Other - * runtimes, including Azure Container Apps, pull through the manager's - * registry proxy. - * - * Derived by the manager from the artifact registry binding: - * - ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}` - * - GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}` - */ - nativeImageHost?: string | null | undefined; - /** - * When true the observe pass reports raw resources across every namespace - * - * @remarks - * (cluster scope); otherwise it stays within the operator's own namespace. - * The label selector, if any, still filters within whichever scope applies. - * Ignored by cloud observers. - */ - observeAllNamespaces?: boolean | undefined; - /** - * Kubernetes label selector that narrows which raw resources the observe - * - * @remarks - * pass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes - * everything in the namespace. Ignored by cloud observers. - */ - observeLabelSelector?: string | null | undefined; - /** - * Public endpoint URLs for exposed resources (optional override). - * - * @remarks - * - * Use this only when a caller already knows the public URL. Managed public - * endpoint flows should prefer `domain_metadata` plus controller-reported - * load balancer outputs so DNS, certificate renewal, and route readiness - * stay tied to the resource state. - * - * If not set, platforms determine public endpoint URLs from other sources: - * - Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS - * - Local: `http://localhost:{allocated_port}` - * - Custom or disabled exposure: no public endpoint URL unless a controller reports one - * - * Outer key: resource ID. Inner key: endpoint name. Value: public URL. - */ - publicEndpoints?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * User-customizable deployment settings specified at deploy time. - * - * @remarks - * - * These settings are provided by the customer via CloudFormation parameters, - * Terraform attributes, CLI flags, or Helm values. They customize how the - * deployment runs and what capabilities are enabled. - * - * **Key distinction**: StackSettings is user-customizable, while ManagementConfig - * is platform-derived (from the Manager's ServiceAccount). - */ - stackSettings?: SyncReconcileResponseStackSettings | undefined; + service: "s3"; + type: TargetTypeStorage1; }; -export const ReleaseInfoTypeStringList = { - StringList: "stringList", +/** + * Service-type based storage binding that supports multiple storage providers + */ +export type SyncReconcileResponseExternalBindingsUnion1 = + | SyncReconcileResponseExternalBindingsS3 + | SyncReconcileResponseExternalBindingsBlob + | SyncReconcileResponseExternalBindingsGcs + | SyncReconcileResponseExternalBindingsLocalStorage; + +/** + * Represents a binding to pre-existing infrastructure. + * + * @remarks + * + * The binding type must match the resource type it's applied to. + * Validated at runtime by the executor. + */ +export type SyncReconcileResponseExternalBindingsUnion7 = + | SyncReconcileResponseExternalBindingsContainerAppsEnvironment + | SyncReconcileResponseExternalBindingsS3 + | SyncReconcileResponseExternalBindingsBlob + | SyncReconcileResponseExternalBindingsGcs + | SyncReconcileResponseExternalBindingsLocalStorage + | SyncReconcileResponseExternalBindingsSqs + | SyncReconcileResponseExternalBindingsPubsub + | SyncReconcileResponseExternalBindingsServicebus + | SyncReconcileResponseExternalBindingsLocalQueue + | SyncReconcileResponseExternalBindingsDynamodb + | SyncReconcileResponseExternalBindingsFirestore + | SyncReconcileResponseExternalBindingsTablestorage + | SyncReconcileResponseExternalBindingsRedis + | SyncReconcileResponseExternalBindingsLocalKv + | SyncReconcileResponseExternalBindingsEcr + | SyncReconcileResponseExternalBindingsAcr + | SyncReconcileResponseExternalBindingsGar + | SyncReconcileResponseExternalBindingsLocal + | SyncReconcileResponseExternalBindingsParameterStore + | SyncReconcileResponseExternalBindingsSecretManager + | SyncReconcileResponseExternalBindingsKeyVault + | SyncReconcileResponseExternalBindingsKubernetesSecret + | SyncReconcileResponseExternalBindingsLocalVault + | SyncReconcileResponseExternalBindingsAurora + | SyncReconcileResponseExternalBindingsCloudSQL + | SyncReconcileResponseExternalBindingsFlexibleServer + | SyncReconcileResponseExternalBindingsExternal + | SyncReconcileResponseExternalBindingsLocalPostgres; + +export const TargetPlatformKubernetes = { + Kubernetes: "kubernetes", } as const; -export type ReleaseInfoTypeStringList = ClosedEnum< - typeof ReleaseInfoTypeStringList +export type TargetPlatformKubernetes = ClosedEnum< + typeof TargetPlatformKubernetes >; -export type DefaultReleaseInfoStringList = { - type: ReleaseInfoTypeStringList; - /** - * String list default. - */ - value: Array; +export type SyncReconcileResponseManagementConfigKubernetes = { + platform: TargetPlatformKubernetes; }; -export const ReleaseInfoTypeBoolean = { - Boolean: "boolean", +export const TargetPlatformAzure = { + Azure: "azure", } as const; -export type ReleaseInfoTypeBoolean = ClosedEnum; +export type TargetPlatformAzure = ClosedEnum; -export type DefaultReleaseInfoBoolean = { - type: ReleaseInfoTypeBoolean; +/** + * Azure management configuration extracted from stack settings + */ +export type SyncReconcileResponseManagementConfigAzure = { /** - * Boolean default. + * The managing Azure Tenant ID for cross-tenant access */ - value: boolean; -}; - -export const ReleaseInfoTypeNumber = { - Number: "number", -} as const; -export type ReleaseInfoTypeNumber = ClosedEnum; - -export type DefaultReleaseInfoNumber = { - type: ReleaseInfoTypeNumber; + managingTenantId: string; /** - * Number default. + * OIDC issuer URL trusted by the target-side managed identity. */ - value: string; + oidcIssuer: string; + /** + * OIDC subject claim trusted by the target-side managed identity. + */ + oidcSubject: string; + platform: TargetPlatformAzure; }; -export const ReleaseInfoTypeString = { - String: "string", +export const TargetPlatformGcp = { + Gcp: "gcp", } as const; -export type ReleaseInfoTypeString = ClosedEnum; +export type TargetPlatformGcp = ClosedEnum; -export type DefaultReleaseInfoString = { - type: ReleaseInfoTypeString; +/** + * GCP management configuration extracted from stack settings + */ +export type SyncReconcileResponseManagementConfigGcp = { /** - * String default. + * Service account email for management roles */ - value: string; + serviceAccountEmail: string; + platform: TargetPlatformGcp; }; -export type ReleaseInfoDefaultUnion = - | DefaultReleaseInfoString - | DefaultReleaseInfoNumber - | DefaultReleaseInfoBoolean - | DefaultReleaseInfoStringList - | any; - -/** - * Environment variable handling for a stack input mapping. - */ -export const TypeReleaseInfoEnvEnum = { - Plain: "plain", - Secret: "secret", +export const TargetPlatformAws = { + Aws: "aws", } as const; -/** - * Environment variable handling for a stack input mapping. - */ -export type TypeReleaseInfoEnvEnum = ClosedEnum; - -export type ReleaseInfoTypeUnion = TypeReleaseInfoEnvEnum | any; +export type TargetPlatformAws = ClosedEnum; /** - * How a resolved stack input is injected into runtime environment variables. + * AWS management configuration extracted from stack settings */ -export type ReleaseInfoEnv = { - /** - * Environment variable name. - */ - name: string; +export type SyncReconcileResponseManagementConfigAws = { /** - * Target resource IDs or patterns. None means every env-capable resource. + * The managing AWS IAM role ARN that can assume cross-account roles */ - targetResources?: Array | null | undefined; - type?: TypeReleaseInfoEnvEnum | any | null | undefined; + managingRoleArn: string; + platform: TargetPlatformAws; }; -/** - * Primitive stack input kind. - */ -export const ReleaseInfoKind = { - String: "string", - Secret: "secret", - Number: "number", - Integer: "integer", - Boolean: "boolean", - Enum: "enum", - StringList: "stringList", -} as const; -/** - * Primitive stack input kind. - */ -export type ReleaseInfoKind = ClosedEnum; - -/** - * Represents the target cloud platform. - */ -export const ReleaseInfoPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", -} as const; -/** - * Represents the target cloud platform. - */ -export type ReleaseInfoPlatform = ClosedEnum; - -/** - * Who can provide a stack input value. - */ -export const ReleaseInfoProvidedBy = { - Developer: "developer", - Deployer: "deployer", -} as const; -/** - * Who can provide a stack input value. - */ -export type ReleaseInfoProvidedBy = ClosedEnum; +export type SyncReconcileResponseManagementConfigUnion = + | SyncReconcileResponseManagementConfigAzure + | SyncReconcileResponseManagementConfigAws + | SyncReconcileResponseManagementConfigGcp + | SyncReconcileResponseManagementConfigKubernetes + | any; /** - * Portable stack input validation constraints. + * OTLP log export configuration for a deployment. + * + * @remarks + * + * When set, injected compute runtimes export captured application logs + * through the given endpoint via OTLP/HTTP; which resources are injected + * is platform-dependent. Workers read auth headers from a runtime-only + * secret. Runtime-less Containers and Daemons receive standard OTEL auth + * variables only at the final hosting boundary: Local passes them directly + * to the process and Kubernetes projects them from a per-workload Secret. */ -export type ValidationReleaseInfo = { - /** - * Semantic format hint such as url. - */ - format?: string | null | undefined; - /** - * Maximum number. - */ - max?: string | null | undefined; +export type SyncReconcileResponseMonitoring = { /** - * Maximum string-list items. + * Auth header value in "key=value,..." format. + * + * @remarks + * Example: "authorization=Bearer " */ - maxItems?: number | null | undefined; + logsAuthHeader: string; /** - * Maximum string length. + * Full OTLP logs endpoint URL. + * + * @remarks + * Example: "https:///v1/logs" */ - maxLength?: number | null | undefined; + logsEndpoint: string; /** - * Minimum number. + * Auth header value for the metrics endpoint in "key=value,..." format (optional). + * + * @remarks + * + * When absent, `logs_auth_header` is reused for metrics -- suitable when the same + * credential covers both signals. When present (e.g. Axiom with separate datasets), + * this value is used exclusively for metrics. + * + * Example: "authorization=Bearer ,x-axiom-dataset=" */ - min?: string | null | undefined; + metricsAuthHeader?: string | null | undefined; /** - * Minimum string-list items. + * Full OTLP metrics endpoint URL (optional). + * + * @remarks + * When set, the worker runtime exports its own VM/container orchestration metrics here. + * Example: "https://api.axiom.co/v1/metrics" */ - minItems?: number | null | undefined; + metricsEndpoint?: string | null | undefined; /** - * Minimum string length. + * Resource attributes attached to every OTLP signal emitted for this deployment. + * + * @remarks + * + * Platform managers use this for stable identity such as `alien.workspace_id`, + * `alien.project_id`, `alien.deployment_group_id`, and `alien.deployment_id`. + * Runtime-specific resource attributes such as `service.name` remain owned by + * the runtime/exporter. */ - minLength?: number | null | undefined; + resourceAttributes?: { [k: string]: string } | undefined; +}; + +export type SyncReconcileResponseMonitoringUnion = + | SyncReconcileResponseMonitoring + | any; + +/** + * Failure-domain policy selected for a compute pool. + */ +export type SyncReconcileResponseFailureDomains2 = { /** - * Portable whole-value regex pattern. + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. */ - pattern?: string | null | undefined; + selectedFailureDomains?: Array | undefined; /** - * Allowed string enum values. + * Number of distinct failure domains across which new stateful replicas may be spread. */ - values?: Array | null | undefined; + spread: number; }; -export type ReleaseInfoValidationUnion = ValidationReleaseInfo | any; +export type SyncReconcileResponseFailureDomainsUnion2 = + | SyncReconcileResponseFailureDomains2 + | any; -/** - * Stack input definition serialized into a release stack. - */ -export type ReleaseInfoInput = { - default?: - | DefaultReleaseInfoString - | DefaultReleaseInfoNumber - | DefaultReleaseInfoBoolean - | DefaultReleaseInfoStringList +export type SyncReconcileResponsePoolsAutoscale = { + failureDomains?: + | SyncReconcileResponseFailureDomains2 | any | null | undefined; /** - * Human-facing helper text. - */ - description: string; - /** - * Runtime env-var mappings for v1 input resolution. - */ - env?: Array | undefined; - /** - * Stable input ID used by CLI/API calls. - */ - id: string; - /** - * Primitive stack input kind. - */ - kind: ReleaseInfoKind; - /** - * Human-facing field label. - */ - label: string; - /** - * Example placeholder shown in UI. - */ - placeholder?: string | null | undefined; - /** - * Platforms where this input applies. + * Provider machine type selected for this deployment. */ - platforms?: Array | null | undefined; + machine?: string | null | undefined; /** - * Who can provide this value. + * Maximum machine count. */ - providedBy: Array; + max: number; /** - * Whether a resolved value is required before deployment can proceed. + * Minimum machine count. */ - required: boolean; - validation?: ValidationReleaseInfo | any | null | undefined; + min: number; + mode: "autoscale"; }; -export const ManagementReleaseInfoEnum = { - Auto: "auto", -} as const; -export type ManagementReleaseInfoEnum = ClosedEnum< - typeof ManagementReleaseInfoEnum ->; - /** - * AWS-specific binding specification + * Failure-domain policy selected for a compute pool. */ -export type OverrideReleaseInfoAwResource = { +export type SyncReconcileResponseFailureDomains1 = { /** - * Optional condition for additional filtering (rare) + * Concrete provider domains selected during setup. + * + * @remarks + * Empty delegates deterministic selection to the provider setup implementation. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + selectedFailureDomains?: Array | undefined; /** - * Resource ARNs to bind to + * Number of distinct failure domains across which new stateful replicas may be spread. */ - resources: Array; + spread: number; }; -/** - * AWS-specific binding specification - */ -export type OverrideReleaseInfoAwStack = { +export type SyncReconcileResponseFailureDomainsUnion1 = + | SyncReconcileResponseFailureDomains1 + | any; + +export type SyncReconcileResponsePoolsFixed = { + failureDomains?: + | SyncReconcileResponseFailureDomains1 + | any + | null + | undefined; /** - * Optional condition for additional filtering (rare) + * Provider machine type selected for this deployment. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + machine?: string | null | undefined; /** - * Resource ARNs to bind to + * Number of machines to run. */ - resources: Array; + machines: number; + mode: "fixed"; }; /** - * Generic binding configuration for permissions + * User-selected deployment settings for one compute pool. */ -export type OverrideReleaseInfoAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: OverrideReleaseInfoAwResource | undefined; +export type SyncReconcileResponsePoolsUnion = + | SyncReconcileResponsePoolsFixed + | SyncReconcileResponsePoolsAutoscale; + +/** + * Deployment-time compute choices for Alien-managed compute pools. + * + * @remarks + * + * Application source declares portable pool requirements. This settings + * object stores the concrete choices made for one deployment, such as the + * provider machine type and selected machine counts. + */ +export type SyncReconcileResponseCompute = { /** - * AWS-specific binding specification + * Selected compute choices keyed by pool ID. */ - stack?: OverrideReleaseInfoAwStack | undefined; + pools?: { + [k: string]: + | SyncReconcileResponsePoolsFixed + | SyncReconcileResponsePoolsAutoscale; + } | undefined; }; +export type SyncReconcileResponseComputeUnion = + | SyncReconcileResponseCompute + | any; + /** - * IAM effect. Defaults to Allow. + * Deployment model: how updates are delivered to the remote environment. */ -export const OverrideReleaseInfoEffect = { - Allow: "Allow", - Deny: "Deny", +export const SyncReconcileResponseDeploymentModel = { + Push: "push", + Pull: "pull", } as const; /** - * IAM effect. Defaults to Allow. + * Deployment model: how updates are delivered to the remote environment. */ -export type OverrideReleaseInfoEffect = ClosedEnum< - typeof OverrideReleaseInfoEffect +export type SyncReconcileResponseDeploymentModel = ClosedEnum< + typeof SyncReconcileResponseDeploymentModel >; -/** - * Grant permissions for a specific cloud platform - */ -export type OverrideReleaseInfoAwGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; +export type SyncReconcileResponseAwsStackSettings = { + certificateArn: string; +}; + +export type SyncReconcileResponseStackSettingsAwsUnion = + | SyncReconcileResponseAwsStackSettings + | any; + +export type AzureTargetStackSettings = { + keyVaultCertificateId: string; + keyVaultResourceId?: string | null | undefined; +}; + +export type TargetStackSettingsAzureUnion = AzureTargetStackSettings | any; + +export type GcpTargetStackSettings = { + certificateName: string; }; +export type TargetStackSettingsGcpUnion = GcpTargetStackSettings | any; + /** - * AWS-specific platform permission configuration + * Namespace-scoped Kubernetes TLS Secret reference. */ -export type OverrideReleaseInfoAw = { - /** - * Generic binding configuration for permissions - */ - binding: OverrideReleaseInfoAwBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * IAM effect. Defaults to Allow. - */ - effect?: OverrideReleaseInfoEffect | undefined; +export type SyncReconcileResponseTlsSecretRef = { /** - * Grant permissions for a specific cloud platform + * Secret namespace. Defaults to the release namespace when omitted. */ - grant: OverrideReleaseInfoAwGrant; + namespace?: string | null | undefined; /** - * Stable admin-facing label for this permission entry. + * Secret name. */ - label?: string | null | undefined; + secretName: string; }; -/** - * Azure-specific binding specification - */ -export type OverrideReleaseInfoAzureResource = { +export type SyncReconcileResponseDomainsKubernetes = { /** - * Scope (subscription/resource group/resource level) + * Namespace-scoped Kubernetes TLS Secret reference. */ - scope: string; + tlsSecretRef: SyncReconcileResponseTlsSecretRef; }; -/** - * Azure-specific binding specification - */ -export type OverrideReleaseInfoAzureStack = { - /** - * Scope (subscription/resource group/resource level) - */ - scope: string; -}; +export type SyncReconcileResponseDomainsKubernetesUnion = + | SyncReconcileResponseDomainsKubernetes + | any; /** - * Generic binding configuration for permissions + * Platform-specific certificate references for custom domains. */ -export type OverrideReleaseInfoAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: OverrideReleaseInfoAzureResource | undefined; - /** - * Azure-specific binding specification - */ - stack?: OverrideReleaseInfoAzureStack | undefined; +export type SyncReconcileResponseDomainsCertificate = { + aws?: SyncReconcileResponseAwsStackSettings | any | null | undefined; + azure?: AzureTargetStackSettings | any | null | undefined; + gcp?: GcpTargetStackSettings | any | null | undefined; + kubernetes?: SyncReconcileResponseDomainsKubernetes | any | null | undefined; }; /** - * Grant permissions for a specific cloud platform + * Custom domain configuration for a single resource. */ -export type OverrideReleaseInfoAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; +export type SyncReconcileResponseCustomDomains = { /** - * Provider predefined roles to bind directly. + * Platform-specific certificate references for custom domains. */ - predefinedRoles?: Array | null | undefined; + certificate: SyncReconcileResponseDomainsCertificate; /** - * GCP residual custom permissions to pair with predefined roles. + * Fully qualified domain name to use. */ - residualPermissions?: Array | null | undefined; + domain: string; }; -/** - * Azure-specific platform permission configuration - */ -export type OverrideReleaseInfoAzure = { - /** - * Generic binding configuration for permissions - */ - binding: OverrideReleaseInfoAzureBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * Grant permissions for a specific cloud platform - */ - grant: OverrideReleaseInfoAzureGrant; +export const SyncReconcileResponseModeLoadBalancer = { + LoadBalancer: "loadBalancer", +} as const; +export type SyncReconcileResponseModeLoadBalancer = ClosedEnum< + typeof SyncReconcileResponseModeLoadBalancer +>; + +export type SyncReconcileResponsePublicEndpointTargetLoadBalancer = { /** - * Stable admin-facing label for this permission entry. + * DNS name or URL for the external load balancer. */ - label?: string | null | undefined; + cnameTarget: string; + mode: SyncReconcileResponseModeLoadBalancer; }; -/** - * GCP IAM condition - */ -export type OverrideConditionReleaseInfoResource = { - expression: string; - title: string; +export const SyncReconcileResponseModeMachineAddresses = { + MachineAddresses: "machineAddresses", +} as const; +export type SyncReconcileResponseModeMachineAddresses = ClosedEnum< + typeof SyncReconcileResponseModeMachineAddresses +>; + +export type SyncReconcileResponsePublicEndpointTargetMachineAddresses = { + mode: SyncReconcileResponseModeMachineAddresses; }; -export type OverrideReleaseInfoResourceConditionUnion = - | OverrideConditionReleaseInfoResource +export type SyncReconcileResponsePublicEndpointTargetUnion = + | SyncReconcileResponsePublicEndpointTargetLoadBalancer + | SyncReconcileResponsePublicEndpointTargetMachineAddresses | any; /** - * GCP-specific binding specification + * Domain configuration for the stack. + * + * @remarks + * + * When `custom_domains` is set, the specified resources use customer-provided + * domains and certificates. Otherwise, Alien auto-generates domains. */ -export type OverrideReleaseInfoGcpResource = { - condition?: OverrideConditionReleaseInfoResource | any | null | undefined; +export type SyncReconcileResponseDomains = { /** - * Scope (project/resource level) + * Custom domain configuration per resource ID. */ - scope: string; -}; - -/** - * GCP IAM condition - */ -export type OverrideConditionReleaseInfo = { - expression: string; - title: string; + customDomains?: + | { [k: string]: SyncReconcileResponseCustomDomains } + | null + | undefined; + publicEndpointTarget?: + | SyncReconcileResponsePublicEndpointTargetLoadBalancer + | SyncReconcileResponsePublicEndpointTargetMachineAddresses + | any + | null + | undefined; }; -export type OverrideReleaseInfoConditionUnion = - | OverrideConditionReleaseInfo +export type SyncReconcileResponseDomainsUnion = + | SyncReconcileResponseDomains | any; /** - * GCP-specific binding specification - */ -export type OverrideReleaseInfoGcpStack = { - condition?: OverrideConditionReleaseInfo | any | null | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; + * External bindings for pre-existing infrastructure. + * + * @remarks + * Allows using existing resources (MinIO, Redis, shared Container Apps + * Environment, etc.) instead of having Alien provision them. + * Required for Kubernetes platform, optional for cloud platforms. + */ +export type SyncReconcileResponseStackSettingsExternalBindings = {}; /** - * Generic binding configuration for permissions + * How heartbeat health checks are handled. */ -export type OverrideReleaseInfoGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: OverrideReleaseInfoGcpResource | undefined; - /** - * GCP-specific binding specification - */ - stack?: OverrideReleaseInfoGcpStack | undefined; -}; +export const SyncReconcileResponseHeartbeats = { + Off: "off", + On: "on", +} as const; +/** + * How heartbeat health checks are handled. + */ +export type SyncReconcileResponseHeartbeats = ClosedEnum< + typeof SyncReconcileResponseHeartbeats +>; /** - * Grant permissions for a specific cloud platform + * Optional provider-specific identity for a cloud-backed Kubernetes cluster. */ -export type OverrideReleaseInfoGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; +export type SyncReconcileResponseCloud = { + accountId?: string | null | undefined; + clusterId?: string | null | undefined; + clusterName?: string | null | undefined; + projectId?: string | null | undefined; + region?: string | null | undefined; + resourceGroup?: string | null | undefined; + subscriptionId?: string | null | undefined; }; +export type SyncReconcileResponseCloudUnion = SyncReconcileResponseCloud | any; + /** - * GCP-specific platform permission configuration + * Ownership model for the Kubernetes cluster. */ -export type OverrideReleaseInfoGcp = { - /** - * Generic binding configuration for permissions - */ - binding: OverrideReleaseInfoGcpBinding; +export const SyncReconcileResponseOwnership = { + Managed: "managed", + Existing: "existing", + External: "external", +} as const; +/** + * Ownership model for the Kubernetes cluster. + */ +export type SyncReconcileResponseOwnership = ClosedEnum< + typeof SyncReconcileResponseOwnership +>; + +/** + * Kubernetes cluster setup settings. + */ +export type SyncReconcileResponseCluster = { + cloud?: SyncReconcileResponseCloud | any | null | undefined; /** - * Short admin-facing description of why this entry exists. + * Namespace where the Alien chart and application resources run. */ - description?: string | null | undefined; + namespace?: string | null | undefined; /** - * Grant permissions for a specific cloud platform + * Ownership model for the Kubernetes cluster. */ - grant: OverrideReleaseInfoGcpGrant; + ownership: SyncReconcileResponseOwnership; +}; + +export type SyncReconcileResponseClusterUnion = + | SyncReconcileResponseCluster + | any; + +export type SyncReconcileResponseCertificateNone2 = { + mode: "none"; +}; + +export type SyncReconcileResponseCertificateManagedTLSSecret2 = { + mode: "managedTlsSecret"; /** - * Stable admin-facing label for this permission entry. + * Secret name template. Runtime may substitute resource/deployment tokens. */ - label?: string | null | undefined; + secretNameTemplate: string; }; -/** - * Platform-specific permission configurations - */ -export type OverrideReleaseInfoPlatforms = { +export type SyncReconcileResponseCertificateAwsAcmArn2 = { /** - * AWS permission configurations + * Existing ACM certificate ARN. */ - aws?: Array | null | undefined; + certificateArn: string; + mode: "awsAcmArn"; +}; + +export type SyncReconcileResponseCertificateManagedAcmImport2 = { + mode: "managedAcmImport"; /** - * Azure permission configurations + * ACM region. Defaults to the deployment region when omitted. */ - azure?: Array | null | undefined; + region?: string | null | undefined; /** - * GCP permission configurations + * Tags applied to runtime-imported ACM certificates. */ - gcp?: Array | null | undefined; + tags?: { [k: string]: string } | undefined; }; /** - * A permission set that can be applied across different cloud platforms + * Namespace-scoped Kubernetes TLS Secret reference. */ -export type OverrideReleaseInfo = { - /** - * Human-readable description of what this permission set allows - */ - description: string; +export type SyncReconcileResponseCertificateTLSSecretRef2 = { /** - * Unique identifier for the permission set (e.g., "storage/data-read") + * Secret namespace. Defaults to the release namespace when omitted. */ - id: string; + namespace?: string | null | undefined; /** - * Platform-specific permission configurations + * Secret name. */ - platforms: OverrideReleaseInfoPlatforms; + secretName: string; + mode: "tlsSecretRef"; }; /** - * Reference to a permission set - either by name or inline definition + * Certificate publication or reference mode for Kubernetes public endpoints. */ -export type ReleaseInfoOverrideUnion = OverrideReleaseInfo | string; +export type SyncReconcileResponseCertificateUnion2 = + | SyncReconcileResponseCertificateTLSSecretRef2 + | SyncReconcileResponseCertificateManagedAcmImport2 + | SyncReconcileResponseCertificateAwsAcmArn2 + | SyncReconcileResponseCertificateManagedTLSSecret2 + | SyncReconcileResponseCertificateNone2; -export type ManagementReleaseInfo2 = { +export const SyncReconcileResponseModeCustom = { + Custom: "custom", +} as const; +export type SyncReconcileResponseModeCustom = ClosedEnum< + typeof SyncReconcileResponseModeCustom +>; + +export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4 = + ClosedEnum< + typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4 + >; + +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers4 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum4; + }; + +export const SyncReconcileResponseProviderGkeGatewayEnum4 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncReconcileResponseProviderGkeGatewayEnum4 = ClosedEnum< + typeof SyncReconcileResponseProviderGkeGatewayEnum4 +>; + +export type SyncReconcileResponseProviderGkeGateway4 = { + provider: SyncReconcileResponseProviderGkeGatewayEnum4; /** - * Permission profile that maps resources to permission sets - * - * @remarks - * Key can be "*" for all resources or resource name for specific resource + * Optional static address name for the Gateway frontend. */ - override: { [k: string]: Array }; + staticAddressName?: string | null | undefined; }; -/** - * AWS-specific binding specification - */ -export type ExtendReleaseInfoAwResource = { +export const SyncReconcileResponseProviderAwsAlbEnum4 = { + AwsAlb: "awsAlb", +} as const; +export type SyncReconcileResponseProviderAwsAlbEnum4 = ClosedEnum< + typeof SyncReconcileResponseProviderAwsAlbEnum4 +>; + +export type SyncReconcileResponseProviderAwsAlb4 = { /** - * Optional condition for additional filtering (rare) + * Optional ALB IP address type, such as `dualstack`. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + ipAddressType?: string | null | undefined; + provider: SyncReconcileResponseProviderAwsAlbEnum4; /** - * Resource ARNs to bind to + * Internet-facing or internal ALB scheme. */ - resources: Array; -}; - -/** - * AWS-specific binding specification - */ -export type ExtendReleaseInfoAwStack = { + scheme: string; /** - * Optional condition for additional filtering (rare) + * Explicit subnet IDs when the profile cannot rely on controller discovery. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + subnetIds?: Array | undefined; /** - * Resource ARNs to bind to + * ALB target type, usually `ip`. */ - resources: Array; + targetType: string; }; -/** - * Generic binding configuration for permissions - */ -export type ExtendReleaseInfoAwBinding = { - /** - * AWS-specific binding specification - */ - resource?: ExtendReleaseInfoAwResource | undefined; - /** - * AWS-specific binding specification - */ - stack?: ExtendReleaseInfoAwStack | undefined; -}; - -/** - * IAM effect. Defaults to Allow. - */ -export const ExtendReleaseInfoEffect = { - Allow: "Allow", - Deny: "Deny", -} as const; -/** - * IAM effect. Defaults to Allow. - */ -export type ExtendReleaseInfoEffect = ClosedEnum< - typeof ExtendReleaseInfoEffect ->; +export type SyncReconcileResponseProviderUnion4 = + | SyncReconcileResponseProviderAwsAlb4 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers4 + | SyncReconcileResponseProviderGkeGateway4 + | any; /** - * Grant permissions for a specific cloud platform + * Shared Gateway API route profile values. */ -export type ExtendReleaseInfoAwGrant = { +export type SyncReconcileResponseRouteGateway2 = { /** - * AWS IAM actions (only for AWS) + * Annotations applied to route objects. */ - actions?: Array | null | undefined; + annotations?: { [k: string]: string } | undefined; /** - * Azure actions (only for Azure) + * Route controller identifier, for example a cloud Gateway controller. */ - dataActions?: Array | null | undefined; + controller?: string | null | undefined; /** - * GCP permissions that require an exact residual custom role. + * GatewayClass selected for generated Gateways. */ - permissions?: Array | null | undefined; + gatewayClassName: string; /** - * Provider predefined roles to bind directly. + * Labels applied to route objects. */ - predefinedRoles?: Array | null | undefined; + labels?: { [k: string]: string } | undefined; /** - * GCP residual custom permissions to pair with predefined roles. + * Listener port, usually 443. */ - residualPermissions?: Array | null | undefined; + listenerPort: number; + provider?: + | SyncReconcileResponseProviderAwsAlb4 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers4 + | SyncReconcileResponseProviderGkeGateway4 + | any + | null + | undefined; + routeApi: "gateway"; }; -/** - * AWS-specific platform permission configuration - */ -export type ExtendReleaseInfoAw = { +export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3 = + ClosedEnum< + typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3 + >; + +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers3 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum3; + }; + +export const SyncReconcileResponseProviderGkeGatewayEnum3 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncReconcileResponseProviderGkeGatewayEnum3 = ClosedEnum< + typeof SyncReconcileResponseProviderGkeGatewayEnum3 +>; + +export type SyncReconcileResponseProviderGkeGateway3 = { + provider: SyncReconcileResponseProviderGkeGatewayEnum3; /** - * Generic binding configuration for permissions + * Optional static address name for the Gateway frontend. */ - binding: ExtendReleaseInfoAwBinding; + staticAddressName?: string | null | undefined; +}; + +export const SyncReconcileResponseProviderAwsAlbEnum3 = { + AwsAlb: "awsAlb", +} as const; +export type SyncReconcileResponseProviderAwsAlbEnum3 = ClosedEnum< + typeof SyncReconcileResponseProviderAwsAlbEnum3 +>; + +export type SyncReconcileResponseProviderAwsAlb3 = { /** - * Short admin-facing description of why this entry exists. + * Optional ALB IP address type, such as `dualstack`. */ - description?: string | null | undefined; + ipAddressType?: string | null | undefined; + provider: SyncReconcileResponseProviderAwsAlbEnum3; /** - * IAM effect. Defaults to Allow. + * Internet-facing or internal ALB scheme. */ - effect?: ExtendReleaseInfoEffect | undefined; + scheme: string; /** - * Grant permissions for a specific cloud platform + * Explicit subnet IDs when the profile cannot rely on controller discovery. */ - grant: ExtendReleaseInfoAwGrant; + subnetIds?: Array | undefined; /** - * Stable admin-facing label for this permission entry. + * ALB target type, usually `ip`. */ - label?: string | null | undefined; + targetType: string; }; +export type SyncReconcileResponseProviderUnion3 = + | SyncReconcileResponseProviderAwsAlb3 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers3 + | SyncReconcileResponseProviderGkeGateway3 + | any; + /** - * Azure-specific binding specification + * Shared Ingress route profile values. */ -export type ExtendReleaseInfoAzureResource = { +export type SyncReconcileResponseRouteIngress2 = { /** - * Scope (subscription/resource group/resource level) + * Annotations applied to route objects. */ - scope: string; -}; - -/** - * Azure-specific binding specification - */ -export type ExtendReleaseInfoAzureStack = { + annotations?: { [k: string]: string } | undefined; /** - * Scope (subscription/resource group/resource level) + * Route controller identifier, for example `eks.amazonaws.com/alb`. */ - scope: string; -}; - -/** - * Generic binding configuration for permissions - */ -export type ExtendReleaseInfoAzureBinding = { + controller?: string | null | undefined; /** - * Azure-specific binding specification + * `spec.ingressClassName` for generated Ingresses. */ - resource?: ExtendReleaseInfoAzureResource | undefined; + ingressClassName: string; /** - * Azure-specific binding specification + * Labels applied to route objects. */ - stack?: ExtendReleaseInfoAzureStack | undefined; + labels?: { [k: string]: string } | undefined; + provider?: + | SyncReconcileResponseProviderAwsAlb3 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers3 + | SyncReconcileResponseProviderGkeGateway3 + | any + | null + | undefined; + routeApi: "ingress"; }; /** - * Grant permissions for a specific cloud platform + * Kubernetes route API selected for public endpoints. */ -export type ExtendReleaseInfoAzureGrant = { +export type SyncReconcileResponseRouteUnion2 = + | SyncReconcileResponseRouteIngress2 + | SyncReconcileResponseRouteGateway2; + +export type SyncReconcileResponseExposureCustom = { /** - * AWS IAM actions (only for AWS) + * Certificate publication or reference mode for Kubernetes public endpoints. */ - actions?: Array | null | undefined; + certificate: + | SyncReconcileResponseCertificateTLSSecretRef2 + | SyncReconcileResponseCertificateManagedAcmImport2 + | SyncReconcileResponseCertificateAwsAcmArn2 + | SyncReconcileResponseCertificateManagedTLSSecret2 + | SyncReconcileResponseCertificateNone2; /** - * Azure actions (only for Azure) + * Hostname routed by the Kubernetes public endpoint. */ - dataActions?: Array | null | undefined; + domain: string; + mode: SyncReconcileResponseModeCustom; /** - * GCP permissions that require an exact residual custom role. + * Kubernetes route API selected for public endpoints. */ - permissions?: Array | null | undefined; + route: + | SyncReconcileResponseRouteIngress2 + | SyncReconcileResponseRouteGateway2; +}; + +export type SyncReconcileResponseCertificateNone1 = { + mode: "none"; +}; + +export type SyncReconcileResponseCertificateManagedTLSSecret1 = { + mode: "managedTlsSecret"; /** - * Provider predefined roles to bind directly. + * Secret name template. Runtime may substitute resource/deployment tokens. */ - predefinedRoles?: Array | null | undefined; + secretNameTemplate: string; +}; + +export type SyncReconcileResponseCertificateAwsAcmArn1 = { /** - * GCP residual custom permissions to pair with predefined roles. + * Existing ACM certificate ARN. */ - residualPermissions?: Array | null | undefined; + certificateArn: string; + mode: "awsAcmArn"; }; -/** - * Azure-specific platform permission configuration - */ -export type ExtendReleaseInfoAzure = { +export type SyncReconcileResponseCertificateManagedAcmImport1 = { + mode: "managedAcmImport"; /** - * Generic binding configuration for permissions + * ACM region. Defaults to the deployment region when omitted. */ - binding: ExtendReleaseInfoAzureBinding; + region?: string | null | undefined; /** - * Short admin-facing description of why this entry exists. + * Tags applied to runtime-imported ACM certificates. */ - description?: string | null | undefined; + tags?: { [k: string]: string } | undefined; +}; + +/** + * Namespace-scoped Kubernetes TLS Secret reference. + */ +export type SyncReconcileResponseCertificateTLSSecretRef1 = { /** - * Grant permissions for a specific cloud platform + * Secret namespace. Defaults to the release namespace when omitted. */ - grant: ExtendReleaseInfoAzureGrant; + namespace?: string | null | undefined; /** - * Stable admin-facing label for this permission entry. + * Secret name. */ - label?: string | null | undefined; + secretName: string; + mode: "tlsSecretRef"; }; /** - * GCP IAM condition + * Certificate publication or reference mode for Kubernetes public endpoints. */ -export type ExtendConditionReleaseInfoResource = { - expression: string; - title: string; -}; +export type SyncReconcileResponseCertificateUnion1 = + | SyncReconcileResponseCertificateTLSSecretRef1 + | SyncReconcileResponseCertificateManagedAcmImport1 + | SyncReconcileResponseCertificateAwsAcmArn1 + | SyncReconcileResponseCertificateManagedTLSSecret1 + | SyncReconcileResponseCertificateNone1; -export type ExtendReleaseInfoResourceConditionUnion = - | ExtendConditionReleaseInfoResource - | any; +export const SyncReconcileResponseModeGenerated = { + Generated: "generated", +} as const; +export type SyncReconcileResponseModeGenerated = ClosedEnum< + typeof SyncReconcileResponseModeGenerated +>; -/** - * GCP-specific binding specification - */ -export type ExtendReleaseInfoGcpResource = { - condition?: ExtendConditionReleaseInfoResource | any | null | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; +export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2 = + ClosedEnum< + typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2 + >; -/** - * GCP IAM condition - */ -export type ExtendConditionReleaseInfo = { - expression: string; - title: string; -}; +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers2 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum2; + }; -export type ExtendReleaseInfoConditionUnion = ExtendConditionReleaseInfo | any; +export const SyncReconcileResponseProviderGkeGatewayEnum2 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncReconcileResponseProviderGkeGatewayEnum2 = ClosedEnum< + typeof SyncReconcileResponseProviderGkeGatewayEnum2 +>; -/** - * GCP-specific binding specification - */ -export type ExtendReleaseInfoGcpStack = { - condition?: ExtendConditionReleaseInfo | any | null | undefined; +export type SyncReconcileResponseProviderGkeGateway2 = { + provider: SyncReconcileResponseProviderGkeGatewayEnum2; /** - * Scope (project/resource level) + * Optional static address name for the Gateway frontend. */ - scope: string; + staticAddressName?: string | null | undefined; }; -/** - * Generic binding configuration for permissions - */ -export type ExtendReleaseInfoGcpBinding = { +export const SyncReconcileResponseProviderAwsAlbEnum2 = { + AwsAlb: "awsAlb", +} as const; +export type SyncReconcileResponseProviderAwsAlbEnum2 = ClosedEnum< + typeof SyncReconcileResponseProviderAwsAlbEnum2 +>; + +export type SyncReconcileResponseProviderAwsAlb2 = { /** - * GCP-specific binding specification + * Optional ALB IP address type, such as `dualstack`. */ - resource?: ExtendReleaseInfoGcpResource | undefined; + ipAddressType?: string | null | undefined; + provider: SyncReconcileResponseProviderAwsAlbEnum2; /** - * GCP-specific binding specification + * Internet-facing or internal ALB scheme. */ - stack?: ExtendReleaseInfoGcpStack | undefined; + scheme: string; + /** + * Explicit subnet IDs when the profile cannot rely on controller discovery. + */ + subnetIds?: Array | undefined; + /** + * ALB target type, usually `ip`. + */ + targetType: string; }; +export type SyncReconcileResponseProviderUnion2 = + | SyncReconcileResponseProviderAwsAlb2 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers2 + | SyncReconcileResponseProviderGkeGateway2 + | any; + /** - * Grant permissions for a specific cloud platform + * Shared Gateway API route profile values. */ -export type ExtendReleaseInfoGcpGrant = { +export type SyncReconcileResponseRouteGateway1 = { /** - * AWS IAM actions (only for AWS) + * Annotations applied to route objects. */ - actions?: Array | null | undefined; + annotations?: { [k: string]: string } | undefined; /** - * Azure actions (only for Azure) + * Route controller identifier, for example a cloud Gateway controller. */ - dataActions?: Array | null | undefined; + controller?: string | null | undefined; /** - * GCP permissions that require an exact residual custom role. + * GatewayClass selected for generated Gateways. */ - permissions?: Array | null | undefined; + gatewayClassName: string; /** - * Provider predefined roles to bind directly. + * Labels applied to route objects. */ - predefinedRoles?: Array | null | undefined; + labels?: { [k: string]: string } | undefined; /** - * GCP residual custom permissions to pair with predefined roles. + * Listener port, usually 443. */ - residualPermissions?: Array | null | undefined; + listenerPort: number; + provider?: + | SyncReconcileResponseProviderAwsAlb2 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers2 + | SyncReconcileResponseProviderGkeGateway2 + | any + | null + | undefined; + routeApi: "gateway"; }; -/** - * GCP-specific platform permission configuration - */ -export type ExtendReleaseInfoGcp = { +export const SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1 = + { + AzureApplicationGatewayForContainers: + "azureApplicationGatewayForContainers", + } as const; +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1 = + ClosedEnum< + typeof SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1 + >; + +export type SyncReconcileResponseProviderAzureApplicationGatewayForContainers1 = + { + /** + * Optional ALB name when using BYO Application Gateway resources. + */ + albName?: string | null | undefined; + /** + * Optional ALB namespace when using BYO Application Gateway resources. + */ + albNamespace?: string | null | undefined; + /** + * Public or internal frontend exposure. + */ + frontend: string; + provider: + SyncReconcileResponseProviderAzureApplicationGatewayForContainersEnum1; + }; + +export const SyncReconcileResponseProviderGkeGatewayEnum1 = { + GkeGateway: "gkeGateway", +} as const; +export type SyncReconcileResponseProviderGkeGatewayEnum1 = ClosedEnum< + typeof SyncReconcileResponseProviderGkeGatewayEnum1 +>; + +export type SyncReconcileResponseProviderGkeGateway1 = { + provider: SyncReconcileResponseProviderGkeGatewayEnum1; /** - * Generic binding configuration for permissions + * Optional static address name for the Gateway frontend. */ - binding: ExtendReleaseInfoGcpBinding; + staticAddressName?: string | null | undefined; +}; + +export const SyncReconcileResponseProviderAwsAlbEnum1 = { + AwsAlb: "awsAlb", +} as const; +export type SyncReconcileResponseProviderAwsAlbEnum1 = ClosedEnum< + typeof SyncReconcileResponseProviderAwsAlbEnum1 +>; + +export type SyncReconcileResponseProviderAwsAlb1 = { /** - * Short admin-facing description of why this entry exists. + * Optional ALB IP address type, such as `dualstack`. */ - description?: string | null | undefined; + ipAddressType?: string | null | undefined; + provider: SyncReconcileResponseProviderAwsAlbEnum1; /** - * Grant permissions for a specific cloud platform + * Internet-facing or internal ALB scheme. */ - grant: ExtendReleaseInfoGcpGrant; + scheme: string; /** - * Stable admin-facing label for this permission entry. + * Explicit subnet IDs when the profile cannot rely on controller discovery. */ - label?: string | null | undefined; + subnetIds?: Array | undefined; + /** + * ALB target type, usually `ip`. + */ + targetType: string; }; +export type SyncReconcileResponseProviderUnion1 = + | SyncReconcileResponseProviderAwsAlb1 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers1 + | SyncReconcileResponseProviderGkeGateway1 + | any; + /** - * Platform-specific permission configurations + * Shared Ingress route profile values. */ -export type ExtendReleaseInfoPlatforms = { +export type SyncReconcileResponseRouteIngress1 = { /** - * AWS permission configurations + * Annotations applied to route objects. */ - aws?: Array | null | undefined; + annotations?: { [k: string]: string } | undefined; /** - * Azure permission configurations + * Route controller identifier, for example `eks.amazonaws.com/alb`. */ - azure?: Array | null | undefined; + controller?: string | null | undefined; /** - * GCP permission configurations + * `spec.ingressClassName` for generated Ingresses. */ - gcp?: Array | null | undefined; + ingressClassName: string; + /** + * Labels applied to route objects. + */ + labels?: { [k: string]: string } | undefined; + provider?: + | SyncReconcileResponseProviderAwsAlb1 + | SyncReconcileResponseProviderAzureApplicationGatewayForContainers1 + | SyncReconcileResponseProviderGkeGateway1 + | any + | null + | undefined; + routeApi: "ingress"; }; /** - * A permission set that can be applied across different cloud platforms + * Kubernetes route API selected for public endpoints. */ -export type ExtendReleaseInfo = { - /** - * Human-readable description of what this permission set allows - */ - description: string; +export type SyncReconcileResponseRouteUnion1 = + | SyncReconcileResponseRouteIngress1 + | SyncReconcileResponseRouteGateway1; + +export type SyncReconcileResponseExposureGenerated = { /** - * Unique identifier for the permission set (e.g., "storage/data-read") + * Certificate publication or reference mode for Kubernetes public endpoints. */ - id: string; + certificate: + | SyncReconcileResponseCertificateTLSSecretRef1 + | SyncReconcileResponseCertificateManagedAcmImport1 + | SyncReconcileResponseCertificateAwsAcmArn1 + | SyncReconcileResponseCertificateManagedTLSSecret1 + | SyncReconcileResponseCertificateNone1; + mode: SyncReconcileResponseModeGenerated; /** - * Platform-specific permission configurations + * Kubernetes route API selected for public endpoints. */ - platforms: ExtendReleaseInfoPlatforms; + route: + | SyncReconcileResponseRouteIngress1 + | SyncReconcileResponseRouteGateway1; }; -/** - * Reference to a permission set - either by name or inline definition - */ -export type ReleaseInfoExtendUnion = ExtendReleaseInfo | string; +export const SyncReconcileResponseModeDisabled = { + Disabled: "disabled", +} as const; +export type SyncReconcileResponseModeDisabled = ClosedEnum< + typeof SyncReconcileResponseModeDisabled +>; -export type ManagementReleaseInfo1 = { - /** - * Permission profile that maps resources to permission sets - * - * @remarks - * Key can be "*" for all resources or resource name for specific resource - */ - extend: { [k: string]: Array }; +export type SyncReconcileResponseExposureDisabled = { + mode: SyncReconcileResponseModeDisabled; }; -/** - * Management permissions configuration for stack management access - */ -export type ReleaseInfoManagementUnion = - | ManagementReleaseInfo1 - | ManagementReleaseInfo2 - | ManagementReleaseInfoEnum; +export type SyncReconcileResponseExposureUnion = + | SyncReconcileResponseExposureCustom + | SyncReconcileResponseExposureGenerated + | SyncReconcileResponseExposureDisabled + | any; /** - * AWS-specific binding specification + * Kubernetes runtime substrate configuration. + * + * @remarks + * + * This controls how setup chooses the cluster backing `Platform::Kubernetes` + * deployments. When omitted, cloud-backed Kubernetes deployments default to a + * managed cluster and generic/on-prem Kubernetes defaults to an external + * cluster. */ -export type ProfileReleaseInfoAwResource = { - /** - * Optional condition for additional filtering (rare) - */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; - /** - * Resource ARNs to bind to - */ - resources: Array; +export type SyncReconcileResponseKubernetes = { + cluster?: SyncReconcileResponseCluster | any | null | undefined; + exposure?: + | SyncReconcileResponseExposureCustom + | SyncReconcileResponseExposureGenerated + | SyncReconcileResponseExposureDisabled + | any + | null + | undefined; }; -/** - * AWS-specific binding specification - */ -export type ProfileReleaseInfoAwStack = { +export type SyncReconcileResponseKubernetesUnion = + | SyncReconcileResponseKubernetes + | any; + +export const TargetTypeByoVnetAzure = { + ByoVnetAzure: "byo-vnet-azure", +} as const; +export type TargetTypeByoVnetAzure = ClosedEnum; + +export type SyncReconcileResponseNetworkByoVnetAzure = { /** - * Optional condition for additional filtering (rare) + * Name of the dedicated classic Application Gateway subnet within the VNet. */ - condition?: { [k: string]: { [k: string]: string } } | null | undefined; + applicationGatewaySubnetName?: string | null | undefined; /** - * Resource ARNs to bind to + * Name of the dedicated subnet that hosts Private Endpoints (e.g. for a + * + * @remarks + * Postgres Flexible Server). A Private Endpoint must not share the private + * subnet, which is already claimed by the Container Apps environment's + * `infrastructure_subnet_id`. Required only when the stack contains a + * Postgres resource; otherwise unused. */ - resources: Array; -}; - -/** - * Generic binding configuration for permissions - */ -export type ProfileReleaseInfoAwBinding = { + privateEndpointSubnetName?: string | null | undefined; /** - * AWS-specific binding specification + * Name of the private subnet within the VNet */ - resource?: ProfileReleaseInfoAwResource | undefined; + privateSubnetName: string; /** - * AWS-specific binding specification + * Name of the public subnet within the VNet */ - stack?: ProfileReleaseInfoAwStack | undefined; + publicSubnetName: string; + type: TargetTypeByoVnetAzure; + /** + * The full resource ID of the existing VNet + */ + vnetResourceId: string; }; -/** - * IAM effect. Defaults to Allow. - */ -export const ProfileReleaseInfoEffect = { - Allow: "Allow", - Deny: "Deny", +export const TargetTypeByoVpcGcp = { + ByoVpcGcp: "byo-vpc-gcp", } as const; -/** - * IAM effect. Defaults to Allow. - */ -export type ProfileReleaseInfoEffect = ClosedEnum< - typeof ProfileReleaseInfoEffect ->; +export type TargetTypeByoVpcGcp = ClosedEnum; -/** - * Grant permissions for a specific cloud platform - */ -export type ProfileReleaseInfoAwGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; +export type SyncReconcileResponseNetworkByoVpcGcp = { /** - * GCP permissions that require an exact residual custom role. + * The name of the existing VPC network */ - permissions?: Array | null | undefined; + networkName: string; /** - * Provider predefined roles to bind directly. + * The region of the subnet */ - predefinedRoles?: Array | null | undefined; + region: string; /** - * GCP residual custom permissions to pair with predefined roles. + * The name of the subnet to use */ - residualPermissions?: Array | null | undefined; + subnetName: string; + type: TargetTypeByoVpcGcp; }; -/** - * AWS-specific platform permission configuration - */ -export type ProfileReleaseInfoAw = { - /** - * Generic binding configuration for permissions - */ - binding: ProfileReleaseInfoAwBinding; +export const TargetTypeByoVpcAws = { + ByoVpcAws: "byo-vpc-aws", +} as const; +export type TargetTypeByoVpcAws = ClosedEnum; + +export type SyncReconcileResponseNetworkByoVpcAws = { /** - * Short admin-facing description of why this entry exists. + * IDs of private subnets */ - description?: string | null | undefined; + privateSubnetIds: Array; /** - * IAM effect. Defaults to Allow. + * IDs of public subnets (required for public ingress) */ - effect?: ProfileReleaseInfoEffect | undefined; + publicSubnetIds: Array; /** - * Grant permissions for a specific cloud platform + * Optional security group IDs to use */ - grant: ProfileReleaseInfoAwGrant; + securityGroupIds?: Array | undefined; + type: TargetTypeByoVpcAws; /** - * Stable admin-facing label for this permission entry. + * The ID of the existing VPC */ - label?: string | null | undefined; + vpcId: string; }; -/** - * Azure-specific binding specification - */ -export type ProfileReleaseInfoAzureResource = { +export const TargetTypeCreate = { + Create: "create", +} as const; +export type TargetTypeCreate = ClosedEnum; + +export type SyncReconcileResponseNetworkCreate = { /** - * Scope (subscription/resource group/resource level) + * Number of availability zones (default: 2). */ - scope: string; -}; - -/** - * Azure-specific binding specification - */ -export type ProfileReleaseInfoAzureStack = { + availabilityZones?: number | undefined; /** - * Scope (subscription/resource group/resource level) + * VPC/VNet CIDR block. If not specified, auto-generated from stack ID + * + * @remarks + * to reduce conflicts (e.g., "10.{hash}.0.0/16"). */ - scope: string; + cidr?: string | null | undefined; + type: TargetTypeCreate; }; -/** - * Generic binding configuration for permissions - */ -export type ProfileReleaseInfoAzureBinding = { - /** - * Azure-specific binding specification - */ - resource?: ProfileReleaseInfoAzureResource | undefined; - /** - * Azure-specific binding specification - */ - stack?: ProfileReleaseInfoAzureStack | undefined; +export const TargetTypeUseDefault = { + UseDefault: "use-default", +} as const; +export type TargetTypeUseDefault = ClosedEnum; + +export type SyncReconcileResponseNetworkUseDefault = { + type: TargetTypeUseDefault; }; -/** - * Grant permissions for a specific cloud platform - */ -export type ProfileReleaseInfoAzureGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; - /** - * GCP residual custom permissions to pair with predefined roles. - */ - residualPermissions?: Array | null | undefined; -}; - -/** - * Azure-specific platform permission configuration - */ -export type ProfileReleaseInfoAzure = { - /** - * Generic binding configuration for permissions - */ - binding: ProfileReleaseInfoAzureBinding; - /** - * Short admin-facing description of why this entry exists. - */ - description?: string | null | undefined; - /** - * Grant permissions for a specific cloud platform - */ - grant: ProfileReleaseInfoAzureGrant; - /** - * Stable admin-facing label for this permission entry. - */ - label?: string | null | undefined; -}; - -/** - * GCP IAM condition - */ -export type ProfileConditionReleaseInfoResource = { - expression: string; - title: string; -}; - -export type ProfileReleaseInfoResourceConditionUnion = - | ProfileConditionReleaseInfoResource +export type SyncReconcileResponseNetworkUnion = + | SyncReconcileResponseNetworkByoVpcAws + | SyncReconcileResponseNetworkByoVpcGcp + | SyncReconcileResponseNetworkByoVnetAzure + | SyncReconcileResponseNetworkUseDefault + | SyncReconcileResponseNetworkCreate | any; /** - * GCP-specific binding specification + * How telemetry (logs, metrics, traces) is handled. */ -export type ProfileReleaseInfoGcpResource = { - condition?: ProfileConditionReleaseInfoResource | any | null | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - +export const SyncReconcileResponseTelemetry = { + Off: "off", + Auto: "auto", + ApprovalRequired: "approval-required", +} as const; /** - * GCP IAM condition + * How telemetry (logs, metrics, traces) is handled. */ -export type ProfileConditionReleaseInfo = { - expression: string; - title: string; -}; - -export type ProfileReleaseInfoConditionUnion = - | ProfileConditionReleaseInfo - | any; +export type SyncReconcileResponseTelemetry = ClosedEnum< + typeof SyncReconcileResponseTelemetry +>; /** - * GCP-specific binding specification + * How updates are delivered to the deployment. */ -export type ProfileReleaseInfoGcpStack = { - condition?: ProfileConditionReleaseInfo | any | null | undefined; - /** - * Scope (project/resource level) - */ - scope: string; -}; - +export const SyncReconcileResponseUpdates = { + Auto: "auto", + ApprovalRequired: "approval-required", +} as const; /** - * Generic binding configuration for permissions + * How updates are delivered to the deployment. */ -export type ProfileReleaseInfoGcpBinding = { - /** - * GCP-specific binding specification - */ - resource?: ProfileReleaseInfoGcpResource | undefined; - /** - * GCP-specific binding specification - */ - stack?: ProfileReleaseInfoGcpStack | undefined; -}; +export type SyncReconcileResponseUpdates = ClosedEnum< + typeof SyncReconcileResponseUpdates +>; /** - * Grant permissions for a specific cloud platform + * User-customizable deployment settings specified at deploy time. + * + * @remarks + * + * These settings are provided by the customer via CloudFormation parameters, + * Terraform attributes, CLI flags, or Helm values. They customize how the + * deployment runs and what capabilities are enabled. + * + * **Key distinction**: StackSettings is user-customizable, while ManagementConfig + * is platform-derived (from the Manager's ServiceAccount). */ -export type ProfileReleaseInfoGcpGrant = { - /** - * AWS IAM actions (only for AWS) - */ - actions?: Array | null | undefined; - /** - * Azure actions (only for Azure) - */ - dataActions?: Array | null | undefined; - /** - * GCP permissions that require an exact residual custom role. - */ - permissions?: Array | null | undefined; - /** - * Provider predefined roles to bind directly. - */ - predefinedRoles?: Array | null | undefined; +export type SyncReconcileResponseStackSettings = { + compute?: SyncReconcileResponseCompute | any | null | undefined; /** - * GCP residual custom permissions to pair with predefined roles. + * Deployment model: how updates are delivered to the remote environment. */ - residualPermissions?: Array | null | undefined; -}; - -/** - * GCP-specific platform permission configuration - */ -export type ProfileReleaseInfoGcp = { + deploymentModel?: SyncReconcileResponseDeploymentModel | undefined; + domains?: SyncReconcileResponseDomains | any | null | undefined; /** - * Generic binding configuration for permissions + * External bindings for pre-existing infrastructure. + * + * @remarks + * Allows using existing resources (MinIO, Redis, shared Container Apps + * Environment, etc.) instead of having Alien provision them. + * Required for Kubernetes platform, optional for cloud platforms. */ - binding: ProfileReleaseInfoGcpBinding; + externalBindings?: + | SyncReconcileResponseStackSettingsExternalBindings + | null + | undefined; /** - * Short admin-facing description of why this entry exists. + * How heartbeat health checks are handled. */ - description?: string | null | undefined; + heartbeats?: SyncReconcileResponseHeartbeats | undefined; + kubernetes?: SyncReconcileResponseKubernetes | any | null | undefined; + network?: + | SyncReconcileResponseNetworkByoVpcAws + | SyncReconcileResponseNetworkByoVpcGcp + | SyncReconcileResponseNetworkByoVnetAzure + | SyncReconcileResponseNetworkUseDefault + | SyncReconcileResponseNetworkCreate + | any + | null + | undefined; /** - * Grant permissions for a specific cloud platform + * How telemetry (logs, metrics, traces) is handled. */ - grant: ProfileReleaseInfoGcpGrant; + telemetry?: SyncReconcileResponseTelemetry | undefined; /** - * Stable admin-facing label for this permission entry. + * How updates are delivered to the deployment. */ - label?: string | null | undefined; + updates?: SyncReconcileResponseUpdates | undefined; }; /** - * Platform-specific permission configurations + * Deployment configuration + * + * @remarks + * + * Configuration for how to perform the deployment. + * Note: Credentials (ClientConfig) are passed separately to step() function. */ -export type ProfileReleaseInfoPlatforms = { - /** - * AWS permission configurations - */ - aws?: Array | null | undefined; +export type TargetConfig = { /** - * Azure permission configurations + * Allow frozen resource changes during updates + * + * @remarks + * When true, skips the frozen resources compatibility check. + * This requires running with elevated cloud credentials. */ - azure?: Array | null | undefined; + allowFrozenChanges?: boolean | undefined; + basePlatform?: SyncReconcileResponseBasePlatformEnum | any | null | undefined; + computeBackend?: + | SyncReconcileResponseComputeBackendHorizon + | any + | null + | undefined; /** - * GCP permission configurations + * Human-readable deployment name for cloud console metadata. + * + * @remarks + * + * This is separate from the physical resource prefix in StackState. It is + * used only for display text such as IAM role descriptions, service + * account descriptions, and custom role titles. */ - gcp?: Array | null | undefined; -}; - -/** - * A permission set that can be applied across different cloud platforms - */ -export type ProfileReleaseInfo = { + deploymentName?: string | null | undefined; /** - * Human-readable description of what this permission set allows + * Deployment token for pull authentication with the manager's registry. + * + * @remarks + * + * Used by controllers to configure registry credentials so cloud platforms + * and K8s can pull images from the manager's `/v2/` endpoint. */ - description: string; + deploymentToken?: string | null | undefined; + domainMetadata?: SyncReconcileResponseDomainMetadata | any | null | undefined; /** - * Unique identifier for the permission set (e.g., "storage/data-read") + * Snapshot of environment variables at a point in time */ - id: string; + environmentVariables: SyncReconcileResponseEnvironmentVariables; /** - * Platform-specific permission configurations + * Map from resource ID to external binding. + * + * @remarks + * + * Validated at runtime: binding type must match resource type. */ - platforms: ProfileReleaseInfoPlatforms; -}; - -/** - * Reference to a permission set - either by name or inline definition - */ -export type ReleaseInfoProfileUnion = ProfileReleaseInfo | string; - -/** - * Combined permissions configuration that contains both profiles and management - */ -export type ReleaseInfoPermissions = { - /** - * Management permissions configuration for stack management access - */ - management?: - | ManagementReleaseInfo1 - | ManagementReleaseInfo2 - | ManagementReleaseInfoEnum - | undefined; + externalBindings?: { + [k: string]: + | SyncReconcileResponseExternalBindingsContainerAppsEnvironment + | SyncReconcileResponseExternalBindingsS3 + | SyncReconcileResponseExternalBindingsBlob + | SyncReconcileResponseExternalBindingsGcs + | SyncReconcileResponseExternalBindingsLocalStorage + | SyncReconcileResponseExternalBindingsSqs + | SyncReconcileResponseExternalBindingsPubsub + | SyncReconcileResponseExternalBindingsServicebus + | SyncReconcileResponseExternalBindingsLocalQueue + | SyncReconcileResponseExternalBindingsDynamodb + | SyncReconcileResponseExternalBindingsFirestore + | SyncReconcileResponseExternalBindingsTablestorage + | SyncReconcileResponseExternalBindingsRedis + | SyncReconcileResponseExternalBindingsLocalKv + | SyncReconcileResponseExternalBindingsEcr + | SyncReconcileResponseExternalBindingsAcr + | SyncReconcileResponseExternalBindingsGar + | SyncReconcileResponseExternalBindingsLocal + | SyncReconcileResponseExternalBindingsParameterStore + | SyncReconcileResponseExternalBindingsSecretManager + | SyncReconcileResponseExternalBindingsKeyVault + | SyncReconcileResponseExternalBindingsKubernetesSecret + | SyncReconcileResponseExternalBindingsLocalVault + | SyncReconcileResponseExternalBindingsAurora + | SyncReconcileResponseExternalBindingsCloudSQL + | SyncReconcileResponseExternalBindingsFlexibleServer + | SyncReconcileResponseExternalBindingsExternal + | SyncReconcileResponseExternalBindingsLocalPostgres; + } | undefined; /** - * Permission profiles that define access control for compute services + * Deployer-provided stack input values, keyed by input id. A resource * * @remarks - * Key is the profile name, value is the permission configuration + * gated with `.enabled(input)` and a Live lifecycle follows these + * values; a missing key falls back to the input's declared boolean + * default. Suppliers must not place secret-kind input values here: + * this map serializes and debug-prints unredacted. */ - profiles: { - [k: string]: { [k: string]: Array }; - }; -}; - -/** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. - */ -export type ReleaseInfoConfig = { + inputValues?: { [k: string]: any | null } | undefined; /** - * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + * DNS-style label domain used for Kubernetes resource ownership labels. + * + * @remarks + * + * Defaults to `alien.dev` when absent. Whitelabeled Operator builds set this + * so generated workloads and optional log collectors share the same label + * namespace. */ - id: string; + labelDomain?: string | null | undefined; + managementConfig?: + | SyncReconcileResponseManagementConfigAzure + | SyncReconcileResponseManagementConfigAws + | SyncReconcileResponseManagementConfigGcp + | SyncReconcileResponseManagementConfigKubernetes + | any + | null + | undefined; /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Manager base URL (e.g., "https://manager.alien.dev"). + * + * @remarks + * + * The manager IS the container registry — its `/v2/` endpoint serves as + * the OCI Distribution API. Controllers derive the proxy host from this + * to configure pull auth (RegistryCredentials, imagePullSecrets). + * + * When None (e.g., `alien dev`), controllers use image URIs as-is. */ - type: string; - additionalProperties?: { [k: string]: any | null } | undefined; -}; - -/** - * Reference to a resource by its stable id and resource type. - */ -export type ReleaseInfoDependency = { - id: string; + managerUrl?: string | null | undefined; + monitoring?: SyncReconcileResponseMonitoring | any | null | undefined; /** - * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + * Native image registry host+prefix for platforms that require it. + * + * @remarks + * + * Lambda (ECR) and Cloud Run (GAR) require native registry URIs. Other + * runtimes, including Azure Container Apps, pull through the manager's + * registry proxy. + * + * Derived by the manager from the artifact registry binding: + * - ECR: `{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_prefix}` + * - GAR: `{region}-docker.pkg.dev/{project_id}/{repository_name}` */ - type: string; -}; - -/** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - */ -export const ReleaseInfoLifecycle = { - Frozen: "frozen", - Live: "live", -} as const; -/** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. - */ -export type ReleaseInfoLifecycle = ClosedEnum; - -export type ReleaseInfoResources = { + nativeImageHost?: string | null | undefined; /** - * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + * When true the observe pass reports raw resources across every namespace + * + * @remarks + * (cluster scope); otherwise it stays within the operator's own namespace. + * The label selector, if any, still filters within whichever scope applies. + * Ignored by cloud observers. */ - config: ReleaseInfoConfig; + observeAllNamespaces?: boolean | undefined; /** - * Additional dependencies for this resource beyond those defined in the resource itself. + * Kubernetes label selector that narrows which raw resources the observe * * @remarks - * The total dependencies are: resource.get_dependencies() + this list + * pass reports (e.g. `app.kubernetes.io/part-of=my-app`). `None` observes + * everything in the namespace. Ignored by cloud observers. */ - dependencies: Array; + observeLabelSelector?: string | null | undefined; /** - * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + * Public endpoint URLs for exposed resources (optional override). + * + * @remarks + * + * Use this only when a caller already knows the public URL. Managed public + * endpoint flows should prefer `domain_metadata` plus controller-reported + * load balancer outputs so DNS, certificate renewal, and route readiness + * stay tied to the resource state. + * + * If not set, platforms determine public endpoint URLs from other sources: + * - Managed DNS/TLS flows: `domain_metadata` FQDN or load balancer DNS + * - Local: `http://localhost:{allocated_port}` + * - Custom or disabled exposure: no public endpoint URL unless a controller reports one + * + * Outer key: resource ID. Inner key: endpoint name. Value: public URL. */ - lifecycle: ReleaseInfoLifecycle; + publicEndpoints?: { [k: string]: { [k: string]: string } } | null | undefined; /** - * Enable remote bindings for this resource (BYOB use case). + * User-customizable deployment settings specified at deploy time. * * @remarks - * When true, binding params are synced to StackState's `remote_binding_params`. - * Default: false (prevents sensitive data in synced state). + * + * These settings are provided by the customer via CloudFormation parameters, + * Terraform attributes, CLI flags, or Helm values. They customize how the + * deployment runs and what capabilities are enabled. + * + * **Key distinction**: StackSettings is user-customizable, while ManagementConfig + * is platform-derived (from the Manager's ServiceAccount). */ - remoteAccess?: boolean | undefined; + stackSettings?: SyncReconcileResponseStackSettings | undefined; }; -/** - * Represents the target cloud platform. - */ -export const ReleaseInfoSupportedPlatform = { - Aws: "aws", - Gcp: "gcp", - Azure: "azure", - Kubernetes: "kubernetes", - Machines: "machines", - Local: "local", - Test: "test", +export const ReleaseInfoTypeStringList = { + StringList: "stringList", } as const; -/** - * Represents the target cloud platform. - */ -export type ReleaseInfoSupportedPlatform = ClosedEnum< - typeof ReleaseInfoSupportedPlatform +export type ReleaseInfoTypeStringList = ClosedEnum< + typeof ReleaseInfoTypeStringList >; -/** - * A bag of resources, unaware of any cloud. - */ -export type ReleaseInfoStack = { - /** - * Unique identifier for the stack - */ - id: string; +export type DefaultReleaseInfoStringList = { + type: ReleaseInfoTypeStringList; /** - * Input definitions required before setup or deployment can proceed. + * String list default. */ - inputs?: Array | undefined; + value: Array; +}; + +export const ReleaseInfoTypeBoolean = { + Boolean: "boolean", +} as const; +export type ReleaseInfoTypeBoolean = ClosedEnum; + +export type DefaultReleaseInfoBoolean = { + type: ReleaseInfoTypeBoolean; /** - * Combined permissions configuration that contains both profiles and management + * Boolean default. */ - permissions?: ReleaseInfoPermissions | undefined; + value: boolean; +}; + +export const ReleaseInfoTypeNumber = { + Number: "number", +} as const; +export type ReleaseInfoTypeNumber = ClosedEnum; + +export type DefaultReleaseInfoNumber = { + type: ReleaseInfoTypeNumber; /** - * Map of resource IDs to their configurations and lifecycle settings + * Number default. */ - resources: { [k: string]: ReleaseInfoResources }; + value: string; +}; + +export const ReleaseInfoTypeString = { + String: "string", +} as const; +export type ReleaseInfoTypeString = ClosedEnum; + +export type DefaultReleaseInfoString = { + type: ReleaseInfoTypeString; /** - * Which platforms this stack supports. When None, all platforms are supported. + * String default. */ - supportedPlatforms?: Array | null | undefined; + value: string; }; +export type ReleaseInfoDefaultUnion = + | DefaultReleaseInfoString + | DefaultReleaseInfoNumber + | DefaultReleaseInfoBoolean + | DefaultReleaseInfoStringList + | any; + /** - * Release metadata - * - * @remarks - * - * Identifies a specific release version and includes the stack definition. - * The deployment engine uses this to track which release is currently deployed - * and which is the target. + * Environment variable handling for a stack input mapping. */ -export type ReleaseInfo = { +export const TypeReleaseInfoEnvEnum = { + Plain: "plain", + Secret: "secret", +} as const; +/** + * Environment variable handling for a stack input mapping. + */ +export type TypeReleaseInfoEnvEnum = ClosedEnum; + +export type ReleaseInfoTypeUnion = TypeReleaseInfoEnvEnum | any; + +/** + * How a resolved stack input is injected into runtime environment variables. + */ +export type ReleaseInfoEnv = { /** - * Short description of the release + * Environment variable name. */ - description?: string | null | undefined; + name: string; /** - * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no - * - * @remarks - * Alien-assigned release — the platform resolves a release from `version`. + * Target resource IDs or patterns. None means every env-capable resource. */ - releaseId?: string | null | undefined; + targetResources?: Array | null | undefined; + type?: TypeReleaseInfoEnvEnum | any | null | undefined; +}; + +/** + * Primitive stack input kind. + */ +export const ReleaseInfoKind = { + String: "string", + Secret: "secret", + Number: "number", + Integer: "integer", + Boolean: "boolean", + Enum: "enum", + StringList: "stringList", +} as const; +/** + * Primitive stack input kind. + */ +export type ReleaseInfoKind = ClosedEnum; + +/** + * Represents the target cloud platform. + */ +export const ReleaseInfoPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type ReleaseInfoPlatform = ClosedEnum; + +/** + * Who can provide a stack input value. + */ +export const ReleaseInfoProvidedBy = { + Developer: "developer", + Deployer: "deployer", +} as const; +/** + * Who can provide a stack input value. + */ +export type ReleaseInfoProvidedBy = ClosedEnum; + +/** + * Portable stack input validation constraints. + */ +export type ValidationReleaseInfo = { /** - * A bag of resources, unaware of any cloud. + * Semantic format hint such as url. */ - stack: ReleaseInfoStack; + format?: string | null | undefined; /** - * Version string (e.g., 2.1.0) + * Maximum number. */ - version?: string | null | undefined; + max?: string | null | undefined; + /** + * Maximum string-list items. + */ + maxItems?: number | null | undefined; + /** + * Maximum string length. + */ + maxLength?: number | null | undefined; + /** + * Minimum number. + */ + min?: string | null | undefined; + /** + * Minimum string-list items. + */ + minItems?: number | null | undefined; + /** + * Minimum string length. + */ + minLength?: number | null | undefined; + /** + * Portable whole-value regex pattern. + */ + pattern?: string | null | undefined; + /** + * Allowed string enum values. + */ + values?: Array | null | undefined; }; +export type ReleaseInfoValidationUnion = ValidationReleaseInfo | any; + /** - * Target deployment if update is needed + * Stack input definition serialized into a release stack. */ -export type SyncReconcileResponseTarget = { +export type ReleaseInfoInput = { + default?: + | DefaultReleaseInfoString + | DefaultReleaseInfoNumber + | DefaultReleaseInfoBoolean + | DefaultReleaseInfoStringList + | any + | null + | undefined; /** - * Deployment configuration - * - * @remarks - * - * Configuration for how to perform the deployment. - * Note: Credentials (ClientConfig) are passed separately to step() function. + * Human-facing helper text. */ - config: TargetConfig; + description: string; /** - * Release metadata - * - * @remarks - * - * Identifies a specific release version and includes the stack definition. - * The deployment engine uses this to track which release is currently deployed - * and which is the target. + * Runtime env-var mappings for v1 input resolution. */ - releaseInfo: ReleaseInfo; + env?: Array | undefined; + /** + * Stable input ID used by CLI/API calls. + */ + id: string; + /** + * Primitive stack input kind. + */ + kind: ReleaseInfoKind; + /** + * Human-facing field label. + */ + label: string; + /** + * Example placeholder shown in UI. + */ + placeholder?: string | null | undefined; + /** + * Platforms where this input applies. + */ + platforms?: Array | null | undefined; + /** + * Who can provide this value. + */ + providedBy: Array; + /** + * Whether a resolved value is required before deployment can proceed. + */ + required: boolean; + validation?: ValidationReleaseInfo | any | null | undefined; +}; + +export const ManagementReleaseInfoEnum = { + Auto: "auto", +} as const; +export type ManagementReleaseInfoEnum = ClosedEnum< + typeof ManagementReleaseInfoEnum +>; + +/** + * AWS-specific binding specification + */ +export type OverrideReleaseInfoAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type OverrideReleaseInfoAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type OverrideReleaseInfoAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: OverrideReleaseInfoAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: OverrideReleaseInfoAwStack | undefined; }; -/** - * State reconciliation result with optional target - */ -export type SyncReconcileResponse = { - /** - * Whether the state was reconciled - */ - success: boolean; - /** - * Current deployment state after reconciliation - */ - current: SyncReconcileResponseCurrent; - /** - * Target deployment if update is needed - */ - target?: SyncReconcileResponseTarget | undefined; -}; +/** + * IAM effect. Defaults to Allow. + */ +export const OverrideReleaseInfoEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type OverrideReleaseInfoEffect = ClosedEnum< + typeof OverrideReleaseInfoEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type OverrideReleaseInfoAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type OverrideReleaseInfoAw = { + /** + * Generic binding configuration for permissions + */ + binding: OverrideReleaseInfoAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: OverrideReleaseInfoEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: OverrideReleaseInfoAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type OverrideReleaseInfoAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type OverrideReleaseInfoAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type OverrideReleaseInfoAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: OverrideReleaseInfoAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: OverrideReleaseInfoAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type OverrideReleaseInfoAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type OverrideReleaseInfoAzure = { + /** + * Generic binding configuration for permissions + */ + binding: OverrideReleaseInfoAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: OverrideReleaseInfoAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type OverrideConditionReleaseInfoResource = { + expression: string; + title: string; +}; + +export type OverrideReleaseInfoResourceConditionUnion = + | OverrideConditionReleaseInfoResource + | any; + +/** + * GCP-specific binding specification + */ +export type OverrideReleaseInfoGcpResource = { + condition?: OverrideConditionReleaseInfoResource | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type OverrideConditionReleaseInfo = { + expression: string; + title: string; +}; + +export type OverrideReleaseInfoConditionUnion = + | OverrideConditionReleaseInfo + | any; + +/** + * GCP-specific binding specification + */ +export type OverrideReleaseInfoGcpStack = { + condition?: OverrideConditionReleaseInfo | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type OverrideReleaseInfoGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: OverrideReleaseInfoGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: OverrideReleaseInfoGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type OverrideReleaseInfoGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type OverrideReleaseInfoGcp = { + /** + * Generic binding configuration for permissions + */ + binding: OverrideReleaseInfoGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: OverrideReleaseInfoGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type OverrideReleaseInfoPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type OverrideReleaseInfo = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: OverrideReleaseInfoPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type ReleaseInfoOverrideUnion = OverrideReleaseInfo | string; + +export type ManagementReleaseInfo2 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + override: { [k: string]: Array }; +}; + +/** + * AWS-specific binding specification + */ +export type ExtendReleaseInfoAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type ExtendReleaseInfoAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type ExtendReleaseInfoAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: ExtendReleaseInfoAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: ExtendReleaseInfoAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const ExtendReleaseInfoEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type ExtendReleaseInfoEffect = ClosedEnum< + typeof ExtendReleaseInfoEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type ExtendReleaseInfoAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type ExtendReleaseInfoAw = { + /** + * Generic binding configuration for permissions + */ + binding: ExtendReleaseInfoAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: ExtendReleaseInfoEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: ExtendReleaseInfoAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type ExtendReleaseInfoAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type ExtendReleaseInfoAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type ExtendReleaseInfoAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: ExtendReleaseInfoAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: ExtendReleaseInfoAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type ExtendReleaseInfoAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type ExtendReleaseInfoAzure = { + /** + * Generic binding configuration for permissions + */ + binding: ExtendReleaseInfoAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: ExtendReleaseInfoAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type ExtendConditionReleaseInfoResource = { + expression: string; + title: string; +}; + +export type ExtendReleaseInfoResourceConditionUnion = + | ExtendConditionReleaseInfoResource + | any; + +/** + * GCP-specific binding specification + */ +export type ExtendReleaseInfoGcpResource = { + condition?: ExtendConditionReleaseInfoResource | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type ExtendConditionReleaseInfo = { + expression: string; + title: string; +}; + +export type ExtendReleaseInfoConditionUnion = ExtendConditionReleaseInfo | any; + +/** + * GCP-specific binding specification + */ +export type ExtendReleaseInfoGcpStack = { + condition?: ExtendConditionReleaseInfo | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type ExtendReleaseInfoGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: ExtendReleaseInfoGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: ExtendReleaseInfoGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type ExtendReleaseInfoGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type ExtendReleaseInfoGcp = { + /** + * Generic binding configuration for permissions + */ + binding: ExtendReleaseInfoGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: ExtendReleaseInfoGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type ExtendReleaseInfoPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type ExtendReleaseInfo = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: ExtendReleaseInfoPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type ReleaseInfoExtendUnion = ExtendReleaseInfo | string; + +export type ManagementReleaseInfo1 = { + /** + * Permission profile that maps resources to permission sets + * + * @remarks + * Key can be "*" for all resources or resource name for specific resource + */ + extend: { [k: string]: Array }; +}; + +/** + * Management permissions configuration for stack management access + */ +export type ReleaseInfoManagementUnion = + | ManagementReleaseInfo1 + | ManagementReleaseInfo2 + | ManagementReleaseInfoEnum; + +/** + * AWS-specific binding specification + */ +export type ProfileReleaseInfoAwResource = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * AWS-specific binding specification + */ +export type ProfileReleaseInfoAwStack = { + /** + * Optional condition for additional filtering (rare) + */ + condition?: { [k: string]: { [k: string]: string } } | null | undefined; + /** + * Resource ARNs to bind to + */ + resources: Array; +}; + +/** + * Generic binding configuration for permissions + */ +export type ProfileReleaseInfoAwBinding = { + /** + * AWS-specific binding specification + */ + resource?: ProfileReleaseInfoAwResource | undefined; + /** + * AWS-specific binding specification + */ + stack?: ProfileReleaseInfoAwStack | undefined; +}; + +/** + * IAM effect. Defaults to Allow. + */ +export const ProfileReleaseInfoEffect = { + Allow: "Allow", + Deny: "Deny", +} as const; +/** + * IAM effect. Defaults to Allow. + */ +export type ProfileReleaseInfoEffect = ClosedEnum< + typeof ProfileReleaseInfoEffect +>; + +/** + * Grant permissions for a specific cloud platform + */ +export type ProfileReleaseInfoAwGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * AWS-specific platform permission configuration + */ +export type ProfileReleaseInfoAw = { + /** + * Generic binding configuration for permissions + */ + binding: ProfileReleaseInfoAwBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * IAM effect. Defaults to Allow. + */ + effect?: ProfileReleaseInfoEffect | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: ProfileReleaseInfoAwGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Azure-specific binding specification + */ +export type ProfileReleaseInfoAzureResource = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Azure-specific binding specification + */ +export type ProfileReleaseInfoAzureStack = { + /** + * Scope (subscription/resource group/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type ProfileReleaseInfoAzureBinding = { + /** + * Azure-specific binding specification + */ + resource?: ProfileReleaseInfoAzureResource | undefined; + /** + * Azure-specific binding specification + */ + stack?: ProfileReleaseInfoAzureStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type ProfileReleaseInfoAzureGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * Azure-specific platform permission configuration + */ +export type ProfileReleaseInfoAzure = { + /** + * Generic binding configuration for permissions + */ + binding: ProfileReleaseInfoAzureBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: ProfileReleaseInfoAzureGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * GCP IAM condition + */ +export type ProfileConditionReleaseInfoResource = { + expression: string; + title: string; +}; + +export type ProfileReleaseInfoResourceConditionUnion = + | ProfileConditionReleaseInfoResource + | any; + +/** + * GCP-specific binding specification + */ +export type ProfileReleaseInfoGcpResource = { + condition?: ProfileConditionReleaseInfoResource | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * GCP IAM condition + */ +export type ProfileConditionReleaseInfo = { + expression: string; + title: string; +}; + +export type ProfileReleaseInfoConditionUnion = + | ProfileConditionReleaseInfo + | any; + +/** + * GCP-specific binding specification + */ +export type ProfileReleaseInfoGcpStack = { + condition?: ProfileConditionReleaseInfo | any | null | undefined; + /** + * Scope (project/resource level) + */ + scope: string; +}; + +/** + * Generic binding configuration for permissions + */ +export type ProfileReleaseInfoGcpBinding = { + /** + * GCP-specific binding specification + */ + resource?: ProfileReleaseInfoGcpResource | undefined; + /** + * GCP-specific binding specification + */ + stack?: ProfileReleaseInfoGcpStack | undefined; +}; + +/** + * Grant permissions for a specific cloud platform + */ +export type ProfileReleaseInfoGcpGrant = { + /** + * AWS IAM actions (only for AWS) + */ + actions?: Array | null | undefined; + /** + * Azure actions (only for Azure) + */ + dataActions?: Array | null | undefined; + /** + * GCP permissions that require an exact residual custom role. + */ + permissions?: Array | null | undefined; + /** + * Provider predefined roles to bind directly. + */ + predefinedRoles?: Array | null | undefined; + /** + * GCP residual custom permissions to pair with predefined roles. + */ + residualPermissions?: Array | null | undefined; +}; + +/** + * GCP-specific platform permission configuration + */ +export type ProfileReleaseInfoGcp = { + /** + * Generic binding configuration for permissions + */ + binding: ProfileReleaseInfoGcpBinding; + /** + * Short admin-facing description of why this entry exists. + */ + description?: string | null | undefined; + /** + * Grant permissions for a specific cloud platform + */ + grant: ProfileReleaseInfoGcpGrant; + /** + * Stable admin-facing label for this permission entry. + */ + label?: string | null | undefined; +}; + +/** + * Platform-specific permission configurations + */ +export type ProfileReleaseInfoPlatforms = { + /** + * AWS permission configurations + */ + aws?: Array | null | undefined; + /** + * Azure permission configurations + */ + azure?: Array | null | undefined; + /** + * GCP permission configurations + */ + gcp?: Array | null | undefined; +}; + +/** + * A permission set that can be applied across different cloud platforms + */ +export type ProfileReleaseInfo = { + /** + * Human-readable description of what this permission set allows + */ + description: string; + /** + * Unique identifier for the permission set (e.g., "storage/data-read") + */ + id: string; + /** + * Platform-specific permission configurations + */ + platforms: ProfileReleaseInfoPlatforms; +}; + +/** + * Reference to a permission set - either by name or inline definition + */ +export type ReleaseInfoProfileUnion = ProfileReleaseInfo | string; + +/** + * Combined permissions configuration that contains both profiles and management + */ +export type ReleaseInfoPermissions = { + /** + * Management permissions configuration for stack management access + */ + management?: + | ManagementReleaseInfo1 + | ManagementReleaseInfo2 + | ManagementReleaseInfoEnum + | undefined; + /** + * Permission profiles that define access control for compute services + * + * @remarks + * Key is the profile name, value is the permission configuration + */ + profiles: { + [k: string]: { [k: string]: Array }; + }; +}; + +/** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ +export type ReleaseInfoConfig = { + /** + * The unique identifier for this specific resource instance. Must contain only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9-_]). Maximum 64 characters. + */ + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; + additionalProperties?: { [k: string]: any | null } | undefined; +}; + +/** + * Reference to a resource by its stable id and resource type. + */ +export type ReleaseInfoDependency = { + id: string; + /** + * Resource type identifier that determines the specific kind of resource. This field is used for polymorphic deserialization and resource-specific behavior. + */ + type: string; +}; + +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export const ReleaseInfoLifecycle = { + Frozen: "frozen", + Live: "live", +} as const; +/** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ +export type ReleaseInfoLifecycle = ClosedEnum; + +export type ReleaseInfoResources = { + /** + * Resource that can hold any resource type in the Alien system. All resources share common 'type' and 'id' fields with additional type-specific properties. + */ + config: ReleaseInfoConfig; + /** + * Additional dependencies for this resource beyond those defined in the resource itself. + * + * @remarks + * The total dependencies are: resource.get_dependencies() + this list + */ + dependencies: Array; + /** + * Id of the boolean stack input that decides whether this resource is + * + * @remarks + * created at all. `None` means always create it. + * + * Set by `.enabled(input)` in the SDK. Setup emitters render the resource + * conditionally on the matching template variable, so a deployer who says no + * never gets the resource, its outputs, or anything derived from it. + */ + enabledWhen?: string | null | undefined; + /** + * Describes the lifecycle of a resource within a stack, determining how it's managed and deployed. + */ + lifecycle: ReleaseInfoLifecycle; + /** + * Enable remote bindings for this resource (BYOB use case). + * + * @remarks + * When true, binding params are synced to StackState's `remote_binding_params`. + * Default: false (prevents sensitive data in synced state). + */ + remoteAccess?: boolean | undefined; +}; + +/** + * Represents the target cloud platform. + */ +export const ReleaseInfoSupportedPlatform = { + Aws: "aws", + Gcp: "gcp", + Azure: "azure", + Kubernetes: "kubernetes", + Machines: "machines", + Local: "local", + Test: "test", +} as const; +/** + * Represents the target cloud platform. + */ +export type ReleaseInfoSupportedPlatform = ClosedEnum< + typeof ReleaseInfoSupportedPlatform +>; + +/** + * A bag of resources, unaware of any cloud. + */ +export type ReleaseInfoStack = { + /** + * Unique identifier for the stack + */ + id: string; + /** + * Input definitions required before setup or deployment can proceed. + */ + inputs?: Array | undefined; + /** + * Combined permissions configuration that contains both profiles and management + */ + permissions?: ReleaseInfoPermissions | undefined; + /** + * Map of resource IDs to their configurations and lifecycle settings + */ + resources: { [k: string]: ReleaseInfoResources }; + /** + * Which platforms this stack supports. When None, all platforms are supported. + */ + supportedPlatforms?: Array | null | undefined; +}; + +/** + * Release metadata + * + * @remarks + * + * Identifies a specific release version and includes the stack definition. + * The deployment engine uses this to track which release is currently deployed + * and which is the target. + */ +export type ReleaseInfo = { + /** + * Short description of the release + */ + description?: string | null | undefined; + /** + * Release ID (e.g., rel_xyz). `None` for an observe deployment, which has no + * + * @remarks + * Alien-assigned release — the platform resolves a release from `version`. + */ + releaseId?: string | null | undefined; + /** + * A bag of resources, unaware of any cloud. + */ + stack: ReleaseInfoStack; + /** + * Version string (e.g., 2.1.0) + */ + version?: string | null | undefined; +}; + +/** + * Target deployment if update is needed + */ +export type SyncReconcileResponseTarget = { + /** + * Deployment configuration + * + * @remarks + * + * Configuration for how to perform the deployment. + * Note: Credentials (ClientConfig) are passed separately to step() function. + */ + config: TargetConfig; + /** + * Release metadata + * + * @remarks + * + * Identifies a specific release version and includes the stack definition. + * The deployment engine uses this to track which release is currently deployed + * and which is the target. + */ + releaseInfo: ReleaseInfo; +}; + +/** + * State reconciliation result with optional target + */ +export type SyncReconcileResponse = { + /** + * Whether the state was reconciled + */ + success: boolean; + /** + * Current deployment state after reconciliation + */ + current: SyncReconcileResponseCurrent; + /** + * Target deployment if update is needed + */ + target?: SyncReconcileResponseTarget | undefined; +}; + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseTypeStringList$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseTypeStringList, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema: + z.ZodType = z + .object({ + type: SyncReconcileResponseCurrentReleaseTypeStringList$inboundSchema, + value: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseDefaultStringListFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseDefaultStringList, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultStringList' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseTypeBoolean$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseTypeBoolean, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema: + z.ZodType = z + .object({ + type: SyncReconcileResponseCurrentReleaseTypeBoolean$inboundSchema, + value: z.boolean(), + }); + +export function syncReconcileResponseCurrentReleaseDefaultBooleanFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseDefaultBoolean, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultBoolean' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseTypeNumber$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseTypeNumber, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema: + z.ZodType = z + .object({ + type: SyncReconcileResponseCurrentReleaseTypeNumber$inboundSchema, + value: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseDefaultNumberFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseDefaultNumber, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultNumber' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseTypeString$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseTypeString, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema: + z.ZodType = z + .object({ + type: SyncReconcileResponseCurrentReleaseTypeString$inboundSchema, + value: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseDefaultStringFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseDefaultString, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultString' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseDefaultUnion$inboundSchema: + z.ZodType = z.union( + [ + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema + ), + z.any(), + ], + ); + +export function syncReconcileResponseCurrentReleaseDefaultUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseDefaultUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseDefaultUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseTypeEnvEnum$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseTypeEnvEnum, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseTypeUnion$inboundSchema: + z.ZodType = z.union([ + SyncReconcileResponseCurrentReleaseTypeEnvEnum$inboundSchema, + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseTypeUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseTypeUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseTypeUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseTypeUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseEnv$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentReleaseEnv, + unknown +> = z.object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncReconcileResponseCurrentReleaseTypeEnvEnum$inboundSchema, + z.any(), + ]), + ).optional(), +}); + +export function syncReconcileResponseCurrentReleaseEnvFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseEnv$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseEnv' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseKind$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponseCurrentReleaseKind +> = z.enum(SyncReconcileResponseCurrentReleaseKind); + +/** @internal */ +export const SyncReconcileResponseCurrentReleasePlatform$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleasePlatform, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProvidedBy$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseProvidedBy, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseValidation$inboundSchema: + z.ZodType = z.object({ + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseValidationFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseValidation, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseValidation' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseValidationUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncReconcileResponseCurrentReleaseValidation$inboundSchema), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseValidationUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseValidationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseValidationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseValidationUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseInput$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentReleaseInput, + unknown +> = z.object({ + default: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema + ), + z.any(), + ]), + ).optional(), + description: z.string(), + env: z.array( + z.lazy(() => SyncReconcileResponseCurrentReleaseEnv$inboundSchema), + ).optional(), + id: z.string(), + kind: SyncReconcileResponseCurrentReleaseKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array(SyncReconcileResponseCurrentReleasePlatform$inboundSchema), + ).optional(), + providedBy: z.array( + SyncReconcileResponseCurrentReleaseProvidedBy$inboundSchema, + ), + required: z.boolean(), + validation: z.nullable( + z.union([ + z.lazy(() => SyncReconcileResponseCurrentReleaseValidation$inboundSchema), + z.any(), + ]), + ).optional(), +}); + +export function syncReconcileResponseCurrentReleaseInputFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseInput, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseInput$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseInput' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseManagementEnum$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseManagementEnum, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAwStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAwBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAwBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseOverrideEffect, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAwGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAwGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAw$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncReconcileResponseCurrentReleaseOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAwFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAw, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAw' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAzureResource$inboundSchema: + z.ZodType = + z.object({ + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAzureBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAzureStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAzureBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAzureBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideAzureFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseOverrideConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideConditionResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideConditionResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideConditionResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseOverrideResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideGcpResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideGcpResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideConditionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideCondition, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideCondition' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseOverrideConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema + ), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseOverrideConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideGcpStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideGcpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideGcpStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideGcpBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideGcpBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverrideGcpGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideGcpGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideGcp$inboundSchema: + z.ZodType = z.object( + { + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }, + ); + +export function syncReconcileResponseCurrentReleaseOverrideGcpFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverridePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseOverrideGcp$inboundSchema + )), + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseOverridePlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverridePlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverridePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverridePlatforms' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverride$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileResponseCurrentReleaseOverridePlatforms$inboundSchema + ), + }); + +export function syncReconcileResponseCurrentReleaseOverrideFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverride, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverride$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverride' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseOverrideUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncReconcileResponseCurrentReleaseOverride$inboundSchema), + z.string(), + ]); + +export function syncReconcileResponseCurrentReleaseOverrideUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseOverrideUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseOverrideUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseManagement2$inboundSchema: + z.ZodType = z.object( + { + override: z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseOverride$inboundSchema + ), + z.string(), + ]), + ), + ), + }, + ); + +export function syncReconcileResponseCurrentReleaseManagement2FromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseManagement2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseManagement2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseManagement2' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseExtendAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseExtendAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAwStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAwBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAwBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseExtendEffect, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAwGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAwGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAw$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncReconcileResponseCurrentReleaseExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAwFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAw, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAw' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAzureResource$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAzureStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAzureBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAzureBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAzureBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendAzure$inboundSchema: + z.ZodType = z.object( + { + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }, + ); + +export function syncReconcileResponseCurrentReleaseExtendAzureFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseExtendConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseExtendConditionResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendConditionResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendConditionResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseExtendResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseExtendGcpResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendGcpResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseExtendConditionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendCondition, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendCondition' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendConditionUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema + ), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseExtendConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseExtendGcpStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendGcpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendGcpStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendGcpBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendGcpBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendGcpGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendGcpGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendGcp$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendGcpFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendPlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendGcp$inboundSchema + )), + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseExtendPlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendPlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendPlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendPlatforms' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtend$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentReleaseExtend, + unknown +> = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileResponseCurrentReleaseExtendPlatforms$inboundSchema + ), +}); + +export function syncReconcileResponseCurrentReleaseExtendFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtend, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtend$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtend' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseExtendUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => SyncReconcileResponseCurrentReleaseExtend$inboundSchema), + z.string(), + ]); + +export function syncReconcileResponseCurrentReleaseExtendUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseExtendUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseExtendUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseManagement1$inboundSchema: + z.ZodType = z.object( + { + extend: z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseExtend$inboundSchema + ), + z.string(), + ]), + ), + ), + }, + ); + +export function syncReconcileResponseCurrentReleaseManagement1FromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseManagement1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseManagement1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseManagement1' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseManagementUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseManagement1$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseManagement2$inboundSchema + ), + SyncReconcileResponseCurrentReleaseManagementEnum$inboundSchema, + ]); + +export function syncReconcileResponseCurrentReleaseManagementUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseManagementUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseManagementUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseManagementUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAwResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseProfileAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAwResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponseCurrentReleaseProfileAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAwStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAwBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAwStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAwBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAwBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAwBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileEffect$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseProfileEffect, + ); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAwGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAwGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAw$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: SyncReconcileResponseCurrentReleaseProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAwFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAw, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAw' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAzureResource$inboundSchema: + z.ZodType = + z.object({ + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAzureResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAzureResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAzureStack$inboundSchema: + z.ZodType = z + .object({ + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAzureStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAzureStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAzureStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAzureBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAzureStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAzureBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAzureBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAzureGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAzureGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAzureGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAzureGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileAzure$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileAzureFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileAzure, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzure' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseProfileConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseProfileConditionResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileConditionResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileConditionResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema + ), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseProfileResourceConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileGcpResource$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseProfileGcpResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileGcpResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileGcpResource$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema: + z.ZodType = z + .object({ + expression: z.string(), + title: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseProfileConditionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileCondition, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileCondition' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileConditionUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema + ), + z.any(), + ]); + +export function syncReconcileResponseCurrentReleaseProfileConditionUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileConditionUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileConditionUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileGcpStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); + +export function syncReconcileResponseCurrentReleaseProfileGcpStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileGcpStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileGcpStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileGcpBinding$inboundSchema: + z.ZodType = z + .object({ + resource: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileGcpStack$inboundSchema + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileGcpBindingFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileGcpBinding, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileGcpBinding$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpBinding' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileGcpGrant$inboundSchema: + z.ZodType = z + .object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileGcpGrantFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileGcpGrant, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileGcpGrant$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpGrant' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfileGcp$inboundSchema: + z.ZodType = z.object({ + binding: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfileGcpFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileGcp, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcp' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfilePlatforms$inboundSchema: + z.ZodType = z + .object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponseCurrentReleaseProfileGcp$inboundSchema + )), + ).optional(), + }); + +export function syncReconcileResponseCurrentReleaseProfilePlatformsFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfilePlatforms, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfilePlatforms$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfilePlatforms' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseProfile$inboundSchema: + z.ZodType = z.object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileResponseCurrentReleaseProfilePlatforms$inboundSchema + ), + }); + +export function syncReconcileResponseCurrentReleaseProfileFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfile, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfile$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfile' from JSON`, + ); +} /** @internal */ -export const SyncReconcileResponseCurrentReleaseTypeStringList$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseTypeStringList, +export const SyncReconcileResponseCurrentReleaseProfileUnion$inboundSchema: + z.ZodType = z.union( + [ + z.lazy(() => SyncReconcileResponseCurrentReleaseProfile$inboundSchema), + z.string(), + ], + ); + +export function syncReconcileResponseCurrentReleaseProfileUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseProfileUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseProfileUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileUnion' from JSON`, ); +} /** @internal */ -export const SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema: - z.ZodType = z - .object({ - type: SyncReconcileResponseCurrentReleaseTypeStringList$inboundSchema, - value: z.array(z.string()), - }); +export const SyncReconcileResponseCurrentReleasePermissions$inboundSchema: + z.ZodType = z.object( + { + management: z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseManagement1$inboundSchema + ), + z.lazy(() => + SyncReconcileResponseCurrentReleaseManagement2$inboundSchema + ), + SyncReconcileResponseCurrentReleaseManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncReconcileResponseCurrentReleaseProfile$inboundSchema + ), + z.string(), + ]), + ), + ), + ), + }, + ); -export function syncReconcileResponseCurrentReleaseDefaultStringListFromJSON( +export function syncReconcileResponseCurrentReleasePermissionsFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseDefaultStringList, + SyncReconcileResponseCurrentReleasePermissions, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema.parse( + SyncReconcileResponseCurrentReleasePermissions$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultStringList' from JSON`, + `Failed to parse 'SyncReconcileResponseCurrentReleasePermissions' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseTypeBoolean$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseTypeBoolean, +export const SyncReconcileResponseCurrentReleaseConfig$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentReleaseConfig, + unknown +> = collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, +); + +export function syncReconcileResponseCurrentReleaseConfigFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseConfig, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseConfig$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseConfig' from JSON`, ); +} /** @internal */ -export const SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema: - z.ZodType = z - .object({ - type: SyncReconcileResponseCurrentReleaseTypeBoolean$inboundSchema, - value: z.boolean(), - }); +export const SyncReconcileResponseCurrentReleaseDependency$inboundSchema: + z.ZodType = z.object({ + id: z.string(), + type: z.string(), + }); -export function syncReconcileResponseCurrentReleaseDefaultBooleanFromJSON( +export function syncReconcileResponseCurrentReleaseDependencyFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseDefaultBoolean, + SyncReconcileResponseCurrentReleaseDependency, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema.parse( + SyncReconcileResponseCurrentReleaseDependency$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultBoolean' from JSON`, + `Failed to parse 'SyncReconcileResponseCurrentReleaseDependency' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseTypeNumber$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseTypeNumber, +export const SyncReconcileResponseCurrentReleaseLifecycle$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponseCurrentReleaseLifecycle, ); /** @internal */ -export const SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema: - z.ZodType = z - .object({ - type: SyncReconcileResponseCurrentReleaseTypeNumber$inboundSchema, - value: z.string(), - }); +export const SyncReconcileResponseCurrentReleaseResources$inboundSchema: + z.ZodType = z.object({ + config: z.lazy(() => + SyncReconcileResponseCurrentReleaseConfig$inboundSchema + ), + dependencies: z.array( + z.lazy(() => SyncReconcileResponseCurrentReleaseDependency$inboundSchema), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: SyncReconcileResponseCurrentReleaseLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), + }); -export function syncReconcileResponseCurrentReleaseDefaultNumberFromJSON( +export function syncReconcileResponseCurrentReleaseResourcesFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseDefaultNumber, + SyncReconcileResponseCurrentReleaseResources, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema.parse( + SyncReconcileResponseCurrentReleaseResources$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultNumber' from JSON`, + `Failed to parse 'SyncReconcileResponseCurrentReleaseResources' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseTypeString$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseTypeString, +export const SyncReconcileResponseCurrentReleaseSupportedPlatform$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponseCurrentReleaseSupportedPlatform); + +/** @internal */ +export const SyncReconcileResponseCurrentReleaseStack$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentReleaseStack, + unknown +> = z.object({ + id: z.string(), + inputs: z.array( + z.lazy(() => SyncReconcileResponseCurrentReleaseInput$inboundSchema), + ).optional(), + permissions: z.lazy(() => + SyncReconcileResponseCurrentReleasePermissions$inboundSchema + ).optional(), + resources: z.record( + z.string(), + z.lazy(() => SyncReconcileResponseCurrentReleaseResources$inboundSchema), + ), + supportedPlatforms: z.nullable( + z.array(SyncReconcileResponseCurrentReleaseSupportedPlatform$inboundSchema), + ).optional(), +}); + +export function syncReconcileResponseCurrentReleaseStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseCurrentReleaseStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentReleaseStack$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseCurrentReleaseStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentRelease$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentRelease, + unknown +> = z.object({ + description: z.nullable(z.string()).optional(), + releaseId: z.nullable(z.string()).optional(), + stack: z.lazy(() => SyncReconcileResponseCurrentReleaseStack$inboundSchema), + version: z.nullable(z.string()).optional(), +}); + +export function syncReconcileResponseCurrentReleaseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseCurrentRelease$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseCurrentRelease' from JSON`, ); +} /** @internal */ -export const SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema: - z.ZodType = z - .object({ - type: SyncReconcileResponseCurrentReleaseTypeString$inboundSchema, - value: z.string(), - }); +export const SyncReconcileResponseCurrentReleaseUnion$inboundSchema: z.ZodType< + SyncReconcileResponseCurrentReleaseUnion, + unknown +> = z.union([ + z.lazy(() => SyncReconcileResponseCurrentRelease$inboundSchema), + z.any(), +]); -export function syncReconcileResponseCurrentReleaseDefaultStringFromJSON( +export function syncReconcileResponseCurrentReleaseUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseDefaultString, + SyncReconcileResponseCurrentReleaseUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema.parse( + SyncReconcileResponseCurrentReleaseUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultString' from JSON`, + `Failed to parse 'SyncReconcileResponseCurrentReleaseUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseDefaultUnion$inboundSchema: - z.ZodType = z.union( - [ - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema - ), - z.any(), - ], - ); +export const SyncReconcileResponsePlatformTest$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponsePlatformTest +> = z.enum(SyncReconcileResponsePlatformTest); -export function syncReconcileResponseCurrentReleaseDefaultUnionFromJSON( +/** @internal */ +export const SyncReconcileResponseEnvironmentInfoTest$inboundSchema: z.ZodType< + SyncReconcileResponseEnvironmentInfoTest, + unknown +> = z.object({ + testId: z.string(), + platform: SyncReconcileResponsePlatformTest$inboundSchema, +}); + +export function syncReconcileResponseEnvironmentInfoTestFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseDefaultUnion, + SyncReconcileResponseEnvironmentInfoTest, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseDefaultUnion$inboundSchema.parse( + SyncReconcileResponseEnvironmentInfoTest$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseDefaultUnion' from JSON`, + `Failed to parse 'SyncReconcileResponseEnvironmentInfoTest' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseTypeEnvEnum$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseTypeEnvEnum, - ); +export const SyncReconcileResponsePlatformLocal$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponsePlatformLocal +> = z.enum(SyncReconcileResponsePlatformLocal); /** @internal */ -export const SyncReconcileResponseCurrentReleaseTypeUnion$inboundSchema: - z.ZodType = z.union([ - SyncReconcileResponseCurrentReleaseTypeEnvEnum$inboundSchema, - z.any(), - ]); +export const SyncReconcileResponseEnvironmentInfoLocal$inboundSchema: z.ZodType< + SyncReconcileResponseEnvironmentInfoLocal, + unknown +> = z.object({ + arch: z.string(), + hostname: z.string(), + os: z.string(), + platform: SyncReconcileResponsePlatformLocal$inboundSchema, +}); -export function syncReconcileResponseCurrentReleaseTypeUnionFromJSON( +export function syncReconcileResponseEnvironmentInfoLocalFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseTypeUnion, + SyncReconcileResponseEnvironmentInfoLocal, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseTypeUnion$inboundSchema.parse( + SyncReconcileResponseEnvironmentInfoLocal$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseTypeUnion' from JSON`, + `Failed to parse 'SyncReconcileResponseEnvironmentInfoLocal' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseEnv$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseEnv, +export const SyncReconcileResponseCurrentPlatformAzure$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponseCurrentPlatformAzure +> = z.enum(SyncReconcileResponseCurrentPlatformAzure); + +/** @internal */ +export const SyncReconcileResponseEnvironmentInfoAzure$inboundSchema: z.ZodType< + SyncReconcileResponseEnvironmentInfoAzure, unknown > = z.object({ - name: z.string(), - targetResources: z.nullable(z.array(z.string())).optional(), - type: z.nullable( - z.union([ - SyncReconcileResponseCurrentReleaseTypeEnvEnum$inboundSchema, - z.any(), - ]), - ).optional(), + location: z.string(), + subscriptionId: z.string(), + tenantId: z.string(), + platform: SyncReconcileResponseCurrentPlatformAzure$inboundSchema, }); -export function syncReconcileResponseCurrentReleaseEnvFromJSON( +export function syncReconcileResponseEnvironmentInfoAzureFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncReconcileResponseEnvironmentInfoAzure, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseEnv$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseEnv' from JSON`, + SyncReconcileResponseEnvironmentInfoAzure$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseEnvironmentInfoAzure' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseKind$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponseCurrentReleaseKind -> = z.enum(SyncReconcileResponseCurrentReleaseKind); - -/** @internal */ -export const SyncReconcileResponseCurrentReleasePlatform$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleasePlatform, - ); - -/** @internal */ -export const SyncReconcileResponseCurrentReleaseProvidedBy$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseProvidedBy, - ); +export const SyncReconcileResponseCurrentPlatformGcp$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponseCurrentPlatformGcp +> = z.enum(SyncReconcileResponseCurrentPlatformGcp); /** @internal */ -export const SyncReconcileResponseCurrentReleaseValidation$inboundSchema: - z.ZodType = z.object({ - format: z.nullable(z.string()).optional(), - max: z.nullable(z.string()).optional(), - maxItems: z.nullable(z.int()).optional(), - maxLength: z.nullable(z.int()).optional(), - min: z.nullable(z.string()).optional(), - minItems: z.nullable(z.int()).optional(), - minLength: z.nullable(z.int()).optional(), - pattern: z.nullable(z.string()).optional(), - values: z.nullable(z.array(z.string())).optional(), - }); +export const SyncReconcileResponseEnvironmentInfoGcp$inboundSchema: z.ZodType< + SyncReconcileResponseEnvironmentInfoGcp, + unknown +> = z.object({ + projectId: z.string(), + projectNumber: z.string(), + region: z.string(), + platform: SyncReconcileResponseCurrentPlatformGcp$inboundSchema, +}); -export function syncReconcileResponseCurrentReleaseValidationFromJSON( +export function syncReconcileResponseEnvironmentInfoGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseValidation, + SyncReconcileResponseEnvironmentInfoGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseValidation$inboundSchema.parse( + SyncReconcileResponseEnvironmentInfoGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseValidation' from JSON`, + `Failed to parse 'SyncReconcileResponseEnvironmentInfoGcp' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseValidationUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => SyncReconcileResponseCurrentReleaseValidation$inboundSchema), - z.any(), - ]); +export const SyncReconcileResponseCurrentPlatformAws$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponseCurrentPlatformAws +> = z.enum(SyncReconcileResponseCurrentPlatformAws); -export function syncReconcileResponseCurrentReleaseValidationUnionFromJSON( +/** @internal */ +export const SyncReconcileResponseEnvironmentInfoAws$inboundSchema: z.ZodType< + SyncReconcileResponseEnvironmentInfoAws, + unknown +> = z.object({ + accountId: z.string(), + region: z.string(), + platform: SyncReconcileResponseCurrentPlatformAws$inboundSchema, +}); + +export function syncReconcileResponseEnvironmentInfoAwsFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseValidationUnion, + SyncReconcileResponseEnvironmentInfoAws, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseValidationUnion$inboundSchema.parse( + SyncReconcileResponseEnvironmentInfoAws$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseValidationUnion' from JSON`, + `Failed to parse 'SyncReconcileResponseEnvironmentInfoAws' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseInput$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseInput, +export const SyncReconcileResponseEnvironmentInfoUnion$inboundSchema: z.ZodType< + SyncReconcileResponseEnvironmentInfoUnion, unknown -> = z.object({ - default: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultString$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultNumber$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultBoolean$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseDefaultStringList$inboundSchema - ), - z.any(), - ]), - ).optional(), - description: z.string(), - env: z.array( - z.lazy(() => SyncReconcileResponseCurrentReleaseEnv$inboundSchema), - ).optional(), - id: z.string(), - kind: SyncReconcileResponseCurrentReleaseKind$inboundSchema, - label: z.string(), - placeholder: z.nullable(z.string()).optional(), - platforms: z.nullable( - z.array(SyncReconcileResponseCurrentReleasePlatform$inboundSchema), - ).optional(), - providedBy: z.array( - SyncReconcileResponseCurrentReleaseProvidedBy$inboundSchema, - ), - required: z.boolean(), - validation: z.nullable( - z.union([ - z.lazy(() => SyncReconcileResponseCurrentReleaseValidation$inboundSchema), - z.any(), - ]), - ).optional(), -}); +> = z.union([ + z.lazy(() => SyncReconcileResponseEnvironmentInfoGcp$inboundSchema), + z.lazy(() => SyncReconcileResponseEnvironmentInfoAzure$inboundSchema), + z.lazy(() => SyncReconcileResponseEnvironmentInfoLocal$inboundSchema), + z.lazy(() => SyncReconcileResponseEnvironmentInfoAws$inboundSchema), + z.lazy(() => SyncReconcileResponseEnvironmentInfoTest$inboundSchema), + z.any(), +]); -export function syncReconcileResponseCurrentReleaseInputFromJSON( +export function syncReconcileResponseEnvironmentInfoUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseInput, + SyncReconcileResponseEnvironmentInfoUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseInput$inboundSchema.parse( + SyncReconcileResponseEnvironmentInfoUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseInput' from JSON`, + `Failed to parse 'SyncReconcileResponseEnvironmentInfoUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseManagementEnum$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseManagementEnum, +export const SyncReconcileResponseError$inboundSchema: z.ZodType< + SyncReconcileResponseError, + unknown +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function syncReconcileResponseErrorFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncReconcileResponseError$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseError' from JSON`, ); +} /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAwResource$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); +export const SyncReconcileResponseErrorUnion$inboundSchema: z.ZodType< + SyncReconcileResponseErrorUnion, + unknown +> = z.union([z.lazy(() => SyncReconcileResponseError$inboundSchema), z.any()]); -export function syncReconcileResponseCurrentReleaseOverrideAwResourceFromJSON( +export function syncReconcileResponseErrorUnionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => SyncReconcileResponseErrorUnion$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseErrorUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseCurrentPlatform$inboundSchema: z.ZodEnum< + typeof SyncReconcileResponseCurrentPlatform +> = z.enum(SyncReconcileResponseCurrentPlatform); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackTypeStringList$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackTypeStringList); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackDefaultStringList$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackDefaultStringList, + unknown + > = z.object({ + type: SyncReconcileResponsePendingPreparedStackTypeStringList$inboundSchema, + value: z.array(z.string()), + }); + +export function syncReconcileResponsePendingPreparedStackDefaultStringListFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAwResource, + SyncReconcileResponsePendingPreparedStackDefaultStringList, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAwResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwResource' from JSON`, + SyncReconcileResponsePendingPreparedStackDefaultStringList$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackDefaultStringList' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAwStack$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), +export const SyncReconcileResponsePendingPreparedStackTypeBoolean$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackTypeBoolean); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackDefaultBoolean$inboundSchema: + z.ZodType = + z.object({ + type: SyncReconcileResponsePendingPreparedStackTypeBoolean$inboundSchema, + value: z.boolean(), }); -export function syncReconcileResponseCurrentReleaseOverrideAwStackFromJSON( +export function syncReconcileResponsePendingPreparedStackDefaultBooleanFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAwStack, + SyncReconcileResponsePendingPreparedStackDefaultBoolean, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAwStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwStack' from JSON`, + SyncReconcileResponsePendingPreparedStackDefaultBoolean$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackDefaultBoolean' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAwBinding$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackTypeNumber$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackTypeNumber); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackDefaultNumber$inboundSchema: + z.ZodType = z .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAwStack$inboundSchema - ).optional(), + type: SyncReconcileResponsePendingPreparedStackTypeNumber$inboundSchema, + value: z.string(), }); -export function syncReconcileResponseCurrentReleaseOverrideAwBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackDefaultNumberFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAwBinding, + SyncReconcileResponsePendingPreparedStackDefaultNumber, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAwBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackDefaultNumber$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackDefaultNumber' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideEffect$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseOverrideEffect, - ); +export const SyncReconcileResponsePendingPreparedStackTypeString$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackTypeString); /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAwGrant$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackDefaultString$inboundSchema: + z.ZodType = z .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), + type: SyncReconcileResponsePendingPreparedStackTypeString$inboundSchema, + value: z.string(), }); -export function syncReconcileResponseCurrentReleaseOverrideAwGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackDefaultStringFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAwGrant, + SyncReconcileResponsePendingPreparedStackDefaultString, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAwGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAwGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackDefaultString$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackDefaultString' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAw$inboundSchema: - z.ZodType = z.object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: SyncReconcileResponseCurrentReleaseOverrideEffect$inboundSchema - .optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAwGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackDefaultUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleaseOverrideAwFromJSON( +export function syncReconcileResponsePendingPreparedStackDefaultUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAw, + SyncReconcileResponsePendingPreparedStackDefaultUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAw$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackDefaultUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAw' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackDefaultUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAzureResource$inboundSchema: - z.ZodType = - z.object({ - scope: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackTypeEnvEnum$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackTypeEnvEnum); -export function syncReconcileResponseCurrentReleaseOverrideAzureResourceFromJSON( +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackTypeUnion$inboundSchema: + z.ZodType = z + .union([ + SyncReconcileResponsePendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]); + +export function syncReconcileResponsePendingPreparedStackTypeUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAzureResource, + SyncReconcileResponsePendingPreparedStackTypeUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAzureResource$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureResource' from JSON`, + SyncReconcileResponsePendingPreparedStackTypeUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackTypeUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAzureStack$inboundSchema: - z.ZodType = z - .object({ - scope: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackEnv$inboundSchema: + z.ZodType = z.object({ + name: z.string(), + targetResources: z.nullable(z.array(z.string())).optional(), + type: z.nullable( + z.union([ + SyncReconcileResponsePendingPreparedStackTypeEnvEnum$inboundSchema, + z.any(), + ]), + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseOverrideAzureStackFromJSON( +export function syncReconcileResponsePendingPreparedStackEnvFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAzureStack, + SyncReconcileResponsePendingPreparedStackEnv, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAzureStack$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackEnv$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureStack' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackEnv' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAzureBinding$inboundSchema: - z.ZodType = - z.object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAzureStack$inboundSchema - ).optional(), +export const SyncReconcileResponsePendingPreparedStackKind$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponsePendingPreparedStackKind, + ); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackPlatform$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponsePendingPreparedStackPlatform, + ); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackProvidedBy$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackProvidedBy); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackValidation$inboundSchema: + z.ZodType = z + .object({ + format: z.nullable(z.string()).optional(), + max: z.nullable(z.string()).optional(), + maxItems: z.nullable(z.int()).optional(), + maxLength: z.nullable(z.int()).optional(), + min: z.nullable(z.string()).optional(), + minItems: z.nullable(z.int()).optional(), + minLength: z.nullable(z.int()).optional(), + pattern: z.nullable(z.string()).optional(), + values: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileResponseCurrentReleaseOverrideAzureBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackValidationFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAzureBinding, + SyncReconcileResponsePendingPreparedStackValidation, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAzureBinding$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackValidation$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackValidation' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAzureGrant$inboundSchema: - z.ZodType = z - .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackValidationUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackValidation$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleaseOverrideAzureGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackValidationUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAzureGrant, + SyncReconcileResponsePendingPreparedStackValidationUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAzureGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzureGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackValidationUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackValidationUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideAzure$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAzureGrant$inboundSchema +export const SyncReconcileResponsePendingPreparedStackInput$inboundSchema: + z.ZodType = z.object( + { + default: z.nullable(z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultString$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultNumber$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultBoolean$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDefaultStringList$inboundSchema + ), + z.any(), + ])).optional(), + description: z.string(), + env: z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackEnv$inboundSchema + )).optional(), + id: z.string(), + kind: SyncReconcileResponsePendingPreparedStackKind$inboundSchema, + label: z.string(), + placeholder: z.nullable(z.string()).optional(), + platforms: z.nullable( + z.array( + SyncReconcileResponsePendingPreparedStackPlatform$inboundSchema, + ), + ).optional(), + providedBy: z.array( + SyncReconcileResponsePendingPreparedStackProvidedBy$inboundSchema, ), - label: z.nullable(z.string()).optional(), - }); + required: z.boolean(), + validation: z.nullable(z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackValidation$inboundSchema + ), + z.any(), + ])).optional(), + }, + ); -export function syncReconcileResponseCurrentReleaseOverrideAzureFromJSON( +export function syncReconcileResponsePendingPreparedStackInputFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideAzure, + SyncReconcileResponsePendingPreparedStackInput, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideAzure$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackInput$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideAzure' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackInput' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema: +export const SyncReconcileResponsePendingPreparedStackManagementEnum$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackManagementEnum); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackOverrideAwResource$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseOverrideConditionResource, + SyncReconcileResponsePendingPreparedStackOverrideAwResource, unknown > = z.object({ - expression: z.string(), - title: z.string(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncReconcileResponseCurrentReleaseOverrideConditionResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAwResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideConditionResource, + SyncReconcileResponsePendingPreparedStackOverrideAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema + SyncReconcileResponsePendingPreparedStackOverrideAwResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideConditionResource' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAwResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion$inboundSchema: +export const SyncReconcileResponsePendingPreparedStackOverrideAwStack$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponsePendingPreparedStackOverrideAwStackFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponsePendingPreparedStackOverrideAwStack, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponsePendingPreparedStackOverrideAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAwStack' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackOverrideAwBinding$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion, + SyncReconcileResponsePendingPreparedStackOverrideAwBinding, unknown - > = z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema - ), - z.any(), - ]); + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAwStack$inboundSchema + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseOverrideResourceConditionUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion, + SyncReconcileResponsePendingPreparedStackOverrideAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion$inboundSchema + SyncReconcileResponsePendingPreparedStackOverrideAwBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideResourceConditionUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAwBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideGcpResource$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), +export const SyncReconcileResponsePendingPreparedStackOverrideEffect$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackOverrideEffect); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackOverrideAwGrant$inboundSchema: + z.ZodType = + z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileResponseCurrentReleaseOverrideGcpResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideGcpResource, + SyncReconcileResponsePendingPreparedStackOverrideAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideGcpResource$inboundSchema + SyncReconcileResponsePendingPreparedStackOverrideAwGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpResource' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAwGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackOverrideAw$inboundSchema: + z.ZodType = z .object({ - expression: z.string(), - title: z.string(), + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncReconcileResponsePendingPreparedStackOverrideEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncReconcileResponseCurrentReleaseOverrideConditionFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAwFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideCondition, + SyncReconcileResponsePendingPreparedStackOverrideAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackOverrideAw$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideCondition' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAw' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideConditionUnion$inboundSchema: +export const SyncReconcileResponsePendingPreparedStackOverrideAzureResource$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseOverrideConditionUnion, + SyncReconcileResponsePendingPreparedStackOverrideAzureResource, unknown - > = z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema - ), - z.any(), - ]); + > = z.object({ + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseOverrideConditionUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideConditionUnion, + SyncReconcileResponsePendingPreparedStackOverrideAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideConditionUnion$inboundSchema + SyncReconcileResponsePendingPreparedStackOverrideAzureResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideConditionUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAzureResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideGcpStack$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideCondition$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideAzureStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseOverrideGcpStackFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAzureStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideGcpStack, + SyncReconcileResponsePendingPreparedStackOverrideAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideGcpStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpStack' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAzureStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideGcpBinding$inboundSchema: - z.ZodType = z - .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideGcpResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideGcpStack$inboundSchema - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideAzureBinding$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAzureStack$inboundSchema + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseOverrideGcpBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideGcpBinding, + SyncReconcileResponsePendingPreparedStackOverrideAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideGcpBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAzureBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideGcpGrant$inboundSchema: - z.ZodType = z - .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideAzureGrant$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncReconcileResponseCurrentReleaseOverrideGcpGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideGcpGrant, + SyncReconcileResponsePendingPreparedStackOverrideAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideGcpGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcpGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAzureGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideGcp$inboundSchema: - z.ZodType = z.object( - { +export const SyncReconcileResponsePendingPreparedStackOverrideAzure$inboundSchema: + z.ZodType = z + .object({ binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideGcpBinding$inboundSchema + SyncReconcileResponsePendingPreparedStackOverrideAzureBinding$inboundSchema ), description: z.nullable(z.string()).optional(), grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideGcpGrant$inboundSchema + SyncReconcileResponsePendingPreparedStackOverrideAzureGrant$inboundSchema ), label: z.nullable(z.string()).optional(), - }, - ); - -export function syncReconcileResponseCurrentReleaseOverrideGcpFromJSON( - jsonString: string, -): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideGcp, - SDKValidationError -> { - return safeParse( - jsonString, - (x) => - SyncReconcileResponseCurrentReleaseOverrideGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideGcp' from JSON`, - ); -} - -/** @internal */ -export const SyncReconcileResponseCurrentReleaseOverridePlatforms$inboundSchema: - z.ZodType = z - .object({ - aws: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAw$inboundSchema - )), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideAzure$inboundSchema - )), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseOverrideGcp$inboundSchema - )), - ).optional(), }); -export function syncReconcileResponseCurrentReleaseOverridePlatformsFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverridePlatforms, + SyncReconcileResponsePendingPreparedStackOverrideAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverridePlatforms$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverridePlatforms' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideAzure$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideAzure' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverride$inboundSchema: - z.ZodType = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncReconcileResponseCurrentReleaseOverridePlatforms$inboundSchema - ), +export const SyncReconcileResponsePendingPreparedStackOverrideConditionResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), }); -export function syncReconcileResponseCurrentReleaseOverrideFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverride, + SyncReconcileResponsePendingPreparedStackOverrideConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverride$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverride' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideConditionResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseOverrideUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => SyncReconcileResponseCurrentReleaseOverride$inboundSchema), - z.string(), - ]); +export const SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleaseOverrideUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseOverrideUnion, + SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseOverrideUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseOverrideUnion' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseManagement2$inboundSchema: - z.ZodType = z.object( - { - override: z.record( - z.string(), - z.array( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseOverride$inboundSchema - ), - z.string(), - ]), +export const SyncReconcileResponsePendingPreparedStackOverrideGcpResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideConditionResource$inboundSchema ), - ), - }, - ); + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseManagement2FromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseManagement2, + SyncReconcileResponsePendingPreparedStackOverrideGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseManagement2$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseManagement2' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideGcpResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAwResource$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideConditionStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncReconcileResponseCurrentReleaseExtendAwResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideConditionStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAwResource, + SyncReconcileResponsePendingPreparedStackOverrideConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAwResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwResource' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideConditionStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAwStack$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleaseExtendAwStackFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAwStack, + SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAwStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwStack' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAwBinding$inboundSchema: - z.ZodType = z - .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAwStack$inboundSchema - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideGcpStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideGcpStack, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseExtendAwBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAwBinding, + SyncReconcileResponsePendingPreparedStackOverrideGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAwBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideGcpStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendEffect$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseExtendEffect, - ); - -/** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAwGrant$inboundSchema: - z.ZodType = z - .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideGcpBinding$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideGcpStack$inboundSchema + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseExtendAwGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAwGrant, + SyncReconcileResponsePendingPreparedStackOverrideGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAwGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAwGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideGcpBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAw$inboundSchema: - z.ZodType = z.object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: SyncReconcileResponseCurrentReleaseExtendEffect$inboundSchema - .optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAwGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), +export const SyncReconcileResponsePendingPreparedStackOverrideGcpGrant$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverrideGcpGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileResponseCurrentReleaseExtendAwFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAw, + SyncReconcileResponsePendingPreparedStackOverrideGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAw$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAw' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideGcpGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAzureResource$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackOverrideGcp$inboundSchema: + z.ZodType = z .object({ - scope: z.string(), + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncReconcileResponseCurrentReleaseExtendAzureResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAzureResource, + SyncReconcileResponsePendingPreparedStackOverrideGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAzureResource$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureResource' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideGcp$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideGcp' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAzureStack$inboundSchema: - z.ZodType = z - .object({ - scope: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackOverridePlatforms$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackOverridePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverrideGcp$inboundSchema + )), + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseExtendAzureStackFromJSON( +export function syncReconcileResponsePendingPreparedStackOverridePlatformsFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAzureStack, + SyncReconcileResponsePendingPreparedStackOverridePlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAzureStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureStack' from JSON`, + SyncReconcileResponsePendingPreparedStackOverridePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverridePlatforms' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAzureBinding$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackOverride$inboundSchema: + z.ZodType = z .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAzureStack$inboundSchema - ).optional(), + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverridePlatforms$inboundSchema + ), }); -export function syncReconcileResponseCurrentReleaseExtendAzureBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAzureBinding, + SyncReconcileResponsePendingPreparedStackOverride, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAzureBinding$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackOverride$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureBinding' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverride' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAzureGrant$inboundSchema: - z.ZodType = z - .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackOverrideUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverride$inboundSchema + ), + z.string(), + ]); -export function syncReconcileResponseCurrentReleaseExtendAzureGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackOverrideUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAzureGrant, + SyncReconcileResponsePendingPreparedStackOverrideUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAzureGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzureGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackOverrideUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackOverrideUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendAzure$inboundSchema: - z.ZodType = z.object( - { - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAzureBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAzureGrant$inboundSchema +export const SyncReconcileResponsePendingPreparedStackManagement2$inboundSchema: + z.ZodType = z + .object({ + override: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackOverride$inboundSchema + ), + z.string(), + ])), ), - label: z.nullable(z.string()).optional(), - }, - ); + }); -export function syncReconcileResponseCurrentReleaseExtendAzureFromJSON( +export function syncReconcileResponsePendingPreparedStackManagement2FromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendAzure, + SyncReconcileResponsePendingPreparedStackManagement2, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendAzure$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackManagement2$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendAzure' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackManagement2' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema: +export const SyncReconcileResponsePendingPreparedStackExtendAwResource$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseExtendConditionResource, + SyncReconcileResponsePendingPreparedStackExtendAwResource, unknown > = z.object({ - expression: z.string(), - title: z.string(), + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncReconcileResponseCurrentReleaseExtendConditionResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAwResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendConditionResource, + SyncReconcileResponsePendingPreparedStackExtendAwResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema + SyncReconcileResponsePendingPreparedStackExtendAwResource$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendConditionResource' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAwResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion$inboundSchema: - z.ZodType< - SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion, - unknown - > = z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema - ), - z.any(), - ]); +export const SyncReconcileResponsePendingPreparedStackExtendAwStack$inboundSchema: + z.ZodType = z + .object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); -export function syncReconcileResponseCurrentReleaseExtendResourceConditionUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAwStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion, + SyncReconcileResponsePendingPreparedStackExtendAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion$inboundSchema + SyncReconcileResponsePendingPreparedStackExtendAwStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendResourceConditionUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAwStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendGcpResource$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendConditionResource$inboundSchema - ), - z.any(), - ]), +export const SyncReconcileResponsePendingPreparedStackExtendAwBinding$inboundSchema: + z.ZodType = + z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAwStack$inboundSchema ).optional(), - scope: z.string(), }); -export function syncReconcileResponseCurrentReleaseExtendGcpResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendGcpResource, + SyncReconcileResponsePendingPreparedStackExtendAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendGcpResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpResource' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAwBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAwBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackExtendEffect$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackExtendEffect); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackExtendAwGrant$inboundSchema: + z.ZodType = z .object({ - expression: z.string(), - title: z.string(), + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileResponseCurrentReleaseExtendConditionFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendCondition, + SyncReconcileResponsePendingPreparedStackExtendAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendCondition' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAwGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAwGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendConditionUnion$inboundSchema: - z.ZodType = - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema +export const SyncReconcileResponsePendingPreparedStackExtendAw$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAwBinding$inboundSchema ), - z.any(), - ]); + description: z.nullable(z.string()).optional(), + effect: + SyncReconcileResponsePendingPreparedStackExtendEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncReconcileResponseCurrentReleaseExtendConditionUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAwFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendConditionUnion, + SyncReconcileResponsePendingPreparedStackExtendAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendConditionUnion$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendConditionUnion' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAw$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAw' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendGcpStack$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendCondition$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackExtendAzureResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseExtendGcpStackFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendGcpStack, + SyncReconcileResponsePendingPreparedStackExtendAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendGcpStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpStack' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAzureResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendGcpBinding$inboundSchema: - z.ZodType = z - .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendGcpResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendGcpStack$inboundSchema - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackExtendAzureStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseExtendGcpBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAzureStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendGcpBinding, + SyncReconcileResponsePendingPreparedStackExtendAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendGcpBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAzureStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAzureStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendGcpGrant$inboundSchema: - z.ZodType = z - .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackExtendAzureBinding$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAzureStack$inboundSchema + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseExtendGcpGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendGcpGrant, + SyncReconcileResponsePendingPreparedStackExtendAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendGcpGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcpGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAzureBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendGcp$inboundSchema: - z.ZodType = z.object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendGcpGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), +export const SyncReconcileResponsePendingPreparedStackExtendAzureGrant$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileResponseCurrentReleaseExtendGcpFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendGcp, + SyncReconcileResponsePendingPreparedStackExtendAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendGcp' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAzureGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendPlatforms$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackExtendAzure$inboundSchema: + z.ZodType = z .object({ - aws: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAw$inboundSchema - )), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendAzure$inboundSchema - )), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendGcp$inboundSchema - )), - ).optional(), + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncReconcileResponseCurrentReleaseExtendPlatformsFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendPlatforms, + SyncReconcileResponsePendingPreparedStackExtendAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendPlatforms$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackExtendAzure$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendPlatforms' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendAzure' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtend$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseExtend, - unknown -> = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncReconcileResponseCurrentReleaseExtendPlatforms$inboundSchema - ), -}); +export const SyncReconcileResponsePendingPreparedStackExtendConditionResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncReconcileResponseCurrentReleaseExtendFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtend, + SyncReconcileResponsePendingPreparedStackExtendConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtend$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtend' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendConditionResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseExtendUnion$inboundSchema: - z.ZodType = z.union([ - z.lazy(() => SyncReconcileResponseCurrentReleaseExtend$inboundSchema), - z.string(), +export const SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendConditionResource$inboundSchema + ), + z.any(), ]); -export function syncReconcileResponseCurrentReleaseExtendUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseExtendUnion, + SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseExtendUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseExtendUnion' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseManagement1$inboundSchema: - z.ZodType = z.object( - { - extend: z.record( - z.string(), - z.array( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseExtend$inboundSchema - ), - z.string(), - ]), +export const SyncReconcileResponsePendingPreparedStackExtendGcpResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendConditionResource$inboundSchema ), - ), - }, - ); + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseManagement1FromJSON( +export function syncReconcileResponsePendingPreparedStackExtendGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseManagement1, + SyncReconcileResponsePendingPreparedStackExtendGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseManagement1$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseManagement1' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendGcpResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseManagementUnion$inboundSchema: - z.ZodType = z - .union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseManagement1$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseManagement2$inboundSchema - ), - SyncReconcileResponseCurrentReleaseManagementEnum$inboundSchema, - ]); +export const SyncReconcileResponsePendingPreparedStackExtendConditionStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncReconcileResponseCurrentReleaseManagementUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendConditionStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseManagementUnion, + SyncReconcileResponsePendingPreparedStackExtendConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseManagementUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseManagementUnion' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendConditionStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAwResource$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), - ).optional(), - resources: z.array(z.string()), - }); +export const SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleaseProfileAwResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAwResource, + SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAwResource$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwResource' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAwStack$inboundSchema: - z.ZodType = z - .object({ +export const SyncReconcileResponsePendingPreparedStackExtendGcpStack$inboundSchema: + z.ZodType = + z.object({ condition: z.nullable( - z.record(z.string(), z.record(z.string(), z.string())), + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendConditionStack$inboundSchema + ), + z.any(), + ]), ).optional(), - resources: z.array(z.string()), + scope: z.string(), }); -export function syncReconcileResponseCurrentReleaseProfileAwStackFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAwStack, + SyncReconcileResponsePendingPreparedStackExtendGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAwStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwStack' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendGcpStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAwBinding$inboundSchema: - z.ZodType = z - .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAwResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAwStack$inboundSchema - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackExtendGcpBinding$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackExtendGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendGcpStack$inboundSchema + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseProfileAwBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAwBinding, + SyncReconcileResponsePendingPreparedStackExtendGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAwBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendGcpBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileEffect$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseProfileEffect, - ); - -/** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema: - z.ZodType = z - .object({ +export const SyncReconcileResponsePendingPreparedStackExtendGcpGrant$inboundSchema: + z.ZodType = + z.object({ actions: z.nullable(z.array(z.string())).optional(), dataActions: z.nullable(z.array(z.string())).optional(), permissions: z.nullable(z.array(z.string())).optional(), @@ -13273,971 +17435,1027 @@ export const SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema: residualPermissions: z.nullable(z.array(z.string())).optional(), }); -export function syncReconcileResponseCurrentReleaseProfileAwGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAwGrant, + SyncReconcileResponsePendingPreparedStackExtendGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAwGrant' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendGcpGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAw$inboundSchema: - z.ZodType = z.object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAwBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - effect: SyncReconcileResponseCurrentReleaseProfileEffect$inboundSchema - .optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAwGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackExtendGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncReconcileResponseCurrentReleaseProfileAwFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAw, + SyncReconcileResponsePendingPreparedStackExtendGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAw$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackExtendGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAw' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendGcp' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAzureResource$inboundSchema: - z.ZodType = +export const SyncReconcileResponsePendingPreparedStackExtendPlatforms$inboundSchema: + z.ZodType = z.object({ - scope: z.string(), + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendGcp$inboundSchema + )), + ).optional(), }); -export function syncReconcileResponseCurrentReleaseProfileAzureResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendPlatformsFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAzureResource, + SyncReconcileResponsePendingPreparedStackExtendPlatforms, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAzureResource$inboundSchema + SyncReconcileResponsePendingPreparedStackExtendPlatforms$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureResource' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendPlatforms' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAzureStack$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackExtend$inboundSchema: + z.ZodType = z .object({ - scope: z.string(), + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtendPlatforms$inboundSchema + ), }); -export function syncReconcileResponseCurrentReleaseProfileAzureStackFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAzureStack, + SyncReconcileResponsePendingPreparedStackExtend, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAzureStack$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackExtend$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureStack' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtend' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAzureBinding$inboundSchema: - z.ZodType = z - .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAzureResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAzureStack$inboundSchema - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackExtendUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtend$inboundSchema + ), + z.string(), + ]); -export function syncReconcileResponseCurrentReleaseProfileAzureBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackExtendUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAzureBinding, + SyncReconcileResponsePendingPreparedStackExtendUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAzureBinding$inboundSchema - .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackExtendUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackExtendUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAzureGrant$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackManagement1$inboundSchema: + z.ZodType = z .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), + extend: z.record( + z.string(), + z.array(z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackExtend$inboundSchema + ), + z.string(), + ])), + ), }); -export function syncReconcileResponseCurrentReleaseProfileAzureGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackManagement1FromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAzureGrant, + SyncReconcileResponsePendingPreparedStackManagement1, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAzureGrant$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackManagement1$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzureGrant' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackManagement1' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileAzure$inboundSchema: - z.ZodType = z - .object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAzureBinding$inboundSchema +export const SyncReconcileResponsePendingPreparedStackManagementUnion$inboundSchema: + z.ZodType = + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackManagement1$inboundSchema ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAzureGrant$inboundSchema + z.lazy(() => + SyncReconcileResponsePendingPreparedStackManagement2$inboundSchema ), - label: z.nullable(z.string()).optional(), + SyncReconcileResponsePendingPreparedStackManagementEnum$inboundSchema, + ]); + +export function syncReconcileResponsePendingPreparedStackManagementUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponsePendingPreparedStackManagementUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponsePendingPreparedStackManagementUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackManagementUnion' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackProfileAwResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileAwResource, + unknown + > = z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), + }); + +export function syncReconcileResponsePendingPreparedStackProfileAwResourceFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponsePendingPreparedStackProfileAwResource, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponsePendingPreparedStackProfileAwResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAwResource' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackProfileAwStack$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.record(z.string(), z.record(z.string(), z.string())), + ).optional(), + resources: z.array(z.string()), }); -export function syncReconcileResponseCurrentReleaseProfileAzureFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAwStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileAzure, + SyncReconcileResponsePendingPreparedStackProfileAwStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileAzure$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileAzure' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileAwStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAwStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema: +export const SyncReconcileResponsePendingPreparedStackProfileAwBinding$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseProfileConditionResource, + SyncReconcileResponsePendingPreparedStackProfileAwBinding, unknown > = z.object({ - expression: z.string(), - title: z.string(), + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAwResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAwStack$inboundSchema + ).optional(), }); -export function syncReconcileResponseCurrentReleaseProfileConditionResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAwBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileConditionResource, + SyncReconcileResponsePendingPreparedStackProfileAwBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema + SyncReconcileResponsePendingPreparedStackProfileAwBinding$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileConditionResource' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAwBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion$inboundSchema: - z.ZodType< - SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion, - unknown - > = z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema - ), - z.any(), - ]); +export const SyncReconcileResponsePendingPreparedStackProfileEffect$inboundSchema: + z.ZodEnum = z + .enum(SyncReconcileResponsePendingPreparedStackProfileEffect); -export function syncReconcileResponseCurrentReleaseProfileResourceConditionUnionFromJSON( +/** @internal */ +export const SyncReconcileResponsePendingPreparedStackProfileAwGrant$inboundSchema: + z.ZodType = + z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); + +export function syncReconcileResponsePendingPreparedStackProfileAwGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion, + SyncReconcileResponsePendingPreparedStackProfileAwGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion$inboundSchema + SyncReconcileResponsePendingPreparedStackProfileAwGrant$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileResourceConditionUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAwGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileGcpResource$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackProfileAw$inboundSchema: + z.ZodType = z .object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileConditionResource$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAwBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + effect: + SyncReconcileResponsePendingPreparedStackProfileEffect$inboundSchema + .optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAwGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncReconcileResponseCurrentReleaseProfileGcpResourceFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAwFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileGcpResource, + SyncReconcileResponsePendingPreparedStackProfileAw, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileGcpResource$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackProfileAw$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpResource' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAw' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema: - z.ZodType = z - .object({ - expression: z.string(), - title: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackProfileAzureResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileAzureResource, + unknown + > = z.object({ + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseProfileConditionFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAzureResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileCondition, + SyncReconcileResponsePendingPreparedStackProfileAzureResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileCondition' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileAzureResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAzureResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileConditionUnion$inboundSchema: - z.ZodType = - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema - ), - z.any(), - ]); +export const SyncReconcileResponsePendingPreparedStackProfileAzureStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileAzureStack, + unknown + > = z.object({ + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseProfileConditionUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAzureStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileConditionUnion, + SyncReconcileResponsePendingPreparedStackProfileAzureStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileConditionUnion$inboundSchema + SyncReconcileResponsePendingPreparedStackProfileAzureStack$inboundSchema .parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileConditionUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAzureStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileGcpStack$inboundSchema: - z.ZodType = z - .object({ - condition: z.nullable( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileCondition$inboundSchema - ), - z.any(), - ]), - ).optional(), - scope: z.string(), - }); +export const SyncReconcileResponsePendingPreparedStackProfileAzureBinding$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileAzureBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAzureResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAzureStack$inboundSchema + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseProfileGcpStackFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAzureBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileGcpStack, + SyncReconcileResponsePendingPreparedStackProfileAzureBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileGcpStack$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpStack' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileAzureBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAzureBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileGcpBinding$inboundSchema: - z.ZodType = z - .object({ - resource: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileGcpResource$inboundSchema - ).optional(), - stack: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileGcpStack$inboundSchema - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackProfileAzureGrant$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileAzureGrant, + unknown + > = z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncReconcileResponseCurrentReleaseProfileGcpBindingFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAzureGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileGcpBinding, + SyncReconcileResponsePendingPreparedStackProfileAzureGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileGcpBinding$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpBinding' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileAzureGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAzureGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileGcpGrant$inboundSchema: - z.ZodType = z +export const SyncReconcileResponsePendingPreparedStackProfileAzure$inboundSchema: + z.ZodType = z .object({ - actions: z.nullable(z.array(z.string())).optional(), - dataActions: z.nullable(z.array(z.string())).optional(), - permissions: z.nullable(z.array(z.string())).optional(), - predefinedRoles: z.nullable(z.array(z.string())).optional(), - residualPermissions: z.nullable(z.array(z.string())).optional(), + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAzureBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAzureGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), }); -export function syncReconcileResponseCurrentReleaseProfileGcpGrantFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileAzureFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileGcpGrant, + SyncReconcileResponsePendingPreparedStackProfileAzure, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileGcpGrant$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackProfileAzure$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcpGrant' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileAzure' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileGcp$inboundSchema: - z.ZodType = z.object({ - binding: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileGcpBinding$inboundSchema - ), - description: z.nullable(z.string()).optional(), - grant: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileGcpGrant$inboundSchema - ), - label: z.nullable(z.string()).optional(), +export const SyncReconcileResponsePendingPreparedStackProfileConditionResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileConditionResource, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), }); -export function syncReconcileResponseCurrentReleaseProfileGcpFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileConditionResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileGcp, + SyncReconcileResponsePendingPreparedStackProfileConditionResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileGcp$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileGcp' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileConditionResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileConditionResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfilePlatforms$inboundSchema: - z.ZodType = z - .object({ - aws: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAw$inboundSchema - )), - ).optional(), - azure: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileAzure$inboundSchema - )), - ).optional(), - gcp: z.nullable( - z.array(z.lazy(() => - SyncReconcileResponseCurrentReleaseProfileGcp$inboundSchema - )), - ).optional(), - }); +export const SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleaseProfilePlatformsFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileResourceConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfilePlatforms, + SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfilePlatforms$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfilePlatforms' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileResourceConditionUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfile$inboundSchema: - z.ZodType = z.object({ - description: z.string(), - id: z.string(), - platforms: z.lazy(() => - SyncReconcileResponseCurrentReleaseProfilePlatforms$inboundSchema - ), +export const SyncReconcileResponsePendingPreparedStackProfileGcpResource$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileGcpResource, + unknown + > = z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileConditionResource$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), }); -export function syncReconcileResponseCurrentReleaseProfileFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileGcpResourceFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfile, + SyncReconcileResponsePendingPreparedStackProfileGcpResource, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfile$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfile' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileGcpResource$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileGcpResource' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseProfileUnion$inboundSchema: - z.ZodType = z.union( - [ - z.lazy(() => SyncReconcileResponseCurrentReleaseProfile$inboundSchema), - z.string(), - ], - ); +export const SyncReconcileResponsePendingPreparedStackProfileConditionStack$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileConditionStack, + unknown + > = z.object({ + expression: z.string(), + title: z.string(), + }); -export function syncReconcileResponseCurrentReleaseProfileUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileConditionStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseProfileUnion, + SyncReconcileResponsePendingPreparedStackProfileConditionStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseProfileUnion$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseProfileUnion' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileConditionStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileConditionStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleasePermissions$inboundSchema: - z.ZodType = z.object( - { - management: z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseManagement1$inboundSchema - ), - z.lazy(() => - SyncReconcileResponseCurrentReleaseManagement2$inboundSchema - ), - SyncReconcileResponseCurrentReleaseManagementEnum$inboundSchema, - ]).optional(), - profiles: z.record( - z.string(), - z.record( - z.string(), - z.array( - z.union([ - z.lazy(() => - SyncReconcileResponseCurrentReleaseProfile$inboundSchema - ), - z.string(), - ]), - ), - ), - ), - }, - ); +export const SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion, + unknown + > = z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]); -export function syncReconcileResponseCurrentReleasePermissionsFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileStackConditionUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleasePermissions, + SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleasePermissions$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleasePermissions' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileStackConditionUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseConfig$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseConfig, - unknown -> = collectExtraKeys$( - z.object({ - id: z.string(), - type: z.string(), - }).catchall(z.any()), - "additionalProperties", - true, -); +export const SyncReconcileResponsePendingPreparedStackProfileGcpStack$inboundSchema: + z.ZodType = + z.object({ + condition: z.nullable( + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileConditionStack$inboundSchema + ), + z.any(), + ]), + ).optional(), + scope: z.string(), + }); -export function syncReconcileResponseCurrentReleaseConfigFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileGcpStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseConfig, + SyncReconcileResponsePendingPreparedStackProfileGcpStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseConfig$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseConfig' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileGcpStack$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileGcpStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseDependency$inboundSchema: - z.ZodType = z.object({ - id: z.string(), - type: z.string(), +export const SyncReconcileResponsePendingPreparedStackProfileGcpBinding$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfileGcpBinding, + unknown + > = z.object({ + resource: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileGcpResource$inboundSchema + ).optional(), + stack: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileGcpStack$inboundSchema + ).optional(), }); -export function syncReconcileResponseCurrentReleaseDependencyFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileGcpBindingFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseDependency, + SyncReconcileResponsePendingPreparedStackProfileGcpBinding, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseDependency$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseDependency' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileGcpBinding$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileGcpBinding' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseLifecycle$inboundSchema: - z.ZodEnum = z.enum( - SyncReconcileResponseCurrentReleaseLifecycle, - ); - -/** @internal */ -export const SyncReconcileResponseCurrentReleaseResources$inboundSchema: - z.ZodType = z.object({ - config: z.lazy(() => - SyncReconcileResponseCurrentReleaseConfig$inboundSchema - ), - dependencies: z.array( - z.lazy(() => SyncReconcileResponseCurrentReleaseDependency$inboundSchema), - ), - lifecycle: SyncReconcileResponseCurrentReleaseLifecycle$inboundSchema, - remoteAccess: z.boolean().optional(), - }); +export const SyncReconcileResponsePendingPreparedStackProfileGcpGrant$inboundSchema: + z.ZodType = + z.object({ + actions: z.nullable(z.array(z.string())).optional(), + dataActions: z.nullable(z.array(z.string())).optional(), + permissions: z.nullable(z.array(z.string())).optional(), + predefinedRoles: z.nullable(z.array(z.string())).optional(), + residualPermissions: z.nullable(z.array(z.string())).optional(), + }); -export function syncReconcileResponseCurrentReleaseResourcesFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileGcpGrantFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseResources, + SyncReconcileResponsePendingPreparedStackProfileGcpGrant, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseResources$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseResources' from JSON`, + SyncReconcileResponsePendingPreparedStackProfileGcpGrant$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileGcpGrant' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseSupportedPlatform$inboundSchema: - z.ZodEnum = z - .enum(SyncReconcileResponseCurrentReleaseSupportedPlatform); - -/** @internal */ -export const SyncReconcileResponseCurrentReleaseStack$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseStack, - unknown -> = z.object({ - id: z.string(), - inputs: z.array( - z.lazy(() => SyncReconcileResponseCurrentReleaseInput$inboundSchema), - ).optional(), - permissions: z.lazy(() => - SyncReconcileResponseCurrentReleasePermissions$inboundSchema - ).optional(), - resources: z.record( - z.string(), - z.lazy(() => SyncReconcileResponseCurrentReleaseResources$inboundSchema), - ), - supportedPlatforms: z.nullable( - z.array(SyncReconcileResponseCurrentReleaseSupportedPlatform$inboundSchema), - ).optional(), -}); +export const SyncReconcileResponsePendingPreparedStackProfileGcp$inboundSchema: + z.ZodType = z + .object({ + binding: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileGcpBinding$inboundSchema + ), + description: z.nullable(z.string()).optional(), + grant: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileGcpGrant$inboundSchema + ), + label: z.nullable(z.string()).optional(), + }); -export function syncReconcileResponseCurrentReleaseStackFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileGcpFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseStack, + SyncReconcileResponsePendingPreparedStackProfileGcp, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseStack$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackProfileGcp$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseStack' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileGcp' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentRelease$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentRelease, - unknown -> = z.object({ - description: z.nullable(z.string()).optional(), - releaseId: z.nullable(z.string()).optional(), - stack: z.lazy(() => SyncReconcileResponseCurrentReleaseStack$inboundSchema), - version: z.nullable(z.string()).optional(), -}); +export const SyncReconcileResponsePendingPreparedStackProfilePlatforms$inboundSchema: + z.ZodType< + SyncReconcileResponsePendingPreparedStackProfilePlatforms, + unknown + > = z.object({ + aws: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAw$inboundSchema + )), + ).optional(), + azure: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileAzure$inboundSchema + )), + ).optional(), + gcp: z.nullable( + z.array(z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfileGcp$inboundSchema + )), + ).optional(), + }); -export function syncReconcileResponseCurrentReleaseFromJSON( +export function syncReconcileResponsePendingPreparedStackProfilePlatformsFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncReconcileResponsePendingPreparedStackProfilePlatforms, + SDKValidationError +> { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentRelease$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseCurrentRelease' from JSON`, + SyncReconcileResponsePendingPreparedStackProfilePlatforms$inboundSchema + .parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfilePlatforms' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentReleaseUnion$inboundSchema: z.ZodType< - SyncReconcileResponseCurrentReleaseUnion, - unknown -> = z.union([ - z.lazy(() => SyncReconcileResponseCurrentRelease$inboundSchema), - z.any(), -]); +export const SyncReconcileResponsePendingPreparedStackProfile$inboundSchema: + z.ZodType = z + .object({ + description: z.string(), + id: z.string(), + platforms: z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfilePlatforms$inboundSchema + ), + }); -export function syncReconcileResponseCurrentReleaseUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseCurrentReleaseUnion, + SyncReconcileResponsePendingPreparedStackProfile, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseCurrentReleaseUnion$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackProfile$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseCurrentReleaseUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfile' from JSON`, ); } /** @internal */ -export const SyncReconcileResponsePlatformTest$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponsePlatformTest -> = z.enum(SyncReconcileResponsePlatformTest); - -/** @internal */ -export const SyncReconcileResponseEnvironmentInfoTest$inboundSchema: z.ZodType< - SyncReconcileResponseEnvironmentInfoTest, - unknown -> = z.object({ - testId: z.string(), - platform: SyncReconcileResponsePlatformTest$inboundSchema, -}); +export const SyncReconcileResponsePendingPreparedStackProfileUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]); -export function syncReconcileResponseEnvironmentInfoTestFromJSON( +export function syncReconcileResponsePendingPreparedStackProfileUnionFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseEnvironmentInfoTest, + SyncReconcileResponsePendingPreparedStackProfileUnion, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseEnvironmentInfoTest$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackProfileUnion$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseEnvironmentInfoTest' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackProfileUnion' from JSON`, ); } /** @internal */ -export const SyncReconcileResponsePlatformLocal$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponsePlatformLocal -> = z.enum(SyncReconcileResponsePlatformLocal); - -/** @internal */ -export const SyncReconcileResponseEnvironmentInfoLocal$inboundSchema: z.ZodType< - SyncReconcileResponseEnvironmentInfoLocal, - unknown -> = z.object({ - arch: z.string(), - hostname: z.string(), - os: z.string(), - platform: SyncReconcileResponsePlatformLocal$inboundSchema, -}); +export const SyncReconcileResponsePendingPreparedStackPermissions$inboundSchema: + z.ZodType = z + .object({ + management: z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackManagement1$inboundSchema + ), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackManagement2$inboundSchema + ), + SyncReconcileResponsePendingPreparedStackManagementEnum$inboundSchema, + ]).optional(), + profiles: z.record( + z.string(), + z.record( + z.string(), + z.array( + z.union([ + z.lazy(() => + SyncReconcileResponsePendingPreparedStackProfile$inboundSchema + ), + z.string(), + ]), + ), + ), + ), + }); -export function syncReconcileResponseEnvironmentInfoLocalFromJSON( +export function syncReconcileResponsePendingPreparedStackPermissionsFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseEnvironmentInfoLocal, + SyncReconcileResponsePendingPreparedStackPermissions, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseEnvironmentInfoLocal$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackPermissions$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseEnvironmentInfoLocal' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackPermissions' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentPlatformAzure$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponseCurrentPlatformAzure -> = z.enum(SyncReconcileResponseCurrentPlatformAzure); - -/** @internal */ -export const SyncReconcileResponseEnvironmentInfoAzure$inboundSchema: z.ZodType< - SyncReconcileResponseEnvironmentInfoAzure, - unknown -> = z.object({ - location: z.string(), - subscriptionId: z.string(), - tenantId: z.string(), - platform: SyncReconcileResponseCurrentPlatformAzure$inboundSchema, -}); +export const SyncReconcileResponsePendingPreparedStackConfig$inboundSchema: + z.ZodType = + collectExtraKeys$( + z.object({ + id: z.string(), + type: z.string(), + }).catchall(z.any()), + "additionalProperties", + true, + ); -export function syncReconcileResponseEnvironmentInfoAzureFromJSON( +export function syncReconcileResponsePendingPreparedStackConfigFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseEnvironmentInfoAzure, + SyncReconcileResponsePendingPreparedStackConfig, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseEnvironmentInfoAzure$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackConfig$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseEnvironmentInfoAzure' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackConfig' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentPlatformGcp$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponseCurrentPlatformGcp -> = z.enum(SyncReconcileResponseCurrentPlatformGcp); - -/** @internal */ -export const SyncReconcileResponseEnvironmentInfoGcp$inboundSchema: z.ZodType< - SyncReconcileResponseEnvironmentInfoGcp, - unknown -> = z.object({ - projectId: z.string(), - projectNumber: z.string(), - region: z.string(), - platform: SyncReconcileResponseCurrentPlatformGcp$inboundSchema, -}); +export const SyncReconcileResponsePendingPreparedStackDependency$inboundSchema: + z.ZodType = z + .object({ + id: z.string(), + type: z.string(), + }); -export function syncReconcileResponseEnvironmentInfoGcpFromJSON( +export function syncReconcileResponsePendingPreparedStackDependencyFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseEnvironmentInfoGcp, + SyncReconcileResponsePendingPreparedStackDependency, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseEnvironmentInfoGcp$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackDependency$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseEnvironmentInfoGcp' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackDependency' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseCurrentPlatformAws$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponseCurrentPlatformAws -> = z.enum(SyncReconcileResponseCurrentPlatformAws); +export const SyncReconcileResponsePendingPreparedStackLifecycle$inboundSchema: + z.ZodEnum = z.enum( + SyncReconcileResponsePendingPreparedStackLifecycle, + ); /** @internal */ -export const SyncReconcileResponseEnvironmentInfoAws$inboundSchema: z.ZodType< - SyncReconcileResponseEnvironmentInfoAws, - unknown -> = z.object({ - accountId: z.string(), - region: z.string(), - platform: SyncReconcileResponseCurrentPlatformAws$inboundSchema, -}); +export const SyncReconcileResponsePendingPreparedStackResources$inboundSchema: + z.ZodType = z + .object({ + config: z.lazy(() => + SyncReconcileResponsePendingPreparedStackConfig$inboundSchema + ), + dependencies: z.array( + z.lazy(() => + SyncReconcileResponsePendingPreparedStackDependency$inboundSchema + ), + ), + enabledWhen: z.nullable(z.string()).optional(), + lifecycle: + SyncReconcileResponsePendingPreparedStackLifecycle$inboundSchema, + remoteAccess: z.boolean().optional(), + }); -export function syncReconcileResponseEnvironmentInfoAwsFromJSON( +export function syncReconcileResponsePendingPreparedStackResourcesFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseEnvironmentInfoAws, + SyncReconcileResponsePendingPreparedStackResources, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseEnvironmentInfoAws$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStackResources$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseEnvironmentInfoAws' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStackResources' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseEnvironmentInfoUnion$inboundSchema: z.ZodType< - SyncReconcileResponseEnvironmentInfoUnion, +export const SyncReconcileResponsePendingPreparedStackSupportedPlatform$inboundSchema: + z.ZodEnum = + z.enum(SyncReconcileResponsePendingPreparedStackSupportedPlatform); + +/** @internal */ +export const SyncReconcileResponsePendingPreparedStack$inboundSchema: z.ZodType< + SyncReconcileResponsePendingPreparedStack, unknown -> = z.union([ - z.lazy(() => SyncReconcileResponseEnvironmentInfoGcp$inboundSchema), - z.lazy(() => SyncReconcileResponseEnvironmentInfoAzure$inboundSchema), - z.lazy(() => SyncReconcileResponseEnvironmentInfoLocal$inboundSchema), - z.lazy(() => SyncReconcileResponseEnvironmentInfoAws$inboundSchema), - z.lazy(() => SyncReconcileResponseEnvironmentInfoTest$inboundSchema), - z.any(), -]); +> = z.object({ + id: z.string(), + inputs: z.array( + z.lazy(() => SyncReconcileResponsePendingPreparedStackInput$inboundSchema), + ).optional(), + permissions: z.lazy(() => + SyncReconcileResponsePendingPreparedStackPermissions$inboundSchema + ).optional(), + resources: z.record( + z.string(), + z.lazy(() => + SyncReconcileResponsePendingPreparedStackResources$inboundSchema + ), + ), + supportedPlatforms: z.nullable( + z.array( + SyncReconcileResponsePendingPreparedStackSupportedPlatform$inboundSchema, + ), + ).optional(), +}); -export function syncReconcileResponseEnvironmentInfoUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackFromJSON( jsonString: string, ): SafeParseResult< - SyncReconcileResponseEnvironmentInfoUnion, + SyncReconcileResponsePendingPreparedStack, SDKValidationError > { return safeParse( jsonString, (x) => - SyncReconcileResponseEnvironmentInfoUnion$inboundSchema.parse( + SyncReconcileResponsePendingPreparedStack$inboundSchema.parse( JSON.parse(x), ), - `Failed to parse 'SyncReconcileResponseEnvironmentInfoUnion' from JSON`, + `Failed to parse 'SyncReconcileResponsePendingPreparedStack' from JSON`, ); } /** @internal */ -export const SyncReconcileResponseError$inboundSchema: z.ZodType< - SyncReconcileResponseError, - unknown -> = z.object({ - code: z.string(), - context: z.nullable(z.any()).optional(), - hint: z.nullable(z.string()).optional(), - httpStatusCode: z.nullable(z.int()).optional(), - internal: z.boolean(), - message: z.string(), - retryable: z.boolean().default(false), - source: z.nullable(z.any()).optional(), -}); - -export function syncReconcileResponseErrorFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => SyncReconcileResponseError$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseError' from JSON`, - ); -} - -/** @internal */ -export const SyncReconcileResponseErrorUnion$inboundSchema: z.ZodType< - SyncReconcileResponseErrorUnion, - unknown -> = z.union([z.lazy(() => SyncReconcileResponseError$inboundSchema), z.any()]); +export const SyncReconcileResponsePendingPreparedStackUnion$inboundSchema: + z.ZodType = z.union([ + z.lazy(() => SyncReconcileResponsePendingPreparedStack$inboundSchema), + z.any(), + ]); -export function syncReconcileResponseErrorUnionFromJSON( +export function syncReconcileResponsePendingPreparedStackUnionFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult< + SyncReconcileResponsePendingPreparedStackUnion, + SDKValidationError +> { return safeParse( jsonString, - (x) => SyncReconcileResponseErrorUnion$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'SyncReconcileResponseErrorUnion' from JSON`, + (x) => + SyncReconcileResponsePendingPreparedStackUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponsePendingPreparedStackUnion' from JSON`, ); } -/** @internal */ -export const SyncReconcileResponseCurrentPlatform$inboundSchema: z.ZodEnum< - typeof SyncReconcileResponseCurrentPlatform -> = z.enum(SyncReconcileResponseCurrentPlatform); - /** @internal */ export const SyncReconcileResponsePreparedStackTypeStringList$inboundSchema: z.ZodEnum = z.enum( @@ -16599,6 +20817,7 @@ export const SyncReconcileResponsePreparedStackResources$inboundSchema: dependencies: z.array( z.lazy(() => SyncReconcileResponsePreparedStackDependency$inboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: SyncReconcileResponsePreparedStackLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }); @@ -16681,6 +20900,58 @@ export function syncReconcileResponsePreparedStackUnionFromJSON( ); } +/** @internal */ +export const SyncReconcileResponseSetupUpdateAuthorization$inboundSchema: + z.ZodType = z.object({ + baselineFrozenDigest: z.string(), + nonce: z.string(), + releaseId: z.string(), + setupFingerprint: z.string(), + setupFingerprintVersion: z.int(), + setupTarget: z.string(), + targetFrozenDigest: z.string(), + }); + +export function syncReconcileResponseSetupUpdateAuthorizationFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseSetupUpdateAuthorization, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseSetupUpdateAuthorization$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseSetupUpdateAuthorization' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseSetupUpdateAuthorizationUnion$inboundSchema: + z.ZodType = z + .union([ + z.lazy(() => SyncReconcileResponseSetupUpdateAuthorization$inboundSchema), + z.any(), + ]); + +export function syncReconcileResponseSetupUpdateAuthorizationUnionFromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseSetupUpdateAuthorizationUnion, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseSetupUpdateAuthorizationUnion$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseSetupUpdateAuthorizationUnion' from JSON`, + ); +} + /** @internal */ export const SyncReconcileResponseRuntimeMetadata$inboundSchema: z.ZodType< SyncReconcileResponseRuntimeMetadata, @@ -16688,6 +20959,12 @@ export const SyncReconcileResponseRuntimeMetadata$inboundSchema: z.ZodType< > = z.object({ lastSyncedEnvVarsHash: z.nullable(z.string()).optional(), lastSyncedSecretNames: z.array(z.string()).optional(), + pendingPreparedStack: z.nullable( + z.union([ + z.lazy(() => SyncReconcileResponsePendingPreparedStack$inboundSchema), + z.any(), + ]), + ).optional(), preparedStack: z.nullable( z.union([ z.lazy(() => SyncReconcileResponsePreparedStack$inboundSchema), @@ -16695,6 +20972,12 @@ export const SyncReconcileResponseRuntimeMetadata$inboundSchema: z.ZodType< ]), ).optional(), registryAccessGranted: z.boolean().optional(), + setupUpdateAuthorization: z.nullable( + z.union([ + z.lazy(() => SyncReconcileResponseSetupUpdateAuthorization$inboundSchema), + z.any(), + ]), + ).optional(), }); export function syncReconcileResponseRuntimeMetadataFromJSON( @@ -19461,6 +23744,7 @@ export const SyncReconcileResponseTargetReleaseResources$inboundSchema: dependencies: z.array( z.lazy(() => SyncReconcileResponseTargetReleaseDependency$inboundSchema), ), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: SyncReconcileResponseTargetReleaseLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }); @@ -26216,15 +30500,70 @@ export function syncReconcileResponseMonitoringUnionFromJSON( ); } +/** @internal */ +export const SyncReconcileResponseFailureDomains2$inboundSchema: z.ZodType< + SyncReconcileResponseFailureDomains2, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function syncReconcileResponseFailureDomains2FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseFailureDomains2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseFailureDomains2' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseFailureDomainsUnion2$inboundSchema: z.ZodType< + SyncReconcileResponseFailureDomainsUnion2, + unknown +> = z.union([ + z.lazy(() => SyncReconcileResponseFailureDomains2$inboundSchema), + z.any(), +]); + +export function syncReconcileResponseFailureDomainsUnion2FromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseFailureDomainsUnion2, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseFailureDomainsUnion2$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseFailureDomainsUnion2' from JSON`, + ); +} + /** @internal */ export const SyncReconcileResponsePoolsAutoscale$inboundSchema: z.ZodType< SyncReconcileResponsePoolsAutoscale, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => SyncReconcileResponseFailureDomains2$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), max: z.int(), min: z.int(), mode: z.literal("autoscale"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function syncReconcileResponsePoolsAutoscaleFromJSON( @@ -26238,14 +30577,69 @@ export function syncReconcileResponsePoolsAutoscaleFromJSON( ); } +/** @internal */ +export const SyncReconcileResponseFailureDomains1$inboundSchema: z.ZodType< + SyncReconcileResponseFailureDomains1, + unknown +> = z.object({ + selectedFailureDomains: z.array(z.string()).optional(), + spread: z.int(), +}); + +export function syncReconcileResponseFailureDomains1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseFailureDomains1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'SyncReconcileResponseFailureDomains1' from JSON`, + ); +} + +/** @internal */ +export const SyncReconcileResponseFailureDomainsUnion1$inboundSchema: z.ZodType< + SyncReconcileResponseFailureDomainsUnion1, + unknown +> = z.union([ + z.lazy(() => SyncReconcileResponseFailureDomains1$inboundSchema), + z.any(), +]); + +export function syncReconcileResponseFailureDomainsUnion1FromJSON( + jsonString: string, +): SafeParseResult< + SyncReconcileResponseFailureDomainsUnion1, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SyncReconcileResponseFailureDomainsUnion1$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SyncReconcileResponseFailureDomainsUnion1' from JSON`, + ); +} + /** @internal */ export const SyncReconcileResponsePoolsFixed$inboundSchema: z.ZodType< SyncReconcileResponsePoolsFixed, unknown > = z.object({ + failure_domains: z.nullable( + z.union([ + z.lazy(() => SyncReconcileResponseFailureDomains1$inboundSchema), + z.any(), + ]), + ).optional(), machine: z.nullable(z.string()).optional(), machines: z.int(), mode: z.literal("fixed"), +}).transform((v) => { + return remap$(v, { + "failure_domains": "failureDomains", + }); }); export function syncReconcileResponsePoolsFixedFromJSON( @@ -28274,6 +32668,7 @@ export const TargetConfig$inboundSchema: z.ZodType = z ]), ]), ).optional(), + inputValues: z.record(z.string(), z.nullable(z.any())).optional(), labelDomain: z.nullable(z.string()).optional(), managementConfig: z.nullable( z.union([ @@ -30092,6 +34487,7 @@ export const ReleaseInfoResources$inboundSchema: z.ZodType< > = z.object({ config: z.lazy(() => ReleaseInfoConfig$inboundSchema), dependencies: z.array(z.lazy(() => ReleaseInfoDependency$inboundSchema)), + enabledWhen: z.nullable(z.string()).optional(), lifecycle: ReleaseInfoLifecycle$inboundSchema, remoteAccess: z.boolean().optional(), }); diff --git a/client-sdks/platform/typescript/src/models/updatedebugsessionrequest.ts b/client-sdks/platform/typescript/src/models/updatedebugsessionrequest.ts index 3b055a285..9e1e07517 100644 --- a/client-sdks/platform/typescript/src/models/updatedebugsessionrequest.ts +++ b/client-sdks/platform/typescript/src/models/updatedebugsessionrequest.ts @@ -8,17 +8,149 @@ import { DebugSessionState$outboundSchema, } from "./debugsessionstate.js"; +/** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ +export type UpdateDebugSessionRequestError = { + /** + * A unique identifier for the type of error. + * + * @remarks + * + * This should be a short, machine-readable string that can be used + * by clients to programmatically handle different error types. + * Examples: "NOT_FOUND", "VALIDATION_ERROR", "TIMEOUT" + */ + code: string; + /** + * Additional diagnostic information about the error context. + * + * @remarks + * + * This optional field can contain structured data providing more details + * about the error, such as validation errors, request parameters that + * caused the issue, or other relevant context information. + */ + context?: any | null | undefined; + /** + * Optional human-facing remediation hint. + */ + hint?: string | null | undefined; + /** + * HTTP status code for this error. + * + * @remarks + * + * Used when converting the error to an HTTP response. If None, falls back to + * the error type's default status code or 500. + */ + httpStatusCode?: number | null | undefined; + /** + * Indicates if this is an internal error that should not be exposed to users. + * + * @remarks + * + * When `true`, this error contains sensitive information or implementation + * details that should not be shown to end-users. Such errors should be + * logged for debugging but replaced with generic error messages in responses. + */ + internal: boolean; + /** + * Human-readable error message. + * + * @remarks + * + * This message should be clear and actionable for developers or end-users, + * providing context about what went wrong and potentially how to fix it. + */ + message: string; + /** + * Indicates whether the operation that caused the error should be retried. + * + * @remarks + * + * When `true`, the error is transient and the operation might succeed + * if attempted again. When `false`, retrying the same operation is + * unlikely to succeed without changes. + */ + retryable?: boolean | undefined; + /** + * The underlying error that caused this error, creating an error chain. + * + * @remarks + * + * This allows for proper error propagation and debugging by maintaining + * the full context of how an error occurred through multiple layers + * of an application. + */ + source?: any | null | undefined; +}; + export type UpdateDebugSessionRequest = { state?: DebugSessionState | undefined; - error?: { [k: string]: any | null } | null | undefined; - expiresAt?: Date | undefined; + /** + * Canonical error container that provides a structured way to represent errors + * + * @remarks + * with rich metadata including error codes, human-readable messages, context, + * and chaining capabilities for error propagation. + * + * This struct is designed to be both machine-readable and user-friendly, + * supporting serialization for API responses and detailed error reporting + * in distributed systems. + */ + error?: UpdateDebugSessionRequestError | null | undefined; +}; + +/** @internal */ +export type UpdateDebugSessionRequestError$Outbound = { + code: string; + context?: any | null | undefined; + hint?: string | null | undefined; + httpStatusCode?: number | null | undefined; + internal: boolean; + message: string; + retryable: boolean; + source?: any | null | undefined; }; +/** @internal */ +export const UpdateDebugSessionRequestError$outboundSchema: z.ZodType< + UpdateDebugSessionRequestError$Outbound, + UpdateDebugSessionRequestError +> = z.object({ + code: z.string(), + context: z.nullable(z.any()).optional(), + hint: z.nullable(z.string()).optional(), + httpStatusCode: z.nullable(z.int()).optional(), + internal: z.boolean(), + message: z.string(), + retryable: z.boolean().default(false), + source: z.nullable(z.any()).optional(), +}); + +export function updateDebugSessionRequestErrorToJSON( + updateDebugSessionRequestError: UpdateDebugSessionRequestError, +): string { + return JSON.stringify( + UpdateDebugSessionRequestError$outboundSchema.parse( + updateDebugSessionRequestError, + ), + ); +} + /** @internal */ export type UpdateDebugSessionRequest$Outbound = { state?: string | undefined; - error?: { [k: string]: any | null } | null | undefined; - expiresAt?: string | undefined; + error?: UpdateDebugSessionRequestError$Outbound | null | undefined; }; /** @internal */ @@ -27,8 +159,8 @@ export const UpdateDebugSessionRequest$outboundSchema: z.ZodType< UpdateDebugSessionRequest > = z.object({ state: DebugSessionState$outboundSchema.optional(), - error: z.nullable(z.record(z.string(), z.nullable(z.any()))).optional(), - expiresAt: z.date().transform(v => v.toISOString()).optional(), + error: z.nullable(z.lazy(() => UpdateDebugSessionRequestError$outboundSchema)) + .optional(), }); export function updateDebugSessionRequestToJSON( diff --git a/client-sdks/platform/typescript/src/models/updateworkspacesettingsrequest.ts b/client-sdks/platform/typescript/src/models/updateworkspacesettingsrequest.ts new file mode 100644 index 000000000..5aba546c0 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/updateworkspacesettingsrequest.ts @@ -0,0 +1,65 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { ClosedEnum } from "../types/enums.js"; + +/** + * Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + */ +export const UpdateWorkspaceSettingsRequestDebugPermissionMode = { + Auto: "auto", + Ask: "ask", +} as const; +/** + * Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + */ +export type UpdateWorkspaceSettingsRequestDebugPermissionMode = ClosedEnum< + typeof UpdateWorkspaceSettingsRequestDebugPermissionMode +>; + +export type UpdateWorkspaceSettingsRequest = { + /** + * Workspace-level policy for ai-agent debug commands. `auto` runs `alien_debug` tool calls without asking; `ask` halts each session before every debug command and waits for a human approval from dashboard or Slack. + */ + debugPermissionMode?: + | UpdateWorkspaceSettingsRequestDebugPermissionMode + | undefined; + /** + * Turn the ai-agent on (`true`) or off (`false`) for this workspace. + */ + enabled?: boolean | undefined; +}; + +/** @internal */ +export const UpdateWorkspaceSettingsRequestDebugPermissionMode$outboundSchema: + z.ZodEnum = z.enum( + UpdateWorkspaceSettingsRequestDebugPermissionMode, + ); + +/** @internal */ +export type UpdateWorkspaceSettingsRequest$Outbound = { + debugPermissionMode?: string | undefined; + enabled?: boolean | undefined; +}; + +/** @internal */ +export const UpdateWorkspaceSettingsRequest$outboundSchema: z.ZodType< + UpdateWorkspaceSettingsRequest$Outbound, + UpdateWorkspaceSettingsRequest +> = z.object({ + debugPermissionMode: + UpdateWorkspaceSettingsRequestDebugPermissionMode$outboundSchema.optional(), + enabled: z.boolean().optional(), +}); + +export function updateWorkspaceSettingsRequestToJSON( + updateWorkspaceSettingsRequest: UpdateWorkspaceSettingsRequest, +): string { + return JSON.stringify( + UpdateWorkspaceSettingsRequest$outboundSchema.parse( + updateWorkspaceSettingsRequest, + ), + ); +} diff --git a/client-sdks/platform/typescript/src/models/workspaceinvitation.ts b/client-sdks/platform/typescript/src/models/workspaceinvitation.ts new file mode 100644 index 000000000..386b747ad --- /dev/null +++ b/client-sdks/platform/typescript/src/models/workspaceinvitation.ts @@ -0,0 +1,82 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { WorkspaceRole, WorkspaceRole$inboundSchema } from "./workspacerole.js"; + +export const WorkspaceInvitationStatus = { + Pending: "pending", + Accepted: "accepted", + Revoked: "revoked", + Expired: "expired", +} as const; +export type WorkspaceInvitationStatus = ClosedEnum< + typeof WorkspaceInvitationStatus +>; + +export const DeliveryStatus = { + Pending: "pending", + Sent: "sent", + Failed: "failed", +} as const; +export type DeliveryStatus = ClosedEnum; + +export type WorkspaceInvitation = { + /** + * Unique identifier for the workspace invitation. + */ + id: string; + email: string; + /** + * Role for workspace-scoped service accounts + */ + role: WorkspaceRole; + status: WorkspaceInvitationStatus; + deliveryStatus: DeliveryStatus; + expiresAt: Date; + lastSentAt: Date | null; + createdAt: Date; + inviteUrl: string; +}; + +/** @internal */ +export const WorkspaceInvitationStatus$inboundSchema: z.ZodEnum< + typeof WorkspaceInvitationStatus +> = z.enum(WorkspaceInvitationStatus); + +/** @internal */ +export const DeliveryStatus$inboundSchema: z.ZodEnum = z + .enum(DeliveryStatus); + +/** @internal */ +export const WorkspaceInvitation$inboundSchema: z.ZodType< + WorkspaceInvitation, + unknown +> = z.object({ + id: z.string(), + email: z.string(), + role: WorkspaceRole$inboundSchema, + status: WorkspaceInvitationStatus$inboundSchema, + deliveryStatus: DeliveryStatus$inboundSchema, + expiresAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + lastSentAt: z.nullable( + z.iso.datetime({ offset: true }).transform(v => new Date(v)), + ), + createdAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + inviteUrl: z.string(), +}); + +export function workspaceInvitationFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => WorkspaceInvitation$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'WorkspaceInvitation' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/workspaceinvitationpreview.ts b/client-sdks/platform/typescript/src/models/workspaceinvitationpreview.ts new file mode 100644 index 000000000..b4ee12f22 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/workspaceinvitationpreview.ts @@ -0,0 +1,126 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { ClosedEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { WorkspaceRole, WorkspaceRole$inboundSchema } from "./workspacerole.js"; + +export const WorkspaceInvitationPreviewKind = { + Email: "email", + Link: "link", +} as const; +export type WorkspaceInvitationPreviewKind = ClosedEnum< + typeof WorkspaceInvitationPreviewKind +>; + +export type WorkspaceInvitationPreviewWorkspace = { + /** + * Unique identifier for the workspace. + */ + id: string; + name: string; + logoUrl: string | null; +}; + +export type Inviter = { + name: string; + image: string | null; +}; + +export const WorkspaceInvitationPreviewState = { + Active: "active", + Accepted: "accepted", + Expired: "expired", + Revoked: "revoked", +} as const; +export type WorkspaceInvitationPreviewState = ClosedEnum< + typeof WorkspaceInvitationPreviewState +>; + +export type WorkspaceInvitationPreview = { + kind: WorkspaceInvitationPreviewKind; + workspace: WorkspaceInvitationPreviewWorkspace; + inviter: Inviter | null; + /** + * Role for workspace-scoped service accounts + */ + role: WorkspaceRole; + expiresAt: Date; + state: WorkspaceInvitationPreviewState; + emailHint: string | null; +}; + +/** @internal */ +export const WorkspaceInvitationPreviewKind$inboundSchema: z.ZodEnum< + typeof WorkspaceInvitationPreviewKind +> = z.enum(WorkspaceInvitationPreviewKind); + +/** @internal */ +export const WorkspaceInvitationPreviewWorkspace$inboundSchema: z.ZodType< + WorkspaceInvitationPreviewWorkspace, + unknown +> = z.object({ + id: z.string(), + name: z.string(), + logoUrl: z.nullable(z.string()), +}); + +export function workspaceInvitationPreviewWorkspaceFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + WorkspaceInvitationPreviewWorkspace$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'WorkspaceInvitationPreviewWorkspace' from JSON`, + ); +} + +/** @internal */ +export const Inviter$inboundSchema: z.ZodType = z.object({ + name: z.string(), + image: z.nullable(z.string()), +}); + +export function inviterFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => Inviter$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'Inviter' from JSON`, + ); +} + +/** @internal */ +export const WorkspaceInvitationPreviewState$inboundSchema: z.ZodEnum< + typeof WorkspaceInvitationPreviewState +> = z.enum(WorkspaceInvitationPreviewState); + +/** @internal */ +export const WorkspaceInvitationPreview$inboundSchema: z.ZodType< + WorkspaceInvitationPreview, + unknown +> = z.object({ + kind: WorkspaceInvitationPreviewKind$inboundSchema, + workspace: z.lazy(() => WorkspaceInvitationPreviewWorkspace$inboundSchema), + inviter: z.nullable(z.lazy(() => Inviter$inboundSchema)), + role: WorkspaceRole$inboundSchema, + expiresAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + state: WorkspaceInvitationPreviewState$inboundSchema, + emailHint: z.nullable(z.string()), +}); + +export function workspaceInvitationPreviewFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => WorkspaceInvitationPreview$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'WorkspaceInvitationPreview' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/models/workspaceinvitelink.ts b/client-sdks/platform/typescript/src/models/workspaceinvitelink.ts new file mode 100644 index 000000000..57b23dfd8 --- /dev/null +++ b/client-sdks/platform/typescript/src/models/workspaceinvitelink.ts @@ -0,0 +1,51 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { WorkspaceRole, WorkspaceRole$inboundSchema } from "./workspacerole.js"; + +export type WorkspaceInviteLink = { + /** + * Unique identifier for the workspace invite link. + */ + id: string; + /** + * Role for workspace-scoped service accounts + */ + role: WorkspaceRole; + expiresAt: Date; + createdAt: Date; + useCount: number; + lastUsedAt: Date | null; + inviteUrl: string; +}; + +/** @internal */ +export const WorkspaceInviteLink$inboundSchema: z.ZodType< + WorkspaceInviteLink, + unknown +> = z.object({ + id: z.string(), + role: WorkspaceRole$inboundSchema, + expiresAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + createdAt: z.iso.datetime({ offset: true }).transform(v => new Date(v)), + useCount: z.int(), + lastUsedAt: z.nullable( + z.iso.datetime({ offset: true }).transform(v => new Date(v)), + ), + inviteUrl: z.string(), +}); + +export function workspaceInviteLinkFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => WorkspaceInviteLink$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'WorkspaceInviteLink' from JSON`, + ); +} diff --git a/client-sdks/platform/typescript/src/sdk/agentsessions.ts b/client-sdks/platform/typescript/src/sdk/agentsessions.ts new file mode 100644 index 000000000..104158b92 --- /dev/null +++ b/client-sdks/platform/typescript/src/sdk/agentsessions.ts @@ -0,0 +1,85 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { agentSessionsApprove } from "../funcs/agentSessionsApprove.js"; +import { agentSessionsEvents } from "../funcs/agentSessionsEvents.js"; +import { agentSessionsGet } from "../funcs/agentSessionsGet.js"; +import { agentSessionsList } from "../funcs/agentSessionsList.js"; +import { agentSessionsStop } from "../funcs/agentSessionsStop.js"; +import { ClientSDK, RequestOptions } from "../lib/sdks.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { unwrapAsync } from "../types/fp.js"; + +export class AgentSessions extends ClientSDK { + /** + * List ai-agent monitor sessions for this workspace. Newest first, capped at 50. + */ + async list( + request?: operations.ListAgentSessionsRequest | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(agentSessionsList( + this, + request, + options, + )); + } + + /** + * Retrieve one ai-agent monitor session by id. + */ + async get( + request: operations.GetAgentSessionRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(agentSessionsGet( + this, + request, + options, + )); + } + + /** + * Incrementally read a session's event log (steps, tool calls, report deltas, approvals, status transitions). Pass the previous response's `latestSeq` as `after` to fetch only new events. + */ + async events( + request: operations.ListAgentSessionEventsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(agentSessionsEvents( + this, + request, + options, + )); + } + + /** + * Approve a halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. + */ + async approve( + request: operations.ApproveAgentSessionRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(agentSessionsApprove( + this, + request, + options, + )); + } + + /** + * Stop (cancel) a running, queued, or halted ai-agent monitor session. Proxies to the ai-agent service, minting a fresh CLI session for the caller so the ai-agent's own auth applies. Idempotent — stopping an already-terminal session is a 200 no-op. + */ + async stop( + request: operations.StopAgentSessionRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(agentSessionsStop( + this, + request, + options, + )); + } +} diff --git a/client-sdks/platform/typescript/src/sdk/debugsessions.ts b/client-sdks/platform/typescript/src/sdk/debugsessions.ts index f617673ef..dc042ffd5 100644 --- a/client-sdks/platform/typescript/src/sdk/debugsessions.ts +++ b/client-sdks/platform/typescript/src/sdk/debugsessions.ts @@ -5,6 +5,7 @@ import { debugSessionsCreate } from "../funcs/debugSessionsCreate.js"; import { debugSessionsGet } from "../funcs/debugSessionsGet.js"; import { debugSessionsList } from "../funcs/debugSessionsList.js"; +import { debugSessionsListActiveForManager } from "../funcs/debugSessionsListActiveForManager.js"; import { debugSessionsUpdate } from "../funcs/debugSessionsUpdate.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as models from "../models/index.js"; @@ -27,7 +28,7 @@ export class DebugSessions extends ClientSDK { } /** - * Create a debug-session audit row. Called by the manager when a pull or push debug tunnel is opened. Workspace + project derived from deployment. + * Create a debug-session audit row. The assigned manager attests the original actor in owner; workspace, project, and initial pending state are derived by the server. */ async create( request?: operations.CreateDebugSessionRequest | undefined, @@ -41,7 +42,21 @@ export class DebugSessions extends ClientSDK { } /** - * Update debug-session state. Called by manager on tunnel attach, close, or deadline expiry. + * List active debug sessions created by the calling manager so runtime reconciliation can resume after restart. + */ + async listActiveForManager( + request?: operations.ListActiveManagerDebugSessionsRequest | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(debugSessionsListActiveForManager( + this, + request, + options, + )); + } + + /** + * Update debug-session state. Called by the immutable creating manager on tunnel attach, close, or deadline expiry. */ async update( request: operations.UpdateDebugSessionRequest, diff --git a/client-sdks/platform/typescript/src/sdk/managers.ts b/client-sdks/platform/typescript/src/sdk/managers.ts index e590e4d28..e3ea1995d 100644 --- a/client-sdks/platform/typescript/src/sdk/managers.ts +++ b/client-sdks/platform/typescript/src/sdk/managers.ts @@ -5,6 +5,8 @@ import { managersCancelSetup } from "../funcs/managersCancelSetup.js"; import { managersCreate } from "../funcs/managersCreate.js"; import { managersDelete } from "../funcs/managersDelete.js"; +import { managersGenerateManagerBindingToken } from "../funcs/managersGenerateManagerBindingToken.js"; +import { managersGenerateManagerCommandToken } from "../funcs/managersGenerateManagerCommandToken.js"; import { managersGenerateManagerToken } from "../funcs/managersGenerateManagerToken.js"; import { managersGet } from "../funcs/managersGet.js"; import { managersGetDeployment } from "../funcs/managersGetDeployment.js"; @@ -208,7 +210,7 @@ export class Managers extends ClientSDK { } /** - * Generate a short-lived JWT for direct browser → manager communication. Used for fetching command payloads and querying logs without routing sensitive data through the platform API. + * Generate a project-scoped, short-lived JWT for querying manager logs without routing sensitive data through the platform API. */ async generateManagerToken( request: operations.GenerateManagerTokenRequest, @@ -221,6 +223,34 @@ export class Managers extends ClientSDK { )); } + /** + * Generate a deployment-scoped, short-lived JWT that can only resolve remote bindings through the deployment's currently assigned manager. + */ + async generateManagerBindingToken( + request: operations.GenerateManagerBindingTokenRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(managersGenerateManagerBindingToken( + this, + request, + options, + )); + } + + /** + * Generate a command-scoped, short-lived JWT for fetching one encrypted command payload without routing it through the platform API. + */ + async generateManagerCommandToken( + request: operations.GenerateManagerCommandTokenRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(managersGenerateManagerCommandToken( + this, + request, + options, + )); + } + /** * Resolve decrypted project-level Google Cloud OAuth provider settings for a manager-side deployment bootstrap. */ diff --git a/client-sdks/platform/typescript/src/sdk/sdk.ts b/client-sdks/platform/typescript/src/sdk/sdk.ts index 248c65603..be201ac00 100644 --- a/client-sdks/platform/typescript/src/sdk/sdk.ts +++ b/client-sdks/platform/typescript/src/sdk/sdk.ts @@ -2,7 +2,20 @@ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ -import { ClientSDK } from "../lib/sdks.js"; +import { acceptWorkspaceInvitation } from "../funcs/acceptWorkspaceInvitation.js"; +import { createWorkspaceInvitation } from "../funcs/createWorkspaceInvitation.js"; +import { createWorkspaceInviteLink } from "../funcs/createWorkspaceInviteLink.js"; +import { getWorkspaceInvitationPreview } from "../funcs/getWorkspaceInvitationPreview.js"; +import { getWorkspaceInviteLink } from "../funcs/getWorkspaceInviteLink.js"; +import { listWorkspaceInvitations } from "../funcs/listWorkspaceInvitations.js"; +import { resendWorkspaceInvitation } from "../funcs/resendWorkspaceInvitation.js"; +import { revokeWorkspaceInvitation } from "../funcs/revokeWorkspaceInvitation.js"; +import { revokeWorkspaceInviteLink } from "../funcs/revokeWorkspaceInviteLink.js"; +import { ClientSDK, RequestOptions } from "../lib/sdks.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { unwrapAsync } from "../types/fp.js"; +import { AgentSessions } from "./agentsessions.js"; import { ApiKeys } from "./apikeys.js"; import { Auth } from "./auth.js"; import { Billing } from "./billing.js"; @@ -22,6 +35,7 @@ import { Projects } from "./projects.js"; import { Releases } from "./releases.js"; import { Resolve } from "./resolve.js"; import { Resources } from "./resources.js"; +import { SlackIntegration } from "./slackintegration.js"; import { Sync } from "./sync.js"; import { User } from "./user.js"; import { Workspaces } from "./workspaces.js"; @@ -112,6 +126,16 @@ export class Alien extends ClientSDK { return (this._deployment ??= new Deployment(this._options)); } + private _slackIntegration?: SlackIntegration; + get slackIntegration(): SlackIntegration { + return (this._slackIntegration ??= new SlackIntegration(this._options)); + } + + private _agentSessions?: AgentSessions; + get agentSessions(): AgentSessions { + return (this._agentSessions ??= new AgentSessions(this._options)); + } + private _sync?: Sync; get sync(): Sync { return (this._sync ??= new Sync(this._options)); @@ -136,4 +160,103 @@ export class Alien extends ClientSDK { get billing(): Billing { return (this._billing ??= new Billing(this._options)); } + + async getWorkspaceInvitationPreview( + request: operations.GetWorkspaceInvitationPreviewRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(getWorkspaceInvitationPreview( + this, + request, + options, + )); + } + + async acceptWorkspaceInvitation( + request: operations.AcceptWorkspaceInvitationRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(acceptWorkspaceInvitation( + this, + request, + options, + )); + } + + async listWorkspaceInvitations( + request: operations.ListWorkspaceInvitationsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(listWorkspaceInvitations( + this, + request, + options, + )); + } + + async createWorkspaceInvitation( + request: operations.CreateWorkspaceInvitationRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(createWorkspaceInvitation( + this, + request, + options, + )); + } + + async resendWorkspaceInvitation( + request: operations.ResendWorkspaceInvitationRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(resendWorkspaceInvitation( + this, + request, + options, + )); + } + + async revokeWorkspaceInvitation( + request: operations.RevokeWorkspaceInvitationRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(revokeWorkspaceInvitation( + this, + request, + options, + )); + } + + async getWorkspaceInviteLink( + request: operations.GetWorkspaceInviteLinkRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(getWorkspaceInviteLink( + this, + request, + options, + )); + } + + async createWorkspaceInviteLink( + request: operations.CreateWorkspaceInviteLinkRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(createWorkspaceInviteLink( + this, + request, + options, + )); + } + + async revokeWorkspaceInviteLink( + request: operations.RevokeWorkspaceInviteLinkRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(revokeWorkspaceInviteLink( + this, + request, + options, + )); + } } diff --git a/client-sdks/platform/typescript/src/sdk/slackintegration.ts b/client-sdks/platform/typescript/src/sdk/slackintegration.ts new file mode 100644 index 000000000..342764b21 --- /dev/null +++ b/client-sdks/platform/typescript/src/sdk/slackintegration.ts @@ -0,0 +1,87 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { slackIntegrationInstallUrl } from "../funcs/slackIntegrationInstallUrl.js"; +import { slackIntegrationListChannels } from "../funcs/slackIntegrationListChannels.js"; +import { slackIntegrationSetNotificationChannel } from "../funcs/slackIntegrationSetNotificationChannel.js"; +import { slackIntegrationStatus } from "../funcs/slackIntegrationStatus.js"; +import { slackIntegrationUninstall } from "../funcs/slackIntegrationUninstall.js"; +import { ClientSDK, RequestOptions } from "../lib/sdks.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { unwrapAsync } from "../types/fp.js"; + +export class SlackIntegration extends ClientSDK { + /** + * Generate the Slack OAuth consent URL for this workspace. + */ + async installUrl( + request?: operations.SlackIntegrationInstallUrlRequest | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(slackIntegrationInstallUrl( + this, + request, + options, + )); + } + + /** + * Return the Slack install for this workspace (if any). + */ + async status( + request?: operations.SlackIntegrationStatusRequest | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(slackIntegrationStatus( + this, + request, + options, + )); + } + + /** + * List public Slack channels for this workspace's install. Used by the dashboard's notification-channel picker. + */ + async listChannels( + request?: operations.SlackIntegrationChannelsRequest | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(slackIntegrationListChannels( + this, + request, + options, + )); + } + + /** + * Configure which Slack channel receives ai-agent monitor reports. + */ + async setNotificationChannel( + request?: + | operations.SlackIntegrationSetNotificationChannelRequest + | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(slackIntegrationSetNotificationChannel( + this, + request, + options, + )); + } + + /** + * Uninstall the Slack integration for this workspace. Revokes the bot token at Slack and deletes the row. + */ + async uninstall( + request?: operations.SlackIntegrationUninstallRequest | undefined, + options?: RequestOptions, + ): Promise { + return unwrapAsync(slackIntegrationUninstall( + this, + request, + options, + )); + } +} diff --git a/client-sdks/platform/typescript/src/sdk/workspaces.ts b/client-sdks/platform/typescript/src/sdk/workspaces.ts index 70087d484..1598a6b82 100644 --- a/client-sdks/platform/typescript/src/sdk/workspaces.ts +++ b/client-sdks/platform/typescript/src/sdk/workspaces.ts @@ -6,11 +6,13 @@ import { workspacesAddMember } from "../funcs/workspacesAddMember.js"; import { workspacesDelete } from "../funcs/workspacesDelete.js"; import { workspacesDismissOnboarding } from "../funcs/workspacesDismissOnboarding.js"; import { workspacesGet } from "../funcs/workspacesGet.js"; +import { workspacesGetSettings } from "../funcs/workspacesGetSettings.js"; import { workspacesList } from "../funcs/workspacesList.js"; import { workspacesListMembers } from "../funcs/workspacesListMembers.js"; import { workspacesRemoveMember } from "../funcs/workspacesRemoveMember.js"; import { workspacesUpdate } from "../funcs/workspacesUpdate.js"; import { workspacesUpdateMember } from "../funcs/workspacesUpdateMember.js"; +import { workspacesUpdateSettings } from "../funcs/workspacesUpdateSettings.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as models from "../models/index.js"; import * as operations from "../models/operations/index.js"; @@ -142,4 +144,32 @@ export class Workspaces extends ClientSDK { options, )); } + + /** + * Read the ai-agent settings for a workspace. Returns defaults (`enabled: true`, `debugPermissionMode: auto`) when the workspace has never customized them. + */ + async getSettings( + request: operations.GetWorkspaceSettingsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(workspacesGetSettings( + this, + request, + options, + )); + } + + /** + * Update the ai-agent settings for a workspace. Supports `debugPermissionMode` (`ask` requires human approval on every ai-agent debug command, `auto` runs them without asking) and `enabled` (`false` turns the ai-agent off so incoming triggers are rejected before any session runs). + */ + async updateSettings( + request: operations.UpdateWorkspaceSettingsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(workspacesUpdateSettings( + this, + request, + options, + )); + } } diff --git a/crates/alien-aws-clients/src/aws/mod.rs b/crates/alien-aws-clients/src/aws/mod.rs index 48ce254aa..1940357f1 100644 --- a/crates/alien-aws-clients/src/aws/mod.rs +++ b/crates/alien-aws-clients/src/aws/mod.rs @@ -29,6 +29,28 @@ pub trait AwsClientConfigExt { /// Get credentials for web identity token authentication async fn get_web_identity_credentials(&self) -> Result; + /// Assumes a target role with an inline session policy. The returned + /// permissions are the intersection of the role and policy. + async fn assume_role_with_session_policy( + &self, + role_arn: &str, + role_session_name: &str, + duration_seconds: i32, + policy: &str, + target_account_id: &str, + target_region: &str, + ) -> Result; + + /// Exchanges this config's own web-identity token with an inline session + /// policy. Other credential sources are rejected because their existing + /// session cannot be proven to carry the requested restriction. + async fn materialize_web_identity_session_with_policy( + &self, + role_session_name: &str, + duration_seconds: i32, + policy: &str, + ) -> Result; + /// Get service endpoint, checking for overrides first fn get_service_endpoint(&self, service_name: &str, default_endpoint: &str) -> String; @@ -61,6 +83,7 @@ pub mod eventbridge; pub mod iam; pub mod lambda; pub mod rds; +mod remote_storage_credentials; pub mod resourcegroupstagging; pub mod s3; pub mod secrets_manager; @@ -140,12 +163,7 @@ impl AwsClientConfigExt for AwsClientConfig { Ok(AwsClientConfig { account_id: target_account_id, region: target_region, - credentials: AwsCredentials::SessionCredentials { - access_key_id: credentials.access_key_id, - secret_access_key: credentials.secret_access_key, - session_token: credentials.session_token, - expires_at: credentials.expiration, - }, + credentials: credentials.into(), service_overrides: self.service_overrides.clone(), }) } @@ -244,12 +262,7 @@ impl AwsClientConfigExt for AwsClientConfig { Ok(AwsClientConfig { account_id: self.account_id.clone(), region: self.region.clone(), - credentials: AwsCredentials::SessionCredentials { - access_key_id: credentials.access_key_id, - secret_access_key: credentials.secret_access_key, - session_token: credentials.session_token, - expires_at: credentials.expiration, - }, + credentials: credentials.into(), service_overrides: self.service_overrides.clone(), }) } @@ -277,6 +290,41 @@ impl AwsClientConfigExt for AwsClientConfig { } } + async fn assume_role_with_session_policy( + &self, + role_arn: &str, + role_session_name: &str, + duration_seconds: i32, + policy: &str, + target_account_id: &str, + target_region: &str, + ) -> Result { + remote_storage_credentials::assume_role_with_session_policy( + self, + role_arn, + role_session_name, + duration_seconds, + policy, + target_account_id, + target_region, + ) + .await + } + + async fn materialize_web_identity_session_with_policy( + &self, + role_session_name: &str, + duration_seconds: i32, + policy: &str, + ) -> Result { + remote_storage_credentials::materialize_web_identity_session_with_policy( + self, + role_session_name, + duration_seconds, + policy, + ) + .await + } /// Get service endpoint, checking for overrides first fn get_service_endpoint(&self, service_name: &str, default_endpoint: &str) -> String { self.service_overrides @@ -841,183 +889,5 @@ fn extract_account_id_from_role_arn(role_arn: &str) -> Option { } #[cfg(test)] -mod tests { - use super::*; - use std::collections::HashMap; - use tokio::{ - io::{AsyncReadExt, AsyncWriteExt}, - net::TcpListener, - }; - - #[test] - fn test_extract_account_id_from_role_arn() { - assert_eq!( - extract_account_id_from_role_arn("arn:aws:iam::123456789012:role/MyRole"), - Some("123456789012".to_string()) - ); - assert_eq!( - extract_account_id_from_role_arn("arn:aws:iam::987654321098:role/cross-account-role"), - Some("987654321098".to_string()) - ); - assert_eq!(extract_account_id_from_role_arn("invalid-arn"), None); - assert_eq!( - extract_account_id_from_role_arn("arn:aws:iam:::role/NoAccount"), - None - ); - } - - #[test] - fn test_profile_name_prefers_aws_profile() { - let mut env = HashMap::new(); - env.insert("AWS_PROFILE".to_string(), "primary".to_string()); - env.insert("AWS_DEFAULT_PROFILE".to_string(), "fallback".to_string()); - - assert_eq!(profile_name(&env), "primary".to_string()); - } - - #[test] - fn test_profile_name_falls_back_to_default() { - let env = HashMap::new(); - assert_eq!(profile_name(&env), "default".to_string()); - } - - #[test] - fn test_profile_name_uses_aws_default_profile() { - let mut env = HashMap::new(); - env.insert("AWS_DEFAULT_PROFILE".to_string(), "fallback".to_string()); - - assert_eq!(profile_name(&env), "fallback".to_string()); - } - - #[tokio::test] - async fn test_resolve_region_uses_default_region_fallback() { - let mut env = HashMap::new(); - env.insert("AWS_DEFAULT_REGION".to_string(), "us-west-2".to_string()); - - assert_eq!(resolve_region(&env).await.unwrap(), "us-west-2"); - } - - #[test] - fn test_parse_service_overrides() { - let parsed = - parse_service_overrides(Some(&"{\"sts\":\"http://localhost:4566\"}".to_string())) - .unwrap() - .unwrap(); - - assert_eq!( - parsed.endpoints.get("sts"), - Some(&"http://localhost:4566".to_string()) - ); - } - - #[tokio::test] - async fn test_resolve_credentials_prefers_explicit_keys() { - let mut env = HashMap::new(); - env.insert("AWS_ACCESS_KEY_ID".to_string(), "AKIA123".to_string()); - env.insert("AWS_SECRET_ACCESS_KEY".to_string(), "secret".to_string()); - env.insert("AWS_SESSION_TOKEN".to_string(), "token".to_string()); - env.insert("AWS_PROFILE".to_string(), "should-not-be-used".to_string()); - - let credentials = resolve_credentials(&env).await.unwrap(); - assert_eq!( - credentials, - AwsCredentials::AccessKeys { - access_key_id: "AKIA123".to_string(), - secret_access_key: "secret".to_string(), - session_token: Some("token".to_string()), - } - ); - } - - #[tokio::test] - async fn test_resolve_credentials_ignores_empty_session_token() { - let mut env = HashMap::new(); - env.insert("AWS_ACCESS_KEY_ID".to_string(), "AKIA123".to_string()); - env.insert("AWS_SECRET_ACCESS_KEY".to_string(), "secret".to_string()); - env.insert("AWS_SESSION_TOKEN".to_string(), "".to_string()); - - let credentials = resolve_credentials(&env).await.unwrap(); - assert_eq!( - credentials, - AwsCredentials::AccessKeys { - access_key_id: "AKIA123".to_string(), - secret_access_key: "secret".to_string(), - session_token: None, - } - ); - } - - #[tokio::test] - async fn test_from_env_uses_imds_for_region_and_credentials() { - let endpoint = start_mock_imds().await; - let mut env = HashMap::new(); - env.insert("AWS_ACCOUNT_ID".to_string(), "123456789012".to_string()); - env.insert( - "AWS_EC2_METADATA_SERVICE_ENDPOINT".to_string(), - endpoint.clone(), - ); - - let config = AwsClientConfig::from_env(&env).await.unwrap(); - - assert_eq!(config.region, "us-east-1"); - // Discovery validates the IMDS credential document (the mock would - // reject a parse failure), but the stored credential stays deferred: - // role credentials expire, so they are resolved at use time. - assert_eq!( - config.credentials, - AwsCredentials::Imds { - endpoint: Some(endpoint), - } - ); - } - - async fn start_mock_imds() -> String { - let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); - let addr = listener.local_addr().unwrap(); - - tokio::spawn(async move { - loop { - let Ok((mut stream, _)) = listener.accept().await else { - break; - }; - - tokio::spawn(async move { - let mut buffer = [0u8; 2048]; - let Ok(n) = stream.read(&mut buffer).await else { - return; - }; - let request = String::from_utf8_lossy(&buffer[..n]); - let body = if request.starts_with("PUT /latest/api/token ") { - "token".to_string() - } else if request.starts_with("GET /latest/meta-data/placement/region ") { - "us-east-1".to_string() - } else if request - .starts_with("GET /latest/meta-data/iam/security-credentials/ ") - { - "test-role".to_string() - } else if request - .starts_with("GET /latest/meta-data/iam/security-credentials/test-role ") - { - // Real IMDS role credentials always carry an Expiration. - r#"{"AccessKeyId":"AKIAIMDS","SecretAccessKey":"secret","Token":"session","Expiration":"2099-01-01T00:00:00Z"}"# - .to_string() - } else { - let response = - "HTTP/1.1 404 Not Found\r\ncontent-length: 0\r\n\r\n".to_string(); - let _ = stream.write_all(response.as_bytes()).await; - return; - }; - - let response = format!( - "HTTP/1.1 200 OK\r\ncontent-length: {}\r\n\r\n{}", - body.len(), - body - ); - let _ = stream.write_all(response.as_bytes()).await; - }); - } - }); - - format!("http://{}", addr) - } -} +#[path = "tests.rs"] +mod tests; diff --git a/crates/alien-aws-clients/src/aws/remote_storage_credentials.rs b/crates/alien-aws-clients/src/aws/remote_storage_credentials.rs new file mode 100644 index 000000000..e1cb180ec --- /dev/null +++ b/crates/alien-aws-clients/src/aws/remote_storage_credentials.rs @@ -0,0 +1,92 @@ +use alien_client_core::{ErrorData, Result}; +use alien_error::{AlienError, Context, IntoAlienError}; + +use super::{ + sts::{AssumeRoleRequest, AssumeRoleWithWebIdentityRequest, StsApi, StsClient}, + AwsClientConfig, AwsClientConfigExt, AwsCredentials, +}; + +pub(super) async fn assume_role_with_session_policy( + config: &AwsClientConfig, + role_arn: &str, + role_session_name: &str, + duration_seconds: i32, + policy: &str, + target_account_id: &str, + target_region: &str, +) -> Result { + let source = config.get_web_identity_credentials().await?; + let response = StsClient::new(reqwest::Client::new(), source.clone()) + .assume_role( + AssumeRoleRequest::builder() + .role_arn(role_arn.to_string()) + .role_session_name(role_session_name.to_string()) + .duration_seconds(duration_seconds) + .policy(policy.to_string()) + .build(), + ) + .await?; + let credentials = response.assume_role_result.credentials; + Ok(AwsClientConfig { + account_id: target_account_id.to_string(), + region: target_region.to_string(), + credentials: credentials.into(), + service_overrides: source.service_overrides, + }) +} + +pub(super) async fn materialize_web_identity_session_with_policy( + config: &AwsClientConfig, + role_session_name: &str, + duration_seconds: i32, + policy: &str, +) -> Result { + let AwsCredentials::WebIdentity { + config: web_identity, + } = &config.credentials + else { + return Err(AlienError::new(ErrorData::InvalidClientConfig { + message: "AWS remote Storage attenuation requires a web-identity source or an explicit target-role handoff".to_string(), + errors: None, + })); + }; + let token = std::fs::read_to_string(&web_identity.web_identity_token_file) + .into_alien_error() + .context(ErrorData::InvalidClientConfig { + message: format!( + "Failed to read web identity token file: {}", + web_identity.web_identity_token_file + ), + errors: None, + })? + .trim() + .to_string(); + let unsigned_config = AwsClientConfig { + account_id: config.account_id.clone(), + region: config.region.clone(), + credentials: AwsCredentials::AccessKeys { + access_key_id: "UNSIGNED_WEB_IDENTITY".to_string(), + secret_access_key: "UNSIGNED_WEB_IDENTITY".to_string(), + session_token: None, + }, + service_overrides: config.service_overrides.clone(), + }; + let response = StsClient::new(reqwest::Client::new(), unsigned_config) + .assume_role_with_web_identity( + AssumeRoleWithWebIdentityRequest::builder() + .role_arn(web_identity.role_arn.clone()) + .role_session_name(role_session_name.to_string()) + .web_identity_token(token) + .duration_seconds(duration_seconds) + .policy(policy.to_string()) + .build(), + ) + .await?; + let credentials = response.assume_role_with_web_identity_result.credentials; + Ok(AwsClientConfig { + account_id: config.account_id.clone(), + region: config.region.clone(), + credentials: credentials.into(), + service_overrides: config.service_overrides.clone(), + }) +} diff --git a/crates/alien-aws-clients/src/aws/sts.rs b/crates/alien-aws-clients/src/aws/sts.rs index dc6381614..22f7a72be 100644 --- a/crates/alien-aws-clients/src/aws/sts.rs +++ b/crates/alien-aws-clients/src/aws/sts.rs @@ -3,7 +3,7 @@ use std::fmt::Debug; use crate::aws::aws_request_utils::{AwsRequestBuilderExt, AwsSignConfig}; use crate::aws::{AwsClientConfig, AwsCredentials}; -use alien_client_core::{ErrorData, Result}; +use alien_client_core::{redact_request_body, ErrorData, RequestBuilderExt, Result}; use alien_error::ContextError; use bon::Builder; use form_urlencoded; @@ -39,10 +39,8 @@ impl StsClient { Self { client, config } } - async fn sign_config(&self, operation_name: &str) -> Result { - let config = if operation_name == "AssumeRoleWithWebIdentity" { - self.config.clone() - } else if matches!(self.config.credentials, AwsCredentials::WebIdentity { .. }) { + async fn sign_config(&self) -> Result { + let config = if matches!(self.config.credentials, AwsCredentials::WebIdentity { .. }) { self.config.get_web_identity_credentials().await? } else { self.config.clone() @@ -98,8 +96,22 @@ impl StsClient { .content_type_form() .body(body.clone()); - let sign_config = self.sign_config(operation_name).await?; - let result = crate::aws::aws_request_utils::sign_send_xml(builder, &sign_config).await; + // AssumeRoleWithWebIdentity is authenticated by its OIDC token and + // explicitly does not require AWS credentials. Signing it with dummy + // credentials makes the otherwise valid exchange fail at AWS. + let result = if operation_name == "AssumeRoleWithWebIdentity" { + builder.with_retry().send_xml::().await + } else { + let sign_config = self.sign_config().await?; + crate::aws::aws_request_utils::sign_send_xml(builder, &sign_config).await + }; + // Web-identity request bodies contain the projected identity token. + // Strip it from every error-chain layer before adding STS context. + let result = if operation_name == "AssumeRoleWithWebIdentity" { + redact_request_body(result) + } else { + result + }; match result { Ok(v) => Ok(v), @@ -112,9 +124,13 @@ impl StsClient { { let status = StatusCode::from_u16(*http_status) .unwrap_or(StatusCode::INTERNAL_SERVER_ERROR); - if let Some(mapped) = - Self::map_sts_error(status, text, operation_name, resource_name, &body) - { + if let Some(mapped) = Self::map_sts_error( + status, + text, + operation_name, + resource_name, + (operation_name != "AssumeRoleWithWebIdentity").then_some(body.as_str()), + ) { Err(e.context(mapped)) } else { // Couldn't parse STS error, use original error @@ -132,7 +148,7 @@ impl StsClient { error_body: &str, operation: &str, resource_name: &str, - request_body: &str, + request_body: Option<&str>, ) -> Option { // Attempt to parse the canonical AWS error XML. let parsed_error: std::result::Result = @@ -232,7 +248,7 @@ impl StsClient { url: "sts.amazonaws.com".into(), http_status: status.as_u16(), http_response_text: Some(error_body.into()), - http_request_text: Some(request_body.into()), + http_request_text: request_body.map(str::to_string), }, }, }) @@ -470,6 +486,17 @@ pub struct Credentials { pub expiration: String, } +impl From for AwsCredentials { + fn from(credentials: Credentials) -> Self { + Self::SessionCredentials { + access_key_id: credentials.access_key_id, + secret_access_key: credentials.secret_access_key, + session_token: credentials.session_token, + expires_at: credentials.expiration, + } + } +} + #[derive(Deserialize, Debug)] #[serde(rename_all = "PascalCase")] pub struct GetCallerIdentityResponse { @@ -533,6 +560,10 @@ mod tests { assert!(observed[0] .body .contains("Action=AssumeRoleWithWebIdentity")); + assert!( + observed[0].authorization.is_empty(), + "AssumeRoleWithWebIdentity must not be SigV4 signed" + ); assert!(observed[1].body.contains("Action=GetCallerIdentity")); assert!( observed[1].authorization.contains("ASIATESTACCESS"), @@ -541,6 +572,137 @@ mod tests { ); } + #[tokio::test] + async fn assume_role_sends_the_exact_inline_session_policy() { + let observed = Arc::new(Mutex::new(Vec::new())); + let listener = TcpListener::bind("127.0.0.1:0").expect("bind test STS server"); + let endpoint = format!("http://{}", listener.local_addr().expect("local addr")); + let server_observed = observed.clone(); + let server = std::thread::spawn(move || { + let (mut stream, _) = listener.accept().expect("accept STS request"); + let (headers, body) = read_http_request(&mut stream); + server_observed + .lock() + .expect("observed requests lock") + .push(ObservedRequest { + body, + authorization: headers, + }); + write_xml_response(&mut stream, assume_role_response()); + }); + let policy = serde_json::json!({ + "Version": "2012-10-17", + "Statement": [{ + "Effect": "Allow", + "Action": ["s3:ListBucket"], + "Resource": ["arn:aws:s3:::requested-bucket"] + }] + }) + .to_string(); + let config = AwsClientConfig { + account_id: "111122223333".to_string(), + region: "us-east-1".to_string(), + credentials: AwsCredentials::AccessKeys { + access_key_id: "AKIATESTACCESS".to_string(), + secret_access_key: "test-secret".to_string(), + session_token: None, + }, + service_overrides: Some(AwsServiceOverrides { + endpoints: HashMap::from([("sts".to_string(), endpoint)]), + }), + }; + + StsClient::new(Client::new(), config) + .assume_role( + AssumeRoleRequest::builder() + .role_arn("arn:aws:iam::123456789012:role/remote-management".to_string()) + .role_session_name("remote-storage-session".to_string()) + .duration_seconds(3600) + .policy(policy.clone()) + .build(), + ) + .await + .expect("AssumeRole should succeed"); + server.join().expect("server thread should finish"); + + let observed = observed.lock().expect("observed requests lock"); + let form = form_urlencoded::parse(observed[0].body.as_bytes()) + .into_owned() + .collect::>(); + assert_eq!(form.get("Action").map(String::as_str), Some("AssumeRole")); + assert_eq!(form.get("Policy"), Some(&policy)); + assert_eq!( + serde_json::from_str::(form.get("Policy").unwrap()).unwrap(), + serde_json::json!({ + "Version": "2012-10-17", + "Statement": [{ + "Effect": "Allow", + "Action": ["s3:ListBucket"], + "Resource": ["arn:aws:s3:::requested-bucket"] + }] + }) + ); + } + + #[tokio::test] + async fn web_identity_errors_never_retain_the_request_token() { + const SENTINEL: &str = "secret-web-identity-sentinel"; + const POLICY: &str = r#"{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:GetObject"],"Resource":["arn:aws:s3:::requested-bucket/*"]}]}"#; + let listener = TcpListener::bind("127.0.0.1:0").expect("bind test STS server"); + let endpoint = format!("http://{}", listener.local_addr().expect("local addr")); + let server = std::thread::spawn(move || { + let (mut stream, _) = listener.accept().expect("accept STS request"); + let (headers, body) = read_http_request(&mut stream); + assert!(body.contains(SENTINEL), "server should receive the token"); + let form = form_urlencoded::parse(body.as_bytes()) + .into_owned() + .collect::>(); + assert_eq!(form.get("Policy").map(String::as_str), Some(POLICY)); + assert!( + !headers + .lines() + .any(|line| line.to_ascii_lowercase().starts_with("authorization:")), + "AssumeRoleWithWebIdentity must not be SigV4 signed" + ); + let response_body = "upstream failure"; + let response = format!( + "HTTP/1.1 500 Internal Server Error\r\ncontent-type: text/plain\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{}", + response_body.len(), + response_body + ); + stream + .write_all(response.as_bytes()) + .expect("write error response"); + }); + let config = AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: AwsCredentials::AccessKeys { + access_key_id: "UNSIGNED".to_string(), + secret_access_key: "UNSIGNED".to_string(), + session_token: None, + }, + service_overrides: Some(AwsServiceOverrides { + endpoints: HashMap::from([("sts".to_string(), endpoint)]), + }), + }; + let error = StsClient::new(Client::new(), config) + .assume_role_with_web_identity( + AssumeRoleWithWebIdentityRequest::builder() + .role_arn("arn:aws:iam::123456789012:role/test".to_string()) + .role_session_name("test".to_string()) + .web_identity_token(SENTINEL.to_string()) + .policy(POLICY.to_string()) + .build(), + ) + .await + .expect_err("upstream error should propagate"); + server.join().expect("server thread should finish"); + let serialized = serde_json::to_string(&error).expect("serialize error chain"); + assert!(!serialized.contains(SENTINEL)); + assert!(!serialized.contains("WebIdentityToken")); + } + #[derive(Debug)] struct ObservedRequest { body: String, @@ -668,6 +830,25 @@ mod tests { .to_string() } + fn assume_role_response() -> String { + r#" + + + arn:aws:sts::123456789012:assumed-role/remote-management/remote-storage-session + AROA:remote-storage-session + + + ASIAREMOTEACCESS + remote-secret + remote-session-token + 2030-01-01T01:00:00Z + + + request-assume-role +"# + .to_string() + } + fn get_caller_identity_response() -> String { r#" diff --git a/crates/alien-aws-clients/src/aws/tests.rs b/crates/alien-aws-clients/src/aws/tests.rs new file mode 100644 index 000000000..6a35a13bc --- /dev/null +++ b/crates/alien-aws-clients/src/aws/tests.rs @@ -0,0 +1,175 @@ +use super::*; +use std::collections::HashMap; +use tokio::{ + io::{AsyncReadExt, AsyncWriteExt}, + net::TcpListener, +}; + +#[test] +fn test_extract_account_id_from_role_arn() { + assert_eq!( + extract_account_id_from_role_arn("arn:aws:iam::123456789012:role/MyRole"), + Some("123456789012".to_string()) + ); + assert_eq!( + extract_account_id_from_role_arn("arn:aws:iam::987654321098:role/cross-account-role"), + Some("987654321098".to_string()) + ); + assert_eq!(extract_account_id_from_role_arn("invalid-arn"), None); + assert_eq!( + extract_account_id_from_role_arn("arn:aws:iam:::role/NoAccount"), + None + ); +} + +#[test] +fn test_profile_name_prefers_aws_profile() { + let mut env = HashMap::new(); + env.insert("AWS_PROFILE".to_string(), "primary".to_string()); + env.insert("AWS_DEFAULT_PROFILE".to_string(), "fallback".to_string()); + + assert_eq!(profile_name(&env), "primary".to_string()); +} + +#[test] +fn test_profile_name_falls_back_to_default() { + let env = HashMap::new(); + assert_eq!(profile_name(&env), "default".to_string()); +} + +#[test] +fn test_profile_name_uses_aws_default_profile() { + let mut env = HashMap::new(); + env.insert("AWS_DEFAULT_PROFILE".to_string(), "fallback".to_string()); + + assert_eq!(profile_name(&env), "fallback".to_string()); +} + +#[tokio::test] +async fn test_resolve_region_uses_default_region_fallback() { + let mut env = HashMap::new(); + env.insert("AWS_DEFAULT_REGION".to_string(), "us-west-2".to_string()); + + assert_eq!(resolve_region(&env).await.unwrap(), "us-west-2"); +} + +#[test] +fn test_parse_service_overrides() { + let parsed = parse_service_overrides(Some(&"{\"sts\":\"http://localhost:4566\"}".to_string())) + .unwrap() + .unwrap(); + + assert_eq!( + parsed.endpoints.get("sts"), + Some(&"http://localhost:4566".to_string()) + ); +} + +#[tokio::test] +async fn test_resolve_credentials_prefers_explicit_keys() { + let mut env = HashMap::new(); + env.insert("AWS_ACCESS_KEY_ID".to_string(), "AKIA123".to_string()); + env.insert("AWS_SECRET_ACCESS_KEY".to_string(), "secret".to_string()); + env.insert("AWS_SESSION_TOKEN".to_string(), "token".to_string()); + env.insert("AWS_PROFILE".to_string(), "should-not-be-used".to_string()); + + let credentials = resolve_credentials(&env).await.unwrap(); + assert_eq!( + credentials, + AwsCredentials::AccessKeys { + access_key_id: "AKIA123".to_string(), + secret_access_key: "secret".to_string(), + session_token: Some("token".to_string()), + } + ); +} + +#[tokio::test] +async fn test_resolve_credentials_ignores_empty_session_token() { + let mut env = HashMap::new(); + env.insert("AWS_ACCESS_KEY_ID".to_string(), "AKIA123".to_string()); + env.insert("AWS_SECRET_ACCESS_KEY".to_string(), "secret".to_string()); + env.insert("AWS_SESSION_TOKEN".to_string(), "".to_string()); + + let credentials = resolve_credentials(&env).await.unwrap(); + assert_eq!( + credentials, + AwsCredentials::AccessKeys { + access_key_id: "AKIA123".to_string(), + secret_access_key: "secret".to_string(), + session_token: None, + } + ); +} + +#[tokio::test] +async fn test_from_env_uses_imds_for_region_and_credentials() { + let endpoint = start_mock_imds().await; + let mut env = HashMap::new(); + env.insert("AWS_ACCOUNT_ID".to_string(), "123456789012".to_string()); + env.insert( + "AWS_EC2_METADATA_SERVICE_ENDPOINT".to_string(), + endpoint.clone(), + ); + + let config = AwsClientConfig::from_env(&env).await.unwrap(); + + assert_eq!(config.region, "us-east-1"); + // Discovery validates the IMDS credential document (the mock would + // reject a parse failure), but the stored credential stays deferred: + // role credentials expire, so they are resolved at use time. + assert_eq!( + config.credentials, + AwsCredentials::Imds { + endpoint: Some(endpoint), + } + ); +} + +async fn start_mock_imds() -> String { + let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); + let addr = listener.local_addr().unwrap(); + + tokio::spawn(async move { + loop { + let Ok((mut stream, _)) = listener.accept().await else { + break; + }; + + tokio::spawn(async move { + let mut buffer = [0u8; 2048]; + let Ok(n) = stream.read(&mut buffer).await else { + return; + }; + let request = String::from_utf8_lossy(&buffer[..n]); + let body = if request.starts_with("PUT /latest/api/token ") { + "token".to_string() + } else if request.starts_with("GET /latest/meta-data/placement/region ") { + "us-east-1".to_string() + } else if request.starts_with("GET /latest/meta-data/iam/security-credentials/ ") { + "test-role".to_string() + } else if request + .starts_with("GET /latest/meta-data/iam/security-credentials/test-role ") + { + // Real IMDS role credentials always carry an Expiration. + r#"{"AccessKeyId":"AKIAIMDS","SecretAccessKey":"secret","Token":"session","Expiration":"2099-01-01T00:00:00Z"}"# + .to_string() + } else { + let response = + "HTTP/1.1 404 Not Found\r\ncontent-length: 0\r\n\r\n".to_string(); + let _ = stream.write_all(response.as_bytes()).await; + return; + }; + + let response = format!( + "HTTP/1.1 200 OK\r\ncontent-length: {}\r\n\r\n{}", + body.len(), + body + ); + let _ = stream.write_all(response.as_bytes()).await; + }); + } + }); + + format!("http://{}", addr) +} diff --git a/crates/alien-azure-clients/Cargo.toml b/crates/alien-azure-clients/Cargo.toml index 11ce14326..a262846a4 100644 --- a/crates/alien-azure-clients/Cargo.toml +++ b/crates/alien-azure-clients/Cargo.toml @@ -26,6 +26,7 @@ base64 = { workspace = true } urlencoding = { workspace = true } sha2 = { workspace = true } hmac = "0.12" +quick-xml = { version = "0.37.0", features = ["serialize"] } backon = { workspace = true } url = { workspace = true } serde-aux = "4" diff --git a/crates/alien-azure-clients/src/azure/application_gateways.rs b/crates/alien-azure-clients/src/azure/application_gateways.rs index 612c0fe6d..482e1b095 100644 --- a/crates/alien-azure-clients/src/azure/application_gateways.rs +++ b/crates/alien-azure-clients/src/azure/application_gateways.rs @@ -158,7 +158,7 @@ impl ApplicationGatewayApi for AzureApplicationGatewayClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; diff --git a/crates/alien-azure-clients/src/azure/authorization.rs b/crates/alien-azure-clients/src/azure/authorization.rs index de5319bba..e293ef73b 100644 --- a/crates/alien-azure-clients/src/azure/authorization.rs +++ b/crates/alien-azure-clients/src/azure/authorization.rs @@ -12,6 +12,10 @@ use serde::Deserialize; #[cfg(feature = "test-utils")] use mockall::automock; +fn role_definition_ids_match(actual: &str, expected: &str) -> bool { + actual.eq_ignore_ascii_case(expected) +} + // ----------------------------------------------------------------------------- // Authorization API trait // ----------------------------------------------------------------------------- @@ -230,14 +234,11 @@ impl AuthorizationApi for AzureAuthorizationClient { let role_definition: RoleDefinition = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure CreateOrUpdateRoleDefinition: JSON parse error. Body: {}", - response_body - ), + message: "Azure CreateOrUpdateRoleDefinition: JSON parse error".to_string(), url: url.to_string(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(role_definition) @@ -293,14 +294,11 @@ impl AuthorizationApi for AzureAuthorizationClient { serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure DeleteRoleDefinition: JSON parse error. Body: {}", - response_body - ), + message: "Azure DeleteRoleDefinition: JSON parse error".to_string(), url: url.to_string(), http_status: status.as_u16(), http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?, ) } @@ -349,14 +347,11 @@ impl AuthorizationApi for AzureAuthorizationClient { let role_definition: RoleDefinition = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure GetRoleDefinition: JSON parse error. Body: {}", - response_body - ), + message: "Azure GetRoleDefinition: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(role_definition) @@ -412,14 +407,11 @@ impl AuthorizationApi for AzureAuthorizationClient { let role_assignment: RoleAssignment = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure CreateOrUpdateRoleAssignment: JSON parse error. Body: {}", - response_body - ), + message: "Azure CreateOrUpdateRoleAssignment: JSON parse error".to_string(), url: url.to_string(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(role_assignment) @@ -470,14 +462,11 @@ impl AuthorizationApi for AzureAuthorizationClient { serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure DeleteRoleAssignment: JSON parse error. Body: {}", - response_body - ), + message: "Azure DeleteRoleAssignment: JSON parse error".to_string(), url: url.to_string(), http_status: status.as_u16(), http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?, ) } @@ -521,14 +510,11 @@ impl AuthorizationApi for AzureAuthorizationClient { let role_assignment: RoleAssignment = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure GetRoleAssignment: JSON parse error. Body: {}", - response_body - ), + message: "Azure GetRoleAssignment: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(role_assignment) @@ -593,14 +579,11 @@ impl AuthorizationApi for AzureAuthorizationClient { let response: RoleAssignmentListResponse = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure ListRoleAssignments: JSON parse error. Body: {}", - response_body - ), + message: "Azure ListRoleAssignments: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; // Filter by role definition ID if provided @@ -609,10 +592,9 @@ impl AuthorizationApi for AzureAuthorizationClient { .value .into_iter() .filter(|assignment| { - assignment - .properties - .as_ref() - .map_or(false, |props| props.role_definition_id == role_def_id) + assignment.properties.as_ref().is_some_and(|props| { + role_definition_ids_match(&props.role_definition_id, &role_def_id) + }) }) .collect() } else { @@ -732,4 +714,12 @@ mod tests { "/subscriptions/sub-123/resourceGroups/rg-1/providers/Microsoft.ServiceBus/namespaces/bus-1" ); } + + #[test] + fn role_definition_filter_is_case_insensitive_for_arm_ids() { + assert!(role_definition_ids_match( + "/subscriptions/SUB/providers/Microsoft.Authorization/roleDefinitions/ABC", + "/subscriptions/sub/providers/microsoft.authorization/roledefinitions/abc", + )); + } } diff --git a/crates/alien-azure-clients/src/azure/blob_containers.rs b/crates/alien-azure-clients/src/azure/blob_containers.rs index 87af35061..28820e3d9 100644 --- a/crates/alien-azure-clients/src/azure/blob_containers.rs +++ b/crates/alien-azure-clients/src/azure/blob_containers.rs @@ -108,8 +108,6 @@ impl BlobContainerApi for AzureBlobContainerClient { .context(ErrorData::SerializationError { message: format!("Failed to serialize blob container '{}'.", container_name), })?; - let request_body = body.clone(); // Store request body for error context - let builder = AzureRequestBuilder::new(Method::PUT, url.clone()) .content_type_json() .content_length(&body) @@ -133,14 +131,11 @@ impl BlobContainerApi for AzureBlobContainerClient { let blob_container: BlobContainer = serde_json::from_str(&body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure CreateBlobContainer: JSON parse error. Body: {}", - body - ), + message: "Azure CreateBlobContainer: JSON parse error".to_string(), url: url.clone(), http_status: 200, - http_response_text: Some(body.clone()), - http_request_text: Some(request_body), + http_response_text: None, + http_request_text: None, })?; Ok(blob_container) @@ -186,10 +181,10 @@ impl BlobContainerApi for AzureBlobContainerClient { let blob_container: BlobContainer = serde_json::from_str(&body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!("Azure GetBlobContainer: JSON parse error. Body: {}", body), + message: "Azure GetBlobContainer: JSON parse error".to_string(), url: url.clone(), http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, // GET request has no body })?; @@ -235,13 +230,10 @@ impl BlobContainerApi for AzureBlobContainerClient { let blob_service_properties: BlobServiceProperties = serde_json::from_str(&body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure GetBlobServiceProperties: JSON parse error. Body: {}", - body - ), + message: "Azure GetBlobServiceProperties: JSON parse error".to_string(), url: url.clone(), http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -306,8 +298,6 @@ impl BlobContainerApi for AzureBlobContainerClient { .context(ErrorData::SerializationError { message: format!("Failed to serialize blob container '{}'.", container_name), })?; - let request_body = body.clone(); // Store request body for error context - let builder = AzureRequestBuilder::new(Method::PATCH, url.clone()) .content_type_json() .content_length(&body) @@ -331,14 +321,11 @@ impl BlobContainerApi for AzureBlobContainerClient { let blob_container: BlobContainer = serde_json::from_str(&body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure UpdateBlobContainer: JSON parse error. Body: {}", - body - ), + message: "Azure UpdateBlobContainer: JSON parse error".to_string(), url: url.clone(), http_status: 200, - http_response_text: Some(body.clone()), - http_request_text: Some(request_body), + http_response_text: None, + http_request_text: None, })?; Ok(blob_container) diff --git a/crates/alien-azure-clients/src/azure/common.rs b/crates/alien-azure-clients/src/azure/common.rs index 96dde1db1..4e7e1182a 100644 --- a/crates/alien-azure-clients/src/azure/common.rs +++ b/crates/alien-azure-clients/src/azure/common.rs @@ -4,10 +4,12 @@ // ----------------------------------------------------------------------------- use crate::azure::{AzureClientConfig, AzureClientConfigExt}; -use alien_client_core::{Error, ErrorData, Result}; +use alien_client_core::{ErrorData, Result}; +pub use crate::azure::error::create_azure_http_error_with_context; +use crate::azure::error::safe_http_response_context; use crate::azure::long_running_operation::{LongRunningOperation, OperationResult}; -use alien_error::{AlienError, Context, ContextError, IntoAlienError}; +use alien_error::{AlienError, Context, IntoAlienError}; use backon::{ExponentialBuilder, Retryable}; use chrono::Utc; use http::{header::HeaderName, HeaderValue}; @@ -207,18 +209,18 @@ impl AzureClientBase { }) })?; - // Capture request details before execution consumes the request + // Keep the request URL for diagnostics, but never retain the body: Azure request + // payloads can contain credentials and other sensitive configuration. let request_url = req_clone.url().to_string(); - let request_body = req_clone - .body() - .and_then(|b| b.as_bytes()) - .map(|b| String::from_utf8_lossy(b).to_string()); - let resp = client.execute(req_clone).await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let resp = client + .execute(req_clone) + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: HTTP error for {}", op, res_name), - }, - )?; + })?; let status = resp.status(); if status.is_success() || status == StatusCode::CREATED @@ -234,7 +236,6 @@ impl AzureClientBase { &res_name, &body, &request_url, - request_body, )) } } @@ -265,18 +266,18 @@ impl AzureClientBase { }) })?; - // Capture request details before execution consumes the request + // Keep the request URL for diagnostics, but never retain the body: Azure request + // payloads can contain credentials and other sensitive configuration. let request_url = req_clone.url().to_string(); - let request_body = req_clone - .body() - .and_then(|b| b.as_bytes()) - .map(|b| String::from_utf8_lossy(b).to_string()); - let resp = client.execute(req_clone).await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let resp = client + .execute(req_clone) + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: HTTP error for {}", op, res_name), - }, - )?; + })?; let status = resp.status(); if status.is_success() || status == StatusCode::CREATED @@ -292,7 +293,6 @@ impl AzureClientBase { &res_name, &body, &request_url, - request_body, )) } } @@ -333,37 +333,38 @@ impl AzureClientBase { }) })?; - // Capture request details before execution consumes the request + // Keep the request URL for diagnostics, but never retain the body: Azure request + // payloads can contain credentials and other sensitive configuration. let request_url = req_clone.url().to_string(); - let request_body = req_clone - .body() - .and_then(|b| b.as_bytes()) - .map(|b| String::from_utf8_lossy(b).to_string()); - let resp = client.execute(req_clone).await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let resp = client + .execute(req_clone) + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: HTTP error for {}", op, res_name), - }, - )?; + })?; let status = resp.status(); match status { StatusCode::OK => { // 200 OK - Operation completed synchronously with response body - let body = resp.text().await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let body = resp + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: failed to read response body", op), - }, - )?; + })?; let result: T = serde_json::from_str(&body).into_alien_error().context( - ErrorData::HttpResponseError { - message: format!("Azure {}: JSON parse error. Body: {}", op, body), - url: request_url.clone(), - http_status: 200, - http_response_text: Some(body.clone()), - http_request_text: request_body.clone(), - }, + safe_http_response_context( + format!("Azure {op}: JSON parse error"), + &request_url, + StatusCode::OK, + ), )?; Ok(OperationResult::Completed(result)) @@ -379,24 +380,22 @@ impl AzureClientBase { Ok(OperationResult::LongRunning(long_running_op)) } else { // No async headers - operation completed synchronously - let body = resp.text().await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let body = resp + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: failed to read response body", op), - }, - )?; + })?; let result: T = serde_json::from_str(&body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure {}: JSON parse error. Body: {}", - op, body - ), - url: request_url.clone(), - http_status: 201, - http_response_text: Some(body.clone()), - http_request_text: request_body.clone(), - })?; + .context(safe_http_response_context( + format!("Azure {op}: JSON parse error"), + &request_url, + StatusCode::CREATED, + ))?; Ok(OperationResult::Completed(result)) } @@ -405,16 +404,14 @@ impl AzureClientBase { // Operation completed synchronously with no response body (typically DELETE) // For unit type (), we can deserialize from empty string let result: T = serde_json::from_str("null").into_alien_error().context( - ErrorData::HttpResponseError { - message: format!( - "Azure {}: failed to deserialize unit type for NO_CONTENT response", - op + safe_http_response_context( + format!( + "Azure {op}: failed to deserialize unit type for \ + NO_CONTENT response" + ), + &request_url, + StatusCode::NO_CONTENT, ), - url: request_url.clone(), - http_status: 204, - http_response_text: Some("null".to_string()), - http_request_text: request_body.clone(), - }, )?; Ok(OperationResult::Completed(result)) @@ -441,7 +438,6 @@ impl AzureClientBase { &res_name, &body, &request_url, - request_body, )) } } @@ -484,37 +480,38 @@ impl AzureClientBase { }) })?; - // Capture request details before execution consumes the request + // Keep the request URL for diagnostics, but never retain the body: Azure request + // payloads can contain credentials and other sensitive configuration. let request_url = req_clone.url().to_string(); - let request_body = req_clone - .body() - .and_then(|b| b.as_bytes()) - .map(|b| String::from_utf8_lossy(b).to_string()); - let resp = client.execute(req_clone).await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let resp = client + .execute(req_clone) + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: HTTP error for {}", op, res_name), - }, - )?; + })?; let status = resp.status(); match status { StatusCode::OK => { // 200 OK - Operation completed synchronously with response body - let body = resp.text().await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let body = resp + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: failed to read response body", op), - }, - )?; + })?; let result: T = serde_json::from_str(&body).into_alien_error().context( - ErrorData::HttpResponseError { - message: format!("Azure {}: JSON parse error. Body: {}", op, body), - url: request_url.clone(), - http_status: 200, - http_response_text: Some(body.clone()), - http_request_text: request_body.clone(), - }, + safe_http_response_context( + format!("Azure {op}: JSON parse error"), + &request_url, + StatusCode::OK, + ), )?; Ok(OperationResult::Completed(result)) @@ -529,24 +526,22 @@ impl AzureClientBase { Ok(OperationResult::LongRunning(long_running_op)) } else { // No async headers - operation completed synchronously - let body = resp.text().await.into_alien_error().context( - ErrorData::HttpRequestFailed { + let body = resp + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { message: format!("Azure {}: failed to read response body", op), - }, - )?; + })?; let result: T = serde_json::from_str(&body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure {}: JSON parse error. Body: {}", - op, body - ), - url: request_url.clone(), - http_status: 201, - http_response_text: Some(body.clone()), - http_request_text: request_body.clone(), - })?; + .context(safe_http_response_context( + format!("Azure {op}: JSON parse error"), + &request_url, + StatusCode::CREATED, + ))?; Ok(OperationResult::Completed(result)) } @@ -555,16 +550,14 @@ impl AzureClientBase { // Operation completed synchronously with no response body (typically DELETE) // For unit type (), we can deserialize from empty string let result: T = serde_json::from_str("null").into_alien_error().context( - ErrorData::HttpResponseError { - message: format!( - "Azure {}: failed to deserialize unit type for NO_CONTENT response", - op + safe_http_response_context( + format!( + "Azure {op}: failed to deserialize unit type for \ + NO_CONTENT response" + ), + &request_url, + StatusCode::NO_CONTENT, ), - url: request_url.clone(), - http_status: 204, - http_response_text: Some("null".to_string()), - http_request_text: request_body.clone(), - }, )?; Ok(OperationResult::Completed(result)) @@ -591,7 +584,6 @@ impl AzureClientBase { &res_name, &body, &request_url, - request_body, )) } } @@ -655,143 +647,6 @@ impl AzureRequestBuilder { } } -// ----------------------------------------------------------------------------- -// Azure HTTP error handling helpers -// ----------------------------------------------------------------------------- - -/// Standard Azure REST API error response envelope. -#[derive(serde::Deserialize, Debug)] -struct AzureErrorResponse { - error: AzureErrorDetails, -} - -#[derive(serde::Deserialize, Debug)] -struct AzureErrorDetails { - code: Option, - message: Option, -} - -/// Attempt to extract the Azure-specific error details from a JSON response body. -fn parse_azure_error_details(body: &str) -> Option { - serde_json::from_str::(body) - .ok() - .map(|r| r.error) -} - -/// Azure error codes that represent transient propagation delays, not actual -/// invalid input. These are returned as HTTP 400 but should be retryable. -const AZURE_TRANSIENT_BAD_REQUEST_CODES: &[&str] = &[ - // Role definition assignableScopes update hasn't propagated yet. - "RoleAssignmentScopeNotAssignableToRoleDefinition", - // A PUT raced with an earlier create or update that is still in progress. - "ResourceCannotBeUpdatedDuringProvisioning", -]; - -fn is_transient_azure_bad_request(code: Option<&str>, message: &str) -> bool { - code.is_some_and(|code| { - AZURE_TRANSIENT_BAD_REQUEST_CODES - .iter() - .any(|transient_code| code.eq_ignore_ascii_case(transient_code)) - }) || message - .to_ascii_lowercase() - .contains("cannot be updated during provisioning") -} - -/// Creates an HttpResponseError with full HTTP details and adds appropriate service-specific context. -/// -/// Parses the Azure error code from the JSON response body (when available) -/// to refine classification beyond HTTP status codes alone — following the -/// same approach as AWS clients (e.g., `map_iam_error` in `aws/iam.rs`). -pub fn create_azure_http_error_with_context( - status: StatusCode, - op: &str, - res_type: &str, - res_name: &str, - body: &str, - url: &str, - request_body: Option, -) -> Error { - // First create the HttpResponseError with all HTTP details - let http_error = AlienError::new(ErrorData::HttpResponseError { - message: format!("Azure {op} failed for {res_type} '{res_name}': HTTP {status}"), - url: url.to_string(), - http_status: status.as_u16(), - http_response_text: Some(body.to_string()), - http_request_text: request_body, - }); - - let azure_error = parse_azure_error_details(body); - let azure_error_code = azure_error.as_ref().and_then(|error| error.code.as_deref()); - let azure_error_body = azure_error - .as_ref() - .and_then(|error| error.message.as_deref()) - .unwrap_or(body); - - // Add service-specific context based on Azure error code and HTTP status - let service_context = match (status, azure_error_code) { - // Azure propagation delays — transient, not truly invalid input - (StatusCode::BAD_REQUEST, code) - if is_transient_azure_bad_request(code, azure_error_body) => - { - ErrorData::RemoteResourceConflict { - message: format!( - "Transient Azure error for {res_type} '{res_name}' ({}): {azure_error_body}", - code.unwrap_or("unclassified") - ), - resource_type: res_type.into(), - resource_name: res_name.into(), - } - } - (StatusCode::BAD_REQUEST, _) => ErrorData::InvalidInput { - message: format!("Bad request for {res_type} '{res_name}': {azure_error_body}"), - field_name: None, - }, - (StatusCode::CONFLICT | StatusCode::PRECONDITION_FAILED, _) => { - ErrorData::RemoteResourceConflict { - message: format!( - "Resource conflict for {res_type} '{res_name}': {azure_error_body}" - ), - resource_type: res_type.into(), - resource_name: res_name.into(), - } - } - (StatusCode::NOT_FOUND, _) => ErrorData::RemoteResourceNotFound { - resource_type: res_type.into(), - resource_name: res_name.into(), - }, - (StatusCode::FORBIDDEN | StatusCode::UNAUTHORIZED, _) => ErrorData::RemoteAccessDenied { - resource_type: res_type.into(), - resource_name: res_name.into(), - }, - (StatusCode::TOO_MANY_REQUESTS, _) => ErrorData::RateLimitExceeded { - message: format!("Rate limit exceeded for {res_type} '{res_name}': {azure_error_body}"), - }, - ( - StatusCode::BAD_GATEWAY - | StatusCode::SERVICE_UNAVAILABLE - | StatusCode::INTERNAL_SERVER_ERROR, - _, - ) => ErrorData::RemoteServiceUnavailable { - message: format!("Service unavailable for {res_type} '{res_name}': {azure_error_body}"), - }, - (StatusCode::REQUEST_TIMEOUT | StatusCode::GATEWAY_TIMEOUT, _) => ErrorData::Timeout { - message: format!("Timeout for {res_type} '{res_name}': {azure_error_body}"), - }, - // 499 is a non-standard status code that indicates "Client Closed Request" - typically due to timeout - (status, _) if status.as_u16() == 499 => ErrorData::Timeout { - message: format!( - "Client closed request for {res_type} '{res_name}': {azure_error_body}" - ), - }, - _ => ErrorData::GenericError { - message: format!("Unknown error for {res_type} '{res_name}': {azure_error_body}"), - }, - }; - - // Add the service-specific context to the HTTP error - http_error.context(service_context) -} - // ----------------------------------------------------------------------------- // Azure metadata validation utilities // ----------------------------------------------------------------------------- @@ -840,68 +695,79 @@ pub fn validate_azure_metadata_value(key: &str, value: &str) -> Result<()> { #[cfg(test)] mod tests { - use super::*; - - #[test] - fn bad_gateway_is_retryable_service_unavailable() { - let err = create_azure_http_error_with_context( - StatusCode::BAD_GATEWAY, - "CreateOrUpdateQueue", - "Resource", - "commands", - "Bad Gateway", - "https://management.azure.com/test", - None, - ); + use httpmock::{Method::PATCH, MockServer}; + use serde_json::json; - assert_eq!(err.code, "REMOTE_SERVICE_UNAVAILABLE"); - assert!(err.retryable); - assert!(err.message.contains("Bad Gateway")); - } + use super::*; - #[test] - fn resource_update_during_provisioning_is_retryable_conflict() { - let err = create_azure_http_error_with_context( - StatusCode::BAD_REQUEST, - "CreateOrUpdateEventSubscription", - "Event Grid subscription", - "storage-events", - r#"{ - "error": { - "code": "BadRequest", - "message": "Resource cannot be updated during provisioning" + #[tokio::test] + async fn long_running_request_errors_never_retain_http_bodies() { + const REQUEST_SECRET: &str = "synthetic-container-app-credential-do-not-log"; + const REFLECTED_RESPONSE_SECRET: &str = + "synthetic-reflected-container-app-credential-do-not-log"; + + let server = MockServer::start_async().await; + let failed_request = server + .mock_async(|when, then| { + when.method(PATCH) + .path("/container-app") + .body_contains(REQUEST_SECRET); + then.status(400).json_body(json!({ + "error": { + "code": "ContainerAppInvalidName", + "message": REFLECTED_RESPONSE_SECRET + } + })); + }) + .await; + let client = Client::new(); + let request_url = format!("{}/container-app", server.base_url()); + let request = client + .patch(&request_url) + .json(&json!({ + "properties": { + "configuration": { + "secrets": [{ + "name": "remote-storage", + "value": REQUEST_SECRET + }] + } } - }"#, - "https://management.azure.com/test", - None, - ); - - assert_eq!(err.code, "REMOTE_RESOURCE_CONFLICT"); - assert!(err.retryable); - assert!(err - .message - .contains("cannot be updated during provisioning")); - } + })) + .build() + .expect("synthetic Azure request should build"); + let base = AzureClientBase::new(client, server.base_url()); + + let error = base + .execute_request_with_long_running_support::( + request, + "UpdateContainerApp", + "invalid_app_name", + ) + .await + .expect_err("synthetic Azure rejection should be returned"); - #[test] - fn resource_update_during_provisioning_code_is_retryable_conflict() { - let err = create_azure_http_error_with_context( - StatusCode::BAD_REQUEST, - "CreateOrUpdateEventSubscription", - "Event Grid subscription", - "storage-events", - r#"{ - "error": { - "code": "ResourceCannotBeUpdatedDuringProvisioning", - "message": "The resource is busy" - } - }"#, - "https://management.azure.com/test", - None, + failed_request.assert_async().await; + let serialized = serde_json::to_string(&error).expect("Azure error should serialize"); + assert!( + !serialized.contains(REQUEST_SECRET), + "request body leaked into serialized Azure error: {serialized}" + ); + assert!( + !serialized.contains(REFLECTED_RESPONSE_SECRET), + "response body leaked into serialized Azure error: {serialized}" + ); + assert!( + serialized.contains("ContainerAppInvalidName"), + "Azure response code was dropped: {serialized}" + ); + assert!( + serialized.contains("\"http_status\":400"), + "HTTP status was dropped: {serialized}" + ); + assert!( + serialized.contains(&request_url), + "request URL was dropped: {serialized}" ); - - assert_eq!(err.code, "REMOTE_RESOURCE_CONFLICT"); - assert!(err.retryable); - assert!(err.message.contains("The resource is busy")); } } diff --git a/crates/alien-azure-clients/src/azure/compute.rs b/crates/alien-azure-clients/src/azure/compute.rs index 3b549a423..3f973ffb1 100644 --- a/crates/alien-azure-clients/src/azure/compute.rs +++ b/crates/alien-azure-clients/src/azure/compute.rs @@ -300,7 +300,7 @@ impl VirtualMachineScaleSetsApi for AzureVmssClient { message: format!("Azure GetVmss: JSON parse error for {}", vmss_name), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -388,7 +388,7 @@ impl VirtualMachineScaleSetsApi for AzureVmssClient { message: format!("Azure ListVmssVms: JSON parse error for {}", vmss_name), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -451,7 +451,7 @@ impl VirtualMachineScaleSetsApi for AzureVmssClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -766,7 +766,7 @@ impl VirtualMachineScaleSetsApi for AzureVmssClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -866,7 +866,7 @@ impl VirtualMachineScaleSetsApi for AzureVmssClient { message: format!("Failed to parse rolling upgrade status for {}", vmss_name), url, http_status: 200, - http_response_text: Some(body), + http_response_text: None, http_request_text: None, }) } diff --git a/crates/alien-azure-clients/src/azure/container_apps.rs b/crates/alien-azure-clients/src/azure/container_apps.rs index a6517b1a8..bf78be734 100644 --- a/crates/alien-azure-clients/src/azure/container_apps.rs +++ b/crates/alien-azure-clients/src/azure/container_apps.rs @@ -422,7 +422,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { ), url: url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -475,7 +475,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { message: "Azure ListContainerApps: JSON parse error".to_string(), url, http_status: 200, - http_response_text: Some(body), + http_response_text: None, http_request_text: None, }) } @@ -689,7 +689,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { url: url, http_status: 200, http_request_text: None, - http_response_text: Some(body.clone()), + http_response_text: None, })?; Ok(managed_environment) @@ -804,7 +804,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { ), url, http_status: 200, - http_response_text: Some(body), + http_response_text: None, http_request_text: None, }) } @@ -947,7 +947,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { message: format!("Azure GetJob: JSON parse error for {}", job_name), url: url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -1221,7 +1221,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { ), url: url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -1278,7 +1278,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { ), url: url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -1339,7 +1339,7 @@ impl ContainerAppsApi for AzureContainerAppsClient { ), url: url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; diff --git a/crates/alien-azure-clients/src/azure/containerregistry.rs b/crates/alien-azure-clients/src/azure/containerregistry.rs index be7ca86f8..974e33d39 100644 --- a/crates/alien-azure-clients/src/azure/containerregistry.rs +++ b/crates/alien-azure-clients/src/azure/containerregistry.rs @@ -325,14 +325,11 @@ impl ContainerRegistryApi for AzureContainerRegistryClient { let registry: Registry = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure GetRegistry: JSON parse error. Body: {}", - response_body - ), + message: "Azure GetRegistry: JSON parse error".to_string(), url: url_string, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(registry) @@ -381,14 +378,11 @@ impl ContainerRegistryApi for AzureContainerRegistryClient { let list_result: RegistryListResult = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure ListRegistries: JSON parse error. Body: {}", - response_body - ), + message: "Azure ListRegistries: JSON parse error".to_string(), url: url_string, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(list_result.value) @@ -563,14 +557,11 @@ impl ContainerRegistryApi for AzureContainerRegistryClient { let scope_map: ScopeMap = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure GetScopeMap: JSON parse error. Body: {}", - response_body - ), + message: "Azure GetScopeMap: JSON parse error".to_string(), url: url_string, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(scope_map) @@ -615,14 +606,11 @@ impl ContainerRegistryApi for AzureContainerRegistryClient { let list_result: ScopeMapListResult = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure ListScopeMaps: JSON parse error. Body: {}", - response_body - ), + message: "Azure ListScopeMaps: JSON parse error".to_string(), url: url_string, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(list_result.value) @@ -797,11 +785,11 @@ impl ContainerRegistryApi for AzureContainerRegistryClient { let token: Token = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!("Azure GetToken: JSON parse error. Body: {}", response_body), + message: "Azure GetToken: JSON parse error".to_string(), url: url_string, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(token) @@ -843,14 +831,11 @@ impl ContainerRegistryApi for AzureContainerRegistryClient { let list_result: TokenListResult = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure ListTokens: JSON parse error. Body: {}", - response_body - ), + message: "Azure ListTokens: JSON parse error".to_string(), url: url_string, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(list_result.value) diff --git a/crates/alien-azure-clients/src/azure/disks.rs b/crates/alien-azure-clients/src/azure/disks.rs index 4d0f32269..bdf5974d5 100644 --- a/crates/alien-azure-clients/src/azure/disks.rs +++ b/crates/alien-azure-clients/src/azure/disks.rs @@ -168,7 +168,7 @@ impl ManagedDisksApi for AzureManagedDisksClient { message: format!("Azure GetDisk: JSON parse error for {}", disk_name), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; diff --git a/crates/alien-azure-clients/src/azure/error.rs b/crates/alien-azure-clients/src/azure/error.rs new file mode 100644 index 000000000..f3576b25a --- /dev/null +++ b/crates/alien-azure-clients/src/azure/error.rs @@ -0,0 +1,470 @@ +use alien_client_core::{Error, ErrorData}; +use alien_error::{AlienError, ContextError}; +use reqwest::StatusCode; + +/// Standard Azure REST API error response envelope. +#[derive(serde::Deserialize, Debug)] +struct AzureErrorResponse { + error: AzureErrorDetails, +} + +#[derive(serde::Deserialize, Debug)] +struct AzureErrorDetails { + code: Option, + message: Option, +} + +/// Azure error codes that represent transient propagation delays, not actual +/// invalid input. These are returned as HTTP 400 but should be retryable. +const AZURE_TRANSIENT_BAD_REQUEST_CODES: &[&str] = &[ + // Role definition assignableScopes update hasn't propagated yet. + "RoleAssignmentScopeNotAssignableToRoleDefinition", + // A PUT raced with an earlier create or update that is still in progress. + "ResourceCannotBeUpdatedDuringProvisioning", +]; + +pub(crate) fn safe_http_response_context( + message: impl Into, + url: impl Into, + status: StatusCode, +) -> ErrorData { + let url = sanitized_diagnostic_url(&url.into()); + ErrorData::HttpResponseError { + message: message.into(), + url, + http_status: status.as_u16(), + http_request_text: None, + http_response_text: None, + } +} + +pub(crate) fn safe_http_response_error( + message: impl Into, + url: impl Into, + status: StatusCode, +) -> Error { + AlienError::new(safe_http_response_context(message, url, status)) +} + +pub(crate) fn sanitized_diagnostic_url(url: &str) -> String { + let Ok(mut diagnostic_url) = url::Url::parse(url) else { + return "".to_string(); + }; + let _ = diagnostic_url.set_username(""); + let _ = diagnostic_url.set_password(None); + diagnostic_url.set_query(None); + diagnostic_url.set_fragment(None); + diagnostic_url.to_string() +} + +/// Creates an HTTP error with safe Azure service context. +/// +/// The response body is inspected only while classifying the error. Neither +/// request nor response bodies are retained because Azure payloads and reflected +/// provider messages can contain credentials. +pub fn create_azure_http_error_with_context( + status: StatusCode, + operation: &str, + resource_type: &str, + resource_name: &str, + body: &str, + url: &str, +) -> Error { + let azure_error = parse_azure_error_details(body); + let azure_error_code = azure_error + .as_ref() + .and_then(|error| error.code.as_deref()) + .and_then(validated_azure_error_code); + let azure_error_message = azure_error + .as_ref() + .and_then(|error| error.message.as_deref()) + .unwrap_or(body); + let safe_azure_error_code = if is_container_app_environment_waking(azure_error_message) { + "ContainerAppEnvironmentDisabled" + } else { + azure_error_code.unwrap_or("unclassified") + }; + + let http_error = safe_http_response_error( + format!( + "Azure {operation} failed for {resource_type} '{resource_name}': \ + HTTP {status} (Azure code: {safe_azure_error_code})" + ), + url, + status, + ); + + let service_context = match (status, azure_error_code) { + (StatusCode::BAD_REQUEST, code) + if is_transient_azure_bad_request(code, azure_error_message) => + { + ErrorData::RemoteResourceConflict { + message: format!( + "Transient Azure error for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + resource_type: resource_type.into(), + resource_name: resource_name.into(), + } + } + (StatusCode::BAD_REQUEST, _) => ErrorData::InvalidInput { + message: format!( + "Bad request for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + field_name: None, + }, + (StatusCode::CONFLICT | StatusCode::PRECONDITION_FAILED, code) + if code.is_some_and(|code| code.eq_ignore_ascii_case("RoleAssignmentExists")) => + { + let conflict_id = role_assignment_conflict_uuid(azure_error_message) + .map(|id| format!(", conflicting assignment: {id}")) + .unwrap_or_default(); + ErrorData::RemoteResourceConflict { + message: format!( + "Role assignment already exists \ + (Azure code: {safe_azure_error_code}{conflict_id})" + ), + resource_type: resource_type.into(), + resource_name: resource_name.into(), + } + } + (StatusCode::CONFLICT | StatusCode::PRECONDITION_FAILED, _) => { + ErrorData::RemoteResourceConflict { + message: format!( + "Resource conflict for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + resource_type: resource_type.into(), + resource_name: resource_name.into(), + } + } + (StatusCode::NOT_FOUND, _) => ErrorData::RemoteResourceNotFound { + resource_type: resource_type.into(), + resource_name: resource_name.into(), + }, + (StatusCode::FORBIDDEN | StatusCode::UNAUTHORIZED, _) => ErrorData::RemoteAccessDenied { + resource_type: resource_type.into(), + resource_name: resource_name.into(), + }, + (StatusCode::TOO_MANY_REQUESTS, _) => ErrorData::RateLimitExceeded { + message: format!( + "Rate limit exceeded for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + }, + ( + StatusCode::BAD_GATEWAY + | StatusCode::SERVICE_UNAVAILABLE + | StatusCode::INTERNAL_SERVER_ERROR, + _, + ) => ErrorData::RemoteServiceUnavailable { + message: format!( + "Service unavailable for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + }, + (StatusCode::REQUEST_TIMEOUT | StatusCode::GATEWAY_TIMEOUT, _) => ErrorData::Timeout { + message: format!( + "Timeout for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + }, + // 499 is a non-standard status code used for "Client Closed Request". + (status, _) if status.as_u16() == 499 => ErrorData::Timeout { + message: format!( + "Client closed request for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + }, + _ => ErrorData::GenericError { + message: format!( + "Unknown error for {resource_type} '{resource_name}' \ + (Azure code: {safe_azure_error_code})" + ), + }, + }; + + http_error.context(service_context) +} + +fn parse_azure_error_details(body: &str) -> Option { + serde_json::from_str::(body) + .ok() + .map(|response| response.error) +} + +fn validated_azure_error_code(code: &str) -> Option<&str> { + (!code.is_empty() + && code.len() <= 128 + && code.bytes().all(|character| { + character.is_ascii_alphanumeric() || matches!(character, b'.' | b'_' | b'-') + })) + .then_some(code) +} + +fn is_transient_azure_bad_request(code: Option<&str>, message: &str) -> bool { + code.is_some_and(|code| { + AZURE_TRANSIENT_BAD_REQUEST_CODES + .iter() + .any(|transient_code| code.eq_ignore_ascii_case(transient_code)) + }) || message + .to_ascii_lowercase() + .contains("cannot be updated during provisioning") + || is_container_app_environment_waking(message) +} + +fn is_container_app_environment_waking(message: &str) -> bool { + message + .to_ascii_lowercase() + .contains("environment is stopped due to a long period of inactivity") +} + +fn role_assignment_conflict_uuid(message: &str) -> Option { + let normalized = message + .chars() + .map(|character| { + if character.is_ascii_hexdigit() || character == '-' { + character + } else { + ' ' + } + }) + .collect::(); + + normalized + .split_whitespace() + .rev() + .find_map(|candidate| uuid::Uuid::parse_str(candidate).ok()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn safe_http_context_removes_url_credentials_query_and_fragment() { + const USER: &str = "URL_USER_SECRET_0123456789"; + const PASSWORD: &str = "URL_PASSWORD_SECRET_0123456789"; + const QUERY: &str = "URL_QUERY_SECRET_0123456789"; + const FRAGMENT: &str = "URL_FRAGMENT_SECRET_0123456789"; + let context = safe_http_response_context( + "safe message", + format!("https://{USER}:{PASSWORD}@example.com/resource?sig={QUERY}#{FRAGMENT}"), + StatusCode::BAD_REQUEST, + ); + let serialized = serde_json::to_string(&context).unwrap(); + + assert!(serialized.contains("https://example.com/resource")); + assert!(!serialized.contains(USER)); + assert!(!serialized.contains(PASSWORD)); + assert!(!serialized.contains(QUERY)); + assert!(!serialized.contains(FRAGMENT)); + } + + #[test] + fn bad_gateway_is_retryable_service_unavailable() { + let error = create_azure_http_error_with_context( + StatusCode::BAD_GATEWAY, + "CreateOrUpdateQueue", + "Resource", + "commands", + "Bad Gateway", + "https://management.azure.com/test", + ); + + assert_eq!(error.code, "REMOTE_SERVICE_UNAVAILABLE"); + assert!(error.retryable); + assert!(error.message.contains("Azure code: unclassified")); + assert!(!error.message.contains("Bad Gateway")); + } + + #[test] + fn resource_update_during_provisioning_is_retryable_conflict() { + let error = create_azure_http_error_with_context( + StatusCode::BAD_REQUEST, + "CreateOrUpdateEventSubscription", + "Event Grid subscription", + "storage-events", + r#"{ + "error": { + "code": "BadRequest", + "message": "Resource cannot be updated during provisioning" + } + }"#, + "https://management.azure.com/test", + ); + + assert_eq!(error.code, "REMOTE_RESOURCE_CONFLICT"); + assert!(error.retryable); + assert!(error.message.contains("Azure code: BadRequest")); + assert!(!error + .message + .contains("cannot be updated during provisioning")); + } + + #[test] + fn resource_update_during_provisioning_code_is_retryable_conflict() { + let error = create_azure_http_error_with_context( + StatusCode::BAD_REQUEST, + "CreateOrUpdateEventSubscription", + "Event Grid subscription", + "storage-events", + r#"{ + "error": { + "code": "ResourceCannotBeUpdatedDuringProvisioning", + "message": "The resource is busy" + } + }"#, + "https://management.azure.com/test", + ); + + assert_eq!(error.code, "REMOTE_RESOURCE_CONFLICT"); + assert!(error.retryable); + assert!(error + .message + .contains("Azure code: ResourceCannotBeUpdatedDuringProvisioning")); + assert!(!error.message.contains("The resource is busy")); + } + + #[test] + fn access_and_not_found_errors_retain_safe_azure_codes() { + const RESPONSE_SECRET: &str = "AZURE_RESPONSE_SECRET_0123456789"; + for (status, expected_classification, azure_code) in [ + ( + StatusCode::UNAUTHORIZED, + "REMOTE_ACCESS_DENIED", + "AuthenticationFailed", + ), + ( + StatusCode::FORBIDDEN, + "REMOTE_ACCESS_DENIED", + "AuthorizationFailed", + ), + ( + StatusCode::NOT_FOUND, + "REMOTE_RESOURCE_NOT_FOUND", + "ResourceNotFound", + ), + ] { + let body = + format!(r#"{{"error":{{"code":"{azure_code}","message":"{RESPONSE_SECRET}"}}}}"#); + let error = create_azure_http_error_with_context( + status, + "GetResource", + "Resource", + "safe-resource", + &body, + "https://management.azure.com/safe-resource", + ); + let serialized = serde_json::to_string(&error).unwrap(); + + assert_eq!(error.code, expected_classification); + assert!(serialized.contains(azure_code)); + assert!(!serialized.contains(RESPONSE_SECRET)); + } + } + + #[test] + fn waking_environment_keeps_only_the_safe_retry_marker() { + const RESPONSE_SECRET: &str = "AZURE_WAKE_RESPONSE_SECRET_0123456789"; + let body = format!( + r#"{{"error":{{"code":"BadRequest","message":"Environment is stopped due to a long period of inactivity. {RESPONSE_SECRET}"}}}}"# + ); + let error = create_azure_http_error_with_context( + StatusCode::BAD_REQUEST, + "UpdateContainerApp", + "Container App", + "safe-app", + &body, + "https://management.azure.com/safe-app", + ); + let serialized = serde_json::to_string(&error).unwrap(); + + assert_eq!(error.code, "REMOTE_RESOURCE_CONFLICT"); + assert!(error.retryable); + assert!(serialized.contains("ContainerAppEnvironmentDisabled")); + assert!(!serialized.contains(RESPONSE_SECRET)); + assert!(!serialized.contains("long period of inactivity")); + } + + #[test] + fn role_assignment_conflict_keeps_existing_marker_and_uuid() { + const CONFLICT_ID: &str = "7f2857d5-2798-47bb-a730-1638bb64e9c7"; + const RESPONSE_SECRET: &str = "ROLE_ASSIGNMENT_RESPONSE_SECRET_0123456789"; + let body = format!( + r#"{{"error":{{"code":"RoleAssignmentExists","message":"Assignment {CONFLICT_ID} already exists. {RESPONSE_SECRET}"}}}}"# + ); + let error = create_azure_http_error_with_context( + StatusCode::CONFLICT, + "CreateRoleAssignment", + "Role Assignment", + "safe-assignment", + &body, + "https://management.azure.com/safe-assignment", + ); + let serialized = serde_json::to_string(&error).unwrap(); + + assert_eq!(error.code, "REMOTE_RESOURCE_CONFLICT"); + assert!(serialized.contains("Role assignment already exists")); + assert!(serialized.contains("Azure code: RoleAssignmentExists")); + assert!(serialized.contains(CONFLICT_ID)); + assert!(!serialized.contains(RESPONSE_SECRET)); + } + + #[test] + fn unsafe_provider_error_codes_are_not_retained() { + const UNSAFE_CODE: &str = "secret code with whitespace"; + let body = + format!(r#"{{"error":{{"code":"{UNSAFE_CODE}","message":"provider message"}}}}"#); + let error = create_azure_http_error_with_context( + StatusCode::BAD_REQUEST, + "Create", + "Resource", + "safe-resource", + &body, + "https://management.azure.com/safe-resource", + ); + let serialized = serde_json::to_string(&error).unwrap(); + + assert!(serialized.contains("Azure code: unclassified")); + assert!(!serialized.contains(UNSAFE_CODE)); + assert!(!serialized.contains("provider message")); + } + + #[test] + fn azure_sources_never_store_http_bodies_in_errors() { + fn visit(directory: &std::path::Path, rust_sources: &mut Vec) { + for entry in std::fs::read_dir(directory).unwrap() { + let path = entry.unwrap().path(); + if path.is_dir() { + visit(&path, rust_sources); + } else if path.extension().is_some_and(|extension| extension == "rs") { + rust_sources.push(path); + } + } + } + + let mut rust_sources = Vec::new(); + visit( + &std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src/azure"), + &mut rust_sources, + ); + let request_body_pattern = ["http_request_text:", "Some"].join(" "); + let response_body_pattern = ["http_response_text:", "Some"].join(" "); + + for path in rust_sources { + let source = std::fs::read_to_string(&path).unwrap(); + assert!( + !source.contains(&request_body_pattern), + "{} retains an HTTP request body in an error", + path.display() + ); + assert!( + !source.contains(&response_body_pattern), + "{} retains an HTTP response body in an error", + path.display() + ); + } + } +} diff --git a/crates/alien-azure-clients/src/azure/event_grid.rs b/crates/alien-azure-clients/src/azure/event_grid.rs index 4bb86335b..7c02f44f7 100644 --- a/crates/alien-azure-clients/src/azure/event_grid.rs +++ b/crates/alien-azure-clients/src/azure/event_grid.rs @@ -121,14 +121,11 @@ impl EventGridApi for AzureEventGridClient { serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Event Grid CreateOrUpdateEventSubscription: JSON parse error. Body: {}", - response_body - ), + message: "Event Grid CreateOrUpdateEventSubscription: JSON parse error".to_string(), url, http_status: response_status, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, }) } @@ -166,14 +163,11 @@ impl EventGridApi for AzureEventGridClient { serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Event Grid GetEventSubscription: JSON parse error. Body: {}", - response_body - ), + message: "Event Grid GetEventSubscription: JSON parse error".to_string(), url, http_status: response_status, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, }) } diff --git a/crates/alien-azure-clients/src/azure/keyvault.rs b/crates/alien-azure-clients/src/azure/keyvault.rs index 78f094b26..a3366c174 100644 --- a/crates/alien-azure-clients/src/azure/keyvault.rs +++ b/crates/alien-azure-clients/src/azure/keyvault.rs @@ -312,14 +312,11 @@ impl KeyVaultManagementApi for AzureKeyVaultManagementClient { let vault: Vault = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure CreateOrUpdateVault: JSON parse error. Body: {}", - response_body - ), + message: "Azure CreateOrUpdateVault: JSON parse error".to_string(), url: url.to_string(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(vault) @@ -391,11 +388,11 @@ impl KeyVaultManagementApi for AzureKeyVaultManagementClient { let vault: Vault = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!("Azure GetVault: JSON parse error. Body: {}", response_body), + message: "Azure GetVault: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(vault) @@ -455,14 +452,11 @@ impl KeyVaultManagementApi for AzureKeyVaultManagementClient { let vault: Vault = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Azure UpdateVault: JSON parse error. Body: {}", - response_body - ), + message: "Azure UpdateVault: JSON parse error".to_string(), url: url.to_string(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(vault) diff --git a/crates/alien-azure-clients/src/azure/load_balancers.rs b/crates/alien-azure-clients/src/azure/load_balancers.rs index 2584fb487..944c94cc1 100644 --- a/crates/alien-azure-clients/src/azure/load_balancers.rs +++ b/crates/alien-azure-clients/src/azure/load_balancers.rs @@ -182,7 +182,7 @@ impl LoadBalancerApi for AzureLoadBalancerClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; diff --git a/crates/alien-azure-clients/src/azure/long_running_operation.rs b/crates/alien-azure-clients/src/azure/long_running_operation.rs index 79e0c6447..64d6aa585 100644 --- a/crates/alien-azure-clients/src/azure/long_running_operation.rs +++ b/crates/alien-azure-clients/src/azure/long_running_operation.rs @@ -1,4 +1,7 @@ -use crate::azure::common::{AzureClientBase, AzureRequestBuilder}; +use crate::azure::common::{ + create_azure_http_error_with_context, AzureClientBase, AzureRequestBuilder, +}; +use crate::azure::error::{safe_http_response_context, sanitized_diagnostic_url}; use crate::azure::token_cache::AzureTokenCache; use alien_client_core::{ErrorData, Result}; @@ -27,6 +30,47 @@ struct AsyncOperationStatus { error: Option, } +fn safe_async_operation_error_code(error: Option<&serde_json::Value>) -> Option<&str> { + error + .and_then(|error| error.get("code")) + .and_then(serde_json::Value::as_str) + .filter(|code| { + !code.is_empty() + && code.len() <= 128 + && code.bytes().all(|character| { + character.is_ascii_alphanumeric() || matches!(character, b'.' | b'_' | b'-') + }) + }) +} + +fn parse_location_result_response( + status: StatusCode, + body: &str, + location_url: &str, + operation_name: &str, + resource_name: &str, +) -> Result { + let diagnostic_url = sanitized_diagnostic_url(location_url); + if !status.is_success() { + return Err(create_azure_http_error_with_context( + status, + operation_name, + "LongRunningOperation", + resource_name, + body, + &diagnostic_url, + )); + } + + serde_json::from_str(body) + .into_alien_error() + .context(safe_http_response_context( + format!("Azure {operation_name}: failed to parse result from Location URL"), + diagnostic_url, + status, + )) +} + // ----------------------------------------------------------------------------- // Long-running operation data structure // ----------------------------------------------------------------------------- @@ -222,6 +266,7 @@ impl LongRunningOperationClient { .client .execute(signed) .await + .map_err(reqwest::Error::without_url) .into_alien_error() .context(ErrorData::HttpRequestFailed { message: format!( @@ -233,6 +278,7 @@ impl LongRunningOperationClient { let body = resp .text() .await + .map_err(reqwest::Error::without_url) .into_alien_error() .context(ErrorData::HttpRequestFailed { message: format!( @@ -240,22 +286,7 @@ impl LongRunningOperationClient { ), })?; - if !status.is_success() { - return Err(AlienError::new(ErrorData::GenericError { - message: format!( - "Azure {operation_name} for '{resource_name}': \ - Location URL returned {status}. Body: {body}" - ), - })); - } - - serde_json::from_str(&body) - .into_alien_error() - .context(ErrorData::SerializationError { - message: format!( - "Azure {operation_name}: failed to parse result from Location URL. Body: {body}" - ), - }) + parse_location_result_response(status, &body, location_url, operation_name, resource_name) } } @@ -268,7 +299,8 @@ impl LongRunningOperationApi for LongRunningOperationClient { operation_name: &str, resource_name: &str, ) -> Result> { - debug!(operation = %operation_name, resource = %resource_name, url = %operation.url, "Checking Azure async operation status"); + let diagnostic_url = sanitized_diagnostic_url(&operation.url); + debug!(operation = %operation_name, resource = %resource_name, url = %diagnostic_url, "Checking Azure async operation status"); let bearer_token = self .token_cache .get_bearer_token_with_scope("https://management.azure.com/.default") @@ -290,15 +322,14 @@ impl LongRunningOperationApi for LongRunningOperationClient { match status { StatusCode::OK => { // Got 200 OK - need to check the JSON status field - let body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: format!( - "Azure {operation_name}: failed to read response body" - ), - })?; + let body = resp + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: format!("Azure {operation_name}: failed to read response body"), + })?; // Try to parse as async operation status first if let Ok(operation_status) = serde_json::from_str::(&body) { @@ -310,17 +341,17 @@ impl LongRunningOperationApi for LongRunningOperationClient { Ok(Some(body)) } "failed" | "canceled" => { - // Operation failed or was canceled - let error_msg = if let Some(error) = &operation_status.error { - format!("Operation {}: {}", operation_status.status, error) - } else { - format!("Operation {}", operation_status.status) - }; - warn!(operation = %operation_name, resource = %resource_name, status = %operation_status.status, error = ?operation_status.error, "❌ Azure async operation failed"); + // Provider messages can reflect request payloads. Preserve only a + // tightly validated error code for diagnostics. + let terminal_status = operation_status.status.to_ascii_lowercase(); + let error_code = + safe_async_operation_error_code(operation_status.error.as_ref()) + .unwrap_or("unclassified"); + warn!(operation = %operation_name, resource = %resource_name, status = %terminal_status, azure_error_code = %error_code, "❌ Azure async operation failed"); Err(AlienError::new(ErrorData::GenericError { message: format!( - "Azure {operation_name} for '{resource_name}' {}: {error_msg}", - operation_status.status.to_lowercase() + "Azure {operation_name} for '{resource_name}' \ + {terminal_status} (Azure code: {error_code})" ), })) } @@ -339,13 +370,12 @@ impl LongRunningOperationApi for LongRunningOperationClient { // This is likely a resource response (e.g., storage account), check for provisioningState let parsed_json: serde_json::Value = serde_json::from_str(&body) - .into_alien_error().context(ErrorData::HttpResponseError { - message: format!("Azure {operation_name}: failed to parse response JSON. Body: {body}"), - url: operation.url.clone(), - http_status: 200, - http_request_text: None, - http_response_text: Some(body.clone()), - })?; + .into_alien_error() + .context(safe_http_response_context( + format!("Azure {operation_name}: failed to parse response JSON"), + &diagnostic_url, + StatusCode::OK, + ))?; // Look for provisioningState in properties if let Some(properties) = parsed_json.get("properties") { @@ -405,7 +435,6 @@ impl LongRunningOperationApi for LongRunningOperationClient { resource_name, &body, &operation.url, - None, // GET request has no body )) } } @@ -419,7 +448,8 @@ impl LongRunningOperationApi for LongRunningOperationClient { resource_name: &str, ) -> Result { let default_delay = Duration::from_secs(5); - info!(operation = %operation_name, resource = %resource_name, url = %operation.url, "🚀 Starting Azure async operation polling"); + let diagnostic_url = sanitized_diagnostic_url(&operation.url); + info!(operation = %operation_name, resource = %resource_name, url = %diagnostic_url, "🚀 Starting Azure async operation polling"); loop { match self @@ -494,3 +524,167 @@ impl OperationResult { } } } + +#[cfg(test)] +mod tests { + use std::collections::HashMap; + use std::io::Write; + use std::sync::{Arc, Mutex}; + + use httpmock::{Method::GET, MockServer}; + + use super::*; + use crate::azure::{AzureClientConfig, AzureClientConfigExt, ServiceOverrides}; + + struct CapturedLogWriter(Arc>>); + + impl Write for CapturedLogWriter { + fn write(&mut self, buffer: &[u8]) -> std::io::Result { + self.0.lock().unwrap().extend_from_slice(buffer); + Ok(buffer.len()) + } + + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } + } + + fn test_client(server: &MockServer) -> LongRunningOperationClient { + let config = AzureClientConfig::mock().with_service_overrides(ServiceOverrides { + endpoints: HashMap::from([("management".to_string(), server.base_url())]), + }); + LongRunningOperationClient::new(Client::new(), AzureTokenCache::new(config)) + } + + #[test] + fn location_failures_keep_safe_context_without_body_or_query_values() { + const RESPONSE_SECRET: &str = "LRO_RESPONSE_SECRET_0123456789"; + const QUERY_SECRET: &str = "LRO_QUERY_SECRET_0123456789"; + const USER_SECRET: &str = "LRO_USER_SECRET_0123456789"; + const PASSWORD_SECRET: &str = "LRO_PASSWORD_SECRET_0123456789"; + let body = format!( + r#"{{"error":{{"code":"AuthorizationFailed","message":"{RESPONSE_SECRET}"}}}}"# + ); + let location_url = format!( + "https://{USER_SECRET}:{PASSWORD_SECRET}@management.azure.com/operations/operation-id?sig={QUERY_SECRET}" + ); + + let error = parse_location_result_response::( + StatusCode::FORBIDDEN, + &body, + &location_url, + "CreateWidget", + "widget", + ) + .expect_err("forbidden Location response should fail"); + let serialized = serde_json::to_string(&error).unwrap(); + + assert_eq!(error.code, "REMOTE_ACCESS_DENIED"); + assert!(serialized.contains("AuthorizationFailed")); + assert!(serialized.contains("https://management.azure.com/operations/operation-id")); + assert!(!serialized.contains(RESPONSE_SECRET)); + assert!(!serialized.contains(QUERY_SECRET)); + assert!(!serialized.contains(USER_SECRET)); + assert!(!serialized.contains(PASSWORD_SECRET)); + } + + #[test] + fn malformed_location_result_does_not_retain_query_values() { + const QUERY_SECRET: &str = "LRO_PARSE_QUERY_SECRET_0123456789"; + let location_url = + format!("https://management.azure.com/operations/operation-id?sig={QUERY_SECRET}"); + + let error = parse_location_result_response::( + StatusCode::OK, + "not-json", + &location_url, + "CreateWidget", + "widget", + ) + .expect_err("malformed Location result should fail"); + let serialized = serde_json::to_string(&error).unwrap(); + + assert!(serialized.contains("https://management.azure.com/operations/operation-id")); + assert!(!serialized.contains(QUERY_SECRET)); + } + + #[tokio::test] + async fn failed_poll_retains_only_safe_code_in_error_and_logs() { + const RESPONSE_SECRET: &str = "LRO_TERMINAL_RESPONSE_SECRET_0123456789"; + let server = MockServer::start_async().await; + let failed_poll = server + .mock_async(|when, then| { + when.method(GET).path("/failed-operation"); + then.status(200).json_body(serde_json::json!({ + "status": "Failed", + "error": { + "code": "OperationFailed", + "message": RESPONSE_SECRET + } + })); + }) + .await; + let logs = Arc::new(Mutex::new(Vec::new())); + let captured_logs = Arc::clone(&logs); + let subscriber = tracing_subscriber::fmt() + .with_ansi(false) + .without_time() + .with_writer(move || CapturedLogWriter(Arc::clone(&captured_logs))) + .finish(); + let _subscriber_guard = tracing::subscriber::set_default(subscriber); + let client = test_client(&server); + let operation = LongRunningOperation { + url: format!("{}/failed-operation", server.base_url()), + retry_after: None, + location_url: None, + }; + + let error = client + .check_status(&operation, "CreateWidget", "widget") + .await + .expect_err("terminal failed poll should fail"); + failed_poll.assert_async().await; + let serialized = serde_json::to_string(&error).unwrap(); + let captured = String::from_utf8(logs.lock().unwrap().clone()).unwrap(); + + assert!(serialized.contains("OperationFailed")); + assert!(captured.contains("OperationFailed")); + assert!(!serialized.contains(RESPONSE_SECRET)); + assert!(!captured.contains(RESPONSE_SECRET)); + } + + #[tokio::test] + async fn failed_poll_rejects_unsafe_error_code() { + const UNSAFE_CODE: &str = "UNSAFE LRO CODE WITH SPACES"; + let server = MockServer::start_async().await; + let failed_poll = server + .mock_async(|when, then| { + when.method(GET).path("/unsafe-code-operation"); + then.status(200).json_body(serde_json::json!({ + "status": "Failed", + "error": { + "code": UNSAFE_CODE, + "message": "provider detail" + } + })); + }) + .await; + let client = test_client(&server); + let operation = LongRunningOperation { + url: format!("{}/unsafe-code-operation", server.base_url()), + retry_after: None, + location_url: None, + }; + + let error = client + .check_status(&operation, "CreateWidget", "widget") + .await + .expect_err("terminal failed poll should fail"); + failed_poll.assert_async().await; + let serialized = serde_json::to_string(&error).unwrap(); + + assert!(serialized.contains("Azure code: unclassified")); + assert!(!serialized.contains(UNSAFE_CODE)); + assert!(!serialized.contains("provider detail")); + } +} diff --git a/crates/alien-azure-clients/src/azure/managed_clusters.rs b/crates/alien-azure-clients/src/azure/managed_clusters.rs index cf84348f2..f2e666ea3 100644 --- a/crates/alien-azure-clients/src/azure/managed_clusters.rs +++ b/crates/alien-azure-clients/src/azure/managed_clusters.rs @@ -169,7 +169,7 @@ impl ManagedClustersApi for AzureManagedClustersClient { url: self.managed_cluster_url(resource_group_name, managed_cluster_name), http_status: status, http_request_text: None, - http_response_text: Some(body), + http_response_text: None, }) } @@ -270,7 +270,7 @@ impl AzureManagedClustersClient { url, http_status: status, http_request_text: None, - http_response_text: Some(body), + http_response_text: None, }) } } diff --git a/crates/alien-azure-clients/src/azure/managed_identity.rs b/crates/alien-azure-clients/src/azure/managed_identity.rs index 77f17678d..5f3d49f5b 100644 --- a/crates/alien-azure-clients/src/azure/managed_identity.rs +++ b/crates/alien-azure-clients/src/azure/managed_identity.rs @@ -173,7 +173,6 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { }, )?; - let request_body = body.clone(); let builder = AzureRequestBuilder::new(Method::PUT, url.clone()) .content_type_json() .content_length(&body) @@ -197,7 +196,7 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(request_body.clone()), + http_request_text: None, http_response_text: None, })?; @@ -209,8 +208,8 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), url: url, http_status: 200, - http_request_text: Some(request_body), - http_response_text: Some(body), + http_request_text: None, + http_response_text: None, }, )?; @@ -288,7 +287,7 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { url: url, http_status: 200, http_request_text: None, - http_response_text: Some(body), + http_response_text: None, }, )?; @@ -318,7 +317,6 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), })?; - let request_body = body.clone(); let builder = AzureRequestBuilder::new(Method::PATCH, url.clone()) .content_type_json() .content_length(&body) @@ -342,7 +340,7 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(request_body.clone()), + http_request_text: None, http_response_text: None, })?; @@ -354,8 +352,8 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), url: url, http_status: 200, - http_request_text: Some(request_body), - http_response_text: Some(body), + http_request_text: None, + http_response_text: None, }, )?; @@ -389,7 +387,6 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), })?; - let request_body = body.clone(); let builder = AzureRequestBuilder::new(Method::PUT, url.clone()) .content_type_json() .content_length(&body) @@ -413,7 +410,7 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(request_body.clone()), + http_request_text: None, http_response_text: None, })?; @@ -426,8 +423,8 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { ), url, http_status: 200, - http_request_text: Some(request_body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(credential) @@ -484,7 +481,7 @@ impl ManagedIdentityApi for AzureManagedIdentityClient { url, http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(credential) diff --git a/crates/alien-azure-clients/src/azure/mod.rs b/crates/alien-azure-clients/src/azure/mod.rs index 06cf6a6f6..96f4a51ab 100644 --- a/crates/alien-azure-clients/src/azure/mod.rs +++ b/crates/alien-azure-clients/src/azure/mod.rs @@ -1,5 +1,7 @@ use alien_client_core::{ErrorData, Result}; use alien_error::{AlienError, Context, IntoAlienError}; +use base64::Engine; +use chrono::{DateTime, Utc}; use serde::Deserialize; use std::collections::HashMap; @@ -17,6 +19,7 @@ pub mod compute; pub mod container_apps; pub mod containerregistry; pub mod disks; +pub(crate) mod error; pub mod event_grid; pub mod flexible_server; pub mod keyvault; @@ -35,6 +38,9 @@ pub mod service_bus; pub mod storage_accounts; pub mod tables; pub mod token_cache; +mod user_delegation_sas; + +pub use user_delegation_sas::AzureContainerSas; const AZURE_IMDS_ENDPOINT: &str = "http://169.254.169.254/metadata/identity/oauth2/token"; @@ -101,15 +107,11 @@ async fn get_workload_identity_token( message: "Failed to request Azure access token using workload identity".to_string(), })?; - if !response.status().is_success() { - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); + let status = response.status(); + if !status.is_success() { return Err(AlienError::new(ErrorData::AuthenticationError { message: format!( - "Failed to get workload identity access token: {}", - error_text + "Failed to get workload identity access token: Azure returned HTTP {status}" ), })); } @@ -145,7 +147,9 @@ async fn get_impersonated_token( // with the specified scope and client context. match &config.credentials { - AzureCredentials::AccessToken { .. } | AzureCredentials::ScopedAccessTokens { .. } => { + AzureCredentials::AccessToken { .. } + | AzureCredentials::ScopedAccessTokens { .. } + | AzureCredentials::SasToken { .. } => { // If we already have an access token, we can't directly impersonate // In practice, you'd need to use Azure AD's on-behalf-of flow Err(AlienError::new(ErrorData::InvalidInput { @@ -202,15 +206,11 @@ async fn get_impersonated_token( message: "Failed to exchange OIDC token for impersonation".to_string(), })?; - if !response.status().is_success() { - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); + let status = response.status(); + if !status.is_success() { return Err(AlienError::new(ErrorData::AuthenticationError { message: format!( - "OIDC token exchange for impersonation failed: {}", - error_text + "OIDC token exchange for impersonation failed: Azure returned HTTP {status}" ), })); } @@ -277,13 +277,12 @@ async fn get_impersonated_token( message: "Failed to request Azure access token for impersonation".to_string(), })?; - if !response.status().is_success() { - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); + let status = response.status(); + if !status.is_success() { return Err(AlienError::new(ErrorData::AuthenticationError { - message: format!("Failed to get impersonated access token: {}", error_text), + message: format!( + "Failed to get impersonated access token: Azure returned HTTP {status}" + ), })); } @@ -306,11 +305,13 @@ async fn get_impersonated_token( } } -/// Extract the caller's object ID (oid) from an Azure JWT access token. -/// Azure access tokens are JWTs — we decode the payload to read the `oid` claim. -pub fn extract_oid_from_token(token: &str) -> Result { - use base64::Engine; +#[derive(Deserialize)] +struct AzureAccessTokenClaims { + oid: Option, + exp: Option, +} +fn decode_access_token_claims(token: &str) -> Result { let parts: Vec<&str> = token.split('.').collect(); if parts.len() != 3 { return Err(AlienError::new(ErrorData::InvalidInput { @@ -328,17 +329,18 @@ pub fn extract_oid_from_token(token: &str) -> Result { }) })?; - #[derive(Deserialize)] - struct JwtClaims { - oid: Option, - } - - let claims: JwtClaims = serde_json::from_slice(&payload_bytes).map_err(|e| { + serde_json::from_slice(&payload_bytes).map_err(|error| { AlienError::new(ErrorData::InvalidInput { - message: format!("Failed to parse Azure JWT payload: {}", e), + message: format!("Failed to parse Azure JWT payload: {error}"), field_name: None, }) - })?; + }) +} + +/// Extract the caller's object ID (oid) from an Azure JWT access token. +/// Azure access tokens are JWTs — we decode the payload to read the `oid` claim. +pub fn extract_oid_from_token(token: &str) -> Result { + let claims = decode_access_token_claims(token)?; claims.oid.ok_or_else(|| { AlienError::new(ErrorData::InvalidInput { @@ -348,6 +350,38 @@ pub fn extract_oid_from_token(token: &str) -> Result { }) } +fn extract_expiry_from_token(token: &str) -> Result> { + let claims = decode_access_token_claims(token)?; + let expires_at = claims.exp.ok_or_else(|| { + AlienError::new(ErrorData::InvalidInput { + message: "Azure JWT does not contain 'exp' claim".to_string(), + field_name: None, + }) + })?; + + DateTime::from_timestamp(expires_at, 0).ok_or_else(|| { + AlienError::new(ErrorData::InvalidInput { + message: "Azure JWT contains an invalid 'exp' claim".to_string(), + field_name: None, + }) + }) +} + +/// A bearer token paired with the authoritative expiry from its JWT claims. +pub struct ExpiringAccessToken { + pub token: String, + pub expires_at: DateTime, +} + +impl std::fmt::Debug for ExpiringAccessToken { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ExpiringAccessToken") + .field("token", &"[REDACTED]") + .field("expires_at", &self.expires_at) + .finish() + } +} + /// Trait for Azure platform configuration operations #[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)] @@ -368,6 +402,18 @@ pub trait AzureClientConfigExt { /// Gets a bearer token for Azure API authentication with a specific scope async fn get_bearer_token_with_scope(&self, scope: &str) -> Result; + /// Gets a scoped bearer token together with its authoritative JWT expiry. + async fn get_bearer_token_with_expiry(&self, scope: &str) -> Result; + + /// Creates a short-lived user-delegation SAS confined to one Blob container. + async fn create_container_user_delegation_sas( + &self, + account_name: &str, + container_name: &str, + permissions: &str, + expires_at: DateTime, + ) -> Result; + /// Gets the Azure resource management endpoint URL fn management_endpoint(&self) -> &str; @@ -537,7 +583,8 @@ impl AzureClientConfigExt for AzureClientConfig { }, AzureCredentials::ServicePrincipal { .. } | AzureCredentials::AccessToken { .. } - | AzureCredentials::ScopedAccessTokens { .. } => { + | AzureCredentials::ScopedAccessTokens { .. } + | AzureCredentials::SasToken { .. } => { let token = get_impersonated_token(self, &config).await?; AzureCredentials::AccessToken { token } } @@ -564,6 +611,12 @@ impl AzureClientConfigExt for AzureClientConfig { /// Gets a bearer token for Azure API authentication with a specific scope async fn get_bearer_token_with_scope(&self, scope: &str) -> Result { match &self.credentials { + AzureCredentials::SasToken { .. } => { + Err(AlienError::new(ErrorData::AuthenticationError { + message: "An Azure Storage SAS cannot be used as an OAuth bearer token" + .to_string(), + })) + } AzureCredentials::AccessToken { token } => Ok(token.clone()), AzureCredentials::ScopedAccessTokens { tokens } => tokens .get(scope) @@ -639,8 +692,8 @@ impl AzureClientConfigExt for AzureClientConfig { if !status.is_success() { return Err(AlienError::new(ErrorData::AuthenticationError { message: format!( - "Failed to get Azure service principal token for scope '{}': HTTP {}: {}", - scope, status, response_text + "Failed to get Azure service principal token for scope '{scope}': \ + HTTP {status}" ), })); } @@ -649,8 +702,8 @@ impl AzureClientConfigExt for AzureClientConfig { .into_alien_error() .context(ErrorData::AuthenticationError { message: format!( - "Failed to parse Azure service principal token response for scope '{}': {}", - scope, response_text + "Failed to parse Azure service principal token response for scope \ + '{scope}'" ), })?; @@ -743,8 +796,8 @@ impl AzureClientConfigExt for AzureClientConfig { if !status.is_success() { return Err(AlienError::new(ErrorData::AuthenticationError { message: format!( - "Failed to get Azure VM managed identity token for resource '{}': HTTP {}: {}", - resource, status, response_text + "Failed to get Azure VM managed identity token for resource \ + '{resource}': HTTP {status}" ), })); } @@ -753,8 +806,8 @@ impl AzureClientConfigExt for AzureClientConfig { .into_alien_error() .context(ErrorData::AuthenticationError { message: format!( - "Failed to parse Azure VM managed identity token response for resource '{}': {}", - resource, response_text + "Failed to parse Azure VM managed identity token response for resource \ + '{resource}'" ), })?; @@ -763,6 +816,29 @@ impl AzureClientConfigExt for AzureClientConfig { } } + async fn get_bearer_token_with_expiry(&self, scope: &str) -> Result { + let token = self.get_bearer_token_with_scope(scope).await?; + let expires_at = extract_expiry_from_token(&token)?; + Ok(ExpiringAccessToken { token, expires_at }) + } + + async fn create_container_user_delegation_sas( + &self, + account_name: &str, + container_name: &str, + permissions: &str, + expires_at: DateTime, + ) -> Result { + user_delegation_sas::create_container_user_delegation_sas( + self, + account_name, + container_name, + permissions, + expires_at, + ) + .await + } + /// Gets the Azure resource management endpoint URL fn management_endpoint(&self) -> &str { if let Some(override_url) = self.get_service_endpoint("management") { @@ -831,6 +907,8 @@ impl AzureClientConfigExt for AzureClientConfig { #[cfg(test)] mod tests { + use base64::Engine; + use super::*; fn scoped_config() -> AzureClientConfig { @@ -865,4 +943,18 @@ mod tests { .expect_err("a token for another audience must not be reused"); assert_eq!(error.code, "AUTHENTICATION_ERROR"); } + + #[test] + fn azure_access_token_expiry_comes_from_the_jwt_claim() { + let payload = base64::engine::general_purpose::URL_SAFE_NO_PAD + .encode(serde_json::json!({ "exp": 1_893_456_000 }).to_string()); + let token = format!("e30.{payload}.signature"); + + assert_eq!( + extract_expiry_from_token(&token) + .expect("valid exp claim") + .timestamp(), + 1_893_456_000 + ); + } } diff --git a/crates/alien-azure-clients/src/azure/monitor.rs b/crates/alien-azure-clients/src/azure/monitor.rs index d63590db3..a94307ef1 100644 --- a/crates/alien-azure-clients/src/azure/monitor.rs +++ b/crates/alien-azure-clients/src/azure/monitor.rs @@ -1,6 +1,7 @@ use crate::azure::common::{AzureClientBase, AzureRequestBuilder}; +use crate::azure::error::{safe_http_response_context, sanitized_diagnostic_url}; use crate::azure::token_cache::AzureTokenCache; -use alien_client_core::{ErrorData, Result}; +use alien_client_core::Result; use alien_error::{Context, IntoAlienError}; use reqwest::{Client, Method}; use serde::{Deserialize, Serialize}; @@ -58,29 +59,26 @@ impl MonitorApi for AzureMonitorClient { .base .execute_request(signed_req, "monitor_list_metrics", &request.resource_uri) .await?; - let status = response.status().as_u16(); - let response_body = - response - .text() - .await - .into_alien_error() - .context(ErrorData::HttpResponseError { - message: "Failed to read Azure Monitor metrics response body".to_string(), - url: url.clone(), - http_status: status, - http_request_text: None, - http_response_text: None, - })?; + let status = response.status(); + let diagnostic_url = sanitized_diagnostic_url(&url); + let response_body = response + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(safe_http_response_context( + "Failed to read Azure Monitor metrics response body", + diagnostic_url.clone(), + status, + ))?; serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: "Failed to deserialize Azure Monitor metrics response".to_string(), - url, - http_status: status, - http_request_text: None, - http_response_text: Some(response_body), - }) + .context(safe_http_response_context( + "Failed to deserialize Azure Monitor metrics response", + diagnostic_url, + status, + )) } } @@ -277,4 +275,22 @@ mod tests { Some(42.0) ); } + + #[test] + fn monitor_diagnostic_url_redacts_query_and_userinfo() { + const USER: &str = "MONITOR_USER_SECRET_0123456789"; + const PASSWORD: &str = "MONITOR_PASSWORD_SECRET_0123456789"; + const FILTER: &str = "MONITOR_FILTER_SECRET_0123456789"; + let diagnostic_url = sanitized_diagnostic_url(&format!( + "https://{USER}:{PASSWORD}@management.azure.com/resource/providers/Microsoft.Insights/metrics?api-version=2023-10-01&$filter={FILTER}" + )); + + assert_eq!( + diagnostic_url, + "https://management.azure.com/resource/providers/Microsoft.Insights/metrics" + ); + assert!(!diagnostic_url.contains(USER)); + assert!(!diagnostic_url.contains(PASSWORD)); + assert!(!diagnostic_url.contains(FILTER)); + } } diff --git a/crates/alien-azure-clients/src/azure/network.rs b/crates/alien-azure-clients/src/azure/network.rs index f3b4ccc03..09ec76813 100644 --- a/crates/alien-azure-clients/src/azure/network.rs +++ b/crates/alien-azure-clients/src/azure/network.rs @@ -324,7 +324,7 @@ impl NetworkApi for AzureNetworkClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -448,7 +448,7 @@ impl NetworkApi for AzureNetworkClient { message: format!("Azure GetSubnet: JSON parse error for {}", subnet_name), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -581,7 +581,7 @@ impl NetworkApi for AzureNetworkClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -714,7 +714,7 @@ impl NetworkApi for AzureNetworkClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; @@ -851,7 +851,7 @@ impl NetworkApi for AzureNetworkClient { ), url, http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, })?; diff --git a/crates/alien-azure-clients/src/azure/resource_graph.rs b/crates/alien-azure-clients/src/azure/resource_graph.rs index bb8667524..ab3b1d352 100644 --- a/crates/alien-azure-clients/src/azure/resource_graph.rs +++ b/crates/alien-azure-clients/src/azure/resource_graph.rs @@ -85,7 +85,7 @@ impl ResourceGraphApi for AzureResourceGraphClient { message: "Failed to read Azure Resource Graph response body".to_string(), url: url.clone(), http_status: status, - http_request_text: Some(body), + http_request_text: None, http_response_text: None, })?; @@ -96,7 +96,7 @@ impl ResourceGraphApi for AzureResourceGraphClient { url, http_status: status, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, }) } } diff --git a/crates/alien-azure-clients/src/azure/resource_skus.rs b/crates/alien-azure-clients/src/azure/resource_skus.rs index c3fa94d27..b67ab5f73 100644 --- a/crates/alien-azure-clients/src/azure/resource_skus.rs +++ b/crates/alien-azure-clients/src/azure/resource_skus.rs @@ -235,7 +235,7 @@ impl ResourceSkusApi for AzureResourceSkusClient { message: format!("Azure ListResourceSkus: JSON parse error for {location}"), url, http_status: status, - http_response_text: Some(body), + http_response_text: None, http_request_text: None, }, )?; diff --git a/crates/alien-azure-clients/src/azure/resources.rs b/crates/alien-azure-clients/src/azure/resources.rs index 861de5c2c..1bc7e22bc 100644 --- a/crates/alien-azure-clients/src/azure/resources.rs +++ b/crates/alien-azure-clients/src/azure/resources.rs @@ -7,7 +7,7 @@ use alien_client_core::{ErrorData, Result}; use alien_error::{Context, IntoAlienError}; use reqwest::{Client, Method}; -use tracing::{debug, trace}; +use tracing::debug; #[cfg(feature = "test-utils")] use mockall::automock; @@ -139,12 +139,10 @@ impl ResourcesApi for AzureResourcesClient { ), url: url.clone(), http_status: status, - http_request_text: Some(body.clone()), + http_request_text: None, http_response_text: None, })?; - trace!("Resource group response: {}", response_text); - let resource_group: ResourceGroup = serde_json::from_str(&response_text) .into_alien_error() .context(ErrorData::HttpResponseError { @@ -154,8 +152,8 @@ impl ResourcesApi for AzureResourcesClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_text), + http_request_text: None, + http_response_text: None, })?; Ok(resource_group) @@ -265,12 +263,10 @@ impl ResourcesApi for AzureResourcesClient { ), url: url.clone(), http_status: status, - http_request_text: Some(body.clone()), + http_request_text: None, http_response_text: None, })?; - trace!("Resource group update response: {}", response_text); - let resource_group: ResourceGroup = serde_json::from_str(&response_text) .into_alien_error() .context(ErrorData::HttpResponseError { @@ -280,8 +276,8 @@ impl ResourcesApi for AzureResourcesClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_text), + http_request_text: None, + http_response_text: None, })?; Ok(resource_group) @@ -336,8 +332,6 @@ impl ResourcesApi for AzureResourcesClient { http_response_text: None, })?; - trace!("Resource group get response: {}", response_text); - let resource_group: ResourceGroup = serde_json::from_str(&response_text) .into_alien_error() .context(ErrorData::HttpResponseError { @@ -348,7 +342,7 @@ impl ResourcesApi for AzureResourcesClient { url: url.clone(), http_status: 200, http_request_text: None, - http_response_text: Some(response_text), + http_response_text: None, })?; Ok(resource_group) @@ -403,8 +397,6 @@ impl ResourcesApi for AzureResourcesClient { http_response_text: None, })?; - trace!("Provider get response: {}", response_text); - let provider: Provider = serde_json::from_str(&response_text) .into_alien_error() .context(ErrorData::HttpResponseError { @@ -415,7 +407,7 @@ impl ResourcesApi for AzureResourcesClient { url: url.clone(), http_status: status, http_request_text: None, - http_response_text: Some(response_text), + http_response_text: None, })?; Ok(provider) @@ -488,12 +480,10 @@ impl ResourcesApi for AzureResourcesClient { ), url: url.clone(), http_status: status, - http_request_text: Some(body.clone()), + http_request_text: None, http_response_text: None, })?; - trace!("Provider registration response: {}", response_text); - let provider: Provider = serde_json::from_str(&response_text) .into_alien_error() .context(ErrorData::HttpResponseError { @@ -503,8 +493,8 @@ impl ResourcesApi for AzureResourcesClient { ), url: url.clone(), http_status: status, - http_request_text: Some(body), - http_response_text: Some(response_text), + http_request_text: None, + http_response_text: None, })?; Ok(provider) @@ -563,8 +553,6 @@ impl ResourcesApi for AzureResourcesClient { http_response_text: None, })?; - trace!("Provider unregistration response: {}", response_text); - let provider: Provider = serde_json::from_str(&response_text) .into_alien_error() .context(ErrorData::HttpResponseError { @@ -575,7 +563,7 @@ impl ResourcesApi for AzureResourcesClient { url: url.clone(), http_status: status, http_request_text: None, - http_response_text: Some(response_text), + http_response_text: None, })?; Ok(provider) diff --git a/crates/alien-azure-clients/src/azure/service_bus.rs b/crates/alien-azure-clients/src/azure/service_bus.rs index 177c2886f..0ff05c0e1 100644 --- a/crates/alien-azure-clients/src/azure/service_bus.rs +++ b/crates/alien-azure-clients/src/azure/service_bus.rs @@ -1,4 +1,5 @@ use crate::azure::common::{AzureClientBase, AzureRequestBuilder}; +use crate::azure::error::safe_http_response_error; use crate::azure::models::queue::{SbQueue, SbQueueListResult, SbQueueProperties}; use crate::azure::models::queue_namespace::{ SbNamespace, SbNamespaceListResult, SbNamespaceProperties, @@ -7,7 +8,7 @@ use crate::azure::token_cache::AzureTokenCache; use alien_client_core::{ErrorData, Result}; use alien_error::{AlienError, Context, IntoAlienError}; -use reqwest::{Client, Method}; +use reqwest::{Client, Method, StatusCode}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use url::Url; @@ -43,6 +44,41 @@ fn is_standard_header(header_name: &str) -> bool { ) } +fn settlement_http_error( + operation: &str, + status: StatusCode, + request_url: &Url, +) -> AlienError { + let mut diagnostic_url = request_url.clone(); + diagnostic_url.set_query(None); + diagnostic_url.set_fragment(None); + if let Ok(mut segments) = diagnostic_url.path_segments_mut() { + segments.pop_if_empty(); + segments.pop(); + segments.push("redacted-lock-token"); + } + + safe_http_response_error( + format!("Service Bus {operation} failed with status {status}"), + diagnostic_url.to_string(), + status, + ) +} + +async fn send_settlement_request( + request: reqwest::RequestBuilder, + operation: &str, +) -> Result { + request + .send() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: format!("Service Bus {operation}: failed to execute request"), + }) +} + #[cfg(feature = "test-utils")] use mockall::automock; @@ -358,14 +394,11 @@ impl ServiceBusManagementApi for AzureServiceBusManagementClient { let namespace: SbNamespace = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Service Bus CreateOrUpdateNamespace: JSON parse error. Body: {}", - response_body - ), + message: "Service Bus CreateOrUpdateNamespace: JSON parse error".to_string(), url: url.to_string(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(namespace) @@ -411,14 +444,11 @@ impl ServiceBusManagementApi for AzureServiceBusManagementClient { let namespace: SbNamespace = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Service Bus GetNamespace: JSON parse error. Body: {}", - response_body - ), + message: "Service Bus GetNamespace: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(namespace) @@ -469,14 +499,11 @@ impl ServiceBusManagementApi for AzureServiceBusManagementClient { let namespaces: SbNamespaceListResult = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Service Bus ListNamespacesByResourceGroup: JSON parse error. Body: {}", - response_body - ), + message: "Service Bus ListNamespacesByResourceGroup: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(namespaces) @@ -571,14 +598,11 @@ impl ServiceBusManagementApi for AzureServiceBusManagementClient { let queue: SbQueue = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Service Bus CreateOrUpdateQueue: JSON parse error. Body: {}", - response_body - ), + message: "Service Bus CreateOrUpdateQueue: JSON parse error".to_string(), url: url.to_string(), http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(queue) @@ -624,14 +648,11 @@ impl ServiceBusManagementApi for AzureServiceBusManagementClient { let queue: SbQueue = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Service Bus GetQueue: JSON parse error. Body: {}", - response_body - ), + message: "Service Bus GetQueue: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(queue) @@ -676,14 +697,11 @@ impl ServiceBusManagementApi for AzureServiceBusManagementClient { let queues: SbQueueListResult = serde_json::from_str(&response_body) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Service Bus ListQueues: JSON parse error. Body: {}", - response_body - ), + message: "Service Bus ListQueues: JSON parse error".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(response_body), + http_response_text: None, })?; Ok(queues) @@ -825,19 +843,12 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { if !resp.status().is_success() { let status = resp.status(); - let error_text = resp - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "Service Bus SendMessage failed with status {}: {}", - status, error_text - ), + message: format!("Service Bus SendMessage failed with status {status}"), url: url.to_string(), http_status: status.as_u16(), - http_request_text: Some(message.body), - http_response_text: Some(error_text), + http_request_text: None, + http_response_text: None, })); } @@ -889,19 +900,12 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { if !resp.status().is_success() { let status = resp.status(); - let error_text = resp - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "Service Bus ReceiveAndDelete failed with status {}: {}", - status, error_text - ), + message: format!("Service Bus ReceiveAndDelete failed with status {status}"), url: url.to_string(), http_status: status.as_u16(), http_request_text: None, - http_response_text: Some(error_text), + http_response_text: None, })); } @@ -921,14 +925,11 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { let broker_properties: BrokerProperties = serde_json::from_str(broker_props_str) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Failed to parse BrokerProperties header: {}", - broker_props_str - ), + message: "Failed to parse BrokerProperties header".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(broker_props_str.to_string()), + http_response_text: None, })?; Some(broker_properties) } else { @@ -1017,19 +1018,12 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { if !resp.status().is_success() { let status = resp.status(); - let error_text = resp - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "Service Bus PeekLock failed with status {}: {}", - status, error_text - ), + message: format!("Service Bus PeekLock failed with status {status}"), url: url.to_string(), http_status: status.as_u16(), http_request_text: None, - http_response_text: Some(error_text), + http_response_text: None, })); } @@ -1049,14 +1043,11 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { let broker_properties: BrokerProperties = serde_json::from_str(broker_props_str) .into_alien_error() .context(ErrorData::HttpResponseError { - message: format!( - "Failed to parse BrokerProperties header: {}", - broker_props_str - ), + message: "Failed to parse BrokerProperties header".to_string(), url: url.to_string(), http_status: 200, http_request_text: None, - http_response_text: Some(broker_props_str.to_string()), + http_response_text: None, })?; Some(broker_properties) } else { @@ -1118,33 +1109,17 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { None, )?; - let resp = self - .client - .delete(url.to_string()) - .header("Authorization", format!("Bearer {}", bearer_token)) - .send() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: format!("Service Bus CompleteMessage: failed to execute request"), - })?; + let resp = send_settlement_request( + self.client + .delete(url.to_string()) + .header("Authorization", format!("Bearer {}", bearer_token)), + "CompleteMessage", + ) + .await?; if !resp.status().is_success() { let status = resp.status(); - let error_text = resp - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "Service Bus CompleteMessage failed with status {}: {}", - status, error_text - ), - url: url.to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); + return Err(settlement_http_error("CompleteMessage", status, &url)); } Ok(()) @@ -1169,33 +1144,17 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { None, )?; - let resp = self - .client - .put(url.to_string()) - .header("Authorization", format!("Bearer {}", bearer_token)) - .send() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: format!("Service Bus AbandonMessage: failed to execute request"), - })?; + let resp = send_settlement_request( + self.client + .put(url.to_string()) + .header("Authorization", format!("Bearer {}", bearer_token)), + "AbandonMessage", + ) + .await?; if !resp.status().is_success() { let status = resp.status(); - let error_text = resp - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "Service Bus AbandonMessage failed with status {}: {}", - status, error_text - ), - url: url.to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); + return Err(settlement_http_error("AbandonMessage", status, &url)); } Ok(()) @@ -1220,35 +1179,75 @@ impl ServiceBusDataPlaneApi for AzureServiceBusDataPlaneClient { None, )?; - let resp = self - .client - .post(url.to_string()) - .header("Authorization", format!("Bearer {}", bearer_token)) - .send() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: format!("Service Bus RenewMessageLock: failed to execute request"), - })?; + let resp = send_settlement_request( + self.client + .post(url.to_string()) + .header("Authorization", format!("Bearer {}", bearer_token)), + "RenewMessageLock", + ) + .await?; if !resp.status().is_success() { let status = resp.status(); - let error_text = resp - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "Service Bus RenewMessageLock failed with status {}: {}", - status, error_text - ), - url: url.to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); + return Err(settlement_http_error("RenewMessageLock", status, &url)); } Ok(()) } } + +#[cfg(test)] +mod tests { + use super::*; + use httpmock::{Method::DELETE, MockServer}; + + #[test] + fn settlement_errors_redact_lock_tokens_and_query_values() { + const LOCK_TOKEN: &str = "LOCK_TOKEN_SECRET_0123456789"; + const QUERY_SECRET: &str = "QUERY_SECRET_0123456789"; + let url = Url::parse(&format!( + "https://example.servicebus.windows.net/queue/messages/message-id/{LOCK_TOKEN}?sig={QUERY_SECRET}" + )) + .unwrap(); + + for operation in ["CompleteMessage", "AbandonMessage", "RenewMessageLock"] { + let error = settlement_http_error(operation, StatusCode::BAD_REQUEST, &url); + let serialized = serde_json::to_string(&error).unwrap(); + + assert!(serialized.contains(operation)); + assert!(serialized.contains("redacted-lock-token")); + assert!(!serialized.contains(LOCK_TOKEN)); + assert!(!serialized.contains(QUERY_SECRET)); + } + } + + #[tokio::test] + async fn settlement_transport_errors_drop_the_request_url() { + const LOCK_TOKEN: &str = "LOCK_TOKEN_TRANSPORT_SECRET_0123456789"; + const QUERY_SECRET: &str = "QUERY_TRANSPORT_SECRET_0123456789"; + + let server = MockServer::start_async().await; + let path = format!("/queue/messages/message-id/{LOCK_TOKEN}"); + let request_url = format!("{}{path}?sig={QUERY_SECRET}", server.base_url()); + let redirect = server + .mock_async(|when, then| { + when.method(DELETE).path(&path); + then.status(302).header("Location", &request_url); + }) + .await; + let client = Client::builder() + .redirect(reqwest::redirect::Policy::limited(1)) + .build() + .unwrap(); + + let error = send_settlement_request(client.delete(&request_url), "CompleteMessage") + .await + .expect_err("redirect loop should be a transport failure"); + let serialized = serde_json::to_string(&error).unwrap(); + + redirect.assert_hits_async(2).await; + assert!(serialized.contains("CompleteMessage")); + assert!(!serialized.contains(LOCK_TOKEN)); + assert!(!serialized.contains(QUERY_SECRET)); + } +} diff --git a/crates/alien-azure-clients/src/azure/storage_accounts.rs b/crates/alien-azure-clients/src/azure/storage_accounts.rs index 17acabac0..cd32458f8 100644 --- a/crates/alien-azure-clients/src/azure/storage_accounts.rs +++ b/crates/alien-azure-clients/src/azure/storage_accounts.rs @@ -13,6 +13,25 @@ use reqwest::{Client, Method}; #[cfg(feature = "test-utils")] use mockall::automock; +fn parse_storage_account_keys_response( + body: &str, + url: &str, + account_name: &str, +) -> Result { + serde_json::from_str(body) + .into_alien_error() + .context(ErrorData::HttpResponseError { + message: format!( + "Azure ListStorageAccountKeys: JSON parse error for {}", + account_name + ), + url: url.to_string(), + http_status: 200, + http_request_text: None, + http_response_text: None, + }) +} + // ------------------------------------------------------------------------- // Type aliases for operation results // ------------------------------------------------------------------------- @@ -263,7 +282,7 @@ impl StorageAccountsApi for AzureStorageAccountsClient { url: url.clone(), http_status: 200, http_request_text: None, - http_response_text: Some(body), + http_response_text: None, })?; Ok(storage_account) @@ -318,7 +337,7 @@ impl StorageAccountsApi for AzureStorageAccountsClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(request_body.clone()), + http_request_text: None, http_response_text: None, })?; @@ -331,8 +350,8 @@ impl StorageAccountsApi for AzureStorageAccountsClient { ), url: url.clone(), http_status: 200, - http_request_text: Some(request_body), - http_response_text: Some(response_body), + http_request_text: None, + http_response_text: None, })?; Ok(result) @@ -381,19 +400,45 @@ impl StorageAccountsApi for AzureStorageAccountsClient { http_response_text: None, })?; - let result: StorageAccountListKeysResult = serde_json::from_str(&body) - .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure ListStorageAccountKeys: JSON parse error for {}", - account_name - ), - url: url.clone(), - http_status: 200, - http_request_text: None, - http_response_text: Some(body), - })?; + let result = parse_storage_account_keys_response(&body, &url, account_name)?; Ok(result) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn malformed_list_keys_response_never_retains_access_keys() { + const ACCESS_KEY: &str = "synthetic-azure-storage-access-key-do-not-log"; + let malformed_response = format!( + r#"{{"keys":[{{"keyName":"key1","permissions":"Full","value":"{ACCESS_KEY}"}} +"# + ); + let url = "https://management.azure.com/subscriptions/test/storageAccounts/storage-account/listKeys"; + + let error = + parse_storage_account_keys_response(&malformed_response, url, "storage-account") + .expect_err("malformed listKeys response should fail"); + let serialized = serde_json::to_string(&error).expect("Azure error should serialize"); + + assert!( + !serialized.contains(ACCESS_KEY), + "storage access key leaked into serialized Azure error: {serialized}" + ); + assert!( + serialized.contains("ListStorageAccountKeys"), + "operation context was dropped: {serialized}" + ); + assert!( + serialized.contains("storage-account"), + "resource context was dropped: {serialized}" + ); + assert!( + serialized.contains("\"http_status\":200"), + "HTTP status was dropped: {serialized}" + ); + } +} diff --git a/crates/alien-azure-clients/src/azure/tables.rs b/crates/alien-azure-clients/src/azure/tables.rs index 53d5012e8..2e4bd7950 100644 --- a/crates/alien-azure-clients/src/azure/tables.rs +++ b/crates/alien-azure-clients/src/azure/tables.rs @@ -1,6 +1,7 @@ use crate::azure::common::{ create_azure_http_error_with_context, AzureClientBase, AzureRequestBuilder, }; +use crate::azure::error::safe_http_response_context; use crate::azure::models::table::*; use crate::azure::token_cache::AzureTokenCache; use alien_client_core::{ErrorData, Result}; @@ -10,10 +11,55 @@ use reqwest::{Client, Method, StatusCode}; use serde::{Deserialize, Serialize}; use serde_json::Value; use std::collections::HashMap; +use url::Url; #[cfg(feature = "test-utils")] use mockall::automock; +fn table_diagnostic_url(request_url: &Url) -> String { + let mut diagnostic_url = request_url.clone(); + diagnostic_url.set_query(None); + diagnostic_url.set_fragment(None); + + let path = diagnostic_url.path().to_string(); + if let Some(entity_key_start) = path.find('(') { + diagnostic_url.set_path(&format!( + "{}(redacted-entity-key)", + &path[..entity_key_start] + )); + } + + diagnostic_url.to_string() +} + +async fn send_table_request( + request: reqwest::RequestBuilder, + operation_name: &str, +) -> Result { + request + .send() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: format!("Azure {operation_name}: failed to execute request"), + }) +} + +async fn read_table_response_body( + response: reqwest::Response, + operation_name: &str, +) -> Result { + response + .text() + .await + .map_err(reqwest::Error::without_url) + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: format!("Azure {operation_name}: failed to read response body"), + }) +} + // ----------------------------------------------------------------------------- // Entity data structures for Table Storage operations // ----------------------------------------------------------------------------- @@ -268,8 +314,6 @@ impl TableManagementApi for AzureTableManagementClient { message: format!("Failed to serialize table '{}'", table_name), }, )?; - let request_body = body.clone(); - let builder = AzureRequestBuilder::new(Method::PUT, url.clone()) .content_type_json() .content_length(&body) @@ -292,11 +336,11 @@ impl TableManagementApi for AzureTableManagementClient { let table: Table = serde_json::from_str(&body).into_alien_error().context( ErrorData::HttpResponseError { - message: format!("Azure CreateTable: JSON parse error. Body: {}", body), + message: "Azure CreateTable: JSON parse error".to_string(), url: url.clone(), http_status: 200, - http_response_text: Some(body.clone()), - http_request_text: Some(request_body), + http_response_text: None, + http_request_text: None, }, )?; @@ -366,10 +410,10 @@ impl TableManagementApi for AzureTableManagementClient { let table: Table = serde_json::from_str(&body).into_alien_error().context( ErrorData::HttpResponseError { - message: format!("Azure GetTableAcl: JSON parse error. Body: {}", body), + message: "Azure GetTableAcl: JSON parse error".to_string(), url: url.clone(), http_status: 200, - http_response_text: Some(body.clone()), + http_response_text: None, http_request_text: None, }, )?; @@ -465,7 +509,7 @@ impl AzureTableStorageClient { let mut url = url::Url::parse(&format!("{}{}", base_url, path)) .into_alien_error() .context(ErrorData::InvalidClientConfig { - message: format!("Invalid Table Storage URL: {}{}", base_url, path), + message: format!("Invalid Table Storage URL for account '{storage_account_name}'"), errors: None, })?; @@ -493,7 +537,7 @@ impl AzureTableStorageClient { storage_account_name: &str, resource_group_name: &str, operation_name: &str, - entity_identifier: &str, + table_name: &str, additional_headers: Option>, ) -> Result { let headers = self @@ -530,11 +574,8 @@ impl AzureTableStorageClient { } } - let resp = request_builder.send().await.into_alien_error().context( - ErrorData::HttpRequestFailed { - message: format!("Azure {}: failed to execute request", operation_name), - }, - )?; + let diagnostic_url = table_diagnostic_url(url); + let resp = send_table_request(request_builder, operation_name).await?; let status = resp.status(); if status.is_success() || status == StatusCode::CREATED || status == StatusCode::ACCEPTED { @@ -548,14 +589,9 @@ impl AzureTableStorageClient { status, operation_name, "Azure Table Storage Entity", - entity_identifier, + table_name, &error_text, - &url.to_string(), - if body.is_empty() { - None - } else { - Some(body.to_string()) - }, + &diagnostic_url, )) } } @@ -618,7 +654,6 @@ impl TableStorageApi for AzureTableStorageClient { }, )?; - let entity_identifier = format!("{}:{}", entity.partition_key, entity.row_key); let mut additional_headers = HashMap::new(); additional_headers.insert("Prefer".to_string(), "return-content".to_string()); @@ -630,31 +665,20 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "InsertEntity", - &entity_identifier, + table_name, Some(additional_headers), ) .await?; - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure InsertEntity: failed to read response body".to_string(), - })?; + let response_body = read_table_response_body(resp, "InsertEntity").await?; let entity: TableEntity = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure InsertEntity: JSON parse error. Body: {}", - response_body - ), - url: url.to_string(), - http_status: 201, - http_request_text: Some(body), - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure InsertEntity: JSON parse error", + table_diagnostic_url(&url), + StatusCode::CREATED, + ))?; Ok(entity) } @@ -690,7 +714,6 @@ impl TableStorageApi for AzureTableStorageClient { }, )?; - let entity_identifier = format!("{}:{}", partition_key, row_key); let mut additional_headers = HashMap::new(); // Add If-Match header for optimistic concurrency @@ -708,7 +731,7 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "UpdateEntity", - &entity_identifier, + table_name, Some(additional_headers), ) .await?; @@ -718,26 +741,15 @@ impl TableStorageApi for AzureTableStorageClient { return Ok(entity.clone()); } - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure UpdateEntity: failed to read response body".to_string(), - })?; + let response_body = read_table_response_body(resp, "UpdateEntity").await?; let updated_entity: TableEntity = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure UpdateEntity: JSON parse error. Body: {}", - response_body - ), - url: url.to_string(), - http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure UpdateEntity: JSON parse error", + table_diagnostic_url(&url), + StatusCode::OK, + ))?; Ok(updated_entity) } @@ -773,7 +785,6 @@ impl TableStorageApi for AzureTableStorageClient { }, )?; - let entity_identifier = format!("{}:{}", partition_key, row_key); let mut additional_headers = HashMap::new(); // Add If-Match header for optimistic concurrency @@ -791,7 +802,7 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "MergeEntity", - &entity_identifier, + table_name, Some(additional_headers), ) .await?; @@ -801,26 +812,15 @@ impl TableStorageApi for AzureTableStorageClient { return Ok(entity.clone()); } - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure MergeEntity: failed to read response body".to_string(), - })?; + let response_body = read_table_response_body(resp, "MergeEntity").await?; let merged_entity: TableEntity = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure MergeEntity: JSON parse error. Body: {}", - response_body - ), - url: url.to_string(), - http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure MergeEntity: JSON parse error", + table_diagnostic_url(&url), + StatusCode::OK, + ))?; Ok(merged_entity) } @@ -846,7 +846,6 @@ impl TableStorageApi for AzureTableStorageClient { None, )?; - let entity_identifier = format!("{}:{}", partition_key, row_key); let mut additional_headers = HashMap::new(); // Add If-Match header for optimistic concurrency @@ -864,7 +863,7 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "DeleteEntity", - &entity_identifier, + table_name, Some(additional_headers), ) .await?; @@ -902,8 +901,6 @@ impl TableStorageApi for AzureTableStorageClient { }, )?; - let entity_identifier = format!("{}:{}", partition_key, row_key); - let resp = self .execute_data_plane_request( "PUT", @@ -912,7 +909,7 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "InsertOrReplaceEntity", - &entity_identifier, + table_name, None, ) .await?; @@ -922,27 +919,15 @@ impl TableStorageApi for AzureTableStorageClient { return Ok(entity.clone()); } - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure InsertOrReplaceEntity: failed to read response body" - .to_string(), - })?; + let response_body = read_table_response_body(resp, "InsertOrReplaceEntity").await?; let result_entity: TableEntity = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure InsertOrReplaceEntity: JSON parse error. Body: {}", - response_body - ), - url: url.to_string(), - http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure InsertOrReplaceEntity: JSON parse error", + table_diagnostic_url(&url), + StatusCode::OK, + ))?; Ok(result_entity) } @@ -977,8 +962,6 @@ impl TableStorageApi for AzureTableStorageClient { }, )?; - let entity_identifier = format!("{}:{}", partition_key, row_key); - let resp = self .execute_data_plane_request( "PATCH", @@ -987,7 +970,7 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "InsertOrMergeEntity", - &entity_identifier, + table_name, None, ) .await?; @@ -997,26 +980,15 @@ impl TableStorageApi for AzureTableStorageClient { return Ok(entity.clone()); } - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure InsertOrMergeEntity: failed to read response body".to_string(), - })?; + let response_body = read_table_response_body(resp, "InsertOrMergeEntity").await?; let result_entity: TableEntity = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure InsertOrMergeEntity: JSON parse error. Body: {}", - response_body - ), - url: url.to_string(), - http_status: 200, - http_request_text: Some(body), - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure InsertOrMergeEntity: JSON parse error", + table_diagnostic_url(&url), + StatusCode::OK, + ))?; Ok(result_entity) } @@ -1065,26 +1037,15 @@ impl TableStorageApi for AzureTableStorageClient { ) .await?; - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure QueryEntities: failed to read response body".to_string(), - })?; + let response_body = read_table_response_body(resp, "QueryEntities").await?; let query_response: EntityQueryResponse = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!( - "Azure QueryEntities: JSON parse error. Body: {}", - response_body - ), - url: url.to_string(), - http_status: 200, - http_request_text: None, - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure QueryEntities: JSON parse error", + table_diagnostic_url(&url), + StatusCode::OK, + ))?; Ok(query_response) } @@ -1116,8 +1077,6 @@ impl TableStorageApi for AzureTableStorageClient { query_params, )?; - let entity_identifier = format!("{}:{}", partition_key, row_key); - let resp = self .execute_data_plane_request( "GET", @@ -1126,7 +1085,7 @@ impl TableStorageApi for AzureTableStorageClient { storage_account_name, resource_group_name, "GetEntity", - &entity_identifier, + table_name, None, ) .await?; @@ -1140,23 +1099,15 @@ impl TableStorageApi for AzureTableStorageClient { .and_then(|value| value.to_str().ok()) .map(ToString::to_string); - let response_body = - resp.text() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Azure GetEntity: failed to read response body".to_string(), - })?; + let response_body = read_table_response_body(resp, "GetEntity").await?; let mut entity: TableEntity = serde_json::from_str(&response_body) .into_alien_error() - .context(ErrorData::HttpResponseError { - message: format!("Azure GetEntity: JSON parse error. Body: {}", response_body), - url: url.to_string(), - http_status: 200, - http_request_text: None, - http_response_text: Some(response_body), - })?; + .context(safe_http_response_context( + "Azure GetEntity: JSON parse error", + table_diagnostic_url(&url), + StatusCode::OK, + ))?; // Expose it under the odata property name (present natively only at // fullmetadata) so consumers have ONE place to look. @@ -1171,6 +1122,68 @@ impl TableStorageApi for AzureTableStorageClient { } } +#[cfg(test)] +mod tests { + use super::*; + use httpmock::{Method::GET, MockServer}; + + #[test] + fn table_diagnostic_urls_redact_entity_keys_and_query_values() { + const PARTITION_KEY: &str = "PARTITION_KEY_SECRET_0123456789"; + const ROW_KEY: &str = "ROW_KEY_SECRET_0123456789"; + const FILTER_VALUE: &str = "FILTER_SECRET_0123456789"; + const SELECT_VALUE: &str = "SELECT_SECRET_0123456789"; + + let url = Url::parse(&format!( + "https://example.table.core.windows.net/Jobs(PartitionKey='{PARTITION_KEY}',RowKey='{ROW_KEY}')?$filter={FILTER_VALUE}&$select={SELECT_VALUE}" + )) + .unwrap(); + let diagnostic_url = table_diagnostic_url(&url); + + assert!(diagnostic_url.contains("example.table.core.windows.net")); + assert!(diagnostic_url.contains("/Jobs(redacted-entity-key)")); + assert!(!diagnostic_url.contains(PARTITION_KEY)); + assert!(!diagnostic_url.contains(ROW_KEY)); + assert!(!diagnostic_url.contains(FILTER_VALUE)); + assert!(!diagnostic_url.contains(SELECT_VALUE)); + assert!(!diagnostic_url.contains('?')); + } + + #[tokio::test] + async fn table_transport_errors_drop_entity_keys_and_query_values() { + const PARTITION_KEY: &str = "PARTITION_TRANSPORT_SECRET_0123456789"; + const ROW_KEY: &str = "ROW_TRANSPORT_SECRET_0123456789"; + const FILTER_VALUE: &str = "FILTER_TRANSPORT_SECRET_0123456789"; + + let server = MockServer::start_async().await; + let request_url = format!( + "{}/Jobs(PartitionKey='{PARTITION_KEY}',RowKey='{ROW_KEY}')?$filter={FILTER_VALUE}", + server.base_url() + ); + let redirect = server + .mock_async(|when, then| { + when.method(GET); + then.status(302).header("Location", &request_url); + }) + .await; + let client = Client::builder() + .redirect(reqwest::redirect::Policy::limited(1)) + .build() + .unwrap(); + + let error = send_table_request(client.get(&request_url), "GetEntity") + .await + .expect_err("redirect loop should be a transport failure"); + let serialized = serde_json::to_string(&error).unwrap(); + + redirect.assert_hits_async(2).await; + assert!(serialized.contains("GetEntity")); + assert!(!serialized.contains(PARTITION_KEY)); + assert!(!serialized.contains(ROW_KEY)); + assert!(!serialized.contains(FILTER_VALUE)); + } +} + // For backward compatibility, keep the old AzureTableStorageClient name as an alias // for the management client pub type AzureTableStorageClientOld = AzureTableManagementClient; diff --git a/crates/alien-azure-clients/src/azure/user_delegation_sas.rs b/crates/alien-azure-clients/src/azure/user_delegation_sas.rs new file mode 100644 index 000000000..64e9e04f6 --- /dev/null +++ b/crates/alien-azure-clients/src/azure/user_delegation_sas.rs @@ -0,0 +1,624 @@ +use std::collections::HashMap; + +use alien_client_core::{ErrorData, Result}; +use alien_error::{AlienError, Context, IntoAlienError}; +use base64::{engine::general_purpose::STANDARD as BASE64_STANDARD, Engine}; +use chrono::{DateTime, Duration, SecondsFormat, Utc}; +use hmac::{Hmac, Mac}; +use quick_xml::de::from_str; +use serde::Deserialize; +use sha2::Sha256; + +use super::{AzureClientConfig, AzureClientConfigExt}; + +const AZURE_STORAGE_SCOPE: &str = "https://storage.azure.com/.default"; +const AZURE_STORAGE_VERSION: &str = "2023-11-03"; +const CONTAINER_SIGNED_RESOURCE: &str = "c"; +const HTTPS_ONLY_PROTOCOL: &str = "https"; + +/// A decoded user-delegation SAS confined to one Blob container. +pub struct AzureContainerSas { + /// Storage account named in the signed canonical resource. + pub account_name: String, + /// Blob container named in the signed canonical resource. + pub container_name: String, + /// Exact signed permissions. + pub permissions: String, + /// SAS start time. + pub starts_at: DateTime, + /// SAS expiry time. + pub expires_at: DateTime, + /// Decoded query parameters to attach to Blob requests. + pub query_parameters: HashMap, +} + +impl std::fmt::Debug for AzureContainerSas { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("AzureContainerSas") + .field("account_name", &self.account_name) + .field("container_name", &self.container_name) + .field("permissions", &self.permissions) + .field("starts_at", &self.starts_at) + .field("expires_at", &self.expires_at) + .field("query_parameters", &"[REDACTED]") + .finish() + } +} + +#[derive(Deserialize)] +#[serde(rename_all = "PascalCase")] +struct UserDelegationKey { + signed_oid: String, + signed_tid: String, + signed_start: String, + signed_expiry: String, + signed_service: String, + signed_version: String, + value: String, +} + +pub(super) async fn create_container_user_delegation_sas( + config: &AzureClientConfig, + account_name: &str, + container_name: &str, + permissions: &str, + expires_at: DateTime, +) -> Result { + validate_storage_name(account_name, "storage account")?; + validate_storage_name(container_name, "container")?; + validate_permissions(permissions)?; + + let token = config + .get_bearer_token_with_expiry(AZURE_STORAGE_SCOPE) + .await?; + let now = Utc::now(); + // Azure Storage accepts fractional seconds, but the SAS wire format below + // deliberately uses whole seconds. Normalize the requested key lifetime to + // that same precision before validating Azure's response and signing the + // SAS, so the in-memory bounds exactly match the values sent on the wire. + let starts_at = truncate_to_seconds(now - Duration::minutes(5)); + let expires_at = truncate_to_seconds(expires_at.min(token.expires_at)); + if expires_at <= now { + return Err(AlienError::new(ErrorData::InvalidClientConfig { + message: "Azure Storage user-delegation SAS expiry is not in the future".to_string(), + errors: None, + })); + } + + let endpoint = config.storage_blob_endpoint(account_name); + let url = format!( + "{}/?restype=service&comp=userdelegationkey", + endpoint.trim_end_matches('/') + ); + let start = timestamp(starts_at); + let expiry = timestamp(expires_at); + let request_body = format!( + "{start}{expiry}" + ); + let response = reqwest::Client::new() + .post(&url) + .bearer_auth(&token.token) + .header("x-ms-version", AZURE_STORAGE_VERSION) + .header("content-type", "application/xml") + .body(request_body) + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to request an Azure Storage user-delegation key".to_string(), + })?; + let status = response.status(); + let response_body = + response + .text() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to read the Azure Storage user-delegation key response" + .to_string(), + })?; + if !status.is_success() { + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!( + "Azure Storage user-delegation key request failed with HTTP {}", + status.as_u16() + ), + url, + http_status: status.as_u16(), + http_request_text: None, + // The response is untrusted and may echo the bearer token or key + // material. Do not retain it in a serializable error chain. + http_response_text: None, + })); + } + let key: UserDelegationKey = + from_str(&response_body) + .into_alien_error() + .context(ErrorData::SerializationError { + message: "Failed to parse the Azure Storage user-delegation key response" + .to_string(), + })?; + validate_delegation_key(&key, starts_at, expires_at)?; + + let query_parameters = sign_container_sas( + account_name, + container_name, + permissions, + starts_at, + expires_at, + &key, + )?; + Ok(AzureContainerSas { + account_name: account_name.to_string(), + container_name: container_name.to_string(), + permissions: permissions.to_string(), + starts_at, + expires_at, + query_parameters, + }) +} + +fn sign_container_sas( + account_name: &str, + container_name: &str, + permissions: &str, + starts_at: DateTime, + expires_at: DateTime, + key: &UserDelegationKey, +) -> Result> { + let start = timestamp(starts_at); + let expiry = timestamp(expires_at); + let canonicalized_resource = format!("/blob/{account_name}/{container_name}"); + let fields = [ + permissions, + &start, + &expiry, + &canonicalized_resource, + &key.signed_oid, + &key.signed_tid, + &key.signed_start, + &key.signed_expiry, + &key.signed_service, + &key.signed_version, + "", // signed authorized object id + "", // signed unauthorized object id + "", // signed correlation id + "", // signed IP + HTTPS_ONLY_PROTOCOL, + AZURE_STORAGE_VERSION, + CONTAINER_SIGNED_RESOURCE, + "", // signed snapshot time + "", // signed encryption scope + "", // rscc + "", // rscd + "", // rsce + "", // rscl + "", // rsct + ]; + let string_to_sign = fields.join("\n"); + let signing_key = BASE64_STANDARD + .decode(&key.value) + .into_alien_error() + .context(ErrorData::InvalidInput { + message: "Azure Storage returned an invalid user-delegation signing key".to_string(), + field_name: Some("Value".to_string()), + })?; + let mut mac = Hmac::::new_from_slice(&signing_key) + .into_alien_error() + .context(ErrorData::InvalidInput { + message: "Azure Storage returned an unusable user-delegation signing key".to_string(), + field_name: Some("Value".to_string()), + })?; + mac.update(string_to_sign.as_bytes()); + let signature = BASE64_STANDARD.encode(mac.finalize().into_bytes()); + + Ok(HashMap::from([ + ("sp".to_string(), permissions.to_string()), + ("st".to_string(), start), + ("se".to_string(), expiry), + ("skoid".to_string(), key.signed_oid.clone()), + ("sktid".to_string(), key.signed_tid.clone()), + ("skt".to_string(), key.signed_start.clone()), + ("ske".to_string(), key.signed_expiry.clone()), + ("sks".to_string(), key.signed_service.clone()), + ("skv".to_string(), key.signed_version.clone()), + ("spr".to_string(), HTTPS_ONLY_PROTOCOL.to_string()), + ("sv".to_string(), AZURE_STORAGE_VERSION.to_string()), + ("sr".to_string(), CONTAINER_SIGNED_RESOURCE.to_string()), + ("sig".to_string(), signature), + ])) +} + +fn validate_delegation_key( + key: &UserDelegationKey, + requested_start: DateTime, + requested_expiry: DateTime, +) -> Result<()> { + if key.signed_service != "b" { + return Err(AlienError::new(ErrorData::InvalidInput { + message: "Azure Storage returned a user-delegation key for a non-Blob service" + .to_string(), + field_name: Some("SignedService".to_string()), + })); + } + let signed_start = DateTime::parse_from_rfc3339(&key.signed_start) + .into_alien_error() + .context(ErrorData::InvalidInput { + message: "Azure Storage returned an invalid user-delegation key start time".to_string(), + field_name: Some("SignedStart".to_string()), + })? + .with_timezone(&Utc); + let signed_expiry = DateTime::parse_from_rfc3339(&key.signed_expiry) + .into_alien_error() + .context(ErrorData::InvalidInput { + message: "Azure Storage returned an invalid user-delegation key expiry".to_string(), + field_name: Some("SignedExpiry".to_string()), + })? + .with_timezone(&Utc); + if signed_start > requested_start || signed_expiry < requested_expiry { + return Err(AlienError::new(ErrorData::InvalidInput { + message: "Azure Storage returned a user-delegation key outside the requested lifetime" + .to_string(), + field_name: None, + })); + } + Ok(()) +} + +fn validate_permissions(permissions: &str) -> Result<()> { + const CANONICAL_ORDER: &str = "racwdl"; + let positions = permissions + .chars() + .map(|permission| CANONICAL_ORDER.find(permission)) + .collect::>>(); + let in_canonical_order = positions + .as_ref() + .is_some_and(|positions| positions.windows(2).all(|pair| pair[0] < pair[1])); + if permissions.is_empty() || !in_canonical_order { + return Err(AlienError::new(ErrorData::InvalidInput { + message: "Azure Blob container SAS permissions are invalid".to_string(), + field_name: Some("permissions".to_string()), + })); + } + Ok(()) +} + +fn validate_storage_name(value: &str, kind: &str) -> Result<()> { + let valid = match kind { + "storage account" => { + (3..=24).contains(&value.len()) + && value + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit()) + } + "container" => { + (3..=63).contains(&value.len()) + && value + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit() || byte == b'-') + && value + .as_bytes() + .first() + .is_some_and(u8::is_ascii_alphanumeric) + && value + .as_bytes() + .last() + .is_some_and(u8::is_ascii_alphanumeric) + && !value.contains("--") + } + _ => false, + }; + if !valid { + return Err(AlienError::new(ErrorData::InvalidInput { + message: format!("Azure {kind} name is invalid for SAS signing"), + field_name: Some(kind.replace(' ', "_")), + })); + } + Ok(()) +} + +fn timestamp(value: DateTime) -> String { + value.to_rfc3339_opts(SecondsFormat::Secs, true) +} + +fn truncate_to_seconds(value: DateTime) -> DateTime { + value - Duration::nanoseconds(i64::from(value.timestamp_subsec_nanos())) +} + +#[cfg(test)] +mod tests { + use super::*; + use base64::engine::general_purpose::URL_SAFE_NO_PAD; + use tokio::{ + io::{AsyncReadExt, AsyncWriteExt}, + net::{TcpListener, TcpStream}, + }; + + #[test] + fn signs_exact_container_resource_and_permissions() { + let key = UserDelegationKey { + signed_oid: "11111111-1111-1111-1111-111111111111".to_string(), + signed_tid: "22222222-2222-2222-2222-222222222222".to_string(), + signed_start: "2030-01-01T00:00:00Z".to_string(), + signed_expiry: "2030-01-01T02:00:00Z".to_string(), + signed_service: "b".to_string(), + signed_version: AZURE_STORAGE_VERSION.to_string(), + value: BASE64_STANDARD.encode("signing-key"), + }; + let starts_at = DateTime::parse_from_rfc3339("2030-01-01T00:05:00Z") + .unwrap() + .with_timezone(&Utc); + let expires_at = DateTime::parse_from_rfc3339("2030-01-01T01:00:00Z") + .unwrap() + .with_timezone(&Utc); + + let query = sign_container_sas( + "account", + "requested-container", + "rcwdl", + starts_at, + expires_at, + &key, + ) + .expect("container SAS should sign"); + + assert_eq!(query.get("sr").map(String::as_str), Some("c")); + assert_eq!(query.get("sp").map(String::as_str), Some("rcwdl")); + assert_eq!(query.get("spr").map(String::as_str), Some("https")); + assert_eq!( + query.get("se").map(String::as_str), + Some("2030-01-01T01:00:00Z") + ); + assert_eq!( + query.get("sig").map(String::as_str), + Some("aucRqE2ALMW/HQSsF43dr4albuXkktOXYM7UkZUohTI=") + ); + } + + #[test] + fn permissions_must_be_unique_and_canonically_ordered() { + validate_permissions("rcwdl").expect("canonical permissions"); + assert!(validate_permissions("wr").is_err()); + assert!(validate_permissions("rr").is_err()); + assert!(validate_permissions("z").is_err()); + } + + #[test] + fn storage_names_must_be_valid_and_cannot_change_the_signed_resource() { + validate_storage_name("account123", "storage account").expect("valid account"); + validate_storage_name("one-container", "container").expect("valid container"); + assert!(validate_storage_name("account/container", "storage account").is_err()); + assert!(validate_storage_name("container/*", "container").is_err()); + assert!(validate_storage_name("double--dash", "container").is_err()); + } + + #[tokio::test] + async fn requests_a_delegation_key_and_signs_the_exact_container() { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("bind storage server"); + let address = listener.local_addr().expect("storage server address"); + let server = tokio::spawn(async move { + let (mut stream, _) = listener.accept().await.expect("accept storage request"); + let request = read_http_request(&mut stream).await; + let request_start = request + .split_once("") + .and_then(|(_, body)| body.split_once("")) + .map(|(value, _)| value) + .expect("delegation-key request start") + .to_string(); + let request_expiry = request + .split_once("") + .and_then(|(_, body)| body.split_once("")) + .map(|(value, _)| value) + .expect("delegation-key request expiry") + .to_string(); + let body = format!( + "11111111-1111-1111-1111-11111111111122222222-2222-2222-2222-222222222222{request_start}{request_expiry}b{AZURE_STORAGE_VERSION}{}", + BASE64_STANDARD.encode("protocol-test-signing-key") + ); + let response = format!( + "HTTP/1.1 200 OK\r\ncontent-type: application/xml\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{}", + body.len(), + body + ); + stream + .write_all(response.as_bytes()) + .await + .expect("write key response"); + (request, request_start, request_expiry) + }); + let token_expiry = Utc::now() + Duration::hours(1); + let token = format!( + "{}.{}.signature", + URL_SAFE_NO_PAD.encode(r#"{"alg":"none"}"#), + URL_SAFE_NO_PAD.encode(format!(r#"{{"exp":{}}}"#, token_expiry.timestamp())) + ); + let requested_expiry = + truncate_to_seconds(Utc::now() + Duration::minutes(30)) + Duration::milliseconds(500); + let config = AzureClientConfig { + subscription_id: "subscription".to_string(), + tenant_id: "tenant".to_string(), + region: Some("eastus".to_string()), + credentials: super::super::AzureCredentials::ScopedAccessTokens { + tokens: HashMap::from([(AZURE_STORAGE_SCOPE.to_string(), token.clone())]), + }, + service_overrides: Some(super::super::ServiceOverrides { + endpoints: HashMap::from([("storage".to_string(), format!("http://{address}"))]), + }), + }; + + let sas = create_container_user_delegation_sas( + &config, + "oneaccount", + "one-container", + "rcwdl", + requested_expiry, + ) + .await + .expect("mint container SAS"); + let (request, returned_start, returned_expiry) = server.await.expect("join storage server"); + let (headers, request_body) = request.split_once("\r\n\r\n").expect("request body"); + + assert!( + headers.starts_with("POST /blob/?restype=service&comp=userdelegationkey HTTP/1.1\r\n") + ); + assert!(headers + .to_ascii_lowercase() + .contains(&format!("authorization: bearer {token}").to_ascii_lowercase())); + assert!(headers + .to_ascii_lowercase() + .contains("x-ms-version: 2023-11-03")); + assert!(headers + .to_ascii_lowercase() + .contains("content-type: application/xml")); + let request_start = request_body + .strip_prefix("") + .and_then(|body| body.split_once("")) + .expect("exact KeyInfo XML prefix") + .0; + assert_eq!( + request_body, + format!( + "{request_start}{}", + timestamp(requested_expiry) + ) + ); + assert_eq!(sas.account_name, "oneaccount"); + assert_eq!(sas.container_name, "one-container"); + assert_eq!(sas.permissions, "rcwdl"); + assert_eq!(returned_start, request_start); + assert_eq!(returned_expiry, timestamp(requested_expiry)); + assert_eq!(timestamp(sas.starts_at), request_start); + assert_eq!(timestamp(sas.expires_at), returned_expiry); + assert_eq!(sas.expires_at, truncate_to_seconds(requested_expiry)); + assert_eq!( + sas.query_parameters.get("sr").map(String::as_str), + Some("c") + ); + assert_eq!( + sas.query_parameters.get("spr").map(String::as_str), + Some("https") + ); + assert_eq!( + sas.query_parameters.get("sp").map(String::as_str), + Some("rcwdl") + ); + assert_eq!( + sas.query_parameters.get("st").map(String::as_str), + Some(request_start) + ); + assert_eq!( + sas.query_parameters.get("se").map(String::as_str), + Some(returned_expiry.as_str()) + ); + } + + #[test] + fn rejects_a_delegation_key_that_does_not_cover_the_signed_sas_lifetime() { + let requested_start = DateTime::parse_from_rfc3339("2030-01-01T00:00:00Z") + .unwrap() + .with_timezone(&Utc); + let requested_expiry = DateTime::parse_from_rfc3339("2030-01-01T01:00:00Z") + .unwrap() + .with_timezone(&Utc); + let key = UserDelegationKey { + signed_oid: "11111111-1111-1111-1111-111111111111".to_string(), + signed_tid: "22222222-2222-2222-2222-222222222222".to_string(), + signed_start: timestamp(requested_start), + signed_expiry: timestamp(requested_expiry - Duration::seconds(1)), + signed_service: "b".to_string(), + signed_version: AZURE_STORAGE_VERSION.to_string(), + value: BASE64_STANDARD.encode("signing-key"), + }; + + let error = validate_delegation_key(&key, requested_start, requested_expiry) + .expect_err("shorter delegation-key lifetime must be rejected"); + + assert_eq!(error.code, "INVALID_INPUT"); + assert_eq!( + error.message, + "Invalid input: Azure Storage returned a user-delegation key outside the requested lifetime" + ); + } + + #[tokio::test] + async fn delegation_key_errors_never_retain_bearer_tokens_or_response_bodies() { + const BEARER_SENTINEL: &str = "BEARER_TOKEN_MUST_NOT_LEAK"; + const RESPONSE_SENTINEL: &str = "DELEGATION_KEY_RESPONSE_MUST_NOT_LEAK"; + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("bind storage server"); + let address = listener.local_addr().expect("storage server address"); + let server = tokio::spawn(async move { + let (mut stream, _) = listener.accept().await.expect("accept storage request"); + let _request = read_http_request(&mut stream).await; + let body = format!("{BEARER_SENTINEL} {RESPONSE_SENTINEL}"); + let response = format!( + "HTTP/1.1 403 Forbidden\r\ncontent-type: application/xml\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{body}", + body.len() + ); + stream + .write_all(response.as_bytes()) + .await + .expect("write error response"); + }); + let token_expiry = Utc::now() + Duration::hours(1); + let token = format!( + "{}.{}.{}", + URL_SAFE_NO_PAD.encode(r#"{"alg":"none"}"#), + URL_SAFE_NO_PAD.encode(format!(r#"{{"exp":{}}}"#, token_expiry.timestamp())), + BEARER_SENTINEL + ); + let config = AzureClientConfig { + subscription_id: "subscription".to_string(), + tenant_id: "tenant".to_string(), + region: Some("eastus".to_string()), + credentials: super::super::AzureCredentials::ScopedAccessTokens { + tokens: HashMap::from([(AZURE_STORAGE_SCOPE.to_string(), token)]), + }, + service_overrides: Some(super::super::ServiceOverrides { + endpoints: HashMap::from([("storage".to_string(), format!("http://{address}"))]), + }), + }; + + let error = create_container_user_delegation_sas( + &config, + "oneaccount", + "one-container", + "rcwdl", + Utc::now() + Duration::minutes(30), + ) + .await + .expect_err("delegation-key failure should propagate"); + server.await.expect("join storage server"); + let serialized = serde_json::to_string(&error).expect("serialize error"); + assert!(!serialized.contains(BEARER_SENTINEL)); + assert!(!serialized.contains(RESPONSE_SENTINEL)); + } + + async fn read_http_request(stream: &mut TcpStream) -> String { + let mut bytes = Vec::new(); + let mut buffer = [0u8; 2048]; + loop { + let count = stream.read(&mut buffer).await.expect("read request"); + assert!(count > 0, "request ended before its declared body"); + bytes.extend_from_slice(&buffer[..count]); + let Some(header_end) = bytes.windows(4).position(|window| window == b"\r\n\r\n") else { + continue; + }; + let headers = String::from_utf8_lossy(&bytes[..header_end]); + let content_length = headers + .lines() + .find_map(|line| { + line.to_ascii_lowercase() + .strip_prefix("content-length: ") + .and_then(|value| value.parse::().ok()) + }) + .expect("content-length header"); + if bytes.len() >= header_end + 4 + content_length { + return String::from_utf8(bytes).expect("UTF-8 request"); + } + } + } +} diff --git a/crates/alien-bindings-node/Cargo.toml b/crates/alien-bindings-node/Cargo.toml index be190cc2e..7b7ae1563 100644 --- a/crates/alien-bindings-node/Cargo.toml +++ b/crates/alien-bindings-node/Cargo.toml @@ -12,7 +12,7 @@ crate-type = ["cdylib", "rlib"] # Mirror alien-bindings' platform features. The addon is a pure argument/error # translation layer; it forwards every provider feature and never includes the # Worker protocol. -default = ["all-platforms"] +default = ["all-platforms", "platform-sdk"] all-platforms = ["aws", "gcp", "azure", "kubernetes", "local", "test"] aws = ["alien-bindings/aws"] gcp = ["alien-bindings/gcp"] @@ -20,6 +20,7 @@ azure = ["alien-bindings/azure"] kubernetes = ["alien-bindings/kubernetes"] local = ["alien-bindings/local"] test = ["alien-bindings/test"] +platform-sdk = ["alien-bindings/platform-sdk"] [dependencies] # alien-bindings is declared `default-features = false` in the workspace manifest, diff --git a/crates/alien-bindings-node/src/lib.rs b/crates/alien-bindings-node/src/lib.rs index a3333e145..cb22bc4ea 100644 --- a/crates/alien-bindings-node/src/lib.rs +++ b/crates/alien-bindings-node/src/lib.rs @@ -12,17 +12,23 @@ mod container; mod error; mod kv; mod queue; +#[cfg(feature = "platform-sdk")] +mod remote_storage; mod storage; mod vault; use crate::error::map_alien_error; use alien_bindings::Bindings; +#[cfg(feature = "platform-sdk")] +use alien_bindings::RemoteBindings; use napi_derive::napi; use std::sync::Arc; pub use container::ContainerHandle; pub use kv::KvHandle; pub use queue::QueueHandle; +#[cfg(feature = "platform-sdk")] +pub use remote_storage::RemoteStorageHandle; pub use storage::StorageHandle; pub use vault::VaultHandle; @@ -92,3 +98,38 @@ impl BindingsHandle { Ok(ContainerHandle::new(container)) } } + +/// The JS-facing remote entry point. Its narrow surface makes unsupported +/// binding kinds impossible to request through the native addon. +#[cfg(feature = "platform-sdk")] +#[napi] +pub struct RemoteBindingsHandle { + inner: Arc, +} + +#[cfg(feature = "platform-sdk")] +#[napi] +impl RemoteBindingsHandle { + /// Discover a deployment's assigned manager and create remote bindings. + #[napi(factory)] + pub async fn for_deployment( + deployment_id: String, + token: String, + api_base_url: Option, + ) -> napi::Result { + let bindings = + RemoteBindings::for_deployment(&deployment_id, &token, api_base_url.as_deref()) + .await + .map_err(map_alien_error)?; + Ok(Self { + inner: Arc::new(bindings), + }) + } + + /// Resolve the storage binding named `name`. + #[napi] + pub async fn storage(&self, name: String) -> napi::Result { + let storage = self.inner.storage(&name).await.map_err(map_alien_error)?; + Ok(RemoteStorageHandle::new(storage, name)) + } +} diff --git a/crates/alien-bindings-node/src/remote_storage.rs b/crates/alien-bindings-node/src/remote_storage.rs new file mode 100644 index 000000000..8e9c64373 --- /dev/null +++ b/crates/alien-bindings-node/src/remote_storage.rs @@ -0,0 +1,80 @@ +//! Remote Storage v0 handle. The native surface mirrors the five authorized +//! operations and cannot expose the wider local `StorageHandle` API. + +use crate::error::map_object_store_error; +use crate::storage::{object_meta_to_js, ObjectMetaJs}; +use alien_bindings::RemoteStorage; +use futures::StreamExt; +use napi::bindgen_prelude::Buffer; +use napi_derive::napi; +use object_store::path::Path; +use object_store::PutPayload; +use std::sync::Arc; + +#[napi] +pub struct RemoteStorageHandle { + inner: Arc, + binding: String, +} + +impl RemoteStorageHandle { + pub(crate) fn new(inner: Arc, binding: String) -> Self { + Self { inner, binding } + } +} + +#[napi] +impl RemoteStorageHandle { + #[napi] + pub async fn get(&self, path: String) -> napi::Result { + let result = self + .inner + .get(&Path::from(path)) + .await + .map_err(|error| map_object_store_error(error, &self.binding, "get"))?; + let bytes = result + .bytes() + .await + .map_err(|error| map_object_store_error(error, &self.binding, "get"))?; + Ok(Buffer::from(bytes.to_vec())) + } + + #[napi] + pub async fn put(&self, path: String, data: Buffer) -> napi::Result<()> { + self.inner + .put(&Path::from(path), PutPayload::from(data.to_vec())) + .await + .map_err(|error| map_object_store_error(error, &self.binding, "put"))?; + Ok(()) + } + + #[napi] + pub async fn delete(&self, path: String) -> napi::Result<()> { + self.inner + .delete(&Path::from(path)) + .await + .map_err(|error| map_object_store_error(error, &self.binding, "delete")) + } + + #[napi] + pub async fn list(&self, prefix: Option) -> napi::Result> { + let prefix = prefix.map(Path::from); + let mut stream = self.inner.list(prefix.as_ref()); + let mut objects = Vec::new(); + while let Some(item) = stream.next().await { + objects.push(object_meta_to_js(&item.map_err(|error| { + map_object_store_error(error, &self.binding, "list") + })?)); + } + Ok(objects) + } + + #[napi] + pub async fn head(&self, path: String) -> napi::Result { + self.inner + .head(&Path::from(path)) + .await + .map(|metadata| object_meta_to_js(&metadata)) + .map_err(|error| map_object_store_error(error, &self.binding, "head")) + } +} diff --git a/crates/alien-bindings-node/src/storage.rs b/crates/alien-bindings-node/src/storage.rs index 7e3d617f8..46329e058 100644 --- a/crates/alien-bindings-node/src/storage.rs +++ b/crates/alien-bindings-node/src/storage.rs @@ -38,7 +38,7 @@ pub struct PresignedRequestJs { } /// Translate an `object_store::ObjectMeta` into its JS shape. -fn object_meta_to_js(meta: &ObjectMeta) -> ObjectMetaJs { +pub(crate) fn object_meta_to_js(meta: &ObjectMeta) -> ObjectMetaJs { ObjectMetaJs { location: meta.location.to_string(), size: meta.size as f64, diff --git a/crates/alien-bindings/Cargo.toml b/crates/alien-bindings/Cargo.toml index e7c22de2d..484ddf422 100644 --- a/crates/alien-bindings/Cargo.toml +++ b/crates/alien-bindings/Cargo.toml @@ -18,7 +18,7 @@ kubernetes = ["dep:alien-k8s-clients", "dep:k8s-openapi", "alien-client-config/k local = ["object_store/fs", "dep:oci-client", "dep:turso", "dep:sha2", "tokio/fs", "tokio/process", "alien-core/local"] test = [] # Test platform support - fast mock implementations without real cloud APIs openapi = ["dep:utoipa"] -platform-sdk = ["dep:alien-platform-api"] # Platform API access (for_remote_deployment) +platform-sdk = ["dep:alien-platform-api", "dep:alien-manager-api"] # Platform/manager API access for RemoteBindings [dependencies] async-trait = { workspace = true } @@ -40,6 +40,7 @@ serde_json = { workspace = true } chrono = { workspace = true, features = ["serde"] } reqwest = { workspace = true, features = ["rustls-tls-webpki-roots"] } alien-platform-api = { workspace = true, optional = true } +alien-manager-api = { workspace = true, optional = true } tracing = { workspace = true } regex = { workspace = true } uuid = { workspace = true, features = ["v4", "serde"] } diff --git a/crates/alien-bindings/README.md b/crates/alien-bindings/README.md index 26ffc675e..da1d04497 100644 --- a/crates/alien-bindings/README.md +++ b/crates/alien-bindings/README.md @@ -25,6 +25,32 @@ let storage = bindings.storage("files").await?; storage.put(&Path::from("hello.txt"), data.into()).await?; ``` +With the `platform-sdk` feature, trusted backend code can open the hosted +remote Storage surface through the deployment's assigned manager: + +```rust,no_run +use alien_bindings::RemoteBindings; + +let bindings = RemoteBindings::for_deployment( + "dep_...", + &std::env::var("ALIEN_API_TOKEN")?, + None, +) +.await?; +let storage = bindings.storage("uploads").await?; +``` + +Remote v0 supports only Running, Frozen S3, GCS, and Azure Blob Storage +resources with remote access enabled. The API token and returned provider +credentials are backend secrets. Remote access grants the deployment management +identity exact object read, write, list, delete, and multipart permissions on +the selected bucket or container; it does not create a separate identity per +resource. + +This replaces the former unscoped `/v1/resolve-credentials` flow. The dedicated +`RemoteBindings` type exposes only Storage; its handles refresh credentials and +rediscover manager assignment without exposing a non-refreshing provider. + ## Adding New Providers 1. Create a new module under `src/providers/` implementing `BindingsProvider` diff --git a/crates/alien-bindings/src/bindings.rs b/crates/alien-bindings/src/bindings.rs index df2e7ea78..9faa13e48 100644 --- a/crates/alien-bindings/src/bindings.rs +++ b/crates/alien-bindings/src/bindings.rs @@ -13,8 +13,7 @@ use crate::traits::{ use std::collections::HashMap; use std::sync::Arc; -/// App-facing entry point for accessing bindings configured via `ALIEN_*_BINDING` -/// environment variables. +/// App-facing entry point for environment-backed bindings. /// /// Construction is synchronous and only validates each configured binding's JSON /// shape (see [`BindingsProvider::from_env_deferred`]); the deployment platform, @@ -120,8 +119,8 @@ impl Bindings { /// Loads the object storage binding named `binding_name`. /// /// The returned handle checks credential freshness before each operation. - /// Native credentials and fresh minted credentials remain cached; a minted - /// provider inside its refresh window is re-minted once under the shared + /// Native credentials and fresh short-lived credentials remain cached; a + /// provider inside its refresh window is refreshed once under its shared /// resolver's single-flight guard. pub async fn storage(&self, binding_name: &str) -> Result> { let initial = self.provider.load_storage(binding_name).await?; @@ -132,7 +131,8 @@ impl Bindings { ))) } - /// Loads a key-value binding that refreshes minted credentials before use. + /// Loads an environment-backed key-value binding that refreshes minted + /// credentials before use. pub async fn kv(&self, binding_name: &str) -> Result> { self.provider.load_kv(binding_name).await?; Ok(Arc::new(RefreshingKv::new( @@ -151,7 +151,8 @@ impl Bindings { Ok(BoundQueue::new(queue, binding_name)) } - /// Loads a vault binding that refreshes minted credentials before use. + /// Loads an environment-backed vault binding that refreshes minted + /// credentials before use. pub async fn vault(&self, binding_name: &str) -> Result> { self.provider.load_vault(binding_name).await?; Ok(Arc::new(RefreshingVault::new( diff --git a/crates/alien-bindings/src/lib.rs b/crates/alien-bindings/src/lib.rs index 761a884b4..3de6c8a3e 100644 --- a/crates/alien-bindings/src/lib.rs +++ b/crates/alien-bindings/src/lib.rs @@ -5,6 +5,8 @@ pub use alien_core::{Platform, ENV_ALIEN_DEPLOYMENT_TYPE, ENV_OPERATOR_BASE_PLAT pub use bindings::{Bindings, BoundQueue}; pub use error::{ErrorData, Result}; pub use provider::BindingsProvider; +#[cfg(feature = "platform-sdk")] +pub use remote::{RemoteBindings, RemoteStorage}; pub use traits::{ ArtifactRegistry, ArtifactRegistryCredentials, ArtifactRegistryPermissions, AwsServiceAccountInfo, AzureServiceAccountInfo, Binding, BindingsProviderApi, Build, Container, @@ -25,6 +27,8 @@ mod credential_source; pub mod http_client; pub mod provider; mod refreshing; +#[cfg(feature = "platform-sdk")] +mod remote; /// Gets the current platform from the ALIEN_DEPLOYMENT_TYPE environment variable. /// This is used by the runtime to determine which platform-specific implementations to use. diff --git a/crates/alien-bindings/src/provider.rs b/crates/alien-bindings/src/provider.rs index 4a9c7a72e..2d69a56e3 100644 --- a/crates/alien-bindings/src/provider.rs +++ b/crates/alien-bindings/src/provider.rs @@ -341,124 +341,6 @@ impl BindingsProvider { Self::new(client_config, bindings) } - - /// Pattern 2: Creates a BindingsProvider for remote deployment access. - /// - /// Fetches credentials remotely using deployment ID and auth token, then creates the provider. - /// - /// **When to use:** You have a deployment ID and auth token, but no credentials yet. - /// - /// **Example use cases:** - /// - CLI commands (e.g., `alien secrets set`) - /// - External applications connecting to deployment - /// - Local development tools - /// - /// **What it does internally:** - /// 1. GET /api/deployments/{id} - Returns deployment info (stackState, platform, managerId) - /// 2. GET /api/managers/{managerId} - Returns manager URL - /// 3. POST {managerUrl}/v1/deployment/resolve-credentials - Resolves credentials - /// 4. Creates BindingsProvider using from_stack_state() - #[cfg(feature = "platform-sdk")] - pub async fn for_remote_deployment( - deployment_id: &str, - token: &str, - api_base_url: Option<&str>, - ) -> Result { - let base_url = api_base_url.unwrap_or("https://api.alien.dev"); - - // Build an authenticated SDK client so deployment/manager lookups are - // scoped to the caller's permissions. - let auth_value = format!("Bearer {}", token); - let mut headers = reqwest::header::HeaderMap::new(); - headers.insert( - reqwest::header::AUTHORIZATION, - reqwest::header::HeaderValue::from_str(&auth_value) - .into_alien_error() - .context(ErrorData::RemoteAccessFailed { - operation: "build Platform API client with token".to_string(), - })?, - ); - - let authed_http_client = reqwest::Client::builder() - .default_headers(headers) - .build() - .into_alien_error() - .context(ErrorData::RemoteAccessFailed { - operation: "build Platform API HTTP client".to_string(), - })?; - - let sdk_client = alien_platform_api::Client::new_with_client(base_url, authed_http_client); - - // 1. Get deployment info (caller-scoped) - let deployment_response = sdk_client - .get_deployment() - .id(deployment_id) - .send() - .await - .into_alien_error() - .context(ErrorData::RemoteAccessFailed { - operation: "fetch deployment from Platform API".to_string(), - })? - .into_inner(); - - // 2. Get manager URL (caller-scoped) - let manager_id = deployment_response.manager_id; - - let manager_response = sdk_client - .get_manager() - .id(&manager_id.to_string()) - .send() - .await - .into_alien_error() - .context(ErrorData::RemoteAccessFailed { - operation: "fetch manager from Platform API".to_string(), - })? - .into_inner(); - - // 3. Convert SDK stack state to alien-core StackState (used locally to extract - // binding configuration; the manager re-fetches the canonical stack state itself - // when resolving credentials). - let stack_state = deployment_response.stack_state.as_ref().ok_or_else(|| { - AlienError::new(ErrorData::RemoteAccessFailed { - operation: "Deployment has no stack state (not deployed yet)".to_string(), - }) - })?; - - let alien_stack_state = conversions::convert_stack_state(stack_state)?; - - // 4. Resolve client config from manager. We send only the deploymentId; the - // manager fetches stackState/platform from Platform API using our forwarded - // bearer token so an attacker cannot direct it at an arbitrary cloud identity. - let manager_url = manager_response.url.ok_or_else(|| { - AlienError::new(ErrorData::RemoteAccessFailed { - operation: "fetch manager URL from Platform API".to_string(), - }) - })?; - - let http_client = reqwest::Client::new(); - let client_config = http_client - .post(format!("{}/v1/deployment/resolve-credentials", manager_url)) - .bearer_auth(token) - .json(&serde_json::json!({ - "deploymentId": deployment_id, - })) - .send() - .await - .into_alien_error() - .context(ErrorData::RemoteAccessFailed { - operation: "resolve credentials from manager".to_string(), - })? - .json::() - .await - .into_alien_error() - .context(ErrorData::RemoteAccessFailed { - operation: "parse credentials response".to_string(), - })? - .client_config; - - // 5. Create provider using from_stack_state (which extracts bindings from stack_state) - Self::from_stack_state(&alien_stack_state, client_config) - } } impl LazyEnvBindingsProvider { @@ -599,13 +481,6 @@ impl BindingsProviderApi for LazyEnvBindingsProvider { } } -#[cfg(feature = "platform-sdk")] -#[derive(serde::Deserialize)] -#[serde(rename_all = "camelCase")] -struct ResolveCredentialsResponse { - client_config: ClientConfig, -} - #[async_trait] impl BindingsProviderApi for BindingsProvider { async fn load_storage(&self, binding_name: &str) -> Result> { @@ -2185,31 +2060,3 @@ mod tests { } } } - -/// Conversion functions between SDK types and alien-core types -#[cfg(feature = "platform-sdk")] -mod conversions { - use super::*; - use serde::Serialize; - - /// Convert SDK AgentStackState to alien-core StackState - /// Generic over any serializable type since we convert via JSON - pub fn convert_stack_state(sdk_stack_state: &T) -> Result { - // Convert via JSON serialization/deserialization (same pattern as deploy.rs) - let stack_state: StackState = serde_json::from_value( - serde_json::to_value(sdk_stack_state) - .into_alien_error() - .context(ErrorData::config_invalid( - "stack_state", - "Failed to serialize SDK stack state", - ))?, - ) - .into_alien_error() - .context(ErrorData::config_invalid( - "stack_state", - "Failed to parse stack state", - ))?; - - Ok(stack_state) - } -} diff --git a/crates/alien-bindings/src/providers/storage/credential_bridge.rs b/crates/alien-bindings/src/providers/storage/credential_bridge.rs index 029c70f93..545e07f11 100644 --- a/crates/alien-bindings/src/providers/storage/credential_bridge.rs +++ b/crates/alien-bindings/src/providers/storage/credential_bridge.rs @@ -178,13 +178,24 @@ mod azure { } } - let token = self - .config - .get_bearer_token_with_scope("https://storage.azure.com/.default") - .await - .map_err(|e| to_object_store_error("AzureBlob", e))?; - - let credential = Arc::new(AzureCredential::BearerToken(token)); + let credential = match &self.config.credentials { + alien_core::AzureCredentials::SasToken { query_parameters } => { + Arc::new(AzureCredential::SASToken( + query_parameters + .iter() + .map(|(name, value)| (name.clone(), value.clone())) + .collect(), + )) + } + _ => { + let token = self + .config + .get_bearer_token_with_scope("https://storage.azure.com/.default") + .await + .map_err(|e| to_object_store_error("AzureBlob", e))?; + Arc::new(AzureCredential::BearerToken(token)) + } + }; *cache = Some(CachedCredential { credential: Arc::clone(&credential), expires_at: Instant::now() + CACHE_TTL, diff --git a/crates/alien-bindings/src/refreshing.rs b/crates/alien-bindings/src/refreshing.rs index 4ae1eb2d7..3d5f1def2 100644 --- a/crates/alien-bindings/src/refreshing.rs +++ b/crates/alien-bindings/src/refreshing.rs @@ -1,10 +1,10 @@ //! App-facing binding handles that keep minted credentials fresh. //! -//! Each operation re-enters [`LazyEnvBindingsProvider`]. Static/native -//! providers and fresh minted providers remain cheap cache hits; a minted -//! provider inside its refresh window is rebuilt once by `MintingResolver`'s -//! existing single-flight path. The resolved provider is held for the full -//! operation so credential rotation cannot swap it midway through a request. +//! Each operation re-enters the configured [`BindingsProviderApi`]. Static or +//! fresh providers remain cheap cache hits; short-lived providers inside their +//! refresh window are rebuilt through their single-flight path. The resolved +//! provider is held for the full operation so credential rotation cannot swap +//! it midway through a request. //! //! Methods that return an owned stream or multipart-upload session refresh //! before creating it. An already-returned opaque stream/session remains bound @@ -30,7 +30,8 @@ use url::Url; use crate::error::{ErrorData, Result}; use crate::presigned::PresignedRequest; -use crate::provider::LazyEnvBindingsProvider; +#[cfg(feature = "platform-sdk")] +use crate::remote::RemoteStorage; use crate::traits::{ Binding, BindingsProviderApi, Kv, MessagePayload, PutOptions as KvPutOptions, Queue, QueueMessage, ScanResult, Storage, Vault, @@ -38,24 +39,40 @@ use crate::traits::{ const OBJECT_STORE_NAME: &str = "Alien binding"; +/// The smallest provider surface needed by a refreshable Storage handle. +/// +/// Environment-backed providers implement the full bindings API and receive +/// this implementation automatically. Remote bindings implement only this +/// trait, so unsupported binding kinds cannot leak into their public surface. +#[async_trait] +pub(super) trait StorageProviderApi: Send + Sync + fmt::Debug { + async fn load_storage(&self, binding_name: &str) -> Result>; +} + +#[async_trait] +impl StorageProviderApi for T +where + T: BindingsProviderApi + Send + Sync + fmt::Debug, +{ + async fn load_storage(&self, binding_name: &str) -> Result> { + BindingsProviderApi::load_storage(self, binding_name).await + } +} + #[derive(Debug, Clone)] struct Resolver { - provider: Arc, + provider: Arc, binding_name: String, } impl Resolver { - fn new(provider: Arc, binding_name: String) -> Self { + fn new(provider: Arc, binding_name: String) -> Self { Self { provider, binding_name, } } - async fn storage(&self) -> Result> { - self.provider.load_storage(&self.binding_name).await - } - async fn kv(&self) -> Result> { self.provider.load_kv(&self.binding_name).await } @@ -79,7 +96,8 @@ fn object_store_error(source: AlienError) -> object_store::Error { /// Storage handle that resolves a fresh-enough provider for every operation. #[derive(Debug, Clone)] pub(super) struct RefreshingStorage { - resolver: Resolver, + provider: Arc, + binding_name: String, /// Storage topology does not change when credentials rotate. Capture it /// from the initially validated handle for the trait's synchronous calls, /// without retaining that handle's eventually stale credential client. @@ -89,27 +107,31 @@ pub(super) struct RefreshingStorage { impl RefreshingStorage { pub(super) fn new( - provider: Arc, + provider: Arc, binding_name: String, initial: Arc, ) -> Self { let base_dir = initial.get_base_dir(); let url = initial.get_url(); Self { - resolver: Resolver::new(provider, binding_name), + provider, + binding_name, base_dir, url, } } async fn current(&self) -> object_store::Result> { - self.resolver.storage().await.map_err(object_store_error) + self.provider + .load_storage(&self.binding_name) + .await + .map_err(object_store_error) } } impl fmt::Display for RefreshingStorage { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "Alien storage binding '{}'", self.resolver.binding_name) + write!(f, "Alien storage binding '{}'", self.binding_name) } } @@ -126,16 +148,16 @@ impl Storage for RefreshingStorage { } async fn presigned_put(&self, path: &Path, expires_in: Duration) -> Result { - self.resolver - .storage() + self.provider + .load_storage(&self.binding_name) .await? .presigned_put(path, expires_in) .await } async fn presigned_get(&self, path: &Path, expires_in: Duration) -> Result { - self.resolver - .storage() + self.provider + .load_storage(&self.binding_name) .await? .presigned_get(path, expires_in) .await @@ -146,8 +168,8 @@ impl Storage for RefreshingStorage { path: &Path, expires_in: Duration, ) -> Result { - self.resolver - .storage() + self.provider + .load_storage(&self.binding_name) .await? .presigned_delete(path, expires_in) .await @@ -223,10 +245,14 @@ impl ObjectStore for RefreshingStorage { } fn list(&self, prefix: Option<&Path>) -> BoxStream<'static, object_store::Result> { - let resolver = self.resolver.clone(); + let provider = self.provider.clone(); + let binding_name = self.binding_name.clone(); let prefix = prefix.cloned(); stream::once(async move { - let storage = resolver.storage().await.map_err(object_store_error)?; + let storage = provider + .load_storage(&binding_name) + .await + .map_err(object_store_error)?; Ok::>, object_store::Error>( storage.list(prefix.as_ref()), ) @@ -240,11 +266,15 @@ impl ObjectStore for RefreshingStorage { prefix: Option<&Path>, offset: &Path, ) -> BoxStream<'static, object_store::Result> { - let resolver = self.resolver.clone(); + let provider = self.provider.clone(); + let binding_name = self.binding_name.clone(); let prefix = prefix.cloned(); let offset = offset.clone(); stream::once(async move { - let storage = resolver.storage().await.map_err(object_store_error)?; + let storage = provider + .load_storage(&binding_name) + .await + .map_err(object_store_error)?; Ok::>, object_store::Error>( storage.list_with_offset(prefix.as_ref(), &offset), ) @@ -274,6 +304,30 @@ impl ObjectStore for RefreshingStorage { } } +#[async_trait] +#[cfg(feature = "platform-sdk")] +impl RemoteStorage for RefreshingStorage { + async fn get(&self, path: &Path) -> object_store::Result { + ObjectStore::get(self, path).await + } + + async fn put(&self, path: &Path, payload: PutPayload) -> object_store::Result { + ObjectStore::put(self, path, payload).await + } + + async fn head(&self, path: &Path) -> object_store::Result { + ObjectStore::head(self, path).await + } + + async fn delete(&self, path: &Path) -> object_store::Result<()> { + ObjectStore::delete(self, path).await + } + + fn list(&self, prefix: Option<&Path>) -> BoxStream<'static, object_store::Result> { + ObjectStore::list(self, prefix) + } +} + /// Key-value handle that resolves a fresh-enough provider for every operation. #[derive(Debug)] pub(super) struct RefreshingKv { @@ -281,7 +335,7 @@ pub(super) struct RefreshingKv { } impl RefreshingKv { - pub(super) fn new(provider: Arc, binding_name: String) -> Self { + pub(super) fn new(provider: Arc, binding_name: String) -> Self { Self { resolver: Resolver::new(provider, binding_name), } @@ -329,7 +383,7 @@ pub(super) struct RefreshingQueue { } impl RefreshingQueue { - pub(super) fn new(provider: Arc, binding_name: String) -> Self { + pub(super) fn new(provider: Arc, binding_name: String) -> Self { Self { resolver: Resolver::new(provider, binding_name), } @@ -380,7 +434,7 @@ pub(super) struct RefreshingVault { } impl RefreshingVault { - pub(super) fn new(provider: Arc, binding_name: String) -> Self { + pub(super) fn new(provider: Arc, binding_name: String) -> Self { Self { resolver: Resolver::new(provider, binding_name), } diff --git a/crates/alien-bindings/src/remote.rs b/crates/alien-bindings/src/remote.rs new file mode 100644 index 000000000..c243ae87e --- /dev/null +++ b/crates/alien-bindings/src/remote.rs @@ -0,0 +1,635 @@ +//! Remote, resource-scoped binding resolution for app-facing clients. +//! +//! The Platform API discovers the deployment's assigned manager and mints a +//! short-lived, deployment-scoped manager capability. Binding topology and +//! short-lived cloud credentials come from that manager's resource resolver. + +use std::collections::HashMap; +use std::fmt; +use std::sync::Arc; + +use alien_error::{AlienError, Context, IntoAlienError}; +use async_trait::async_trait; +use chrono::{DateTime, Duration as ChronoDuration, Utc}; +use serde::Deserialize; +use tokio::sync::{Mutex, RwLock}; +use tracing::debug; + +use crate::error::{ErrorData, Result}; +use crate::provider::BindingsProvider; +use crate::refreshing::{RefreshingStorage, StorageProviderApi}; +use crate::traits::{BindingsProviderApi, Storage}; + +mod access; +mod manager_conversion; + +use access::{ManagerResolverKind, RemoteBindingSource}; + +#[cfg(test)] +use access::{ + authenticated_http_client, validate_manager_url, validate_platform_base_url, DiscoveredManager, + GeneratedManagerBindingResolver, ManagerBindingResolver, +}; + +const INITIAL_REFRESH_RETRY_DELAY_SECONDS: i64 = 5; +const MAX_REFRESH_RETRY_DELAY_SECONDS: i64 = 30; +const MAX_REFRESH_SKEW_SECONDS: i64 = 300; + +trait Clock: Send + Sync + fmt::Debug { + fn now(&self) -> DateTime; +} + +#[derive(Debug)] +struct SystemClock; + +impl Clock for SystemClock { + fn now(&self) -> DateTime { + Utc::now() + } +} + +/// App-facing provider for resource-scoped remote Storage bindings. +/// +/// The bearer token and all returned client configurations are deliberately +/// omitted from `Debug` output. +pub(crate) struct RemoteBindingsProvider { + source: Arc, + resolvers: RwLock>>, + clock: Arc, +} + +impl fmt::Debug for RemoteBindingsProvider { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("RemoteBindingsProvider") + .field("source", &self.source) + .field("resolvers", &"") + .finish() + } +} + +impl RemoteBindingsProvider { + /// Discovers the deployment's assigned manager through the caller-scoped + /// Platform API and creates a lazy remote provider. + pub(crate) async fn for_remote_deployment( + deployment_id: &str, + token: &str, + api_base_url: Option<&str>, + ) -> Result { + Self::discover(deployment_id, token, api_base_url, Arc::new(SystemClock)).await + } + + async fn discover( + deployment_id: &str, + token: &str, + api_base_url: Option<&str>, + clock: Arc, + ) -> Result { + Self::discover_with_manager_resolver( + deployment_id, + token, + api_base_url, + clock, + ManagerResolverKind::Generated, + ) + .await + } + + #[cfg(test)] + async fn discover_local_fixture( + deployment_id: &str, + token: &str, + api_base_url: Option<&str>, + clock: Arc, + ) -> Result { + Self::discover_with_manager_resolver( + deployment_id, + token, + api_base_url, + clock, + ManagerResolverKind::LocalFixture, + ) + .await + } + + async fn discover_with_manager_resolver( + deployment_id: &str, + token: &str, + api_base_url: Option<&str>, + clock: Arc, + resolver_kind: ManagerResolverKind, + ) -> Result { + Ok(Self { + source: Arc::new( + RemoteBindingSource::discover( + deployment_id, + token, + api_base_url, + resolver_kind, + clock.clone(), + ) + .await?, + ), + resolvers: RwLock::new(HashMap::new()), + clock, + }) + } + + async fn resolver(&self, resource_id: &str) -> Arc { + if let Some(resolver) = self.resolvers.read().await.get(resource_id).cloned() { + return resolver; + } + + let mut resolvers = self.resolvers.write().await; + resolvers + .entry(resource_id.to_string()) + .or_insert_with(|| { + Arc::new(RemoteStorageResolver { + source: self.source.clone(), + resource_id: resource_id.to_string(), + state: RwLock::new(RemoteStorageState::default()), + refresh_lock: Mutex::new(()), + clock: self.clock.clone(), + }) + }) + .clone() + } +} + +#[async_trait] +impl StorageProviderApi for RemoteBindingsProvider { + async fn load_storage(&self, binding_name: &str) -> Result> { + self.resolver(binding_name).await.storage().await + } +} + +/// Resource-scoped remote Storage bindings for an existing deployment. +/// +/// This type intentionally exposes Storage only. Other binding kinds are not +/// part of the remote v0 contract and therefore cannot be requested. +#[derive(Debug)] +pub struct RemoteBindings { + provider: Arc, +} + +/// The complete remote Storage v0 operation surface. +/// +/// This intentionally does not extend [`Storage`] or `object_store::ObjectStore`: +/// copy, rename, multipart, range, and presigned-URL operations are not +/// authorized by the remote v0 contract and cannot be requested through this +/// trait. +#[async_trait] +pub trait RemoteStorage: Send + Sync + fmt::Debug { + async fn get( + &self, + path: &object_store::path::Path, + ) -> object_store::Result; + async fn put( + &self, + path: &object_store::path::Path, + payload: object_store::PutPayload, + ) -> object_store::Result; + async fn head( + &self, + path: &object_store::path::Path, + ) -> object_store::Result; + async fn delete(&self, path: &object_store::path::Path) -> object_store::Result<()>; + fn list( + &self, + prefix: Option<&object_store::path::Path>, + ) -> futures::stream::BoxStream<'static, object_store::Result>; +} + +impl RemoteBindings { + /// Discovers the deployment's assigned manager through the Platform API. + pub async fn for_deployment( + deployment_id: &str, + token: &str, + api_base_url: Option<&str>, + ) -> Result { + Ok(Self { + provider: Arc::new( + RemoteBindingsProvider::for_remote_deployment(deployment_id, token, api_base_url) + .await?, + ), + }) + } + + #[cfg(test)] + fn from_provider(provider: Arc) -> Self { + Self { provider } + } + + /// Loads a Storage binding and keeps its short-lived credential lease fresh. + pub async fn storage(&self, resource_id: &str) -> Result> { + let initial = self.provider.load_storage(resource_id).await?; + Ok(Arc::new(RefreshingStorage::new( + self.provider.clone(), + resource_id.to_string(), + initial, + ))) + } +} + +#[derive(Deserialize)] +#[serde(tag = "service", rename_all = "lowercase")] +enum ResolvedRemoteBinding { + S3 { + binding: alien_core::S3StorageBinding, + #[serde(rename = "clientConfig")] + client_config: Box, + #[serde(rename = "expiresAt")] + expires_at: DateTime, + }, + Blob { + binding: alien_core::BlobStorageBinding, + #[serde(rename = "clientConfig")] + client_config: Box, + #[serde(rename = "expiresAt")] + expires_at: DateTime, + }, + Gcs { + binding: alien_core::GcsStorageBinding, + #[serde(rename = "clientConfig")] + client_config: Box, + #[serde(rename = "expiresAt")] + expires_at: DateTime, + }, + #[cfg(test)] + #[serde(rename = "local-storage")] + Local { + binding: alien_core::LocalStorageBinding, + #[serde(rename = "clientConfig")] + client_config: TestLocalClientConfig, + #[serde(rename = "expiresAt")] + expires_at: DateTime, + }, +} + +#[cfg(test)] +#[derive(Deserialize)] +struct TestLocalClientConfig { + state_directory: String, +} + +impl ResolvedRemoteBinding { + fn into_provider_parts( + self, + ) -> Result<(alien_core::ClientConfig, serde_json::Value, DateTime)> { + let (client_config, binding, expires_at) = match self { + Self::S3 { + binding, + client_config, + expires_at, + } => { + validate_aws_remote_client_config(&client_config, expires_at)?; + ( + alien_core::ClientConfig::Aws(client_config), + alien_core::StorageBinding::S3(binding), + expires_at, + ) + } + Self::Blob { + binding, + client_config, + expires_at, + } => { + validate_azure_remote_client_config(&client_config)?; + ( + alien_core::ClientConfig::Azure(client_config), + alien_core::StorageBinding::Blob(binding), + expires_at, + ) + } + Self::Gcs { + binding, + client_config, + expires_at, + } => { + validate_gcp_remote_client_config(&client_config)?; + ( + alien_core::ClientConfig::Gcp(client_config), + alien_core::StorageBinding::Gcs(binding), + expires_at, + ) + } + #[cfg(test)] + Self::Local { + binding, + client_config, + expires_at, + } => ( + alien_core::ClientConfig::Local { + state_directory: client_config.state_directory, + }, + alien_core::StorageBinding::Local(binding), + expires_at, + ), + }; + let binding = serde_json::to_value(binding).into_alien_error().context( + ErrorData::RemoteAccessFailed { + operation: "convert typed remote Storage lease".to_string(), + }, + )?; + Ok((client_config, binding, expires_at)) + } +} + +fn invalid_remote_lease(provider: &str, reason: &str) -> AlienError { + AlienError::new(ErrorData::RemoteAccessFailed { + operation: format!("validate {provider} remote Storage credential lease: {reason}"), + }) +} + +fn validate_aws_remote_client_config( + config: &alien_core::AwsClientConfig, + lease_expires_at: DateTime, +) -> Result<()> { + if config.service_overrides.is_some() { + return Err(invalid_remote_lease( + "AWS", + "service endpoint overrides are forbidden", + )); + } + let alien_core::AwsCredentials::SessionCredentials { + access_key_id, + secret_access_key, + session_token, + expires_at, + } = &config.credentials + else { + return Err(invalid_remote_lease( + "AWS", + "short-lived session credentials are required", + )); + }; + if access_key_id.is_empty() || secret_access_key.is_empty() || session_token.is_empty() { + return Err(invalid_remote_lease( + "AWS", + "session credential fields must be nonempty", + )); + } + let credential_expires_at = DateTime::parse_from_rfc3339(expires_at) + .map_err(|_| invalid_remote_lease("AWS", "credential expiry is invalid"))? + .with_timezone(&Utc); + if credential_expires_at < lease_expires_at { + return Err(invalid_remote_lease( + "AWS", + "credential expires before its lease", + )); + } + Ok(()) +} + +fn validate_gcp_remote_client_config(config: &alien_core::GcpClientConfig) -> Result<()> { + let alien_core::GcpCredentials::AccessToken { token } = &config.credentials else { + return Err(invalid_remote_lease( + "GCP", + "one access token without service endpoint overrides is required", + )); + }; + if config.service_overrides.is_some() || token.is_empty() { + return Err(invalid_remote_lease( + "GCP", + "one nonempty access token without service endpoint overrides is required", + )); + } + Ok(()) +} + +fn validate_azure_remote_client_config(config: &alien_core::AzureClientConfig) -> Result<()> { + if config.service_overrides.is_some() { + return Err(invalid_remote_lease( + "Azure", + "service endpoint overrides are forbidden", + )); + } + let alien_core::AzureCredentials::SasToken { query_parameters } = &config.credentials else { + return Err(invalid_remote_lease( + "Azure", + "an exact container SAS is required", + )); + }; + const REQUIRED_PARAMETERS: [&str; 13] = [ + "sp", "st", "se", "skoid", "sktid", "skt", "ske", "sks", "skv", "spr", "sv", "sr", "sig", + ]; + if query_parameters.len() != REQUIRED_PARAMETERS.len() + || REQUIRED_PARAMETERS.iter().any(|name| { + !query_parameters + .get(*name) + .is_some_and(|value| !value.is_empty()) + }) + || query_parameters.get("sp").map(String::as_str) != Some("rcwdl") + || query_parameters.get("spr").map(String::as_str) != Some("https") + || query_parameters.get("sr").map(String::as_str) != Some("c") + || query_parameters.get("sks").map(String::as_str) != Some("b") + { + return Err(invalid_remote_lease( + "Azure", + "the credential must contain only one exact container SAS", + )); + } + Ok(()) +} + +struct CachedRemoteBinding { + provider: Arc, + refresh_at: DateTime, + expires_at: DateTime, +} + +#[derive(Default)] +struct RemoteStorageState { + cache: Option, + generation: u64, + last_refresh_error: Option>, + retryable_failure_count: u32, + retry_not_before: Option>, +} + +impl RemoteStorageState { + fn fresh(&self, now: DateTime) -> Option> { + self.cache + .as_ref() + .and_then(|cached| (now < cached.refresh_at).then(|| cached.provider.clone())) + } + + fn unexpired(&self, now: DateTime) -> Option> { + self.cache + .as_ref() + .and_then(|cached| (now < cached.expires_at).then(|| cached.provider.clone())) + } + + fn cooldown_result(&self, now: DateTime) -> Option>> { + if !self.retry_not_before.is_some_and(|retry_at| now < retry_at) { + return None; + } + let error = self.last_refresh_error.as_ref()?.clone(); + Some(self.unexpired(now).ok_or(error)) + } + + fn record_success(&mut self, cache: CachedRemoteBinding) -> Arc { + let provider = cache.provider.clone(); + self.cache = Some(cache); + self.last_refresh_error = None; + self.retryable_failure_count = 0; + self.retry_not_before = None; + provider + } + + fn record_failure(&mut self, error: AlienError, now: DateTime) { + if error.retryable { + self.retryable_failure_count = self.retryable_failure_count.saturating_add(1); + let retry_at = now + refresh_retry_delay(self.retryable_failure_count); + self.retry_not_before = Some(match self.cache.as_ref() { + Some(cache) if cache.expires_at > now => retry_at.min(cache.expires_at), + _ => retry_at, + }); + } else { + self.retryable_failure_count = 0; + self.retry_not_before = None; + } + self.last_refresh_error = Some(error); + } +} + +fn refresh_retry_delay(failure_count: u32) -> ChronoDuration { + let multiplier = 2_i64.saturating_pow(failure_count.saturating_sub(1)); + let seconds = INITIAL_REFRESH_RETRY_DELAY_SECONDS + .saturating_mul(multiplier) + .min(MAX_REFRESH_RETRY_DELAY_SECONDS); + ChronoDuration::seconds(seconds) +} + +struct RemoteStorageResolver { + source: Arc, + resource_id: String, + state: RwLock, + refresh_lock: Mutex<()>, + clock: Arc, +} + +impl fmt::Debug for RemoteStorageResolver { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("RemoteStorageResolver") + .field("source", &self.source) + .field("resource_id", &self.resource_id) + .field("cache", &"") + .finish() + } +} + +impl RemoteStorageResolver { + async fn storage(&self) -> Result> { + BindingsProviderApi::load_storage(&*self.provider().await?, &self.resource_id).await + } + + async fn provider(&self) -> Result> { + let now = self.clock.now(); + let observed_generation = { + let state = self.state.read().await; + if let Some(provider) = state.fresh(now) { + return Ok(provider); + } + if let Some(result) = state.cooldown_result(now) { + return result; + } + state.generation + }; + + let _flight = self.refresh_lock.lock().await; + let now = self.clock.now(); + { + let state = self.state.read().await; + if let Some(provider) = state.fresh(now) { + return Ok(provider); + } + if let Some(result) = state.cooldown_result(now) { + return result; + } + if state.generation != observed_generation { + if let Some(error) = state.last_refresh_error.clone() { + if error.retryable { + if let Some(provider) = state.unexpired(now) { + return Ok(provider); + } + } + return Err(error); + } + if let Some(provider) = state.unexpired(now) { + return Ok(provider); + } + } + } + + let result = self.source.resolve(&self.resource_id).await; + let now = self.clock.now(); + let result = match result { + Ok(resolved) => self.build_cache_entry(resolved, now).await, + Err(error) => Err(error), + }; + let mut state = self.state.write().await; + state.generation = state.generation.wrapping_add(1); + + match result { + Ok(cache) => { + let provider = state.record_success(cache); + Ok(provider) + } + Err(error) if error.retryable => { + state.record_failure(error.clone(), now); + if let Some(provider) = state.unexpired(now) { + debug!( + deployment_id = %self.source.deployment_id, + resource_id = %self.resource_id, + "Remote binding refresh failed before lease expiry; using cached credentials" + ); + Ok(provider) + } else { + Err(error) + } + } + Err(error) => { + state.record_failure(error.clone(), now); + Err(error) + } + } + } + + async fn build_cache_entry( + &self, + resolved: ResolvedRemoteBinding, + now: DateTime, + ) -> Result { + let (client_config, binding, expires_at) = resolved.into_provider_parts()?; + if expires_at <= now { + return Err(AlienError::new(ErrorData::RemoteAccessFailed { + operation: format!( + "manager returned an expired lease for Storage binding '{}'", + self.resource_id + ), + })); + } + + let provider = Arc::new(BindingsProvider::new( + client_config, + HashMap::from([(self.resource_id.clone(), binding)]), + )?); + // Validate the typed binding and provider feature before committing the + // lease. An invalid response must not poison the cache until expiry. + BindingsProviderApi::load_storage(&*provider, &self.resource_id).await?; + let lifetime = expires_at - now; + let refresh_skew = std::cmp::min( + ChronoDuration::seconds(MAX_REFRESH_SKEW_SECONDS), + lifetime / 5, + ); + Ok(CachedRemoteBinding { + provider, + refresh_at: expires_at - refresh_skew, + expires_at, + }) + } +} + +#[cfg(test)] +#[path = "remote/tests.rs"] +mod tests; diff --git a/crates/alien-bindings/src/remote/access.rs b/crates/alien-bindings/src/remote/access.rs new file mode 100644 index 000000000..9b2e3ecf5 --- /dev/null +++ b/crates/alien-bindings/src/remote/access.rs @@ -0,0 +1,473 @@ +use std::fmt; +use std::net::IpAddr; +use std::sync::Arc; +use std::time::Duration; + +use alien_error::{AlienError, Context, ContextError, GenericError, IntoAlienError}; +use alien_manager_api::SdkResultExtReadingBody; +use alien_platform_api::SdkResultExt; +use async_trait::async_trait; +use chrono::{DateTime, Duration as ChronoDuration, Utc}; +use tokio::sync::{Mutex, RwLock}; + +use super::{Clock, ResolvedRemoteBinding}; +use crate::error::{ErrorData, Result}; + +const DEFAULT_PLATFORM_API_URL: &str = "https://api.alien.dev"; +const MANAGER_ACCESS_MAX_AGE_SECONDS: i64 = 300; +const MANAGER_TOKEN_REFRESH_SKEW_SECONDS: i64 = 30; +const REMOTE_REQUEST_TIMEOUT: Duration = Duration::from_secs(30); + +pub(super) struct RemoteBindingSource { + pub(super) deployment_id: String, + platform: alien_platform_api::Client, + manager: RwLock, + manager_refresh_lock: Mutex<()>, + allow_insecure_manager_url: bool, + manager_resolver: Arc, + clock: Arc, +} + +pub(super) enum ManagerResolverKind { + Generated, + #[cfg(test)] + LocalFixture, +} + +#[async_trait] +pub(super) trait ManagerBindingResolver: Send + Sync + fmt::Debug { + async fn resolve( + &self, + manager: &DiscoveredManager, + deployment_id: &str, + resource_id: &str, + ) -> Result; +} + +#[derive(Debug)] +pub(super) struct GeneratedManagerBindingResolver; + +#[derive(Clone)] +pub(super) struct DiscoveredManager { + pub(super) url: reqwest::Url, + pub(super) http: reqwest::Client, + pub(super) refresh_at: DateTime, + pub(super) generation: u64, +} + +impl fmt::Debug for DiscoveredManager { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("DiscoveredManager") + .field("url", &"") + .field("credentials", &"") + .field("refresh_at", &self.refresh_at) + .field("generation", &self.generation) + .finish() + } +} + +impl fmt::Debug for RemoteBindingSource { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("RemoteBindingSource") + .field("deployment_id", &self.deployment_id) + .field("manager", &"") + .finish() + } +} + +impl RemoteBindingSource { + pub(super) async fn discover( + deployment_id: &str, + platform_token: &str, + api_base_url: Option<&str>, + resolver_kind: ManagerResolverKind, + clock: Arc, + ) -> Result { + let base_url = api_base_url.unwrap_or(DEFAULT_PLATFORM_API_URL); + let allow_insecure_manager_url = match api_base_url { + Some(base_url) => validate_platform_base_url(base_url)?, + None => false, + }; + let platform_http = authenticated_http_client(platform_token, "Platform API")?; + let platform = alien_platform_api::Client::new_with_client(base_url, platform_http); + let manager_resolver: Arc = match resolver_kind { + ManagerResolverKind::Generated => Arc::new(GeneratedManagerBindingResolver), + #[cfg(test)] + ManagerResolverKind::LocalFixture => Arc::new(LocalFixtureManagerBindingResolver), + }; + let manager = discover_manager_access( + &platform, + deployment_id, + allow_insecure_manager_url, + clock.as_ref(), + 0, + ) + .await?; + + Ok(Self { + deployment_id: deployment_id.to_string(), + platform, + manager: RwLock::new(manager), + manager_refresh_lock: Mutex::new(()), + allow_insecure_manager_url, + manager_resolver, + clock, + }) + } + + async fn manager_access(&self) -> Result { + let now = self.clock.now(); + { + let manager = self.manager.read().await; + if now < manager.refresh_at { + return Ok(manager.clone()); + } + } + + let _refresh = self.manager_refresh_lock.lock().await; + let now = self.clock.now(); + { + let manager = self.manager.read().await; + if now < manager.refresh_at { + return Ok(manager.clone()); + } + } + + self.refresh_manager_access_locked().await + } + + async fn refresh_manager_access_locked(&self) -> Result { + let next_generation = self.manager.read().await.generation.wrapping_add(1); + let manager = discover_manager_access( + &self.platform, + &self.deployment_id, + self.allow_insecure_manager_url, + self.clock.as_ref(), + next_generation, + ) + .await?; + *self.manager.write().await = manager.clone(); + Ok(manager) + } + + async fn refresh_after_rejection(&self, observed_generation: u64) -> Result { + let _refresh = self.manager_refresh_lock.lock().await; + { + let manager = self.manager.read().await; + if manager.generation != observed_generation { + return Ok(manager.clone()); + } + } + self.refresh_manager_access_locked().await + } + + pub(super) async fn resolve(&self, resource_id: &str) -> Result { + let manager = self.manager_access().await?; + match self + .manager_resolver + .resolve(&manager, &self.deployment_id, resource_id) + .await + { + Ok(binding) => Ok(binding), + Err(error) if is_auth_or_assignment_rejection(&error) => { + let manager = self.refresh_after_rejection(manager.generation).await?; + self.manager_resolver + .resolve(&manager, &self.deployment_id, resource_id) + .await + } + Err(error) => Err(error), + } + } +} + +#[async_trait] +impl ManagerBindingResolver for GeneratedManagerBindingResolver { + async fn resolve( + &self, + manager: &DiscoveredManager, + deployment_id: &str, + resource_id: &str, + ) -> Result { + let manager_client = alien_manager_api::Client::new_with_client( + manager.url.as_str().trim_end_matches('/'), + manager.http.clone(), + ); + let response = manager_client + .resolve_binding() + .body(alien_manager_api::types::ResolveBindingRequest { + deployment_id: deployment_id.to_string(), + resource_id: resource_id.to_string(), + }) + .send() + .await + .into_sdk_error_reading_body() + .await + .map_err(into_remote_error)? + .into_inner(); + + ResolvedRemoteBinding::from_manager_response(response, resource_id) + } +} + +/// Test-only adapter for typed local leases. Local is deliberately absent from +/// the hosted API contract; cache tests inject this adapter explicitly instead +/// of changing the production generated-client path. +#[cfg(test)] +#[derive(Debug)] +struct LocalFixtureManagerBindingResolver; + +#[cfg(test)] +#[async_trait] +impl ManagerBindingResolver for LocalFixtureManagerBindingResolver { + async fn resolve( + &self, + manager: &DiscoveredManager, + deployment_id: &str, + resource_id: &str, + ) -> Result { + let url = manager + .url + .join("v1/bindings/resolve") + .into_alien_error() + .context(ErrorData::RemoteAccessFailed { + operation: "build remote binding fixture URL".to_string(), + })?; + let response = manager + .http + .post(url) + .json(&serde_json::json!({ + "deploymentId": deployment_id, + "resourceId": resource_id, + })) + .send() + .await + .into_alien_error() + .context(ErrorData::RemoteAccessFailed { + operation: format!("resolve remote Storage binding '{resource_id}'"), + })?; + if !response.status().is_success() { + return Err(test_fixture_http_error(response, resource_id).await); + } + response + .json() + .await + .into_alien_error() + .context(ErrorData::RemoteAccessFailed { + operation: format!("parse remote Storage binding '{resource_id}'"), + }) + } +} + +async fn discover_manager_access( + platform: &alien_platform_api::Client, + deployment_id: &str, + allow_insecure: bool, + clock: &dyn Clock, + generation: u64, +) -> Result { + let deployment = platform + .get_deployment() + .id(deployment_id) + .send() + .await + .into_sdk_error() + .map_err(into_remote_error)? + .into_inner(); + let requested_at = clock.now(); + let response = platform + .generate_manager_binding_token() + .id(deployment.manager_id.to_string()) + .body( + alien_platform_api::types::GenerateManagerBindingTokenRequest::builder() + .deployment_id(deployment_id), + ) + .send() + .await + .into_sdk_error() + .map_err(into_remote_error)? + .into_inner(); + + let expires_in = response.expires_in.ok_or_else(|| { + invalid_manager_access_response("binding token response omitted its expiry") + })?; + let lifetime_millis = positive_duration_millis(expires_in).ok_or_else(|| { + invalid_manager_access_response("binding token response has an invalid expiry") + })?; + if response.access_token.trim().is_empty() { + return Err(invalid_manager_access_response( + "binding token response returned an empty token", + )); + } + let manager_url = validate_manager_url(&response.manager_url, allow_insecure)?; + let http = authenticated_http_client(&response.access_token, "manager binding API")?; + let skew_millis = lifetime_millis + .saturating_div(5) + .min(MANAGER_TOKEN_REFRESH_SKEW_SECONDS * 1_000) + .max(1); + let refresh_delay_millis = lifetime_millis + .saturating_sub(skew_millis) + .min(MANAGER_ACCESS_MAX_AGE_SECONDS * 1_000); + + Ok(DiscoveredManager { + url: manager_url, + http, + refresh_at: requested_at + ChronoDuration::milliseconds(refresh_delay_millis), + generation, + }) +} + +fn positive_duration_millis(seconds: f64) -> Option { + let milliseconds = seconds * 1_000.0; + (seconds.is_finite() && seconds > 0.0 && milliseconds >= 1.0 && milliseconds <= i64::MAX as f64) + .then_some(milliseconds.floor() as i64) +} + +fn is_auth_or_assignment_rejection(error: &AlienError) -> bool { + matches!(error.http_status_code, Some(401 | 403 | 404)) +} + +pub(super) fn authenticated_http_client(token: &str, destination: &str) -> Result { + let mut headers = reqwest::header::HeaderMap::new(); + headers.insert( + reqwest::header::AUTHORIZATION, + reqwest::header::HeaderValue::from_str(&format!("Bearer {token}")) + .into_alien_error() + .context(ErrorData::RemoteAccessFailed { + operation: format!("build {destination} client with token"), + })?, + ); + reqwest::Client::builder() + .default_headers(headers) + .timeout(REMOTE_REQUEST_TIMEOUT) + .build() + .into_alien_error() + .context(ErrorData::RemoteAccessFailed { + operation: format!("build {destination} HTTP client"), + }) +} + +#[cfg(test)] +async fn test_fixture_http_error( + response: reqwest::Response, + resource_id: &str, +) -> AlienError { + let status = response.status(); + match response.json::>().await { + Ok(error) => into_remote_error(error), + Err(_) => { + let mut error = AlienError::new(ErrorData::RemoteAccessFailed { + operation: format!( + "resolve remote Storage binding '{resource_id}' (HTTP {status})" + ), + }); + error.retryable = alien_manager_api::is_retryable_http_status(status.as_u16()); + error.http_status_code = Some(status.as_u16()); + error + } + } +} + +pub(super) fn validate_manager_url(raw: &str, allow_insecure: bool) -> Result { + let url = reqwest::Url::parse(raw) + .into_alien_error() + .map_err(|error| remote_configuration_source_error(error, "parse assigned manager URL"))?; + let valid_scheme = + url.scheme() == "https" || (allow_insecure && url.scheme() == "http" && is_loopback(&url)); + if !valid_scheme + || !url.username().is_empty() + || url.password().is_some() + || url.query().is_some() + || url.fragment().is_some() + || url.path() != "/" + { + return Err(remote_configuration_error("validate assigned manager URL")); + } + Ok(url) +} + +/// Returns whether a caller-supplied Platform base URL may discover a local +/// HTTP manager. Production discovery is HTTPS-only; loopback HTTP exists for +/// local development and deterministic tests. +pub(super) fn validate_platform_base_url(raw: &str) -> Result { + let url = reqwest::Url::parse(raw) + .into_alien_error() + .map_err(|error| remote_configuration_source_error(error, "parse Platform API base URL"))?; + let allow_insecure = url.scheme() == "http" && is_loopback(&url); + let valid_scheme = url.scheme() == "https" || allow_insecure; + if !valid_scheme + || !url.username().is_empty() + || url.password().is_some() + || url.query().is_some() + || url.fragment().is_some() + { + return Err(remote_configuration_error("validate Platform API base URL")); + } + Ok(allow_insecure) +} + +fn invalid_manager_access_response(operation: &str) -> AlienError { + AlienError::new(ErrorData::RemoteAccessFailed { + operation: operation.to_string(), + }) +} + +fn remote_configuration_error(operation: &str) -> AlienError { + let mut error = AlienError::new(ErrorData::RemoteAccessFailed { + operation: operation.to_string(), + }); + error.retryable = false; + error.http_status_code = Some(400); + error +} + +fn remote_configuration_source_error( + source: AlienError, + operation: &str, +) -> AlienError { + let mut error = source.context(ErrorData::RemoteAccessFailed { + operation: operation.to_string(), + }); + error.retryable = false; + error.http_status_code = Some(400); + error +} + +fn is_loopback(url: &reqwest::Url) -> bool { + url.host_str().is_some_and(|host| { + host.eq_ignore_ascii_case("localhost") + || host + .parse::() + .is_ok_and(|address| address.is_loopback()) + }) +} + +fn into_remote_error(error: AlienError) -> AlienError { + AlienError { + code: error.code, + message: error.message, + context: error.context, + hint: error.hint, + retryable: error.retryable, + internal: error.internal, + http_status_code: error.http_status_code, + source: error.source, + human_layer_presentation: error.human_layer_presentation, + error: None, + } +} + +#[cfg(test)] +mod tests { + use super::positive_duration_millis; + + #[test] + fn binding_token_expiry_must_be_positive_finite_and_representable() { + assert_eq!(positive_duration_millis(300.0), Some(300_000)); + assert_eq!(positive_duration_millis(0.001), Some(1)); + for invalid in [f64::NAN, f64::INFINITY, f64::NEG_INFINITY, 0.0, -1.0] { + assert_eq!(positive_duration_millis(invalid), None); + } + assert_eq!(positive_duration_millis(0.0001), None); + assert_eq!(positive_duration_millis(f64::MAX), None); + } +} diff --git a/crates/alien-bindings/src/remote/manager_conversion.rs b/crates/alien-bindings/src/remote/manager_conversion.rs new file mode 100644 index 000000000..3b22cc5be --- /dev/null +++ b/crates/alien-bindings/src/remote/manager_conversion.rs @@ -0,0 +1,257 @@ +//! Explicit conversion from the generated manager SDK into binding domain types. +//! +//! Keep this boundary exhaustive: a manager schema change must fail compilation +//! until every new response or credential variant has an intentional mapping. + +use std::collections::HashMap; + +use alien_error::{Context, IntoAlienError}; +use alien_manager_api::types as manager_types; +use chrono::{DateTime, Utc}; + +use super::{invalid_remote_lease, ResolvedRemoteBinding}; +use crate::error::{ErrorData, Result}; + +const AZURE_REMOTE_STORAGE_PERMISSIONS: &str = "rcwdl"; + +impl ResolvedRemoteBinding { + pub(super) fn from_manager_response( + response: manager_types::ResolveBindingResponse, + resource_id: &str, + ) -> Result { + let lease = match response { + manager_types::ResolveBindingResponse::S3 { + binding, + client_config, + expires_at, + } => { + let manager_types::RemoteAwsCredentials::SessionCredentials { + access_key_id, + secret_access_key, + session_token, + expires_at: credential_expires_at, + } = client_config.credentials; + Self::S3 { + binding: alien_core::S3StorageBinding { + bucket_name: binding.bucket_name.into(), + }, + client_config: Box::new(alien_core::AwsClientConfig { + account_id: client_config.account_id, + region: client_config.region, + credentials: alien_core::AwsCredentials::SessionCredentials { + access_key_id, + secret_access_key, + session_token, + expires_at: credential_expires_at, + }, + service_overrides: None, + }), + expires_at: parse_manager_expiry(expires_at, resource_id)?, + } + } + manager_types::ResolveBindingResponse::Blob { + binding, + client_config, + expires_at, + } => { + let manager_types::RemoteAzureCredentials::ContainerSas(sas) = + client_config.credentials; + let expires_at = parse_manager_expiry(expires_at, resource_id)?; + let query_parameters = azure_sas_query_parameters( + sas, + &binding.account_name, + &binding.container_name, + expires_at, + resource_id, + )?; + let binding = alien_core::BlobStorageBinding { + account_name: binding.account_name.into(), + container_name: binding.container_name.into(), + }; + Self::Blob { + binding, + client_config: Box::new(alien_core::AzureClientConfig { + subscription_id: client_config.subscription_id, + tenant_id: client_config.tenant_id, + region: client_config.region, + credentials: alien_core::AzureCredentials::SasToken { query_parameters }, + service_overrides: None, + }), + expires_at, + } + } + manager_types::ResolveBindingResponse::Gcs { + binding, + client_config, + expires_at, + } => { + let manager_types::RemoteGcpCredentials::AccessToken(token) = + client_config.credentials; + Self::Gcs { + binding: alien_core::GcsStorageBinding { + bucket_name: binding.bucket_name.into(), + }, + client_config: Box::new(alien_core::GcpClientConfig { + project_id: client_config.project_id, + region: client_config.region, + credentials: alien_core::GcpCredentials::AccessToken { token }, + service_overrides: None, + project_number: client_config.project_number, + }), + expires_at: parse_manager_expiry(expires_at, resource_id)?, + } + } + }; + Ok(lease) + } +} + +fn parse_manager_expiry(expires_at: String, resource_id: &str) -> Result> { + parse_manager_timestamp(&expires_at, "credential lease expiry", resource_id) +} + +fn parse_manager_timestamp( + timestamp: &str, + field: &str, + resource_id: &str, +) -> Result> { + DateTime::parse_from_rfc3339(timestamp) + .into_alien_error() + .context(ErrorData::RemoteAccessFailed { + operation: format!("parse {field} for remote Storage binding '{resource_id}'"), + }) + .map(|expires_at| expires_at.with_timezone(&Utc)) +} + +fn azure_sas_query_parameters( + sas: manager_types::RemoteAzureContainerSas, + account_name: &str, + container_name: &str, + lease_expires_at: DateTime, + resource_id: &str, +) -> Result> { + if sas.account_name != account_name || sas.container_name != container_name { + return Err(invalid_remote_lease( + "Azure", + "SAS scope does not match the resolved Blob container", + )); + } + if sas.permissions != AZURE_REMOTE_STORAGE_PERMISSIONS + || sas.protocol != "https" + || sas.signed_resource != "c" + || sas.signed_key_service != "b" + { + return Err(invalid_remote_lease( + "Azure", + "SAS permissions or signed scope are not exact", + )); + } + if [ + &sas.signed_object_id, + &sas.signed_tenant_id, + &sas.signed_key_version, + &sas.service_version, + &sas.signature, + ] + .into_iter() + .any(|value| value.is_empty()) + { + return Err(invalid_remote_lease( + "Azure", + "SAS contains an empty required signed field", + )); + } + + let starts_at = parse_manager_timestamp(&sas.starts_at, "Azure SAS start", resource_id)?; + let expires_at = parse_manager_timestamp(&sas.expires_at, "Azure SAS expiry", resource_id)?; + let signed_key_start = parse_manager_timestamp( + &sas.signed_key_start, + "Azure SAS signed-key start", + resource_id, + )?; + let signed_key_expiry = parse_manager_timestamp( + &sas.signed_key_expiry, + "Azure SAS signed-key expiry", + resource_id, + )?; + if starts_at >= expires_at + || expires_at < lease_expires_at + || signed_key_start > starts_at + || signed_key_expiry < expires_at + { + return Err(invalid_remote_lease( + "Azure", + "SAS or signed-key lifetime does not cover the credential lease", + )); + } + + Ok(HashMap::from([ + ("sp".to_string(), sas.permissions), + ("st".to_string(), sas.starts_at), + ("se".to_string(), sas.expires_at), + ("skoid".to_string(), sas.signed_object_id), + ("sktid".to_string(), sas.signed_tenant_id), + ("skt".to_string(), sas.signed_key_start), + ("ske".to_string(), sas.signed_key_expiry), + ("sks".to_string(), sas.signed_key_service), + ("skv".to_string(), sas.signed_key_version), + ("spr".to_string(), sas.protocol), + ("sv".to_string(), sas.service_version), + ("sr".to_string(), sas.signed_resource), + ("sig".to_string(), sas.signature), + ])) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn azure_sas_conversion_rejects_scope_and_lifetime_drift_without_leaking_signature() { + let lease_expires_at = DateTime::parse_from_rfc3339("2030-01-01T01:00:00Z") + .unwrap() + .with_timezone(&Utc); + + let mut wrong_container = valid_azure_sas(); + wrong_container.container_name = "another-container".to_string(); + assert_rejected_sas(wrong_container, lease_expires_at); + + let mut wrong_permissions = valid_azure_sas(); + wrong_permissions.permissions = "rl".to_string(); + assert_rejected_sas(wrong_permissions, lease_expires_at); + + let mut short_lived = valid_azure_sas(); + short_lived.expires_at = "2030-01-01T00:59:59Z".to_string(); + assert_rejected_sas(short_lived, lease_expires_at); + } + + fn assert_rejected_sas( + sas: manager_types::RemoteAzureContainerSas, + lease_expires_at: DateTime, + ) { + let error = + azure_sas_query_parameters(sas, "account", "container", lease_expires_at, "files") + .expect_err("invalid Azure SAS must fail closed"); + assert!(!format!("{error:?}").contains("SENTINEL_SAS_SIGNATURE")); + } + + fn valid_azure_sas() -> manager_types::RemoteAzureContainerSas { + manager_types::RemoteAzureContainerSas { + account_name: "account".to_string(), + container_name: "container".to_string(), + expires_at: "2030-01-01T01:00:00Z".to_string(), + permissions: "rcwdl".to_string(), + protocol: "https".to_string(), + service_version: "2023-11-03".to_string(), + signature: "SENTINEL_SAS_SIGNATURE".to_string(), + signed_key_expiry: "2030-01-01T02:00:00Z".to_string(), + signed_key_service: "b".to_string(), + signed_key_start: "2029-12-31T23:50:00Z".to_string(), + signed_key_version: "2023-11-03".to_string(), + signed_object_id: "object-id".to_string(), + signed_resource: "c".to_string(), + signed_tenant_id: "tenant-id".to_string(), + starts_at: "2029-12-31T23:55:00Z".to_string(), + } + } +} diff --git a/crates/alien-bindings/src/remote/tests.rs b/crates/alien-bindings/src/remote/tests.rs new file mode 100644 index 000000000..db3aacde1 --- /dev/null +++ b/crates/alien-bindings/src/remote/tests.rs @@ -0,0 +1,955 @@ +use std::net::SocketAddr; +use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; +use std::sync::{Mutex as StdMutex, RwLock as StdRwLock}; + +use axum::extract::{Path as AxumPath, State}; +use axum::http::{HeaderMap, StatusCode}; +use axum::response::{IntoResponse, Response}; +use axum::routing::{get, post}; +use axum::{Json, Router}; +use futures::future::join_all; +use object_store::path::Path; +use object_store::PutPayload; +use serde_json::json; +use tempfile::TempDir; + +use super::*; +use crate::RemoteBindings; + +const DEPLOYMENT_ID: &str = "dep_aaaaaaaaaaaaaaaaaaaaaaaaaaaa"; +const MANAGER_ID: &str = "mgr_bbbbbbbbbbbbbbbbbbbbbbbbbbbb"; +const MANAGER_B_ID: &str = "mgr_ffffffffffffffffffffffffffff"; +const PROJECT_ID: &str = "prj_cccccccccccccccccccccccccccc"; +const DEPLOYMENT_GROUP_ID: &str = "dg_dddddddddddddddddddddddddddd"; +const WORKSPACE_ID: &str = "ws_eeeeeeeeeeeeeeeeeeeeeeee"; +const PLATFORM_TOKEN: &str = "platform-secret-token"; +const GENERATED_MANAGER_TOKEN: &str = "generated-manager-token"; + +#[derive(Clone)] +struct ManagerAssignment { + id: String, + url: String, + expected_token: Arc>, +} + +#[derive(Debug)] +struct ManualClock { + now: StdRwLock>, +} + +impl ManualClock { + fn new(now: DateTime) -> Self { + Self { + now: StdRwLock::new(now), + } + } + + fn set(&self, now: DateTime) { + *self.now.write().expect("manual clock write lock") = now; + } +} + +impl Clock for ManualClock { + fn now(&self) -> DateTime { + *self.now.read().expect("manual clock read lock") + } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +struct RecordedRequest { + method: String, + path: String, + authorization: Option, + body: Option, +} + +#[derive(Clone)] +struct PlatformFixtureState { + assignment: Arc>, + token_calls: Arc, + token_expires_in: Arc>>, + requests: Arc>>, +} + +#[derive(Clone)] +struct ManagerFixtureState { + calls: Arc, + fail: Arc, + failure_response: Arc>>, + invalid_binding: Arc, + expired_lease: Arc, + advance_clock_to: Arc>>>, + clock: Arc, + expires_at: Arc>>, + storage_path: String, + expected_token: Arc>, + requests: Arc>>, +} + +#[derive(Clone)] +enum FailureBody { + Json(serde_json::Value), + Text(String), +} + +#[derive(Clone)] +struct GeneratedContractState { + response: Arc>, + requests: Arc>>, +} + +struct Fixture { + api_url: String, + clock: Arc, + platform_requests: Arc>>, + assignment: Arc>, + token_calls: Arc, + token_expires_in: Arc>>, + manager: ManagerFixtureState, + _storage_directory: TempDir, +} + +impl Fixture { + async fn new(now: DateTime, expires_at: DateTime) -> Self { + let storage_directory = TempDir::new().expect("create fixture storage directory"); + let clock = Arc::new(ManualClock::new(now)); + let expected_token = Arc::new(StdRwLock::new("unminted-manager-token".to_string())); + let manager = ManagerFixtureState { + calls: Arc::new(AtomicUsize::new(0)), + fail: Arc::new(AtomicBool::new(false)), + failure_response: Arc::new(StdRwLock::new(None)), + invalid_binding: Arc::new(AtomicBool::new(false)), + expired_lease: Arc::new(AtomicBool::new(false)), + advance_clock_to: Arc::new(StdRwLock::new(None)), + clock: clock.clone(), + expires_at: Arc::new(StdRwLock::new(expires_at)), + storage_path: storage_directory.path().display().to_string(), + expected_token: expected_token.clone(), + requests: Arc::new(StdMutex::new(Vec::new())), + }; + let manager_url = spawn_manager_server(manager.clone()).await; + let assignment = Arc::new(StdRwLock::new(ManagerAssignment { + id: MANAGER_ID.to_string(), + url: manager_url, + expected_token, + })); + + let platform_requests = Arc::new(StdMutex::new(Vec::new())); + let token_calls = Arc::new(AtomicUsize::new(0)); + let token_expires_in = Arc::new(StdRwLock::new(Some(300.0))); + let api_url = spawn_platform_server(PlatformFixtureState { + assignment: assignment.clone(), + token_calls: token_calls.clone(), + token_expires_in: token_expires_in.clone(), + requests: platform_requests.clone(), + }) + .await; + + Self { + api_url, + clock, + platform_requests, + assignment, + token_calls, + token_expires_in, + manager, + _storage_directory: storage_directory, + } + } + + async fn remote_provider(&self) -> Arc { + Arc::new( + RemoteBindingsProvider::discover_local_fixture( + DEPLOYMENT_ID, + PLATFORM_TOKEN, + Some(&self.api_url), + self.clock.clone(), + ) + .await + .expect("discover assigned manager"), + ) + } + + fn set_manager_expiry(&self, expires_at: DateTime) { + *self + .manager + .expires_at + .write() + .expect("manager expiry write lock") = expires_at; + } + + fn fail_manager_with(&self, status: StatusCode, body: serde_json::Value) { + *self + .manager + .failure_response + .write() + .expect("manager failure response write lock") = + Some((status, FailureBody::Json(body))); + } + + fn fail_manager_with_text(&self, status: StatusCode, body: impl Into) { + *self + .manager + .failure_response + .write() + .expect("manager failure response write lock") = + Some((status, FailureBody::Text(body.into()))); + } + + fn advance_clock_during_next_resolve(&self, now: DateTime) { + *self + .manager + .advance_clock_to + .write() + .expect("manager clock advance write lock") = Some(now); + } + + fn assign_manager(&self, id: &str, url: String, expected_token: Arc>) { + *self + .assignment + .write() + .expect("manager assignment write lock") = ManagerAssignment { + id: id.to_string(), + url, + expected_token, + }; + } + + fn set_binding_token_expiry(&self, expires_in: Option) { + *self + .token_expires_in + .write() + .expect("binding token expiry write lock") = expires_in; + } +} + +async fn spawn_server(app: Router) -> String { + let listener = tokio::net::TcpListener::bind(SocketAddr::from(([127, 0, 0, 1], 0))) + .await + .expect("bind fixture server"); + let address = listener.local_addr().expect("read fixture server address"); + tokio::spawn(async move { + axum::serve(listener, app) + .await + .expect("serve HTTP fixture"); + }); + format!("http://{address}") +} + +async fn spawn_platform_server(state: PlatformFixtureState) -> String { + let app = Router::new() + .route("/v1/deployments/{id}", get(deployment_handler)) + .route( + "/v1/managers/{id}/binding-token", + post(binding_token_handler), + ) + .with_state(state); + spawn_server(app).await +} + +async fn spawn_manager_server(state: ManagerFixtureState) -> String { + let app = Router::new() + .route("/v1/bindings/resolve", post(resolve_handler)) + .with_state(state); + spawn_server(app).await +} + +async fn spawn_generated_contract_server(state: GeneratedContractState) -> String { + let app = Router::new() + .route("/v1/bindings/resolve", post(generated_contract_handler)) + .with_state(state); + spawn_server(app).await +} + +fn authorization(headers: &HeaderMap) -> Option { + headers + .get(reqwest::header::AUTHORIZATION) + .and_then(|value| value.to_str().ok()) + .map(str::to_string) +} + +async fn deployment_handler( + State(state): State, + AxumPath(id): AxumPath, + headers: HeaderMap, +) -> Response { + state + .requests + .lock() + .expect("platform requests lock") + .push(RecordedRequest { + method: "GET".to_string(), + path: format!("/v1/deployments/{id}"), + authorization: authorization(&headers), + body: None, + }); + let expected_authorization = format!("Bearer {PLATFORM_TOKEN}"); + if authorization(&headers).as_deref() != Some(expected_authorization.as_str()) { + return StatusCode::UNAUTHORIZED.into_response(); + } + if id != DEPLOYMENT_ID { + return StatusCode::NOT_FOUND.into_response(); + } + let manager_id = state + .assignment + .read() + .expect("manager assignment read lock") + .id + .clone(); + Json(json!({ + "id": DEPLOYMENT_ID, + "name": "remote-storage-test", + "status": "running", + "projectId": PROJECT_ID, + "platform": "local", + "deploymentProtocolVersion": 1, + "deploymentGroupId": DEPLOYMENT_GROUP_ID, + "stackSettings": {}, + "retryRequested": false, + "createdAt": "2026-01-01T00:00:00Z", + "updatedAt": "2026-01-01T00:00:00Z", + "managerId": manager_id, + "workspaceId": WORKSPACE_ID + })) + .into_response() +} + +async fn binding_token_handler( + State(state): State, + AxumPath(id): AxumPath, + headers: HeaderMap, + Json(body): Json, +) -> Response { + state + .requests + .lock() + .expect("platform requests lock") + .push(RecordedRequest { + method: "POST".to_string(), + path: format!("/v1/managers/{id}/binding-token"), + authorization: authorization(&headers), + body: Some(body.clone()), + }); + let expected_authorization = format!("Bearer {PLATFORM_TOKEN}"); + if authorization(&headers).as_deref() != Some(expected_authorization.as_str()) { + return StatusCode::UNAUTHORIZED.into_response(); + } + if body != json!({ "deploymentId": DEPLOYMENT_ID }) { + return StatusCode::BAD_REQUEST.into_response(); + } + let assignment = state + .assignment + .read() + .expect("manager assignment read lock") + .clone(); + if id != assignment.id { + return StatusCode::NOT_FOUND.into_response(); + } + let token_number = state.token_calls.fetch_add(1, Ordering::SeqCst) + 1; + let access_token = format!("manager-binding-token-{token_number}"); + *assignment + .expected_token + .write() + .expect("expected manager token write lock") = access_token.clone(); + let expires_in = *state + .token_expires_in + .read() + .expect("binding token expiry read lock"); + Json(json!({ + "accessToken": access_token, + "expiresIn": expires_in, + "tokenType": "Bearer", + "managerUrl": assignment.url, + "databaseId": null, + "controlPlaneUrl": null + })) + .into_response() +} + +async fn resolve_handler( + State(state): State, + headers: HeaderMap, + Json(body): Json, +) -> Response { + state.calls.fetch_add(1, Ordering::SeqCst); + state + .requests + .lock() + .expect("manager requests lock") + .push(RecordedRequest { + method: "POST".to_string(), + path: "/v1/bindings/resolve".to_string(), + authorization: authorization(&headers), + body: Some(body), + }); + let expected_authorization = format!( + "Bearer {}", + state + .expected_token + .read() + .expect("expected manager token read lock") + ); + if authorization(&headers).as_deref() != Some(expected_authorization.as_str()) { + return StatusCode::UNAUTHORIZED.into_response(); + } + if let Some(now) = state + .advance_clock_to + .write() + .expect("manager clock advance write lock") + .take() + { + state.clock.set(now); + } + if let Some((status, body)) = state + .failure_response + .read() + .expect("manager failure response read lock") + .clone() + { + return match body { + FailureBody::Json(body) => (status, Json(body)).into_response(), + FailureBody::Text(body) => (status, body).into_response(), + }; + } + if state.fail.load(Ordering::SeqCst) { + return StatusCode::SERVICE_UNAVAILABLE.into_response(); + } + + let expires_at = if state.expired_lease.load(Ordering::SeqCst) { + state.clock.now() - chrono::Duration::seconds(1) + } else { + *state.expires_at.read().expect("manager expiry read lock") + }; + let binding = if state.invalid_binding.load(Ordering::SeqCst) { + json!({ "service": "local-storage" }) + } else { + json!({ + "service": "local-storage", + "storagePath": state.storage_path, + }) + }; + let service = binding + .get("service") + .and_then(serde_json::Value::as_str) + .expect("fixture binding service") + .to_string(); + let mut binding = binding; + binding + .as_object_mut() + .expect("fixture binding object") + .remove("service"); + Json(json!({ + "service": service, + "binding": binding, + "clientConfig": { + "platform": "local", + "state_directory": state.storage_path, + }, + "expiresAt": expires_at.to_rfc3339(), + })) + .into_response() +} + +async fn generated_contract_handler( + State(state): State, + headers: HeaderMap, + Json(body): Json, +) -> Response { + state + .requests + .lock() + .expect("generated contract requests lock") + .push(RecordedRequest { + method: "POST".to_string(), + path: "/v1/bindings/resolve".to_string(), + authorization: authorization(&headers), + body: Some(body), + }); + let (status, body) = state + .response + .read() + .expect("generated contract response lock") + .clone(); + (status, Json(body)).into_response() +} + +fn at(second: i64) -> DateTime { + DateTime::parse_from_rfc3339("2030-01-01T00:00:00Z") + .expect("valid fixed timestamp") + .with_timezone(&Utc) + + ChronoDuration::seconds(second) +} + +#[path = "tests/manager_contract.rs"] +mod manager_contract; + +#[tokio::test] +async fn discovers_assigned_manager_and_caches_each_requested_storage() { + let fixture = Fixture::new(at(0), at(3600)).await; + let bindings = RemoteBindings::from_provider(fixture.remote_provider().await); + let bindings_debug = format!("{bindings:?}"); + assert!(bindings_debug.contains("")); + assert!(!bindings_debug.contains(PLATFORM_TOKEN)); + assert!(!bindings_debug.contains("manager-binding-token")); + let storage = bindings + .storage("files") + .await + .expect("resolve remote Storage"); + storage + .put(&Path::from("hello.txt"), PutPayload::from_static(b"hello")) + .await + .expect("write through resolved Storage"); + let result = storage + .get(&Path::from("hello.txt")) + .await + .expect("read through same Storage handle"); + assert_eq!( + result.bytes().await.expect("read fixture object bytes"), + "hello" + ); + + let archive = bindings + .storage("archive") + .await + .expect("resolve a second remote Storage resource"); + archive + .put( + &Path::from("archive.txt"), + PutPayload::from_static(b"archive"), + ) + .await + .expect("reuse the second resource's cached lease"); + + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + assert_eq!( + fixture + .manager + .requests + .lock() + .expect("manager requests lock") + .as_slice(), + &[ + RecordedRequest { + method: "POST".to_string(), + path: "/v1/bindings/resolve".to_string(), + authorization: Some("Bearer manager-binding-token-1".to_string()), + body: Some(json!({ + "deploymentId": DEPLOYMENT_ID, + "resourceId": "files", + })), + }, + RecordedRequest { + method: "POST".to_string(), + path: "/v1/bindings/resolve".to_string(), + authorization: Some("Bearer manager-binding-token-1".to_string()), + body: Some(json!({ + "deploymentId": DEPLOYMENT_ID, + "resourceId": "archive", + })), + }, + ] + ); + assert_eq!( + fixture + .platform_requests + .lock() + .expect("platform requests lock") + .as_slice(), + &[ + RecordedRequest { + method: "GET".to_string(), + path: format!("/v1/deployments/{DEPLOYMENT_ID}"), + authorization: Some(format!("Bearer {PLATFORM_TOKEN}")), + body: None, + }, + RecordedRequest { + method: "POST".to_string(), + path: format!("/v1/managers/{MANAGER_ID}/binding-token"), + authorization: Some(format!("Bearer {PLATFORM_TOKEN}")), + body: Some(json!({ "deploymentId": DEPLOYMENT_ID })), + }, + ] + ); + assert_eq!(fixture.token_calls.load(Ordering::SeqCst), 1); +} + +#[path = "tests/access_behavior.rs"] +mod access_behavior; + +#[tokio::test] +async fn refreshes_once_for_concurrent_operations_without_reconstructing_handle() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider.clone()); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put(&Path::from("shared.txt"), PutPayload::from_static(b"value")) + .await + .expect("seed fixture object"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 1); + + fixture.clock.set(at(481)); + fixture.set_manager_expiry(at(3901)); + let operations = (0..16).map(|_| { + let storage = storage.clone(); + async move { + storage + .head(&Path::from("shared.txt")) + .await + .expect("same Storage handle should refresh and read") + } + }); + let results = join_all(operations).await; + + assert_eq!(results.len(), 16); + assert!(results.iter().all(|metadata| metadata.size == 5)); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + assert_eq!( + fixture + .platform_requests + .lock() + .expect("platform requests lock") + .len(), + 4, + "refresh must periodically rediscover the assigned manager" + ); +} + +#[tokio::test] +async fn short_valid_lease_is_not_immediately_refreshed() { + let fixture = Fixture::new(at(0), at(60)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial short lease should resolve"); + storage + .put(&Path::from("short.txt"), PutPayload::from_static(b"value")) + .await + .expect("short lease should remain usable"); + + fixture.clock.set(at(1)); + storage + .head(&Path::from("short.txt")) + .await + .expect("a valid short lease must not cause a refresh storm"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 1); + + fixture.clock.set(at(49)); + fixture.set_manager_expiry(at(3600)); + storage + .head(&Path::from("short.txt")) + .await + .expect("lease should refresh inside its proportional window"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); +} + +#[tokio::test] +async fn existing_storage_handle_follows_manager_reassignment() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial manager should resolve Storage"); + storage + .put( + &Path::from("reassigned.txt"), + PutPayload::from_static(b"value"), + ) + .await + .expect("seed fixture object through manager A"); + + let manager_b_token = Arc::new(StdRwLock::new("unminted-manager-b-token".to_string())); + let manager_b = ManagerFixtureState { + calls: Arc::new(AtomicUsize::new(0)), + fail: Arc::new(AtomicBool::new(false)), + failure_response: Arc::new(StdRwLock::new(None)), + invalid_binding: Arc::new(AtomicBool::new(false)), + expired_lease: Arc::new(AtomicBool::new(false)), + advance_clock_to: Arc::new(StdRwLock::new(None)), + clock: fixture.clock.clone(), + expires_at: Arc::new(StdRwLock::new(at(3901))), + storage_path: fixture.manager.storage_path.clone(), + expected_token: manager_b_token.clone(), + requests: Arc::new(StdMutex::new(Vec::new())), + }; + let manager_b_url = spawn_manager_server(manager_b.clone()).await; + fixture.manager.fail.store(true, Ordering::SeqCst); + fixture.assign_manager(MANAGER_B_ID, manager_b_url, manager_b_token); + fixture.clock.set(at(481)); + + let metadata = storage + .head(&Path::from("reassigned.txt")) + .await + .expect("same handle should rediscover and use manager B"); + + assert_eq!(metadata.size, 5); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 1); + assert_eq!(manager_b.calls.load(Ordering::SeqCst), 1); + assert_eq!( + manager_b.requests.lock().expect("manager B requests lock")[0].path, + "/v1/bindings/resolve" + ); + let platform_requests = fixture + .platform_requests + .lock() + .expect("platform requests lock"); + assert_eq!( + platform_requests[3].path, + format!("/v1/managers/{MANAGER_B_ID}/binding-token") + ); +} + +#[tokio::test] +async fn manager_rejection_is_rediscovered_once_then_preserved_without_cached_fallback() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider.clone()); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put( + &Path::from("private.txt"), + PutPayload::from_static(b"value"), + ) + .await + .expect("seed fixture object"); + + fixture.fail_manager_with( + StatusCode::FORBIDDEN, + json!({ + "code": "FORBIDDEN", + "message": "Remote access was revoked", + "retryable": false, + "internal": false, + "httpStatusCode": 403, + }), + ); + fixture.clock.set(at(481)); + let error = provider + .load_storage("files") + .await + .expect_err("revoked access must not fall back to a cached lease"); + + assert_eq!(error.code, "FORBIDDEN"); + assert!(!error.retryable); + assert_eq!(error.http_status_code, Some(403)); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 3); + assert_eq!(fixture.token_calls.load(Ordering::SeqCst), 3); +} + +#[tokio::test] +async fn refresh_rechecks_expiry_after_the_network_request() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider.clone()); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put(&Path::from("lease.txt"), PutPayload::from_static(b"value")) + .await + .expect("seed fixture object"); + + fixture.manager.fail.store(true, Ordering::SeqCst); + fixture.clock.set(at(481)); + fixture.advance_clock_during_next_resolve(at(600)); + let error = provider + .load_storage("files") + .await + .expect_err("a lease that expired during refresh must not be used"); + + assert_eq!(error.code, "REMOTE_ACCESS_FAILED"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); +} + +#[tokio::test] +async fn decoded_expired_refresh_uses_valid_cache_without_replacing_it() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider.clone()); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put(&Path::from("cached.txt"), PutPayload::from_static(b"value")) + .await + .expect("seed fixture object through the valid lease"); + + fixture.manager.expired_lease.store(true, Ordering::SeqCst); + fixture.clock.set(at(481)); + let cached = provider + .load_storage("files") + .await + .expect("a malformed refresh should fall back to the still-valid cached lease"); + + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + assert_eq!( + cached + .head(&Path::from("cached.txt")) + .await + .expect("the fallback lease should still address the original storage") + .size, + 5 + ); + + fixture.clock.set(at(482)); + provider + .load_storage("files") + .await + .expect("the invalid refresh cooldown should keep using the valid cache"); + assert_eq!( + fixture.manager.calls.load(Ordering::SeqCst), + 2, + "the retry cooldown must suppress another malformed refresh" + ); + + fixture.manager.expired_lease.store(false, Ordering::SeqCst); + fixture.clock.set(at(486)); + fixture.set_manager_expiry(at(3900)); + let refreshed = provider + .load_storage("files") + .await + .expect("a later valid refresh should replace the preserved cache"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 3); + assert_eq!( + refreshed + .head(&Path::from("cached.txt")) + .await + .expect("the recovered lease should address the original storage") + .size, + 5 + ); + + fixture.clock.set(at(601)); + provider + .load_storage("files") + .await + .expect("the replacement lease should outlive the original cache"); + assert_eq!( + fixture.manager.calls.load(Ordering::SeqCst), + 3, + "the valid replacement must remain cached after the original lease expires" + ); +} + +#[test] +fn remote_urls_require_https_except_for_loopback_development() { + assert!(!validate_platform_base_url("https://api.example.com").unwrap()); + assert!(validate_platform_base_url("http://127.0.0.1:3000").unwrap()); + assert!(validate_platform_base_url("http://localhost:3000").unwrap()); + assert!(validate_platform_base_url("http://api.example.com").is_err()); + assert!(validate_manager_url("https://manager.example.com/", false).is_ok()); + assert!(validate_manager_url("http://127.0.0.1:3001/", true).is_ok()); + assert!(validate_manager_url("http://manager.example.com/", true).is_err()); + assert!(validate_manager_url("https://user@manager.example.com/", false).is_err()); + assert!(validate_manager_url("https://manager.example.com/prefix", false).is_err()); + + for error in [ + validate_platform_base_url("not a URL").unwrap_err(), + validate_manager_url("not a URL", false).unwrap_err(), + validate_manager_url("http://manager.example.com/", true).unwrap_err(), + ] { + assert!(!error.retryable); + assert_eq!(error.http_status_code, Some(400)); + } +} + +#[test] +fn remote_lease_validation_rejects_refreshable_or_overbroad_credentials() { + let aws = alien_core::AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: alien_core::AwsCredentials::AccessKeys { + access_key_id: "access".to_string(), + secret_access_key: "secret".to_string(), + session_token: None, + }, + service_overrides: None, + }; + assert!(validate_aws_remote_client_config(&aws, at(3600)).is_err()); + + let aws = alien_core::AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: alien_core::AwsCredentials::SessionCredentials { + access_key_id: "access".to_string(), + secret_access_key: "secret".to_string(), + session_token: "session".to_string(), + expires_at: at(3599).to_rfc3339(), + }, + service_overrides: None, + }; + let error = validate_aws_remote_client_config(&aws, at(3600)) + .expect_err("AWS credentials expiring before the lease must fail closed"); + assert_eq!(error.code, "REMOTE_ACCESS_FAILED"); + assert!(error + .message + .contains("credential expires before its lease")); + + let aws = alien_core::AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: alien_core::AwsCredentials::SessionCredentials { + access_key_id: String::new(), + secret_access_key: "secret".to_string(), + session_token: "session".to_string(), + expires_at: at(3600).to_rfc3339(), + }, + service_overrides: None, + }; + assert!(validate_aws_remote_client_config(&aws, at(3600)).is_err()); + + let gcp = alien_core::GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: alien_core::GcpCredentials::ServiceMetadata, + service_overrides: None, + project_number: None, + }; + assert!(validate_gcp_remote_client_config(&gcp).is_err()); + + let gcp = alien_core::GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: alien_core::GcpCredentials::AccessToken { + token: String::new(), + }, + service_overrides: None, + project_number: None, + }; + assert!(validate_gcp_remote_client_config(&gcp).is_err()); + + let azure = alien_core::AzureClientConfig { + subscription_id: "subscription".to_string(), + tenant_id: "tenant".to_string(), + region: Some("eastus".to_string()), + credentials: alien_core::AzureCredentials::ScopedAccessTokens { + tokens: HashMap::from([ + ( + "https://storage.azure.com/.default".to_string(), + "storage".to_string(), + ), + ( + "https://management.azure.com/.default".to_string(), + "management".to_string(), + ), + ]), + }, + service_overrides: None, + }; + assert!(validate_azure_remote_client_config(&azure).is_err()); +} + +#[path = "tests/retry_backoff.rs"] +mod retry_backoff; diff --git a/crates/alien-bindings/src/remote/tests/access_behavior.rs b/crates/alien-bindings/src/remote/tests/access_behavior.rs new file mode 100644 index 000000000..d31395a90 --- /dev/null +++ b/crates/alien-bindings/src/remote/tests/access_behavior.rs @@ -0,0 +1,107 @@ +use super::*; + +#[tokio::test] +async fn manager_access_token_refreshes_with_skew_without_forwarding_platform_token() { + let fixture = Fixture::new(at(0), at(3600)).await; + let provider = fixture.remote_provider().await; + + provider + .load_storage("first") + .await + .expect("initial manager token should resolve"); + fixture.clock.set(at(269)); + provider + .load_storage("second") + .await + .expect("manager token should remain valid before refresh-at"); + fixture.clock.set(at(270)); + provider + .load_storage("third") + .await + .expect("manager token should refresh at the skew boundary"); + + let manager_requests = fixture + .manager + .requests + .lock() + .expect("manager requests lock"); + assert_eq!(manager_requests.len(), 3); + assert_eq!( + manager_requests + .iter() + .map(|request| request.authorization.as_deref()) + .collect::>(), + vec![ + Some("Bearer manager-binding-token-1"), + Some("Bearer manager-binding-token-1"), + Some("Bearer manager-binding-token-2"), + ] + ); + let platform_authorization = format!("Bearer {PLATFORM_TOKEN}"); + assert!(manager_requests.iter().all(|request| { + request.authorization.as_deref() != Some(platform_authorization.as_str()) + })); + assert_eq!(fixture.token_calls.load(Ordering::SeqCst), 2); +} + +#[tokio::test] +async fn missing_manager_token_expiry_fails_closed_before_manager_access() { + let fixture = Fixture::new(at(0), at(3600)).await; + fixture.set_binding_token_expiry(None); + + let error = RemoteBindingsProvider::discover_local_fixture( + DEPLOYMENT_ID, + PLATFORM_TOKEN, + Some(&fixture.api_url), + fixture.clock.clone(), + ) + .await + .expect_err("a manager token without expiry must not be cached"); + + assert_eq!(error.code, "REMOTE_ACCESS_FAILED"); + assert_eq!(error.http_status_code, Some(502)); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 0); +} + +#[tokio::test] +async fn assignment_race_rediscovery_retries_once_against_the_new_manager() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + provider + .load_storage("files") + .await + .expect("manager A should resolve the initial binding"); + + let manager_b_token = Arc::new(StdRwLock::new("unminted-manager-b-token".to_string())); + let manager_b = ManagerFixtureState { + calls: Arc::new(AtomicUsize::new(0)), + fail: Arc::new(AtomicBool::new(false)), + failure_response: Arc::new(StdRwLock::new(None)), + invalid_binding: Arc::new(AtomicBool::new(false)), + expired_lease: Arc::new(AtomicBool::new(false)), + advance_clock_to: Arc::new(StdRwLock::new(None)), + clock: fixture.clock.clone(), + expires_at: Arc::new(StdRwLock::new(at(3600))), + storage_path: fixture.manager.storage_path.clone(), + expected_token: manager_b_token.clone(), + requests: Arc::new(StdMutex::new(Vec::new())), + }; + let manager_b_url = spawn_manager_server(manager_b.clone()).await; + fixture.assign_manager(MANAGER_B_ID, manager_b_url, manager_b_token); + fixture.fail_manager_with_text(StatusCode::NOT_FOUND, "deployment moved"); + + provider + .load_storage("archive") + .await + .expect("404 from manager A should rediscover and retry manager B once"); + + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + assert_eq!(manager_b.calls.load(Ordering::SeqCst), 1); + assert_eq!(fixture.token_calls.load(Ordering::SeqCst), 2); + assert_eq!( + manager_b.requests.lock().expect("manager B requests lock")[0] + .authorization + .as_deref(), + Some("Bearer manager-binding-token-2") + ); +} diff --git a/crates/alien-bindings/src/remote/tests/manager_contract.rs b/crates/alien-bindings/src/remote/tests/manager_contract.rs new file mode 100644 index 000000000..d2ef6e6c7 --- /dev/null +++ b/crates/alien-bindings/src/remote/tests/manager_contract.rs @@ -0,0 +1,261 @@ +use super::*; + +#[tokio::test] +async fn generated_manager_adapter_decodes_cloud_lease_and_structured_error() { + let response = Arc::new(StdRwLock::new(( + StatusCode::OK, + json!({ + "service": "s3", + "binding": { "bucketName": "customer-bucket" }, + "clientConfig": { + "accountId": "123456789012", + "region": "us-east-1", + "credentials": { + "type": "sessionCredentials", + "accessKeyId": "AKIAEXAMPLE", + "secretAccessKey": "secret", + "sessionToken": "session", + "expiresAt": at(3600).to_rfc3339(), + }, + }, + "expiresAt": at(3600).to_rfc3339(), + }), + ))); + let requests = Arc::new(StdMutex::new(Vec::new())); + let manager_url = spawn_generated_contract_server(GeneratedContractState { + response: response.clone(), + requests: requests.clone(), + }) + .await; + let adapter = GeneratedManagerBindingResolver; + let manager_url = reqwest::Url::parse(&manager_url).expect("valid manager URL"); + let manager = DiscoveredManager { + url: manager_url, + http: authenticated_http_client(GENERATED_MANAGER_TOKEN, "generated manager fixture") + .expect("build generated contract client"), + refresh_at: at(300), + generation: 0, + }; + + let lease = adapter + .resolve(&manager, DEPLOYMENT_ID, "files") + .await + .expect("generated client should decode an S3 lease"); + let ResolvedRemoteBinding::S3 { + binding, + client_config, + expires_at, + } = lease + else { + panic!("generated client returned the wrong lease variant for S3"); + }; + assert_eq!( + binding.bucket_name, + alien_core::BindingValue::Value("customer-bucket".to_string()) + ); + assert_eq!(client_config.account_id, "123456789012"); + assert_eq!(client_config.region, "us-east-1"); + assert!(client_config.service_overrides.is_none()); + let alien_core::AwsCredentials::SessionCredentials { + access_key_id, + secret_access_key, + session_token, + expires_at: credential_expires_at, + } = client_config.credentials + else { + panic!("generated client returned a non-session AWS credential"); + }; + assert_eq!(access_key_id, "AKIAEXAMPLE"); + assert_eq!(secret_access_key, "secret"); + assert_eq!(session_token, "session"); + assert_eq!(credential_expires_at, at(3600).to_rfc3339()); + assert_eq!(expires_at, at(3600)); + assert_eq!( + requests + .lock() + .expect("generated contract requests lock") + .as_slice(), + &[RecordedRequest { + method: "POST".to_string(), + path: "/v1/bindings/resolve".to_string(), + authorization: Some(format!("Bearer {GENERATED_MANAGER_TOKEN}")), + body: Some(json!({ + "deploymentId": DEPLOYMENT_ID, + "resourceId": "files", + })), + }] + ); + + *response.write().expect("generated contract response lock") = ( + StatusCode::OK, + json!({ + "service": "blob", + "binding": { + "accountName": "customeraccount", + "containerName": "customer-container", + }, + "clientConfig": { + "subscriptionId": "subscription-id", + "tenantId": "tenant-id", + "region": "eastus", + "credentials": { + "type": "containerSas", + "sas": { + "accountName": "customeraccount", + "containerName": "customer-container", + "permissions": "rcwdl", + "startsAt": at(-300).to_rfc3339(), + "expiresAt": at(3600).to_rfc3339(), + "signedObjectId": "signed-object-id", + "signedTenantId": "signed-tenant-id", + "signedKeyStart": at(-600).to_rfc3339(), + "signedKeyExpiry": at(7200).to_rfc3339(), + "signedKeyService": "b", + "signedKeyVersion": "2023-11-03", + "protocol": "https", + "serviceVersion": "2023-11-03", + "signedResource": "c", + "signature": "azure-sas-signature", + } + }, + }, + "expiresAt": at(3600).to_rfc3339(), + }), + ); + let lease = adapter + .resolve(&manager, DEPLOYMENT_ID, "files") + .await + .expect("generated client should decode a Blob lease"); + let ResolvedRemoteBinding::Blob { + binding, + client_config, + expires_at, + } = lease + else { + panic!("generated client returned the wrong lease variant for Blob"); + }; + assert_eq!( + binding.account_name, + alien_core::BindingValue::Value("customeraccount".to_string()) + ); + assert_eq!( + binding.container_name, + alien_core::BindingValue::Value("customer-container".to_string()) + ); + assert_eq!(client_config.subscription_id, "subscription-id"); + assert_eq!(client_config.tenant_id, "tenant-id"); + assert_eq!(client_config.region.as_deref(), Some("eastus")); + assert!(client_config.service_overrides.is_none()); + let alien_core::AzureCredentials::SasToken { query_parameters } = client_config.credentials + else { + panic!("generated client returned the wrong Azure credential type"); + }; + assert_eq!(query_parameters.len(), 13); + assert_eq!( + query_parameters.get("sp").map(String::as_str), + Some("rcwdl") + ); + assert_eq!(query_parameters.get("sr").map(String::as_str), Some("c")); + assert_eq!( + query_parameters.get("sig").map(String::as_str), + Some("azure-sas-signature") + ); + assert_eq!(expires_at, at(3600)); + + *response.write().expect("generated contract response lock") = ( + StatusCode::OK, + json!({ + "service": "gcs", + "binding": { "bucketName": "customer-bucket" }, + "clientConfig": { + "projectId": "customer-project", + "projectNumber": "123456789", + "region": "us-central1", + "credentials": { + "type": "accessToken", + "token": "gcp-access-token", + }, + }, + "expiresAt": at(3600).to_rfc3339(), + }), + ); + let lease = adapter + .resolve(&manager, DEPLOYMENT_ID, "files") + .await + .expect("generated client should decode a GCS lease"); + let ResolvedRemoteBinding::Gcs { + binding, + client_config, + expires_at, + } = lease + else { + panic!("generated client returned the wrong lease variant for GCS"); + }; + assert_eq!( + binding.bucket_name, + alien_core::BindingValue::Value("customer-bucket".to_string()) + ); + assert_eq!(client_config.project_id, "customer-project"); + assert_eq!(client_config.project_number.as_deref(), Some("123456789")); + assert_eq!(client_config.region, "us-central1"); + assert!(client_config.service_overrides.is_none()); + let alien_core::GcpCredentials::AccessToken { token } = client_config.credentials else { + panic!("generated client returned the wrong GCP credential type"); + }; + assert_eq!(token, "gcp-access-token"); + assert_eq!(expires_at, at(3600)); + + *response.write().expect("generated contract response lock") = ( + StatusCode::OK, + json!({ + "service": "s3", + "binding": { "bucketName": "customer-bucket" }, + "clientConfig": { + "accountId": "123456789012", + "region": "us-east-1", + "credentials": { + "type": "sessionCredentials", + "accessKeyId": "SENTINEL_ACCESS_KEY", + "secretAccessKey": "SENTINEL_SECRET_KEY", + "sessionToken": "SENTINEL_SESSION_TOKEN", + "expiresAt": at(3600).to_rfc3339(), + }, + }, + "expiresAt": "not-a-timestamp", + }), + ); + let error = match adapter.resolve(&manager, DEPLOYMENT_ID, "files").await { + Ok(_) => panic!("an invalid lease expiry must fail typed conversion"), + Err(error) => error, + }; + let error_debug = format!("{error:?}"); + for secret in [ + "SENTINEL_ACCESS_KEY", + "SENTINEL_SECRET_KEY", + "SENTINEL_SESSION_TOKEN", + ] { + assert!( + !error_debug.contains(secret), + "typed conversion errors must not retain response credentials" + ); + } + + *response.write().expect("generated contract response lock") = ( + StatusCode::FORBIDDEN, + json!({ + "code": "FORBIDDEN", + "message": "Remote access was revoked", + "retryable": false, + "internal": false, + "httpStatusCode": 403, + }), + ); + let error = match adapter.resolve(&manager, DEPLOYMENT_ID, "files").await { + Ok(_) => panic!("generated client should preserve a structured manager error"), + Err(error) => error, + }; + assert_eq!(error.code, "FORBIDDEN"); + assert_eq!(error.message, "Remote access was revoked"); + assert!(!error.retryable); + assert_eq!(error.http_status_code, Some(403)); +} diff --git a/crates/alien-bindings/src/remote/tests/retry_backoff.rs b/crates/alien-bindings/src/remote/tests/retry_backoff.rs new file mode 100644 index 000000000..0bc2d0d5d --- /dev/null +++ b/crates/alien-bindings/src/remote/tests/retry_backoff.rs @@ -0,0 +1,238 @@ +use super::*; + +#[tokio::test] +async fn concurrent_failed_refresh_is_single_flight_while_cache_is_unexpired() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put(&Path::from("shared.txt"), PutPayload::from_static(b"value")) + .await + .expect("seed fixture object"); + + fixture.manager.fail.store(true, Ordering::SeqCst); + fixture.clock.set(at(481)); + let operations = (0..16).map(|_| { + let storage = storage.clone(); + async move { storage.head(&Path::from("shared.txt")).await } + }); + let results = join_all(operations).await; + + assert!(results.iter().all(|result| result.is_ok())); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + + for _ in 0..8 { + storage + .head(&Path::from("shared.txt")) + .await + .expect("cached lease should remain usable during retry cooldown"); + } + assert_eq!( + fixture.manager.calls.load(Ordering::SeqCst), + 2, + "sequential operations must not hammer the manager after the failed flight" + ); +} + +#[tokio::test] +async fn retryable_refresh_failures_back_off_then_recover_on_the_same_handle() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put(&Path::from("shared.txt"), PutPayload::from_static(b"value")) + .await + .expect("seed fixture object"); + + fixture.manager.fail.store(true, Ordering::SeqCst); + fixture.clock.set(at(481)); + storage + .head(&Path::from("shared.txt")) + .await + .expect("first failed refresh should use the unexpired lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + + fixture.clock.set(at(485)); + storage + .head(&Path::from("shared.txt")) + .await + .expect("the first five-second cooldown should use the cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + + fixture.clock.set(at(486)); + storage + .head(&Path::from("shared.txt")) + .await + .expect("the second failed refresh should still use the cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 3); + + fixture.clock.set(at(495)); + storage + .head(&Path::from("shared.txt")) + .await + .expect("the doubled cooldown should use the cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 3); + + fixture.manager.fail.store(false, Ordering::SeqCst); + fixture.set_manager_expiry(at(3600)); + fixture.clock.set(at(496)); + storage + .head(&Path::from("shared.txt")) + .await + .expect("the existing handle should recover when the cooldown elapses"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 4); + + storage + .head(&Path::from("shared.txt")) + .await + .expect("the recovered lease should be cached"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 4); +} + +#[tokio::test] +async fn unstructured_rate_limit_uses_unexpired_cache_during_backoff() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put( + &Path::from("rate-limited.txt"), + PutPayload::from_static(b"value"), + ) + .await + .expect("seed fixture object"); + + fixture.fail_manager_with( + StatusCode::TOO_MANY_REQUESTS, + serde_json::json!("rate limited"), + ); + fixture.clock.set(at(481)); + storage + .head(&Path::from("rate-limited.txt")) + .await + .expect("unstructured rate limit should use the unexpired cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + + fixture.clock.set(at(485)); + storage + .head(&Path::from("rate-limited.txt")) + .await + .expect("rate-limit cooldown should continue using the cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); +} + +#[tokio::test] +async fn malformed_server_error_uses_unexpired_cache_during_backoff() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put( + &Path::from("server-error.txt"), + PutPayload::from_static(b"value"), + ) + .await + .expect("seed fixture object"); + + fixture.fail_manager_with_text( + StatusCode::INTERNAL_SERVER_ERROR, + "upstream exploded", + ); + fixture.clock.set(at(481)); + storage + .head(&Path::from("server-error.txt")) + .await + .expect("malformed server error should use the unexpired cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + + fixture.clock.set(at(485)); + storage + .head(&Path::from("server-error.txt")) + .await + .expect("server-error cooldown should continue using the cached lease"); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); +} + +#[test] +fn refresh_retry_delay_is_exponential_and_bounded() { + assert_eq!(refresh_retry_delay(1), ChronoDuration::seconds(5)); + assert_eq!(refresh_retry_delay(2), ChronoDuration::seconds(10)); + assert_eq!(refresh_retry_delay(3), ChronoDuration::seconds(20)); + assert_eq!(refresh_retry_delay(4), ChronoDuration::seconds(30)); + assert_eq!(refresh_retry_delay(100), ChronoDuration::seconds(30)); +} + +#[tokio::test] +async fn malformed_manager_response_does_not_poison_the_cache() { + let fixture = Fixture::new(at(0), at(600)).await; + fixture + .manager + .invalid_binding + .store(true, Ordering::SeqCst); + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + + bindings + .storage("files") + .await + .expect_err("invalid binding must fail before caching"); + fixture + .manager + .invalid_binding + .store(false, Ordering::SeqCst); + fixture.clock.set(at(INITIAL_REFRESH_RETRY_DELAY_SECONDS)); + bindings + .storage("files") + .await + .expect("a valid response must be retried and cached after the cooldown"); + + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); +} + +#[tokio::test] +async fn serves_unexpired_cache_on_refresh_failure_then_fails_closed_at_expiry() { + let fixture = Fixture::new(at(0), at(600)).await; + let provider = fixture.remote_provider().await; + let bindings = RemoteBindings::from_provider(provider); + let storage = bindings + .storage("files") + .await + .expect("initial remote Storage resolution"); + storage + .put(&Path::from("lease.txt"), PutPayload::from_static(b"valid")) + .await + .expect("seed fixture object"); + + fixture.manager.fail.store(true, Ordering::SeqCst); + fixture.clock.set(at(599)); + let metadata = storage + .head(&Path::from("lease.txt")) + .await + .expect("unexpired lease should survive failed refresh"); + assert_eq!(metadata.size, 5); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 2); + + fixture.clock.set(at(600)); + let error = storage + .head(&Path::from("lease.txt")) + .await + .expect_err("lease expiry must cap cooldown and retry before failing closed"); + assert!(error.to_string().contains("Remote access failed")); + assert_eq!(fixture.manager.calls.load(Ordering::SeqCst), 3); +} diff --git a/crates/alien-bindings/tests/worker.rs b/crates/alien-bindings/tests/worker.rs index d36a8105c..016c871d1 100644 --- a/crates/alien-bindings/tests/worker.rs +++ b/crates/alien-bindings/tests/worker.rs @@ -70,6 +70,12 @@ pub trait FunctionTestContext: AsyncTestContext + Send + Sync { fn get_test_endpoint(&self) -> String; } +#[cfg(feature = "azure")] +#[path = "worker/azure.rs"] +mod azure; +#[cfg(feature = "azure")] +use azure::AzureProviderTestContext; + // --- gRPC Provider Context --- // --- AWS Provider Context --- #[cfg(feature = "aws")] @@ -551,586 +557,6 @@ impl FunctionTestContext for GcpProviderTestContext { } } -// --- Azure Provider Context --- -#[cfg(feature = "azure")] -struct AzureProviderTestContext { - function: Arc, - resource_group_name: String, - container_app_name: String, - container_apps_client: AzureContainerAppsClient, - authorization_client: AzureAuthorizationClient, - managed_identity_client: AzureManagedIdentityClient, - long_running_operation_client: LongRunningOperationClient, - managed_environment_id: String, - location: String, - container_image: String, - created_container_apps: Mutex>, - created_managed_identities: Mutex>, - created_role_assignments: Mutex>, -} - -#[cfg(feature = "azure")] -impl AsyncTestContext for AzureProviderTestContext { - async fn setup() -> Self { - load_test_env(); - tracing_subscriber::fmt::try_init().ok(); - - let binding_name = "test-azure-function"; - - let subscription_id = env::var("AZURE_MANAGEMENT_SUBSCRIPTION_ID") - .expect("AZURE_MANAGEMENT_SUBSCRIPTION_ID must be set in .env.test"); - let tenant_id = env::var("AZURE_MANAGEMENT_TENANT_ID") - .expect("AZURE_MANAGEMENT_TENANT_ID must be set in .env.test"); - let client_id = env::var("AZURE_MANAGEMENT_CLIENT_ID") - .expect("AZURE_MANAGEMENT_CLIENT_ID must be set in .env.test"); - let client_secret = env::var("AZURE_MANAGEMENT_CLIENT_SECRET") - .expect("AZURE_MANAGEMENT_CLIENT_SECRET must be set in .env.test"); - let resource_group_name = env::var("ALIEN_TEST_AZURE_RESOURCE_GROUP") - .expect("ALIEN_TEST_AZURE_RESOURCE_GROUP must be set in .env.test"); - let managed_environment_name = env::var("ALIEN_TEST_AZURE_MANAGED_ENVIRONMENT_NAME") - .expect("ALIEN_TEST_AZURE_MANAGED_ENVIRONMENT_NAME must be set in .env.test"); - let default_container_image = - "mcr.microsoft.com/azuredocs/containerapps-helloworld:latest".to_string(); - let mut container_image = env::var("ALIEN_TEST_AZURE_CONTAINER_APP_IMAGE") - .unwrap_or_else(|_| default_container_image.clone()); - - let client_config = alien_azure_clients::AzureClientConfig { - subscription_id: subscription_id.clone(), - tenant_id, - region: Some("eastus".to_string()), - credentials: alien_azure_clients::AzureCredentials::ServicePrincipal { - client_id, - client_secret, - }, - service_overrides: None, - }; - - let container_apps_client = AzureContainerAppsClient::new( - reqwest::Client::new(), - AzureTokenCache::new(client_config.clone()), - ); - - let authorization_client = AzureAuthorizationClient::new( - reqwest::Client::new(), - AzureTokenCache::new(client_config.clone()), - ); - - let managed_identity_client = AzureManagedIdentityClient::new( - reqwest::Client::new(), - AzureTokenCache::new(client_config.clone()), - ); - - let long_running_operation_client = LongRunningOperationClient::new( - reqwest::Client::new(), - AzureTokenCache::new(client_config.clone()), - ); - - // Get the existing managed environment to retrieve its ID - let managed_environment = container_apps_client.get_managed_environment(&resource_group_name, &managed_environment_name).await - .expect("Failed to get existing managed environment. Make sure ALIEN_TEST_AZURE_MANAGED_ENVIRONMENT_NAME points to an existing managed environment."); - - let managed_environment_id = managed_environment - .id - .expect("Managed environment should have an ID"); - - // Create a unique container app name - let container_app_name = format!( - "alien-test-app-{}", - Uuid::new_v4() - .simple() - .to_string() - .chars() - .take(8) - .collect::() - ); - - // Initialize tracking collections - let mut created_managed_identities = HashSet::new(); - let mut created_role_assignments = HashSet::new(); - - // Create managed identity with ACR access if needed - let (registries, identity) = if container_image.contains(".azurecr.io") { - info!( - "🔐 Setting up ACR authentication for container image: {}", - container_image - ); - let identity_name = format!("{}-identity", container_app_name); - - // Create managed identity - let managed_identity = Identity { - location: "eastus".to_string(), - tags: Default::default(), - properties: None, - id: None, - name: None, - type_: None, - system_data: None, - }; - - let created_identity = managed_identity_client - .create_or_update_user_assigned_identity( - &resource_group_name, - &identity_name, - &managed_identity, - ) - .await - .expect("Failed to create managed identity"); - - let principal_id = created_identity - .properties - .as_ref() - .and_then(|p| p.principal_id.clone()) - .expect("Managed identity should have a principal ID"); - - let identity_resource_id = created_identity - .id - .as_ref() - .expect("Managed identity should have a resource ID") - .clone(); - - info!( - "✅ Created managed identity with principal ID: {}", - principal_id - ); - - // Track the managed identity for cleanup - created_managed_identities.insert(identity_name.clone()); - - // Extract ACR name from container image and assign AcrPull role - let acr_server = container_image.split('/').next().unwrap_or_default(); - let acr_name = acr_server.split('.').next().unwrap_or_default(); - - info!( - "🏷️ Assigning AcrPull role to managed identity for ACR: {}", - acr_name - ); - - // Build ACR resource scope - let acr_scope = Scope::Resource { - resource_group_name: resource_group_name.clone(), - resource_provider: "Microsoft.ContainerRegistry".to_string(), - parent_resource_path: None, - resource_type: "registries".to_string(), - resource_name: acr_name.to_string(), - }; - - // Create role assignment - let assignment_id = Uuid::new_v4().to_string(); - let acr_pull_role_definition_id = "7f951dda-4ed3-4680-a7ca-43fe172d538d"; // AcrPull built-in role - let role_definition_full_id = format!( - "/subscriptions/{}/providers/Microsoft.Authorization/roleDefinitions/{}", - subscription_id, acr_pull_role_definition_id - ); - - let role_assignment = RoleAssignment { - properties: Some(RoleAssignmentProperties { - principal_id: principal_id.to_string(), - role_definition_id: role_definition_full_id, - principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, - scope: Some( - acr_scope.to_scope_string(authorization_client.token_cache.config()), - ), - condition: None, - condition_version: None, - delegated_managed_identity_resource_id: None, - description: Some( - "AcrPull role for Container App managed identity".to_string(), - ), - created_by: None, - created_on: None, - updated_by: None, - updated_on: None, - }), - id: None, - name: None, - type_: None, - }; - - let full_assignment_id = - authorization_client.build_role_assignment_id(&acr_scope, assignment_id); - - let role_assignment_result = authorization_client - .create_or_update_role_assignment_by_id( - full_assignment_id.clone(), - &role_assignment, - ) - .await; - - if let Err(e) = role_assignment_result { - if matches!(e.error, Some(ErrorData::RemoteResourceNotFound { .. })) { - warn!( - "ACR registry not found for image {}, falling back to public image", - container_image - ); - container_image = default_container_image.clone(); - (vec![], None) - } else { - panic!("Failed to create role assignment: {:?}", e); - } - } else { - info!("✅ Assigned AcrPull role to managed identity"); - - // Track the role assignment for cleanup - created_role_assignments.insert(full_assignment_id.clone()); - - // Wait for role assignment to propagate - tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; - - let registries = vec![RegistryCredentials { - server: Some(acr_server.to_string()), - identity: Some(identity_resource_id.clone()), - ..Default::default() - }]; - - // Create managed identity configuration for the container app - let mut user_assigned_identities = std::collections::HashMap::new(); - user_assigned_identities.insert( - identity_resource_id.clone(), - UserAssignedIdentity::default(), - ); - - let identity = Some(ManagedServiceIdentity { - type_: ManagedServiceIdentityType::UserAssigned, - user_assigned_identities: Some(UserAssignedIdentities( - user_assigned_identities, - )), - principal_id: None, - tenant_id: None, - }); - - info!("✅ Configured managed identity and registry credentials"); - - (registries, identity) - } - } else { - info!("ℹ️ Using public container image, no ACR authentication needed"); - (vec![], None) - }; - - // Create the Container App - let container_app = ContainerApp { - location: "eastus".to_string(), - identity, - properties: Some(ContainerAppProperties { - environment_id: Some(managed_environment_id.clone()), - template: Some(Template { - containers: vec![ - AzureContainer { - name: Some("main".to_string()), - image: Some(container_image.clone()), - env: vec![], - resources: Some(alien_azure_clients::models::container_apps::ContainerResources { - cpu: Some(0.5), - memory: Some("1Gi".to_string()), - ..Default::default() - }), - ..Default::default() - } - ], - scale: Some(Scale { - min_replicas: Some(1), - max_replicas: 10, - rules: vec![], - ..Default::default() - }), - ..Default::default() - }), - configuration: Some(Configuration { - ingress: Some(Ingress { - external: true, - target_port: Some(8080), - traffic: vec![ - TrafficWeight { - latest_revision: true, - weight: Some(100), - ..Default::default() - } - ], - transport: alien_azure_clients::models::container_apps::IngressTransport::Auto, - ..Default::default() - }), - registries, - active_revisions_mode: alien_azure_clients::models::container_apps::ConfigurationActiveRevisionsMode::Single, - ..Default::default() - }), - outbound_ip_addresses: vec![], - custom_domain_verification_id: None, - latest_ready_revision_name: None, - latest_revision_fqdn: None, - latest_revision_name: None, - managed_environment_id: Some(managed_environment_id.clone()), - running_status: None, - workload_profile_name: None, - provisioning_state: None, - event_stream_endpoint: None, - }), - tags: Default::default(), - id: None, - name: None, - type_: None, - managed_by: None, - system_data: None, - extended_location: None, - }; - - let create_result = container_apps_client - .create_or_update_container_app( - &resource_group_name, - &container_app_name, - &container_app, - ) - .await - .expect("Failed to create test Container App"); - - // Wait for the ARM operation to complete - create_result - .wait_for_operation_completion( - &long_running_operation_client, - "CreateContainerApp", - &container_app_name, - ) - .await - .expect("Failed to wait for Container App creation"); - - info!("✅ Created Container App: {}", container_app_name); - - // Wait for container app to be ready - let mut attempts = 0; - let max_attempts = 12; // Increased from 6 to 12 - loop { - attempts += 1; - - match container_apps_client - .get_container_app(&resource_group_name, &container_app_name) - .await - { - Ok(app) => { - if let Some(props) = &app.properties { - if let Some(state) = &props.provisioning_state { - info!( - "📊 Container app provisioning state: {:?} (attempt {}/{})", - state, attempts, max_attempts - ); - - if *state == alien_azure_clients::models::container_apps::ContainerAppPropertiesProvisioningState::Succeeded { - info!("✅ Container app is ready!"); - break; - } - - if *state == alien_azure_clients::models::container_apps::ContainerAppPropertiesProvisioningState::Failed { - panic!("❌ Container app provisioning failed"); - } - } - } - - if attempts >= max_attempts { - panic!("⚠️ Container app didn't become ready within timeout"); - } - - tokio::time::sleep(tokio::time::Duration::from_secs(15)).await; - // Increased from 10 to 15 seconds - } - Err(e) => { - panic!("Failed to get container app status: {:?}", e); - } - } - } - - // Additional wait time for the container to start responding to HTTP requests - info!("⏳ Waiting additional time for container to be ready for HTTP requests..."); - tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; - - // Get the created app to get its URL - let created_app = container_apps_client - .get_container_app(&resource_group_name, &container_app_name) - .await - .expect("Failed to get created container app"); - - let app_url = created_app - .properties - .and_then(|props| props.configuration) - .and_then(|config| config.ingress) - .and_then(|ingress| ingress.fqdn) - .map(|fqdn| format!("https://{}", fqdn)) - .expect("Container app should have a valid FQDN after creation"); - - let binding = WorkerBinding::container_app( - subscription_id.clone(), - resource_group_name.clone(), - container_app_name.clone(), - app_url, - ); - - let mut env_map: HashMap = HashMap::new(); - env_map.insert("AZURE_TENANT_ID".to_string(), client_config.tenant_id); - - // Extract credentials based on the type - let (azure_client_id, azure_client_secret) = match &client_config.credentials { - alien_azure_clients::AzureCredentials::ServicePrincipal { - client_id, - client_secret, - } => (client_id.clone(), client_secret.clone()), - alien_azure_clients::AzureCredentials::AccessToken { .. } => { - panic!("AccessToken credentials not supported in worker binding tests") - } - alien_azure_clients::AzureCredentials::ScopedAccessTokens { .. } => { - panic!("ScopedAccessTokens credentials not supported in worker binding tests") - } - alien_azure_clients::AzureCredentials::WorkloadIdentity { client_id, .. } => { - panic!("WorkloadIdentity credentials not fully supported in worker binding tests, client_id: {}", client_id) - } - alien_azure_clients::AzureCredentials::ManagedIdentity { client_id, .. } => { - panic!("ManagedIdentity credentials not supported in worker binding tests, client_id: {}", client_id) - } - alien_azure_clients::AzureCredentials::VmManagedIdentity { .. } => { - panic!("VmManagedIdentity credentials not supported in worker binding tests") - } - }; - - env_map.insert("AZURE_CLIENT_ID".to_string(), azure_client_id); - env_map.insert("AZURE_CLIENT_SECRET".to_string(), azure_client_secret); - env_map.insert("AZURE_SUBSCRIPTION_ID".to_string(), subscription_id); - env_map.insert("ALIEN_DEPLOYMENT_TYPE".to_string(), "azure".to_string()); - let binding_json = serde_json::to_string(&binding).expect("Failed to serialize binding"); - env_map.insert(bindings::binding_env_var_name(binding_name), binding_json); - - let provider = Arc::new( - BindingsProvider::from_env(env_map) - .await - .expect("Failed to load Azure bindings provider"), - ); - let function = provider - .load_worker(binding_name) - .await - .unwrap_or_else(|e| { - panic!( - "Failed to load Azure function for binding '{}' using container app '{}': {:?}", - binding_name, container_app_name, e - ) - }); - - let mut created_container_apps = HashSet::new(); - created_container_apps.insert(container_app_name.clone()); - - Self { - function, - resource_group_name, - container_app_name, - container_apps_client, - authorization_client, - managed_identity_client, - long_running_operation_client, - managed_environment_id, - location: "eastus".to_string(), - container_image, - created_container_apps: Mutex::new(created_container_apps), - created_managed_identities: Mutex::new(created_managed_identities), - created_role_assignments: Mutex::new(created_role_assignments), - } - } - - async fn teardown(self) { - info!("🧹 Starting Container Apps test cleanup..."); - - // Cleanup role assignments first - let role_assignments_to_cleanup = { - let assignments = self.created_role_assignments.lock().unwrap(); - assignments.clone() - }; - - for assignment_id in role_assignments_to_cleanup { - match self - .authorization_client - .delete_role_assignment_by_id(assignment_id.clone()) - .await - { - Ok(_) => info!("✅ Role assignment {} deleted successfully", assignment_id), - Err(err) if matches!(err.error, Some(ErrorData::RemoteResourceNotFound { .. })) => { - info!("🔍 Role assignment {} was already deleted", assignment_id); - } - Err(e) => { - warn!( - "Failed to delete role assignment {} during cleanup: {:?}", - assignment_id, e - ); - } - } - } - - // Cleanup managed identities - let identities_to_cleanup = { - let identities = self.created_managed_identities.lock().unwrap(); - identities.clone() - }; - - for identity_name in identities_to_cleanup { - match self - .managed_identity_client - .delete_user_assigned_identity(&self.resource_group_name, &identity_name) - .await - { - Ok(_) => info!("✅ Managed identity {} deleted successfully", identity_name), - Err(err) if matches!(err.error, Some(ErrorData::RemoteResourceNotFound { .. })) => { - info!("🔍 Managed identity {} was already deleted", identity_name); - } - Err(e) => { - warn!( - "Failed to delete managed identity {} during cleanup: {:?}", - identity_name, e - ); - } - } - } - - // Cleanup container apps - let container_apps_to_cleanup = { - let apps = self.created_container_apps.lock().unwrap(); - apps.clone() - }; - - for container_app_name in container_apps_to_cleanup { - match self - .container_apps_client - .delete_container_app(&self.resource_group_name, &container_app_name) - .await - { - Ok(_) => info!( - "✅ Container app {} deleted successfully", - container_app_name - ), - Err(err) if matches!(err.error, Some(ErrorData::RemoteResourceNotFound { .. })) => { - info!( - "🔍 Container app {} was already deleted", - container_app_name - ); - } - Err(e) => { - warn!( - "Failed to delete container app {} during cleanup: {:?}", - container_app_name, e - ); - } - } - } - - info!("✅ Container Apps test cleanup completed"); - } -} - -#[cfg(feature = "azure")] -#[async_trait] -impl FunctionTestContext for AzureProviderTestContext { - async fn get_function(&self) -> Arc { - self.function.clone() - } - fn provider_name(&self) -> &'static str { - "azure" - } - fn get_test_endpoint(&self) -> String { - format!("{}/{}", self.resource_group_name, self.container_app_name) - } -} - // --- Test implementations --- /// Test function invoke functionality with various HTTP methods and payloads diff --git a/crates/alien-bindings/tests/worker/azure.rs b/crates/alien-bindings/tests/worker/azure.rs new file mode 100644 index 000000000..10153e3ad --- /dev/null +++ b/crates/alien-bindings/tests/worker/azure.rs @@ -0,0 +1,584 @@ +use super::*; + +// --- Azure Provider Context --- +#[cfg(feature = "azure")] +pub(super) struct AzureProviderTestContext { + function: Arc, + resource_group_name: String, + container_app_name: String, + container_apps_client: AzureContainerAppsClient, + authorization_client: AzureAuthorizationClient, + managed_identity_client: AzureManagedIdentityClient, + long_running_operation_client: LongRunningOperationClient, + managed_environment_id: String, + location: String, + container_image: String, + created_container_apps: Mutex>, + created_managed_identities: Mutex>, + created_role_assignments: Mutex>, +} + +#[cfg(feature = "azure")] +impl AsyncTestContext for AzureProviderTestContext { + async fn setup() -> Self { + load_test_env(); + tracing_subscriber::fmt::try_init().ok(); + + let binding_name = "test-azure-function"; + + let subscription_id = env::var("AZURE_MANAGEMENT_SUBSCRIPTION_ID") + .expect("AZURE_MANAGEMENT_SUBSCRIPTION_ID must be set in .env.test"); + let tenant_id = env::var("AZURE_MANAGEMENT_TENANT_ID") + .expect("AZURE_MANAGEMENT_TENANT_ID must be set in .env.test"); + let client_id = env::var("AZURE_MANAGEMENT_CLIENT_ID") + .expect("AZURE_MANAGEMENT_CLIENT_ID must be set in .env.test"); + let client_secret = env::var("AZURE_MANAGEMENT_CLIENT_SECRET") + .expect("AZURE_MANAGEMENT_CLIENT_SECRET must be set in .env.test"); + let resource_group_name = env::var("ALIEN_TEST_AZURE_RESOURCE_GROUP") + .expect("ALIEN_TEST_AZURE_RESOURCE_GROUP must be set in .env.test"); + let managed_environment_name = env::var("ALIEN_TEST_AZURE_MANAGED_ENVIRONMENT_NAME") + .expect("ALIEN_TEST_AZURE_MANAGED_ENVIRONMENT_NAME must be set in .env.test"); + let default_container_image = + "mcr.microsoft.com/azuredocs/containerapps-helloworld:latest".to_string(); + let mut container_image = env::var("ALIEN_TEST_AZURE_CONTAINER_APP_IMAGE") + .unwrap_or_else(|_| default_container_image.clone()); + + let client_config = alien_azure_clients::AzureClientConfig { + subscription_id: subscription_id.clone(), + tenant_id, + region: Some("eastus".to_string()), + credentials: alien_azure_clients::AzureCredentials::ServicePrincipal { + client_id, + client_secret, + }, + service_overrides: None, + }; + + let container_apps_client = AzureContainerAppsClient::new( + reqwest::Client::new(), + AzureTokenCache::new(client_config.clone()), + ); + + let authorization_client = AzureAuthorizationClient::new( + reqwest::Client::new(), + AzureTokenCache::new(client_config.clone()), + ); + + let managed_identity_client = AzureManagedIdentityClient::new( + reqwest::Client::new(), + AzureTokenCache::new(client_config.clone()), + ); + + let long_running_operation_client = LongRunningOperationClient::new( + reqwest::Client::new(), + AzureTokenCache::new(client_config.clone()), + ); + + // Get the existing managed environment to retrieve its ID + let managed_environment = container_apps_client.get_managed_environment(&resource_group_name, &managed_environment_name).await + .expect("Failed to get existing managed environment. Make sure ALIEN_TEST_AZURE_MANAGED_ENVIRONMENT_NAME points to an existing managed environment."); + + let managed_environment_id = managed_environment + .id + .expect("Managed environment should have an ID"); + + // Create a unique container app name + let container_app_name = format!( + "alien-test-app-{}", + Uuid::new_v4() + .simple() + .to_string() + .chars() + .take(8) + .collect::() + ); + + // Initialize tracking collections + let mut created_managed_identities = HashSet::new(); + let mut created_role_assignments = HashSet::new(); + + // Create managed identity with ACR access if needed + let (registries, identity) = if container_image.contains(".azurecr.io") { + info!( + "🔐 Setting up ACR authentication for container image: {}", + container_image + ); + let identity_name = format!("{}-identity", container_app_name); + + // Create managed identity + let managed_identity = Identity { + location: "eastus".to_string(), + tags: Default::default(), + properties: None, + id: None, + name: None, + type_: None, + system_data: None, + }; + + let created_identity = managed_identity_client + .create_or_update_user_assigned_identity( + &resource_group_name, + &identity_name, + &managed_identity, + ) + .await + .expect("Failed to create managed identity"); + + let principal_id = created_identity + .properties + .as_ref() + .and_then(|p| p.principal_id.clone()) + .expect("Managed identity should have a principal ID"); + + let identity_resource_id = created_identity + .id + .as_ref() + .expect("Managed identity should have a resource ID") + .clone(); + + info!( + "✅ Created managed identity with principal ID: {}", + principal_id + ); + + // Track the managed identity for cleanup + created_managed_identities.insert(identity_name.clone()); + + // Extract ACR name from container image and assign AcrPull role + let acr_server = container_image.split('/').next().unwrap_or_default(); + let acr_name = acr_server.split('.').next().unwrap_or_default(); + + info!( + "🏷️ Assigning AcrPull role to managed identity for ACR: {}", + acr_name + ); + + // Build ACR resource scope + let acr_scope = Scope::Resource { + resource_group_name: resource_group_name.clone(), + resource_provider: "Microsoft.ContainerRegistry".to_string(), + parent_resource_path: None, + resource_type: "registries".to_string(), + resource_name: acr_name.to_string(), + }; + + // Create role assignment + let assignment_id = Uuid::new_v4().to_string(); + let acr_pull_role_definition_id = "7f951dda-4ed3-4680-a7ca-43fe172d538d"; // AcrPull built-in role + let role_definition_full_id = format!( + "/subscriptions/{}/providers/Microsoft.Authorization/roleDefinitions/{}", + subscription_id, acr_pull_role_definition_id + ); + + let role_assignment = RoleAssignment { + properties: Some(RoleAssignmentProperties { + principal_id: principal_id.to_string(), + role_definition_id: role_definition_full_id, + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + scope: Some( + acr_scope.to_scope_string(authorization_client.token_cache.config()), + ), + condition: None, + condition_version: None, + delegated_managed_identity_resource_id: None, + description: Some( + "AcrPull role for Container App managed identity".to_string(), + ), + created_by: None, + created_on: None, + updated_by: None, + updated_on: None, + }), + id: None, + name: None, + type_: None, + }; + + let full_assignment_id = + authorization_client.build_role_assignment_id(&acr_scope, assignment_id); + + let role_assignment_result = authorization_client + .create_or_update_role_assignment_by_id( + full_assignment_id.clone(), + &role_assignment, + ) + .await; + + if let Err(e) = role_assignment_result { + if matches!(e.error, Some(ErrorData::RemoteResourceNotFound { .. })) { + warn!( + "ACR registry not found for image {}, falling back to public image", + container_image + ); + container_image = default_container_image.clone(); + (vec![], None) + } else { + panic!("Failed to create role assignment: {:?}", e); + } + } else { + info!("✅ Assigned AcrPull role to managed identity"); + + // Track the role assignment for cleanup + created_role_assignments.insert(full_assignment_id.clone()); + + // Wait for role assignment to propagate + tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; + + let registries = vec![RegistryCredentials { + server: Some(acr_server.to_string()), + identity: Some(identity_resource_id.clone()), + ..Default::default() + }]; + + // Create managed identity configuration for the container app + let mut user_assigned_identities = std::collections::HashMap::new(); + user_assigned_identities.insert( + identity_resource_id.clone(), + UserAssignedIdentity::default(), + ); + + let identity = Some(ManagedServiceIdentity { + type_: ManagedServiceIdentityType::UserAssigned, + user_assigned_identities: Some(UserAssignedIdentities( + user_assigned_identities, + )), + principal_id: None, + tenant_id: None, + }); + + info!("✅ Configured managed identity and registry credentials"); + + (registries, identity) + } + } else { + info!("ℹ️ Using public container image, no ACR authentication needed"); + (vec![], None) + }; + + // Create the Container App + let container_app = ContainerApp { + location: "eastus".to_string(), + identity, + properties: Some(ContainerAppProperties { + environment_id: Some(managed_environment_id.clone()), + template: Some(Template { + containers: vec![ + AzureContainer { + name: Some("main".to_string()), + image: Some(container_image.clone()), + env: vec![], + resources: Some(alien_azure_clients::models::container_apps::ContainerResources { + cpu: Some(0.5), + memory: Some("1Gi".to_string()), + ..Default::default() + }), + ..Default::default() + } + ], + scale: Some(Scale { + min_replicas: Some(1), + max_replicas: 10, + rules: vec![], + ..Default::default() + }), + ..Default::default() + }), + configuration: Some(Configuration { + ingress: Some(Ingress { + external: true, + target_port: Some(8080), + traffic: vec![ + TrafficWeight { + latest_revision: true, + weight: Some(100), + ..Default::default() + } + ], + transport: alien_azure_clients::models::container_apps::IngressTransport::Auto, + ..Default::default() + }), + registries, + active_revisions_mode: alien_azure_clients::models::container_apps::ConfigurationActiveRevisionsMode::Single, + ..Default::default() + }), + outbound_ip_addresses: vec![], + custom_domain_verification_id: None, + latest_ready_revision_name: None, + latest_revision_fqdn: None, + latest_revision_name: None, + managed_environment_id: Some(managed_environment_id.clone()), + running_status: None, + workload_profile_name: None, + provisioning_state: None, + event_stream_endpoint: None, + }), + tags: Default::default(), + id: None, + name: None, + type_: None, + managed_by: None, + system_data: None, + extended_location: None, + }; + + let create_result = container_apps_client + .create_or_update_container_app( + &resource_group_name, + &container_app_name, + &container_app, + ) + .await + .expect("Failed to create test Container App"); + + // Wait for the ARM operation to complete + create_result + .wait_for_operation_completion( + &long_running_operation_client, + "CreateContainerApp", + &container_app_name, + ) + .await + .expect("Failed to wait for Container App creation"); + + info!("✅ Created Container App: {}", container_app_name); + + // Wait for container app to be ready + let mut attempts = 0; + let max_attempts = 12; // Increased from 6 to 12 + loop { + attempts += 1; + + match container_apps_client + .get_container_app(&resource_group_name, &container_app_name) + .await + { + Ok(app) => { + if let Some(props) = &app.properties { + if let Some(state) = &props.provisioning_state { + info!( + "📊 Container app provisioning state: {:?} (attempt {}/{})", + state, attempts, max_attempts + ); + + if *state == alien_azure_clients::models::container_apps::ContainerAppPropertiesProvisioningState::Succeeded { + info!("✅ Container app is ready!"); + break; + } + + if *state == alien_azure_clients::models::container_apps::ContainerAppPropertiesProvisioningState::Failed { + panic!("❌ Container app provisioning failed"); + } + } + } + + if attempts >= max_attempts { + panic!("⚠️ Container app didn't become ready within timeout"); + } + + tokio::time::sleep(tokio::time::Duration::from_secs(15)).await; + // Increased from 10 to 15 seconds + } + Err(e) => { + panic!("Failed to get container app status: {:?}", e); + } + } + } + + // Additional wait time for the container to start responding to HTTP requests + info!("⏳ Waiting additional time for container to be ready for HTTP requests..."); + tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; + + // Get the created app to get its URL + let created_app = container_apps_client + .get_container_app(&resource_group_name, &container_app_name) + .await + .expect("Failed to get created container app"); + + let app_url = created_app + .properties + .and_then(|props| props.configuration) + .and_then(|config| config.ingress) + .and_then(|ingress| ingress.fqdn) + .map(|fqdn| format!("https://{}", fqdn)) + .expect("Container app should have a valid FQDN after creation"); + + let binding = WorkerBinding::container_app( + subscription_id.clone(), + resource_group_name.clone(), + container_app_name.clone(), + app_url, + ); + + let mut env_map: HashMap = HashMap::new(); + env_map.insert("AZURE_TENANT_ID".to_string(), client_config.tenant_id); + + // Extract credentials based on the type + let (azure_client_id, azure_client_secret) = match &client_config.credentials { + alien_azure_clients::AzureCredentials::ServicePrincipal { + client_id, + client_secret, + } => (client_id.clone(), client_secret.clone()), + alien_azure_clients::AzureCredentials::AccessToken { .. } => { + panic!("AccessToken credentials not supported in worker binding tests") + } + alien_azure_clients::AzureCredentials::ScopedAccessTokens { .. } => { + panic!("ScopedAccessTokens credentials not supported in worker binding tests") + } + alien_azure_clients::AzureCredentials::SasToken { .. } => { + panic!("SasToken credentials not supported in worker binding tests") + } + alien_azure_clients::AzureCredentials::WorkloadIdentity { client_id, .. } => { + panic!("WorkloadIdentity credentials not fully supported in worker binding tests, client_id: {}", client_id) + } + alien_azure_clients::AzureCredentials::ManagedIdentity { client_id, .. } => { + panic!("ManagedIdentity credentials not supported in worker binding tests, client_id: {}", client_id) + } + alien_azure_clients::AzureCredentials::VmManagedIdentity { .. } => { + panic!("VmManagedIdentity credentials not supported in worker binding tests") + } + }; + + env_map.insert("AZURE_CLIENT_ID".to_string(), azure_client_id); + env_map.insert("AZURE_CLIENT_SECRET".to_string(), azure_client_secret); + env_map.insert("AZURE_SUBSCRIPTION_ID".to_string(), subscription_id); + env_map.insert("ALIEN_DEPLOYMENT_TYPE".to_string(), "azure".to_string()); + let binding_json = serde_json::to_string(&binding).expect("Failed to serialize binding"); + env_map.insert(bindings::binding_env_var_name(binding_name), binding_json); + + let provider = Arc::new( + BindingsProvider::from_env(env_map) + .await + .expect("Failed to load Azure bindings provider"), + ); + let function = provider + .load_worker(binding_name) + .await + .unwrap_or_else(|e| { + panic!( + "Failed to load Azure function for binding '{}' using container app '{}': {:?}", + binding_name, container_app_name, e + ) + }); + + let mut created_container_apps = HashSet::new(); + created_container_apps.insert(container_app_name.clone()); + + Self { + function, + resource_group_name, + container_app_name, + container_apps_client, + authorization_client, + managed_identity_client, + long_running_operation_client, + managed_environment_id, + location: "eastus".to_string(), + container_image, + created_container_apps: Mutex::new(created_container_apps), + created_managed_identities: Mutex::new(created_managed_identities), + created_role_assignments: Mutex::new(created_role_assignments), + } + } + + async fn teardown(self) { + info!("🧹 Starting Container Apps test cleanup..."); + + // Cleanup role assignments first + let role_assignments_to_cleanup = { + let assignments = self.created_role_assignments.lock().unwrap(); + assignments.clone() + }; + + for assignment_id in role_assignments_to_cleanup { + match self + .authorization_client + .delete_role_assignment_by_id(assignment_id.clone()) + .await + { + Ok(_) => info!("✅ Role assignment {} deleted successfully", assignment_id), + Err(err) if matches!(err.error, Some(ErrorData::RemoteResourceNotFound { .. })) => { + info!("🔍 Role assignment {} was already deleted", assignment_id); + } + Err(e) => { + warn!( + "Failed to delete role assignment {} during cleanup: {:?}", + assignment_id, e + ); + } + } + } + + // Cleanup managed identities + let identities_to_cleanup = { + let identities = self.created_managed_identities.lock().unwrap(); + identities.clone() + }; + + for identity_name in identities_to_cleanup { + match self + .managed_identity_client + .delete_user_assigned_identity(&self.resource_group_name, &identity_name) + .await + { + Ok(_) => info!("✅ Managed identity {} deleted successfully", identity_name), + Err(err) if matches!(err.error, Some(ErrorData::RemoteResourceNotFound { .. })) => { + info!("🔍 Managed identity {} was already deleted", identity_name); + } + Err(e) => { + warn!( + "Failed to delete managed identity {} during cleanup: {:?}", + identity_name, e + ); + } + } + } + + // Cleanup container apps + let container_apps_to_cleanup = { + let apps = self.created_container_apps.lock().unwrap(); + apps.clone() + }; + + for container_app_name in container_apps_to_cleanup { + match self + .container_apps_client + .delete_container_app(&self.resource_group_name, &container_app_name) + .await + { + Ok(_) => info!( + "✅ Container app {} deleted successfully", + container_app_name + ), + Err(err) if matches!(err.error, Some(ErrorData::RemoteResourceNotFound { .. })) => { + info!( + "🔍 Container app {} was already deleted", + container_app_name + ); + } + Err(e) => { + warn!( + "Failed to delete container app {} during cleanup: {:?}", + container_app_name, e + ); + } + } + } + + info!("✅ Container Apps test cleanup completed"); + } +} + +#[cfg(feature = "azure")] +#[async_trait] +impl FunctionTestContext for AzureProviderTestContext { + async fn get_function(&self) -> Arc { + self.function.clone() + } + fn provider_name(&self) -> &'static str { + "azure" + } + fn get_test_endpoint(&self) -> String { + format!("{}/{}", self.resource_group_name, self.container_app_name) + } +} diff --git a/crates/alien-cli/src/commands/debug_tunnel.rs b/crates/alien-cli/src/commands/debug_tunnel.rs index a5fc0fb1b..4c951b393 100644 --- a/crates/alien-cli/src/commands/debug_tunnel.rs +++ b/crates/alien-cli/src/commands/debug_tunnel.rs @@ -46,9 +46,8 @@ use tokio_tungstenite::{ }; use uuid::Uuid; -/// Wire frames mirror `alien-managerx`'s `TunnelRequestFrame` / -/// `TunnelResponseFrame`. We re-declare them locally so the OSS CLI doesn't -/// depend on the platform crate. +/// Wire frames mirror the debug-tunnel protocol's request and response frames. +/// They are declared locally so the CLI remains self-contained. #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] struct TunnelRequestFrame { @@ -202,72 +201,41 @@ pub async fn spawn_push_tunnel( Ok(( env, - PushTunnelGuard { - writer: writer_handle, - reader: reader_handle, - server: server_handle, - }, + PushTunnelGuard::new([writer_handle, reader_handle, server_handle]), )) } /// RAII handle that owns the WS + local server tasks. Dropping aborts them. pub struct PushTunnelGuard { - writer: tokio::task::JoinHandle<()>, - reader: tokio::task::JoinHandle<()>, - server: tokio::task::JoinHandle<()>, + tasks: Vec>, } impl Drop for PushTunnelGuard { fn drop(&mut self) { - self.writer.abort(); - self.reader.abort(); - self.server.abort(); + for task in &self.tasks { + task.abort(); + } } } impl PushTunnelGuard { + fn new(tasks: impl IntoIterator>) -> Self { + Self { + tasks: tasks.into_iter().collect(), + } + } + /// Combine several guards into one so the caller can keep a single /// handle alive for the child process's run. Useful when a single /// `alien debug` session spawns multiple loopbacks (e.g. AWS + GCP + /// Azure all enabled for a pull-mode K8s deployment). pub fn merge(guards: Vec) -> PushTunnelGuard { - // We don't have a "fan-out" abort primitive; collect every task - // handle into a parent guard whose three slots are themselves - // tokio tasks that await + propagate. - let handles: Vec> = guards - .into_iter() - .flat_map(|mut g| { - // Replace each field with a no-op handle so the `Drop` on - // the moved-from guard doesn't double-abort the same task. - let writer = std::mem::replace(&mut g.writer, tokio::spawn(async {})); - let reader = std::mem::replace(&mut g.reader, tokio::spawn(async {})); - let server = std::mem::replace(&mut g.server, tokio::spawn(async {})); - std::mem::forget(g); // skip the no-op aborts in Drop - [writer, reader, server] - }) - .collect(); - let abort_handles: Vec = - handles.iter().map(|h| h.abort_handle()).collect(); - // Spawn a "supervisor" task that just owns the handles; aborting it - // doesn't free the children, so install a custom abort flow via the - // three slot tasks each holding an `AbortOnDrop` of the underlying - // join handles. - let abort_clone1 = abort_handles.clone(); - let writer = tokio::spawn(async move { - // park forever; aborted on drop - let _abort_clone1 = abort_clone1; - std::future::pending::<()>().await - }); - let reader = tokio::spawn(async move { std::future::pending::<()>().await }); - let server = tokio::spawn(async move { - let _abort_handles = abort_handles; - std::future::pending::<()>().await - }); - PushTunnelGuard { - writer, - reader, - server, + let task_count = guards.iter().map(|guard| guard.tasks.len()).sum(); + let mut tasks = Vec::with_capacity(task_count); + for mut guard in guards { + tasks.append(&mut guard.tasks); } + PushTunnelGuard { tasks } } } @@ -413,17 +381,9 @@ pub async fn spawn_pull_aws_loopback( "ALIEN_DEBUG_PLACEHOLDER".to_string(), ); - // We don't have a WS for the pull-AWS path — the proxy forwards via - // HTTP. Reuse PushTunnelGuard's structure but with no writer/reader - // tasks; just the server lifetime matters. - Ok(( - env, - PushTunnelGuard { - writer: tokio::spawn(async {}), - reader: tokio::spawn(async {}), - server: server_handle, - }, - )) + // The pull-AWS path forwards over HTTP, so only the server task belongs + // to this guard. + Ok((env, PushTunnelGuard::new([server_handle]))) } /// Crude service-name → default host map for use when the AWS CLI doesn't @@ -731,14 +691,7 @@ async fn spawn_generic_cloud_loopback( let _ = axum::serve(listener, app).await; }); - Ok(( - endpoint_url, - PushTunnelGuard { - writer: tokio::spawn(async {}), - reader: tokio::spawn(async {}), - server: server_handle, - }, - )) + Ok((endpoint_url, PushTunnelGuard::new([server_handle]))) } fn build_provider_env(provider: &str, endpoint_url: &str) -> BTreeMap { @@ -1001,3 +954,7 @@ fn urlencoding(input: &str) -> String { // through their methods. #[allow(dead_code)] fn _trait_markers(_h: HeaderMap, _b: Bytes, _m: Method) {} + +#[cfg(test)] +#[path = "debug_tunnel_tests.rs"] +mod tests; diff --git a/crates/alien-cli/src/commands/debug_tunnel_tests.rs b/crates/alien-cli/src/commands/debug_tunnel_tests.rs new file mode 100644 index 000000000..3914ce223 --- /dev/null +++ b/crates/alien-cli/src/commands/debug_tunnel_tests.rs @@ -0,0 +1,98 @@ +use super::PushTunnelGuard; +use std::{net::SocketAddr, sync::Arc, time::Duration}; +use tokio::{net::TcpListener, task::AbortHandle}; + +struct GuardFixture { + guard: PushTunnelGuard, + address: SocketAddr, + tasks: Vec, + tokens: Vec>, +} + +async fn guard_fixture(id: usize) -> GuardFixture { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("fixture listener should bind"); + let address = listener + .local_addr() + .expect("fixture listener should expose its address"); + + let writer_token: Arc = format!("bearer-{id}-writer").into(); + let reader_token: Arc = format!("bearer-{id}-reader").into(); + let server_token: Arc = format!("bearer-{id}-server").into(); + let tokens = [&writer_token, &reader_token, &server_token] + .map(|token| Arc::downgrade(token)) + .to_vec(); + + let writer = tokio::spawn(async move { + let _token = writer_token; + std::future::pending::<()>().await; + }); + let reader = tokio::spawn(async move { + let _token = reader_token; + std::future::pending::<()>().await; + }); + let server = tokio::spawn(async move { + let _listener = listener; + let _token = server_token; + std::future::pending::<()>().await; + }); + let tasks = [&writer, &reader, &server] + .map(|task| task.abort_handle()) + .to_vec(); + + GuardFixture { + guard: PushTunnelGuard::new([writer, reader, server]), + address, + tasks, + tokens, + } +} + +#[tokio::test] +async fn dropping_merged_guard_aborts_every_task_and_releases_owned_state() { + let fixtures = [guard_fixture(0).await, guard_fixture(1).await]; + let addresses = fixtures + .iter() + .map(|fixture| fixture.address) + .collect::>(); + let tasks = fixtures + .iter() + .flat_map(|fixture| fixture.tasks.iter().cloned()) + .collect::>(); + let tokens = fixtures + .iter() + .flat_map(|fixture| fixture.tokens.iter().cloned()) + .collect::>(); + + for address in &addresses { + TcpListener::bind(address) + .await + .expect_err("guard-owned listener should keep its port bound"); + } + assert!(tokens.iter().all(|token| token.upgrade().is_some())); + assert!(tasks.iter().all(|task| !task.is_finished())); + + let merged = + PushTunnelGuard::merge(fixtures.into_iter().map(|fixture| fixture.guard).collect()); + drop(merged); + + tokio::time::timeout(Duration::from_secs(1), async { + loop { + let tasks_finished = tasks.iter().all(AbortHandle::is_finished); + let tokens_released = tokens.iter().all(|token| token.upgrade().is_none()); + if tasks_finished && tokens_released { + break; + } + tokio::task::yield_now().await; + } + }) + .await + .expect("dropping the merged guard should cancel every child task"); + + for address in addresses { + TcpListener::bind(address) + .await + .expect("dropping the merged guard should release every listener"); + } +} diff --git a/crates/alien-cloudformation/src/generator.rs b/crates/alien-cloudformation/src/generator.rs index e9ea77d90..7a4c24a2e 100644 --- a/crates/alien-cloudformation/src/generator.rs +++ b/crates/alien-cloudformation/src/generator.rs @@ -10,9 +10,10 @@ use alien_core::{ import::{EmitContext, CURRENT_SETUP_IMPORT_FORMAT_VERSION}, ownership_policy_for_resource_type, CapacityGroup, CapacityGroupScalePolicy, ComputeCluster, ComputePoolSelection, DeploymentModel, DomainSettings, ErrorData, HeartbeatsMode, - KubernetesCluster, KubernetesSettings, Network, NetworkSettings, Platform, Result, Stack, - StackInputDefaultValue, StackInputDefinition, StackInputKind, StackInputProvider, - StackSettings, TelemetryMode, UpdatesMode, Worker, WorkerCode, + KubernetesCluster, KubernetesSettings, Network, NetworkSettings, Platform, + RemoteStackManagement, Result, Stack, StackInputDefaultValue, StackInputDefinition, + StackInputKind, StackInputProvider, StackSettings, TelemetryMode, UpdatesMode, Worker, + WorkerCode, }; use alien_error::AlienError; use indexmap::{indexmap, IndexMap}; @@ -829,6 +830,31 @@ fn apply_resource_dependencies( (resource_id.clone(), targets) }) .collect(); + // Remote Storage grants refer back to the management role. For the + // management -> storage bootstrap edge, wait for the bucket resources but + // not the grants that cannot exist until management does. + let remote_storage_prerequisite_targets: IndexMap> = emitted_resource_ids + .iter() + .filter(|(resource_id, _)| { + stack + .resources + .get(*resource_id) + .is_some_and(alien_core::ResourceEntry::is_remote_frozen_storage) + }) + .map(|(resource_id, logical_ids)| { + let targets = logical_ids + .iter() + .filter(|logical_id| { + template.resources.get(*logical_id).is_some_and(|resource| { + resource.condition.is_none() + && !is_remote_storage_permission_support_resource(resource) + }) + }) + .cloned() + .collect(); + (resource_id.clone(), targets) + }) + .collect(); for (resource_id, entry) in stack.resources() { let Some(resource_logical_ids) = emitted_resource_ids.get(resource_id) else { @@ -840,7 +866,14 @@ fn apply_resource_dependencies( if dependency.id() == resource_id { continue; } - if let Some(targets) = dependency_targets.get(dependency.id()) { + let targets = if entry.config.resource_type() == RemoteStackManagement::RESOURCE_TYPE { + remote_storage_prerequisite_targets + .get(dependency.id()) + .or_else(|| dependency_targets.get(dependency.id())) + } else { + dependency_targets.get(dependency.id()) + }; + if let Some(targets) = targets { for target in targets { if !depends_on.contains(target) { depends_on.push(target.clone()); @@ -866,6 +899,10 @@ fn apply_resource_dependencies( } } +fn is_remote_storage_permission_support_resource(resource: &CfResource) -> bool { + resource.resource_type == "AWS::IAM::Policy" +} + fn add_standard_parameters( template: &mut CfTemplate, stack: &Stack, diff --git a/crates/alien-cloudformation/tests/generator/aws_data_layer_tests.rs b/crates/alien-cloudformation/tests/generator/aws_data_layer_tests.rs index d57574380..367031581 100644 --- a/crates/alien-cloudformation/tests/generator/aws_data_layer_tests.rs +++ b/crates/alien-cloudformation/tests/generator/aws_data_layer_tests.rs @@ -1,10 +1,11 @@ //! AWS data-layer scenarios — storage / kv / queue / vault. -use super::helpers::render_built_ins; +use super::helpers::{custom_resource_registration, render_built_ins, render_built_ins_template}; use alien_cloudformation::RegistrationMode; use alien_core::{ - Kv, LifecycleRule, PermissionProfile, Queue, ResourceLifecycle, ServiceAccount, Stack, - StackSettings, Storage, Vault, Worker, WorkerCode, WorkerTrigger, + Kv, LifecycleRule, ManagementPermissions, PermissionProfile, Queue, RemoteStackManagement, + ResourceLifecycle, ResourceRef, ServiceAccount, Stack, StackSettings, Storage, Vault, Worker, + WorkerCode, WorkerTrigger, }; #[test] @@ -68,6 +69,122 @@ fn aws_storage_minimal_uses_safe_defaults() { insta::assert_snapshot!("aws_storage_minimal", yaml); } +#[test] +fn remote_storage_management_dependencies_are_acyclic() { + let storage_ref = ResourceRef::new(Storage::RESOURCE_TYPE, "files"); + let stack = Stack::new("remote-storage".to_string()) + .management(ManagementPermissions::override_( + PermissionProfile::new().resource("files", ["storage/remote-data-write"]), + )) + .add_with_remote_access( + Storage::new("files".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add_with_dependencies( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + vec![storage_ref.clone()], + ) + .add_with_dependencies( + Queue::new("jobs".to_string()).build(), + ResourceLifecycle::Frozen, + vec![storage_ref], + ) + .build(); + + let (template, _) = render_built_ins_template( + &stack, + StackSettings::default(), + custom_resource_registration(), + alien_cloudformation::CloudFormationTarget::Aws, + "aws", + "remote storage management dependencies", + ); + + let management_role = template + .resources + .values() + .find(|resource| resource.resource_type == "AWS::IAM::Role") + .expect("management role"); + let storage_bucket = template + .resources + .values() + .find(|resource| resource.resource_type == "AWS::S3::Bucket") + .expect("storage bucket"); + let storage_grant = template + .resources + .values() + .find(|resource| resource.resource_type == "AWS::IAM::Policy") + .expect("storage management grant"); + let queue = template + .resources + .values() + .find(|resource| resource.resource_type == "AWS::SQS::Queue") + .expect("unrelated storage dependent"); + + assert!(management_role + .depends_on + .contains(&storage_bucket.logical_id)); + assert!(!management_role + .depends_on + .contains(&storage_grant.logical_id)); + assert!(storage_grant + .depends_on + .contains(&management_role.logical_id)); + assert!(queue.depends_on.contains(&storage_grant.logical_id)); + + let grant_properties = + serde_json::to_value(&storage_grant.properties).expect("serialize storage grant"); + assert_eq!( + grant_properties["Roles"], + serde_json::json!([{ "Ref": management_role.logical_id }]), + "setup must attach the exact storage grant to the management role" + ); + let grant_actions = grant_properties["PolicyDocument"]["Statement"][0]["Action"] + .as_array() + .expect("storage grant must list actions"); + assert_eq!(grant_actions.len(), 4); + for action in [ + "s3:ListBucket", + "s3:GetObject", + "s3:PutObject", + "s3:DeleteObject", + ] { + assert!( + grant_actions.contains(&serde_json::json!(action)), + "storage grant must contain {action}" + ); + } + assert_eq!( + grant_properties["PolicyDocument"]["Statement"][0]["Resource"], + serde_json::json!([ + { "Fn::GetAtt": [storage_bucket.logical_id, "Arn"] }, + { + "Fn::Sub": format!( + "arn:${{AWS::Partition}}:s3:::${{{}}}/*", + storage_bucket.logical_id + ) + } + ]), + "setup must scope remote binding access to the concrete bucket" + ); + + for setup_policy in template + .resources + .values() + .filter(|resource| resource.resource_type == "AWS::IAM::ManagedPolicy") + { + let policy = serde_json::to_string(&setup_policy.properties) + .expect("serialize setup management policy"); + assert!( + !policy.contains("iam:CreatePolicy") + && !policy.contains("iam:CreatePolicyVersion") + && !policy.contains("iam:AttachRolePolicy"), + "the management role must not be able to expand its own permissions" + ); + } +} + #[test] fn storage_only_template_omits_custom_domain_inputs() { let stack = Stack::new("storage-minimal".to_string()) diff --git a/crates/alien-cloudformation/tests/generator/snapshots/generator__generator__aws_full_stack_tests__aws_full_stack.snap b/crates/alien-cloudformation/tests/generator/snapshots/generator__generator__aws_full_stack_tests__aws_full_stack.snap index daf54c84e..01827d6ef 100644 --- a/crates/alien-cloudformation/tests/generator/snapshots/generator__generator__aws_full_stack_tests__aws_full_stack.snap +++ b/crates/alien-cloudformation/tests/generator/snapshots/generator__generator__aws_full_stack_tests__aws_full_stack.snap @@ -665,6 +665,7 @@ Resources: Statement: - Action: - lambda:CreateFunction + - lambda:TagResource Condition: StringEquals: aws:RequestTag/deployment: @@ -696,7 +697,6 @@ Resources: - lambda:PutFunctionConcurrency - lambda:PutFunctionEventInvokeConfig - lambda:RemovePermission - - lambda:TagResource - lambda:UpdateAlias - lambda:UpdateCodeSigningConfig - lambda:UpdateFunctionCode diff --git a/crates/alien-core/src/client_config.rs b/crates/alien-core/src/client_config.rs index 7df6e563e..cf5aac22c 100644 --- a/crates/alien-core/src/client_config.rs +++ b/crates/alien-core/src/client_config.rs @@ -370,6 +370,14 @@ pub enum AzureCredentials { /// Alien bindings. tokens: HashMap, }, + /// A short-lived Azure Storage shared access signature. + /// + /// Query parameter values are kept decoded. Azure clients must encode them + /// when attaching them to a request URL. + SasToken { + /// Exact SAS query parameters, including the signature and expiry. + query_parameters: HashMap, + }, /// Azure VM IMDS managed identity. VmManagedIdentity { /// The client ID of the user-assigned managed identity @@ -417,6 +425,14 @@ impl std::fmt::Debug for AzureCredentials { .field("scopes", &tokens.keys().collect::>()) .field("tokens", &"[REDACTED]") .finish(), + AzureCredentials::SasToken { query_parameters } => f + .debug_struct("AzureCredentials::SasToken") + .field( + "parameter_names", + &query_parameters.keys().collect::>(), + ) + .field("query_parameters", &"[REDACTED]") + .finish(), AzureCredentials::VmManagedIdentity { client_id, identity_endpoint, @@ -732,6 +748,49 @@ mod tests { GcpClientConfig, GcpCredentials, KubernetesClientConfig, }; + #[test] + fn aws_credentials_wire_format_matches_manager_api_contract() { + let cases = [ + ( + AwsCredentials::AccessKeys { + access_key_id: "access-key".to_string(), + secret_access_key: "secret-key".to_string(), + session_token: Some("session-token".to_string()), + }, + serde_json::json!({ + "type": "accessKeys", + "access_key_id": "access-key", + "secret_access_key": "secret-key", + "session_token": "session-token", + }), + ), + ( + AwsCredentials::SessionCredentials { + access_key_id: "access-key".to_string(), + secret_access_key: "secret-key".to_string(), + session_token: "session-token".to_string(), + expires_at: "2099-01-01T00:00:00Z".to_string(), + }, + serde_json::json!({ + "type": "sessionCredentials", + "access_key_id": "access-key", + "secret_access_key": "secret-key", + "session_token": "session-token", + "expires_at": "2099-01-01T00:00:00Z", + }), + ), + ]; + + for (credentials, expected) in cases { + let serialized = serde_json::to_value(&credentials).unwrap(); + assert_eq!(serialized, expected); + assert_eq!( + serde_json::from_value::(serialized).unwrap(), + credentials + ); + } + } + #[test] fn kubernetes_cloud_exposes_nested_aws_config() { let config = ClientConfig::KubernetesCloud { diff --git a/crates/alien-core/src/debug_session.rs b/crates/alien-core/src/debug_session.rs index fb3f65662..f95bc3945 100644 --- a/crates/alien-core/src/debug_session.rs +++ b/crates/alien-core/src/debug_session.rs @@ -11,6 +11,7 @@ use std::collections::BTreeMap; use serde::{Deserialize, Serialize}; +use url::{Host, Url}; /// Errors raised by the debug-session producer (manager or agent). Callers /// wrap into their own error type when surfacing across crate boundaries. @@ -38,6 +39,191 @@ pub enum DebugSessionError { TokenMintFailed { platform: String, message: String }, } +/// Why a cloud endpoint supplied through a debug tunnel was rejected. +/// +/// Debug tunnel peers are authenticated, but the target URL is still +/// untrusted input. Keeping this policy in `alien-core` makes the manager-side +/// push relay and operator-side pull relay enforce the same SSRF boundary. +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +pub enum DebugCloudEndpointError { + /// The target is not an absolute URL that the URL parser accepts. + #[error("target URL is malformed")] + MalformedUrl, + /// Cloud API requests must use TLS. + #[error("target URL must use HTTPS")] + HttpsRequired, + /// Userinfo can conceal the real hostname and may leak credentials. + #[error("target URL must not contain credentials")] + CredentialsForbidden, + /// Fragments are not part of an HTTP request target and have no use here. + #[error("target URL must not contain a fragment")] + FragmentForbidden, + /// Only the standard HTTPS port is allowed. + #[error("target URL must use the default HTTPS port")] + NonDefaultPort, + /// IP literals include loopback, link-local, metadata, and private ranges. + #[error("target URL must use a provider hostname, not an IP address")] + IpLiteralForbidden, + /// The parsed hostname is absent or uses a confusing/non-DNS form. + #[error("target URL hostname is malformed or confusable")] + InvalidHostname, + /// The session/provider label is not one the debug relay supports. + #[error("unsupported cloud provider '{provider}'")] + UnsupportedProvider { provider: String }, + /// The hostname is not an API endpoint owned by the selected provider. + #[error("target hostname is not allowed for provider '{provider}'")] + HostNotAllowed { provider: String }, +} + +/// OAuth audience for an Azure endpoint accepted by the debug tunnel. +/// +/// Azure data-plane APIs do not use the endpoint hostname as their token +/// audience. Keeping the supported host-to-scope mapping here prevents the +/// manager and operator relays from minting a token for the wrong resource. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AzureDebugAuthScope { + /// Azure Resource Manager. + Management, + /// Azure Blob, Data Lake, File, Queue, and Table Storage. + Storage, + /// Azure Key Vault. + KeyVault, + /// Azure Service Bus data plane. + ServiceBus, +} + +impl AzureDebugAuthScope { + /// Exact OAuth scope used when minting the endpoint's bearer token. + pub const fn as_str(self) -> &'static str { + match self { + Self::Management => "https://management.azure.com/.default", + Self::Storage => "https://storage.azure.com/.default", + Self::KeyVault => "https://vault.azure.net/.default", + Self::ServiceBus => "https://servicebus.azure.net/.default", + } + } +} + +/// Map a validated Azure debug endpoint to its canonical OAuth audience. +pub fn azure_debug_auth_scope(url: &Url) -> Result { + let host = match url.host() { + Some(Host::Domain(host)) => host, + Some(Host::Ipv4(_) | Host::Ipv6(_)) => { + return Err(DebugCloudEndpointError::IpLiteralForbidden) + } + None => return Err(DebugCloudEndpointError::InvalidHostname), + }; + + if host == "management.azure.com" { + Ok(AzureDebugAuthScope::Management) + } else if [ + "blob.core.windows.net", + "dfs.core.windows.net", + "file.core.windows.net", + "queue.core.windows.net", + "table.core.windows.net", + ] + .iter() + .any(|domain| domain_is_or_below(host, domain)) + { + Ok(AzureDebugAuthScope::Storage) + } else if domain_is_or_below(host, "vault.azure.net") { + Ok(AzureDebugAuthScope::KeyVault) + } else if domain_is_or_below(host, "servicebus.windows.net") { + Ok(AzureDebugAuthScope::ServiceBus) + } else { + Err(DebugCloudEndpointError::HostNotAllowed { + provider: "azure".to_string(), + }) + } +} + +/// Parse and validate an outbound cloud API URL used by a debug tunnel. +/// +/// This is an SSRF boundary. It deliberately accepts only HTTPS endpoints +/// below cloud-provider-owned API domains, rejects IP literals and confusing +/// hostnames, and limits requests to the standard TLS port. Call this before +/// resolving or minting credentials so rejected input cannot trigger any +/// privileged work. +pub fn parse_debug_cloud_endpoint( + provider: &str, + raw_url: &str, +) -> Result { + let url = Url::parse(raw_url).map_err(|_| DebugCloudEndpointError::MalformedUrl)?; + + if url.scheme() != "https" { + return Err(DebugCloudEndpointError::HttpsRequired); + } + if !url.username().is_empty() || url.password().is_some() { + return Err(DebugCloudEndpointError::CredentialsForbidden); + } + if url.fragment().is_some() { + return Err(DebugCloudEndpointError::FragmentForbidden); + } + if url.port().is_some_and(|port| port != 443) { + return Err(DebugCloudEndpointError::NonDefaultPort); + } + + let host = match url.host() { + Some(Host::Domain(host)) => host, + Some(Host::Ipv4(_) | Host::Ipv6(_)) => { + return Err(DebugCloudEndpointError::IpLiteralForbidden) + } + None => return Err(DebugCloudEndpointError::InvalidHostname), + }; + if !is_unambiguous_dns_hostname(host) { + return Err(DebugCloudEndpointError::InvalidHostname); + } + + let allowed = match provider { + "aws" => { + domain_is_or_below(host, "amazonaws.com") + || domain_is_or_below(host, "amazonaws.com.cn") + } + "gcp" => domain_is_or_below(host, "googleapis.com"), + "azure" => { + azure_debug_auth_scope(&url)?; + true + } + other => { + return Err(DebugCloudEndpointError::UnsupportedProvider { + provider: other.to_string(), + }) + } + }; + + if !allowed { + return Err(DebugCloudEndpointError::HostNotAllowed { + provider: provider.to_string(), + }); + } + + Ok(url) +} + +fn domain_is_or_below(host: &str, domain: &str) -> bool { + host == domain + || host + .strip_suffix(domain) + .is_some_and(|prefix| prefix.ends_with('.')) +} + +fn is_unambiguous_dns_hostname(host: &str) -> bool { + if host.is_empty() || host.len() > 253 || host.ends_with('.') { + return false; + } + host.split('.').all(|label| { + !label.is_empty() + && label.len() <= 63 + && !label.starts_with('-') + && !label.ends_with('-') + && !label.starts_with("xn--") + && label + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit() || byte == b'-') + }) +} + /// Wire response. Discriminated by `kind`. Identical shape on both ends so /// the CLI can deserialize a session regardless of who produced it (manager /// or agent). @@ -344,9 +530,7 @@ pub fn extract_aws_service_and_region(host: &str, fallback_region: &str) -> (&'s }; let (service, region) = match &labels[..amz_idx] { - [_bucket_or_subdomain @ .., service, region] - if region.contains('-') && service.len() <= 8 => - { + [_bucket_or_subdomain @ .., service, region] if region.contains('-') => { (*service, region.to_string()) } [_subdomain @ .., service] => (*service, fallback_region.to_string()), @@ -382,7 +566,178 @@ pub fn extract_aws_service_and_region(host: &str, fallback_region: &str) -> (&'s #[cfg(test)] mod aws_endpoint_parsing_tests { - use super::extract_aws_service_and_region; + use super::{ + azure_debug_auth_scope, extract_aws_service_and_region, parse_debug_cloud_endpoint, + AzureDebugAuthScope, DebugCloudEndpointError, + }; + + #[test] + fn accepts_provider_owned_public_api_endpoints() { + for (provider, target) in [ + ("aws", "https://sts.us-east-1.amazonaws.com/"), + ("aws", "https://s3.cn-north-1.amazonaws.com.cn/bucket"), + ("gcp", "https://compute.googleapis.com/compute/v1/projects"), + ("azure", "https://management.azure.com/subscriptions"), + ("azure", "https://account.blob.core.windows.net/container"), + ("azure", "https://account.dfs.core.windows.net/filesystem"), + ("azure", "https://example.vault.azure.net/secrets"), + ("azure", "https://namespace.servicebus.windows.net/queue"), + ] { + assert!( + parse_debug_cloud_endpoint(provider, target).is_ok(), + "{provider} should accept {target}" + ); + } + } + + #[test] + fn rejects_provider_hosts_without_supported_signing_audiences() { + for (provider, target) in [ + ("aws", "https://ec2.us-east-1.api.aws/"), + ("azure", "https://graph.microsoft.com/v1.0/me"), + ("azure", "https://registry.azurecr.io/v2/"), + ] { + assert!( + matches!( + parse_debug_cloud_endpoint(provider, target), + Err(DebugCloudEndpointError::HostNotAllowed { .. }) + ), + "{provider} should reject unsupported signing target {target}" + ); + } + } + + #[test] + fn azure_endpoints_map_to_canonical_oauth_scopes() { + for (target, expected) in [ + ( + "https://management.azure.com/subscriptions", + AzureDebugAuthScope::Management, + ), + ( + "https://account.blob.core.windows.net/container", + AzureDebugAuthScope::Storage, + ), + ( + "https://account.dfs.core.windows.net/filesystem", + AzureDebugAuthScope::Storage, + ), + ( + "https://account.file.core.windows.net/share", + AzureDebugAuthScope::Storage, + ), + ( + "https://account.queue.core.windows.net/queue", + AzureDebugAuthScope::Storage, + ), + ( + "https://account.table.core.windows.net/table", + AzureDebugAuthScope::Storage, + ), + ( + "https://example.vault.azure.net/secrets", + AzureDebugAuthScope::KeyVault, + ), + ( + "https://namespace.servicebus.windows.net/queue", + AzureDebugAuthScope::ServiceBus, + ), + ] { + let url = parse_debug_cloud_endpoint("azure", target) + .expect("supported Azure endpoint should validate"); + let scope = azure_debug_auth_scope(&url) + .expect("validated Azure endpoint should have an OAuth audience"); + assert_eq!(scope, expected, "unexpected scope for {target}"); + } + + assert_eq!( + AzureDebugAuthScope::Management.as_str(), + "https://management.azure.com/.default" + ); + assert_eq!( + AzureDebugAuthScope::Storage.as_str(), + "https://storage.azure.com/.default" + ); + assert_eq!( + AzureDebugAuthScope::KeyVault.as_str(), + "https://vault.azure.net/.default" + ); + assert_eq!( + AzureDebugAuthScope::ServiceBus.as_str(), + "https://servicebus.azure.net/.default" + ); + } + + #[test] + fn rejects_non_https_and_nondefault_ports() { + assert_eq!( + parse_debug_cloud_endpoint("aws", "http://sts.amazonaws.com/") + .expect_err("HTTP endpoint must be rejected"), + DebugCloudEndpointError::HttpsRequired + ); + assert_eq!( + parse_debug_cloud_endpoint("gcp", "https://compute.googleapis.com:8443/") + .expect_err("nondefault port must be rejected"), + DebugCloudEndpointError::NonDefaultPort + ); + } + + #[test] + fn rejects_ip_literals_localhost_and_private_network_targets() { + for target in [ + "https://127.0.0.1/", + "https://10.1.2.3/", + "https://169.254.169.254/latest/meta-data/", + "https://[::1]/", + "https://[fe80::1]/", + ] { + assert_eq!( + parse_debug_cloud_endpoint("aws", target).expect_err("IP target must be rejected"), + DebugCloudEndpointError::IpLiteralForbidden, + "unexpected result for {target}" + ); + } + assert!(matches!( + parse_debug_cloud_endpoint("gcp", "https://localhost/"), + Err(DebugCloudEndpointError::HostNotAllowed { .. }) + )); + } + + #[test] + fn rejects_credentials_confusable_hosts_and_suffix_tricks() { + assert_eq!( + parse_debug_cloud_endpoint("azure", "https://operator:secret@management.azure.com/") + .expect_err("credential-bearing URL must be rejected"), + DebugCloudEndpointError::CredentialsForbidden + ); + assert_eq!( + parse_debug_cloud_endpoint("aws", "https://xn--amazn-fsa.amazonaws.com/") + .expect_err("punycode hostname must be rejected"), + DebugCloudEndpointError::InvalidHostname + ); + for target in [ + "https://amazonaws.com.attacker.example/", + "https://evilamazonaws.com/", + "https://googleapis.com.attacker.example/", + ] { + assert!(matches!( + parse_debug_cloud_endpoint("gcp", target), + Err(DebugCloudEndpointError::HostNotAllowed { .. }) + )); + } + } + + #[test] + fn provider_allowlists_do_not_overlap() { + assert!(matches!( + parse_debug_cloud_endpoint("gcp", "https://sts.amazonaws.com/"), + Err(DebugCloudEndpointError::HostNotAllowed { .. }) + )); + assert!(matches!( + parse_debug_cloud_endpoint("unknown", "https://compute.googleapis.com/"), + Err(DebugCloudEndpointError::UnsupportedProvider { .. }) + )); + } #[test] fn regional_service() { @@ -392,6 +747,33 @@ mod aws_endpoint_parsing_tests { ); } + #[test] + fn regional_long_service_names_use_the_host_region() { + for (host, expected_service, expected_region) in [ + ( + "cloudformation.us-west-2.amazonaws.com", + "cloudformation", + "us-west-2", + ), + ( + "secretsmanager.ap-northeast-1.amazonaws.com", + "secretsmanager", + "ap-northeast-1", + ), + ( + "id.execute-api.eu-west-1.amazonaws.com", + "execute-api", + "eu-west-1", + ), + ] { + assert_eq!( + extract_aws_service_and_region(host, "us-east-1"), + (expected_service, expected_region.to_string()), + "host: {host}" + ); + } + } + #[test] fn global_service() { assert_eq!( diff --git a/crates/alien-core/src/stack.rs b/crates/alien-core/src/stack.rs index a097e0e2c..3db7fa197 100644 --- a/crates/alien-core/src/stack.rs +++ b/crates/alien-core/src/stack.rs @@ -31,6 +31,15 @@ pub struct ResourceEntry { pub enabled_when: Option, } +impl ResourceEntry { + /// Returns whether this entry is Frozen Storage published for remote access. + pub fn is_remote_frozen_storage(&self) -> bool { + self.lifecycle == ResourceLifecycle::Frozen + && self.remote_access + && self.config.downcast_ref::().is_some() + } +} + /// A bag of resources, unaware of any cloud. #[derive(Builder, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] @@ -327,6 +336,53 @@ mod tests { }; use insta::assert_json_snapshot; + fn resource_entry( + resource: T, + lifecycle: ResourceLifecycle, + remote_access: bool, + ) -> ResourceEntry { + ResourceEntry { + config: Resource::new(resource), + lifecycle, + dependencies: Vec::new(), + remote_access, + enabled_when: None, + } + } + + #[test] + fn remote_frozen_storage_requires_storage_lifecycle_and_opt_in() { + assert!(resource_entry( + Storage::new("archive".to_string()).build(), + ResourceLifecycle::Frozen, + true, + ) + .is_remote_frozen_storage()); + assert!(!resource_entry( + Storage::new("archive".to_string()).build(), + ResourceLifecycle::Frozen, + false, + ) + .is_remote_frozen_storage()); + assert!(!resource_entry( + Storage::new("archive".to_string()).build(), + ResourceLifecycle::Live, + true, + ) + .is_remote_frozen_storage()); + assert!(!resource_entry( + Worker::new("worker".to_string()) + .code(WorkerCode::Image { + image: "example.com/worker:latest".to_string(), + }) + .permissions("worker-execution".to_string()) + .build(), + ResourceLifecycle::Frozen, + true, + ) + .is_remote_frozen_storage()); + } + #[test] fn test_stack_serialization() { use crate::WorkerCode; diff --git a/crates/alien-gcp-clients/src/gcp/credential_config.rs b/crates/alien-gcp-clients/src/gcp/credential_config.rs new file mode 100644 index 000000000..eafdc46ee --- /dev/null +++ b/crates/alien-gcp-clients/src/gcp/credential_config.rs @@ -0,0 +1,194 @@ +use std::collections::HashMap; + +use alien_client_core::{ErrorData, Result}; +use alien_error::AlienError; + +use super::{GcpClientConfig, GcpClientConfigExt, GcpCredentials}; + +pub(super) async fn parse_credentials_json( + credential_data: &serde_json::Value, + raw_json: &str, + environment_variables: &HashMap, +) -> Result<(GcpCredentials, String, String)> { + let cred_type = credential_data["type"] + .as_str() + .unwrap_or("service_account"); + + if cred_type == "external_account" { + let audience = credential_data["audience"] + .as_str() + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "audience not found in external_account credentials".to_string(), + errors: None, + }) + })? + .to_string(); + + let subject_token_type = credential_data["subject_token_type"] + .as_str() + .unwrap_or("urn:ietf:params:oauth:token-type:jwt") + .to_string(); + + let token_url = credential_data["token_url"] + .as_str() + .unwrap_or("https://sts.googleapis.com/v1/token") + .to_string(); + + let credential_source_file = credential_data["credential_source"]["file"] + .as_str() + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "credential_source.file not found in external_account credentials" + .to_string(), + errors: None, + }) + })? + .to_string(); + + let service_account_impersonation_url = credential_data + ["service_account_impersonation_url"] + .as_str() + .map(|value| value.to_string()); + + let project_id = environment_variables + .get("GCP_PROJECT_ID") + .or_else(|| environment_variables.get("GOOGLE_CLOUD_PROJECT")) + .cloned() + .or_else(|| { + credential_data["quota_project_id"] + .as_str() + .map(|value| value.to_string()) + }) + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "Missing GCP_PROJECT_ID or GOOGLE_CLOUD_PROJECT environment variable for external_account credentials".to_string(), + errors: None, + }) + })?; + + let region = environment_variables + .get("GCP_REGION") + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: + "Missing GCP_REGION environment variable for external_account credentials" + .to_string(), + errors: None, + }) + })? + .clone(); + + Ok(( + GcpCredentials::ExternalAccount { + audience, + subject_token_type, + token_url, + credential_source_file, + service_account_impersonation_url, + }, + project_id, + region, + )) + } else if cred_type == "authorized_user" { + let client_id = credential_data["client_id"] + .as_str() + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "client_id not found in authorized_user credentials".to_string(), + errors: None, + }) + })? + .to_string(); + + let client_secret = credential_data["client_secret"] + .as_str() + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "client_secret not found in authorized_user credentials".to_string(), + errors: None, + }) + })? + .to_string(); + + let refresh_token = credential_data["refresh_token"] + .as_str() + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "refresh_token not found in authorized_user credentials".to_string(), + errors: None, + }) + })? + .to_string(); + + // authorized_user credentials don't contain project_id, so we need it from + // the environment or from quota_project_id in the file + let project_id = environment_variables.get("GCP_PROJECT_ID") + .cloned() + .or_else(|| credential_data["quota_project_id"].as_str().map(|s| s.to_string())) + .ok_or_else(|| AlienError::new(ErrorData::InvalidClientConfig { + message: "Missing GCP_PROJECT_ID environment variable for authorized_user credentials \ + (quota_project_id not found in credentials file either)".to_string(), + errors: None, + }))?; + + let region = environment_variables + .get("GCP_REGION") + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: + "Missing GCP_REGION environment variable for authorized_user credentials" + .to_string(), + errors: None, + }) + })? + .clone(); + + Ok(( + GcpCredentials::AuthorizedUser { + client_id, + client_secret, + refresh_token, + }, + project_id, + region, + )) + } else { + // service_account or other types — treat as service account key + let project_id = credential_data["project_id"] + .as_str() + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidClientConfig { + message: "project_id not found in credentials file".to_string(), + errors: None, + }) + })? + .to_string(); + + let region = if let Some(region) = environment_variables.get("GCP_REGION") { + region.clone() + } else { + GcpClientConfig::fetch_metadata_region().await? + }; + + Ok(( + GcpCredentials::ServiceAccountKey { + json: raw_json.to_string(), + }, + project_id, + region, + )) + } +} + +pub(super) fn read_well_known_adc_file() -> Option<(String, serde_json::Value)> { + let home = std::env::var("HOME").ok()?; + let adc_path = std::path::Path::new(&home) + .join(".config") + .join("gcloud") + .join("application_default_credentials.json"); + + let json = std::fs::read_to_string(&adc_path).ok()?; + let value: serde_json::Value = serde_json::from_str(&json).ok()?; + Some((json, value)) +} diff --git a/crates/alien-gcp-clients/src/gcp/credential_exchange.rs b/crates/alien-gcp-clients/src/gcp/credential_exchange.rs new file mode 100644 index 000000000..650cba259 --- /dev/null +++ b/crates/alien-gcp-clients/src/gcp/credential_exchange.rs @@ -0,0 +1,477 @@ +use std::collections::HashMap; + +use alien_client_core::{ErrorData, Result}; +use alien_error::{AlienError, Context, IntoAlienError}; +use chrono::{DateTime, Utc}; +use reqwest::Client; +use serde::Deserialize; + +use super::{expires_at_from_expires_in, ExpiringAccessToken}; + +pub(super) async fn generate_jwt_token_with_expiry( + service_account_json: &str, +) -> Result { + use jwt_simple::prelude::*; + + #[derive(serde::Deserialize)] + struct ServiceAccountKey { + client_email: String, + private_key_id: String, + private_key: String, + } + + let service_account: ServiceAccountKey = serde_json::from_str(service_account_json) + .into_alien_error() + .context(ErrorData::InvalidClientConfig { + message: "Failed to parse service account JSON".to_string(), + errors: None, + })?; + + let mut extra = HashMap::new(); + extra.insert( + "scope".to_string(), + serde_json::Value::String("https://www.googleapis.com/auth/cloud-platform".to_string()), + ); + let claims = Claims::with_custom_claims(extra, Duration::from_secs(3600)) + .with_issuer(&service_account.client_email) + .with_subject(&service_account.client_email) + .with_audience("https://oauth2.googleapis.com/token"); + + let key_pair = RS256KeyPair::from_pem(&service_account.private_key) + .map_err(|error| { + AlienError::new(ErrorData::InvalidClientConfig { + message: format!( + "Failed to parse private key from service account. Internal error: {error}" + ), + errors: None, + }) + })? + .with_key_id(&service_account.private_key_id); + let assertion = key_pair.sign(claims).map_err(|error| { + AlienError::new(ErrorData::RequestSignError { + message: format!("Failed to sign JWT token: {error}"), + }) + })?; + + #[derive(Deserialize)] + struct TokenResponse { + access_token: String, + expires_in: i64, + } + + let response = Client::new() + .post("https://oauth2.googleapis.com/token") + .form(&[ + ("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"), + ("assertion", &assertion), + ]) + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to exchange JWT for access token".to_string(), + })?; + if !response.status().is_success() { + let status = response.status(); + let error_text = response + .text() + .await + .unwrap_or_else(|_| "Unknown error".to_string()); + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!("OAuth2 token exchange failed with status {status}: {error_text}"), + url: "https://oauth2.googleapis.com/token".to_string(), + http_status: status.as_u16(), + http_request_text: None, + http_response_text: Some(error_text), + })); + } + let token_response: TokenResponse = + response + .json() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to parse OAuth2 token response".to_string(), + })?; + Ok(ExpiringAccessToken { + token: token_response.access_token, + expires_at: expires_at_from_expires_in("GCP OAuth2", token_response.expires_in)?, + }) +} + +pub(super) async fn fetch_metadata_token_with_expiry() -> Result { + const URL: &str = "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"; + + #[derive(Deserialize)] + struct TokenResponse { + access_token: String, + expires_in: i64, + } + + let response = Client::new() + .get(URL) + .header("Metadata-Flavor", "Google") + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to fetch token from GCP metadata server".to_string(), + })?; + if !response.status().is_success() { + let status = response.status(); + let error_text = response + .text() + .await + .unwrap_or_else(|_| "Unknown error".to_string()); + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!("Metadata server returned error {status}: {error_text}"), + url: URL.to_string(), + http_status: status.as_u16(), + http_request_text: None, + http_response_text: Some(error_text), + })); + } + let token_response: TokenResponse = + response + .json() + .await + .into_alien_error() + .context(ErrorData::SerializationError { + message: "Failed to parse token response from GCP metadata server".to_string(), + })?; + Ok(ExpiringAccessToken { + token: token_response.access_token, + expires_at: expires_at_from_expires_in("GCP metadata", token_response.expires_in)?, + }) +} + +pub(super) async fn exchange_refresh_token_with_expiry( + client_id: &str, + client_secret: &str, + refresh_token: &str, +) -> Result { + #[derive(Deserialize)] + struct TokenResponse { + access_token: String, + expires_in: i64, + } + + let response = Client::new() + .post("https://oauth2.googleapis.com/token") + .form(&[ + ("grant_type", "refresh_token"), + ("client_id", client_id), + ("client_secret", client_secret), + ("refresh_token", refresh_token), + ]) + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to exchange refresh token for access token".to_string(), + })?; + if !response.status().is_success() { + let status = response.status(); + let error_text = response + .text() + .await + .unwrap_or_else(|_| "Unknown error".to_string()); + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!("OAuth2 token exchange failed with status {status}: {error_text}"), + url: "https://oauth2.googleapis.com/token".to_string(), + http_status: status.as_u16(), + http_request_text: None, + http_response_text: Some(error_text), + })); + } + let token_response: TokenResponse = + response + .json() + .await + .into_alien_error() + .context(ErrorData::SerializationError { + message: "Failed to parse OAuth2 token exchange response".to_string(), + })?; + Ok(ExpiringAccessToken { + token: token_response.access_token, + expires_at: expires_at_from_expires_in("GCP OAuth2", token_response.expires_in)?, + }) +} + +pub(super) async fn exchange_external_account_token_with_expiry( + audience: &str, + subject_token_type: &str, + token_url: &str, + credential_source_file: &str, + service_account_impersonation_url: Option<&str>, +) -> Result { + #[derive(Deserialize)] + struct StsTokenResponse { + access_token: String, + expires_in: i64, + } + + #[derive(Deserialize)] + #[serde(rename_all = "camelCase")] + struct ImpersonationTokenResponse { + access_token: String, + expire_time: String, + } + + let subject_token = std::fs::read_to_string(credential_source_file) + .into_alien_error() + .context(ErrorData::InvalidClientConfig { + message: format!( + "Failed to read external account subject token from: {credential_source_file}" + ), + errors: None, + })? + .trim() + .to_string(); + let scope = "https://www.googleapis.com/auth/cloud-platform"; + let client = Client::new(); + let response = client + .post(token_url) + .form(&[ + ( + "grant_type", + "urn:ietf:params:oauth:grant-type:token-exchange", + ), + ("audience", audience), + ( + "requested_token_type", + "urn:ietf:params:oauth:token-type:access_token", + ), + ("subject_token_type", subject_token_type), + ("subject_token", &subject_token), + ("scope", scope), + ]) + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to exchange external account token".to_string(), + })?; + if !response.status().is_success() { + let status = response.status(); + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!("External account token exchange failed with status {status}"), + url: token_url.to_string(), + http_status: status.as_u16(), + http_request_text: None, + // Token endpoints can echo submitted credentials or attacker-controlled + // text. Never retain their bodies in a serializable error chain. + http_response_text: None, + })); + } + let sts_token: StsTokenResponse = + response + .json() + .await + .into_alien_error() + .context(ErrorData::SerializationError { + message: "Failed to parse external account token exchange response".to_string(), + })?; + + let Some(impersonation_url) = service_account_impersonation_url else { + return Ok(ExpiringAccessToken { + token: sts_token.access_token, + expires_at: expires_at_from_expires_in("GCP STS", sts_token.expires_in)?, + }); + }; + let response = client + .post(impersonation_url) + .bearer_auth(&sts_token.access_token) + .json(&serde_json::json!({ + "scope": [scope], + "lifetime": "3600s", + })) + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to impersonate external account service account".to_string(), + })?; + if !response.status().is_success() { + let status = response.status(); + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!( + "External account service account impersonation failed with status {status}" + ), + url: impersonation_url.to_string(), + http_status: status.as_u16(), + http_request_text: None, + http_response_text: None, + })); + } + let token_response: ImpersonationTokenResponse = response + .json() + .await + .into_alien_error() + .context(ErrorData::SerializationError { + message: "Failed to parse service account impersonation response".to_string(), + })?; + let expires_at = DateTime::parse_from_rfc3339(&token_response.expire_time) + .into_alien_error() + .context(ErrorData::InvalidInput { + message: "GCP returned an invalid external-account token expiry".to_string(), + field_name: None, + })? + .with_timezone(&Utc); + Ok(ExpiringAccessToken { + token: token_response.access_token, + expires_at, + }) +} + +#[cfg(test)] +mod tests { + use std::io::Write; + + use tokio::{ + io::{AsyncReadExt, AsyncWriteExt}, + net::{TcpListener, TcpStream}, + }; + + use super::*; + + #[tokio::test] + async fn external_account_exchange_error_discards_untrusted_response_body() { + const SUBJECT_SECRET: &str = "SUBJECT_SECRET_MUST_NOT_LEAK"; + const RESPONSE_SECRET: &str = "FIRST_STAGE_RESPONSE_MUST_NOT_LEAK"; + let (endpoint, server) = start_token_server(vec![( + "403 Forbidden", + format!("{SUBJECT_SECRET} {RESPONSE_SECRET}"), + )]) + .await; + let token_file = subject_token_file(SUBJECT_SECRET); + + let error = exchange_external_account_token_with_expiry( + "test-audience", + "urn:ietf:params:oauth:token-type:jwt", + &format!("{endpoint}/sts"), + &token_file.path().display().to_string(), + None, + ) + .await + .expect_err("first-stage STS failure must propagate"); + let requests = server.await.expect("join token server"); + assert_eq!(requests.len(), 1); + assert!(requests[0].contains("subject_token=SUBJECT_SECRET_MUST_NOT_LEAK")); + assert_error_discards_secrets(&error, &[SUBJECT_SECRET, RESPONSE_SECRET]); + } + + #[tokio::test] + async fn external_account_impersonation_error_discards_tokens_and_response_body() { + const SUBJECT_SECRET: &str = "SUBJECT_SECRET_MUST_NOT_LEAK"; + const STS_TOKEN_SECRET: &str = "STS_TOKEN_MUST_NOT_LEAK"; + const RESPONSE_SECRET: &str = "IMPERSONATION_RESPONSE_MUST_NOT_LEAK"; + let (endpoint, server) = start_token_server(vec![ + ( + "200 OK", + format!(r#"{{"access_token":"{STS_TOKEN_SECRET}","expires_in":3600}}"#), + ), + ( + "403 Forbidden", + format!("{SUBJECT_SECRET} {STS_TOKEN_SECRET} {RESPONSE_SECRET}"), + ), + ]) + .await; + let token_file = subject_token_file(SUBJECT_SECRET); + + let error = exchange_external_account_token_with_expiry( + "test-audience", + "urn:ietf:params:oauth:token-type:jwt", + &format!("{endpoint}/sts"), + &token_file.path().display().to_string(), + Some(&format!("{endpoint}/impersonate")), + ) + .await + .expect_err("impersonation failure must propagate"); + let requests = server.await.expect("join token server"); + assert_eq!(requests.len(), 2); + assert!(requests[1].contains(&format!("authorization: Bearer {STS_TOKEN_SECRET}"))); + assert_error_discards_secrets(&error, &[SUBJECT_SECRET, STS_TOKEN_SECRET, RESPONSE_SECRET]); + } + + fn subject_token_file(token: &str) -> tempfile::NamedTempFile { + let mut file = tempfile::NamedTempFile::new().expect("create subject token file"); + file.write_all(token.as_bytes()) + .expect("write subject token file"); + file + } + + fn assert_error_discards_secrets(error: &AlienError, secrets: &[&str]) { + let ErrorData::HttpResponseError { + http_response_text, + http_request_text, + .. + } = error + .error + .as_ref() + .expect("structured HTTP response error") + else { + panic!("expected HTTP response error, got {error:?}"); + }; + assert!(http_response_text.is_none()); + assert!(http_request_text.is_none()); + let serialized = serde_json::to_string(error).expect("serialize error"); + for secret in secrets { + assert!( + !serialized.contains(secret), + "error retained secret {secret}" + ); + } + } + + async fn start_token_server( + responses: Vec<(&'static str, String)>, + ) -> (String, tokio::task::JoinHandle>) { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("bind token server"); + let address = listener.local_addr().expect("token server address"); + let server = tokio::spawn(async move { + let mut requests = Vec::with_capacity(responses.len()); + for (status, body) in responses { + let (mut stream, _) = listener.accept().await.expect("accept token request"); + requests.push(read_http_request(&mut stream).await); + let response = format!( + "HTTP/1.1 {status}\r\ncontent-type: application/json\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{body}", + body.len() + ); + stream + .write_all(response.as_bytes()) + .await + .expect("write token response"); + } + requests + }); + (format!("http://{address}"), server) + } + + async fn read_http_request(stream: &mut TcpStream) -> String { + let mut bytes = Vec::new(); + let mut buffer = [0u8; 2048]; + loop { + let count = stream.read(&mut buffer).await.expect("read request"); + assert!(count > 0, "request ended before its declared body"); + bytes.extend_from_slice(&buffer[..count]); + let Some(header_end) = bytes.windows(4).position(|window| window == b"\r\n\r\n") else { + continue; + }; + let headers = String::from_utf8_lossy(&bytes[..header_end]); + let content_length = headers + .lines() + .find_map(|line| { + line.to_ascii_lowercase() + .strip_prefix("content-length:") + .and_then(|value| value.trim().parse::().ok()) + }) + .unwrap_or(0); + if bytes.len() >= header_end + 4 + content_length { + return String::from_utf8(bytes).expect("HTTP request should be UTF-8"); + } + } + } +} diff --git a/crates/alien-gcp-clients/src/gcp/iam.rs b/crates/alien-gcp-clients/src/gcp/iam.rs index 7d0df3b78..e5645815a 100644 --- a/crates/alien-gcp-clients/src/gcp/iam.rs +++ b/crates/alien-gcp-clients/src/gcp/iam.rs @@ -90,7 +90,7 @@ pub trait IamApi: Send + Sync + Debug { async fn delete_role(&self, role_name: String) -> Result; - async fn undelete_role(&self, role_name: String) -> Result; + async fn undelete_role(&self, role_name: String, request: UndeleteRoleRequest) -> Result; async fn get_role(&self, role_name: String) -> Result; @@ -99,6 +99,7 @@ pub trait IamApi: Send + Sync + Debug { page_size: Option, page_token: Option, show_deleted: Option, + view: Option, ) -> Result; async fn patch_role( @@ -321,17 +322,11 @@ impl IamApi for IamClient { /// Undeletes a custom role. /// See: https://cloud.google.com/iam/docs/reference/rest/v1/projects.roles/undelete - async fn undelete_role(&self, role_name: String) -> Result { + async fn undelete_role(&self, role_name: String, request: UndeleteRoleRequest) -> Result { let path = format!("{}:undelete", self.build_role_path(role_name.clone())); self.base - .execute_request( - Method::POST, - &path, - None, - Some(UndeleteRoleRequest {}), - &role_name, - ) + .execute_request(Method::POST, &path, None, Some(request), &role_name) .await } @@ -352,6 +347,7 @@ impl IamApi for IamClient { page_size: Option, page_token: Option, show_deleted: Option, + view: Option, ) -> Result { let path = format!("projects/{}/roles", self.project_id); let mut query_params = Vec::new(); @@ -364,6 +360,9 @@ impl IamApi for IamClient { if let Some(show_deleted) = show_deleted { query_params.push(("showDeleted", show_deleted.to_string())); } + if let Some(view) = view { + query_params.push(("view", view.as_query_value().to_string())); + } self.base .execute_request( @@ -544,7 +543,28 @@ pub struct PatchServiceAccountRequest { /// Based on: https://cloud.google.com/iam/docs/reference/rest/v1/projects.roles/undelete #[derive(Debug, Serialize, Deserialize, Clone, Default, Builder)] #[serde(rename_all = "camelCase")] -pub struct UndeleteRoleRequest {} +pub struct UndeleteRoleRequest { + /// Optional role etag used for a consistent read-modify-write. + #[serde(skip_serializing_if = "Option::is_none")] + pub etag: Option, +} + +/// Amount of role data returned by list operations. +#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum RoleView { + Basic, + Full, +} + +impl RoleView { + fn as_query_value(self) -> &'static str { + match self { + Self::Basic => "BASIC", + Self::Full => "FULL", + } + } +} /// Represents the launch stage of a role. /// Based on: https://cloud.google.com/iam/docs/reference/rest/v1/organizations.roles#Role.RoleLaunchStage @@ -648,3 +668,25 @@ pub struct GenerateAccessTokenResponse { /// The expiration time of the access token in RFC3339 format. pub expire_time: String, } + +#[cfg(test)] +mod tests { + use super::{RoleView, UndeleteRoleRequest}; + + #[test] + fn undelete_role_request_serializes_etag_for_consistent_recovery() { + let request = UndeleteRoleRequest { + etag: Some("BwYQ2M3J5UY=".to_string()), + }; + + assert_eq!( + serde_json::to_value(request).expect("undelete request should serialize"), + serde_json::json!({ "etag": "BwYQ2M3J5UY=" }) + ); + } + + #[test] + fn full_role_view_uses_the_google_iam_query_value() { + assert_eq!(RoleView::Full.as_query_value(), "FULL"); + } +} diff --git a/crates/alien-gcp-clients/src/gcp/mod.rs b/crates/alien-gcp-clients/src/gcp/mod.rs index 096e65978..ef42704e7 100644 --- a/crates/alien-gcp-clients/src/gcp/mod.rs +++ b/crates/alien-gcp-clients/src/gcp/mod.rs @@ -7,6 +7,8 @@ pub mod cloudrun; pub mod cloudscheduler; pub mod compute; pub mod container; +mod credential_config; +mod credential_exchange; pub mod firestore; pub mod gcp_request_utils; pub mod gcs; @@ -14,14 +16,15 @@ pub mod iam; pub mod longrunning; pub mod monitoring; pub mod pubsub; +mod remote_storage_credentials; pub mod resource_manager; pub mod secret_manager; pub mod service_usage; use alien_client_core::{ErrorData, Result}; use alien_error::{AlienError, Context, IntoAlienError}; +use chrono::{DateTime, Utc}; use reqwest::Client; -use serde::Deserialize; use std::collections::HashMap; // Re-export types from alien-core @@ -30,6 +33,149 @@ pub use alien_core::{ GcpServiceOverrides as ServiceOverrides, }; +enum MaterializedAccessTokenExpiry { + Unavailable, + ProviderTimestamp(String), + Exact(DateTime), +} + +struct MaterializedAccessToken { + token: String, + expiry: MaterializedAccessTokenExpiry, +} + +impl MaterializedAccessToken { + fn opaque(token: String) -> Self { + Self { + token, + expiry: MaterializedAccessTokenExpiry::Unavailable, + } + } + + fn into_token(self) -> String { + self.token + } + + fn into_expiring(self) -> Result { + let expires_at = match self.expiry { + MaterializedAccessTokenExpiry::Unavailable => { + return Err(AlienError::new(ErrorData::InvalidClientConfig { + message: "An opaque GCP access token has no authoritative expiry".to_string(), + errors: None, + })); + } + MaterializedAccessTokenExpiry::ProviderTimestamp(expires_at) => { + DateTime::parse_from_rfc3339(&expires_at) + .into_alien_error() + .context(ErrorData::InvalidInput { + message: "GCP returned an invalid access-token expiry".to_string(), + field_name: None, + })? + .with_timezone(&Utc) + } + MaterializedAccessTokenExpiry::Exact(expires_at) => expires_at, + }; + Ok(ExpiringAccessToken { + token: self.token, + expires_at, + }) + } +} + +impl From for MaterializedAccessToken { + fn from(token: ExpiringAccessToken) -> Self { + Self { + token: token.token, + expiry: MaterializedAccessTokenExpiry::Exact(token.expires_at), + } + } +} + +/// A GCP access token paired with IAMCredentials' authoritative expiry. +pub struct ExpiringAccessToken { + pub token: String, + pub expires_at: DateTime, +} + +impl std::fmt::Debug for ExpiringAccessToken { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ExpiringAccessToken") + .field("token", &"[REDACTED]") + .field("expires_at", &self.expires_at) + .finish() + } +} + +fn expires_at_from_expires_in(provider: &str, expires_in: i64) -> Result> { + if expires_in <= 0 { + return Err(AlienError::new(ErrorData::InvalidInput { + message: format!("{provider} returned a non-positive access-token lifetime"), + field_name: Some("expires_in".to_string()), + })); + } + Utc::now() + .checked_add_signed(chrono::Duration::seconds(expires_in)) + .ok_or_else(|| { + AlienError::new(ErrorData::InvalidInput { + message: format!("{provider} returned an unsupported access-token lifetime"), + field_name: Some("expires_in".to_string()), + }) + }) +} + +async fn materialize_access_token(config: &GcpClientConfig) -> Result { + match &config.credentials { + GcpCredentials::AccessToken { token } => { + Ok(MaterializedAccessToken::opaque(token.clone())) + } + GcpCredentials::ImpersonatedServiceAccount { source, config } => { + materialize_impersonated_access_token(source, config).await + } + GcpCredentials::ServiceAccountKey { json } => { + credential_exchange::generate_jwt_token_with_expiry(json) + .await + .map(Into::into) + } + GcpCredentials::ServiceMetadata => { + credential_exchange::fetch_metadata_token_with_expiry() + .await + .map(Into::into) + } + GcpCredentials::ProjectedServiceAccount { .. } => Err(AlienError::new( + ErrorData::InvalidClientConfig { + message: "Projected GCP workload-identity JWTs must be exchanged through an explicit external-account STS configuration before use as OAuth access tokens".to_string(), + errors: None, + }, + )), + GcpCredentials::ExternalAccount { + audience, + subject_token_type, + token_url, + credential_source_file, + service_account_impersonation_url, + } => credential_exchange::exchange_external_account_token_with_expiry( + audience, + subject_token_type, + token_url, + credential_source_file, + service_account_impersonation_url.as_deref(), + ) + .await + .map(Into::into), + GcpCredentials::AuthorizedUser { + client_id, + client_secret, + refresh_token, + } => credential_exchange::exchange_refresh_token_with_expiry( + client_id, + client_secret, + refresh_token, + ) + .await + .map(Into::into), + } +} + /// Trait for GCP platform configuration operations #[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)] @@ -52,9 +198,29 @@ pub trait GcpClientConfigExt { /// Get bearer token for the given audience async fn get_bearer_token(&self, audience: &str) -> Result; + /// Materialize an access token and the provider-reported expiry. + async fn get_access_token_with_expiry(&self, audience: &str) -> Result; + + /// Materialize an impersonated service-account token and authoritative expiry. + async fn get_impersonated_access_token_with_expiry(&self) -> Result; + + /// Exchanges an access token for a Credential Access Boundary token that + /// is confined to one Cloud Storage bucket. + async fn downscope_access_token_for_bucket( + &self, + bucket_name: &str, + available_role: &str, + ) -> Result; + /// Generate an OAuth2 access token from service account credentials async fn generate_jwt_token(&self, service_account_json: &str) -> Result; + /// Generate an OAuth2 access token and retain its provider-reported expiry. + async fn generate_jwt_token_with_expiry( + &self, + service_account_json: &str, + ) -> Result; + /// Build SDK configuration async fn build_sdk_config(&self) -> Result; @@ -70,6 +236,9 @@ pub trait GcpClientConfigExt { /// Fetch token from metadata server async fn fetch_metadata_token(&self) -> Result; + /// Fetch token and expiry from metadata server. + async fn fetch_metadata_token_with_expiry(&self) -> Result; + /// Get projected token from file async fn get_projected_token(&self, token_file: &str) -> Result; @@ -80,6 +249,13 @@ pub trait GcpClientConfigExt { refresh_token: &str, ) -> Result; + /// Exchange a refresh token and retain the returned access-token expiry. + async fn exchange_refresh_token_with_expiry( + client_id: &str, + client_secret: &str, + refresh_token: &str, + ) -> Result; + /// Exchange an external account subject token for a Google access token. async fn exchange_external_account_token( audience: &str, @@ -89,6 +265,15 @@ pub trait GcpClientConfigExt { service_account_impersonation_url: Option<&str>, ) -> Result; + /// Exchange an external account token and retain the final token expiry. + async fn exchange_external_account_token_with_expiry( + audience: &str, + subject_token_type: &str, + token_url: &str, + credential_source_file: &str, + service_account_impersonation_url: Option<&str>, + ) -> Result; + /// Parse a credentials JSON value and return (credentials, project_id, region) async fn parse_credentials_json( credential_data: &serde_json::Value, @@ -299,40 +484,40 @@ impl GcpClientConfigExt for GcpClientConfig { /// Generates a bearer token for GCP API authentication async fn get_bearer_token(&self, _audience: &str) -> Result { - match &self.credentials { - GcpCredentials::AccessToken { token } => Ok(token.clone()), - GcpCredentials::ImpersonatedServiceAccount { source, config } => { - generate_impersonated_access_token(source, config) - .await - .map(|response| response.access_token) - } - GcpCredentials::ServiceAccountKey { json } => self.generate_jwt_token(json).await, - GcpCredentials::ServiceMetadata => self.fetch_metadata_token().await, - GcpCredentials::ProjectedServiceAccount { token_file, .. } => { - self.get_projected_token(token_file).await - } - GcpCredentials::ExternalAccount { - audience, - subject_token_type, - token_url, - credential_source_file, - service_account_impersonation_url, - } => { - Self::exchange_external_account_token( - audience, - subject_token_type, - token_url, - credential_source_file, - service_account_impersonation_url.as_deref(), - ) - .await - } - GcpCredentials::AuthorizedUser { - client_id, - client_secret, - refresh_token, - } => Self::exchange_refresh_token(client_id, client_secret, refresh_token).await, - } + materialize_access_token(self) + .await + .map(MaterializedAccessToken::into_token) + } + + async fn get_access_token_with_expiry(&self, _audience: &str) -> Result { + materialize_access_token(self).await?.into_expiring() + } + + async fn get_impersonated_access_token_with_expiry(&self) -> Result { + let GcpCredentials::ImpersonatedServiceAccount { source, config } = &self.credentials + else { + return Err(AlienError::new(ErrorData::InvalidClientConfig { + message: "An impersonated service-account credential source is required" + .to_string(), + errors: None, + })); + }; + materialize_impersonated_access_token(source, config) + .await? + .into_expiring() + } + + async fn downscope_access_token_for_bucket( + &self, + bucket_name: &str, + available_role: &str, + ) -> Result { + remote_storage_credentials::downscope_access_token_for_bucket( + self, + bucket_name, + available_role, + ) + .await } /// Get service endpoint, checking for overrides first @@ -365,105 +550,16 @@ impl GcpClientConfigExt for GcpClientConfig { /// at Google's OAuth2 token endpoint for an access token with /// `cloud-platform` scope. async fn generate_jwt_token(&self, service_account_json: &str) -> Result { - use jwt_simple::prelude::*; - - #[derive(serde::Deserialize)] - struct ServiceAccountKey { - client_email: String, - private_key_id: String, - private_key: String, - } - - // Parse the service account JSON to extract only the fields we need - let service_account: ServiceAccountKey = serde_json::from_str(service_account_json) - .into_alien_error() - .context(ErrorData::InvalidClientConfig { - message: "Failed to parse service account JSON".to_string(), - errors: None, - })?; - - // Create JWT claims for the OAuth2 token exchange. - // The audience is Google's token endpoint; the scope claim requests - // broad cloud-platform access (individual API permissions are governed - // by IAM, not the token scope). - let mut extra = HashMap::new(); - extra.insert( - "scope".to_string(), - serde_json::Value::String("https://www.googleapis.com/auth/cloud-platform".to_string()), - ); - let claims = Claims::with_custom_claims(extra, Duration::from_secs(3600)) - .with_issuer(&service_account.client_email) - .with_subject(&service_account.client_email) - .with_audience("https://oauth2.googleapis.com/token"); - - // Parse the private key and set the key_id - let key_pair = RS256KeyPair::from_pem(&service_account.private_key) - .map_err(|e| { - AlienError::new(ErrorData::InvalidClientConfig { - message: format!( - "Failed to parse private key from service account. Internal error: {}", - e.to_string() - ), - errors: None, - }) - })? - .with_key_id(&service_account.private_key_id); - - // Sign the JWT assertion - let assertion = key_pair.sign(claims).map_err(|e| { - AlienError::new(ErrorData::RequestSignError { - message: format!("Failed to sign JWT token: {}", e), - }) - })?; - - // Exchange the JWT assertion for an OAuth2 access token - #[derive(Deserialize)] - struct TokenResponse { - access_token: String, - } - - let client = Client::new(); - let response = client - .post("https://oauth2.googleapis.com/token") - .form(&[ - ("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"), - ("assertion", &assertion), - ]) - .send() + self.generate_jwt_token_with_expiry(service_account_json) .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Failed to exchange JWT for access token".to_string(), - })?; - - if !response.status().is_success() { - let status = response.status(); - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "OAuth2 token exchange failed with status {}: {}", - status, error_text - ), - url: "https://oauth2.googleapis.com/token".to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); - } - - let token_response: TokenResponse = - response - .json() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Failed to parse OAuth2 token response".to_string(), - })?; + .map(|token| token.token) + } - Ok(token_response.access_token) + async fn generate_jwt_token_with_expiry( + &self, + service_account_json: &str, + ) -> Result { + credential_exchange::generate_jwt_token_with_expiry(service_account_json).await } /// Builds a GCP SDK config from the stored configuration. @@ -629,70 +725,22 @@ impl GcpClientConfigExt for GcpClientConfig { /// Fetches an access token from the GCP metadata server async fn fetch_metadata_token(&self) -> Result { - use reqwest::Client; - - #[derive(serde::Deserialize)] - struct TokenResponse { - access_token: String, - } - - let client = Client::new(); - let response = client - .get("http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token") - .header("Metadata-Flavor", "Google") - .send() + self.fetch_metadata_token_with_expiry() .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Failed to fetch token from GCP metadata server".to_string(), - })?; - - if !response.status().is_success() { - let status = response.status(); - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!("Metadata server returned error {}: {}", status, error_text), - url: "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token".to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); - } - - let token_response: TokenResponse = - response - .json() - .await - .into_alien_error() - .context(ErrorData::SerializationError { - message: "Failed to parse token response from GCP metadata server".to_string(), - })?; + .map(|token| token.token) + } - Ok(token_response.access_token) + async fn fetch_metadata_token_with_expiry(&self) -> Result { + credential_exchange::fetch_metadata_token_with_expiry().await } /// Gets a projected service account token from the file system /// This is used for Kubernetes workload identity - async fn get_projected_token(&self, token_file: &str) -> Result { - let token = std::fs::read_to_string(token_file) - .into_alien_error() - .context(ErrorData::InvalidClientConfig { - message: format!( - "Failed to read projected service account token from: {}", - token_file - ), - errors: None, - })? - .trim() - .to_string(); - - // For projected tokens, we need to use the token as-is for most operations - // However, if it's an OIDC token, we might need to exchange it for a Google access token - // For now, we'll return the token as-is, but this could be enhanced to do token exchange - Ok(token) + async fn get_projected_token(&self, _token_file: &str) -> Result { + Err(AlienError::new(ErrorData::InvalidClientConfig { + message: "Projected GCP workload-identity JWTs require an explicit external-account STS configuration".to_string(), + errors: None, + })) } /// Exchanges a refresh token for an access token via Google's OAuth2 token endpoint. @@ -701,55 +749,22 @@ impl GcpClientConfigExt for GcpClientConfig { client_secret: &str, refresh_token: &str, ) -> Result { - #[derive(Deserialize)] - struct TokenResponse { - access_token: String, - } - - let client = Client::new(); - let response = client - .post("https://oauth2.googleapis.com/token") - .form(&[ - ("grant_type", "refresh_token"), - ("client_id", client_id), - ("client_secret", client_secret), - ("refresh_token", refresh_token), - ]) - .send() + Self::exchange_refresh_token_with_expiry(client_id, client_secret, refresh_token) .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Failed to exchange refresh token for access token".to_string(), - })?; - - if !response.status().is_success() { - let status = response.status(); - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "OAuth2 token exchange failed with status {}: {}", - status, error_text - ), - url: "https://oauth2.googleapis.com/token".to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); - } - - let token_response: TokenResponse = - response - .json() - .await - .into_alien_error() - .context(ErrorData::SerializationError { - message: "Failed to parse OAuth2 token exchange response".to_string(), - })?; + .map(|token| token.token) + } - Ok(token_response.access_token) + async fn exchange_refresh_token_with_expiry( + client_id: &str, + client_secret: &str, + refresh_token: &str, + ) -> Result { + credential_exchange::exchange_refresh_token_with_expiry( + client_id, + client_secret, + refresh_token, + ) + .await } /// Exchanges an external account subject token through Google's Security Token Service. @@ -760,127 +775,32 @@ impl GcpClientConfigExt for GcpClientConfig { credential_source_file: &str, service_account_impersonation_url: Option<&str>, ) -> Result { - #[derive(Deserialize)] - struct StsTokenResponse { - access_token: String, - } - - #[derive(Deserialize)] - #[serde(rename_all = "camelCase")] - struct ImpersonationTokenResponse { - access_token: String, - } - - let subject_token = std::fs::read_to_string(credential_source_file) - .into_alien_error() - .context(ErrorData::InvalidClientConfig { - message: format!( - "Failed to read external account subject token from: {}", - credential_source_file - ), - errors: None, - })? - .trim() - .to_string(); - - let scope = "https://www.googleapis.com/auth/cloud-platform"; - let client = Client::new(); - let response = client - .post(token_url) - .form(&[ - ( - "grant_type", - "urn:ietf:params:oauth:grant-type:token-exchange", - ), - ("audience", audience), - ( - "requested_token_type", - "urn:ietf:params:oauth:token-type:access_token", - ), - ("subject_token_type", subject_token_type), - ("subject_token", &subject_token), - ("scope", scope), - ]) - .send() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Failed to exchange external account token".to_string(), - })?; - - if !response.status().is_success() { - let status = response.status(); - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "External account token exchange failed with status {}: {}", - status, error_text - ), - url: token_url.to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); - } - - let sts_token: StsTokenResponse = - response - .json() - .await - .into_alien_error() - .context(ErrorData::SerializationError { - message: "Failed to parse external account token exchange response".to_string(), - })?; - - let Some(impersonation_url) = service_account_impersonation_url else { - return Ok(sts_token.access_token); - }; - - let response = client - .post(impersonation_url) - .bearer_auth(&sts_token.access_token) - .json(&serde_json::json!({ - "scope": [scope], - "lifetime": "3600s", - })) - .send() - .await - .into_alien_error() - .context(ErrorData::HttpRequestFailed { - message: "Failed to impersonate external account service account".to_string(), - })?; - - if !response.status().is_success() { - let status = response.status(); - let error_text = response - .text() - .await - .unwrap_or_else(|_| "Unknown error".to_string()); - return Err(AlienError::new(ErrorData::HttpResponseError { - message: format!( - "External account service account impersonation failed with status {}: {}", - status, error_text - ), - url: impersonation_url.to_string(), - http_status: status.as_u16(), - http_request_text: None, - http_response_text: Some(error_text), - })); - } - - let token_response: ImpersonationTokenResponse = - response - .json() - .await - .into_alien_error() - .context(ErrorData::SerializationError { - message: "Failed to parse service account impersonation response".to_string(), - })?; + Self::exchange_external_account_token_with_expiry( + audience, + subject_token_type, + token_url, + credential_source_file, + service_account_impersonation_url, + ) + .await + .map(|token| token.token) + } - Ok(token_response.access_token) + async fn exchange_external_account_token_with_expiry( + audience: &str, + subject_token_type: &str, + token_url: &str, + credential_source_file: &str, + service_account_impersonation_url: Option<&str>, + ) -> Result { + credential_exchange::exchange_external_account_token_with_expiry( + audience, + subject_token_type, + token_url, + credential_source_file, + service_account_impersonation_url, + ) + .await } /// Parse a credentials JSON value and return (credentials, project_id, region). @@ -890,186 +810,14 @@ impl GcpClientConfigExt for GcpClientConfig { raw_json: &str, environment_variables: &HashMap, ) -> Result<(GcpCredentials, String, String)> { - let cred_type = credential_data["type"] - .as_str() - .unwrap_or("service_account"); - - if cred_type == "external_account" { - let audience = credential_data["audience"] - .as_str() - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "audience not found in external_account credentials".to_string(), - errors: None, - }) - })? - .to_string(); - - let subject_token_type = credential_data["subject_token_type"] - .as_str() - .unwrap_or("urn:ietf:params:oauth:token-type:jwt") - .to_string(); - - let token_url = credential_data["token_url"] - .as_str() - .unwrap_or("https://sts.googleapis.com/v1/token") - .to_string(); - - let credential_source_file = credential_data["credential_source"]["file"] - .as_str() - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "credential_source.file not found in external_account credentials" - .to_string(), - errors: None, - }) - })? - .to_string(); - - let service_account_impersonation_url = credential_data - ["service_account_impersonation_url"] - .as_str() - .map(|value| value.to_string()); - - let project_id = environment_variables - .get("GCP_PROJECT_ID") - .or_else(|| environment_variables.get("GOOGLE_CLOUD_PROJECT")) - .cloned() - .or_else(|| { - credential_data["quota_project_id"] - .as_str() - .map(|value| value.to_string()) - }) - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "Missing GCP_PROJECT_ID or GOOGLE_CLOUD_PROJECT environment variable for external_account credentials".to_string(), - errors: None, - }) - })?; - - let region = environment_variables - .get("GCP_REGION") - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: - "Missing GCP_REGION environment variable for external_account credentials" - .to_string(), - errors: None, - }) - })? - .clone(); - - Ok(( - GcpCredentials::ExternalAccount { - audience, - subject_token_type, - token_url, - credential_source_file, - service_account_impersonation_url, - }, - project_id, - region, - )) - } else if cred_type == "authorized_user" { - let client_id = credential_data["client_id"] - .as_str() - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "client_id not found in authorized_user credentials".to_string(), - errors: None, - }) - })? - .to_string(); - - let client_secret = credential_data["client_secret"] - .as_str() - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "client_secret not found in authorized_user credentials" - .to_string(), - errors: None, - }) - })? - .to_string(); - - let refresh_token = credential_data["refresh_token"] - .as_str() - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "refresh_token not found in authorized_user credentials" - .to_string(), - errors: None, - }) - })? - .to_string(); - - // authorized_user credentials don't contain project_id, so we need it from - // the environment or from quota_project_id in the file - let project_id = environment_variables.get("GCP_PROJECT_ID") - .cloned() - .or_else(|| credential_data["quota_project_id"].as_str().map(|s| s.to_string())) - .ok_or_else(|| AlienError::new(ErrorData::InvalidClientConfig { - message: "Missing GCP_PROJECT_ID environment variable for authorized_user credentials \ - (quota_project_id not found in credentials file either)".to_string(), - errors: None, - }))?; - - let region = environment_variables.get("GCP_REGION") - .ok_or_else(|| AlienError::new(ErrorData::InvalidClientConfig { - message: "Missing GCP_REGION environment variable for authorized_user credentials".to_string(), - errors: None, - }))? - .clone(); - - Ok(( - GcpCredentials::AuthorizedUser { - client_id, - client_secret, - refresh_token, - }, - project_id, - region, - )) - } else { - // service_account or other types — treat as service account key - let project_id = credential_data["project_id"] - .as_str() - .ok_or_else(|| { - AlienError::new(ErrorData::InvalidClientConfig { - message: "project_id not found in credentials file".to_string(), - errors: None, - }) - })? - .to_string(); - - let region = if let Some(region) = environment_variables.get("GCP_REGION") { - region.clone() - } else { - Self::fetch_metadata_region().await? - }; - - Ok(( - GcpCredentials::ServiceAccountKey { - json: raw_json.to_string(), - }, - project_id, - region, - )) - } + credential_config::parse_credentials_json(credential_data, raw_json, environment_variables) + .await } /// Try to read the well-known gcloud ADC file. /// Returns `Some((raw_json, parsed_value))` if the file exists and is valid JSON. fn read_well_known_adc_file() -> Option<(String, serde_json::Value)> { - let home = std::env::var("HOME").ok()?; - let adc_path = std::path::Path::new(&home) - .join(".config") - .join("gcloud") - .join("application_default_credentials.json"); - - let json = std::fs::read_to_string(&adc_path).ok()?; - let value: serde_json::Value = serde_json::from_str(&json).ok()?; - Some((json, value)) + credential_config::read_well_known_adc_file() } /// Creates a mock GCP platform config with dummy values for testing @@ -1087,6 +835,7 @@ impl GcpClientConfigExt for GcpClientConfig { } } +/// Mint an impersonated service-account token together with Google's authoritative expiry. async fn generate_impersonated_access_token( source: &GcpClientConfig, config: &GcpImpersonationConfig, @@ -1105,6 +854,17 @@ async fn generate_impersonated_access_token( .await } +async fn materialize_impersonated_access_token( + source: &GcpClientConfig, + config: &GcpImpersonationConfig, +) -> Result { + let response = generate_impersonated_access_token(source, config).await?; + Ok(MaterializedAccessToken { + token: response.access_token, + expiry: MaterializedAccessTokenExpiry::ProviderTimestamp(response.expire_time), + }) +} + fn gcp_region_from_zone(zone: &str) -> Option { let (region, zone_suffix) = zone.rsplit_once('-')?; if zone_suffix.len() != 1 || !zone_suffix.as_bytes()[0].is_ascii_lowercase() { @@ -1119,7 +879,31 @@ fn gcp_region_from_zone(zone: &str) -> Option { #[cfg(test)] mod tests { - use super::gcp_region_from_zone; + use super::{gcp_region_from_zone, GcpClientConfig, GcpClientConfigExt, GcpCredentials}; + + #[tokio::test] + async fn opaque_access_token_remains_valid_for_bearer_auth_but_not_leases() { + let config = GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "opaque-token".to_string(), + }, + service_overrides: None, + project_number: None, + }; + + assert_eq!( + config.get_bearer_token("audience").await.unwrap(), + "opaque-token" + ); + let error = config + .get_access_token_with_expiry("audience") + .await + .expect_err("opaque tokens cannot back expiring leases"); + assert_eq!(error.code, "INVALID_client_config"); + assert!(error.message.contains("no authoritative expiry")); + } #[test] fn derives_region_from_zone() { diff --git a/crates/alien-gcp-clients/src/gcp/remote_storage_credentials.rs b/crates/alien-gcp-clients/src/gcp/remote_storage_credentials.rs new file mode 100644 index 000000000..4cf869e50 --- /dev/null +++ b/crates/alien-gcp-clients/src/gcp/remote_storage_credentials.rs @@ -0,0 +1,448 @@ +use alien_client_core::{ErrorData, Result}; +use alien_error::{AlienError, Context, IntoAlienError}; +use reqwest::Client; +use serde::Deserialize; + +use super::{expires_at_from_expires_in, ExpiringAccessToken, GcpClientConfig, GcpClientConfigExt}; + +pub(super) async fn downscope_access_token_for_bucket( + config: &GcpClientConfig, + bucket_name: &str, + available_role: &str, +) -> Result { + #[derive(Deserialize)] + struct DownscopedTokenResponse { + access_token: String, + expires_in: i64, + issued_token_type: String, + token_type: String, + } + + let valid_bucket_name = (3..=222).contains(&bucket_name.len()) + && bucket_name.bytes().all(|byte| { + byte.is_ascii_lowercase() || byte.is_ascii_digit() || b"-_.".contains(&byte) + }) + && bucket_name + .as_bytes() + .first() + .is_some_and(u8::is_ascii_alphanumeric) + && bucket_name + .as_bytes() + .last() + .is_some_and(u8::is_ascii_alphanumeric) + && !bucket_name.contains(".."); + if !valid_bucket_name { + return Err(AlienError::new(ErrorData::InvalidInput { + message: "GCS bucket name is invalid for a Credential Access Boundary".to_string(), + field_name: Some("bucket_name".to_string()), + })); + } + let project_role_prefix = format!("projects/{}/roles/", config.project_id); + let role_id = available_role.strip_prefix(&project_role_prefix); + let valid_custom_role = role_id.is_some_and(|role_id| { + role_id.starts_with("role_") + && role_id + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit() || byte == b'_') + }); + if !available_role.starts_with("roles/storage.") && !valid_custom_role { + return Err(AlienError::new(ErrorData::InvalidInput { + message: "Credential Access Boundary role must be a Cloud Storage role or an Alien-generated custom role in the target project".to_string(), + field_name: Some("available_role".to_string()), + })); + } + + let source = config + .get_access_token_with_expiry("https://www.googleapis.com/auth/cloud-platform") + .await?; + let options = serde_json::json!({ + "accessBoundary": { + "accessBoundaryRules": [{ + "availableResource": format!( + "//storage.googleapis.com/projects/_/buckets/{bucket_name}" + ), + "availablePermissions": [format!("inRole:{available_role}")] + }] + } + }) + .to_string(); + let endpoint = config.get_service_endpoint("sts", "https://sts.googleapis.com/v1/token"); + let response = Client::new() + .post(&endpoint) + .form(&[ + ( + "grant_type", + "urn:ietf:params:oauth:grant-type:token-exchange", + ), + ( + "requested_token_type", + "urn:ietf:params:oauth:token-type:access_token", + ), + ( + "subject_token_type", + "urn:ietf:params:oauth:token-type:access_token", + ), + ("subject_token", source.token.as_str()), + ("options", options.as_str()), + ]) + .send() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to exchange a GCP Credential Access Boundary token".to_string(), + })?; + let status = response.status(); + let response_text = + response + .text() + .await + .into_alien_error() + .context(ErrorData::HttpRequestFailed { + message: "Failed to read the GCP Credential Access Boundary response".to_string(), + })?; + if !status.is_success() { + return Err(AlienError::new(ErrorData::HttpResponseError { + message: format!( + "GCP Credential Access Boundary exchange failed with HTTP {}", + status.as_u16() + ), + url: endpoint, + http_status: status.as_u16(), + http_request_text: None, + // STS error bodies are untrusted and can echo the submitted source + // access token. Never retain them in a serializable error chain. + http_response_text: None, + })); + } + let token_response: DownscopedTokenResponse = serde_json::from_str(&response_text) + .into_alien_error() + .context(ErrorData::SerializationError { + message: "Failed to parse the GCP Credential Access Boundary response".to_string(), + })?; + if token_response.issued_token_type != "urn:ietf:params:oauth:token-type:access_token" + || token_response.token_type != "Bearer" + { + return Err(AlienError::new(ErrorData::InvalidInput { + message: "GCP STS returned an unexpected downscoped token type".to_string(), + field_name: Some("token_type".to_string()), + })); + } + let sts_expiry = + expires_at_from_expires_in("GCP Credential Access Boundary", token_response.expires_in)?; + Ok(ExpiringAccessToken { + token: token_response.access_token, + expires_at: source.expires_at.min(sts_expiry), + }) +} + +#[cfg(test)] +mod tests { + use super::super::{GcpCredentials, ServiceOverrides}; + use super::*; + use std::{collections::HashMap, io::Write}; + use tokio::{ + io::{AsyncReadExt, AsyncWriteExt}, + net::{TcpListener, TcpStream}, + }; + + #[tokio::test] + async fn projected_service_account_jwt_is_never_treated_as_an_access_token() { + let config = GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::ProjectedServiceAccount { + token_file: "/not/read/PROJECTED_JWT_MUST_NOT_LEAK".to_string(), + service_account_email: "worker@example.iam.gserviceaccount.com".to_string(), + }, + service_overrides: None, + project_number: None, + }; + + let error = config + .get_access_token_with_expiry("https://www.googleapis.com/auth/cloud-platform") + .await + .expect_err("an unexchanged projected JWT must fail closed"); + let serialized = serde_json::to_string(&error).expect("serialize error"); + + assert!(serialized.contains("must be exchanged")); + assert!(!serialized.contains("PROJECTED_JWT_MUST_NOT_LEAK")); + + let direct_error = config + .get_projected_token("/not/read/PROJECTED_JWT_MUST_NOT_LEAK") + .await + .expect_err("direct projected JWT access must also fail closed"); + let direct_serialized = serde_json::to_string(&direct_error).expect("serialize error"); + assert!(direct_serialized.contains("explicit external-account STS")); + assert!(!direct_serialized.contains("PROJECTED_JWT_MUST_NOT_LEAK")); + } + + #[tokio::test] + async fn downscope_rejects_wildcard_or_malformed_bucket_names_before_network() { + let config = GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "not-used".to_string(), + }, + service_overrides: None, + project_number: None, + }; + + assert!( + downscope_access_token_for_bucket(&config, "*", "roles/storage.objectAdmin") + .await + .is_err() + ); + assert!(downscope_access_token_for_bucket( + &config, + "bucket/name", + "roles/storage.objectAdmin" + ) + .await + .is_err()); + assert!(downscope_access_token_for_bucket( + &config, + "bucket..name", + "roles/storage.objectAdmin" + ) + .await + .is_err()); + } + + #[tokio::test] + async fn downscope_exchange_sends_the_exact_bucket_access_boundary() { + let (endpoint, requests) = start_sts_server().await; + let mut credential_file = tempfile::NamedTempFile::new().expect("create token file"); + credential_file + .write_all(b"EXTERNAL_SUBJECT_TOKEN") + .expect("write token file"); + let config = GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::ExternalAccount { + audience: "//iam.googleapis.com/projects/123/locations/global/workloadIdentityPools/pool/providers/provider".to_string(), + subject_token_type: "urn:ietf:params:oauth:token-type:jwt".to_string(), + token_url: format!("{endpoint}/source"), + credential_source_file: credential_file.path().display().to_string(), + service_account_impersonation_url: None, + }, + service_overrides: Some(ServiceOverrides { + endpoints: HashMap::from([("sts".to_string(), format!("{endpoint}/downscope"))]), + }), + project_number: Some("123".to_string()), + }; + + let token = config + .downscope_access_token_for_bucket( + "one-bucket", + "projects/project/roles/role_test_prefix_storage_remote_data_write", + ) + .await + .expect("exchange downscoped token"); + assert_eq!(token.token, "bucket-confined-token"); + + let requests = requests.await.expect("join STS server"); + assert_eq!(requests.len(), 2); + let source_form = request_form(&requests[0]); + assert_eq!( + source_form.get("subject_token").map(String::as_str), + Some("EXTERNAL_SUBJECT_TOKEN") + ); + + let downscope_form = request_form(&requests[1]); + assert_eq!( + downscope_form.get("grant_type").map(String::as_str), + Some("urn:ietf:params:oauth:grant-type:token-exchange") + ); + assert_eq!( + downscope_form + .get("requested_token_type") + .map(String::as_str), + Some("urn:ietf:params:oauth:token-type:access_token") + ); + assert_eq!( + downscope_form.get("subject_token_type").map(String::as_str), + Some("urn:ietf:params:oauth:token-type:access_token") + ); + assert_eq!( + downscope_form.get("subject_token").map(String::as_str), + Some("source-access-token") + ); + assert_eq!( + serde_json::from_str::( + downscope_form.get("options").expect("CAB options") + ) + .expect("parse CAB options"), + serde_json::json!({ + "accessBoundary": { + "accessBoundaryRules": [{ + "availableResource": "//storage.googleapis.com/projects/_/buckets/one-bucket", + "availablePermissions": ["inRole:projects/project/roles/role_test_prefix_storage_remote_data_write"] + }] + } + }) + ); + assert!(!downscope_form.contains_key("audience")); + assert!(!downscope_form.contains_key("scope")); + } + + #[tokio::test] + async fn downscope_errors_never_retain_source_tokens_or_response_bodies() { + const SUBJECT_SENTINEL: &str = "EXTERNAL_SUBJECT_TOKEN_MUST_NOT_LEAK"; + const SOURCE_SENTINEL: &str = "SOURCE_ACCESS_TOKEN_MUST_NOT_LEAK"; + const RESPONSE_SENTINEL: &str = "MALICIOUS_STS_RESPONSE_MUST_NOT_LEAK"; + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("bind test STS server"); + let address = listener.local_addr().expect("STS server address"); + let server = tokio::spawn(async move { + for request_number in 0..2 { + let (mut stream, _) = listener.accept().await.expect("accept STS request"); + let _request = read_http_request(&mut stream).await; + let (status, body) = if request_number == 0 { + ( + "200 OK", + format!(r#"{{"access_token":"{SOURCE_SENTINEL}","expires_in":3600}}"#), + ) + } else { + ( + "403 Forbidden", + format!("{SUBJECT_SENTINEL} {SOURCE_SENTINEL} {RESPONSE_SENTINEL}"), + ) + }; + let response = format!( + "HTTP/1.1 {status}\r\ncontent-type: application/json\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{body}", + body.len() + ); + stream + .write_all(response.as_bytes()) + .await + .expect("write STS response"); + } + }); + let mut credential_file = tempfile::NamedTempFile::new().expect("create token file"); + credential_file + .write_all(SUBJECT_SENTINEL.as_bytes()) + .expect("write token file"); + let endpoint = format!("http://{address}"); + let config = GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::ExternalAccount { + audience: "//iam.googleapis.com/projects/123/locations/global/workloadIdentityPools/pool/providers/provider".to_string(), + subject_token_type: "urn:ietf:params:oauth:token-type:jwt".to_string(), + token_url: format!("{endpoint}/source"), + credential_source_file: credential_file.path().display().to_string(), + service_account_impersonation_url: None, + }, + service_overrides: Some(ServiceOverrides { + endpoints: HashMap::from([("sts".to_string(), format!("{endpoint}/downscope"))]), + }), + project_number: Some("123".to_string()), + }; + + let error = config + .downscope_access_token_for_bucket( + "one-bucket", + "projects/project/roles/role_test_prefix_storage_remote_data_write", + ) + .await + .expect_err("STS failure should propagate"); + server.await.expect("join STS server"); + let serialized = serde_json::to_string(&error).expect("serialize error"); + assert!(!serialized.contains(SUBJECT_SENTINEL)); + assert!(!serialized.contains(SOURCE_SENTINEL)); + assert!(!serialized.contains(RESPONSE_SENTINEL)); + } + + #[tokio::test] + async fn downscope_rejects_unproven_or_foreign_custom_roles_before_network() { + let config = GcpClientConfig { + project_id: "target-project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "not-used".to_string(), + }, + service_overrides: None, + project_number: None, + }; + + for role in [ + "projects/other-project/roles/role_remote_data_write", + "projects/target-project/roles/admin", + "projects/target-project/roles/role_remote-data-write", + ] { + assert!( + downscope_access_token_for_bucket(&config, "one-bucket", role) + .await + .is_err(), + "role {role} must fail closed" + ); + } + } + + async fn start_sts_server() -> (String, tokio::task::JoinHandle>) { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("bind test STS server"); + let address = listener.local_addr().expect("STS server address"); + let requests = tokio::spawn(async move { + let mut requests = Vec::with_capacity(2); + for _ in 0..2 { + let (mut stream, _) = listener.accept().await.expect("accept STS request"); + let request = read_http_request(&mut stream).await; + let body = if request.starts_with("POST /source ") { + r#"{"access_token":"source-access-token","expires_in":3600}"# + } else if request.starts_with("POST /downscope ") { + r#"{"access_token":"bucket-confined-token","expires_in":900,"issued_token_type":"urn:ietf:params:oauth:token-type:access_token","token_type":"Bearer"}"# + } else { + panic!("unexpected STS request: {request}"); + }; + let response = format!( + "HTTP/1.1 200 OK\r\ncontent-type: application/json\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{}", + body.len(), + body + ); + stream + .write_all(response.as_bytes()) + .await + .expect("write STS response"); + requests.push(request); + } + requests + }); + (format!("http://{address}"), requests) + } + + async fn read_http_request(stream: &mut TcpStream) -> String { + let mut bytes = Vec::new(); + let mut buffer = [0u8; 2048]; + loop { + let count = stream.read(&mut buffer).await.expect("read request"); + assert!(count > 0, "request ended before its declared body"); + bytes.extend_from_slice(&buffer[..count]); + let Some(header_end) = bytes.windows(4).position(|window| window == b"\r\n\r\n") else { + continue; + }; + let headers = String::from_utf8_lossy(&bytes[..header_end]); + let content_length = headers + .lines() + .find_map(|line| { + line.to_ascii_lowercase() + .strip_prefix("content-length: ") + .and_then(|value| value.parse::().ok()) + }) + .expect("content-length header"); + if bytes.len() >= header_end + 4 + content_length { + return String::from_utf8(bytes).expect("UTF-8 request"); + } + } + } + + fn request_form(request: &str) -> HashMap { + let (_, body) = request.split_once("\r\n\r\n").expect("request body"); + url::form_urlencoded::parse(body.as_bytes()) + .into_owned() + .collect() + } +} diff --git a/crates/alien-infra/src/core/azure_permissions_helper.rs b/crates/alien-infra/src/core/azure_permissions_helper.rs index cc3d27fda..34d89b4ed 100644 --- a/crates/alien-infra/src/core/azure_permissions_helper.rs +++ b/crates/alien-infra/src/core/azure_permissions_helper.rs @@ -5,7 +5,7 @@ use std::sync::Arc; -use crate::core::ResourceControllerContext; +use crate::core::{ResourceControllerContext, ResourcePermissionsHelper}; use crate::error::{ErrorData, Result}; use alien_azure_clients::authorization::{AuthorizationApi, Scope}; use alien_azure_clients::models::authorization_role_assignments::{ @@ -230,16 +230,25 @@ impl AzurePermissionsHelper { } } - Self::apply_management_permissions_tracking_assignment_ids( + // Remote-access Frozen Storage is ordered before RemoteStackManagement. + // Its exact management role assignment is therefore owned by the + // management controller, after the container exists. + if !ResourcePermissionsHelper::remote_management_owns_resource_grants( ctx, resource_id, resource_type, - &resource_scope, - permission_context, - role_assignment_ids, - apply, - ) - .await?; + ) { + Self::apply_management_permissions_tracking_assignment_ids( + ctx, + resource_id, + resource_type, + &resource_scope, + permission_context, + role_assignment_ids, + apply, + ) + .await?; + } Ok(()) } @@ -743,25 +752,11 @@ impl AzurePermissionsHelper { None => return Ok(()), }; - let type_prefix = format!("{}/", resource_type); - - let mut combined_refs = Vec::new(); - if let Some(refs) = management_profile.0.get(resource_id) { - combined_refs.extend( - refs.iter() - .filter(|r| !is_worker_command_transport_permission(resource_type, r.id())) - .cloned(), - ); - } - if let Some(wildcard_refs) = management_profile.0.get("*") { - combined_refs.extend( - wildcard_refs - .iter() - .filter(|r| r.id().starts_with(&type_prefix)) - .filter(|r| !is_worker_command_transport_permission(resource_type, r.id())) - .cloned(), - ); - } + let combined_refs = Self::explicit_management_resource_permission_refs( + management_profile, + resource_id, + resource_type, + ); if combined_refs.is_empty() { return Ok(()); @@ -914,6 +909,27 @@ impl AzurePermissionsHelper { } } + fn explicit_management_resource_permission_refs( + management_profile: &alien_core::permissions::PermissionProfile, + resource_id: &str, + resource_type: &str, + ) -> Vec { + // RemoteStackManagement applies wildcard management permissions at + // resource-group scope. Resource controllers only reconcile explicit + // resource scopes; otherwise bootstrap resources can wait on management + // while management is waiting on them. + management_profile + .0 + .get(resource_id) + .into_iter() + .flatten() + .filter(|reference| { + !is_worker_command_transport_permission(resource_type, reference.id()) + }) + .cloned() + .collect() + } + /// Get the management UAMI principal ID from the RSM controller pub fn get_management_uami_principal_id( ctx: &ResourceControllerContext<'_>, @@ -1033,6 +1049,8 @@ mod tests { use super::*; use alien_azure_clients::authorization::MockAuthorizationApi; use alien_azure_clients::{AzureClientConfig, AzureCredentials}; + use alien_core::permissions::{PermissionProfile, PermissionSetReference}; + use indexmap::IndexMap; fn azure_config() -> AzureClientConfig { AzureClientConfig { subscription_id: "sub-123".to_string(), @@ -1045,6 +1063,32 @@ mod tests { } } + #[test] + fn management_resource_permissions_ignore_wildcard_scope() { + let mut profile = IndexMap::new(); + profile.insert( + "*".to_string(), + vec![PermissionSetReference::from_name( + "storage/data-read".to_string(), + )], + ); + profile.insert( + "archive".to_string(), + vec![PermissionSetReference::from_name( + "storage/data-write".to_string(), + )], + ); + + let refs = AzurePermissionsHelper::explicit_management_resource_permission_refs( + &PermissionProfile(profile), + "archive", + "storage", + ); + + let ids: Vec<_> = refs.iter().map(|reference| reference.id()).collect(); + assert_eq!(ids, vec!["storage/data-write"]); + } + #[test] fn queue_assignments_use_the_controller_service_bus_scope() { let azure_config = azure_config(); diff --git a/crates/alien-infra/src/core/executor.rs b/crates/alien-infra/src/core/executor.rs index a5e0638f9..60ad736a3 100644 --- a/crates/alien-infra/src/core/executor.rs +++ b/crates/alien-infra/src/core/executor.rs @@ -11,7 +11,7 @@ //! * [`StackExecutor::step`] – advance every **ready** resource by one step. //! * [`StackExecutor::run_until_synced`] – test helper that runs until desired == current. -use alien_error::{AlienError, Context, GenericError, IntoAlienError}; +use alien_error::{AlienError, Context, GenericError}; use petgraph::algo::tarjan_scc; use petgraph::graph::{DiGraph, NodeIndex}; use serde::{Deserialize, Serialize}; @@ -523,6 +523,25 @@ impl StackExecutor { self.deployment_config.external_bindings.has(resource_id) } + fn external_binding_requests_remote_access(&self, resource_id: &str) -> bool { + self.desired_stack + .resources + .get(resource_id) + .is_some_and(|entry| entry.remote_access) + } + + fn validate_external_binding_remote_access(&self, resource_id: &str) -> Result<()> { + if self.external_binding_requests_remote_access(resource_id) { + return Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' cannot use an external binding; remote access is limited to resources created by setup" + ), + resource_id: Some(resource_id.to_string()), + })); + } + Ok(()) + } + fn resource_lifecycle( &self, resource_id: &str, @@ -1075,10 +1094,6 @@ impl StackExecutor { info!("Using external binding for '{}' -> Running", resource_id); - // Get resource entry to check remote_access flag - let resource_entry = self.desired_stack.resources.get(resource_id); - let remote_access = resource_entry.map(|e| e.remote_access).unwrap_or(false); - // Create resource state as Running with external binding let mut resource_state = StackResourceState::new_pending( desired_config.resource.resource_type().to_string(), @@ -1088,17 +1103,10 @@ impl StackExecutor { ); resource_state.status = ResourceStatus::Running; - // Only sync binding params if remote_access is enabled - if remote_access { - resource_state.remote_binding_params = - Some(serde_json::to_value(binding).into_alien_error().context( - ErrorData::ResourceStateSerializationFailed { - resource_id: resource_id.clone(), - message: - "Failed to serialize external binding parameters".to_string(), - }, - )?); - } + // External resources are never published for Remote Bindings. + // In particular, their binding may contain inline credentials. + self.validate_external_binding_remote_access(resource_id)?; + resource_state.remote_binding_params = None; // Populate outputs from the binding so dependent resources can // call get_resource_outputs() (e.g., functions reading the @@ -1532,10 +1540,11 @@ impl StackExecutor { // in the internal_state and handles its own stepping if !current_resource_state.has_internal_state() { if self.is_external_binding_resource(&resource_id) { - debug!( - resource_id = %resource_id, - "External binding resource has no controller state; skipping step" - ); + // External bindings intentionally have no controller to + // step. Reconcile the explicit publication gate directly. + self.validate_external_binding_remote_access(&resource_id)?; + current_resource_state.remote_binding_params = None; + subsequent_state_updates.insert(resource_id.clone(), current_resource_state); } else { warn!( "Resource '{}' has no controller state. Skipping step.", @@ -2027,7 +2036,11 @@ impl StackExecutor { let is_running = current_view.status == ResourceStatus::Running; let config_matches = if self.is_external_binding_resource(id) { + let remote_binding_matches = !self + .external_binding_requests_remote_access(id) + && current_view.remote_binding_params.is_none(); current_view.config == desired_resource_config.resource + && remote_binding_matches } else { current_view .internal_state diff --git a/crates/alien-infra/src/core/executor_tests/binding_sync_tests.rs b/crates/alien-infra/src/core/executor_tests/binding_sync_tests.rs index 76d9e002c..aa142337b 100644 --- a/crates/alien-infra/src/core/executor_tests/binding_sync_tests.rs +++ b/crates/alien-infra/src/core/executor_tests/binding_sync_tests.rs @@ -2,7 +2,10 @@ use super::helpers::*; use crate::error::Result; -use alien_core::{ResourceLifecycle, Stack, Vault}; +use alien_core::{ + ClientConfig, DeploymentConfig, EnvironmentVariablesSnapshot, ExternalBinding, + ExternalBindings, ResourceLifecycle, Stack, Storage, StorageBinding, Vault, +}; /// A controller-provisioned binding must land in `StackResourceState.remote_binding_params` — which /// is serialized into synced control-plane state — ONLY when the resource is `remote_access: true`. @@ -47,3 +50,51 @@ async fn remote_binding_params_synced_only_for_remote_access_resources() -> Resu Ok(()) } + +#[tokio::test] +async fn external_storage_rejects_remote_access_without_a_controller() -> Result<()> { + let storage = Storage::new("uploads".to_owned()).build(); + let disabled_stack = Stack::new("external-binding-toggle".to_owned()) + .add(storage.clone(), ResourceLifecycle::Frozen) + .build(); + let enabled_stack = Stack::new("external-binding-toggle".to_owned()) + .add_with_remote_access(storage, ResourceLifecycle::Frozen) + .build(); + let mut external_bindings = ExternalBindings::new(); + external_bindings.insert( + "uploads".to_owned(), + ExternalBinding::Storage(StorageBinding::s3("customer-uploads")), + ); + let deployment_config = DeploymentConfig::builder() + .stack_settings(Default::default()) + .environment_variables(EnvironmentVariablesSnapshot { + variables: Vec::new(), + hash: String::new(), + created_at: String::new(), + }) + .external_bindings(external_bindings) + .allow_frozen_changes(false) + .build(); + let client_config = ClientConfig::Test; + + let disabled_executor = + crate::core::StackExecutor::builder(&disabled_stack, client_config.clone()) + .deployment_config(&deployment_config) + .build()?; + let disabled_state = run_to_synced(&disabled_executor, new_test_state()).await?; + assert!(disabled_state.resources["uploads"] + .remote_binding_params + .is_none()); + + let enabled_executor = + crate::core::StackExecutor::builder(&enabled_stack, client_config.clone()) + .deployment_config(&deployment_config) + .build()?; + let error = run_to_synced(&enabled_executor, disabled_state) + .await + .expect_err("external Storage must not be exposed through Remote Bindings"); + assert_eq!(error.code, "RESOURCE_CONFIG_INVALID"); + assert!(error.message.contains("cannot use an external binding")); + + Ok(()) +} diff --git a/crates/alien-infra/src/core/resource_permissions_helper.rs b/crates/alien-infra/src/core/resource_permissions_helper.rs index a1c13fccb..1be2281af 100644 --- a/crates/alien-infra/src/core/resource_permissions_helper.rs +++ b/crates/alien-infra/src/core/resource_permissions_helper.rs @@ -8,30 +8,15 @@ use std::collections::HashSet; use crate::core::{azure_permissions_helper::AzurePermissionsHelper, ResourceControllerContext}; use crate::error::{ErrorData, Result}; use alien_azure_clients::authorization::Scope; -use alien_client_core::ErrorData as CloudClientErrorData; use alien_core::permissions::{PermissionProfile, PermissionSetReference}; use alien_core::{KubernetesCluster, PermissionSet, RemoteStackManagement, ResourceLifecycle}; -use alien_error::{AlienError, Context, ContextError, IntoAlienError}; +use alien_error::{AlienError, Context, IntoAlienError}; use alien_gcp_clients::iam::{Binding, IamPolicy}; use alien_permissions::{generators::*, BindingTarget, PermissionContext}; use tracing::{debug, info, warn}; -fn gcp_custom_role_matches( - existing: &alien_gcp_clients::iam::Role, - desired: &alien_gcp_clients::iam::Role, -) -> bool { - let mut existing_permissions = existing.included_permissions.clone(); - let mut desired_permissions = desired.included_permissions.clone(); - existing_permissions.sort(); - desired_permissions.sort(); - - existing.title == desired.title - && existing.description == desired.description - && existing.stage == desired.stage - && existing_permissions == desired_permissions - && !existing.deleted.unwrap_or(false) -} +mod gcp_custom_roles; /// Helper for applying resource-scoped permissions across all platforms pub struct ResourcePermissionsHelper; @@ -294,120 +279,7 @@ impl ResourcePermissionsHelper { permission_set_id: &str, custom_roles: Vec, ) -> Result<()> { - if custom_roles.is_empty() { - return Ok(()); - } - - let gcp_config = ctx.get_gcp_config()?; - let iam_client = ctx.service_provider.get_gcp_iam_client(gcp_config)?; - - let mut seen_role_names = HashSet::new(); - for custom_role in custom_roles { - if !seen_role_names.insert(custom_role.name.clone()) { - continue; - } - - let role_id = custom_role.role_id.clone(); - - info!( - role_id = %role_id, - permission_set = %permission_set_id, - permissions_count = custom_role.included_permissions.len(), - "Ensuring GCP custom role exists" - ); - - let role_request = alien_gcp_clients::iam::CreateRoleRequest::builder() - .role( - alien_gcp_clients::iam::Role::builder() - .title(custom_role.title.clone()) - .description(custom_role.description.clone()) - .included_permissions(custom_role.included_permissions.clone()) - .stage(alien_gcp_clients::iam::RoleLaunchStage::Ga) - .build(), - ) - .build(); - - let updated_role = alien_gcp_clients::iam::Role::builder() - .title(custom_role.title.clone()) - .description(custom_role.description.clone()) - .included_permissions(custom_role.included_permissions.clone()) - .stage(alien_gcp_clients::iam::RoleLaunchStage::Ga) - .build(); - - match iam_client.get_role(custom_role.name.clone()).await { - Ok(existing_role) => { - if existing_role.deleted.unwrap_or(false) { - iam_client - .undelete_role(custom_role.name.clone()) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to undelete existing custom role '{}'", - role_id - ), - resource_id: Some(permission_set_id.to_string()), - })?; - iam_client - .patch_role( - custom_role.name.clone(), - updated_role, - Some("includedPermissions,title,description,stage".to_string()), - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to update undeleted custom role '{}'", - role_id - ), - resource_id: Some(permission_set_id.to_string()), - })?; - } else if gcp_custom_role_matches(&existing_role, &updated_role) { - info!( - role_id = %role_id, - permission_set = %permission_set_id, - "GCP custom role already matches desired permissions" - ); - } else { - iam_client - .patch_role( - custom_role.name.clone(), - updated_role, - Some("includedPermissions,title,description,stage".to_string()), - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to update existing custom role '{}'", - role_id - ), - resource_id: Some(permission_set_id.to_string()), - })?; - } - } - Err(e) - if matches!( - e.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - iam_client - .create_role(role_id.clone(), role_request) - .await - .context(ErrorData::CloudPlatformError { - message: format!("Failed to create custom role '{}'", role_id), - resource_id: Some(permission_set_id.to_string()), - })?; - } - Err(e) => { - return Err(e.context(ErrorData::CloudPlatformError { - message: format!("Failed to check existence of custom role '{}'", role_id), - resource_id: Some(permission_set_id.to_string()), - })); - } - } - } - - Ok(()) + gcp_custom_roles::ensure(ctx, permission_set_id, custom_roles).await } /// Setup-delete: delete the GCP custom roles generated for the selected permission sets. @@ -418,86 +290,12 @@ impl ResourcePermissionsHelper { ctx: &ResourceControllerContext<'_>, permission_context: &PermissionContext, ) -> Result<()> { - let gcp_config = ctx.get_gcp_config()?; - let iam_client = ctx.service_provider.get_gcp_iam_client(gcp_config)?; - let role_name_prefix = format!( - "projects/{}/roles/{}", - gcp_config.project_id, - custom_role_prefix(permission_context) - ); - let mut role_names = Vec::new(); - let mut page_token = None; - - loop { - let response = iam_client - .list_roles(Some(100), page_token, Some(false)) - .await - .context(ErrorData::CloudPlatformError { - message: "Failed to list GCP custom roles before cleanup".to_string(), - resource_id: Some(ctx.resource_prefix.to_string()), - })?; - - for role in response.roles { - let Some(role_name) = role.name else { - continue; - }; - if role_name.starts_with(&role_name_prefix) { - role_names.push(role_name); - } - } - - match response.next_page_token { - Some(token) if !token.is_empty() => page_token = Some(token), - _ => break, - } - } - - for role_name in role_names { - let role_id = role_name - .rsplit('/') - .next() - .unwrap_or(role_name.as_str()) - .to_string(); - match iam_client.delete_role(role_name.clone()).await { - Ok(_) => { - info!( - role_id = %role_id, - "Deleted GCP custom role" - ); - } - Err(e) - if matches!( - e.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - info!( - role_id = %role_id, - "GCP custom role already deleted" - ); - } - Err(e) => { - return Err(e.context(ErrorData::CloudPlatformError { - message: format!("Failed to delete GCP custom role '{}'", role_id), - resource_id: Some(ctx.resource_prefix.to_string()), - })); - } - } - } - - Ok(()) + gcp_custom_roles::delete(ctx, permission_context).await } /// Return the fully-qualified custom-role prefix owned by this stack. pub fn gcp_stack_custom_role_name_prefix(permission_context: &PermissionContext) -> String { - let project = permission_context - .project_name - .as_deref() - .unwrap_or("PROJECT_NAME"); - format!( - "projects/{project}/roles/{}", - custom_role_prefix(permission_context) - ) + gcp_custom_roles::stack_role_name_prefix(permission_context) } /// Return fully-qualified custom-role prefixes for the permission sets owned @@ -729,17 +527,20 @@ impl ResourcePermissionsHelper { } } - // Process management SA permissions that match this resource type - Self::collect_gcp_management_bindings( - ctx, - resource_id, - resource_name, - resource_type, - &generator, - &permission_context, - all_bindings, - ) - .await?; + // Remote-access Frozen Storage must become ready before the management + // controller. That controller owns its exact data grant, so the Storage + // controller must not wait on the management identity here. + if !Self::remote_management_owns_resource_grants(ctx, resource_id, resource_type) { + Self::collect_gcp_management_bindings( + ctx, + resource_id, + resource_name, + &generator, + &permission_context, + all_bindings, + ) + .await?; + } Ok(()) } @@ -925,14 +726,12 @@ impl ResourcePermissionsHelper { /// Collect GCP resource-scoped bindings for the management service account /// - /// Processes management permissions (from `stack.permissions.management`) that match - /// the given resource type and applies them via resource-level IAM using the - /// management service account. + /// Processes management permissions explicitly scoped to this resource and + /// applies them via resource-level IAM using the management service account. async fn collect_gcp_management_bindings( ctx: &ResourceControllerContext<'_>, resource_id: &str, resource_name: &str, - resource_type: &str, generator: &GcpRuntimePermissionsGenerator, permission_context: &PermissionContext, all_bindings: &mut Vec, @@ -942,31 +741,8 @@ impl ResourcePermissionsHelper { None => return Ok(()), }; - let type_prefix = format!("{}/", resource_type); - - // Combine resource-specific and wildcard management permissions, - // deduplicating by permission set ID - let mut seen_ids = std::collections::HashSet::new(); - let mut combined_refs: Vec = Vec::new(); - - if let Some(permission_set_refs) = management_profile.0.get(resource_id) { - for r in permission_set_refs { - if seen_ids.insert(r.id().to_string()) { - combined_refs.push(r.clone()); - } - } - } - - if let Some(wildcard_refs) = management_profile.0.get("*") { - for r in wildcard_refs - .iter() - .filter(|r| r.id().starts_with(&type_prefix)) - { - if seen_ids.insert(r.id().to_string()) { - combined_refs.push(r.clone()); - } - } - } + let combined_refs = + Self::explicit_management_resource_permission_refs(management_profile, resource_id); if combined_refs.is_empty() { return Ok(()); @@ -1132,7 +908,9 @@ impl ResourcePermissionsHelper { } } - if Self::resource_is_setup_owned(ctx, resource_id) { + if Self::resource_is_setup_owned(ctx, resource_id) + && !Self::remote_management_owns_resource_grants(ctx, resource_id, resource_type) + { // Setup-owned resources run while setup credentials are still active. // Live resource controllers must not edit the management role after // the deployment has moved to provisioning credentials. @@ -1145,12 +923,18 @@ impl ResourcePermissionsHelper { &permission_context, ) .await?; + } else if Self::remote_management_owns_resource_grants(ctx, resource_id, resource_type) { + debug!( + resource_id = %resource_id, + resource_name = %resource_name, + "Skipping Storage-owned management permissions; remote management reconciles the exact grant after Storage is ready" + ); } else if ctx .desired_stack .management() .profile() .map(|profile| { - !Self::aws_management_resource_permission_refs(profile, resource_id).is_empty() + !Self::explicit_management_resource_permission_refs(profile, resource_id).is_empty() }) .unwrap_or(false) { @@ -1171,6 +955,30 @@ impl ResourcePermissionsHelper { .is_some_and(|entry| entry.lifecycle == ResourceLifecycle::Frozen) } + pub(crate) fn remote_management_owns_resource_grants( + ctx: &ResourceControllerContext<'_>, + resource_id: &str, + resource_type: &str, + ) -> bool { + Self::remote_management_owns_resource_grants_in_stack( + ctx.desired_stack, + resource_id, + resource_type, + ) + } + + fn remote_management_owns_resource_grants_in_stack( + stack: &alien_core::Stack, + resource_id: &str, + resource_type: &str, + ) -> bool { + resource_type == "storage" + && stack + .resources + .get(resource_id) + .is_some_and(alien_core::ResourceEntry::is_remote_frozen_storage) + } + /// Process AWS permissions for a specific profile by attaching inline policies /// to the profile's service account IAM role. async fn process_aws_profile_permissions( @@ -1261,7 +1069,7 @@ impl ResourcePermissionsHelper { }; let combined_refs = - Self::aws_management_resource_permission_refs(management_profile, resource_id); + Self::explicit_management_resource_permission_refs(management_profile, resource_id); if combined_refs.is_empty() { return Ok(()); @@ -1380,21 +1188,25 @@ impl ResourcePermissionsHelper { Ok(()) } - fn aws_management_resource_permission_refs( + fn explicit_management_resource_permission_refs( management_profile: &PermissionProfile, resource_id: &str, ) -> Vec { - // On AWS the RemoteStackManagement role policy is the stack-level - // grant point for wildcard management permissions. Re-applying those - // wildcard-derived permissions as per-resource inline policies duplicates - // authority and can exceed IAM's per-role inline policy quota. Resource + // RemoteStackManagement is the stack-level grant point for wildcard + // management permissions. Re-applying those wildcard-derived grants in + // resource controllers duplicates authority and, on bootstrap resources, + // can introduce a runtime dependency cycle back to management. Resource // controllers only attach management permissions explicitly scoped to // this resource ID. + let mut seen_ids = HashSet::new(); management_profile .0 .get(resource_id) + .into_iter() + .flatten() + .filter(|reference| seen_ids.insert(reference.id().to_string())) .cloned() - .unwrap_or_default() + .collect() } /// Get the AWS IAM role name for a service account permission profile @@ -1688,7 +1500,45 @@ mod tests { } #[test] - fn aws_management_resource_permissions_ignore_wildcard_scope() { + fn remote_management_owns_only_opted_in_frozen_storage_grants() { + let remote_frozen_stack = Stack::new("test-stack".to_string()) + .add_with_remote_access( + Storage::new("logs".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .build(); + let non_remote_frozen_stack = Stack::new("test-stack".to_string()) + .add( + Storage::new("logs".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .build(); + + assert!( + ResourcePermissionsHelper::remote_management_owns_resource_grants_in_stack( + &remote_frozen_stack, + "logs", + "storage" + ) + ); + assert!( + !ResourcePermissionsHelper::remote_management_owns_resource_grants_in_stack( + &non_remote_frozen_stack, + "logs", + "storage" + ) + ); + assert!( + !ResourcePermissionsHelper::remote_management_owns_resource_grants_in_stack( + &remote_frozen_stack, + "logs", + "worker" + ) + ); + } + + #[test] + fn management_resource_permissions_dedupe_explicit_and_ignore_wildcard_scope() { let mut profile = IndexMap::new(); profile.insert( "*".to_string(), @@ -1698,12 +1548,13 @@ mod tests { ); profile.insert( "worker-a".to_string(), - vec![PermissionSetReference::from_name( - "worker/invoke".to_string(), - )], + vec![ + PermissionSetReference::from_name("worker/invoke".to_string()), + PermissionSetReference::from_name("worker/invoke".to_string()), + ], ); - let refs = ResourcePermissionsHelper::aws_management_resource_permission_refs( + let refs = ResourcePermissionsHelper::explicit_management_resource_permission_refs( &PermissionProfile(profile), "worker-a", ); @@ -1713,7 +1564,7 @@ mod tests { } #[test] - fn aws_management_resource_permissions_empty_without_resource_scope() { + fn management_resource_permissions_empty_without_resource_scope() { let mut profile = IndexMap::new(); profile.insert( "*".to_string(), @@ -1722,7 +1573,7 @@ mod tests { )], ); - let refs = ResourcePermissionsHelper::aws_management_resource_permission_refs( + let refs = ResourcePermissionsHelper::explicit_management_resource_permission_refs( &PermissionProfile(profile), "worker-a", ); @@ -1940,21 +1791,4 @@ mod tests { .contains(&"serviceAccount:app@p.iam.gserviceaccount.com".to_string()) })); } - - #[test] - fn gcp_deleted_custom_role_does_not_match_desired_role() { - let desired = alien_gcp_clients::iam::Role::builder() - .title("Role".to_string()) - .description("Test role".to_string()) - .included_permissions(vec!["storage.objects.get".to_string()]) - .stage(alien_gcp_clients::iam::RoleLaunchStage::Ga) - .build(); - let mut deleted_existing = desired.clone(); - deleted_existing.deleted = Some(true); - - assert!( - !gcp_custom_role_matches(&deleted_existing, &desired), - "soft-deleted custom roles cannot be treated as grantable" - ); - } } diff --git a/crates/alien-infra/src/core/resource_permissions_helper/gcp_custom_roles.rs b/crates/alien-infra/src/core/resource_permissions_helper/gcp_custom_roles.rs new file mode 100644 index 000000000..c5f8b3806 --- /dev/null +++ b/crates/alien-infra/src/core/resource_permissions_helper/gcp_custom_roles.rs @@ -0,0 +1,572 @@ +use std::collections::HashSet; + +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_error::{AlienError, Context, ContextError}; +use alien_gcp_clients::iam::{ + CreateRoleRequest, IamApi, Role, RoleLaunchStage, RoleView, UndeleteRoleRequest, +}; +use alien_permissions::{ + generators::{custom_role_prefix, GcpCustomRole}, + PermissionContext, +}; +use tracing::info; + +use crate::{ + core::ResourceControllerContext, + error::{ErrorData, Result}, +}; + +pub(super) async fn ensure( + ctx: &ResourceControllerContext<'_>, + permission_set_id: &str, + custom_roles: Vec, +) -> Result<()> { + if custom_roles.is_empty() { + return Ok(()); + } + + let gcp_config = ctx.get_gcp_config()?; + let iam_client = ctx.service_provider.get_gcp_iam_client(gcp_config)?; + let mut seen_role_names = HashSet::new(); + + for custom_role in custom_roles { + if seen_role_names.insert(custom_role.name.clone()) { + ensure_one(iam_client.as_ref(), permission_set_id, custom_role).await?; + } + } + + Ok(()) +} + +async fn ensure_one( + iam_client: &dyn IamApi, + permission_set_id: &str, + custom_role: GcpCustomRole, +) -> Result<()> { + let desired_role = desired_role(&custom_role); + + info!( + role_id = %custom_role.role_id, + permission_set = %permission_set_id, + permissions_count = custom_role.included_permissions.len(), + "Ensuring GCP custom role exists" + ); + + match iam_client.get_role(custom_role.name.clone()).await { + Ok(existing_role) => { + reconcile_existing( + iam_client, + permission_set_id, + &custom_role, + existing_role, + desired_role, + ) + .await + } + Err(error) if is_not_found(&error) => { + let request = CreateRoleRequest { + role: desired_role.clone(), + }; + match iam_client + .create_role(custom_role.role_id.clone(), request) + .await + { + Ok(_) => Ok(()), + Err(create_error) if is_conflict(&create_error) => { + let existing_role = + find_role_including_deleted(iam_client, permission_set_id, &custom_role) + .await?; + + match existing_role { + Some(existing_role) => { + reconcile_existing( + iam_client, + permission_set_id, + &custom_role, + existing_role, + desired_role, + ) + .await + } + None => Err(create_error.context(cloud_error( + permission_set_id, + format!( + "Failed to create custom role '{}' after a conflicting create", + custom_role.role_id + ), + ))), + } + } + Err(create_error) => Err(create_error.context(cloud_error( + permission_set_id, + format!("Failed to create custom role '{}'", custom_role.role_id), + ))), + } + } + Err(error) => Err(error.context(cloud_error( + permission_set_id, + format!( + "Failed to check existence of custom role '{}'", + custom_role.role_id + ), + ))), + } +} + +async fn reconcile_existing( + iam_client: &dyn IamApi, + permission_set_id: &str, + custom_role: &GcpCustomRole, + existing_role: Role, + desired_role: Role, +) -> Result<()> { + if existing_role.deleted.unwrap_or(false) { + if !role_definition_matches(&existing_role, &desired_role) { + return Err(AlienError::new(ErrorData::ResourceDrift { + resource_id: permission_set_id.to_string(), + message: format!( + "refusing to reactivate deleted GCP custom role '{}' because its definition does not exactly match the requested permissions", + custom_role.role_id + ), + })); + } + + let etag = existing_role.etag.ok_or_else(|| { + AlienError::new(ErrorData::ResourceDrift { + resource_id: permission_set_id.to_string(), + message: format!( + "refusing to reactivate deleted GCP custom role '{}' without an etag", + custom_role.role_id + ), + }) + })?; + + iam_client + .undelete_role( + custom_role.name.clone(), + UndeleteRoleRequest { etag: Some(etag) }, + ) + .await + .context(cloud_error( + permission_set_id, + format!( + "Failed to reactivate deleted custom role '{}'", + custom_role.role_id + ), + ))?; + + return Ok(()); + } + + if role_definition_matches(&existing_role, &desired_role) { + info!( + role_id = %custom_role.role_id, + permission_set = %permission_set_id, + "GCP custom role already matches desired permissions" + ); + return Ok(()); + } + + iam_client + .patch_role( + custom_role.name.clone(), + desired_role, + Some("includedPermissions,title,description,stage".to_string()), + ) + .await + .context(cloud_error( + permission_set_id, + format!( + "Failed to update existing custom role '{}'", + custom_role.role_id + ), + ))?; + + Ok(()) +} + +async fn find_role_including_deleted( + iam_client: &dyn IamApi, + permission_set_id: &str, + custom_role: &GcpCustomRole, +) -> Result> { + let mut page_token = None; + + loop { + let response = iam_client + .list_roles(Some(1_000), page_token, Some(true), Some(RoleView::Full)) + .await + .context(cloud_error( + permission_set_id, + format!( + "Failed to locate conflicting custom role '{}'", + custom_role.role_id + ), + ))?; + + if let Some(role) = response + .roles + .into_iter() + .find(|role| role.name.as_deref() == Some(custom_role.name.as_str())) + { + return Ok(Some(role)); + } + + match response.next_page_token { + Some(token) if !token.is_empty() => page_token = Some(token), + _ => return Ok(None), + } + } +} + +fn desired_role(custom_role: &GcpCustomRole) -> Role { + Role::builder() + .title(custom_role.title.clone()) + .description(custom_role.description.clone()) + .included_permissions(custom_role.included_permissions.clone()) + .stage(RoleLaunchStage::Ga) + .build() +} + +fn role_definition_matches(existing: &Role, desired: &Role) -> bool { + let mut existing_permissions = existing.included_permissions.clone(); + let mut desired_permissions = desired.included_permissions.clone(); + existing_permissions.sort(); + desired_permissions.sort(); + + existing.title == desired.title + && existing.description == desired.description + && existing.stage == desired.stage + && existing_permissions == desired_permissions +} + +fn is_not_found(error: &AlienError) -> bool { + matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) +} + +fn is_conflict(error: &AlienError) -> bool { + matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceConflict { .. }) + ) +} + +fn cloud_error(permission_set_id: &str, message: String) -> ErrorData { + ErrorData::CloudPlatformError { + message, + resource_id: Some(permission_set_id.to_string()), + } +} + +pub(super) async fn delete( + ctx: &ResourceControllerContext<'_>, + permission_context: &PermissionContext, +) -> Result<()> { + let gcp_config = ctx.get_gcp_config()?; + let iam_client = ctx.service_provider.get_gcp_iam_client(gcp_config)?; + let role_name_prefix = stack_role_name_prefix(permission_context); + let mut role_names = Vec::new(); + let mut page_token = None; + + loop { + let response = iam_client + .list_roles(Some(100), page_token, Some(false), None) + .await + .context(ErrorData::CloudPlatformError { + message: "Failed to list GCP custom roles before cleanup".to_string(), + resource_id: Some(ctx.resource_prefix.to_string()), + })?; + + role_names.extend(response.roles.into_iter().filter_map(|role| { + role.name + .filter(|role_name| role_name.starts_with(&role_name_prefix)) + })); + + match response.next_page_token { + Some(token) if !token.is_empty() => page_token = Some(token), + _ => break, + } + } + + for role_name in role_names { + let role_id = role_name + .rsplit('/') + .next() + .unwrap_or(role_name.as_str()) + .to_string(); + match iam_client.delete_role(role_name).await { + Ok(_) => info!(role_id = %role_id, "Deleted GCP custom role"), + Err(error) if is_not_found(&error) => { + info!(role_id = %role_id, "GCP custom role already deleted"); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!("Failed to delete GCP custom role '{}'", role_id), + resource_id: Some(ctx.resource_prefix.to_string()), + })); + } + } + } + + Ok(()) +} + +pub(super) fn stack_role_name_prefix(permission_context: &PermissionContext) -> String { + let project = permission_context + .project_name + .as_deref() + .unwrap_or("PROJECT_NAME"); + format!( + "projects/{project}/roles/{}", + custom_role_prefix(permission_context) + ) +} + +#[cfg(test)] +mod tests { + use alien_client_core::ErrorData as CloudClientErrorData; + use alien_error::AlienError; + use alien_gcp_clients::iam::{ListRolesResponse, MockIamApi}; + use mockall::{predicate::eq, Sequence}; + + use super::*; + + const PERMISSION_SET_ID: &str = "storage/read"; + const ROLE_ID: &str = "role_stack_storage_read"; + const ROLE_NAME: &str = "projects/test-project/roles/role_stack_storage_read"; + + fn custom_role() -> GcpCustomRole { + GcpCustomRole { + role_id: ROLE_ID.to_string(), + name: ROLE_NAME.to_string(), + title: "Read storage".to_string(), + description: "Read objects from one bucket".to_string(), + included_permissions: vec!["storage.objects.get".to_string()], + stage: "GA".to_string(), + } + } + + fn listed_role(deleted: bool, permissions: &[&str], etag: Option<&str>) -> Role { + Role { + name: Some(ROLE_NAME.to_string()), + title: Some("Read storage".to_string()), + description: Some("Read objects from one bucket".to_string()), + included_permissions: permissions + .iter() + .map(|permission| (*permission).to_string()) + .collect(), + stage: Some(RoleLaunchStage::Ga), + etag: etag.map(str::to_string), + deleted: Some(deleted), + } + } + + fn not_found() -> AlienError { + AlienError::new(CloudClientErrorData::RemoteResourceNotFound { + resource_type: "IAM role".to_string(), + resource_name: ROLE_NAME.to_string(), + }) + } + + fn conflict() -> AlienError { + AlienError::new(CloudClientErrorData::RemoteResourceConflict { + resource_type: "IAM role".to_string(), + resource_name: ROLE_NAME.to_string(), + message: "role ID is marked for deletion".to_string(), + }) + } + + fn expect_missing_then_conflicting_create(mock: &mut MockIamApi) { + mock.expect_get_role() + .with(eq(ROLE_NAME.to_string())) + .times(1) + .return_once(|_| Err(not_found())); + mock.expect_create_role() + .withf(|role_id, request| { + role_id == ROLE_ID && request.role.included_permissions == ["storage.objects.get"] + }) + .times(1) + .return_once(|_, _| Err(conflict())); + } + + #[tokio::test] + async fn create_conflict_recovers_exact_soft_deleted_custom_role() { + let mut mock = MockIamApi::new(); + expect_missing_then_conflicting_create(&mut mock); + mock.expect_list_roles() + .with( + eq(Some(1_000)), + eq(None), + eq(Some(true)), + eq(Some(RoleView::Full)), + ) + .times(1) + .return_once(|_, _, _, _| { + Ok(ListRolesResponse { + roles: vec![listed_role(true, &["storage.objects.get"], Some("etag-1"))], + next_page_token: None, + }) + }); + mock.expect_undelete_role() + .withf(|role_name, request| { + role_name == ROLE_NAME && request.etag.as_deref() == Some("etag-1") + }) + .times(1) + .return_once(|_, _| Ok(listed_role(false, &["storage.objects.get"], None))); + + ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect("an exact deleted role should be safely reactivated"); + } + + #[tokio::test] + async fn mismatched_soft_deleted_role_fails_closed_without_undelete() { + let mut mock = MockIamApi::new(); + expect_missing_then_conflicting_create(&mut mock); + mock.expect_list_roles().times(1).return_once(|_, _, _, _| { + Ok(ListRolesResponse { + roles: vec![listed_role( + true, + &["storage.objects.get", "storage.objects.delete"], + Some("etag-1"), + )], + next_page_token: None, + }) + }); + + let error = ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect_err("a broader deleted role must not be reactivated"); + + assert!(matches!(error.error, Some(ErrorData::ResourceDrift { .. }))); + } + + #[tokio::test] + async fn soft_deleted_role_without_etag_fails_closed() { + let mut mock = MockIamApi::new(); + expect_missing_then_conflicting_create(&mut mock); + mock.expect_list_roles().times(1).return_once(|_, _, _, _| { + Ok(ListRolesResponse { + roles: vec![listed_role(true, &["storage.objects.get"], None)], + next_page_token: None, + }) + }); + + let error = ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect_err("a deleted role without an etag must not be reactivated"); + + assert!(matches!(error.error, Some(ErrorData::ResourceDrift { .. }))); + } + + #[tokio::test] + async fn missing_role_is_created_with_the_exact_definition() { + let mut mock = MockIamApi::new(); + mock.expect_get_role() + .with(eq(ROLE_NAME.to_string())) + .times(1) + .return_once(|_| Err(not_found())); + mock.expect_create_role() + .withf(|role_id, request| { + role_id == ROLE_ID + && request.role.title.as_deref() == Some("Read storage") + && request.role.description.as_deref() == Some("Read objects from one bucket") + && request.role.included_permissions == ["storage.objects.get"] + && request.role.stage == Some(RoleLaunchStage::Ga) + }) + .times(1) + .return_once(|_, request| Ok(request.role)); + + ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect("a missing role should be created"); + } + + #[tokio::test] + async fn active_mismatched_role_is_patched_to_the_exact_definition() { + let mut mock = MockIamApi::new(); + mock.expect_get_role() + .with(eq(ROLE_NAME.to_string())) + .times(1) + .return_once(|_| { + Ok(listed_role( + false, + &["storage.objects.get", "storage.objects.delete"], + Some("etag-1"), + )) + }); + mock.expect_patch_role() + .withf(|role_name, role, update_mask| { + role_name == ROLE_NAME + && role.included_permissions == ["storage.objects.get"] + && update_mask.as_deref() == Some("includedPermissions,title,description,stage") + }) + .times(1) + .return_once(|_, role, _| Ok(role)); + + ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect("an active mismatched role should be reconciled"); + } + + #[tokio::test] + async fn active_role_found_after_create_race_needs_no_mutation() { + let mut mock = MockIamApi::new(); + expect_missing_then_conflicting_create(&mut mock); + mock.expect_list_roles().times(1).return_once(|_, _, _, _| { + Ok(ListRolesResponse { + roles: vec![listed_role(false, &["storage.objects.get"], None)], + next_page_token: None, + }) + }); + + ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect("an exact role created concurrently should be accepted"); + } + + #[tokio::test] + async fn paginated_no_match_preserves_create_conflict() { + let mut mock = MockIamApi::new(); + expect_missing_then_conflicting_create(&mut mock); + let mut sequence = Sequence::new(); + mock.expect_list_roles() + .with( + eq(Some(1_000)), + eq(None), + eq(Some(true)), + eq(Some(RoleView::Full)), + ) + .times(1) + .in_sequence(&mut sequence) + .return_once(|_, _, _, _| { + Ok(ListRolesResponse { + roles: vec![], + next_page_token: Some("next".to_string()), + }) + }); + mock.expect_list_roles() + .with( + eq(Some(1_000)), + eq(Some("next".to_string())), + eq(Some(true)), + eq(Some(RoleView::Full)), + ) + .times(1) + .in_sequence(&mut sequence) + .return_once(|_, _, _, _| Ok(ListRolesResponse::default())); + + let error = ensure_one(&mock, PERMISSION_SET_ID, custom_role()) + .await + .expect_err("the original create conflict should be returned when no role is found"); + + assert_eq!(error.code, "CLOUD_PLATFORM_ERROR"); + assert_eq!( + error.source.as_ref().map(|source| source.code.as_str()), + Some("REMOTE_RESOURCE_CONFLICT") + ); + } +} diff --git a/crates/alien-infra/src/import_helpers.rs b/crates/alien-infra/src/import_helpers.rs index 955ffb344..d59dbf0de 100644 --- a/crates/alien-infra/src/import_helpers.rs +++ b/crates/alien-infra/src/import_helpers.rs @@ -43,14 +43,18 @@ where C: ResourceController + 'static, { let outputs = controller.get_outputs(); - let binding = controller.get_binding_params().map_err(|err| { - AlienError::new(CoreErrorData::GenericError { - message: format!( - "binding params extraction failed for resource '{}': {}", - ctx.resource_id, err - ), - }) - })?; + let remote_binding_params = if ctx.resource.remote_access { + controller.get_binding_params().map_err(|err| { + AlienError::new(CoreErrorData::GenericError { + message: format!( + "binding params extraction failed for resource '{}': {}", + ctx.resource_id, err + ), + }) + })? + } else { + None + }; let internal_state = serialize_controller(&controller).map_err(|err| { AlienError::new(CoreErrorData::JsonSerializationFailed { reason: format!( @@ -68,7 +72,7 @@ where .config(ctx.resource.config.clone()) .internal_state(internal_state) .maybe_outputs(outputs) - .maybe_remote_binding_params(binding) + .maybe_remote_binding_params(remote_binding_params) .lifecycle(ctx.resource.lifecycle) .dependencies(Vec::new()) .build()) diff --git a/crates/alien-infra/src/remote_access_resolver.rs b/crates/alien-infra/src/remote_access_resolver.rs index 5fab8ca2d..bf00afe1f 100644 --- a/crates/alien-infra/src/remote_access_resolver.rs +++ b/crates/alien-infra/src/remote_access_resolver.rs @@ -75,6 +75,7 @@ impl RemoteAccessResolver { base_config, &remote_mgmt_outputs, target_environment, + true, ) .await } @@ -96,6 +97,24 @@ impl RemoteAccessResolver { } } + /// Resolve a GCP remote identity for an immediate Credential Access Boundary exchange. + /// + /// Unlike [`Self::resolve`], this does not eagerly mint a target access token. The + /// caller must immediately materialize the returned config while exchanging it for + /// a downscoped token. Deferring that validation prevents the same two-hop + /// impersonation chain from being executed twice for one credential lease. + #[cfg(feature = "gcp")] + pub async fn resolve_gcp_for_access_boundary( + &self, + base_config: ClientConfig, + stack_state: &StackState, + target_environment: Option<&EnvironmentInfo>, + ) -> Result { + let remote_mgmt_outputs = self.find_remote_stack_management_outputs(stack_state)?; + self.resolve_gcp_impersonation(base_config, &remote_mgmt_outputs, target_environment, false) + .await + } + /// Find RemoteStackManagement outputs in the stack state fn find_remote_stack_management_outputs( &self, @@ -164,6 +183,7 @@ impl RemoteAccessResolver { base_config: ClientConfig, outputs: &RemoteStackManagementOutputs, target_environment: Option<&EnvironmentInfo>, + materialize_credentials: bool, ) -> Result { let service_account_email = &outputs.access_configuration; info!( @@ -206,20 +226,22 @@ impl RemoteAccessResolver { })); }; - // GCP impersonation configs are refreshable and lazy: constructing one - // does not call IAMCredentials. Materialize the token at the credential - // handoff boundary so propagation failures are reported to the caller - // before any deployment operation starts. - gcp_config - .get_bearer_token(GCP_CLOUD_PLATFORM_SCOPE) - .await - .context(ErrorData::AuthenticationFailed { - message: format!( - "Failed to materialize GCP service account credentials: {}", - service_account_email - ), - method: Some("service_account_impersonation".to_string()), - })?; + if materialize_credentials { + // GCP impersonation configs are refreshable and lazy: constructing one + // does not call IAMCredentials. Materialize the token at the credential + // handoff boundary so propagation failures are reported to the caller + // before any deployment operation starts. + gcp_config + .get_bearer_token(GCP_CLOUD_PLATFORM_SCOPE) + .await + .context(ErrorData::AuthenticationFailed { + message: format!( + "Failed to materialize GCP service account credentials: {}", + service_account_email + ), + method: Some("service_account_impersonation".to_string()), + })?; + } Ok(ClientConfig::Gcp(gcp_config)) } diff --git a/crates/alien-infra/src/remote_stack_management/aws.rs b/crates/alien-infra/src/remote_stack_management/aws.rs index 03726b9ea..b567c08a6 100644 --- a/crates/alien-infra/src/remote_stack_management/aws.rs +++ b/crates/alien-infra/src/remote_stack_management/aws.rs @@ -1,15 +1,15 @@ use std::{collections::HashSet, time::Duration}; use tracing::{info, warn}; -use crate::core::{ResourceControllerContext, ResourcePermissionsHelper}; +use crate::core::ResourceControllerContext; use crate::error::{ErrorData, Result}; use alien_aws_clients::iam::{CreateRoleRequest, CreateRoleTag, IamApi}; use alien_core::{ standard_resource_tags, AwsRemoteStackManagementHeartbeatData, HeartbeatBackend, - KubernetesCluster, ObservedHealth, Platform, ProviderLifecycleState, RemoteStackManagement, + ObservedHealth, Platform, ProviderLifecycleState, RemoteStackManagement, RemoteStackManagementHeartbeatData, RemoteStackManagementHeartbeatStatus, - RemoteStackManagementOutputs, ResourceHeartbeat, ResourceHeartbeatData, ResourceLifecycle, - ResourceOutputs, ResourceStatus, Worker, + RemoteStackManagementOutputs, ResourceHeartbeat, ResourceHeartbeatData, ResourceOutputs, + ResourceStatus, }; use alien_error::{AlienError, Context, ContextError, IntoAlienError}; use alien_macros::controller; @@ -21,11 +21,18 @@ use alien_permissions::{ }; use chrono::Utc; -/// Generates the AWS IAM role name for RemoteStackManagement. -fn get_aws_management_role_name(prefix: &str) -> String { - format!("{}-management", prefix) -} +use super::aws_remote_storage::{ + append_resource_scoped_management_statements, desired_remote_storage_bucket_names, +}; +mod controller_helpers; +mod ownership; +use controller_helpers::*; + +#[cfg(test)] +mod ownership_tests; + +/// Generates the AWS IAM role name for RemoteStackManagement. const LEGACY_INLINE_POLICY_NAME: &str = "alien-management-policy"; const MANAGED_POLICY_BASE_NAME: &str = "deployment-management"; const MAX_MANAGED_POLICY_BYTES: usize = 5_500; @@ -33,12 +40,20 @@ const IAM_POLICY_NAME_MAX_LEN: usize = 128; #[controller] pub struct AwsRemoteStackManagementController { + /// Whether setup owns the role and its IAM grants. + /// + /// `None` is a legacy checkpoint from before ownership was persisted. + #[serde(default)] + pub(crate) setup_managed: Option, /// The ARN of the created IAM role. pub(crate) role_arn: Option, /// The name of the created IAM role. pub(crate) role_name: Option, /// Whether management permissions have been applied pub(crate) management_permissions_applied: bool, + /// Fingerprint of the management grant plan last applied to the role. + #[serde(default)] + pub(crate) applied_management_grant_fingerprint: Option, } #[controller] @@ -55,6 +70,10 @@ impl AwsRemoteStackManagementController { &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { + // Persist ownership before the first cloud mutation. A failed direct + // create must never be mistaken for a setup-owned import. + self.setup_managed = Some(false); + let config = ctx.desired_resource_config::()?; let aws_config = ctx.get_aws_config()?; let client = ctx.service_provider.get_aws_iam_client(aws_config).await?; @@ -168,6 +187,11 @@ impl AwsRemoteStackManagementController { } self.management_permissions_applied = true; + self.applied_management_grant_fingerprint = + Some(super::desired_management_grant_fingerprint( + ctx, + &desired_remote_storage_bucket_names(ctx)?, + )?); Ok(HandlerAction::Continue { state: Ready, @@ -230,6 +254,18 @@ impl AwsRemoteStackManagementController { status = ResourceStatus::Updating, )] async fn update_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { + let config = ctx.desired_resource_config::()?; + if self.setup_managed_resources() { + info!( + config_id = %config.id, + "Skipping runtime mutation of setup-managed AWS role and grants" + ); + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }); + } + let aws_config = ctx.get_aws_config()?; let client = ctx.service_provider.get_aws_iam_client(aws_config).await?; let role_name = self.role_name.as_ref().unwrap(); @@ -259,6 +295,13 @@ impl AwsRemoteStackManagementController { .await?; } + self.management_permissions_applied = true; + self.applied_management_grant_fingerprint = + Some(super::desired_management_grant_fingerprint( + ctx, + &desired_remote_storage_bucket_names(ctx)?, + )?); + Ok(HandlerAction::Continue { state: Ready, suggested_delay: None, @@ -274,6 +317,18 @@ impl AwsRemoteStackManagementController { status = ResourceStatus::Deleting, )] async fn delete_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { + let config = ctx.desired_resource_config::()?; + if self.setup_managed_resources() { + info!( + config_id = %config.id, + "Leaving setup-managed AWS role and grants for setup teardown" + ); + return Ok(HandlerAction::Continue { + state: Deleted, + suggested_delay: None, + }); + } + let role_name = match &self.role_name { Some(name) => name, None => { @@ -491,42 +546,18 @@ impl AwsRemoteStackManagementController { None } } -} -fn emit_aws_remote_stack_management_heartbeat( - ctx: &ResourceControllerContext<'_>, - controller: &AwsRemoteStackManagementController, -) -> Result<()> { - let config = ctx.desired_resource_config::()?; - - ctx.emit_heartbeat(ResourceHeartbeat { - deployment_id: None, - resource_id: config.id.clone(), - resource_type: RemoteStackManagement::RESOURCE_TYPE, - controller_platform: Platform::Aws, - backend: HeartbeatBackend::Aws, - observed_at: Utc::now(), - data: ResourceHeartbeatData::RemoteStackManagement( - RemoteStackManagementHeartbeatData::AwsIamRole(AwsRemoteStackManagementHeartbeatData { - status: RemoteStackManagementHeartbeatStatus { - health: ObservedHealth::Healthy, - lifecycle: ProviderLifecycleState::Running, - message: controller.role_name.as_ref().map(|role_name| { - format!("AWS management role '{}' is reachable", role_name) - }), - stale: false, - partial: false, - collection_issues: vec![], - }, - role_name: controller.role_name.clone(), - role_arn: controller.role_arn.clone(), - management_permissions_applied: controller.management_permissions_applied, - }), - ), - raw: vec![], - }); - - Ok(()) + fn needs_update(&self, ctx: &ResourceControllerContext<'_>) -> Result { + if self.setup_managed_resources() { + return Ok(false); + } + + let desired = super::desired_management_grant_fingerprint( + ctx, + &desired_remote_storage_bucket_names(ctx)?, + )?; + Ok(self.applied_management_grant_fingerprint.as_ref() != Some(&desired)) + } } // Separate impl block for helper methods @@ -626,7 +657,7 @@ impl AwsRemoteStackManagementController { } } - self.append_resource_scoped_management_statements( + append_resource_scoped_management_statements( ctx, management_profile, &permission_context, @@ -656,93 +687,6 @@ impl AwsRemoteStackManagementController { self.chunk_management_policy_documents(all_statements) } - fn append_resource_scoped_management_statements( - &self, - ctx: &ResourceControllerContext<'_>, - management_profile: &alien_core::permissions::PermissionProfile, - base_permission_context: &PermissionContext, - generator: &AwsRuntimePermissionsGenerator, - all_statements: &mut Vec, - ) -> Result<()> { - let mut seen = HashSet::new(); - for (resource_id, permission_set_refs) in management_profile - .0 - .iter() - .filter(|(scope, _)| *scope != "*") - { - let Some(resource_entry) = ctx.desired_stack.resources.get(resource_id) else { - continue; - }; - if resource_entry.lifecycle != ResourceLifecycle::Live { - continue; - } - let permission_context = Self::resource_scoped_management_permission_context( - ctx, - base_permission_context, - resource_id, - resource_entry, - )?; - - for permission_set_ref in permission_set_refs { - if !seen.insert((resource_id.clone(), permission_set_ref.id().to_string())) { - continue; - } - if permission_set_ref.id().ends_with("/provision") { - continue; - } - let Some(permission_set) = - permission_set_ref.resolve(|name| get_permission_set(name).cloned()) - else { - continue; - }; - if permission_set.platforms.aws.is_none() { - continue; - } - - let policy = generator - .generate_policy(&permission_set, BindingTarget::Resource, &permission_context) - .context(ErrorData::InfrastructureError { - message: format!( - "Failed to generate resource-scoped IAM policy for management permission set '{}'", - permission_set.id - ), - operation: Some("generate_management_policy_document".to_string()), - resource_id: Some(resource_id.clone()), - })?; - all_statements.extend(policy.statement); - } - } - - Ok(()) - } - - fn resource_scoped_management_permission_context( - ctx: &ResourceControllerContext<'_>, - base_permission_context: &PermissionContext, - resource_id: &str, - resource_entry: &alien_core::ResourceEntry, - ) -> Result { - if let Some(cluster) = resource_entry.config.downcast_ref::() { - return ResourcePermissionsHelper::aws_kubernetes_cluster_permission_context( - ctx, cluster, - ) - .map(|context| context.with_resource_id(resource_id.to_string())); - } - - let mut context = base_permission_context - .clone() - .with_resource_id(resource_id.to_string()); - context.resource_name = None; - - if resource_entry.config.downcast_ref::().is_some() { - return Ok( - context.with_resource_name(format!("{}-{}", ctx.resource_prefix, resource_id)) - ); - } - - Ok(context) - } - fn chunk_management_policy_documents( &self, statements: Vec, @@ -1083,38 +1027,13 @@ impl AwsRemoteStackManagementController { #[cfg(feature = "test-utils")] pub fn mock_ready(role_name: &str) -> Self { Self { + setup_managed: Some(false), state: AwsRemoteStackManagementState::Ready, role_arn: Some(format!("arn:aws:iam::123456789012:role/{}", role_name)), role_name: Some(role_name.to_string()), management_permissions_applied: true, + applied_management_grant_fingerprint: None, _internal_stay_count: None, } } } - -fn sanitize_iam_policy_name(input: &str) -> String { - input - .chars() - .map(|c| { - if c.is_ascii_alphanumeric() || matches!(c, '_' | '+' | '=' | ',' | '.' | '@' | '-') { - c - } else { - '-' - } - }) - .collect() -} - -fn is_remote_conflict(error: &alien_error::AlienError) -> bool { - matches!( - error.error, - Some(alien_client_core::ErrorData::RemoteResourceConflict { .. }) - ) -} - -fn is_remote_not_found(error: &alien_error::AlienError) -> bool { - matches!( - error.error, - Some(alien_client_core::ErrorData::RemoteResourceNotFound { .. }) - ) -} diff --git a/crates/alien-infra/src/remote_stack_management/aws/controller_helpers.rs b/crates/alien-infra/src/remote_stack_management/aws/controller_helpers.rs new file mode 100644 index 000000000..5dda48348 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/aws/controller_helpers.rs @@ -0,0 +1,72 @@ +use super::*; + +pub(super) fn get_aws_management_role_name(prefix: &str) -> String { + format!("{}-management", prefix) +} + +pub(super) fn emit_aws_remote_stack_management_heartbeat( + ctx: &ResourceControllerContext<'_>, + controller: &AwsRemoteStackManagementController, +) -> Result<()> { + let config = ctx.desired_resource_config::()?; + + ctx.emit_heartbeat(ResourceHeartbeat { + deployment_id: None, + resource_id: config.id.clone(), + resource_type: RemoteStackManagement::RESOURCE_TYPE, + controller_platform: Platform::Aws, + backend: HeartbeatBackend::Aws, + observed_at: Utc::now(), + data: ResourceHeartbeatData::RemoteStackManagement( + RemoteStackManagementHeartbeatData::AwsIamRole(AwsRemoteStackManagementHeartbeatData { + status: RemoteStackManagementHeartbeatStatus { + health: ObservedHealth::Healthy, + lifecycle: ProviderLifecycleState::Running, + message: controller.role_name.as_ref().map(|role_name| { + format!("AWS management role '{}' is reachable", role_name) + }), + stale: false, + partial: false, + collection_issues: vec![], + }, + role_name: controller.role_name.clone(), + role_arn: controller.role_arn.clone(), + management_permissions_applied: controller.management_permissions_applied, + }), + ), + raw: vec![], + }); + + Ok(()) +} + +pub(super) fn sanitize_iam_policy_name(input: &str) -> String { + input + .chars() + .map(|c| { + if c.is_ascii_alphanumeric() || matches!(c, '_' | '+' | '=' | ',' | '.' | '@' | '-') { + c + } else { + '-' + } + }) + .collect() +} + +pub(super) fn is_remote_conflict( + error: &alien_error::AlienError, +) -> bool { + matches!( + error.error, + Some(alien_client_core::ErrorData::RemoteResourceConflict { .. }) + ) +} + +pub(super) fn is_remote_not_found( + error: &alien_error::AlienError, +) -> bool { + matches!( + error.error, + Some(alien_client_core::ErrorData::RemoteResourceNotFound { .. }) + ) +} diff --git a/crates/alien-infra/src/remote_stack_management/aws/ownership.rs b/crates/alien-infra/src/remote_stack_management/aws/ownership.rs new file mode 100644 index 000000000..f2fbde65f --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/aws/ownership.rs @@ -0,0 +1,11 @@ +use super::*; + +impl AwsRemoteStackManagementController { + pub(super) fn setup_managed_resources(&self) -> bool { + // AWS used the same role name for the historical direct-create and + // setup-import paths, so old checkpoints do not contain enough durable + // evidence to infer ownership safely. Preserve their original runtime + // behavior; all new imports persist setup ownership explicitly. + self.setup_managed.unwrap_or(false) + } +} diff --git a/crates/alien-infra/src/remote_stack_management/aws/ownership_tests.rs b/crates/alien-infra/src/remote_stack_management/aws/ownership_tests.rs new file mode 100644 index 000000000..d9e47db7e --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/aws/ownership_tests.rs @@ -0,0 +1,80 @@ +use std::sync::Arc; + +use alien_core::{ + ClientConfig, DeploymentConfig, EnvironmentVariablesSnapshot, Platform, RemoteStackManagement, + Resource, Stack, StackSettings, StackState, +}; + +use super::*; +use crate::core::{ + HeartbeatCollector, MockPlatformServiceProvider, PlatformServiceProvider, ResourceController, + ResourceRegistry, +}; + +fn controller(setup_managed: Option) -> AwsRemoteStackManagementController { + AwsRemoteStackManagementController { + setup_managed, + state: AwsRemoteStackManagementState::Ready, + role_arn: Some("arn:aws:iam::123456789012:role/test-stack-management".to_string()), + role_name: Some("test-stack-management".to_string()), + management_permissions_applied: true, + applied_management_grant_fingerprint: None, + _internal_stay_count: None, + } +} + +#[test] +fn legacy_and_explicit_ownership_are_preserved() { + assert!( + !controller(None).setup_managed_resources(), + "ambiguous legacy checkpoints must retain their original runtime ownership" + ); + assert!(!controller(Some(false)).setup_managed_resources()); + assert!(controller(Some(true)).setup_managed_resources()); +} + +#[tokio::test] +async fn setup_managed_lifecycle_never_calls_cloud_apis() { + let provider: Arc = Arc::new(MockPlatformServiceProvider::new()); + let management = RemoteStackManagement::new("management".to_string()).build(); + let desired_config = Resource::new(management); + let state = StackState::new(Platform::Aws); + let stack = Stack::new("test-stack".to_string()).build(); + let registry = Arc::new(ResourceRegistry::new()); + let deployment_config = DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(EnvironmentVariablesSnapshot { + variables: Vec::new(), + hash: String::new(), + created_at: String::new(), + }) + .external_bindings(Default::default()) + .allow_frozen_changes(false) + .build(); + let ctx = ResourceControllerContext { + desired_config: &desired_config, + platform: Platform::Aws, + client_config: ClientConfig::Test, + state: &state, + resource_prefix: "test-stack", + registry: ®istry, + desired_stack: &stack, + service_provider: &provider, + deployment_config: &deployment_config, + heartbeat_collector: HeartbeatCollector::default(), + }; + let mut controller = controller(Some(true)); + + assert!(!controller.needs_update(&ctx).expect("ownership check")); + + controller.state = AwsRemoteStackManagementState::UpdateStart; + controller.update_start(&ctx).await.expect("update skip"); + + controller.state = AwsRemoteStackManagementState::DeleteStart; + controller.delete_start(&ctx).await.expect("delete skip"); + assert_eq!( + controller.role_name.as_deref(), + Some("test-stack-management"), + "runtime teardown must leave the setup-owned role intact" + ); +} diff --git a/crates/alien-infra/src/remote_stack_management/aws_import.rs b/crates/alien-infra/src/remote_stack_management/aws_import.rs index 40cb65a0d..e2b29de2f 100644 --- a/crates/alien-infra/src/remote_stack_management/aws_import.rs +++ b/crates/alien-infra/src/remote_stack_management/aws_import.rs @@ -24,10 +24,15 @@ impl ResourceImporter for AwsRemoteStackManagementImporter { ctx: &ImportContext<'_>, ) -> Result { let controller = AwsRemoteStackManagementController { + // CloudFormation owns the role and its exact resource grants. + // Runtime observes the imported identity but must not mutate or + // delete setup-owned IAM after handoff. + setup_managed: Some(true), state: AwsRemoteStackManagementState::Ready, role_arn: Some(data.role_arn), role_name: Some(data.role_name), management_permissions_applied: data.management_permissions_applied, + applied_management_grant_fingerprint: None, _internal_stay_count: None, }; make_imported_state(controller, ctx) diff --git a/crates/alien-infra/src/remote_stack_management/aws_remote_storage.rs b/crates/alien-infra/src/remote_stack_management/aws_remote_storage.rs new file mode 100644 index 000000000..c65cc7559 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/aws_remote_storage.rs @@ -0,0 +1,325 @@ +use std::collections::HashSet; + +#[cfg(test)] +use alien_core::Storage; +use alien_core::{KubernetesCluster, ResourceLifecycle, StorageBinding, Worker}; +use alien_error::{AlienError, Context}; +use alien_permissions::{ + generators::{AwsIamStatement, AwsRuntimePermissionsGenerator}, + get_permission_set, BindingTarget, PermissionContext, +}; + +use super::{concrete_storage_binding_value, remote_storage_binding}; +use crate::core::{ResourceControllerContext, ResourcePermissionsHelper}; +use crate::error::{ErrorData, Result}; + +pub(super) fn append_resource_scoped_management_statements( + ctx: &ResourceControllerContext<'_>, + management_profile: &alien_core::permissions::PermissionProfile, + base_permission_context: &PermissionContext, + generator: &AwsRuntimePermissionsGenerator, + all_statements: &mut Vec, +) -> Result<()> { + let mut seen = HashSet::new(); + for (resource_id, permission_set_refs) in management_profile + .0 + .iter() + .filter(|(scope, _)| *scope != "*") + { + let Some(resource_entry) = ctx.desired_stack.resources.get(resource_id) else { + continue; + }; + let permission_context = if resource_entry.lifecycle == ResourceLifecycle::Live { + live_resource_permission_context( + ctx, + base_permission_context, + resource_id, + resource_entry, + )? + } else if resource_entry.is_remote_frozen_storage() { + let bucket_name = aws_remote_storage_bucket_name(ctx, resource_id)?; + base_permission_context + .clone() + .with_resource_id(resource_id.to_string()) + .with_resource_name(bucket_name) + } else { + continue; + }; + + for permission_set_ref in permission_set_refs { + if !seen.insert((resource_id.clone(), permission_set_ref.id().to_string())) { + continue; + } + if permission_set_ref.id().ends_with("/provision") { + continue; + } + let Some(permission_set) = + permission_set_ref.resolve(|name| get_permission_set(name).cloned()) + else { + continue; + }; + if permission_set.platforms.aws.is_none() { + continue; + } + + let policy = generator + .generate_policy(&permission_set, BindingTarget::Resource, &permission_context) + .context(ErrorData::InfrastructureError { + message: format!( + "Failed to generate resource-scoped IAM policy for management permission set '{}'", + permission_set.id + ), + operation: Some("generate_management_policy_document".to_string()), + resource_id: Some(resource_id.clone()), + })?; + all_statements.extend(policy.statement); + } + } + + Ok(()) +} + +fn live_resource_permission_context( + ctx: &ResourceControllerContext<'_>, + base_permission_context: &PermissionContext, + resource_id: &str, + resource_entry: &alien_core::ResourceEntry, +) -> Result { + if let Some(cluster) = resource_entry.config.downcast_ref::() { + return ResourcePermissionsHelper::aws_kubernetes_cluster_permission_context(ctx, cluster) + .map(|context| context.with_resource_id(resource_id.to_string())); + } + + let mut context = base_permission_context + .clone() + .with_resource_id(resource_id.to_string()); + context.resource_name = None; + + if resource_entry.config.downcast_ref::().is_some() { + return Ok(context.with_resource_name(format!("{}-{}", ctx.resource_prefix, resource_id))); + } + + Ok(context) +} + +fn aws_remote_storage_bucket_name( + ctx: &ResourceControllerContext<'_>, + resource_id: &str, +) -> Result { + match remote_storage_binding(ctx, resource_id)? { + Some(StorageBinding::S3(binding)) => concrete_storage_binding_value( + binding.bucket_name, + resource_id, + "bucketName", + "AWS S3", + ), + Some(other) => Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' must use an S3 binding on AWS, got {other:?}" + ), + resource_id: Some(resource_id.to_string()), + })), + None => Ok(format!("{}-{}", ctx.resource_prefix, resource_id)), + } +} + +pub(super) fn desired_remote_storage_bucket_names( + ctx: &ResourceControllerContext<'_>, +) -> Result> { + let mut bucket_names = ctx + .desired_stack + .resources + .iter() + .filter(|(_, entry)| entry.is_remote_frozen_storage()) + .map(|(resource_id, _)| aws_remote_storage_bucket_name(ctx, resource_id)) + .collect::>>()?; + bucket_names.sort_unstable(); + bucket_names.dedup(); + Ok(bucket_names) +} + +#[cfg(test)] +mod tests { + use std::sync::Arc; + + use alien_core::{ + ClientConfig, DeploymentConfig, EnvironmentVariablesSnapshot, ExternalBinding, + ManagementPermissions, PermissionProfile, PermissionsConfig, Platform, + RemoteStackManagement, Resource, ResourceEntry, ResourceStatus, Stack, StackSettings, + StackState, + }; + use indexmap::IndexMap; + + use super::super::aws::{AwsRemoteStackManagementController, AwsRemoteStackManagementState}; + use super::*; + use crate::core::{ + DefaultPlatformServiceProvider, HeartbeatCollector, PlatformServiceProvider, + ResourceController, ResourceRegistry, + }; + + struct GrantPlanHarness { + desired_config: Resource, + stack: Stack, + state: StackState, + registry: Arc, + service_provider: Arc, + deployment_config: DeploymentConfig, + } + + impl GrantPlanHarness { + fn new(remote_access: bool, bucket_name: &str) -> Self { + let storage = Storage::new("archive".to_string()).build(); + let management = RemoteStackManagement::new("management".to_string()).build(); + let desired_config = Resource::new(management.clone()); + let mut resources = IndexMap::new(); + resources.insert( + "archive".to_string(), + ResourceEntry { + config: Resource::new(storage), + lifecycle: ResourceLifecycle::Frozen, + dependencies: Vec::new(), + remote_access, + enabled_when: None, + }, + ); + resources.insert( + "management".to_string(), + ResourceEntry { + config: Resource::new(management), + lifecycle: ResourceLifecycle::Frozen, + dependencies: Vec::new(), + remote_access: false, + enabled_when: None, + }, + ); + let profile = PermissionProfile::new().resource( + "archive", + [alien_core::PermissionSetReference::from_name( + "storage/remote-data-write", + )], + ); + let stack = Stack { + id: "grant-plan-test".to_string(), + resources, + permissions: PermissionsConfig { + profiles: IndexMap::new(), + management: ManagementPermissions::Override(profile), + }, + supported_platforms: None, + inputs: Vec::new(), + }; + let mut state = StackState::new(Platform::Aws); + state.resources.insert( + "archive".to_string(), + alien_core::StackResourceState::builder() + .resource_type(Storage::RESOURCE_TYPE.as_ref().to_string()) + .status(ResourceStatus::Running) + .config(Resource::new(Storage::new("archive".to_string()).build())) + .lifecycle(ResourceLifecycle::Frozen) + .remote_binding_params( + serde_json::to_value(StorageBinding::s3(bucket_name)).unwrap(), + ) + .dependencies(Vec::new()) + .build(), + ); + Self { + desired_config, + stack, + state, + registry: Arc::new(ResourceRegistry::new()), + service_provider: Arc::new(DefaultPlatformServiceProvider::default()), + deployment_config: DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(EnvironmentVariablesSnapshot { + variables: Vec::new(), + hash: String::new(), + created_at: String::new(), + }) + .external_bindings(Default::default()) + .allow_frozen_changes(false) + .build(), + } + } + + fn ctx(&self) -> ResourceControllerContext<'_> { + ResourceControllerContext { + desired_config: &self.desired_config, + platform: Platform::Aws, + client_config: ClientConfig::Test, + state: &self.state, + resource_prefix: "test-stack", + registry: &self.registry, + desired_stack: &self.stack, + service_provider: &self.service_provider, + deployment_config: &self.deployment_config, + heartbeat_collector: HeartbeatCollector::default(), + } + } + } + + #[test] + fn remote_storage_management_policy_uses_the_exact_bucket() { + let context = PermissionContext::new() + .with_aws_account_id("123456789012".to_string()) + .with_aws_region("us-east-1".to_string()) + .with_stack_prefix("deployment-prefix".to_string()) + .with_resource_id("archive".to_string()) + .with_resource_name("setup-owned-archive-bucket".to_string()); + let permission_set = get_permission_set("storage/remote-data-write").unwrap(); + + let policy = AwsRuntimePermissionsGenerator::new() + .generate_policy(permission_set, BindingTarget::Resource, &context) + .unwrap(); + + assert_eq!( + policy.statement[0].resource, + [ + "arn:aws:s3:::setup-owned-archive-bucket", + "arn:aws:s3:::setup-owned-archive-bucket/*", + ] + ); + } + + #[test] + fn external_remote_storage_is_rejected_before_grant_derivation() { + let mut harness = GrantPlanHarness::new(true, "setup-owned-bucket"); + harness.deployment_config.external_bindings.insert( + "archive", + ExternalBinding::Storage(StorageBinding::s3("existing-bucket")), + ); + + let error = desired_remote_storage_bucket_names(&harness.ctx()) + .expect_err("external buckets must never receive management grants"); + assert_eq!(error.code, "RESOURCE_CONFIG_INVALID"); + assert!(error.message.contains("cannot use an external binding")); + } + + #[test] + fn running_controller_schedules_enable_disable_and_rebind_grant_changes() { + let enabled = GrantPlanHarness::new(true, "bucket-a"); + let enabled_fingerprint = super::super::desired_management_grant_fingerprint( + &enabled.ctx(), + &desired_remote_storage_bucket_names(&enabled.ctx()).unwrap(), + ) + .unwrap(); + let mut controller = AwsRemoteStackManagementController { + setup_managed: Some(false), + state: AwsRemoteStackManagementState::Ready, + role_arn: Some("arn:aws:iam::123456789012:role/test-management".to_string()), + role_name: Some("test-management".to_string()), + management_permissions_applied: true, + applied_management_grant_fingerprint: None, + _internal_stay_count: None, + }; + + assert!(controller.needs_update(&enabled.ctx()).unwrap()); + controller.applied_management_grant_fingerprint = Some(enabled_fingerprint); + assert!(!controller.needs_update(&enabled.ctx()).unwrap()); + + let disabled = GrantPlanHarness::new(false, "bucket-a"); + assert!(controller.needs_update(&disabled.ctx()).unwrap()); + + let rebound = GrantPlanHarness::new(true, "bucket-b"); + assert!(controller.needs_update(&rebound.ctx()).unwrap()); + } +} diff --git a/crates/alien-infra/src/remote_stack_management/azure.rs b/crates/alien-infra/src/remote_stack_management/azure.rs index 9bdc572a7..647e0a7cf 100644 --- a/crates/alien-infra/src/remote_stack_management/azure.rs +++ b/crates/alien-infra/src/remote_stack_management/azure.rs @@ -2,7 +2,7 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH}; use tracing::info; use uuid::Uuid; -use crate::core::{ResourceControllerContext, ResourcePermissionsHelper}; +use crate::core::ResourceControllerContext; use crate::error::{ErrorData, Result}; use crate::infra_requirements::azure_utils; use alien_azure_clients::authorization::Scope; @@ -18,8 +18,8 @@ use alien_azure_clients::models::authorization_role_definitions::{ use alien_azure_clients::models::managed_identity::Identity; use alien_client_core::ErrorData as CloudClientErrorData; use alien_core::{ - AzureRemoteStackManagementHeartbeatData, HeartbeatBackend, KubernetesCluster, NetworkSettings, - ObservedHealth, PermissionProfile, Platform, ProviderLifecycleState, RemoteStackManagement, + AzureRemoteStackManagementHeartbeatData, HeartbeatBackend, NetworkSettings, ObservedHealth, + PermissionProfile, Platform, ProviderLifecycleState, RemoteStackManagement, RemoteStackManagementHeartbeatData, RemoteStackManagementHeartbeatStatus, RemoteStackManagementOutputs, ResourceHeartbeat, ResourceHeartbeatData, ResourceOutputs, ResourceStatus, @@ -27,15 +27,21 @@ use alien_core::{ use alien_error::{AlienError, Context, ContextError}; use alien_macros::controller; use alien_permissions::{ - generators::{ - dedupe_azure_role_bindings, AzureGrantPlan, AzureRoleDefinitionRef, - AzureRuntimePermissionsGenerator, - }, + generators::{AzureGrantPlan, AzureRoleDefinitionRef, AzureRuntimePermissionsGenerator}, get_permission_set, BindingTarget, PermissionContext, }; use chrono::Utc; use std::collections::{BTreeSet, HashMap}; +use super::azure_remote_storage::{ + custom_roles_for_combined_management_role, desired_remote_storage_scopes, + REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID, +}; + +mod management_grants; +pub(super) use management_grants::*; +mod ownership; + #[cfg(not(test))] const AZURE_ROLE_ASSIGNMENT_RBAC_WAIT_SECS: u64 = 300; #[cfg(test)] @@ -47,118 +53,14 @@ const AZURE_RBAC_WAIT_POLL_SECS: u64 = 10; // the number of reconciles that can happen inside the deadline. const AZURE_RBAC_WAIT_MAX_ATTEMPTS: u32 = 100_000; -fn get_management_identity_name(prefix: &str) -> String { - format!("{}-management-identity", prefix) -} - -fn get_fic_name(prefix: &str) -> String { - format!("{}-management-fic", prefix) -} - -fn management_role_definition_scope( - assignable_scopes: &[String], - subscription_id: &str, - resource_group_name: &str, -) -> Scope { - let subscription_scope = format!("/subscriptions/{subscription_id}"); - if assignable_scopes - .iter() - .any(|scope| scope == &subscription_scope) - { - Scope::Subscription - } else { - Scope::ResourceGroup { - resource_group_name: resource_group_name.to_string(), - } - } -} - -fn role_definition_scope_from_id(role_definition_id: &str, resource_group_name: &str) -> Scope { - if role_definition_id.contains("/resourceGroups/") { - Scope::ResourceGroup { - resource_group_name: resource_group_name.to_string(), - } - } else { - Scope::Subscription - } -} - -fn current_unix_timestamp_secs() -> u64 { - SystemTime::now() - .duration_since(UNIX_EPOCH) - .map(|duration| duration.as_secs()) - .unwrap_or(0) -} - -fn ensure_wait_deadline(wait_until_epoch_secs: &mut Option, wait_secs: u64) -> u64 { - let now = current_unix_timestamp_secs(); - *wait_until_epoch_secs.get_or_insert_with(|| now.saturating_add(wait_secs)) -} - -fn wait_delay(deadline_epoch_secs: u64) -> Option { - let now = current_unix_timestamp_secs(); - let remaining = deadline_epoch_secs.saturating_sub(now); - - if remaining == 0 { - None - } else { - Some(Duration::from_secs( - remaining.min(AZURE_RBAC_WAIT_POLL_SECS), - )) - } -} - -fn management_role_assignment_key( - resource_prefix: &str, - principal_id: &str, - role_definition_id: &str, - scope: &str, -) -> String { - format!( - "deployment:azure:mgmt-role-assign:{resource_prefix}:uami:{principal_id}:{role_definition_id}:{scope}" - ) -} - -fn existing_role_assignment_id_from_conflict( - scope: &str, - err: &AlienError, -) -> Option { - let CloudClientErrorData::RemoteResourceConflict { message, .. } = err.error.as_ref()? else { - return None; - }; - - let lower_message = message.to_ascii_lowercase(); - if !lower_message.contains("role assignment already exists") - || !lower_message.contains("role assignment") - { - return None; - } - - let normalized = message - .chars() - .map(|ch| { - if ch.is_ascii_hexdigit() || ch == '-' { - ch - } else { - ' ' - } - }) - .collect::(); - - normalized - .split_whitespace() - .rev() - .find_map(|candidate| Uuid::parse_str(candidate).ok()) - .map(|assignment_uuid| { - format!( - "{}/providers/Microsoft.Authorization/roleAssignments/{}", - scope, assignment_uuid - ) - }) -} - #[controller] pub struct AzureRemoteStackManagementController { + /// Whether setup owns the identity, FIC, and management grants. + /// + /// `None` is a legacy checkpoint; ownership is then inferred from the + /// controller state that predates this field. + #[serde(default)] + pub(crate) setup_managed: Option, /// The resource ID of the target UAMI pub(crate) uami_resource_id: Option, /// The client ID of the target UAMI (used in access_configuration output) @@ -171,10 +73,16 @@ pub struct AzureRemoteStackManagementController { pub(crate) fic_name: Option, /// The full resource ID of the custom role definition pub(crate) role_definition_id: Option, + /// Exact-scope custom role definitions keyed by permission entry and resource scope. + #[serde(default)] + pub(crate) resource_role_definition_ids: HashMap, /// Resource IDs of created role assignments pub(crate) role_assignment_ids: Vec, /// Deadline for Azure RBAC propagation after management assignments. pub(crate) role_assignment_wait_until_epoch_secs: Option, + /// Fingerprint of the management grant plan last applied to the UAMI. + #[serde(default)] + pub(crate) applied_management_grant_fingerprint: Option, } #[controller] @@ -191,6 +99,11 @@ impl AzureRemoteStackManagementController { &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { + // This flow creates and therefore owns every structural resource. + // Persist the decision before the first cloud mutation so a failed + // direct setup cannot later be mistaken for an IaC import. + self.setup_managed = Some(false); + let config = ctx.desired_resource_config::()?; let resource_group_name = azure_utils::get_resource_group_name(ctx.state)?; let identity_name = get_management_identity_name(ctx.resource_prefix); @@ -366,64 +279,67 @@ impl AzureRemoteStackManagementController { .service_provider .get_azure_authorization_client(azure_cfg)?; - let role_definition_uuid = Uuid::new_v5( - &Uuid::NAMESPACE_OID, - format!("deployment:azure:mgmt-role-def:{}", ctx.resource_prefix).as_bytes(), - ) - .to_string(); - - let Some(role_definition_props) = role_definition_props else { - info!("No residual Azure management custom role required"); - self.role_definition_id = None; - return Ok(HandlerAction::Continue { - state: CreatingRoleAssignments, - suggested_delay: None, - }); - }; + if let Some(role_definition_props) = role_definition_props { + let role_definition_uuid = Uuid::new_v5( + &Uuid::NAMESPACE_OID, + format!("deployment:azure:mgmt-role-def:{}", ctx.resource_prefix).as_bytes(), + ) + .to_string(); + let role_definition = RoleDefinition { + properties: Some(role_definition_props), + ..Default::default() + }; + let scope = management_role_definition_scope( + role_definition + .properties + .as_ref() + .map(|properties| properties.assignable_scopes.as_slice()) + .unwrap_or_default(), + &azure_cfg.subscription_id, + &resource_group_name, + ); - let role_definition = RoleDefinition { - properties: Some(role_definition_props), - ..Default::default() - }; - let scope = management_role_definition_scope( - role_definition - .properties - .as_ref() - .map(|properties| properties.assignable_scopes.as_slice()) - .unwrap_or_default(), - &azure_cfg.subscription_id, - &resource_group_name, - ); + let created = client + .create_or_update_role_definition( + &scope, + role_definition_uuid.clone(), + &role_definition, + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to create management role definition for stack '{}'", + ctx.resource_prefix + ), + resource_id: Some(config.id.clone()), + })?; - let created = client - .create_or_update_role_definition( - &scope, - role_definition_uuid.clone(), - &role_definition, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create management role definition for stack '{}'", - ctx.resource_prefix - ), - resource_id: Some(config.id.clone()), + let role_id = created.id.ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: "Created role definition missing ID".to_string(), + operation: Some("create_management_role_definition".to_string()), + resource_id: Some(config.id.clone()), + }) })?; - let role_id = created.id.ok_or_else(|| { - AlienError::new(ErrorData::InfrastructureError { - message: "Created role definition missing ID".to_string(), - operation: Some("create_management_role_definition".to_string()), - resource_id: Some(config.id.clone()), - }) - })?; - - info!( - role_definition_id = %role_id, - "Management role definition created" - ); + info!( + role_definition_id = %role_id, + "Management role definition created" + ); + self.role_definition_id = Some(role_id); + } else { + info!("No residual Azure stack-level management custom role required"); + self.role_definition_id = None; + } - self.role_definition_id = Some(role_id); + self.create_remote_storage_role_definitions( + ctx, + &client, + azure_cfg, + &resource_group_name, + &config.id, + ) + .await?; Ok(HandlerAction::Continue { state: CreatingRoleAssignments, @@ -460,13 +376,32 @@ impl AzureRemoteStackManagementController { AzureRoleDefinitionRef::Predefined { role_definition_id } => { role_definition_id.clone() } - AzureRoleDefinitionRef::Custom { .. } => self.role_definition_id.clone().ok_or_else(|| { - AlienError::new(ErrorData::InfrastructureError { - message: "Role definition ID not available for custom management role assignment".to_string(), - operation: Some("create_role_assignments".to_string()), - resource_id: Some(config.id.clone()), - }) - })?, + AzureRoleDefinitionRef::Custom { key } + if binding.permission_set_id == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID => + { + self.resource_role_definition_ids + .get(&resource_role_definition_key(key, &binding.scope)) + .cloned() + .ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: format!( + "Exact-scope role definition is not available for '{}' at '{}'", + binding.permission_set_id, binding.scope + ), + operation: Some("create_role_assignments".to_string()), + resource_id: Some(config.id.clone()), + }) + })? + } + AzureRoleDefinitionRef::Custom { .. } => { + self.role_definition_id.clone().ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: "Role definition ID not available for custom management role assignment".to_string(), + operation: Some("create_role_assignments".to_string()), + resource_id: Some(config.id.clone()), + }) + })? + } }; let assignment_id = Uuid::new_v5( &Uuid::NAMESPACE_OID, @@ -525,6 +460,12 @@ impl AzureRemoteStackManagementController { .await?; } + self.applied_management_grant_fingerprint = + Some(super::desired_management_grant_fingerprint( + ctx, + &self.desired_remote_storage_scopes(ctx)?, + )?); + if self.role_assignment_ids.is_empty() { return Ok(HandlerAction::Continue { state: Ready, @@ -628,6 +569,17 @@ impl AzureRemoteStackManagementController { async fn update_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let config = ctx.desired_resource_config::()?; + if self.setup_managed_resources() { + info!( + config_id = %config.id, + "Skipping runtime mutation of setup-managed Azure identity and grants" + ); + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }); + } + info!(config_id = %config.id, "Reconciling management role assignments and FIC"); let resource_group_name = azure_utils::get_resource_group_name(ctx.state)?; @@ -696,6 +648,8 @@ impl AzureRemoteStackManagementController { } } self.role_definition_id = None; + self.delete_resource_role_definitions(&auth_client, &resource_group_name, &config.id) + .await?; // Update FIC if OIDC config changed let azure_management = ctx.get_azure_management_config()?.ok_or_else(|| { @@ -761,6 +715,18 @@ impl AzureRemoteStackManagementController { ctx: &ResourceControllerContext<'_>, ) -> Result { let config = ctx.desired_resource_config::()?; + + if self.setup_managed_resources() { + info!( + config_id = %config.id, + "Leaving setup-managed Azure identity and grants for setup teardown" + ); + return Ok(HandlerAction::Continue { + state: Deleted, + suggested_delay: None, + }); + } + let azure_cfg = ctx.get_azure_config()?; let client = ctx .service_provider @@ -808,14 +774,13 @@ impl AzureRemoteStackManagementController { ctx: &ResourceControllerContext<'_>, ) -> Result { let config = ctx.desired_resource_config::()?; + let resource_group_name = azure_utils::get_resource_group_name(ctx.state)?; + let azure_cfg = ctx.get_azure_config()?; + let client = ctx + .service_provider + .get_azure_authorization_client(azure_cfg)?; if let Some(role_def_id) = &self.role_definition_id { - let resource_group_name = azure_utils::get_resource_group_name(ctx.state)?; - let azure_cfg = ctx.get_azure_config()?; - let client = ctx - .service_provider - .get_azure_authorization_client(azure_cfg)?; - let scope = role_definition_scope_from_id(role_def_id, &resource_group_name); let role_def_uuid = role_def_id.split('/').last().unwrap_or(role_def_id); @@ -845,6 +810,8 @@ impl AzureRemoteStackManagementController { self.role_definition_id = None; } + self.delete_resource_role_definitions(&client, &resource_group_name, &config.id) + .await?; Ok(HandlerAction::Continue { state: DeletingFederatedCredential, @@ -992,568 +959,19 @@ impl AzureRemoteStackManagementController { None } } -} - -#[cfg(test)] -mod tests { - use super::*; - use alien_core::{PermissionProfile, PermissionSetReference}; - - fn permission_context() -> PermissionContext { - PermissionContext::new() - .with_subscription_id("sub-123".to_string()) - .with_resource_group("rg-123".to_string()) - .with_stack_prefix("e2e-01-azcr".to_string()) - .with_managing_subscription_id("sub-123".to_string()) - .with_managing_resource_group("rg-123".to_string()) - } - - #[test] - fn role_assignment_conflict_parser_extracts_existing_assignment_id() { - let err = AlienError::new(CloudClientErrorData::RemoteResourceConflict { - resource_type: "Resource".to_string(), - resource_name: "roleAssignments/requested".to_string(), - message: "The role assignment already exists. The ID of the conflicting role assignment is 593d47719b195096804b7b96d6e5a5ac.".to_string(), - }); - - let existing_assignment_id = existing_role_assignment_id_from_conflict( - "/subscriptions/sub-123/resourceGroups/rg-123", - &err, - ) - .expect("conflict should include an existing role assignment id"); - - assert_eq!( - existing_assignment_id, - "/subscriptions/sub-123/resourceGroups/rg-123/providers/Microsoft.Authorization/roleAssignments/593d4771-9b19-5096-804b-7b96d6e5a5ac" - ); - } - - #[test] - fn management_role_assignment_key_includes_azure_immutable_fields() { - let prefix = "e2e-03-azcr"; - let principal_id = "principal-a"; - let role_definition_id = "/subscriptions/sub-123/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7"; - let scope = "/subscriptions/sub-123/resourceGroups/rg-123"; - let base_key = - management_role_assignment_key(prefix, principal_id, role_definition_id, scope); - - assert_ne!( - base_key, - management_role_assignment_key(prefix, "principal-b", role_definition_id, scope), - "Azure rejects updating principalId on an existing role assignment ID" - ); - assert_ne!( - base_key, - management_role_assignment_key( - prefix, - principal_id, - "/subscriptions/sub-123/providers/Microsoft.Authorization/roleDefinitions/custom-role", - scope, - ), - "Azure rejects updating roleDefinitionId on an existing role assignment ID" - ); - assert_ne!( - base_key, - management_role_assignment_key( - prefix, - principal_id, - role_definition_id, - "/subscriptions/sub-123", - ), - "Azure rejects updating scope on an existing role assignment ID" - ); - } - - #[test] - fn stack_management_grant_plan_includes_global_heartbeat_reader_grants() { - let profile = PermissionProfile::new().global([ - PermissionSetReference::from_name("worker/provision"), - PermissionSetReference::from_name("storage/provision"), - PermissionSetReference::from_name("artifact-registry/provision"), - PermissionSetReference::from_name("azure-resource-group/heartbeat"), - PermissionSetReference::from_name("service-account/heartbeat"), - ]); - - let grant_plan = - generate_stack_management_grant_plan(&profile, &permission_context()).unwrap(); - - assert!( - grant_plan.custom_roles.iter().any(|role| role - .role_definition - .actions - .iter() - .any(|action| { action == "Microsoft.App/containerApps/write" })), - "worker/provision should still contribute residual Azure management actions" - ); - assert_eq!( - grant_plan - .bindings - .iter() - .filter(|binding| matches!( - binding.role_definition, - AzureRoleDefinitionRef::Custom { .. } - )) - .count(), - 1, - "all residual custom management actions share one combined custom role assignment" - ); - - let reader_bindings: Vec<_> = grant_plan - .bindings - .iter() - .filter(|binding| { - matches!( - &binding.role_definition, - AzureRoleDefinitionRef::Predefined { role_definition_id } - if role_definition_id.ends_with("/acdd72a7-3385-48ef-bd42-f606fba81ae7") - ) - }) - .collect(); - - assert_eq!( - reader_bindings.len(), - 1, - "resource-group and service-account heartbeats should share one deduped Reader assignment" - ); - assert_eq!( - reader_bindings[0].scope, - "/subscriptions/sub-123/resourceGroups/rg-123" - ); - } - - #[test] - fn stack_management_grant_plan_includes_worker_dispatch_command_once() { - let profile = PermissionProfile::new() - .resource( - "api", - [PermissionSetReference::from_name("worker/dispatch-command")], - ) - .resource( - "jobs", - [PermissionSetReference::from_name("worker/dispatch-command")], - ); - - let grant_plan = - generate_stack_management_grant_plan(&profile, &permission_context()).unwrap(); - - assert_eq!( - grant_plan - .bindings - .iter() - .filter(|binding| binding.permission_set_id == "worker/dispatch-command") - .count(), - 1, - "worker dispatch is a stack management transport grant and should be deduped" - ); - } -} - -fn emit_azure_remote_stack_management_heartbeat( - ctx: &ResourceControllerContext<'_>, - controller: &AzureRemoteStackManagementController, -) { - let resource_id = ctx - .desired_resource_config::() - .map(|config| config.id.clone()) - .unwrap_or_else(|_| "remote-stack-management".to_string()); - - ctx.emit_heartbeat(ResourceHeartbeat { - deployment_id: None, - resource_id, - resource_type: RemoteStackManagement::RESOURCE_TYPE, - controller_platform: Platform::Azure, - backend: HeartbeatBackend::Azure, - observed_at: Utc::now(), - data: ResourceHeartbeatData::RemoteStackManagement( - RemoteStackManagementHeartbeatData::AzureManagedIdentity( - AzureRemoteStackManagementHeartbeatData { - status: RemoteStackManagementHeartbeatStatus { - health: ObservedHealth::Healthy, - lifecycle: ProviderLifecycleState::Running, - message: controller.uami_resource_id.as_ref().map(|resource_id| { - format!("Azure management identity '{}' is reachable", resource_id) - }), - stale: false, - partial: false, - collection_issues: vec![], - }, - uami_resource_id: controller.uami_resource_id.clone(), - uami_client_id: controller.uami_client_id.clone(), - uami_principal_id: controller.uami_principal_id.clone(), - tenant_id: controller.tenant_id.clone(), - fic_name: controller.fic_name.clone(), - role_definition_id: controller.role_definition_id.clone(), - role_assignment_ids: controller.role_assignment_ids.clone(), - }, - ), - ), - raw: vec![], - }); -} - -fn existing_vnet_reader_assignment_key( - resource_prefix: &str, - principal_kind: &str, - principal_id: &str, - vnet_resource_id: &str, -) -> String { - format!( - "deployment:azure:existing-vnet-reader:{resource_prefix}:{principal_kind}:{principal_id}:{vnet_resource_id}" - ) -} - -fn existing_azure_vnet_resource_id(ctx: &ResourceControllerContext<'_>) -> Option { - match ctx.deployment_config.stack_settings.network.as_ref()? { - NetworkSettings::ByoVnetAzure { - vnet_resource_id, .. - } => Some(vnet_resource_id.clone()), - _ => None, - } -} - -fn generate_stack_management_grant_plan( - management_profile: &PermissionProfile, - permission_context: &PermissionContext, -) -> Result { - let mut custom_roles = Vec::new(); - let mut bindings = Vec::new(); - let generator = AzureRuntimePermissionsGenerator::new(); - - if let Some(global_refs) = management_profile.0.get("*") { - for permission_set_ref in global_refs { - let Some(permission_set) = - permission_set_ref.resolve(|name| get_permission_set(name).cloned()) - else { - tracing::warn!( - permission_set_id = %permission_set_ref.id(), - "Management permission set not found, skipping" - ); - continue; - }; - if permission_set.platforms.azure.is_none() { - continue; - } - - let grant_plan = generator - .generate_grant_plan(&permission_set, BindingTarget::Stack, permission_context) - .context(ErrorData::InfrastructureError { - message: format!( - "Failed to generate Azure role definition for permission set '{}'", - permission_set.id - ), - operation: Some("generate_management_grant_plan".to_string()), - resource_id: Some("management".to_string()), - })?; - - custom_roles.extend(grant_plan.custom_roles); - bindings.extend(grant_plan.bindings); - } - } - let mut seen_stack_management_refs = BTreeSet::new(); - for permission_set_ref in management_profile - .0 - .iter() - .filter(|(scope, _)| scope.as_str() != "*") - .flat_map(|(_, refs)| refs.iter()) - .filter(|reference| reference.id() == "worker/dispatch-command") - { - let Some(permission_set) = - permission_set_ref.resolve(|name| get_permission_set(name).cloned()) - else { - tracing::warn!( - permission_set_id = %permission_set_ref.id(), - "Management permission set not found, skipping" - ); - continue; - }; - if !seen_stack_management_refs.insert(permission_set.id.clone()) { - continue; + fn needs_update(&self, ctx: &ResourceControllerContext<'_>) -> Result { + if self.setup_managed_resources() { + return Ok(false); } - if permission_set.platforms.azure.is_none() { - continue; - } - - let grant_plan = generator - .generate_grant_plan(&permission_set, BindingTarget::Stack, permission_context) - .context(ErrorData::InfrastructureError { - message: format!( - "Failed to generate Azure role definition for permission set '{}'", - permission_set.id - ), - operation: Some("generate_management_grant_plan".to_string()), - resource_id: Some("management".to_string()), - })?; - custom_roles.extend(grant_plan.custom_roles); - bindings.extend(grant_plan.bindings); + let desired = super::desired_management_grant_fingerprint( + ctx, + &self.desired_remote_storage_scopes(ctx)?, + )?; + Ok(self.applied_management_grant_fingerprint.as_ref() != Some(&desired)) } - - Ok(AzureGrantPlan { - custom_roles, - bindings: dedupe_management_role_bindings(bindings), - }) -} - -fn dedupe_management_role_bindings( - bindings: Vec, -) -> Vec { - let mut seen = BTreeSet::new(); - let mut deduped = Vec::new(); - - for binding in bindings { - let role_key = match &binding.role_definition { - AzureRoleDefinitionRef::Predefined { role_definition_id } => { - format!("predefined:{role_definition_id}") - } - AzureRoleDefinitionRef::Custom { .. } => "combined-custom-management-role".to_string(), - }; - - if seen.insert((binding.scope.clone(), role_key)) { - deduped.push(binding); - } - } - - deduped } -impl AzureRemoteStackManagementController { - /// Generate management role definition properties from /provision permission sets - fn generate_management_role_definition( - &self, - ctx: &ResourceControllerContext<'_>, - ) -> Result> { - let grant_plan = self.generate_management_grant_plan(ctx)?; - - if grant_plan.custom_roles.is_empty() { - return Ok(None); - } - - let mut combined_actions = Vec::new(); - let mut combined_data_actions = Vec::new(); - let mut assignable_scopes = Vec::new(); - - for custom_role in grant_plan.custom_roles { - combined_actions.extend(custom_role.role_definition.actions); - combined_data_actions.extend(custom_role.role_definition.data_actions); - assignable_scopes.extend(custom_role.role_definition.assignable_scopes); - } - - combined_actions.sort(); - combined_actions.dedup(); - combined_data_actions.sort(); - combined_data_actions.dedup(); - assignable_scopes.sort(); - assignable_scopes.dedup(); - - let role_name = format!("{}-management-role", ctx.resource_prefix); - let description = match ctx.deployment_name_for_metadata() { - Some(deployment_name) => format!( - "Management role for {deployment_name}. Resource prefix: {}.", - ctx.resource_prefix - ), - None => format!("Management role. Resource prefix: {}.", ctx.resource_prefix), - }; - - Ok(Some(RoleDefinitionProperties { - role_name: Some(role_name), - description: Some(description), - type_: Some("CustomRole".to_string()), - permissions: vec![Permission { - actions: combined_actions, - not_actions: vec![], - data_actions: combined_data_actions, - not_data_actions: vec![], - }], - assignable_scopes, - ..Default::default() - })) - } - - fn generate_management_grant_plan( - &self, - ctx: &ResourceControllerContext<'_>, - ) -> Result { - let management_permissions = ctx.desired_stack.management(); - let management_profile = management_permissions.profile().ok_or_else(|| { - AlienError::new(ErrorData::InfrastructureError { - message: - "Management permissions not configured. Required for remote stack management." - .to_string(), - operation: Some("generate_management_role_definition".to_string()), - resource_id: Some("management".to_string()), - }) - })?; - - let azure_config = ctx.get_azure_config()?; - let resource_group_name = azure_utils::get_resource_group_name(ctx.state)?; - let mut custom_roles = Vec::new(); - let mut bindings = Vec::new(); - - let permission_context = PermissionContext::new() - .with_subscription_id(azure_config.subscription_id.clone()) - .with_resource_group(resource_group_name.clone()) - .with_stack_prefix(ctx.resource_prefix.to_string()) - .with_managing_subscription_id(azure_config.subscription_id.clone()) - .with_managing_resource_group(resource_group_name.clone()); - let permission_context = match ctx.deployment_name_for_metadata() { - Some(deployment_name) => { - permission_context.with_deployment_name(deployment_name.to_string()) - } - None => permission_context, - }; - - let generator = AzureRuntimePermissionsGenerator::new(); - let grant_plan = - generate_stack_management_grant_plan(management_profile, &permission_context)?; - custom_roles.extend(grant_plan.custom_roles); - bindings.extend(grant_plan.bindings); - - for (resource_id, permission_set_refs) in management_profile - .0 - .iter() - .filter(|(scope, _)| scope.as_str() != "*") - { - let Some(resource_entry) = ctx.desired_stack.resources.get(resource_id) else { - continue; - }; - let Some(cluster) = resource_entry.config.downcast_ref::() else { - continue; - }; - let permission_context = - ResourcePermissionsHelper::azure_kubernetes_cluster_permission_context( - ctx, cluster, - )?; - - for permission_set_ref in permission_set_refs { - let Some(permission_set) = - permission_set_ref.resolve(|name| get_permission_set(name).cloned()) - else { - tracing::warn!( - permission_set_id = %permission_set_ref.id(), - "Management permission set not found, skipping" - ); - continue; - }; - if permission_set.platforms.azure.is_none() { - continue; - } - - let grant_plan = generator - .generate_grant_plan( - &permission_set, - BindingTarget::Resource, - &permission_context, - ) - .context(ErrorData::InfrastructureError { - message: format!( - "Failed to generate Azure resource-scoped role definition for permission set '{}'", - permission_set.id - ), - operation: Some("generate_management_grant_plan".to_string()), - resource_id: Some(resource_id.clone()), - })?; - - custom_roles.extend(grant_plan.custom_roles); - bindings.extend(grant_plan.bindings); - } - } - - Ok(AzureGrantPlan { - custom_roles, - bindings: dedupe_azure_role_bindings(bindings), - }) - } - - async fn create_role_assignment_by_scope( - &mut self, - client: &std::sync::Arc, - assignment_uuid: &str, - principal_id: &str, - role_definition_id: &str, - scope: &str, - description: &str, - config_id: &str, - ) -> Result<()> { - let full_assignment_id = format!( - "{}/providers/Microsoft.Authorization/roleAssignments/{}", - scope, assignment_uuid - ); - - let role_assignment = RoleAssignment { - id: None, - name: None, - type_: None, - properties: Some(RoleAssignmentProperties { - principal_id: principal_id.to_string(), - role_definition_id: role_definition_id.to_string(), - scope: Some(scope.to_string()), - principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, - description: Some(description.to_string()), - condition: None, - condition_version: None, - created_by: None, - created_on: None, - delegated_managed_identity_resource_id: None, - updated_by: None, - updated_on: None, - }), - }; - - let create_result = client - .create_or_update_role_assignment_by_id(full_assignment_id.clone(), &role_assignment) - .await; - - if let Err(err) = create_result { - if let Some(existing_assignment_id) = - existing_role_assignment_id_from_conflict(scope, &err) - { - info!( - assignment_id = %existing_assignment_id, - requested_assignment_id = %full_assignment_id, - principal_id = %principal_id, - role_definition_id = %role_definition_id, - "Role assignment already exists" - ); - self.role_assignment_ids.push(existing_assignment_id); - return Ok(()); - } - - return Err(err.context(ErrorData::CloudPlatformError { - message: format!("Failed to create role assignment for {}", description), - resource_id: Some(config_id.to_string()), - })); - } - - info!( - assignment_id = %full_assignment_id, - principal_id = %principal_id, - "Role assignment created" - ); - - self.role_assignment_ids.push(full_assignment_id); - Ok(()) - } - - #[cfg(feature = "test-utils")] - pub fn mock_ready(prefix: &str) -> Self { - Self { - state: AzureRemoteStackManagementState::Ready, - uami_resource_id: Some(format!( - "/subscriptions/sub-1234/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{}-management-identity", - prefix - )), - uami_client_id: Some("12345678-1234-1234-1234-123456789012".to_string()), - uami_principal_id: Some("87654321-4321-4321-4321-210987654321".to_string()), - tenant_id: Some("tenant-1234".to_string()), - fic_name: Some(format!("{}-management-fic", prefix)), - role_definition_id: Some(format!( - "/subscriptions/sub-1234/providers/Microsoft.Authorization/roleDefinitions/{}-mgmt-role", - prefix - )), - role_assignment_ids: vec![], - role_assignment_wait_until_epoch_secs: None, - _internal_stay_count: None, - } - } -} +#[cfg(test)] +mod ownership_tests; diff --git a/crates/alien-infra/src/remote_stack_management/azure/management_grants.rs b/crates/alien-infra/src/remote_stack_management/azure/management_grants.rs new file mode 100644 index 000000000..0d0e380f5 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/azure/management_grants.rs @@ -0,0 +1,655 @@ +use super::*; + +pub(crate) fn get_management_identity_name(prefix: &str) -> String { + format!("{}-management-identity", prefix) +} + +pub(crate) fn get_fic_name(prefix: &str) -> String { + format!("{}-management-fic", prefix) +} + +pub(crate) fn management_role_definition_scope( + assignable_scopes: &[String], + subscription_id: &str, + resource_group_name: &str, +) -> Scope { + let subscription_scope = format!("/subscriptions/{subscription_id}"); + if assignable_scopes + .iter() + .any(|scope| scope == &subscription_scope) + { + Scope::Subscription + } else { + Scope::ResourceGroup { + resource_group_name: resource_group_name.to_string(), + } + } +} + +pub(crate) fn role_definition_scope_from_id( + role_definition_id: &str, + resource_group_name: &str, +) -> Scope { + if role_definition_id.contains("/resourceGroups/") { + Scope::ResourceGroup { + resource_group_name: resource_group_name.to_string(), + } + } else { + Scope::Subscription + } +} + +pub(crate) fn current_unix_timestamp_secs() -> u64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|duration| duration.as_secs()) + .unwrap_or(0) +} + +pub(crate) fn ensure_wait_deadline(wait_until_epoch_secs: &mut Option, wait_secs: u64) -> u64 { + let now = current_unix_timestamp_secs(); + *wait_until_epoch_secs.get_or_insert_with(|| now.saturating_add(wait_secs)) +} + +pub(crate) fn wait_delay(deadline_epoch_secs: u64) -> Option { + let now = current_unix_timestamp_secs(); + let remaining = deadline_epoch_secs.saturating_sub(now); + + if remaining == 0 { + None + } else { + Some(Duration::from_secs( + remaining.min(AZURE_RBAC_WAIT_POLL_SECS), + )) + } +} + +pub(crate) fn management_role_assignment_key( + resource_prefix: &str, + principal_id: &str, + role_definition_id: &str, + scope: &str, +) -> String { + format!( + "deployment:azure:mgmt-role-assign:{resource_prefix}:uami:{principal_id}:{role_definition_id}:{scope}" + ) +} + +pub(crate) fn resource_role_definition_key(custom_role_key: &str, scope: &str) -> String { + format!("{custom_role_key}:{scope}") +} + +pub(crate) fn existing_role_assignment_id_from_conflict( + scope: &str, + err: &AlienError, +) -> Option { + let CloudClientErrorData::RemoteResourceConflict { message, .. } = err.error.as_ref()? else { + return None; + }; + + let lower_message = message.to_ascii_lowercase(); + if !lower_message.contains("role assignment already exists") + || !lower_message.contains("role assignment") + { + return None; + } + + let normalized = message + .chars() + .map(|ch| { + if ch.is_ascii_hexdigit() || ch == '-' { + ch + } else { + ' ' + } + }) + .collect::(); + + normalized + .split_whitespace() + .rev() + .find_map(|candidate| Uuid::parse_str(candidate).ok()) + .map(|assignment_uuid| { + format!( + "{}/providers/Microsoft.Authorization/roleAssignments/{}", + scope, assignment_uuid + ) + }) +} + +#[cfg(test)] +mod tests { + use super::*; + use alien_core::{PermissionProfile, PermissionSetReference}; + + fn permission_context() -> PermissionContext { + PermissionContext::new() + .with_subscription_id("sub-123".to_string()) + .with_resource_group("rg-123".to_string()) + .with_stack_prefix("e2e-01-azcr".to_string()) + .with_managing_subscription_id("sub-123".to_string()) + .with_managing_resource_group("rg-123".to_string()) + } + + #[test] + fn role_assignment_conflict_conversion_extracts_existing_assignment_id_without_leaking_body() { + const RESPONSE_SECRET: &str = "ROLE_ASSIGNMENT_RESPONSE_SECRET_0123456789"; + let response_body = format!( + r#"{{ + "error": {{ + "code": "RoleAssignmentExists", + "message": "The role assignment already exists. The ID of the conflicting role assignment is 593d47719b195096804b7b96d6e5a5ac. {RESPONSE_SECRET}" + }} + }}"# + ); + let err = alien_azure_clients::azure::common::create_azure_http_error_with_context( + reqwest::StatusCode::CONFLICT, + "CreateRoleAssignment", + "Role Assignment", + "requested", + &response_body, + "https://management.azure.com/roleAssignments/requested", + ); + + let existing_assignment_id = existing_role_assignment_id_from_conflict( + "/subscriptions/sub-123/resourceGroups/rg-123", + &err, + ) + .expect("conflict should include an existing role assignment id"); + + assert_eq!( + existing_assignment_id, + "/subscriptions/sub-123/resourceGroups/rg-123/providers/Microsoft.Authorization/roleAssignments/593d4771-9b19-5096-804b-7b96d6e5a5ac" + ); + assert!(!serde_json::to_string(&err) + .unwrap() + .contains(RESPONSE_SECRET)); + } + + #[test] + fn management_role_assignment_key_includes_azure_immutable_fields() { + let prefix = "e2e-03-azcr"; + let principal_id = "principal-a"; + let role_definition_id = "/subscriptions/sub-123/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7"; + let scope = "/subscriptions/sub-123/resourceGroups/rg-123"; + let base_key = + management_role_assignment_key(prefix, principal_id, role_definition_id, scope); + + assert_ne!( + base_key, + management_role_assignment_key(prefix, "principal-b", role_definition_id, scope), + "Azure rejects updating principalId on an existing role assignment ID" + ); + assert_ne!( + base_key, + management_role_assignment_key( + prefix, + principal_id, + "/subscriptions/sub-123/providers/Microsoft.Authorization/roleDefinitions/custom-role", + scope, + ), + "Azure rejects updating roleDefinitionId on an existing role assignment ID" + ); + assert_ne!( + base_key, + management_role_assignment_key( + prefix, + principal_id, + role_definition_id, + "/subscriptions/sub-123", + ), + "Azure rejects updating scope on an existing role assignment ID" + ); + } + + #[test] + fn stack_management_grant_plan_includes_global_heartbeat_reader_grants() { + let profile = PermissionProfile::new().global([ + PermissionSetReference::from_name("worker/provision"), + PermissionSetReference::from_name("storage/provision"), + PermissionSetReference::from_name("artifact-registry/provision"), + PermissionSetReference::from_name("azure-resource-group/heartbeat"), + PermissionSetReference::from_name("service-account/heartbeat"), + ]); + + let grant_plan = + generate_stack_management_grant_plan(&profile, &permission_context()).unwrap(); + + assert!( + grant_plan.custom_roles.iter().any(|role| role + .role_definition + .actions + .iter() + .any(|action| { action == "Microsoft.App/containerApps/write" })), + "worker/provision should still contribute residual Azure management actions" + ); + assert_eq!( + grant_plan + .bindings + .iter() + .filter(|binding| matches!( + binding.role_definition, + AzureRoleDefinitionRef::Custom { .. } + )) + .count(), + 1, + "all residual custom management actions share one combined custom role assignment" + ); + + let reader_bindings: Vec<_> = grant_plan + .bindings + .iter() + .filter(|binding| { + matches!( + &binding.role_definition, + AzureRoleDefinitionRef::Predefined { role_definition_id } + if role_definition_id.ends_with("/acdd72a7-3385-48ef-bd42-f606fba81ae7") + ) + }) + .collect(); + + assert_eq!( + reader_bindings.len(), + 1, + "resource-group and service-account heartbeats should share one deduped Reader assignment" + ); + assert_eq!( + reader_bindings[0].scope, + "/subscriptions/sub-123/resourceGroups/rg-123" + ); + } + + #[test] + fn stack_management_grant_plan_includes_worker_dispatch_command_once() { + let profile = PermissionProfile::new() + .resource( + "api", + [PermissionSetReference::from_name("worker/dispatch-command")], + ) + .resource( + "jobs", + [PermissionSetReference::from_name("worker/dispatch-command")], + ); + + let grant_plan = + generate_stack_management_grant_plan(&profile, &permission_context()).unwrap(); + + assert_eq!( + grant_plan + .bindings + .iter() + .filter(|binding| binding.permission_set_id == "worker/dispatch-command") + .count(), + 1, + "worker dispatch is a stack management transport grant and should be deduped" + ); + } +} + +pub(crate) fn emit_azure_remote_stack_management_heartbeat( + ctx: &ResourceControllerContext<'_>, + controller: &AzureRemoteStackManagementController, +) { + let resource_id = ctx + .desired_resource_config::() + .map(|config| config.id.clone()) + .unwrap_or_else(|_| "remote-stack-management".to_string()); + + ctx.emit_heartbeat(ResourceHeartbeat { + deployment_id: None, + resource_id, + resource_type: RemoteStackManagement::RESOURCE_TYPE, + controller_platform: Platform::Azure, + backend: HeartbeatBackend::Azure, + observed_at: Utc::now(), + data: ResourceHeartbeatData::RemoteStackManagement( + RemoteStackManagementHeartbeatData::AzureManagedIdentity( + AzureRemoteStackManagementHeartbeatData { + status: RemoteStackManagementHeartbeatStatus { + health: ObservedHealth::Healthy, + lifecycle: ProviderLifecycleState::Running, + message: controller.uami_resource_id.as_ref().map(|resource_id| { + format!("Azure management identity '{}' is reachable", resource_id) + }), + stale: false, + partial: false, + collection_issues: vec![], + }, + uami_resource_id: controller.uami_resource_id.clone(), + uami_client_id: controller.uami_client_id.clone(), + uami_principal_id: controller.uami_principal_id.clone(), + tenant_id: controller.tenant_id.clone(), + fic_name: controller.fic_name.clone(), + role_definition_id: controller.role_definition_id.clone(), + role_assignment_ids: controller.role_assignment_ids.clone(), + }, + ), + ), + raw: vec![], + }); +} + +pub(crate) fn existing_vnet_reader_assignment_key( + resource_prefix: &str, + principal_kind: &str, + principal_id: &str, + vnet_resource_id: &str, +) -> String { + format!( + "deployment:azure:existing-vnet-reader:{resource_prefix}:{principal_kind}:{principal_id}:{vnet_resource_id}" + ) +} + +pub(crate) fn existing_azure_vnet_resource_id( + ctx: &ResourceControllerContext<'_>, +) -> Option { + match ctx.deployment_config.stack_settings.network.as_ref()? { + NetworkSettings::ByoVnetAzure { + vnet_resource_id, .. + } => Some(vnet_resource_id.clone()), + _ => None, + } +} + +pub(crate) fn generate_stack_management_grant_plan( + management_profile: &PermissionProfile, + permission_context: &PermissionContext, +) -> Result { + let mut custom_roles = Vec::new(); + let mut bindings = Vec::new(); + let generator = AzureRuntimePermissionsGenerator::new(); + + if let Some(global_refs) = management_profile.0.get("*") { + for permission_set_ref in global_refs { + let Some(permission_set) = + permission_set_ref.resolve(|name| get_permission_set(name).cloned()) + else { + tracing::warn!( + permission_set_id = %permission_set_ref.id(), + "Management permission set not found, skipping" + ); + continue; + }; + if permission_set.platforms.azure.is_none() { + continue; + } + + let grant_plan = generator + .generate_grant_plan(&permission_set, BindingTarget::Stack, permission_context) + .context(ErrorData::InfrastructureError { + message: format!( + "Failed to generate Azure role definition for permission set '{}'", + permission_set.id + ), + operation: Some("generate_management_grant_plan".to_string()), + resource_id: Some("management".to_string()), + })?; + + custom_roles.extend(grant_plan.custom_roles); + bindings.extend(grant_plan.bindings); + } + } + + let mut seen_stack_management_refs = BTreeSet::new(); + for permission_set_ref in management_profile + .0 + .iter() + .filter(|(scope, _)| scope.as_str() != "*") + .flat_map(|(_, refs)| refs.iter()) + .filter(|reference| reference.id() == "worker/dispatch-command") + { + let Some(permission_set) = + permission_set_ref.resolve(|name| get_permission_set(name).cloned()) + else { + tracing::warn!( + permission_set_id = %permission_set_ref.id(), + "Management permission set not found, skipping" + ); + continue; + }; + if !seen_stack_management_refs.insert(permission_set.id.clone()) { + continue; + } + if permission_set.platforms.azure.is_none() { + continue; + } + + let grant_plan = generator + .generate_grant_plan(&permission_set, BindingTarget::Stack, permission_context) + .context(ErrorData::InfrastructureError { + message: format!( + "Failed to generate Azure role definition for permission set '{}'", + permission_set.id + ), + operation: Some("generate_management_grant_plan".to_string()), + resource_id: Some("management".to_string()), + })?; + + custom_roles.extend(grant_plan.custom_roles); + bindings.extend(grant_plan.bindings); + } + + Ok(AzureGrantPlan { + custom_roles, + bindings: dedupe_management_role_bindings(bindings), + }) +} + +fn dedupe_management_role_bindings( + bindings: Vec, +) -> Vec { + let mut seen = BTreeSet::new(); + let mut deduped = Vec::new(); + + for binding in bindings { + let role_key = match &binding.role_definition { + AzureRoleDefinitionRef::Predefined { role_definition_id } => { + format!("predefined:{role_definition_id}") + } + AzureRoleDefinitionRef::Custom { .. } => "combined-custom-management-role".to_string(), + }; + + if seen.insert((binding.scope.clone(), role_key)) { + deduped.push(binding); + } + } + + deduped +} + +impl AzureRemoteStackManagementController { + pub(super) fn desired_remote_storage_scopes( + &self, + ctx: &ResourceControllerContext<'_>, + ) -> Result> { + desired_remote_storage_scopes(ctx) + } + + pub(super) async fn delete_resource_role_definitions( + &mut self, + client: &std::sync::Arc, + resource_group_name: &str, + config_id: &str, + ) -> Result<()> { + super::super::azure_remote_storage::delete_resource_role_definitions( + self, + client, + resource_group_name, + config_id, + ) + .await + } + + pub(super) async fn create_remote_storage_role_definitions( + &mut self, + ctx: &ResourceControllerContext<'_>, + client: &std::sync::Arc, + azure_cfg: &alien_azure_clients::AzureClientConfig, + resource_group_name: &str, + config_id: &str, + ) -> Result<()> { + super::super::azure_remote_storage::create_remote_storage_role_definitions( + self, + ctx, + client, + azure_cfg, + resource_group_name, + config_id, + ) + .await + } + + /// Generate management role definition properties from /provision permission sets + pub(super) fn generate_management_role_definition( + &self, + ctx: &ResourceControllerContext<'_>, + ) -> Result> { + let grant_plan = self.generate_management_grant_plan(ctx)?; + let custom_roles = custom_roles_for_combined_management_role(grant_plan); + if custom_roles.is_empty() { + return Ok(None); + } + + let mut combined_actions = Vec::new(); + let mut combined_data_actions = Vec::new(); + let mut assignable_scopes = Vec::new(); + + for custom_role in custom_roles { + combined_actions.extend(custom_role.role_definition.actions); + combined_data_actions.extend(custom_role.role_definition.data_actions); + assignable_scopes.extend(custom_role.role_definition.assignable_scopes); + } + + combined_actions.sort(); + combined_actions.dedup(); + combined_data_actions.sort(); + combined_data_actions.dedup(); + assignable_scopes.sort(); + assignable_scopes.dedup(); + + let role_name = format!("{}-management-role", ctx.resource_prefix); + let description = match ctx.deployment_name_for_metadata() { + Some(deployment_name) => format!( + "Management role for {deployment_name}. Resource prefix: {}.", + ctx.resource_prefix + ), + None => format!("Management role. Resource prefix: {}.", ctx.resource_prefix), + }; + + Ok(Some(RoleDefinitionProperties { + role_name: Some(role_name), + description: Some(description), + type_: Some("CustomRole".to_string()), + permissions: vec![Permission { + actions: combined_actions, + not_actions: vec![], + data_actions: combined_data_actions, + not_data_actions: vec![], + }], + assignable_scopes, + ..Default::default() + })) + } + + pub(super) fn generate_management_grant_plan( + &self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + super::super::azure_remote_storage::generate_management_grant_plan(ctx) + } + + pub(super) async fn create_role_assignment_by_scope( + &mut self, + client: &std::sync::Arc, + assignment_uuid: &str, + principal_id: &str, + role_definition_id: &str, + scope: &str, + description: &str, + config_id: &str, + ) -> Result<()> { + let full_assignment_id = format!( + "{}/providers/Microsoft.Authorization/roleAssignments/{}", + scope, assignment_uuid + ); + + let role_assignment = RoleAssignment { + id: None, + name: None, + type_: None, + properties: Some(RoleAssignmentProperties { + principal_id: principal_id.to_string(), + role_definition_id: role_definition_id.to_string(), + scope: Some(scope.to_string()), + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + description: Some(description.to_string()), + condition: None, + condition_version: None, + created_by: None, + created_on: None, + delegated_managed_identity_resource_id: None, + updated_by: None, + updated_on: None, + }), + }; + + let create_result = client + .create_or_update_role_assignment_by_id(full_assignment_id.clone(), &role_assignment) + .await; + + if let Err(err) = create_result { + if let Some(existing_assignment_id) = + existing_role_assignment_id_from_conflict(scope, &err) + { + info!( + assignment_id = %existing_assignment_id, + requested_assignment_id = %full_assignment_id, + principal_id = %principal_id, + role_definition_id = %role_definition_id, + "Role assignment already exists" + ); + self.role_assignment_ids.push(existing_assignment_id); + return Ok(()); + } + + return Err(err.context(ErrorData::CloudPlatformError { + message: format!("Failed to create role assignment for {}", description), + resource_id: Some(config_id.to_string()), + })); + } + + info!( + assignment_id = %full_assignment_id, + principal_id = %principal_id, + "Role assignment created" + ); + + self.role_assignment_ids.push(full_assignment_id); + Ok(()) + } + + #[cfg(feature = "test-utils")] + pub fn mock_ready(prefix: &str) -> Self { + Self { + setup_managed: Some(false), + state: AzureRemoteStackManagementState::Ready, + uami_resource_id: Some(format!( + "/subscriptions/sub-1234/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{}-management-identity", + prefix + )), + uami_client_id: Some("12345678-1234-1234-1234-123456789012".to_string()), + uami_principal_id: Some("87654321-4321-4321-4321-210987654321".to_string()), + tenant_id: Some("tenant-1234".to_string()), + fic_name: Some(format!("{}-management-fic", prefix)), + role_definition_id: Some(format!( + "/subscriptions/sub-1234/providers/Microsoft.Authorization/roleDefinitions/{}-mgmt-role", + prefix + )), + resource_role_definition_ids: HashMap::new(), + role_assignment_ids: vec![], + role_assignment_wait_until_epoch_secs: None, + applied_management_grant_fingerprint: None, + _internal_stay_count: None, + } + } +} diff --git a/crates/alien-infra/src/remote_stack_management/azure/ownership.rs b/crates/alien-infra/src/remote_stack_management/azure/ownership.rs new file mode 100644 index 000000000..ee278df34 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/azure/ownership.rs @@ -0,0 +1,22 @@ +use super::*; + +impl AzureRemoteStackManagementController { + pub(super) fn setup_managed_resources(&self) -> bool { + self.setup_managed.unwrap_or_else(|| { + // Before `setup_managed` existed, Terraform imports entered one + // of these stable states without claiming the setup-owned FIC or + // RBAC identifiers. Direct setup always recorded the FIC name + // before it could reach either state. Failed/deleting direct + // controllers must remain runtime-owned even if their identifiers + // are only partially populated. + matches!( + self.state, + AzureRemoteStackManagementState::Ready + | AzureRemoteStackManagementState::WaitingForRbacPropagation + ) && self.fic_name.is_none() + && self.role_definition_id.is_none() + && self.resource_role_definition_ids.is_empty() + && self.role_assignment_ids.is_empty() + }) + } +} diff --git a/crates/alien-infra/src/remote_stack_management/azure/ownership_tests.rs b/crates/alien-infra/src/remote_stack_management/azure/ownership_tests.rs new file mode 100644 index 000000000..5b4cfd9d7 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/azure/ownership_tests.rs @@ -0,0 +1,51 @@ +use super::*; + +fn legacy_controller( + state: AzureRemoteStackManagementState, +) -> AzureRemoteStackManagementController { + AzureRemoteStackManagementController { + setup_managed: None, + state, + uami_resource_id: Some("/subscriptions/sub/resourceGroups/rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/management".to_string()), + uami_client_id: Some("client".to_string()), + uami_principal_id: Some("principal".to_string()), + tenant_id: Some("tenant".to_string()), + fic_name: None, + role_definition_id: None, + resource_role_definition_ids: HashMap::new(), + role_assignment_ids: Vec::new(), + role_assignment_wait_until_epoch_secs: None, + applied_management_grant_fingerprint: None, + _internal_stay_count: None, + } +} + +#[test] +fn legacy_import_without_owned_ids_remains_setup_managed() { + let controller = legacy_controller(AzureRemoteStackManagementState::Ready); + assert!(controller.setup_managed_resources()); + + let controller = legacy_controller(AzureRemoteStackManagementState::WaitingForRbacPropagation); + assert!(controller.setup_managed_resources()); +} + +#[test] +fn legacy_direct_controller_remains_runtime_owned() { + let mut ready = legacy_controller(AzureRemoteStackManagementState::Ready); + ready.fic_name = Some("stack-management-fic".to_string()); + assert!(!ready.setup_managed_resources()); + + let failed = legacy_controller(AzureRemoteStackManagementState::CreateFailed); + assert!(!failed.setup_managed_resources()); +} + +#[test] +fn explicit_ownership_overrides_legacy_inference() { + let mut controller = legacy_controller(AzureRemoteStackManagementState::Ready); + controller.setup_managed = Some(false); + assert!(!controller.setup_managed_resources()); + + controller.fic_name = Some("stack-management-fic".to_string()); + controller.setup_managed = Some(true); + assert!(controller.setup_managed_resources()); +} diff --git a/crates/alien-infra/src/remote_stack_management/azure_import.rs b/crates/alien-infra/src/remote_stack_management/azure_import.rs index 45884ddec..930ebdb2e 100644 --- a/crates/alien-infra/src/remote_stack_management/azure_import.rs +++ b/crates/alien-infra/src/remote_stack_management/azure_import.rs @@ -37,18 +37,26 @@ impl ResourceImporter for AzureRemoteStackManagementImporter { ) }; let controller = AzureRemoteStackManagementController { + // Terraform owns the UAMI, FIC, custom roles, and exact-scope + // management grants. The runtime observes the imported identity; + // it must not require a broadly privileged bootstrap principal to + // mutate setup-owned RBAC after handoff. + setup_managed: Some(true), state, uami_resource_id: Some(data.identity_id), uami_client_id: Some(data.client_id), uami_principal_id: Some(data.principal_id), tenant_id: Some(data.tenant_id), - // FIC name and role-assignment IDs are reconstructed by the - // heartbeat path from `ctx.management_config` and the FIC template - // emitter. + // Setup owns the FIC and role assignments, so runtime teardown must + // not claim their names or IDs. fic_name: None, role_definition_id: None, + resource_role_definition_ids: Default::default(), role_assignment_ids: Vec::new(), role_assignment_wait_until_epoch_secs: None, + // Setup owns the effective grants. Runtime-created controllers use + // this fingerprint to detect grant changes; imported ones do not. + applied_management_grant_fingerprint: None, _internal_stay_count: None, }; make_imported_state_with_status(controller, ctx, status) diff --git a/crates/alien-infra/src/remote_stack_management/azure_remote_storage.rs b/crates/alien-infra/src/remote_stack_management/azure_remote_storage.rs new file mode 100644 index 000000000..00388b42d --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/azure_remote_storage.rs @@ -0,0 +1,459 @@ +use std::collections::BTreeSet; + +use alien_azure_clients::authorization::Scope; +use alien_azure_clients::models::authorization_role_definitions::{ + Permission, RoleDefinition, RoleDefinitionProperties, +}; +use alien_core::{KubernetesCluster, StorageBinding}; +use alien_error::{AlienError, Context, ContextError}; +use alien_permissions::{ + generators::{ + dedupe_azure_role_bindings, AzureCustomRole, AzureGrantPlan, AzureRoleDefinitionRef, + AzureRuntimePermissionsGenerator, + }, + get_permission_set, BindingTarget, PermissionContext, +}; +use uuid::Uuid; + +use super::azure::{ + generate_stack_management_grant_plan, resource_role_definition_key, + AzureRemoteStackManagementController, +}; +use super::{concrete_storage_binding_value, remote_storage_binding}; +use crate::core::{ResourceControllerContext, ResourcePermissionsHelper}; +use crate::error::{ErrorData, Result}; +use crate::infra_requirements::azure_utils; + +pub(super) const REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID: &str = "storage/remote-data-write"; + +pub(super) fn desired_remote_storage_scopes( + ctx: &ResourceControllerContext<'_>, +) -> Result> { + let mut scopes = generate_management_grant_plan(ctx)? + .bindings + .into_iter() + .filter(|binding| binding.permission_set_id == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID) + .map(|binding| binding.scope) + .collect::>(); + scopes.sort_unstable(); + scopes.dedup(); + Ok(scopes) +} + +pub(super) fn custom_roles_for_combined_management_role( + grant_plan: AzureGrantPlan, +) -> Vec { + let resource_scoped_role_keys: BTreeSet<_> = grant_plan + .bindings + .iter() + .filter(|binding| binding.permission_set_id == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID) + .filter_map(|binding| match &binding.role_definition { + AzureRoleDefinitionRef::Custom { key } => Some(key.clone()), + AzureRoleDefinitionRef::Predefined { .. } => None, + }) + .collect(); + + grant_plan + .custom_roles + .into_iter() + .filter(|custom_role| !resource_scoped_role_keys.contains(&custom_role.key)) + .collect() +} + +pub(super) fn generate_management_grant_plan( + ctx: &ResourceControllerContext<'_>, +) -> Result { + let management_permissions = ctx.desired_stack.management(); + let management_profile = management_permissions.profile().ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: "Management permissions not configured. Required for remote stack management." + .to_string(), + operation: Some("generate_management_role_definition".to_string()), + resource_id: Some("management".to_string()), + }) + })?; + + let azure_config = ctx.get_azure_config()?; + let resource_group_name = azure_utils::get_resource_group_name(ctx.state)?; + let mut custom_roles = Vec::new(); + let mut bindings = Vec::new(); + + let permission_context = PermissionContext::new() + .with_subscription_id(azure_config.subscription_id.clone()) + .with_resource_group(resource_group_name.clone()) + .with_stack_prefix(ctx.resource_prefix.to_string()) + .with_managing_subscription_id(azure_config.subscription_id.clone()) + .with_managing_resource_group(resource_group_name.clone()); + let permission_context = match ctx.deployment_name_for_metadata() { + Some(deployment_name) => { + permission_context.with_deployment_name(deployment_name.to_string()) + } + None => permission_context, + }; + + let generator = AzureRuntimePermissionsGenerator::new(); + let grant_plan = generate_stack_management_grant_plan(management_profile, &permission_context)?; + custom_roles.extend(grant_plan.custom_roles); + bindings.extend(grant_plan.bindings); + + for (resource_id, permission_set_refs) in management_profile + .0 + .iter() + .filter(|(scope, _)| scope.as_str() != "*") + { + let Some(resource_entry) = ctx.desired_stack.resources.get(resource_id) else { + continue; + }; + let remote_storage = resource_entry.is_remote_frozen_storage(); + let permission_context = if let Some(cluster) = + resource_entry.config.downcast_ref::() + { + ResourcePermissionsHelper::azure_kubernetes_cluster_permission_context(ctx, cluster)? + } else if remote_storage { + remote_storage_permission_context(ctx, resource_id)? + } else { + continue; + }; + + for permission_set_ref in permission_set_refs { + if remote_storage && permission_set_ref.id().ends_with("/provision") { + continue; + } + let Some(permission_set) = + permission_set_ref.resolve(|name| get_permission_set(name).cloned()) + else { + tracing::warn!( + permission_set_id = %permission_set_ref.id(), + "Management permission set not found, skipping" + ); + continue; + }; + if permission_set.platforms.azure.is_none() { + continue; + } + + let grant_plan = generator + .generate_grant_plan( + &permission_set, + BindingTarget::Resource, + &permission_context, + ) + .context(ErrorData::InfrastructureError { + message: format!( + "Failed to generate Azure resource-scoped role definition for permission set '{}'", + permission_set.id + ), + operation: Some("generate_management_grant_plan".to_string()), + resource_id: Some(resource_id.clone()), + })?; + + custom_roles.extend(grant_plan.custom_roles); + bindings.extend(grant_plan.bindings); + } + } + + Ok(AzureGrantPlan { + custom_roles, + bindings: dedupe_azure_role_bindings(bindings), + }) +} + +pub(super) async fn delete_resource_role_definitions( + controller: &mut AzureRemoteStackManagementController, + client: &std::sync::Arc, + resource_group_name: &str, + config_id: &str, +) -> Result<()> { + for role_definition_id in controller.resource_role_definition_ids.values() { + let role_definition_uuid = role_definition_id + .split('/') + .next_back() + .unwrap_or(role_definition_id); + let scope = + super::azure::role_definition_scope_from_id(role_definition_id, resource_group_name); + match client + .delete_role_definition(&scope, role_definition_uuid.to_string()) + .await + { + Ok(_) => { + tracing::info!(role_definition_id = %role_definition_id, "Exact-scope management role definition deleted"); + } + Err(error) + if matches!( + &error.error, + Some(alien_client_core::ErrorData::RemoteResourceNotFound { .. }) + ) => + { + tracing::info!(role_definition_id = %role_definition_id, "Exact-scope management role definition already absent"); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!( + "Failed to delete exact-scope management role definition '{}'", + role_definition_id + ), + resource_id: Some(config_id.to_string()), + })); + } + } + } + controller.resource_role_definition_ids.clear(); + Ok(()) +} + +pub(super) async fn create_remote_storage_role_definitions( + controller: &mut AzureRemoteStackManagementController, + ctx: &ResourceControllerContext<'_>, + client: &std::sync::Arc, + azure_cfg: &alien_azure_clients::AzureClientConfig, + resource_group_name: &str, + config_id: &str, +) -> Result<()> { + let grant_plan = generate_management_grant_plan(ctx)?; + controller.resource_role_definition_ids.clear(); + let definition_scope = Scope::ResourceGroup { + resource_group_name: resource_group_name.to_string(), + }; + let assignable_scope = definition_scope.to_resource_id_string(azure_cfg); + + for binding in grant_plan + .bindings + .iter() + .filter(|binding| binding.permission_set_id == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID) + { + let AzureRoleDefinitionRef::Custom { key } = &binding.role_definition else { + continue; + }; + let state_key = resource_role_definition_key(key, &binding.scope); + if controller + .resource_role_definition_ids + .contains_key(&state_key) + { + continue; + } + let custom_role = grant_plan + .custom_roles + .iter() + .find(|custom_role| { + custom_role.key == *key + && custom_role + .role_definition + .assignable_scopes + .contains(&binding.scope) + }) + .ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: format!( + "Missing exact-scope custom role for '{}' at '{}'", + binding.permission_set_id, binding.scope + ), + operation: Some("create_management_role_definition".to_string()), + resource_id: Some(config_id.to_string()), + }) + })?; + let role_definition_uuid = Uuid::new_v5( + &Uuid::NAMESPACE_OID, + format!( + "deployment:azure:mgmt-resource-role-def:{}:{}", + ctx.resource_prefix, state_key + ) + .as_bytes(), + ) + .to_string(); + let short_id = role_definition_uuid.split('-').next().unwrap_or("remote"); + let role = &custom_role.role_definition; + let role_definition = RoleDefinition { + properties: Some(RoleDefinitionProperties { + role_name: Some(format!( + "{}-remote-storage-data-write-{}", + ctx.resource_prefix, short_id + )), + description: Some(role.description.clone()), + type_: Some("CustomRole".to_string()), + permissions: vec![Permission { + actions: role.actions.clone(), + not_actions: role.not_actions.clone(), + data_actions: role.data_actions.clone(), + not_data_actions: role.not_data_actions.clone(), + }], + assignable_scopes: vec![assignable_scope.clone()], + ..Default::default() + }), + ..Default::default() + }; + let created = client + .create_or_update_role_definition( + &definition_scope, + role_definition_uuid, + &role_definition, + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to create exact-scope role definition for remote Storage at '{}'", + binding.scope + ), + resource_id: Some(config_id.to_string()), + })?; + let role_definition_id = created.id.ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: "Created remote Storage role definition missing ID".to_string(), + operation: Some("create_management_role_definition".to_string()), + resource_id: Some(config_id.to_string()), + }) + })?; + controller + .resource_role_definition_ids + .insert(state_key, role_definition_id); + } + + Ok(()) +} + +fn remote_storage_permission_context( + ctx: &ResourceControllerContext<'_>, + resource_id: &str, +) -> Result { + let (storage_account_name, container_name) = match remote_storage_binding(ctx, resource_id)? { + Some(StorageBinding::Blob(binding)) => ( + concrete_storage_binding_value( + binding.account_name, + resource_id, + "accountName", + "Azure Blob Storage", + )?, + concrete_storage_binding_value( + binding.container_name, + resource_id, + "containerName", + "Azure Blob Storage", + )?, + ), + Some(other) => { + return Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' must use a Blob binding on Azure, got {other:?}" + ), + resource_id: Some(resource_id.to_string()), + })); + } + None => ( + azure_utils::get_storage_account_name(ctx.state)?, + format!("{}-{}", ctx.resource_prefix, resource_id) + .to_lowercase() + .replace('_', "-"), + ), + }; + + Ok( + ResourcePermissionsHelper::build_azure_permission_context(ctx, &container_name)? + .with_resource_id(resource_id.to_string()) + .with_storage_account_name(storage_account_name), + ) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn permission_context() -> PermissionContext { + PermissionContext::new() + .with_subscription_id("sub-123".to_string()) + .with_resource_group("rg-123".to_string()) + .with_stack_prefix("e2e-01-azcr".to_string()) + .with_managing_subscription_id("sub-123".to_string()) + .with_managing_resource_group("rg-123".to_string()) + } + + #[test] + fn remote_storage_management_grants_exact_container_data_and_account_delegation_key() { + let context = permission_context() + .with_resource_id("archive".to_string()) + .with_resource_name("setup-owned-archive-container".to_string()) + .with_storage_account_name("setupownedstorageaccount".to_string()); + let permission_set = get_permission_set(REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID) + .expect("remote storage permission set"); + + let grant_plan = AzureRuntimePermissionsGenerator::new() + .generate_grant_plan(permission_set, BindingTarget::Resource, &context) + .unwrap(); + + let account_scope = "/subscriptions/sub-123/resourceGroups/rg-123/providers/Microsoft.Storage/storageAccounts/setupownedstorageaccount"; + let container_scope = format!( + "{account_scope}/blobServices/default/containers/setup-owned-archive-container" + ); + assert_eq!(grant_plan.bindings.len(), 2); + assert!(grant_plan + .bindings + .iter() + .any(|binding| binding.scope == account_scope)); + assert!(grant_plan + .bindings + .iter() + .any(|binding| binding.scope == container_scope)); + + let delegation_role = grant_plan + .custom_roles + .iter() + .find(|role| role.role_definition.assignable_scopes == [account_scope]) + .expect("account-scoped delegation-key role"); + assert_eq!( + delegation_role.role_definition.actions, + ["Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"] + ); + assert!(delegation_role.role_definition.data_actions.is_empty()); + + let data_role = grant_plan + .custom_roles + .iter() + .find(|role| role.role_definition.assignable_scopes == [container_scope.as_str()]) + .expect("container-scoped blob data role"); + assert!(data_role.role_definition.actions.is_empty()); + assert!(data_role + .role_definition + .data_actions + .iter() + .all(|action| action.contains("/containers/blobs/"))); + assert!( + custom_roles_for_combined_management_role(grant_plan).is_empty(), + "remote Storage roles must not be merged into the RG-scoped management role" + ); + } + + #[test] + fn delegation_key_assignment_is_deduped_per_storage_account() { + let permission_set = get_permission_set(REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID) + .expect("remote storage permission set"); + let generator = AzureRuntimePermissionsGenerator::new(); + let mut bindings = Vec::new(); + for container in ["container-a", "container-b"] { + let context = permission_context() + .with_resource_id(container.to_string()) + .with_resource_name(container.to_string()) + .with_storage_account_name("sharedstorageaccount".to_string()); + bindings.extend( + generator + .generate_grant_plan(permission_set, BindingTarget::Resource, &context) + .unwrap() + .bindings, + ); + } + + let bindings = dedupe_azure_role_bindings(bindings); + let account_scope = "/subscriptions/sub-123/resourceGroups/rg-123/providers/Microsoft.Storage/storageAccounts/sharedstorageaccount"; + assert_eq!( + bindings + .iter() + .filter(|binding| binding.scope == account_scope) + .count(), + 1, + ); + assert_eq!( + bindings + .iter() + .filter(|binding| binding.scope.contains("/containers/")) + .count(), + 2, + ); + } +} diff --git a/crates/alien-infra/src/remote_stack_management/gcp.rs b/crates/alien-infra/src/remote_stack_management/gcp.rs index e80276a23..b6e2cbbb3 100644 --- a/crates/alien-infra/src/remote_stack_management/gcp.rs +++ b/crates/alien-infra/src/remote_stack_management/gcp.rs @@ -23,6 +23,8 @@ use alien_permissions::{ }; use chrono::Utc; +mod ownership; + /// Generates the GCP service account ID for RemoteStackManagement. fn get_gcp_management_service_account_id(prefix: &str) -> String { format!("{}-management", prefix) @@ -30,6 +32,12 @@ fn get_gcp_management_service_account_id(prefix: &str) -> String { #[controller] pub struct GcpRemoteStackManagementController { + /// Whether setup owns the service account and its IAM grants. + /// + /// `None` is a legacy checkpoint; ownership is then inferred from the + /// service-account name used by the pre-existing create and import paths. + #[serde(default)] + pub(crate) setup_managed: Option, /// The email of the created management service account. pub(crate) service_account_email: Option, /// The unique ID of the created management service account. @@ -38,6 +46,12 @@ pub struct GcpRemoteStackManagementController { pub(crate) role_bound: bool, /// Whether impersonation permissions have been granted pub(crate) impersonation_granted: bool, + /// Fingerprint of the management grant plan last applied to the service account. + #[serde(default)] + pub(crate) applied_management_grant_fingerprint: Option, + /// Bucket IAM grant scopes tracked by this controller for reconciliation. + #[serde(default)] + pub(crate) remote_storage_bucket_names: Vec, } #[controller] @@ -54,6 +68,10 @@ impl GcpRemoteStackManagementController { &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { + // Persist ownership before the first cloud mutation. A failed direct + // create must never be mistaken for a setup-owned Terraform import. + self.setup_managed = Some(false); + let config = ctx.desired_resource_config::()?; let gcp_config = ctx.get_gcp_config()?; let client = ctx.service_provider.get_gcp_iam_client(gcp_config)?; @@ -150,7 +168,7 @@ impl GcpRemoteStackManagementController { async fn binding_role(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let config = ctx.desired_resource_config::()?; - let service_account_email = self.service_account_email.as_ref().ok_or_else(|| { + let service_account_email = self.service_account_email.clone().ok_or_else(|| { AlienError::new(ErrorData::InfrastructureError { message: "Management service account email not available for role binding" .to_string(), @@ -179,7 +197,7 @@ impl GcpRemoteStackManagementController { let service_account_id = service_account_email .split('@') .next() - .unwrap_or(service_account_email); + .unwrap_or(&service_account_email); let mut permission_context = PermissionContext::new() .with_stack_prefix(ctx.resource_prefix.to_string()) @@ -234,6 +252,9 @@ impl GcpRemoteStackManagementController { } let mut owned_role_prefixes = Self::global_management_role_prefixes(&permission_context); + let remote_storage_grant_plans = + super::gcp_remote_storage::build_grant_plans(ctx, &generator, service_account_id) + .await?; Self::append_resource_scoped_management_bindings( ctx, &generator, @@ -298,7 +319,23 @@ impl GcpRemoteStackManagementController { ); } + let mut previously_owned_buckets = self.remote_storage_bucket_names.clone(); + previously_owned_buckets.extend(super::gcp_remote_storage::observed_bucket_names(ctx)?); + previously_owned_buckets.sort_unstable(); + previously_owned_buckets.dedup(); + let desired_remote_storage_bucket_names = super::gcp_remote_storage::reconcile_grants( + ctx, + &service_account_email, + remote_storage_grant_plans, + &previously_owned_buckets, + ) + .await?; + self.role_bound = true; + self.remote_storage_bucket_names = desired_remote_storage_bucket_names; + self.applied_management_grant_fingerprint = Some( + super::desired_management_grant_fingerprint(ctx, &self.remote_storage_bucket_names)?, + ); Ok(HandlerAction::Continue { state: GrantingImpersonation, @@ -472,6 +509,17 @@ impl GcpRemoteStackManagementController { async fn update_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let config = ctx.desired_resource_config::()?; + if self.setup_managed_resources(ctx.resource_prefix) { + info!( + config_id = %config.id, + "Skipping runtime mutation of setup-managed GCP identity and grants" + ); + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }); + } + info!( config_id = %config.id, "Updating GCP management service account permissions" @@ -491,6 +539,17 @@ impl GcpRemoteStackManagementController { async fn delete_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let config = ctx.desired_resource_config::()?; + if self.setup_managed_resources(ctx.resource_prefix) { + info!( + config_id = %config.id, + "Leaving setup-managed GCP identity and grants for setup teardown" + ); + return Ok(HandlerAction::Continue { + state: Deleted, + suggested_delay: None, + }); + } + // Remove all IAM bindings where our service account is a member if !self.role_bound { info!(config_id = %config.id, "Role was never bound, skipping unbinding"); @@ -621,6 +680,10 @@ impl GcpRemoteStackManagementController { self.service_account_unique_id = None; self.role_bound = false; self.impersonation_granted = false; + // Bucket IAM members are setup-owned and are removed with their + // setup-owned buckets. Deleting this service account revokes its + // effective access without requiring it to administer bucket IAM. + self.remote_storage_bucket_names.clear(); Ok(HandlerAction::Continue { state: Deleted, @@ -652,6 +715,16 @@ impl GcpRemoteStackManagementController { None } } + + fn needs_update(&self, ctx: &ResourceControllerContext<'_>) -> Result { + if self.setup_managed_resources(ctx.resource_prefix) { + return Ok(false); + } + + let desired_bucket_names = super::gcp_remote_storage::desired_bucket_names(ctx)?; + let desired = super::desired_management_grant_fingerprint(ctx, &desired_bucket_names)?; + Ok(self.applied_management_grant_fingerprint.as_ref() != Some(&desired)) + } } fn emit_gcp_remote_stack_management_heartbeat( @@ -841,6 +914,7 @@ impl GcpRemoteStackManagementController { #[cfg(feature = "test-utils")] pub fn mock_ready(service_account_name: &str) -> Self { Self { + setup_managed: Some(false), state: GcpRemoteStackManagementState::Ready, service_account_email: Some(format!( "{}@mock-project.iam.gserviceaccount.com", @@ -849,11 +923,21 @@ impl GcpRemoteStackManagementController { service_account_unique_id: Some("123456789012345678901".to_string()), role_bound: true, impersonation_granted: true, + applied_management_grant_fingerprint: None, + remote_storage_bucket_names: Vec::new(), _internal_stay_count: None, } } } +#[cfg(test)] +#[path = "gcp_teardown_tests.rs"] +mod gcp_teardown_tests; + +#[cfg(test)] +#[path = "gcp/ownership_tests.rs"] +mod ownership_tests; + #[cfg(test)] mod tests { use super::*; diff --git a/crates/alien-infra/src/remote_stack_management/gcp/ownership.rs b/crates/alien-infra/src/remote_stack_management/gcp/ownership.rs new file mode 100644 index 000000000..3d994ea19 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/gcp/ownership.rs @@ -0,0 +1,19 @@ +use super::*; + +impl GcpRemoteStackManagementController { + pub(super) fn setup_managed_resources(&self, resource_prefix: &str) -> bool { + self.setup_managed.unwrap_or_else(|| { + // Before `setup_managed` existed, the direct controller used the + // literal `{prefix}-management` account ID. Terraform imports use + // the capped, hash-suffixed ID from `service_account_id_template`. + // That durable naming difference lets old checkpoints retain their + // original ownership without treating failed direct creates as + // setup-owned resources. + let direct_account_id = get_gcp_management_service_account_id(resource_prefix); + self.service_account_email + .as_deref() + .and_then(|email| email.split_once('@').map(|(account_id, _)| account_id)) + .is_some_and(|account_id| account_id != direct_account_id) + }) + } +} diff --git a/crates/alien-infra/src/remote_stack_management/gcp/ownership_tests.rs b/crates/alien-infra/src/remote_stack_management/gcp/ownership_tests.rs new file mode 100644 index 000000000..b87d5f6cb --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/gcp/ownership_tests.rs @@ -0,0 +1,49 @@ +use super::*; + +fn legacy_controller(service_account_email: Option<&str>) -> GcpRemoteStackManagementController { + GcpRemoteStackManagementController { + setup_managed: None, + state: GcpRemoteStackManagementState::Ready, + service_account_email: service_account_email.map(str::to_string), + service_account_unique_id: Some("1234567890".to_string()), + role_bound: true, + impersonation_granted: true, + applied_management_grant_fingerprint: None, + remote_storage_bucket_names: Vec::new(), + _internal_stay_count: None, + } +} + +#[test] +fn legacy_terraform_import_remains_setup_managed() { + let controller = legacy_controller(Some( + "a-stack-management-12ab34cd@target-project.iam.gserviceaccount.com", + )); + + assert!(controller.setup_managed_resources("stack")); +} + +#[test] +fn legacy_direct_controller_remains_runtime_owned() { + let controller = legacy_controller(Some( + "stack-management@target-project.iam.gserviceaccount.com", + )); + assert!(!controller.setup_managed_resources("stack")); + + let failed_before_identity_checkpoint = legacy_controller(None); + assert!(!failed_before_identity_checkpoint.setup_managed_resources("stack")); +} + +#[test] +fn explicit_ownership_overrides_legacy_name_inference() { + let mut controller = legacy_controller(Some( + "stack-management@target-project.iam.gserviceaccount.com", + )); + controller.setup_managed = Some(true); + assert!(controller.setup_managed_resources("stack")); + + controller.service_account_email = + Some("a-stack-management-12ab34cd@target-project.iam.gserviceaccount.com".to_string()); + controller.setup_managed = Some(false); + assert!(!controller.setup_managed_resources("stack")); +} diff --git a/crates/alien-infra/src/remote_stack_management/gcp_import.rs b/crates/alien-infra/src/remote_stack_management/gcp_import.rs index ce337a83c..9015ac69c 100644 --- a/crates/alien-infra/src/remote_stack_management/gcp_import.rs +++ b/crates/alien-infra/src/remote_stack_management/gcp_import.rs @@ -25,11 +25,16 @@ impl ResourceImporter for GcpRemoteStackManagementImporter { ) -> Result { let _ = data.project_id; let controller = GcpRemoteStackManagementController { + // Terraform owns the service account, custom roles, and exact-scope + // grants. Runtime only observes and impersonates this identity. + setup_managed: Some(true), state: GcpRemoteStackManagementState::Ready, service_account_email: Some(data.service_account_email), service_account_unique_id: Some(data.service_account_unique_id), role_bound: data.management_permissions_applied, impersonation_granted: data.management_permissions_applied, + applied_management_grant_fingerprint: None, + remote_storage_bucket_names: Vec::new(), _internal_stay_count: None, }; make_imported_state(controller, ctx) diff --git a/crates/alien-infra/src/remote_stack_management/gcp_remote_storage.rs b/crates/alien-infra/src/remote_stack_management/gcp_remote_storage.rs new file mode 100644 index 000000000..db53fc965 --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/gcp_remote_storage.rs @@ -0,0 +1,443 @@ +use std::collections::BTreeSet; + +use alien_core::{ResourceLifecycle, Storage, StorageBinding}; +use alien_error::{AlienError, Context, IntoAlienError}; +use alien_gcp_clients::iam::Binding; +#[cfg(test)] +use alien_permissions::PermissionContext; +use alien_permissions::{ + generators::{GcpBindingTargetScope, GcpRuntimePermissionsGenerator}, + get_permission_set, BindingTarget, +}; + +use super::{concrete_storage_binding_value, remote_storage_binding}; +use crate::core::{ResourceControllerContext, ResourcePermissionsHelper}; +use crate::error::{ErrorData, Result}; + +pub(super) struct GrantPlan { + pub(super) bucket_name: String, + bindings: Vec, + owned_role_prefixes: Vec, +} + +pub(super) async fn build_grant_plans( + ctx: &ResourceControllerContext<'_>, + generator: &GcpRuntimePermissionsGenerator, + service_account_id: &str, +) -> Result> { + let Some(management_profile) = ctx.desired_stack.management().profile() else { + return Ok(Vec::new()); + }; + let mut grant_plans = Vec::new(); + + for (resource_id, resource_entry) in &ctx.desired_stack.resources { + if !resource_entry.is_remote_frozen_storage() { + continue; + } + + let bucket_name = remote_storage_bucket_name(ctx, resource_id)?; + let permission_context = + ResourcePermissionsHelper::build_gcp_permission_context(ctx, &bucket_name)? + .with_resource_id(resource_id.clone()) + .with_service_account_name(service_account_id.to_string()); + let mut bucket_bindings = Vec::new(); + + if let Some(permission_set_refs) = management_profile.0.get(resource_id) { + for permission_set_ref in permission_set_refs { + if permission_set_ref.id().ends_with("/provision") { + continue; + } + let Some(permission_set) = + permission_set_ref.resolve(|name| get_permission_set(name).cloned()) + else { + continue; + }; + if permission_set.platforms.gcp.is_none() { + continue; + } + + let grant_plan = generator + .generate_grant_plan( + &permission_set, + BindingTarget::Resource, + &permission_context, + ) + .context(ErrorData::InfrastructureError { + message: format!( + "Failed to generate bucket-scoped IAM grant plan for management permission set '{}'", + permission_set.id + ), + operation: Some("binding_role".to_string()), + resource_id: Some(resource_id.clone()), + })?; + ResourcePermissionsHelper::ensure_all_gcp_custom_roles( + ctx, + &permission_set.id, + &grant_plan, + ) + .await?; + + bucket_bindings.extend( + grant_plan + .bindings_for_target(GcpBindingTargetScope::CurrentResource) + .into_iter() + .map(|binding| Binding { + role: binding.role, + members: binding.members, + condition: binding.condition.map(|condition| { + alien_gcp_clients::iam::Expr { + expression: condition.expression, + title: Some(condition.title), + description: Some(condition.description), + location: None, + } + }), + }), + ); + } + } + + let mut owned_permission_set_ids = vec!["storage/remote-data-write"]; + if let Some(permission_set_refs) = management_profile.0.get(resource_id) { + owned_permission_set_ids.extend( + permission_set_refs + .iter() + .filter(|permission_set_ref| !permission_set_ref.id().ends_with("/provision")) + .map(|permission_set_ref| permission_set_ref.id()), + ); + } + owned_permission_set_ids.sort_unstable(); + owned_permission_set_ids.dedup(); + let owned_role_prefixes = + ResourcePermissionsHelper::gcp_permission_set_custom_role_name_prefixes( + &permission_context, + owned_permission_set_ids, + ); + grant_plans.push(GrantPlan { + bucket_name, + bindings: bucket_bindings, + owned_role_prefixes, + }); + } + + grant_plans.sort_by(|left, right| left.bucket_name.cmp(&right.bucket_name)); + Ok(grant_plans) +} + +pub(super) fn desired_bucket_names(ctx: &ResourceControllerContext<'_>) -> Result> { + let mut bucket_names = ctx + .desired_stack + .resources + .iter() + .filter(|(_, entry)| entry.is_remote_frozen_storage()) + .map(|(resource_id, _)| remote_storage_bucket_name(ctx, resource_id)) + .collect::>>()?; + bucket_names.sort_unstable(); + bucket_names.dedup(); + Ok(bucket_names) +} + +/// Recover remote bucket ownership from synchronized resource state. This is +/// the migration path for controllers serialized before bucket ownership was +/// persisted, and also covers a disable/rebind planned in the same release. +pub(super) fn observed_bucket_names(ctx: &ResourceControllerContext<'_>) -> Result> { + observed_bucket_names_from_state(ctx.state) +} + +fn observed_bucket_names_from_state(state: &alien_core::StackState) -> Result> { + let mut bucket_names = Vec::new(); + for (resource_id, state) in &state.resources { + if state.resource_type != Storage::RESOURCE_TYPE.as_ref() + || state.lifecycle != Some(ResourceLifecycle::Frozen) + { + continue; + } + let Some(value) = state.remote_binding_params.as_ref() else { + continue; + }; + let binding: StorageBinding = serde_json::from_value(value.clone()) + .into_alien_error() + .context(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' has invalid synchronized binding parameters" + ), + resource_id: Some(resource_id.clone()), + })?; + match binding { + StorageBinding::Gcs(binding) => bucket_names.push(concrete_storage_binding_value( + binding.bucket_name, + resource_id, + "bucketName", + "GCP GCS", + )?), + other => { + return Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' must use a GCS binding on GCP, got {other:?}" + ), + resource_id: Some(resource_id.clone()), + })); + } + } + } + bucket_names.sort_unstable(); + bucket_names.dedup(); + Ok(bucket_names) +} + +pub(super) async fn reconcile_grants( + ctx: &ResourceControllerContext<'_>, + service_account_email: &str, + grant_plans: Vec, + previously_owned_buckets: &[String], +) -> Result> { + let desired_buckets = grant_plans + .iter() + .map(|plan| plan.bucket_name.clone()) + .collect::>(); + let retired_buckets = retired_bucket_names(previously_owned_buckets, &desired_buckets); + let gcp_config = ctx.get_gcp_config()?; + let client = ctx.service_provider.get_gcp_gcs_client(gcp_config)?; + let member = format!("serviceAccount:{service_account_email}"); + + for grant_plan in grant_plans { + let mut current_policy = client + .get_bucket_iam_policy(grant_plan.bucket_name.clone()) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to get IAM policy for remote Storage bucket '{}' before binding management permissions", + grant_plan.bucket_name + ), + resource_id: Some(grant_plan.bucket_name.clone()), + })?; + let owned_exact_roles = + ResourcePermissionsHelper::gcp_predefined_role_names(&grant_plan.bindings); + let changed = ResourcePermissionsHelper::reconcile_gcp_project_member_bindings( + &mut current_policy.bindings, + grant_plan.bindings, + &member, + &grant_plan.owned_role_prefixes, + &owned_exact_roles, + ); + if changed { + current_policy.version = Some(3); + client + .set_bucket_iam_policy(grant_plan.bucket_name.clone(), current_policy) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to apply management permissions to remote Storage bucket '{}'", + grant_plan.bucket_name + ), + resource_id: Some(grant_plan.bucket_name), + })?; + } + } + + revoke_grants_with_client(&*client, &member, &retired_buckets).await?; + Ok(desired_buckets) +} + +async fn revoke_grants_with_client( + client: &dyn alien_gcp_clients::GcsApi, + member: &str, + bucket_names: &[String], +) -> Result<()> { + for bucket_name in bucket_names { + let mut current_policy = client + .get_bucket_iam_policy(bucket_name.clone()) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to get IAM policy for retired remote Storage bucket '{bucket_name}' before revoking management access" + ), + resource_id: Some(bucket_name.clone()), + })?; + // The management service account is generated and owned by Alien. Once + // a bucket leaves its owned scope, no binding for that principal should + // survive, including old custom-role hashes and predefined roles. + let changed = ResourcePermissionsHelper::remove_gcp_project_member_bindings( + &mut current_policy.bindings, + member, + None, + None, + ); + if changed { + current_policy.version = Some(3); + client + .set_bucket_iam_policy(bucket_name.clone(), current_policy) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to revoke management access from retired remote Storage bucket '{bucket_name}'" + ), + resource_id: Some(bucket_name.clone()), + })?; + } + } + Ok(()) +} + +fn retired_bucket_names(previous: &[String], desired: &[String]) -> Vec { + let desired = desired.iter().collect::>(); + previous + .iter() + .filter(|bucket| !desired.contains(bucket)) + .cloned() + .collect() +} + +fn remote_storage_bucket_name( + ctx: &ResourceControllerContext<'_>, + resource_id: &str, +) -> Result { + match remote_storage_binding(ctx, resource_id)? { + Some(StorageBinding::Gcs(binding)) => concrete_storage_binding_value( + binding.bucket_name, + resource_id, + "bucketName", + "GCP GCS", + ), + Some(other) => Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' must use a GCS binding on GCP, got {other:?}" + ), + resource_id: Some(resource_id.to_string()), + })), + None => Ok(format!("{}-{}", ctx.resource_prefix, resource_id)), + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alien_core::Resource; + use alien_gcp_clients::gcs::MockGcsApi; + use alien_gcp_clients::iam::IamPolicy; + + #[test] + fn disable_and_rebind_retire_previous_bucket_scopes() { + assert_eq!( + retired_bucket_names(&["bucket-a".to_string()], &[]), + vec!["bucket-a".to_string()], + ); + assert_eq!( + retired_bucket_names(&["bucket-a".to_string()], &["bucket-b".to_string()],), + vec!["bucket-a".to_string()], + ); + assert!( + retired_bucket_names(&["bucket-a".to_string()], &["bucket-a".to_string()],).is_empty() + ); + } + + #[test] + fn legacy_synchronized_binding_recovers_previous_bucket_ownership() { + let mut state = alien_core::StackState::new(alien_core::Platform::Gcp); + state.resources.insert( + "archive".to_string(), + alien_core::StackResourceState::builder() + .resource_type(Storage::RESOURCE_TYPE.as_ref().to_string()) + .status(alien_core::ResourceStatus::Running) + .config(Resource::new(Storage::new("archive".to_string()).build())) + .lifecycle(ResourceLifecycle::Frozen) + .remote_binding_params(serde_json::json!({ + "service": "gcs", + "bucketName": "legacy-bucket-a", + })) + .dependencies(Vec::new()) + .build(), + ); + + assert_eq!( + observed_bucket_names_from_state(&state).unwrap(), + ["legacy-bucket-a".to_string()], + ); + } + + #[test] + fn remote_storage_grant_targets_the_bucket_policy_not_project_iam() { + let context = PermissionContext::new() + .with_stack_prefix("test-stack".to_string()) + .with_project_name("test-project".to_string()) + .with_region("us-central1".to_string()) + .with_resource_id("archive".to_string()) + .with_resource_name("setup-owned-archive-bucket".to_string()) + .with_service_account_name("deployment-management".to_string()); + let permission_set = get_permission_set("storage/remote-data-write").unwrap(); + + let grant_plan = GcpRuntimePermissionsGenerator::new() + .generate_grant_plan(permission_set, BindingTarget::Resource, &context) + .unwrap(); + let bucket_bindings = + grant_plan.bindings_for_target(GcpBindingTargetScope::CurrentResource); + + assert!(grant_plan + .bindings_for_target(GcpBindingTargetScope::Project) + .is_empty()); + assert_eq!(bucket_bindings.len(), 1); + assert_eq!( + bucket_bindings[0].members, + ["serviceAccount:deployment-management@test-project.iam.gserviceaccount.com"] + ); + } + + #[tokio::test] + async fn retired_bucket_revocation_removes_only_the_management_principal() { + let management_member = + "serviceAccount:deployment-management@test-project.iam.gserviceaccount.com"; + let mut client = MockGcsApi::new(); + client + .expect_get_bucket_iam_policy() + .with(mockall::predicate::eq("bucket-a".to_string())) + .times(1) + .returning(move |_| { + Ok(IamPolicy { + version: Some(3), + bindings: vec![ + Binding { + role: "projects/test-project/roles/role_test_remote".to_string(), + members: vec![ + management_member.to_string(), + "user:owner@example.com".to_string(), + ], + condition: None, + }, + Binding { + role: "roles/storage.objectViewer".to_string(), + members: vec!["user:reader@example.com".to_string()], + condition: None, + }, + ], + etag: Some("etag".to_string()), + kind: Some("storage#policy".to_string()), + resource_id: None, + }) + }); + client + .expect_set_bucket_iam_policy() + .withf(move |bucket, policy| { + bucket == "bucket-a" + && policy.bindings.iter().all(|binding| { + !binding + .members + .iter() + .any(|member| member == management_member) + }) + && policy + .bindings + .iter() + .any(|binding| binding.members == ["user:owner@example.com".to_string()]) + && policy + .bindings + .iter() + .any(|binding| binding.members == ["user:reader@example.com".to_string()]) + }) + .times(1) + .returning(|_, policy| Ok(policy)); + + revoke_grants_with_client(&client, management_member, &["bucket-a".to_string()]) + .await + .expect("retired bucket grant must be revoked"); + } +} diff --git a/crates/alien-infra/src/remote_stack_management/gcp_teardown_tests.rs b/crates/alien-infra/src/remote_stack_management/gcp_teardown_tests.rs new file mode 100644 index 000000000..5fe7c19bd --- /dev/null +++ b/crates/alien-infra/src/remote_stack_management/gcp_teardown_tests.rs @@ -0,0 +1,175 @@ +use std::sync::Arc; + +use alien_core::{ + ClientConfig, DeploymentConfig, EnvironmentVariablesSnapshot, GcpClientConfig, GcpCredentials, + GcpImpersonationConfig, Platform, RemoteStackManagement, Resource, Stack, StackSettings, + StackState, +}; +use alien_gcp_clients::iam::MockIamApi; + +use super::*; +use crate::core::{ + HeartbeatCollector, MockPlatformServiceProvider, PlatformServiceProvider, ResourceController, + ResourceRegistry, +}; + +fn impersonated_target_config(service_account_email: &str) -> ClientConfig { + let source = GcpClientConfig { + project_id: "managing-project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "source-token".to_string(), + }, + service_overrides: None, + project_number: Some("123456789012".to_string()), + }; + ClientConfig::Gcp(Box::new(GcpClientConfig { + project_id: "target-project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::ImpersonatedServiceAccount { + source: Box::new(source), + config: GcpImpersonationConfig { + service_account_email: service_account_email.to_string(), + target_project_id: Some("target-project".to_string()), + ..GcpImpersonationConfig::default() + }, + }, + service_overrides: None, + project_number: Some("987654321098".to_string()), + })) +} + +#[tokio::test] +async fn teardown_revokes_bucket_access_by_deleting_identity_not_editing_bucket_iam() { + let service_account_email = "test-stack-management@target-project.iam.gserviceaccount.com"; + let mut iam_client = MockIamApi::new(); + iam_client + .expect_delete_service_account() + .with(mockall::predicate::eq(service_account_email.to_string())) + .times(1) + .returning(|_| Ok(())); + let iam_client = Arc::new(iam_client); + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_gcp_iam_client() + .times(1) + .returning(move |_| Ok(iam_client.clone())); + let provider: Arc = Arc::new(provider); + + let management = RemoteStackManagement::new("management".to_string()).build(); + let desired_config = Resource::new(management); + let state = StackState::new(Platform::Gcp); + let stack = Stack::new("test-stack".to_string()).build(); + let registry = Arc::new(ResourceRegistry::new()); + let deployment_config = DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(EnvironmentVariablesSnapshot { + variables: Vec::new(), + hash: String::new(), + created_at: String::new(), + }) + .external_bindings(Default::default()) + .allow_frozen_changes(false) + .build(); + let ctx = ResourceControllerContext { + desired_config: &desired_config, + platform: Platform::Gcp, + client_config: impersonated_target_config(service_account_email), + state: &state, + resource_prefix: "test-stack", + registry: ®istry, + desired_stack: &stack, + service_provider: &provider, + deployment_config: &deployment_config, + heartbeat_collector: HeartbeatCollector::default(), + }; + let mut controller = GcpRemoteStackManagementController { + setup_managed: Some(false), + state: GcpRemoteStackManagementState::DeleteStart, + service_account_email: Some(service_account_email.to_string()), + service_account_unique_id: Some("1234567890".to_string()), + role_bound: false, + impersonation_granted: true, + applied_management_grant_fingerprint: Some("fingerprint".to_string()), + remote_storage_bucket_names: vec!["setup-owned-bucket".to_string()], + _internal_stay_count: None, + }; + + controller + .delete_start(&ctx) + .await + .expect("delete start must not require bucket IAM administration"); + assert_eq!( + controller.remote_storage_bucket_names, + ["setup-owned-bucket".to_string()], + "bucket grant ownership must remain checkpointed until the identity is deleted" + ); + + controller.state = GcpRemoteStackManagementState::DeletingServiceAccount; + controller + .deleting_service_account(&ctx) + .await + .expect("management identity deletion must revoke effective bucket access"); + assert!(controller.service_account_email.is_none()); + assert!(controller.remote_storage_bucket_names.is_empty()); +} + +#[tokio::test] +async fn setup_managed_lifecycle_never_calls_cloud_apis() { + let service_account_email = + "a-test-stack-managemen-12ab34cd@target-project.iam.gserviceaccount.com"; + let provider: Arc = Arc::new(MockPlatformServiceProvider::new()); + + let management = RemoteStackManagement::new("management".to_string()).build(); + let desired_config = Resource::new(management); + let state = StackState::new(Platform::Gcp); + let stack = Stack::new("test-stack".to_string()).build(); + let registry = Arc::new(ResourceRegistry::new()); + let deployment_config = DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(EnvironmentVariablesSnapshot { + variables: Vec::new(), + hash: String::new(), + created_at: String::new(), + }) + .external_bindings(Default::default()) + .allow_frozen_changes(false) + .build(); + let ctx = ResourceControllerContext { + desired_config: &desired_config, + platform: Platform::Gcp, + client_config: impersonated_target_config(service_account_email), + state: &state, + resource_prefix: "test-stack", + registry: ®istry, + desired_stack: &stack, + service_provider: &provider, + deployment_config: &deployment_config, + heartbeat_collector: HeartbeatCollector::default(), + }; + let mut controller = GcpRemoteStackManagementController { + setup_managed: Some(true), + state: GcpRemoteStackManagementState::UpdateStart, + service_account_email: Some(service_account_email.to_string()), + service_account_unique_id: Some("1234567890".to_string()), + role_bound: true, + impersonation_granted: true, + applied_management_grant_fingerprint: None, + remote_storage_bucket_names: vec!["setup-owned-bucket".to_string()], + _internal_stay_count: None, + }; + + assert!(!controller.needs_update(&ctx).expect("ownership check")); + controller.update_start(&ctx).await.expect("update skip"); + controller.state = GcpRemoteStackManagementState::DeleteStart; + controller.delete_start(&ctx).await.expect("delete skip"); + assert_eq!( + controller.service_account_email.as_deref(), + Some(service_account_email), + "runtime teardown must leave the setup-owned identity intact" + ); + assert_eq!( + controller.remote_storage_bucket_names, + ["setup-owned-bucket".to_string()] + ); +} diff --git a/crates/alien-infra/src/remote_stack_management/mod.rs b/crates/alien-infra/src/remote_stack_management/mod.rs index b0d770f3d..984686a98 100644 --- a/crates/alien-infra/src/remote_stack_management/mod.rs +++ b/crates/alien-infra/src/remote_stack_management/mod.rs @@ -1,5 +1,6 @@ mod aws; pub use aws::*; +mod aws_remote_storage; mod aws_import; pub use aws_import::AwsRemoteStackManagementImporter; @@ -7,15 +8,114 @@ pub use aws_import::AwsRemoteStackManagementImporter; mod gcp; pub use gcp::*; +mod gcp_remote_storage; + mod gcp_import; pub use gcp_import::GcpRemoteStackManagementImporter; mod azure; pub use azure::*; +mod azure_remote_storage; mod azure_import; pub use azure_import::AzureRemoteStackManagementImporter; +use crate::core::ResourceControllerContext; +use crate::error::{ErrorData, Result}; +use alien_core::{BindingValue, StorageBinding}; +use alien_error::{AlienError, Context, IntoAlienError}; +use sha2::{Digest, Sha256}; + +/// Stable fingerprint of every input that changes the management identity's +/// effective grants. Controllers persist this only after a successful cloud +/// reconciliation and use it to schedule later updates for deployment-level +/// changes that are not part of `RemoteStackManagement`'s resource config. +fn desired_management_grant_fingerprint( + ctx: &ResourceControllerContext<'_>, + remote_storage_scopes: &[String], +) -> Result { + let mut remote_storage_scopes = remote_storage_scopes.to_vec(); + remote_storage_scopes.sort_unstable(); + remote_storage_scopes.dedup(); + + let projection = ( + &ctx.desired_stack.permissions.management, + remote_storage_scopes, + ); + let encoded = serde_json::to_vec(&projection).into_alien_error().context( + ErrorData::ResourceStateSerializationFailed { + resource_id: "remote-stack-management".to_string(), + message: "Failed to fingerprint desired management grants".to_string(), + }, + )?; + Ok(format!("{:x}", Sha256::digest(encoded))) +} + +/// Remote Bindings v0 is deliberately limited to Storage created by setup. +/// An external binding only imports a caller-supplied resource reference; it +/// does not prove that Alien setup owns that resource or may grant the +/// deployment management identity access to its contents. +fn ensure_setup_owned_remote_storage( + ctx: &ResourceControllerContext<'_>, + resource_id: &str, +) -> Result<()> { + if ctx.deployment_config.external_bindings.has(resource_id) { + return Err(alien_error::AlienError::new( + ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' cannot use an external binding; remote access is limited to resources created by setup" + ), + resource_id: Some(resource_id.to_string()), + }, + )); + } + Ok(()) +} + +fn remote_storage_binding( + ctx: &ResourceControllerContext<'_>, + resource_id: &str, +) -> Result> { + ensure_setup_owned_remote_storage(ctx, resource_id)?; + + let Some(binding) = ctx + .state + .resource(resource_id) + .and_then(|state| state.remote_binding_params.as_ref()) + else { + return Ok(None); + }; + + serde_json::from_value(binding.clone()) + .into_alien_error() + .context(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' has invalid binding parameters" + ), + resource_id: Some(resource_id.to_string()), + }) + .map(Some) +} + +fn concrete_storage_binding_value( + value: BindingValue, + resource_id: &str, + field_name: &str, + provider: &str, +) -> Result { + match value { + BindingValue::Value(value) => Ok(value), + BindingValue::Expression(_) | BindingValue::SecretRef { .. } => { + Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Remote Storage resource '{resource_id}' requires a concrete {provider} {field_name}" + ), + resource_id: Some(resource_id.to_string()), + })) + } + } +} + #[cfg(feature = "test")] mod test; #[cfg(feature = "test")] diff --git a/crates/alien-infra/src/worker/azure.rs b/crates/alien-infra/src/worker/azure.rs index 5db6119df..4820b11ca 100644 --- a/crates/alien-infra/src/worker/azure.rs +++ b/crates/alien-infra/src/worker/azure.rs @@ -2,10 +2,6 @@ use alien_azure_clients::container_apps::{ ManagedEnvironmentCertificate, ManagedEnvironmentCertificateKeyVaultProperties, ManagedEnvironmentCertificateProperties, }; -use alien_azure_clients::event_grid::{ - EventSubscriptionFilter, EventSubscriptionRequest, EventSubscriptionRequestProperties, - ServiceBusQueueDestination, ServiceBusQueueDestinationProperties, -}; use alien_azure_clients::long_running_operation::{LongRunningOperation, OperationResult}; use alien_azure_clients::models::container_apps::{ Configuration, ConfigurationActiveRevisionsMode, Container, ContainerApp, @@ -31,58 +27,48 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH}; use tracing::{debug, error, info, warn}; use crate::core::EnvironmentVariableBuilder; -use crate::core::{AzurePermissionsHelper, ResourceController, ResourceControllerContext}; +use crate::core::{ResourceController, ResourceControllerContext}; use crate::error::{ErrorData, Result}; use crate::infra_requirements::azure_utils; use crate::infra_requirements::azure_utils::{ get_container_apps_environment_name, get_container_apps_environment_outputs, get_resource_group_name, is_azure_authorization_propagation_error, }; +use crate::worker::azure_dapr_components::{ + delete_owned_legacy_dapr_components, ensure_dapr_component, service_bus_dapr_component, + DaprComponentEnsureOperation, LegacyDaprComponentCleanupStep, TrackedDaprComponentDeleteStep, +}; +use crate::worker::azure_dapr_names_migration::{ + DaprComponentMigrationStep, CURRENT_DAPR_COMPONENT_NAMING_VERSION, +}; +use crate::worker::azure_names::{ + commands_queue_name, get_azure_blob_trigger_dapr_component_name, get_azure_container_app_name, + get_azure_dapr_component_name, get_azure_internal_commands_dapr_component_name, + get_azure_queue_trigger_dapr_component_name, get_azure_storage_event_subscription_name, + get_legacy_azure_blob_trigger_dapr_component_names, + get_legacy_azure_internal_commands_dapr_component_names, + get_legacy_azure_queue_trigger_dapr_component_names, +}; use crate::worker::readiness_probe::{run_readiness_probe, READINESS_PROBE_MAX_ATTEMPTS}; use alien_macros::controller; -/// Generates a deterministic Azure Container Apps name for a worker. -fn get_azure_container_app_name(prefix: &str, name: &str) -> String { - format!("{}-{}", prefix, name) -} - -fn get_azure_storage_event_subscription_name(worker_id: &str, storage_id: &str) -> String { - let mut stem: String = format!("alien{worker_id}{storage_id}") - .chars() - .filter(|ch| ch.is_ascii_alphanumeric()) - .collect(); - stem.truncate(31); - let suffix = uuid::Uuid::new_v5( - &uuid::Uuid::NAMESPACE_OID, - format!("azure-storage-trigger:{worker_id}:{storage_id}").as_bytes(), - ) - .simple() - .to_string(); - format!("{stem}{suffix}") -} - -fn azure_storage_event_types(events: &[String], worker_id: &str) -> Result> { - events - .iter() - .map(|event| { - let event_type = match event.as_str() { - "created" => "Microsoft.Storage.BlobCreated", - "deleted" => "Microsoft.Storage.BlobDeleted", - "tierChanged" => "Microsoft.Storage.BlobTierChanged", - _ => { - return Err(AlienError::new(ErrorData::ResourceConfigInvalid { - message: format!( - "Azure storage trigger event '{}' is not supported; expected one of: created, deleted, tierChanged", - event - ), - resource_id: Some(worker_id.to_string()), - })); - } - }; - Ok(event_type.to_string()) - }) - .collect() -} +#[path = "azure_cleanup.rs"] +mod cleanup; +use cleanup::{AzureCommandsQueueTarget, CommandsQueueTargetPreparation}; +#[path = "azure_command_sender.rs"] +mod command_sender; +use command_sender::{AzureCommandsSenderRoleAssignmentIntent, CommandsSenderReconcileResult}; +#[path = "azure_operations.rs"] +mod operations; +use operations::{ + poll_pending_operation, poll_reconciled_operation, AzureOperationPoll, + AzureOperationPollRequest, AzureStrictOperationPoll, +}; +#[path = "azure_role_assignments.rs"] +mod role_assignments; +#[path = "azure_trigger_targets.rs"] +mod trigger_targets; +use trigger_targets::{StorageDeliveryReconcileResult, StorageTargetPreparation}; #[cfg(not(test))] const AZURE_PRE_CONTAINER_APP_RBAC_WAIT_SECS: u64 = 60; @@ -207,9 +193,7 @@ fn is_azure_container_apps_environment_waking_error(error: &AlienError String { - format!("{}-{}", prefix, worker_id) - .replace('_', "-") - .to_lowercase() + get_azure_container_app_name(prefix, worker_id) } /// Domain information for a worker. @@ -221,21 +205,57 @@ struct DomainInfo { uses_custom_domain: bool, } -enum DaprComponentOperation { +pub(super) enum DaprComponentOperation { Completed, - LongRunning(Duration), + Creating(Duration), + Deleting(Duration), + Pending(Duration), +} + +enum CommandsSetupOperation { + Completed, + Creating(Duration), + Deleting(Duration), Pending(Duration), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] #[serde(rename_all = "camelCase")] pub struct AzureStorageTriggerInfrastructure { + #[serde(default)] + pub storage_id: Option, pub source_resource_id: String, + #[serde(default)] + pub source_container_name: Option, pub event_subscription_name: String, pub service_bus_resource_group: String, pub namespace_name: String, pub queue_name: String, + #[serde(default)] + pub queue_applied: bool, pub receiver_role_assignment_id: Option, + #[serde(default)] + pub delivery_reconciled: bool, +} + +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub(crate) enum AzureStorageTriggerTeardownProgress { + #[default] + EventSubscription, + ReceiverRoleAssignment, + Queue, +} + +enum StorageTriggerTeardownResult { + Complete, + Mutated, +} + +enum CommandsTeardownResult { + Complete, + Mutated, + LongRunning(Duration), } fn emit_azure_container_apps_worker_heartbeat( @@ -403,11 +423,14 @@ pub struct AzureWorkerController { pub(crate) pending_operation_url: Option, /// Retry‑after seconds for the current LRO (populated when Azure returns it). pub(crate) pending_operation_retry_after: Option, - /// Dapr component names for queue triggers (one per queue trigger) + /// Dapr component names for all worker triggers. pub(crate) dapr_components: Vec, /// Event Grid and Service Bus resources created for storage triggers. #[serde(default)] pub(crate) storage_trigger_infrastructure: Vec, + /// Next durable resource deletion within the first tracked storage trigger. + #[serde(default)] + pub(crate) storage_trigger_teardown_progress: AzureStorageTriggerTeardownProgress, // Domain & Certificate /// The fully qualified domain name for the worker @@ -424,15 +447,31 @@ pub struct AzureWorkerController { pub(crate) certificate_issued_at: Option, // Commands infrastructure + /// Service Bus resource group used for commands delivery. + #[serde(default)] + pub(crate) commands_resource_group_name: Option, /// Service Bus namespace name for commands delivery pub(crate) commands_namespace_name: Option, /// Service Bus queue name for commands delivery pub(crate) commands_queue_name: Option, + /// Whether the tracked commands queue has been applied in the current setup cycle. + #[serde(default)] + pub(crate) commands_queue_applied: bool, /// Dapr component name for commands queue pub(crate) commands_dapr_component: Option, + /// Current and historical command Dapr names still requiring ownership-aware teardown. + #[serde(default)] + pub(crate) commands_dapr_component_deletion_candidates: Vec, /// Role assignment ID for Service Bus Data Sender on the deploying identity (for cleanup) pub(crate) commands_sender_role_assignment_id: Option, - /// Role assignment ID for Service Bus Data Receiver on the execution UAMI (for cleanup) + /// Durable direct-manager sender grant planned before its idempotent Azure PUT. + #[serde(default)] + pub(crate) commands_sender_role_assignment_intent: + Option, + /// Whether the exact commands queue has been inspected for controller-owned sender grants. + #[serde(default)] + pub(crate) commands_sender_role_assignment_discovery_complete: bool, + /// Legacy setup-owned receiver cursor. It is ignored and never remotely deleted. pub(crate) commands_receiver_role_assignment_id: Option, /// Deadline for retrying commands infrastructure creation while Azure IAM grants propagate. @@ -456,6 +495,27 @@ pub struct AzureWorkerController { /// Whether the current update flow has already deleted old Dapr trigger components. #[serde(default)] pub(crate) update_dapr_components_deleted: bool, + /// Version of the deterministic Dapr component naming scheme applied to this worker. + #[serde(default)] + pub(crate) dapr_component_naming_version: u8, + /// Trigger component whose asynchronous deletion is currently being polled. + #[serde(default)] + pub(crate) pending_dapr_component_deletion_name: Option, + /// Whether delete has persisted the complete current and historical Dapr cleanup plan. + #[serde(default)] + pub(crate) dapr_component_deletion_candidates_initialized: bool, + /// Whether imported auxiliary command/storage cleanup candidates have been reconstructed. + #[serde(default)] + pub(crate) auxiliary_teardown_candidates_initialized: bool, + /// Whether a commands-only update teardown has reconstructed imported cleanup cursors. + #[serde(default)] + pub(crate) commands_update_teardown_candidates_initialized: bool, + /// Whether trigger update teardown has reconstructed candidates from the previous config. + #[serde(default)] + pub(crate) trigger_update_teardown_candidates_initialized: bool, + /// Whether this update durably invalidated storage delivery verification latches. + #[serde(default)] + pub(crate) storage_delivery_update_reconciliation_initialized: bool, } impl AzureWorkerController { @@ -488,6 +548,36 @@ impl AzureWorkerController { Some(current_unix_timestamp_secs().saturating_add(delay.as_secs())); Some(delay) } + + async fn wait_for_reconciled_dapr_component_deletion( + &mut self, + ctx: &ResourceControllerContext<'_>, + handler_name: &'static str, + failure_message: &'static str, + ) -> Result> { + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteDaprComponent", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name, + failure_message, + }, + ) + .await? + { + AzureOperationPoll::Complete | AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(None) + } + AzureOperationPoll::Pending(delay) => Ok(Some(delay)), + } + } } // ≡ Lifecycle implementation =================================================== @@ -553,18 +643,24 @@ impl AzureWorkerController { .setup_commands_infrastructure(ctx, azure_cfg, func_cfg, &container_app_name) .await { - Ok(DaprComponentOperation::Completed) => { + Ok(CommandsSetupOperation::Completed) => { self.commands_infrastructure_auth_wait_until_epoch_secs = None; self.container_apps_environment_wake_wait_until_epoch_secs = None; self.container_apps_environment_wake_retry_after_epoch_secs = None; } - Ok(DaprComponentOperation::LongRunning(delay)) => { + Ok(CommandsSetupOperation::Creating(delay)) => { return Ok(HandlerAction::Continue { state: WaitingForPreCreateCommandsDaprComponentOperation, suggested_delay: Some(delay), }); } - Ok(DaprComponentOperation::Pending(delay)) => { + Ok(CommandsSetupOperation::Deleting(delay)) => { + return Ok(HandlerAction::Continue { + state: WaitingForPreCreateDaprComponentDeletion, + suggested_delay: Some(delay), + }); + } + Ok(CommandsSetupOperation::Pending(delay)) => { return Ok(HandlerAction::Stay { max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), suggested_delay: Some(delay), @@ -662,12 +758,18 @@ impl AzureWorkerController { match operation { DaprComponentOperation::Completed => {} - DaprComponentOperation::LongRunning(delay) => { + DaprComponentOperation::Creating(delay) => { return Ok(HandlerAction::Continue { state: WaitingForPreCreateCommandsDaprComponentOperation, suggested_delay: Some(delay), }); } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForPreCreateDaprComponentDeletion, + suggested_delay: Some(delay), + }); + } DaprComponentOperation::Pending(delay) => { return Ok(HandlerAction::Stay { max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), @@ -745,6 +847,34 @@ impl AzureWorkerController { } } + #[handler( + state = WaitingForPreCreateDaprComponentDeletion, + on_failure = CreateFailed, + status = ResourceStatus::Provisioning, + )] + async fn waiting_for_pre_create_dapr_component_deletion( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self + .wait_for_reconciled_dapr_component_deletion( + ctx, + "waiting_for_pre_create_dapr_component_deletion", + "Azure ARM operation failed for pre-create Dapr deletion", + ) + .await? + { + None => Ok(HandlerAction::Continue { + state: CreateStart, + suggested_delay: None, + }), + Some(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + #[handler( state = WaitingBeforeContainerAppCreation, on_failure = CreateFailed, @@ -1423,12 +1553,18 @@ impl AzureWorkerController { } }; match operation { - DaprComponentOperation::LongRunning(delay) => { + DaprComponentOperation::Creating(delay) => { return Ok(HandlerAction::Continue { state: WaitingForDaprComponentCreateOperation, suggested_delay: Some(delay), }); } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForLegacyDaprComponentDeletionDuringCreate, + suggested_delay: Some(delay), + }); + } DaprComponentOperation::Pending(delay) => { return Ok(HandlerAction::Stay { max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), @@ -1477,12 +1613,18 @@ impl AzureWorkerController { } }; match operation { - DaprComponentOperation::LongRunning(delay) => { + DaprComponentOperation::Creating(delay) => { return Ok(HandlerAction::Continue { state: WaitingForDaprComponentCreateOperation, suggested_delay: Some(delay), }); } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForLegacyDaprComponentDeletionDuringCreate, + suggested_delay: Some(delay), + }); + } DaprComponentOperation::Pending(delay) => { return Ok(HandlerAction::Stay { max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), @@ -1531,12 +1673,18 @@ impl AzureWorkerController { } }; match operation { - DaprComponentOperation::LongRunning(delay) => { + DaprComponentOperation::Creating(delay) => { return Ok(HandlerAction::Continue { state: WaitingForDaprComponentCreateOperation, suggested_delay: Some(delay), }); } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForLegacyDaprComponentDeletionDuringCreate, + suggested_delay: Some(delay), + }); + } DaprComponentOperation::Pending(delay) => { return Ok(HandlerAction::Stay { max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), @@ -1619,6 +1767,34 @@ impl AzureWorkerController { } } + #[handler( + state = WaitingForLegacyDaprComponentDeletionDuringCreate, + on_failure = CreateFailed, + status = ResourceStatus::Provisioning, + )] + async fn waiting_for_legacy_dapr_component_deletion_during_create( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self + .wait_for_reconciled_dapr_component_deletion( + ctx, + "waiting_for_legacy_dapr_component_deletion_during_create", + "Azure ARM operation failed for legacy Dapr component deletion during create", + ) + .await? + { + None => Ok(HandlerAction::Continue { + state: ConfiguringDaprComponents, + suggested_delay: None, + }), + Some(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + #[handler( state = CreatingCommandsInfrastructure, on_failure = CreateFailed, @@ -1646,280 +1822,91 @@ impl AzureWorkerController { }); } - // Commands infrastructure (queue, Dapr component, role assignments) is now - // pre-created in CreateStart before the Container App, so the Dapr sidecar - // starts with permissions already propagated. Skip if already done. - if self.commands_namespace_name.is_some() { - info!(worker=%func_cfg.id, "Commands infrastructure already created in CreateStart, skipping"); - return Ok(HandlerAction::Continue { - state: ApplyingPermissions, - suggested_delay: None, - }); - } - let azure_config = ctx.get_azure_config()?; - // Dapr components live on the Container Apps Environment, which may be in a - // different resource group than the deployment (shared/external environments). - let env_outputs = get_container_apps_environment_outputs(ctx.state)?; - let env_resource_group_name = env_outputs.resource_group_name.clone(); - let environment_name = env_outputs.environment_name.clone(); - - // Get the Service Bus namespace from the dependent resource - let namespace_ref = ResourceRef::new( - alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, - "default-service-bus-namespace", - ); - let namespace_controller = ctx.require_dependency::(&namespace_ref)?; - let namespace_name = namespace_controller - .namespace_name - .as_ref() - .ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: func_cfg.id.clone(), - dependency_id: namespace_ref.id.clone(), - }) - })? - .clone(); - let service_bus_resource_group = namespace_controller.resource_group_name(ctx)?; - - let container_app_name = self.container_app_name.as_ref().ok_or_else(|| { + let container_app_name = self.container_app_name.clone().ok_or_else(|| { AlienError::new(ErrorData::ResourceControllerConfigError { resource_id: func_cfg.id.clone(), message: "Container app name not set in state".to_string(), }) })?; - - // Create commands queue in the Service Bus namespace - let queue_name = format!("{}-rq", container_app_name); - let mgmt = ctx - .service_provider - .get_azure_service_bus_management_client(azure_config)?; - - info!( - worker=%func_cfg.id, - namespace=%namespace_name, - queue=%queue_name, - "Creating commands Service Bus queue" - ); - - mgmt.create_or_update_queue( - service_bus_resource_group.clone(), - namespace_name.clone(), - queue_name.clone(), - alien_azure_clients::models::queue::SbQueueProperties { - accessed_at: None, - auto_delete_on_idle: None, - count_details: None, - created_at: None, - dead_lettering_on_message_expiration: None, - default_message_time_to_live: None, - duplicate_detection_history_time_window: None, - enable_batched_operations: None, - enable_express: None, - enable_partitioning: None, - forward_dead_lettered_messages_to: None, - forward_to: None, - lock_duration: None, - max_delivery_count: None, - max_message_size_in_kilobytes: None, - max_size_in_megabytes: None, - message_count: None, - requires_duplicate_detection: None, - requires_session: None, - size_in_bytes: None, - status: None, - updated_at: None, - }, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create commands Service Bus queue '{}'", - queue_name - ), - resource_id: Some(func_cfg.id.clone()), - })?; - - // Create Dapr component for commands queue - use alien_azure_clients::models::managed_environments_dapr_components::{ - DaprComponent, DaprComponentProperties, DaprMetadata, - }; - - let ns_fqdn = format!("{}.servicebus.windows.net", namespace_name); - let component_name = format!("servicebus-{}-commands", container_app_name); - - // Use Dapr input binding (not pubsub) because the manager sends directly - // to Service Bus via Azure SDK — this is external-system integration, not - // Dapr-to-Dapr communication. Input bindings auto-deliver messages without - // requiring GET /dapr/subscribe subscriptions. - let mut metadata = vec![ - DaprMetadata { - name: Some("namespaceName".into()), - value: Some(ns_fqdn), - secret_ref: None, - }, - DaprMetadata { - name: Some("queueName".into()), - value: Some(queue_name.clone()), - secret_ref: None, - }, - DaprMetadata { - name: Some("direction".into()), - value: Some("input".into()), - secret_ref: None, - }, - ]; - - // Add client ID for user-assigned managed identity - let service_account_id = format!("{}-sa", func_cfg.get_permissions()); - let service_account_ref = alien_core::ResourceRef::new( - alien_core::ServiceAccount::RESOURCE_TYPE, - service_account_id.to_string(), - ); - if let Ok(sa_state) = ctx - .require_dependency::( - &service_account_ref, - ) + match self + .setup_commands_infrastructure(ctx, azure_config, func_cfg, &container_app_name) + .await { - if let Some(client_id) = &sa_state.identity_client_id { - metadata.push(DaprMetadata { - name: Some("azureClientId".into()), - value: Some(client_id.clone()), - secret_ref: None, - }); + Ok(CommandsSetupOperation::Completed) => Ok(HandlerAction::Continue { + state: ApplyingPermissions, + suggested_delay: None, + }), + Ok(CommandsSetupOperation::Creating(delay)) => Ok(HandlerAction::Continue { + state: WaitingForCommandsDaprComponentOperation, + suggested_delay: Some(delay), + }), + Ok(CommandsSetupOperation::Deleting(delay)) => Ok(HandlerAction::Continue { + state: WaitingForLegacyCommandsDaprComponentDeletionDuringCreate, + suggested_delay: Some(delay), + }), + Ok(CommandsSetupOperation::Pending(delay)) => Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }), + Err(error) if is_azure_authorization_propagation_error(&error) => { + let deadline = ensure_rbac_wait_deadline( + &mut self.commands_infrastructure_auth_wait_until_epoch_secs, + AZURE_COMMANDS_INFRASTRUCTURE_AUTH_WAIT_SECS, + ); + if let Some(delay) = rbac_wait_delay(deadline) { + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); + } + Err(error) + } + Err(error) if is_azure_container_apps_environment_waking_error(&error) => { + let deadline = ensure_rbac_wait_deadline( + &mut self.container_apps_environment_wake_wait_until_epoch_secs, + AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + ); + if let Some(delay) = self.record_container_apps_environment_wake_retry(deadline) { + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); + } + Err(error) } + Err(error) => Err(error), } + } - let dapr_component = DaprComponent { - name: Some(component_name.clone()), - properties: Some(DaprComponentProperties { - component_type: Some("bindings.azure.servicebusqueues".to_string()), - ignore_errors: false, - init_timeout: None, - version: Some("v1".to_string()), - metadata, - scopes: vec![container_app_name.clone()], - secret_store_component: None, - secrets: vec![], - }), - id: None, - system_data: None, - type_: None, - }; - - info!( - worker=%func_cfg.id, - component=%component_name, - "Creating commands Dapr Service Bus component" - ); + #[handler( + state = WaitingForCommandsDaprComponentOperation, + on_failure = CreateFailed, + status = ResourceStatus::Provisioning, + )] + async fn waiting_for_commands_dapr_component_operation( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let func_cfg = ctx.desired_resource_config::()?; + let operation_url = self.pending_operation_url.clone().ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: "No pending operation URL recorded for commands Dapr component" + .to_string(), + operation: Some("waiting_for_commands_dapr_component_operation".to_string()), + resource_id: Some(func_cfg.id.clone()), + }) + })?; - let client = ctx + let azure_cfg = ctx.get_azure_config()?; + let operation_client = ctx .service_provider - .get_azure_container_apps_client(azure_config)?; - - match client - .create_or_update_dapr_component( - &env_resource_group_name, - &environment_name, - &component_name, - &dapr_component, - ) - .await - { - Ok(OperationResult::Completed(_)) => { - self.container_apps_environment_wake_wait_until_epoch_secs = None; - self.container_apps_environment_wake_retry_after_epoch_secs = None; - } - Ok(OperationResult::LongRunning(lro)) => { - self.pending_operation_url = Some(lro.url.clone()); - self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); - return Ok(HandlerAction::Continue { - state: WaitingForCommandsDaprComponentOperation, - suggested_delay: Some(lro.retry_after.unwrap_or(Duration::from_secs(15))), - }); - } - Err(e) => { - let e = e.context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create commands Dapr component '{}'", - component_name - ), - resource_id: Some(func_cfg.id.clone()), - }); - if is_azure_container_apps_environment_waking_error(&e) { - let deadline = ensure_rbac_wait_deadline( - &mut self.container_apps_environment_wake_wait_until_epoch_secs, - AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, - ); - if let Some(delay) = self.record_container_apps_environment_wake_retry(deadline) - { - warn!( - worker=%func_cfg.id, - error=%e, - remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), - "Azure Container Apps Environment is waking; retrying commands Dapr component" - ); - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } - } - return Err(e); - } - } - - self.commands_namespace_name = Some(namespace_name.clone()); - self.commands_queue_name = Some(queue_name); - self.commands_dapr_component = Some(component_name); - - // Verify that command transport permissions are part of the setup-applied - // management profile. Live worker provisioning should not create RBAC grants. - self.assign_commands_sender_role( - ctx, - azure_config, - &service_bus_resource_group, - &namespace_name, - func_cfg, - ) - .await?; - - info!(worker=%func_cfg.id, "Commands Service Bus infrastructure created"); - - Ok(HandlerAction::Continue { - state: ApplyingPermissions, - suggested_delay: None, - }) - } - - #[handler( - state = WaitingForCommandsDaprComponentOperation, - on_failure = CreateFailed, - status = ResourceStatus::Provisioning, - )] - async fn waiting_for_commands_dapr_component_operation( - &mut self, - ctx: &ResourceControllerContext<'_>, - ) -> Result { - let func_cfg = ctx.desired_resource_config::()?; - let operation_url = self.pending_operation_url.clone().ok_or_else(|| { - AlienError::new(ErrorData::InfrastructureError { - message: "No pending operation URL recorded for commands Dapr component" - .to_string(), - operation: Some("waiting_for_commands_dapr_component_operation".to_string()), - resource_id: Some(func_cfg.id.clone()), - }) - })?; - - let azure_cfg = ctx.get_azure_config()?; - let operation_client = ctx - .service_provider - .get_azure_long_running_operation_client(azure_cfg)?; - let lro = LongRunningOperation { - url: operation_url, - retry_after: self.pending_operation_retry_after.map(Duration::from_secs), - location_url: None, - }; + .get_azure_long_running_operation_client(azure_cfg)?; + let lro = LongRunningOperation { + url: operation_url, + retry_after: self.pending_operation_retry_after.map(Duration::from_secs), + location_url: None, + }; let status = operation_client .check_status(&lro, "CreateOrUpdateDaprComponent", &func_cfg.id) @@ -1948,6 +1935,34 @@ impl AzureWorkerController { } } + #[handler( + state = WaitingForLegacyCommandsDaprComponentDeletionDuringCreate, + on_failure = CreateFailed, + status = ResourceStatus::Provisioning, + )] + async fn waiting_for_legacy_commands_dapr_component_deletion_during_create( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self + .wait_for_reconciled_dapr_component_deletion( + ctx, + "waiting_for_legacy_commands_dapr_component_deletion_during_create", + "Azure ARM operation failed for legacy commands Dapr deletion during create", + ) + .await? + { + None => Ok(HandlerAction::Continue { + state: CreatingCommandsInfrastructure, + suggested_delay: None, + }), + Some(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + #[handler( state = RunningReadinessProbe, on_failure = CreateFailed, @@ -2105,6 +2120,108 @@ impl AzureWorkerController { async fn ready(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let azure_cfg = ctx.get_azure_config()?; let func_cfg = ctx.desired_resource_config::()?; + let storage_trigger_count = func_cfg + .triggers + .iter() + .filter(|trigger| matches!(trigger, alien_core::WorkerTrigger::Storage { .. })) + .count(); + let needs_auxiliary_checkpoint = !self.auxiliary_teardown_candidates_initialized + && (storage_trigger_count > 0 + || self.dapr_component_naming_version < CURRENT_DAPR_COMPONENT_NAMING_VERSION); + let needs_storage_delivery_reconciliation = storage_trigger_count + != self.storage_trigger_infrastructure.len() + || self + .storage_trigger_infrastructure + .iter() + .any(|target| !target.delivery_reconciled || target.storage_id.is_none()); + if needs_auxiliary_checkpoint || needs_storage_delivery_reconciliation { + let container_app_name = self.container_app_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: func_cfg.id.clone(), + message: "Container app name not set in state".to_string(), + }) + })?; + if needs_auxiliary_checkpoint { + self.initialize_auxiliary_teardown_candidates(ctx, func_cfg, &container_app_name) + .await?; + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }); + } + for trigger in &func_cfg.triggers { + let alien_core::WorkerTrigger::Storage { storage, events } = trigger else { + continue; + }; + let desired = self + .desired_storage_trigger_target(ctx, func_cfg, &container_app_name, storage) + .await?; + if matches!( + self.prepare_storage_trigger_target(ctx, &desired.infrastructure) + .await?, + StorageTargetPreparation::Pending + ) { + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }); + } + match self + .ensure_storage_delivery_infrastructure( + ctx, func_cfg, storage, events, &desired, + ) + .await? + { + StorageDeliveryReconcileResult::Complete => {} + StorageDeliveryReconcileResult::Pending(delay) => { + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: Some(delay), + }); + } + } + } + } + if self.dapr_component_naming_version < CURRENT_DAPR_COMPONENT_NAMING_VERSION { + info!( + worker=%func_cfg.id, + from_version=self.dapr_component_naming_version, + to_version=CURRENT_DAPR_COMPONENT_NAMING_VERSION, + "Migrating Dapr component names" + ); + return Ok(HandlerAction::Continue { + state: MigratingDaprComponentNames, + suggested_delay: None, + }); + } + if func_cfg.commands_enabled + && (self.commands_resource_group_name.is_none() + || self.commands_namespace_name.is_none() + || self.commands_queue_name.is_none()) + { + let container_app_name = self.container_app_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: func_cfg.id.clone(), + message: "Container app name not set in state".to_string(), + }) + })?; + self.initialize_commands_teardown_candidates(ctx, func_cfg, &container_app_name) + .await?; + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }); + } + if !matches!( + self.reconcile_commands_sender_role_assignment(ctx, func_cfg) + .await?, + CommandsSenderReconcileResult::Complete + ) { + return Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: Some(Duration::from_secs(1)), + }); + } let container_app_name = self.container_app_name.as_ref().ok_or_else(|| { AlienError::new(ErrorData::ResourceControllerConfigError { resource_id: func_cfg.id.clone(), @@ -2184,6 +2301,93 @@ impl AzureWorkerController { }) } + #[handler( + state = MigratingDaprComponentNames, + on_failure = RefreshFailed, + status = ResourceStatus::Updating, + )] + async fn migrating_dapr_component_names( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self.migrate_dapr_component_names(ctx).await? { + DaprComponentMigrationStep::Complete => Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }), + DaprComponentMigrationStep::Mutated => Ok(HandlerAction::Continue { + state: MigratingDaprComponentNames, + suggested_delay: None, + }), + DaprComponentMigrationStep::LongRunning { + operation, + deleted_component, + } => { + let delay = operation.retry_after.unwrap_or(Duration::from_secs(15)); + self.pending_operation_url = Some(operation.url); + self.pending_operation_retry_after = operation + .retry_after + .map(|retry_after| retry_after.as_secs()); + self.pending_dapr_component_deletion_name = deleted_component; + Ok(HandlerAction::Continue { + state: WaitingForDaprComponentNameMigrationOperation, + suggested_delay: Some(delay), + }) + } + } + } + + #[handler( + state = WaitingForDaprComponentNameMigrationOperation, + on_failure = RefreshFailed, + status = ResourceStatus::Updating, + )] + async fn waiting_for_dapr_component_name_migration_operation( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "MigrateDaprComponent", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name: "waiting_for_dapr_component_name_migration_operation", + failure_message: "Azure ARM operation failed during Dapr name migration", + // A missing operation URL is not proof that either a create or + // delete finished. Re-enter migration and let ownership GETs + // plus idempotent ensure/delete determine the remote state. + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.complete_pending_dapr_component_deletion(); + Ok(HandlerAction::Continue { + state: MigratingDaprComponentNames, + suggested_delay: None, + }) + } + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: MigratingDaprComponentNames, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + // ─────────────── UPDATE FLOW ────────────────────────────── #[flow_entry(Update, from = [Ready, RefreshFailed])] @@ -2324,25 +2528,54 @@ impl AzureWorkerController { )] async fn update_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let func_cfg = ctx.desired_resource_config::()?; - let previous_cfg = ctx.previous_resource_config::()?; self.ready_rbac_wait_until_epoch_secs = None; self.update_dapr_components_deleted = false; - if func_cfg == previous_cfg { - self.update_rbac_wait_required = false; - return Ok(HandlerAction::Continue { - state: UpdateRunningReadinessProbe, - suggested_delay: None, - }); - } + self.commands_update_teardown_candidates_initialized = false; + self.trigger_update_teardown_candidates_initialized = false; + self.commands_sender_role_assignment_discovery_complete = false; + self.commands_queue_applied = false; let azure_cfg = ctx.get_azure_config()?; - let container_app_name = self.container_app_name.as_ref().ok_or_else(|| { + let container_app_name = self.container_app_name.clone().ok_or_else(|| { AlienError::new(ErrorData::InfrastructureError { message: "container_app_name missing prior to update_start".to_string(), operation: Some("update_start".to_string()), resource_id: Some(func_cfg.id.clone()), }) })?; + if !self.storage_delivery_update_reconciliation_initialized { + let mut desired_storage_targets = Vec::new(); + for trigger in &func_cfg.triggers { + let alien_core::WorkerTrigger::Storage { storage, .. } = trigger else { + continue; + }; + desired_storage_targets.push( + self.desired_storage_trigger_target( + ctx, + func_cfg, + &container_app_name, + storage, + ) + .await? + .infrastructure, + ); + } + for desired in desired_storage_targets { + if let Some(tracked) = self + .storage_trigger_infrastructure + .iter_mut() + .find(|tracked| tracked.matches_target(&desired)) + { + tracked.queue_applied = false; + tracked.delivery_reconciled = false; + } + } + self.storage_delivery_update_reconciliation_initialized = true; + return Ok(HandlerAction::Continue { + state: UpdateStart, + suggested_delay: None, + }); + } let resource_group_name = get_resource_group_name(ctx.state)?; let environment_name = get_container_apps_environment_name(ctx.state)?; let client = ctx @@ -2355,7 +2588,7 @@ impl AzureWorkerController { .build_container_app( func_cfg, &environment_name, - container_app_name, + &container_app_name, azure_cfg, ctx, ) @@ -2367,7 +2600,7 @@ impl AzureWorkerController { // Issue UPDATE let op_result = client - .update_container_app(&resource_group_name, container_app_name, &desired_app) + .update_container_app(&resource_group_name, &container_app_name, &desired_app) .await .context(ErrorData::CloudPlatformError { message: "Failed to initiate container app update".to_string(), @@ -2404,54 +2637,41 @@ impl AzureWorkerController { &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { - let operation_url = match &self.pending_operation_url { - Some(u) => u.clone(), - None => { - return Err(AlienError::new(ErrorData::InfrastructureError { - message: "No pending operation URL recorded in WaitingForUpdateOperation" - .to_string(), - operation: Some("waiting_for_update_operation".to_string()), - resource_id: Some(ctx.desired_resource_config::()?.id.clone()), - })); + let worker = ctx.desired_resource_config::()?; + let container_app_name = self.container_app_name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: "Container app name not set while polling update".to_string(), + }) + })?; + match poll_pending_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "UpdateContainerApp", + operation_target: container_app_name, + resource_id: &worker.id, + handler_name: "waiting_for_update_operation", + failure_message: "Azure ARM operation failed for container app update", + }, + ) + .await? + { + AzureStrictOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: UpdatingContainerApp, + suggested_delay: None, + }) } - }; - - let azure_cfg = ctx.get_azure_config()?; - let container_app_name = self.container_app_name.as_ref().unwrap(); - let operation_client = ctx - .service_provider - .get_azure_long_running_operation_client(azure_cfg)?; - - let lro = LongRunningOperation { - url: operation_url, - retry_after: self.pending_operation_retry_after.map(Duration::from_secs), - location_url: None, - }; - - let op_status = operation_client - .check_status(&lro, "UpdateContainerApp", container_app_name) - .await - .context(ErrorData::CloudPlatformError { - message: "Azure ARM operation failed for container app update".to_string(), - resource_id: Some(ctx.desired_resource_config::()?.id.clone()), - })?; - - if op_status.is_some() { - Ok(HandlerAction::Continue { - state: UpdatingContainerApp, - suggested_delay: None, - }) - } else { - let delay = self - .pending_operation_retry_after - .map(Duration::from_secs) - .unwrap_or(Duration::from_secs(15)); - Ok(HandlerAction::Stay { - max_times: Some(100), - suggested_delay: Some(delay), - }) - } - } + AzureStrictOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } #[handler( state = UpdatingContainerApp, @@ -2553,189 +2773,323 @@ impl AzureWorkerController { }) })?; - // Check if triggers have changed - let triggers_changed = current_config.triggers != previous_config.triggers; + let permissions_changed = + current_config.get_permissions() != previous_config.get_permissions(); + let commands_changed = current_config.commands_enabled != previous_config.commands_enabled; + if current_config.commands_enabled { + let azure_config = ctx.get_azure_config()?; + match self + .setup_commands_infrastructure( + ctx, + azure_config, + current_config, + &container_app_name, + ) + .await? + { + CommandsSetupOperation::Completed => { + self.commands_update_teardown_candidates_initialized = false; + } + CommandsSetupOperation::Creating(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForDaprComponentUpdateOperation, + suggested_delay: Some(delay), + }); + } + CommandsSetupOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: UpdateWaitingForCommandsDaprComponentDeletionForSetup, + suggested_delay: Some(delay), + }); + } + CommandsSetupOperation::Pending(delay) => { + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); + } + } + } else if !self.commands_update_teardown_candidates_initialized + && (commands_changed + || self.commands_dapr_component.is_some() + || self.commands_sender_role_assignment_id.is_some() + || self.commands_sender_role_assignment_intent.is_some() + || self.commands_resource_group_name.is_some() + || self.commands_namespace_name.is_some() + || self.commands_queue_name.is_some()) + { + self.initialize_commands_teardown_candidates(ctx, previous_config, &container_app_name) + .await?; + self.commands_update_teardown_candidates_initialized = true; + return Ok(HandlerAction::Continue { + state: UpdateDeletingCommandsInfrastructure, + suggested_delay: None, + }); + } + + let storage_targets_changed = self + .storage_trigger_targets_changed(ctx, current_config, &container_app_name) + .await?; + let triggers_changed = current_config.triggers != previous_config.triggers + || permissions_changed + || storage_targets_changed; if triggers_changed { info!(worker=%current_config.id, "Worker triggers changed, updating Dapr components"); if !self.update_dapr_components_deleted { + if !self.trigger_update_teardown_candidates_initialized { + self.initialize_storage_trigger_teardown_candidates( + ctx, + previous_config, + &container_app_name, + ) + .await?; + self.initialize_trigger_update_teardown_candidates( + previous_config, + &container_app_name, + ); + self.trigger_update_teardown_candidates_initialized = true; + return Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }); + } + // Trigger components are keyed by trigger shape. Delete the previous // set once, then recreate desired components across possible ARM LROs. - self.delete_storage_trigger_infrastructure(ctx).await?; - self.delete_all_dapr_components(ctx).await?; - self.update_dapr_components_deleted = true; + if matches!( + self.delete_storage_trigger_infrastructure(ctx).await?, + StorageTriggerTeardownResult::Mutated + ) { + return Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }); + } + match self.delete_all_dapr_components(ctx).await? { + TrackedDaprComponentDeleteStep::Complete => { + self.update_dapr_components_deleted = true; + } + TrackedDaprComponentDeleteStep::Mutated => { + return Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }); + } + TrackedDaprComponentDeleteStep::LongRunning { + operation, + component_name, + } => { + let delay = operation.retry_after.unwrap_or(Duration::from_secs(15)); + self.pending_operation_url = Some(operation.url); + self.pending_operation_retry_after = operation + .retry_after + .map(|retry_after| retry_after.as_secs()); + self.pending_dapr_component_deletion_name = Some(component_name); + return Ok(HandlerAction::Continue { + state: WaitingForDaprComponentDeletionForUpdate, + suggested_delay: Some(delay), + }); + } + } } + } - // Recreate components for ALL triggers - let mut cron_index = 0usize; - for trigger in ¤t_config.triggers { - match trigger { - alien_core::WorkerTrigger::Queue { queue } => { - let operation = match self - .create_dapr_service_bus_component( - ctx, - &container_app_name, - ¤t_config, - queue, - ) - .await - { - Ok(operation) => operation, - Err(e) => { - if is_azure_container_apps_environment_waking_error(&e) { - let deadline = ensure_rbac_wait_deadline( - &mut self - .container_apps_environment_wake_wait_until_epoch_secs, - AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + // Reconcile components for all triggers. This is intentionally + // idempotent so dependency-only changes update Dapr metadata even + // when the Worker config itself is unchanged. + let mut cron_index = 0usize; + for trigger in ¤t_config.triggers { + match trigger { + alien_core::WorkerTrigger::Queue { queue } => { + let operation = match self + .create_dapr_service_bus_component( + ctx, + &container_app_name, + ¤t_config, + queue, + ) + .await + { + Ok(operation) => operation, + Err(e) => { + if is_azure_container_apps_environment_waking_error(&e) { + let deadline = ensure_rbac_wait_deadline( + &mut self.container_apps_environment_wake_wait_until_epoch_secs, + AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + ); + if let Some(delay) = + self.record_container_apps_environment_wake_retry(deadline) + { + warn!( + worker=%current_config.id, + error=%e, + remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), + "Azure Container Apps Environment is waking; retrying Dapr component update" ); - if let Some(delay) = - self.record_container_apps_environment_wake_retry(deadline) - { - warn!( - worker=%current_config.id, - error=%e, - remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), - "Azure Container Apps Environment is waking; retrying Dapr component update" - ); - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); } - return Err(e); - } - }; - match operation { - DaprComponentOperation::LongRunning(delay) => { - return Ok(HandlerAction::Continue { - state: WaitingForDaprComponentUpdateOperation, - suggested_delay: Some(delay), - }); } - DaprComponentOperation::Pending(delay) => { - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } - DaprComponentOperation::Completed => {} + return Err(e); + } + }; + match operation { + DaprComponentOperation::Creating(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForDaprComponentUpdateOperation, + suggested_delay: Some(delay), + }); + } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: UpdateWaitingForLegacyDaprComponentDeletion, + suggested_delay: Some(delay), + }); } + DaprComponentOperation::Pending(delay) => { + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); + } + DaprComponentOperation::Completed => {} } - alien_core::WorkerTrigger::Storage { storage, events } => { - let operation = match self - .create_azure_storage_trigger( - ctx, - &container_app_name, - ¤t_config, - storage, - events, - ) - .await - { - Ok(operation) => operation, - Err(e) => { - if is_azure_container_apps_environment_waking_error(&e) { - let deadline = ensure_rbac_wait_deadline( - &mut self - .container_apps_environment_wake_wait_until_epoch_secs, - AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + } + alien_core::WorkerTrigger::Storage { storage, events } => { + let operation = match self + .create_azure_storage_trigger( + ctx, + &container_app_name, + ¤t_config, + storage, + events, + ) + .await + { + Ok(operation) => operation, + Err(e) => { + if is_azure_container_apps_environment_waking_error(&e) { + let deadline = ensure_rbac_wait_deadline( + &mut self.container_apps_environment_wake_wait_until_epoch_secs, + AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + ); + if let Some(delay) = + self.record_container_apps_environment_wake_retry(deadline) + { + warn!( + worker=%current_config.id, + error=%e, + remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), + "Azure Container Apps Environment is waking; retrying Dapr component update" ); - if let Some(delay) = - self.record_container_apps_environment_wake_retry(deadline) - { - warn!( - worker=%current_config.id, - error=%e, - remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), - "Azure Container Apps Environment is waking; retrying Dapr component update" - ); - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); } - return Err(e); - } - }; - match operation { - DaprComponentOperation::LongRunning(delay) => { - return Ok(HandlerAction::Continue { - state: WaitingForDaprComponentUpdateOperation, - suggested_delay: Some(delay), - }); } - DaprComponentOperation::Pending(delay) => { - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } - DaprComponentOperation::Completed => {} + return Err(e); + } + }; + match operation { + DaprComponentOperation::Creating(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForDaprComponentUpdateOperation, + suggested_delay: Some(delay), + }); } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: UpdateWaitingForLegacyDaprComponentDeletion, + suggested_delay: Some(delay), + }); + } + DaprComponentOperation::Pending(delay) => { + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); + } + DaprComponentOperation::Completed => {} } - alien_core::WorkerTrigger::Schedule { cron } => { - let operation = match self - .create_dapr_cron_component( - ctx, - &container_app_name, - ¤t_config, - cron, - cron_index, - ) - .await - { - Ok(operation) => operation, - Err(e) => { - if is_azure_container_apps_environment_waking_error(&e) { - let deadline = ensure_rbac_wait_deadline( - &mut self - .container_apps_environment_wake_wait_until_epoch_secs, - AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + } + alien_core::WorkerTrigger::Schedule { cron } => { + let operation = match self + .create_dapr_cron_component( + ctx, + &container_app_name, + ¤t_config, + cron, + cron_index, + ) + .await + { + Ok(operation) => operation, + Err(e) => { + if is_azure_container_apps_environment_waking_error(&e) { + let deadline = ensure_rbac_wait_deadline( + &mut self.container_apps_environment_wake_wait_until_epoch_secs, + AZURE_CONTAINER_APPS_ENVIRONMENT_WAKE_WAIT_SECS, + ); + if let Some(delay) = + self.record_container_apps_environment_wake_retry(deadline) + { + warn!( + worker=%current_config.id, + error=%e, + remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), + "Azure Container Apps Environment is waking; retrying Dapr component update" ); - if let Some(delay) = - self.record_container_apps_environment_wake_retry(deadline) - { - warn!( - worker=%current_config.id, - error=%e, - remaining_secs=deadline.saturating_sub(current_unix_timestamp_secs()), - "Azure Container Apps Environment is waking; retrying Dapr component update" - ); - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); } - return Err(e); - } - }; - match operation { - DaprComponentOperation::LongRunning(delay) => { - return Ok(HandlerAction::Continue { - state: WaitingForDaprComponentUpdateOperation, - suggested_delay: Some(delay), - }); } - DaprComponentOperation::Pending(delay) => { - return Ok(HandlerAction::Stay { - max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), - suggested_delay: Some(delay), - }); - } - DaprComponentOperation::Completed => {} + return Err(e); + } + }; + match operation { + DaprComponentOperation::Creating(delay) => { + return Ok(HandlerAction::Continue { + state: WaitingForDaprComponentUpdateOperation, + suggested_delay: Some(delay), + }); + } + DaprComponentOperation::Deleting(delay) => { + return Ok(HandlerAction::Continue { + state: UpdateWaitingForLegacyDaprComponentDeletion, + suggested_delay: Some(delay), + }); } - cron_index += 1; + DaprComponentOperation::Pending(delay) => { + return Ok(HandlerAction::Stay { + max_times: Some(AZURE_RBAC_WAIT_MAX_ATTEMPTS), + suggested_delay: Some(delay), + }); + } + DaprComponentOperation::Completed => {} } + cron_index += 1; } } - self.container_apps_environment_wake_wait_until_epoch_secs = None; - self.container_apps_environment_wake_retry_after_epoch_secs = None; - } else { - info!(worker=%current_config.id, "No trigger changes detected"); + } + self.container_apps_environment_wake_wait_until_epoch_secs = None; + self.container_apps_environment_wake_retry_after_epoch_secs = None; + + if !matches!( + self.reconcile_commands_sender_role_assignment(ctx, current_config) + .await?, + CommandsSenderReconcileResult::Complete + ) { + return Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: Some(Duration::from_secs(1)), + }); } if self.update_rbac_wait_required { @@ -2752,57 +3106,117 @@ impl AzureWorkerController { } #[handler( - state = WaitingForDaprComponentUpdateOperation, + state = WaitingForDaprComponentDeletionForUpdate, on_failure = UpdateFailed, status = ResourceStatus::Updating, )] - async fn waiting_for_dapr_component_update_operation( + async fn waiting_for_dapr_component_deletion_for_update( &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { - let func_cfg = ctx.desired_resource_config::()?; - let operation_url = self.pending_operation_url.clone().ok_or_else(|| { - AlienError::new(ErrorData::InfrastructureError { - message: "No pending operation URL recorded for Dapr component update".to_string(), - operation: Some("waiting_for_dapr_component_update_operation".to_string()), - resource_id: Some(func_cfg.id.clone()), - }) - })?; - - let azure_cfg = ctx.get_azure_config()?; - let operation_client = ctx - .service_provider - .get_azure_long_running_operation_client(azure_cfg)?; - let lro = LongRunningOperation { - url: operation_url, - retry_after: self.pending_operation_retry_after.map(Duration::from_secs), - location_url: None, - }; - - let status = operation_client - .check_status(&lro, "CreateOrUpdateDaprComponent", &func_cfg.id) - .await - .context(ErrorData::CloudPlatformError { - message: "Azure ARM operation failed for Dapr component update".to_string(), - resource_id: Some(func_cfg.id.clone()), - })?; + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteDaprComponent", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name: "waiting_for_dapr_component_deletion_for_update", + failure_message: "Azure ARM operation failed for Dapr component deletion", + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.complete_pending_dapr_component_deletion(); + Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }) + } + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } - if status.is_some() { - self.pending_operation_url = None; - self.pending_operation_retry_after = None; - Ok(HandlerAction::Continue { + #[handler( + state = UpdateWaitingForLegacyDaprComponentDeletion, + on_failure = UpdateFailed, + status = ResourceStatus::Updating, + )] + async fn update_waiting_for_legacy_dapr_component_deletion( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self + .wait_for_reconciled_dapr_component_deletion( + ctx, + "update_waiting_for_legacy_dapr_component_deletion", + "Azure ARM operation failed for legacy Dapr component deletion during update", + ) + .await? + { + None => Ok(HandlerAction::Continue { state: UpdateDaprComponents, suggested_delay: None, - }) - } else { - let delay = self - .pending_operation_retry_after - .map(Duration::from_secs) - .unwrap_or(Duration::from_secs(15)); - Ok(HandlerAction::Stay { + }), + Some(delay) => Ok(HandlerAction::Stay { max_times: Some(100), suggested_delay: Some(delay), - }) + }), + } + } + + #[handler( + state = WaitingForDaprComponentUpdateOperation, + on_failure = UpdateFailed, + status = ResourceStatus::Updating, + )] + async fn waiting_for_dapr_component_update_operation( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let func_cfg = ctx.desired_resource_config::()?; + match poll_pending_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "CreateOrUpdateDaprComponent", + operation_target: &func_cfg.id, + resource_id: &func_cfg.id, + handler_name: "waiting_for_dapr_component_update_operation", + failure_message: "Azure ARM operation failed for Dapr component update", + }, + ) + .await? + { + AzureStrictOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }) + } + AzureStrictOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), } } @@ -2818,6 +3232,7 @@ impl AzureWorkerController { // Re‑use the same readiness‑probe helper. let func_cfg = ctx.desired_resource_config::()?; if func_cfg.readiness_probe.is_none() || func_cfg.public_endpoints.is_empty() { + self.storage_delivery_update_reconciliation_initialized = false; return Ok(HandlerAction::Continue { state: Ready, suggested_delay: None, @@ -2836,10 +3251,13 @@ impl AzureWorkerController { .clone(); match run_readiness_probe(ctx, &url).await { - Ok(()) => Ok(HandlerAction::Continue { - state: Ready, - suggested_delay: None, - }), + Ok(()) => { + self.storage_delivery_update_reconciliation_initialized = false; + Ok(HandlerAction::Continue { + state: Ready, + suggested_delay: None, + }) + } Err(_) => { // Probe failed, let the framework handle retries Ok(HandlerAction::Stay { @@ -2896,6 +3314,13 @@ impl AzureWorkerController { async fn delete_start(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let func_cfg = ctx.desired_resource_config::()?; + if self.pending_operation_url.is_some() { + return Ok(HandlerAction::Continue { + state: WaitingForPendingOperationBeforeDelete, + suggested_delay: self.pending_operation_retry_after.map(Duration::from_secs), + }); + } + // Handle case where container_app_name is not set (e.g., creation failed early) let _container_app_name = match self.container_app_name.as_ref() { Some(name) => name.clone(), @@ -2921,282 +3346,465 @@ impl AzureWorkerController { } #[handler( - state = DeletingDaprComponents, + state = WaitingForPendingOperationBeforeDelete, on_failure = DeleteFailed, status = ResourceStatus::Deleting, )] - async fn deleting_dapr_components( + async fn waiting_for_pending_operation_before_delete( &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { - let worker_config = ctx.desired_resource_config::()?; - - info!(worker=%worker_config.id, components=?self.dapr_components, "Deleting Dapr components"); - - self.delete_storage_trigger_infrastructure(ctx).await?; - - // Delete all Dapr components using best-effort approach (ignore NotFound) - self.delete_all_dapr_components(ctx).await?; - - // Continue to commands infrastructure cleanup - Ok(HandlerAction::Continue { - state: DeletingCommandsInfrastructure, - suggested_delay: None, - }) + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "CompleteOperationBeforeWorkerDelete", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name: "waiting_for_pending_operation_before_delete", + failure_message: "Azure ARM operation failed before worker deletion", + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.complete_pending_dapr_component_deletion(); + Ok(HandlerAction::Continue { + state: DeleteStart, + suggested_delay: None, + }) + } + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: DeleteStart, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } } #[handler( - state = DeletingCommandsInfrastructure, + state = DeletingDaprComponents, on_failure = DeleteFailed, status = ResourceStatus::Deleting, )] - async fn deleting_commands_infrastructure( + async fn deleting_dapr_components( &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { - let azure_config = ctx.get_azure_config()?; + let worker_config = ctx.desired_resource_config::()?; - // Delete commands Dapr component (best-effort) - if let Some(component_name) = self.commands_dapr_component.take() { - let env_outputs = get_container_apps_environment_outputs(ctx.state)?; - let client = ctx - .service_provider - .get_azure_container_apps_client(azure_config)?; + info!(worker=%worker_config.id, components=?self.dapr_components, "Deleting Dapr components"); - match client - .delete_dapr_component( - &env_outputs.resource_group_name, - &env_outputs.environment_name, - &component_name, - ) - .await - { - Ok(_) => { - info!(component=%component_name, "Commands Dapr component delete requested"); - } - Err(e) - if matches!( - e.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - info!(component=%component_name, "Commands Dapr component was already deleted"); - } - Err(e) => { - warn!( - component=%component_name, - error=%e, - "Failed to delete commands Dapr component" - ); - } - } + let container_app_name = self.container_app_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker_config.id.clone(), + message: "Container app name not set in state".to_string(), + }) + })?; + if self.initialize_dapr_component_deletion_candidates(worker_config, &container_app_name) { + return Ok(HandlerAction::Continue { + state: DeletingDaprComponents, + suggested_delay: None, + }); } - - // Delete commands role assignments (best-effort) - let authorization_client = ctx - .service_provider - .get_azure_authorization_client(azure_config)?; - - if let Some(assignment_id) = self.commands_sender_role_assignment_id.take() { - match authorization_client - .delete_role_assignment_by_id(assignment_id.clone()) - .await - { - Ok(_) => { - info!(assignment_id=%assignment_id, "Commands sender role assignment deleted"); - } - Err(e) => { - warn!( - assignment_id=%assignment_id, - error=%e, - "Failed to delete commands sender role assignment (may already be deleted)" - ); - } - } + if self + .initialize_auxiliary_teardown_candidates(ctx, worker_config, &container_app_name) + .await? + { + return Ok(HandlerAction::Continue { + state: DeletingDaprComponents, + suggested_delay: None, + }); } - // Delete commands receiver role assignment (best-effort) - if let Some(assignment_id) = self.commands_receiver_role_assignment_id.take() { - match authorization_client - .delete_role_assignment_by_id(assignment_id.clone()) - .await - { - Ok(_) => { - info!(assignment_id=%assignment_id, "Commands receiver role assignment deleted"); - } - Err(e) => { - warn!( - assignment_id=%assignment_id, - error=%e, - "Failed to delete commands receiver role assignment (may already be deleted)" - ); - } - } + if matches!( + self.delete_storage_trigger_infrastructure(ctx).await?, + StorageTriggerTeardownResult::Mutated + ) { + return Ok(HandlerAction::Continue { + state: DeletingDaprComponents, + suggested_delay: None, + }); } - // Delete commands Service Bus queue (best-effort) - if let (Some(namespace_name), Some(queue_name)) = ( - self.commands_namespace_name.take(), - self.commands_queue_name.take(), - ) { - let namespace_ref = ResourceRef::new( - alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, - "default-service-bus-namespace", - ); - let resource_group_name = match ctx - .require_dependency::(&namespace_ref) - { - Ok(controller) => controller.resource_group_name(ctx)?, - Err(_) => get_resource_group_name(ctx.state)?, - }; - info!(namespace=%namespace_name, queue=%queue_name, "Deleting commands Service Bus queue"); - let mgmt = ctx - .service_provider - .get_azure_service_bus_management_client(azure_config)?; - match mgmt - .delete_queue( - resource_group_name, - namespace_name.clone(), - queue_name.clone(), - ) - .await - { - Ok(_) => { - info!(queue=%queue_name, "Commands Service Bus queue deleted"); - } - Err(e) => { - warn!( - queue=%queue_name, - error=%e, - "Failed to delete commands Service Bus queue (may already be deleted)" - ); - } + match self.delete_all_dapr_components(ctx).await? { + TrackedDaprComponentDeleteStep::Complete => {} + TrackedDaprComponentDeleteStep::Mutated => { + return Ok(HandlerAction::Continue { + state: DeletingDaprComponents, + suggested_delay: None, + }); + } + TrackedDaprComponentDeleteStep::LongRunning { + operation, + component_name, + } => { + let delay = operation.retry_after.unwrap_or(Duration::from_secs(15)); + self.pending_operation_url = Some(operation.url); + self.pending_operation_retry_after = operation + .retry_after + .map(|retry_after| retry_after.as_secs()); + self.pending_dapr_component_deletion_name = Some(component_name); + return Ok(HandlerAction::Continue { + state: WaitingForDaprComponentDeletion, + suggested_delay: Some(delay), + }); } } + // Continue to commands infrastructure cleanup Ok(HandlerAction::Continue { - state: DeletingApp, + state: DeletingCommandsInfrastructure, suggested_delay: None, }) } #[handler( - state = DeletingApp, + state = WaitingForDaprComponentDeletion, on_failure = DeleteFailed, status = ResourceStatus::Deleting, )] - async fn deleting_app(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { - let azure_cfg = ctx.get_azure_config()?; - let container_app_name = self.container_app_name.clone().ok_or_else(|| { - AlienError::new(ErrorData::ResourceControllerConfigError { - resource_id: ctx.desired_config.id().to_string(), - message: "Container app name not set in state".to_string(), - }) - })?; - - let resource_group_name = get_resource_group_name(ctx.state)?; - let client = ctx - .service_provider - .get_azure_container_apps_client(azure_cfg)?; - - match client - .delete_container_app(&resource_group_name, &container_app_name) - .await + async fn waiting_for_dapr_component_deletion( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteDaprComponent", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name: "waiting_for_dapr_component_deletion", + failure_message: "Azure ARM operation failed for Dapr component deletion", + }, + ) + .await? { - Ok(OperationResult::Completed(_)) => { - info!(name=%container_app_name, "Container app deleted immediately"); + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.complete_pending_dapr_component_deletion(); Ok(HandlerAction::Continue { - state: DeletingCertificate, + state: DeletingDaprComponents, suggested_delay: None, }) } - Ok(OperationResult::LongRunning(lro)) => { - debug!(name=%container_app_name, "Deletion is long‑running"); - self.pending_operation_url = Some(lro.url.clone()); - self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); - Ok(HandlerAction::Continue { - state: WaitingForDeleteOperation, - suggested_delay: Some(lro.retry_after.unwrap_or(Duration::from_secs(15))), - }) - } - Err(e) - if matches!( - e.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - info!(name=%container_app_name, "Container app already deleted"); + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; Ok(HandlerAction::Continue { - state: DeletingCertificate, + state: DeletingDaprComponents, suggested_delay: None, }) } - Err(e) => { - let worker_config = ctx.desired_resource_config::()?; - Err(e.context(ErrorData::CloudPlatformError { - message: "Failed to delete container app".to_string(), - resource_id: Some(worker_config.id.clone()), - })) - } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), } } #[handler( - state = WaitingForDeleteOperation, + state = DeletingCommandsInfrastructure, on_failure = DeleteFailed, status = ResourceStatus::Deleting, )] - async fn waiting_for_delete_operation( + async fn deleting_commands_infrastructure( &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { - let operation_url = match &self.pending_operation_url { - Some(u) => u.clone(), - None => { - return Err(AlienError::new(ErrorData::InfrastructureError { - message: "No pending_operation_url in WaitingForDeleteOperation".to_string(), - operation: Some("waiting_for_delete_operation".to_string()), - resource_id: Some(ctx.desired_resource_config::()?.id.clone()), - })); + match self.delete_commands_infrastructure_step(ctx).await? { + CommandsTeardownResult::Complete => Ok(HandlerAction::Continue { + state: DeletingApp, + suggested_delay: None, + }), + CommandsTeardownResult::Mutated => Ok(HandlerAction::Continue { + state: DeletingCommandsInfrastructure, + suggested_delay: None, + }), + CommandsTeardownResult::LongRunning(delay) => Ok(HandlerAction::Continue { + state: WaitingForCommandsDaprComponentDeletion, + suggested_delay: Some(delay), + }), + } + } + + #[handler( + state = WaitingForCommandsDaprComponentDeletion, + on_failure = DeleteFailed, + status = ResourceStatus::Deleting, + )] + async fn waiting_for_commands_dapr_component_deletion( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteDaprComponent", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name: "waiting_for_commands_dapr_component_deletion", + failure_message: "Azure ARM operation failed for commands Dapr deletion", + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.complete_commands_dapr_component_deletion(); + Ok(HandlerAction::Continue { + state: DeletingCommandsInfrastructure, + suggested_delay: None, + }) } - }; + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: DeletingCommandsInfrastructure, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + + #[handler( + state = UpdateDeletingCommandsInfrastructure, + on_failure = UpdateFailed, + status = ResourceStatus::Updating, + )] + async fn update_deleting_commands_infrastructure( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self.delete_commands_infrastructure_step(ctx).await? { + // Keep the checkpoint latched until the next UpdateStart. `commands_changed` remains + // true for this whole update, so clearing it here would restart teardown forever. + CommandsTeardownResult::Complete => Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }), + CommandsTeardownResult::Mutated => Ok(HandlerAction::Continue { + state: UpdateDeletingCommandsInfrastructure, + suggested_delay: None, + }), + CommandsTeardownResult::LongRunning(delay) => Ok(HandlerAction::Continue { + state: UpdateWaitingForCommandsDaprComponentDeletion, + suggested_delay: Some(delay), + }), + } + } + + #[handler( + state = UpdateWaitingForCommandsDaprComponentDeletion, + on_failure = UpdateFailed, + status = ResourceStatus::Updating, + )] + async fn update_waiting_for_commands_dapr_component_deletion( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let worker = ctx.desired_resource_config::()?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteDaprComponent", + operation_target: &worker.id, + resource_id: &worker.id, + handler_name: "update_waiting_for_commands_dapr_component_deletion", + failure_message: "Azure ARM operation failed for commands Dapr update deletion", + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.complete_commands_dapr_component_deletion(); + Ok(HandlerAction::Continue { + state: UpdateDeletingCommandsInfrastructure, + suggested_delay: None, + }) + } + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: UpdateDeletingCommandsInfrastructure, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + + #[handler( + state = UpdateWaitingForCommandsDaprComponentDeletionForSetup, + on_failure = UpdateFailed, + status = ResourceStatus::Updating, + )] + async fn update_waiting_for_commands_dapr_component_deletion_for_setup( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + match self + .wait_for_reconciled_dapr_component_deletion( + ctx, + "update_waiting_for_commands_dapr_component_deletion_for_setup", + "Azure ARM operation failed for commands setup Dapr deletion", + ) + .await? + { + None => Ok(HandlerAction::Continue { + state: UpdateDaprComponents, + suggested_delay: None, + }), + Some(delay) => Ok(HandlerAction::Stay { + max_times: Some(100), + suggested_delay: Some(delay), + }), + } + } + #[handler( + state = DeletingApp, + on_failure = DeleteFailed, + status = ResourceStatus::Deleting, + )] + async fn deleting_app(&mut self, ctx: &ResourceControllerContext<'_>) -> Result { let azure_cfg = ctx.get_azure_config()?; - let container_app_name = self.container_app_name.as_ref().unwrap(); - let operation_client = ctx - .service_provider - .get_azure_long_running_operation_client(azure_cfg)?; + let container_app_name = self.container_app_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: ctx.desired_config.id().to_string(), + message: "Container app name not set in state".to_string(), + }) + })?; - let lro = LongRunningOperation { - url: operation_url, - retry_after: self.pending_operation_retry_after.map(Duration::from_secs), - location_url: None, - }; + let resource_group_name = get_resource_group_name(ctx.state)?; + let client = ctx + .service_provider + .get_azure_container_apps_client(azure_cfg)?; - let op_status = operation_client - .check_status(&lro, "DeleteContainerApp", container_app_name) + match client + .delete_container_app(&resource_group_name, &container_app_name) .await - .context(ErrorData::CloudPlatformError { - message: "Azure ARM operation failed for container app deletion".to_string(), - resource_id: Some(ctx.desired_resource_config::()?.id.clone()), - })?; + { + Ok(OperationResult::Completed(_)) => { + info!(name=%container_app_name, "Container app deleted immediately"); + Ok(HandlerAction::Continue { + state: DeletingCertificate, + suggested_delay: None, + }) + } + Ok(OperationResult::LongRunning(lro)) => { + debug!(name=%container_app_name, "Deletion is long‑running"); + self.pending_operation_url = Some(lro.url.clone()); + self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); + Ok(HandlerAction::Continue { + state: WaitingForDeleteOperation, + suggested_delay: Some(lro.retry_after.unwrap_or(Duration::from_secs(15))), + }) + } + Err(e) + if matches!( + e.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + info!(name=%container_app_name, "Container app already deleted"); + Ok(HandlerAction::Continue { + state: DeletingCertificate, + suggested_delay: None, + }) + } + Err(e) => { + let worker_config = ctx.desired_resource_config::()?; + Err(e.context(ErrorData::CloudPlatformError { + message: "Failed to delete container app".to_string(), + resource_id: Some(worker_config.id.clone()), + })) + } + } + } - if op_status.is_some() { - self.pending_operation_url = None; - self.pending_operation_retry_after = None; - Ok(HandlerAction::Continue { - state: DeletingContainerApp, - suggested_delay: None, + #[handler( + state = WaitingForDeleteOperation, + on_failure = DeleteFailed, + status = ResourceStatus::Deleting, + )] + async fn waiting_for_delete_operation( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let worker = ctx.desired_resource_config::()?; + let container_app_name = self.container_app_name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: "Container app name not set while polling deletion".to_string(), }) - } else { - let delay = self - .pending_operation_retry_after - .map(Duration::from_secs) - .unwrap_or(Duration::from_secs(15)); - Ok(HandlerAction::Stay { + })?; + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteContainerApp", + operation_target: container_app_name, + resource_id: &worker.id, + handler_name: "waiting_for_delete_operation", + failure_message: "Azure ARM operation failed for container app deletion", + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: DeletingContainerApp, + suggested_delay: None, + }) + } + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: DeletingApp, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { max_times: Some(60), suggested_delay: Some(delay), - }) + }), } } @@ -3263,7 +3871,13 @@ impl AzureWorkerController { &mut self, ctx: &ResourceControllerContext<'_>, ) -> Result { - if self.container_apps_certificate_id.is_none() { + let worker_config = ctx.desired_resource_config::()?; + let has_resolvable_domain = !worker_config.public_endpoints.is_empty() + && Self::resolve_domain_info(ctx, &worker_config.id).is_ok(); + if self.container_apps_certificate_id.is_none() + && !self.uses_custom_domain + && !has_resolvable_domain + { self.clear_all(); return Ok(HandlerAction::Continue { state: Deleted, @@ -3271,7 +3885,6 @@ impl AzureWorkerController { }); } - let worker_config = ctx.desired_resource_config::()?; let azure_cfg = ctx.get_azure_config()?; let resource_group_name = get_resource_group_name(ctx.state)?; let environment_name = get_container_apps_environment_name(ctx.state)?; @@ -3334,61 +3947,48 @@ impl AzureWorkerController { ctx: &ResourceControllerContext<'_>, ) -> Result { let worker_config = ctx.desired_resource_config::()?; - let operation_url = self.pending_operation_url.clone().ok_or_else(|| { - AlienError::new(ErrorData::InfrastructureError { - message: "No pending_operation_url in WaitingForCertificateDeleteOperation" - .to_string(), - operation: Some("waiting_for_certificate_delete_operation".to_string()), - resource_id: Some(worker_config.id.clone()), - }) - })?; - - let azure_cfg = ctx.get_azure_config()?; - let operation_client = ctx - .service_provider - .get_azure_long_running_operation_client(azure_cfg)?; - let lro = LongRunningOperation { - url: operation_url, - retry_after: self.pending_operation_retry_after.map(Duration::from_secs), - location_url: None, - }; let certificate_name = get_container_apps_certificate_name(ctx.resource_prefix, &worker_config.id); + match poll_reconciled_operation( + ctx, + self.pending_operation_url.as_deref(), + self.pending_operation_retry_after, + AzureOperationPollRequest { + operation_name: "DeleteManagedEnvironmentCertificate", + operation_target: &certificate_name, + resource_id: &worker_config.id, + handler_name: "waiting_for_certificate_delete_operation", + failure_message: + "Azure ARM operation failed for managed environment certificate deletion", + }, + ) + .await? + { + AzureOperationPoll::Complete => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + self.clear_all(); + Ok(HandlerAction::Continue { + state: Deleted, + suggested_delay: None, + }) + } + AzureOperationPoll::Missing => { + self.pending_operation_url = None; + self.pending_operation_retry_after = None; + Ok(HandlerAction::Continue { + state: DeletingCertificate, + suggested_delay: None, + }) + } + AzureOperationPoll::Pending(delay) => Ok(HandlerAction::Stay { + max_times: Some(60), + suggested_delay: Some(delay), + }), + } + } - let status = operation_client - .check_status( - &lro, - "DeleteManagedEnvironmentCertificate", - &certificate_name, - ) - .await - .context(ErrorData::CloudPlatformError { - message: "Azure ARM operation failed for managed environment certificate deletion" - .to_string(), - resource_id: Some(worker_config.id.clone()), - })?; - - if status.is_some() { - self.pending_operation_url = None; - self.pending_operation_retry_after = None; - self.clear_all(); - Ok(HandlerAction::Continue { - state: Deleted, - suggested_delay: None, - }) - } else { - let delay = self - .pending_operation_retry_after - .map(Duration::from_secs) - .unwrap_or(Duration::from_secs(15)); - Ok(HandlerAction::Stay { - max_times: Some(60), - suggested_delay: Some(delay), - }) - } - } - - // ─────────────── TERMINALS ──────────────────────────────── + // ─────────────── TERMINALS ──────────────────────────────── terminal_state!( state = CreateFailed, @@ -3529,7 +4129,7 @@ impl AzureWorkerController { azure_config: &alien_azure_clients::AzureClientConfig, func_cfg: &alien_core::Worker, container_app_name: &str, - ) -> Result { + ) -> Result { let env_outputs = get_container_apps_environment_outputs(ctx.state)?; let env_resource_group_name = env_outputs.resource_group_name.clone(); let environment_name = env_outputs.environment_name.clone(); @@ -3553,95 +4153,84 @@ impl AzureWorkerController { let service_bus_resource_group = namespace_controller.resource_group_name(ctx)?; // Create commands queue - let queue_name = format!("{}-rq", container_app_name); - let mgmt = ctx - .service_provider - .get_azure_service_bus_management_client(azure_config)?; - - info!( - worker=%func_cfg.id, - namespace=%namespace_name, - queue=%queue_name, - "Pre-creating commands Service Bus queue (before Container App)" - ); - - mgmt.create_or_update_queue( - service_bus_resource_group.clone(), - namespace_name.clone(), - queue_name.clone(), - alien_azure_clients::models::queue::SbQueueProperties::default(), - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create commands Service Bus queue '{}'", - queue_name - ), - resource_id: Some(func_cfg.id.clone()), - })?; - - // Create Dapr component for commands queue - use alien_azure_clients::models::managed_environments_dapr_components::{ - DaprComponent, DaprComponentProperties, DaprMetadata, - }; + let queue_name = commands_queue_name(container_app_name); + match self + .prepare_commands_target_for_setup( + ctx, + func_cfg, + &container_app_name, + &AzureCommandsQueueTarget { + resource_group_name: service_bus_resource_group.clone(), + namespace_name: namespace_name.clone(), + queue_name: queue_name.clone(), + }, + ) + .await? + { + CommandsQueueTargetPreparation::Ready => {} + CommandsQueueTargetPreparation::Checkpoint => { + return Ok(CommandsSetupOperation::Pending(Duration::from_secs(1))); + } + CommandsQueueTargetPreparation::LongRunning(delay) => { + return Ok(CommandsSetupOperation::Deleting(delay)); + } + } + if !self.commands_queue_applied { + let mgmt = ctx + .service_provider + .get_azure_service_bus_management_client(azure_config)?; - let ns_fqdn = format!("{}.servicebus.windows.net", namespace_name); - let component_name = format!("servicebus-{}-commands", container_app_name); + info!( + worker=%func_cfg.id, + namespace=%namespace_name, + queue=%queue_name, + "Pre-creating commands Service Bus queue (before Container App)" + ); - let mut metadata = vec![ - DaprMetadata { - name: Some("namespaceName".into()), - value: Some(ns_fqdn), - secret_ref: None, - }, - DaprMetadata { - name: Some("queueName".into()), - value: Some(queue_name.clone()), - secret_ref: None, - }, - DaprMetadata { - name: Some("direction".into()), - value: Some("input".into()), - secret_ref: None, - }, - ]; + mgmt.create_or_update_queue( + service_bus_resource_group.clone(), + namespace_name.clone(), + queue_name.clone(), + alien_azure_clients::models::queue::SbQueueProperties::default(), + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to create commands Service Bus queue '{}'", + queue_name + ), + resource_id: Some(func_cfg.id.clone()), + })?; + self.commands_queue_applied = true; + return Ok(CommandsSetupOperation::Pending(Duration::from_secs(1))); + } - // Add client ID for user-assigned managed identity + let component_name = get_azure_internal_commands_dapr_component_name(&container_app_name); let service_account_id = format!("{}-sa", func_cfg.get_permissions()); let service_account_ref = alien_core::ResourceRef::new( alien_core::ServiceAccount::RESOURCE_TYPE, service_account_id.to_string(), ); - if let Ok(sa_state) = ctx + let service_account = ctx .require_dependency::( &service_account_ref, - ) - { - if let Some(client_id) = &sa_state.identity_client_id { - metadata.push(DaprMetadata { - name: Some("azureClientId".into()), - value: Some(client_id.clone()), - secret_ref: None, - }); - } - } - - let dapr_component = DaprComponent { - name: Some(component_name.clone()), - properties: Some(DaprComponentProperties { - component_type: Some("bindings.azure.servicebusqueues".to_string()), - ignore_errors: false, - init_timeout: None, - version: Some("v1".to_string()), - metadata, - scopes: vec![container_app_name.to_string()], - secret_store_component: None, - secrets: vec![], - }), - id: None, - system_data: None, - type_: None, - }; + )?; + let client_id = service_account + .identity_client_id + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: func_cfg.id.clone(), + dependency_id: service_account_ref.id, + }) + })?; + let dapr_component = service_bus_dapr_component( + component_name.clone(), + &container_app_name, + &namespace_name, + queue_name.clone(), + client_id, + ); info!( worker=%func_cfg.id, @@ -3653,146 +4242,69 @@ impl AzureWorkerController { .service_provider .get_azure_container_apps_client(azure_config)?; - match client - .create_or_update_dapr_component( - &env_resource_group_name, - &environment_name, - &component_name, - &dapr_component, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create commands Dapr component '{}'", - component_name - ), - resource_id: Some(func_cfg.id.clone()), - })? { - OperationResult::Completed(_) => {} - OperationResult::LongRunning(lro) => { + match delete_owned_legacy_dapr_components( + client.as_ref(), + &env_resource_group_name, + &environment_name, + container_app_name, + &component_name, + &get_legacy_azure_internal_commands_dapr_component_names(container_app_name), + &func_cfg.id, + ) + .await? + { + LegacyDaprComponentCleanupStep::Complete => {} + LegacyDaprComponentCleanupStep::Mutated => { + return Ok(CommandsSetupOperation::Pending(Duration::from_secs(1))); + } + LegacyDaprComponentCleanupStep::LongRunning(lro) => { + self.pending_operation_url = Some(lro.url.clone()); + self.pending_operation_retry_after = lro.retry_after.map(|delay| delay.as_secs()); + return Ok(CommandsSetupOperation::Deleting( + lro.retry_after.unwrap_or(Duration::from_secs(15)), + )); + } + } + + match ensure_dapr_component( + client.as_ref(), + &env_resource_group_name, + &environment_name, + container_app_name, + &dapr_component, + &func_cfg.id, + ) + .await? + { + DaprComponentEnsureOperation::Unchanged => {} + DaprComponentEnsureOperation::Completed => { + self.commands_dapr_component = Some(component_name); + return Ok(CommandsSetupOperation::Pending(Duration::from_secs(1))); + } + DaprComponentEnsureOperation::LongRunning(lro) => { self.pending_operation_url = Some(lro.url.clone()); self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); - return Ok(DaprComponentOperation::LongRunning( + return Ok(CommandsSetupOperation::Creating( lro.retry_after.unwrap_or(Duration::from_secs(15)), )); } } + self.commands_resource_group_name = Some(service_bus_resource_group.clone()); self.commands_namespace_name = Some(namespace_name.clone()); self.commands_queue_name = Some(queue_name); self.commands_dapr_component = Some(component_name); - // Command transport RBAC is setup-applied before live worker provisioning. - self.assign_commands_sender_role( - ctx, - azure_config, - &service_bus_resource_group, - &namespace_name, - func_cfg, - ) - .await?; - - info!(worker=%func_cfg.id, "Commands infrastructure pre-created successfully"); - Ok(DaprComponentOperation::Completed) - } - - /// Ensure command transport permissions are represented in the management profile. - /// - /// Azure command transport uses Service Bus data-plane roles. Those grants are - /// setup-owned because both Terraform setup and runtime setup know the stack - /// management and execution identities before live workers are created. - async fn assign_commands_sender_role( - &mut self, - ctx: &ResourceControllerContext<'_>, - azure_config: &alien_azure_clients::AzureClientConfig, - resource_group_name: &str, - namespace_name: &str, - func_cfg: &alien_core::Worker, - ) -> Result<()> { - if !management_profile_dispatches_commands(ctx, &func_cfg.id) { - info!( - worker = %func_cfg.id, - "Skipping management command sender role because worker/dispatch-command is not granted" - ); - return Ok(()); - } - - if AzurePermissionsHelper::get_management_uami_principal_id(ctx)?.is_none() { - if self.commands_sender_role_assignment_id.is_some() { - return Ok(()); - } - - let queue_name = self.commands_queue_name.as_ref().ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: func_cfg.id.clone(), - dependency_id: "commands-queue".to_string(), - }) - })?; - let authorization_client = ctx - .service_provider - .get_azure_authorization_client(azure_config)?; - let principal_id = ctx - .service_provider - .get_azure_caller_principal_id(azure_config) - .await - .context(ErrorData::CloudPlatformError { - message: "Failed to resolve Azure command sender principal".to_string(), - resource_id: Some(func_cfg.id.clone()), - })?; - let queue_scope = alien_azure_clients::authorization::Scope::Resource { - resource_group_name: resource_group_name.to_string(), - resource_provider: "Microsoft.ServiceBus".to_string(), - parent_resource_path: Some(format!("namespaces/{namespace_name}")), - resource_type: "queues".to_string(), - resource_name: queue_name.clone(), - }; - let role_assignment_id = uuid::Uuid::new_v5( - &uuid::Uuid::NAMESPACE_OID, - format!( - "deployment:azure:commands-sender:{}:{}:{}:{}:{}", - ctx.resource_prefix, func_cfg.id, principal_id, namespace_name, queue_name - ) - .as_bytes(), - ) - .to_string(); - let full_assignment_id = authorization_client - .build_role_assignment_id(&queue_scope, role_assignment_id.clone()); - let role_definition_id = format!( - "/subscriptions/{}/providers/Microsoft.Authorization/roleDefinitions/69a216fc-b8fb-44d8-bc22-1f3c2cd27a39", - azure_config.subscription_id - ); - - AzurePermissionsHelper::create_role_assignment( - &authorization_client, - azure_config, - &queue_scope, - &role_assignment_id, - &principal_id, - &role_definition_id, - ) - .await - .context(ErrorData::CloudPlatformError { - message: "Failed to grant Azure command sender role".to_string(), - resource_id: Some(func_cfg.id.clone()), - })?; - - self.commands_sender_role_assignment_id = Some(full_assignment_id); - info!( - worker = %func_cfg.id, - principal_id = %principal_id, - namespace = %namespace_name, - queue = %queue_name, - "Granted direct-manager Azure Service Bus command sender role" - ); - return Ok(()); + if !matches!( + self.reconcile_commands_sender_role_assignment(ctx, func_cfg) + .await?, + CommandsSenderReconcileResult::Complete + ) { + return Ok(CommandsSetupOperation::Pending(Duration::from_secs(1))); } - info!( - worker = %func_cfg.id, - "Using setup-applied Azure Service Bus command permissions" - ); - - Ok(()) + info!(worker=%func_cfg.id, "Commands infrastructure pre-created successfully"); + Ok(CommandsSetupOperation::Completed) } /// Resolve domain information for a public worker. @@ -3902,8 +4414,40 @@ impl AzureWorkerController { self.container_app_url = None; self.pending_operation_url = None; self.pending_operation_retry_after = None; + self.pending_dapr_component_deletion_name = None; self.dapr_components.clear(); + self.fqdn = None; + self.certificate_id = None; + self.keyvault_cert_id = None; + self.container_apps_certificate_id = None; + self.uses_custom_domain = false; + self.certificate_issued_at = None; + self.commands_resource_group_name = None; + self.commands_namespace_name = None; + self.commands_queue_name = None; + self.commands_queue_applied = false; + self.commands_dapr_component = None; + self.commands_dapr_component_deletion_candidates.clear(); + self.commands_sender_role_assignment_id = None; + self.commands_sender_role_assignment_intent = None; + self.commands_sender_role_assignment_discovery_complete = false; + self.commands_receiver_role_assignment_id = None; + self.commands_infrastructure_auth_wait_until_epoch_secs = None; + self.container_apps_environment_wake_wait_until_epoch_secs = None; + self.container_apps_environment_wake_retry_after_epoch_secs = None; + self.pre_container_app_rbac_wait_until_epoch_secs = None; + self.ready_rbac_wait_until_epoch_secs = None; + self.update_rbac_wait_required = false; + self.update_dapr_components_deleted = false; + self.dapr_component_naming_version = 0; self.storage_trigger_infrastructure.clear(); + self.storage_trigger_teardown_progress = AzureStorageTriggerTeardownProgress::default(); + self.dapr_component_deletion_candidates_initialized = false; + self.auxiliary_teardown_candidates_initialized = false; + self.commands_update_teardown_candidates_initialized = false; + self.trigger_update_teardown_candidates_initialized = false; + self.storage_delivery_update_reconciliation_initialized = false; + self._internal_stay_count = None; } /// Called whenever provisioning *succeeds* and we have the live resource. @@ -4004,20 +4548,27 @@ impl AzureWorkerController { }); } - // Add Azure-specific managed identity client ID - if let Ok(service_account_state) = ctx + // Add Azure-specific managed identity client ID. A missing identity must + // stop reconciliation; silently omitting it would detach the workload + // identity during an otherwise idempotent update. + let service_account_state = ctx .require_dependency::( &service_account_ref, - ) - { - if let Some(client_id) = &service_account_state.identity_client_id { - env_vars.push(EnvironmentVar { - name: Some(ENV_AZURE_CLIENT_ID.to_string()), - value: Some(client_id.clone()), - secret_ref: None, - }); - } - } + )?; + let client_id = service_account_state + .identity_client_id + .as_ref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: func.id.clone(), + dependency_id: service_account_ref.id.clone(), + }) + })?; + env_vars.push(EnvironmentVar { + name: Some(ENV_AZURE_CLIENT_ID.to_string()), + value: Some(client_id.clone()), + secret_ref: None, + }); Ok(env_vars) } @@ -4130,21 +4681,26 @@ impl AzureWorkerController { service_account_id.to_string(), ); - if let Ok(service_account_state) = ctx + let service_account_state = ctx .require_dependency::( &service_account_ref, - ) - { - if let Some(identity_id) = &service_account_state.identity_resource_id { - identity_map.insert( - identity_id.clone(), - UserAssignedIdentity { - client_id: None, - principal_id: None, - }, - ); - } - } + )?; + let identity_id = service_account_state + .identity_resource_id + .as_ref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: func.id.clone(), + dependency_id: service_account_ref.id.clone(), + }) + })?; + identity_map.insert( + identity_id.clone(), + UserAssignedIdentity { + client_id: None, + principal_id: None, + }, + ); // Add linked ServiceAccounts for link in &func.links { @@ -4298,10 +4854,6 @@ impl AzureWorkerController { worker_config: &alien_core::Worker, queue_ref: &alien_core::ResourceRef, ) -> Result { - use alien_azure_clients::models::managed_environments_dapr_components::{ - DaprComponent, DaprComponentProperties, DaprMetadata, - }; - let azure_config = ctx.get_azure_config()?; // Dapr components live on the Container Apps Environment, which may be in a // different resource group than the deployment (shared/external environments). @@ -4318,10 +4870,8 @@ impl AzureWorkerController { dependency_id: queue_ref.id.clone(), }) })?; - let ns_fqdn = format!("{}.servicebus.windows.net", namespace); - - // Generate component name: servicebus-{containerAppName}-{queueId} - let component_name = format!("servicebus-{}-{}", container_app_name, queue_ref.id); + let component_name = + get_azure_queue_trigger_dapr_component_name(container_app_name, &queue_ref.id); // Use Dapr input binding — the manager/user code sends directly to Service Bus // via Azure SDK, not through Dapr pubsub. Input bindings auto-deliver from the @@ -4333,59 +4883,31 @@ impl AzureWorkerController { }) })?; - let dapr_component = DaprComponent { - name: Some(component_name.clone()), - properties: Some(DaprComponentProperties { - component_type: Some("bindings.azure.servicebusqueues".to_string()), - ignore_errors: false, - init_timeout: None, - version: Some("v1".to_string()), - metadata: { - let mut metadata = vec![ - DaprMetadata { - name: Some("namespaceName".into()), - value: Some(ns_fqdn), - secret_ref: None, - }, - DaprMetadata { - name: Some("queueName".into()), - value: Some(queue_name.clone()), - secret_ref: None, - }, - DaprMetadata { - name: Some("direction".into()), - value: Some("input".into()), - secret_ref: None, - }, - ]; - - // Add client ID for user-assigned managed identity - let service_account_id = format!("{}-sa", worker_config.get_permissions()); - let service_account_ref = alien_core::ResourceRef::new( - alien_core::ServiceAccount::RESOURCE_TYPE, - service_account_id.to_string(), - ); - - if let Ok(service_account_state) = ctx.require_dependency::(&service_account_ref) { - if let Some(client_id) = &service_account_state.identity_client_id { - metadata.push(DaprMetadata { - name: Some("azureClientId".into()), - value: Some(client_id.clone()), - secret_ref: None - }); - } - } - - metadata - }, - scopes: vec![container_app_name.to_string()], - secret_store_component: None, - secrets: vec![], - }), - id: None, - system_data: None, - type_: None, - }; + let service_account_id = format!("{}-sa", worker_config.get_permissions()); + let service_account_ref = alien_core::ResourceRef::new( + alien_core::ServiceAccount::RESOURCE_TYPE, + service_account_id, + ); + let service_account = ctx + .require_dependency::( + &service_account_ref, + )?; + let client_id = service_account + .identity_client_id + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker_config.id.clone(), + dependency_id: service_account_ref.id, + }) + })?; + let dapr_component = service_bus_dapr_component( + component_name.clone(), + container_app_name, + namespace, + queue_name.clone(), + client_id, + ); info!( worker=%worker_config.id, @@ -4399,26 +4921,45 @@ impl AzureWorkerController { .service_provider .get_azure_container_apps_client(&azure_config)?; - match client - .create_or_update_dapr_component( - &resource_group_name, - &environment_name, - &component_name, - &dapr_component, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create Dapr component '{}' for queue '{}'", - component_name, queue_ref.id - ), - resource_id: Some(worker_config.id.clone()), - })? { - OperationResult::Completed(_) => {} - OperationResult::LongRunning(lro) => { + match delete_owned_legacy_dapr_components( + client.as_ref(), + &resource_group_name, + &environment_name, + container_app_name, + &component_name, + &get_legacy_azure_queue_trigger_dapr_component_names(container_app_name, &queue_ref.id), + &worker_config.id, + ) + .await? + { + LegacyDaprComponentCleanupStep::Complete => {} + LegacyDaprComponentCleanupStep::Mutated => { + return Ok(DaprComponentOperation::Pending(Duration::from_secs(1))); + } + LegacyDaprComponentCleanupStep::LongRunning(lro) => { + self.pending_operation_url = Some(lro.url.clone()); + self.pending_operation_retry_after = lro.retry_after.map(|delay| delay.as_secs()); + return Ok(DaprComponentOperation::Deleting( + lro.retry_after.unwrap_or(Duration::from_secs(15)), + )); + } + } + + match ensure_dapr_component( + client.as_ref(), + &resource_group_name, + &environment_name, + container_app_name, + &dapr_component, + &worker_config.id, + ) + .await? + { + DaprComponentEnsureOperation::Unchanged | DaprComponentEnsureOperation::Completed => {} + DaprComponentEnsureOperation::LongRunning(lro) => { self.pending_operation_url = Some(lro.url.clone()); self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); - return Ok(DaprComponentOperation::LongRunning( + return Ok(DaprComponentOperation::Creating( lro.retry_after.unwrap_or(Duration::from_secs(15)), )); } @@ -4447,261 +4988,99 @@ impl AzureWorkerController { storage_ref: &alien_core::ResourceRef, events: &[String], ) -> Result { - use alien_azure_clients::authorization::Scope; - use alien_azure_clients::models::managed_environments_dapr_components::{ - DaprComponent, DaprComponentProperties, DaprMetadata, - }; - let azure_config = ctx.get_azure_config()?; let env_outputs = get_container_apps_environment_outputs(ctx.state)?; let environment_resource_group = env_outputs.resource_group_name.clone(); let environment_name = env_outputs.environment_name.clone(); - let storage_controller = - ctx.require_dependency::(storage_ref)?; - let storage_account_name = storage_controller - .storage_account_name - .as_ref() - .ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: worker_config.id.clone(), - dependency_id: storage_ref.id.clone(), - }) - })? - .clone(); - let container_name = storage_controller - .container_name - .as_ref() - .ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: worker_config.id.clone(), - dependency_id: storage_ref.id.clone(), - }) - })? - .clone(); - - let namespace_ref = ResourceRef::new( - alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, - "default-service-bus-namespace", - ); - let namespace_controller = ctx.require_dependency::(&namespace_ref)?; - let namespace_name = namespace_controller - .namespace_name - .as_ref() - .ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: worker_config.id.clone(), - dependency_id: namespace_ref.id.clone(), - }) - })? - .clone(); - let service_bus_resource_group = namespace_controller.resource_group_name(ctx)?; - - let service_account_id = format!("{}-sa", worker_config.get_permissions()); - let service_account_ref = ResourceRef::new( - alien_core::ServiceAccount::RESOURCE_TYPE, - service_account_id.clone(), - ); - let service_account = ctx - .require_dependency::( - &service_account_ref, - )?; - let execution_client_id = service_account - .identity_client_id - .as_ref() - .ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: worker_config.id.clone(), - dependency_id: service_account_id.clone(), - }) - })? - .clone(); - let execution_principal_id = service_account - .identity_principal_id - .as_ref() - .ok_or_else(|| { - AlienError::new(ErrorData::DependencyNotReady { - resource_id: worker_config.id.clone(), - dependency_id: service_account_id, - }) - })? - .clone(); + let desired_target = self + .desired_storage_trigger_target(ctx, worker_config, container_app_name, storage_ref) + .await?; + let desired_infrastructure = &desired_target.infrastructure; + let event_subscription_name = desired_infrastructure.event_subscription_name.clone(); + let namespace_name = desired_infrastructure.namespace_name.clone(); + let queue_name = desired_infrastructure.queue_name.clone(); + + let component_name = + get_azure_blob_trigger_dapr_component_name(container_app_name, &storage_ref.id); + + if matches!( + self.prepare_storage_trigger_target(ctx, desired_infrastructure) + .await?, + StorageTargetPreparation::Pending + ) { + return Ok(DaprComponentOperation::Pending(Duration::from_secs(1))); + } + match self + .ensure_storage_delivery_infrastructure( + ctx, + worker_config, + storage_ref, + events, + &desired_target, + ) + .await? + { + StorageDeliveryReconcileResult::Complete => {} + StorageDeliveryReconcileResult::Pending(delay) => { + return Ok(DaprComponentOperation::Pending(delay)); + } + } - let queue_name = format!("{}-storage-{}", container_app_name, storage_ref.id); - let component_name = format!("blobstorage-{}-{}", container_app_name, storage_ref.id); - let event_subscription_name = - get_azure_storage_event_subscription_name(&worker_config.id, &storage_ref.id); - let deployment_resource_group = get_resource_group_name(ctx.state)?; - let source_resource_id = format!( - "/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Storage/storageAccounts/{}", - azure_config.subscription_id, deployment_resource_group, storage_account_name - ); - let queue_resource_id = format!( - "/subscriptions/{}/resourceGroups/{}/providers/Microsoft.ServiceBus/namespaces/{}/queues/{}", - azure_config.subscription_id, - service_bus_resource_group, - namespace_name, - queue_name + let dapr_component = service_bus_dapr_component( + component_name.clone(), + container_app_name, + &namespace_name, + queue_name.clone(), + &desired_target.execution_client_id, ); - let mgmt = ctx + let container_apps_client = ctx .service_provider - .get_azure_service_bus_management_client(azure_config)?; - mgmt.create_or_update_queue( - service_bus_resource_group.clone(), - namespace_name.clone(), - queue_name.clone(), - alien_azure_clients::models::queue::SbQueueProperties::default(), - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create storage-trigger Service Bus queue '{}'", - queue_name - ), - resource_id: Some(worker_config.id.clone()), - })?; + .get_azure_container_apps_client(&azure_config)?; - let tracker_index = self - .storage_trigger_infrastructure - .iter() - .position(|item| item.event_subscription_name == event_subscription_name); - let tracker_index = match tracker_index { - Some(index) => { - let tracker = &mut self.storage_trigger_infrastructure[index]; - tracker.source_resource_id = source_resource_id.clone(); - tracker.service_bus_resource_group = service_bus_resource_group.clone(); - tracker.namespace_name = namespace_name.clone(); - tracker.queue_name = queue_name.clone(); - index + match delete_owned_legacy_dapr_components( + container_apps_client.as_ref(), + &environment_resource_group, + &environment_name, + container_app_name, + &component_name, + &get_legacy_azure_blob_trigger_dapr_component_names( + container_app_name, + &storage_ref.id, + ), + &worker_config.id, + ) + .await? + { + LegacyDaprComponentCleanupStep::Complete => {} + LegacyDaprComponentCleanupStep::Mutated => { + return Ok(DaprComponentOperation::Pending(Duration::from_secs(1))); } - None => { - self.storage_trigger_infrastructure - .push(AzureStorageTriggerInfrastructure { - source_resource_id: source_resource_id.clone(), - event_subscription_name: event_subscription_name.clone(), - service_bus_resource_group: service_bus_resource_group.clone(), - namespace_name: namespace_name.clone(), - queue_name: queue_name.clone(), - receiver_role_assignment_id: None, - }); - self.storage_trigger_infrastructure.len() - 1 + LegacyDaprComponentCleanupStep::LongRunning(lro) => { + self.pending_operation_url = Some(lro.url.clone()); + self.pending_operation_retry_after = lro.retry_after.map(|delay| delay.as_secs()); + return Ok(DaprComponentOperation::Deleting( + lro.retry_after.unwrap_or(Duration::from_secs(15)), + )); } - }; - - if self.storage_trigger_infrastructure[tracker_index] - .receiver_role_assignment_id - .is_none() - { - let queue_scope = Scope::Resource { - resource_group_name: service_bus_resource_group.clone(), - resource_provider: "Microsoft.ServiceBus".to_string(), - parent_resource_path: Some(format!("namespaces/{namespace_name}")), - resource_type: "queues".to_string(), - resource_name: queue_name.clone(), - }; - let role_assignment_id = uuid::Uuid::new_v5( - &uuid::Uuid::NAMESPACE_OID, - format!( - "deployment:azure:storage-trigger-receiver:{}:{}:{}:{}", - ctx.resource_prefix, worker_config.id, storage_ref.id, execution_principal_id - ) - .as_bytes(), - ) - .to_string(); - let authorization_client = ctx - .service_provider - .get_azure_authorization_client(azure_config)?; - let full_assignment_id = authorization_client - .build_role_assignment_id(&queue_scope, role_assignment_id.clone()); - let role_definition_id = format!( - "/subscriptions/{}/providers/Microsoft.Authorization/roleDefinitions/4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0", - azure_config.subscription_id - ); - AzurePermissionsHelper::create_role_assignment( - &authorization_client, - azure_config, - &queue_scope, - &role_assignment_id, - &execution_principal_id, - &role_definition_id, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to grant the worker access to storage-trigger queue '{}'", - queue_name - ), - resource_id: Some(worker_config.id.clone()), - })?; - self.storage_trigger_infrastructure[tracker_index].receiver_role_assignment_id = - Some(full_assignment_id); } - let metadata = vec![ - DaprMetadata { - name: Some("namespaceName".into()), - value: Some(format!("{}.servicebus.windows.net", namespace_name)), - secret_ref: None, - }, - DaprMetadata { - name: Some("queueName".into()), - value: Some(queue_name.clone()), - secret_ref: None, - }, - DaprMetadata { - name: Some("direction".into()), - value: Some("input".into()), - secret_ref: None, - }, - DaprMetadata { - name: Some("azureClientId".into()), - value: Some(execution_client_id), - secret_ref: None, - }, - ]; - - let dapr_component = DaprComponent { - name: Some(component_name.clone()), - properties: Some(DaprComponentProperties { - component_type: Some("bindings.azure.servicebusqueues".to_string()), - ignore_errors: false, - init_timeout: None, - version: Some("v1".to_string()), - metadata, - scopes: vec![container_app_name.to_string()], - secret_store_component: None, - secrets: vec![], - }), - id: None, - system_data: None, - type_: None, - }; - - let container_apps_client = ctx - .service_provider - .get_azure_container_apps_client(&azure_config)?; - - match container_apps_client - .create_or_update_dapr_component( - &environment_resource_group, - &environment_name, - &component_name, - &dapr_component, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create Dapr component '{}' for storage trigger '{}'", - component_name, storage_ref.id - ), - resource_id: Some(worker_config.id.clone()), - })? { - OperationResult::Completed(_) => {} - OperationResult::LongRunning(lro) => { + match ensure_dapr_component( + container_apps_client.as_ref(), + &environment_resource_group, + &environment_name, + container_app_name, + &dapr_component, + &worker_config.id, + ) + .await? + { + DaprComponentEnsureOperation::Unchanged | DaprComponentEnsureOperation::Completed => {} + DaprComponentEnsureOperation::LongRunning(lro) => { self.pending_operation_url = Some(lro.url.clone()); self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); - return Ok(DaprComponentOperation::LongRunning( + return Ok(DaprComponentOperation::Creating( lro.retry_after.unwrap_or(Duration::from_secs(15)), )); } @@ -4711,80 +5090,6 @@ impl AzureWorkerController { self.dapr_components.push(component_name.clone()); } - let event_grid_client = ctx - .service_provider - .get_azure_event_grid_client(azure_config)?; - let event_subscription = match event_grid_client - .get_event_subscription(source_resource_id.clone(), event_subscription_name.clone()) - .await - { - Ok(event_subscription) => event_subscription, - Err(error) - if matches!( - error.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - let included_event_types = azure_storage_event_types(events, &worker_config.id)?; - event_grid_client - .create_or_update_event_subscription( - source_resource_id, - event_subscription_name.clone(), - EventSubscriptionRequest { - properties: EventSubscriptionRequestProperties { - destination: ServiceBusQueueDestination { - endpoint_type: "ServiceBusQueue".to_string(), - properties: ServiceBusQueueDestinationProperties { - resource_id: queue_resource_id, - }, - }, - filter: EventSubscriptionFilter { - included_event_types, - subject_begins_with: format!( - "/blobServices/default/containers/{}/blobs/", - container_name - ), - is_subject_case_sensitive: false, - }, - event_delivery_schema: "CloudEventSchemaV1_0".to_string(), - }, - }, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create Event Grid subscription '{}' for storage '{}'", - event_subscription_name, storage_ref.id - ), - resource_id: Some(worker_config.id.clone()), - })? - } - Err(error) => { - return Err(error.context(ErrorData::CloudPlatformError { - message: format!( - "Failed to inspect Event Grid subscription '{}' for storage '{}'", - event_subscription_name, storage_ref.id - ), - resource_id: Some(worker_config.id.clone()), - })); - } - }; - - if let Some(provisioning_state) = event_subscription - .properties - .and_then(|properties| properties.provisioning_state) - { - if !provisioning_state.eq_ignore_ascii_case("Succeeded") { - info!( - worker=%worker_config.id, - subscription=%event_subscription_name, - state=%provisioning_state, - "Waiting for Event Grid storage subscription" - ); - return Ok(DaprComponentOperation::Pending(Duration::from_secs(5))); - } - } - info!( worker=%worker_config.id, component=%component_name, @@ -4813,7 +5118,8 @@ impl AzureWorkerController { let resource_group_name = env_outputs.resource_group_name.clone(); let environment_name = env_outputs.environment_name.clone(); - let component_name = format!("cron-{}-{}", container_app_name, index); + let component_name = + get_azure_dapr_component_name(&format!("cron-{container_app_name}-{index}")); let dapr_component = DaprComponent { name: Some(component_name.clone()), @@ -4847,26 +5153,21 @@ impl AzureWorkerController { .service_provider .get_azure_container_apps_client(&azure_config)?; - match client - .create_or_update_dapr_component( - &resource_group_name, - &environment_name, - &component_name, - &dapr_component, - ) - .await - .context(ErrorData::CloudPlatformError { - message: format!( - "Failed to create Dapr cron component '{}' with schedule '{}'", - component_name, cron - ), - resource_id: Some(worker_config.id.clone()), - })? { - OperationResult::Completed(_) => {} - OperationResult::LongRunning(lro) => { + match ensure_dapr_component( + client.as_ref(), + &resource_group_name, + &environment_name, + container_app_name, + &dapr_component, + &worker_config.id, + ) + .await? + { + DaprComponentEnsureOperation::Unchanged | DaprComponentEnsureOperation::Completed => {} + DaprComponentEnsureOperation::LongRunning(lro) => { self.pending_operation_url = Some(lro.url.clone()); self.pending_operation_retry_after = lro.retry_after.map(|d| d.as_secs()); - return Ok(DaprComponentOperation::LongRunning( + return Ok(DaprComponentOperation::Creating( lro.retry_after.unwrap_or(Duration::from_secs(15)), )); } @@ -4886,178 +5187,40 @@ impl AzureWorkerController { Ok(DaprComponentOperation::Completed) } - async fn delete_storage_trigger_infrastructure( + /// Deletes tracked trigger components without touching a foreign component + /// that happens to share a historical name. + async fn delete_all_dapr_components( &mut self, ctx: &ResourceControllerContext<'_>, - ) -> Result<()> { - if self.storage_trigger_infrastructure.is_empty() { - return Ok(()); - } - - let azure_config = ctx.get_azure_config()?; - let event_grid_client = ctx - .service_provider - .get_azure_event_grid_client(azure_config)?; - let authorization_client = ctx - .service_provider - .get_azure_authorization_client(azure_config)?; - let service_bus_client = ctx - .service_provider - .get_azure_service_bus_management_client(azure_config)?; + ) -> Result { + let worker_config = ctx.desired_resource_config::()?; + let container_app_name = self.container_app_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker_config.id.clone(), + message: "Container app name not set in state".to_string(), + }) + })?; - for infrastructure in self.storage_trigger_infrastructure.clone() { - match event_grid_client - .delete_event_subscription( - infrastructure.source_resource_id.clone(), - infrastructure.event_subscription_name.clone(), - ) - .await + let Some(component_name) = self.dapr_components.first().cloned() else { + return Ok(TrackedDaprComponentDeleteStep::Complete); + }; + let step = self + .delete_tracked_dapr_component( + ctx, + &container_app_name, + &worker_config.id, + &component_name, + ) + .await?; + if matches!(step, TrackedDaprComponentDeleteStep::Mutated) { + self.dapr_components.retain(|name| name != &component_name); + if self.pending_dapr_component_deletion_name.as_deref() == Some(component_name.as_str()) { - Ok(()) => info!( - subscription=%infrastructure.event_subscription_name, - "Deleted Event Grid storage subscription" - ), - Err(error) => { - return Err(error.context(ErrorData::CloudPlatformError { - message: format!( - "Failed to delete Event Grid storage subscription '{}'", - infrastructure.event_subscription_name - ), - resource_id: Some(ctx.desired_config.id().to_string()), - })); - } - } - - if let Some(assignment_id) = infrastructure.receiver_role_assignment_id { - match authorization_client - .delete_role_assignment_by_id(assignment_id.clone()) - .await - { - Ok(_) => info!( - assignment_id=%assignment_id, - "Deleted storage-trigger receiver role assignment" - ), - Err(error) - if matches!( - error.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - info!( - assignment_id=%assignment_id, - "Storage-trigger receiver role assignment was already deleted" - ); - } - Err(error) => { - return Err(error.context(ErrorData::CloudPlatformError { - message: format!( - "Failed to delete storage-trigger receiver role assignment '{}'", - assignment_id - ), - resource_id: Some(ctx.desired_config.id().to_string()), - })); - } - } + self.pending_dapr_component_deletion_name = None; } - - match service_bus_client - .delete_queue( - infrastructure.service_bus_resource_group, - infrastructure.namespace_name, - infrastructure.queue_name.clone(), - ) - .await - { - Ok(()) => info!( - queue=%infrastructure.queue_name, - "Deleted storage-trigger Service Bus queue" - ), - Err(error) - if matches!( - error.error, - Some(CloudClientErrorData::RemoteResourceNotFound { .. }) - ) => - { - info!( - queue=%infrastructure.queue_name, - "Storage-trigger Service Bus queue was already deleted" - ); - } - Err(error) => { - return Err(error.context(ErrorData::CloudPlatformError { - message: format!( - "Failed to delete storage-trigger Service Bus queue '{}'", - infrastructure.queue_name - ), - resource_id: Some(ctx.desired_config.id().to_string()), - })); - } - } - } - - self.storage_trigger_infrastructure.clear(); - Ok(()) - } - - /// Deletes all Dapr components using best-effort approach - async fn delete_all_dapr_components( - &mut self, - ctx: &ResourceControllerContext<'_>, - ) -> Result<()> { - if self.dapr_components.is_empty() { - return Ok(()); - } - - let azure_config = ctx.get_azure_config()?; - // Dapr components live on the Container Apps Environment, which may be in a - // different resource group than the deployment (shared/external environments). - let env_outputs = get_container_apps_environment_outputs(ctx.state)?; - let resource_group_name = env_outputs.resource_group_name.clone(); - let environment_name = env_outputs.environment_name.clone(); - let worker_config = ctx.desired_resource_config::()?; - - let client = ctx - .service_provider - .get_azure_container_apps_client(&azure_config)?; - - for component_name in &self.dapr_components.clone() { - match client - .delete_dapr_component(&resource_group_name, &environment_name, component_name) - .await - { - Ok(_) => { - info!( - worker=%worker_config.id, - component=%component_name, - "Dapr component delete requested" - ); - } - Err(e) - if matches!( - e.error, - Some(alien_client_core::ErrorData::RemoteResourceNotFound { .. }) - ) => - { - info!( - worker=%worker_config.id, - component=%component_name, - "Dapr component was already deleted or doesn't exist" - ); - } - Err(e) => { - warn!( - worker=%worker_config.id, - component=%component_name, - error=%e, - "Failed to delete Dapr component during deletion" - ); - } - } - } - - self.dapr_components.clear(); - Ok(()) - } + } + Ok(step) + } /// Creates a controller in a ready state with mock values for testing purposes. #[cfg(feature = "test-utils")] @@ -5075,16 +5238,22 @@ impl AzureWorkerController { pending_operation_retry_after: None, dapr_components: Vec::new(), storage_trigger_infrastructure: Vec::new(), + storage_trigger_teardown_progress: AzureStorageTriggerTeardownProgress::default(), fqdn: None, certificate_id: None, keyvault_cert_id: None, container_apps_certificate_id: None, uses_custom_domain: false, certificate_issued_at: None, + commands_resource_group_name: None, commands_namespace_name: None, commands_queue_name: None, + commands_queue_applied: false, commands_dapr_component: None, + commands_dapr_component_deletion_candidates: Vec::new(), commands_sender_role_assignment_id: None, + commands_sender_role_assignment_intent: None, + commands_sender_role_assignment_discovery_complete: false, commands_receiver_role_assignment_id: None, commands_infrastructure_auth_wait_until_epoch_secs: None, container_apps_environment_wake_wait_until_epoch_secs: None, @@ -5093,1398 +5262,18 @@ impl AzureWorkerController { ready_rbac_wait_until_epoch_secs: None, update_rbac_wait_required: false, update_dapr_components_deleted: false, + dapr_component_naming_version: CURRENT_DAPR_COMPONENT_NAMING_VERSION, + pending_dapr_component_deletion_name: None, + dapr_component_deletion_candidates_initialized: false, + auxiliary_teardown_candidates_initialized: false, + commands_update_teardown_candidates_initialized: false, + trigger_update_teardown_candidates_initialized: false, + storage_delivery_update_reconciliation_initialized: false, _internal_stay_count: None, } } } #[cfg(test)] -mod tests { - //! # Azure Worker Controller Tests - //! - //! See `crate::core::controller_test` for a comprehensive guide on testing infrastructure controllers. - - use std::sync::Arc; - use std::time::Duration; - - use alien_azure_clients::models::container_apps::{ - Configuration, ConfigurationActiveRevisionsMode, ContainerApp, ContainerAppProperties, - ContainerAppPropertiesProvisioningState, TrafficWeight, - }; - use alien_azure_clients::{ - container_apps::MockContainerAppsApi, - long_running_operation::{ - LongRunningOperation, MockLongRunningOperationApi, OperationResult, - }, - }; - use alien_client_core::ErrorData as CloudClientErrorData; - use alien_core::{Platform, ResourceStatus, Worker, WorkerOutputs}; - use alien_error::{AlienError, ContextError}; - use httpmock::MockServer; - use rstest::rstest; - - use super::{ - azure_storage_event_types, current_unix_timestamp_secs, dns_name_from_url, - get_azure_storage_event_subscription_name, AZURE_RBAC_WAIT_POLL_SECS, - }; - use crate::core::{controller_test::SingleControllerExecutor, MockPlatformServiceProvider}; - use crate::error::ErrorData; - use crate::infra_requirements::azure_utils::is_azure_authorization_propagation_error; - use crate::worker::{ - fixtures::*, readiness_probe::test_utils::create_readiness_probe_mock, - AzureWorkerController, - }; - use crate::AzureWorkerState; - - #[test] - fn azure_storage_trigger_maps_only_supported_event_types() { - assert_eq!( - azure_storage_event_types( - &[ - "created".to_string(), - "deleted".to_string(), - "tierChanged".to_string(), - ], - "worker", - ) - .unwrap(), - vec![ - "Microsoft.Storage.BlobCreated", - "Microsoft.Storage.BlobDeleted", - "Microsoft.Storage.BlobTierChanged", - ] - ); - assert!(azure_storage_event_types(&["metadataUpdated".to_string()], "worker").is_err()); - } - - #[test] - fn azure_storage_event_subscription_name_is_stable_and_within_limit() { - let first = get_azure_storage_event_subscription_name( - "worker-with-a-very-long-name-that-needs-truncating", - "storage-with-a-very-long-name-that-needs-truncating", - ); - let second = get_azure_storage_event_subscription_name( - "worker-with-a-very-long-name-that-needs-truncating", - "storage-with-a-very-long-name-that-needs-truncating", - ); - assert_eq!(first, second); - assert!(first.len() <= 64); - assert!(first - .chars() - .all(|character| character.is_ascii_alphanumeric())); - } - - #[test] - fn strips_scheme_and_path_from_dns_endpoint_url() { - assert_eq!( - dns_name_from_url("https://app.example.azurecontainerapps.io/health"), - "app.example.azurecontainerapps.io" - ); - assert_eq!( - dns_name_from_url("app.example.azurecontainerapps.io."), - "app.example.azurecontainerapps.io" - ); - } - - #[test] - fn platform_domain_outputs_target_container_app_host_not_public_fqdn() { - let mut controller = AzureWorkerController::mock_ready("test-worker"); - controller.fqdn = Some("test-worker.public.example.com".to_string()); - controller.certificate_id = Some("cert_123".to_string()); - controller.url = Some("https://test-worker.azurecontainerapps.io".to_string()); - - let outputs = controller.build_outputs().unwrap(); - let worker_outputs = outputs.downcast_ref::().unwrap(); - let endpoint = worker_outputs - .public_endpoints - .get("default") - .expect("default public endpoint"); - - assert_eq!( - endpoint.url.as_str(), - "https://test-worker.azurecontainerapps.io" - ); - assert_eq!( - endpoint - .load_balancer_endpoint - .as_ref() - .map(|endpoint| endpoint.dns_name.as_str()), - Some("test-worker.azurecontainerapps.io") - ); - } - - #[test] - fn dns_target_is_ingress_host_when_url_is_overridden_to_public_fqdn() { - // Regression: when `url` is overridden to the public display FQDN (from `public_urls`), the - // CNAME target must still be the Container App ingress host. Otherwise the record name (the - // public FQDN) and the target collide into a self-referential CNAME, which the DNS provider - // rejects — the bug that deadlocked the Azure worker in `waitingForDns`. - let mut controller = AzureWorkerController::mock_ready("test-worker"); - controller.url = Some("https://test-worker.abc123.dev.vpc.direct".to_string()); - controller.container_app_url = - Some("https://test-worker.kindsky.eastus2.azurecontainerapps.io".to_string()); - - let outputs = controller.build_outputs().unwrap(); - let worker_outputs = outputs.downcast_ref::().unwrap(); - let endpoint = worker_outputs - .public_endpoints - .get("default") - .expect("default public endpoint"); - - // Display URL stays the public FQDN. - assert_eq!( - endpoint.url.as_str(), - "https://test-worker.abc123.dev.vpc.direct" - ); - // The CNAME target is the ingress host — and crucially NOT the record's own public FQDN. - let dns_name = endpoint - .load_balancer_endpoint - .as_ref() - .map(|endpoint| endpoint.dns_name.as_str()); - assert_eq!( - dns_name, - Some("test-worker.kindsky.eastus2.azurecontainerapps.io") - ); - assert_ne!(dns_name, Some("test-worker.abc123.dev.vpc.direct")); - } - - #[tokio::test] - async fn imported_worker_heartbeat_rebuilds_ingress_host_for_dns() { - // Regression for the create-path-only gap: an imported worker starts Ready with - // `container_app_url = None` and `url` = the public display FQDN (the importer skips the - // create flow). The heartbeat must rebuild `container_app_url` from the live Container App, - // so the DNS CNAME targets the ingress host rather than the self-referential public FQDN. - let app_name = "test-imported-worker"; - let mut mock = MockContainerAppsApi::new(); - mock.expect_get_container_app() - .returning(move |_, _| Ok(create_successful_container_app_response(app_name, true))) - .times(0..); - let mock_provider = setup_mock_service_provider(Arc::new(mock), None); - - // Imported shape: ingress host unset, url is the public display FQDN. - let mut controller = AzureWorkerController::mock_ready(app_name); - controller.container_app_url = None; - controller.url = Some("https://test-imported-worker.abc123.dev.vpc.direct".to_string()); - - let mut executor = SingleControllerExecutor::builder() - .resource(basic_function()) - .controller(controller) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - // The heartbeat rebuilt the ingress host… - assert_eq!( - controller.container_app_url.as_deref(), - Some("https://test-imported-worker.azurecontainerapps.io") - ); - // …so build_outputs targets it, NOT the public display FQDN. - let outputs = controller.build_outputs().unwrap(); - let worker_outputs = outputs.downcast_ref::().unwrap(); - let endpoint = worker_outputs - .public_endpoints - .get("default") - .expect("default public endpoint"); - let dns_name = endpoint - .load_balancer_endpoint - .as_ref() - .map(|endpoint| endpoint.dns_name.as_str()); - assert_eq!(dns_name, Some("test-imported-worker.azurecontainerapps.io")); - assert_ne!(dns_name, Some("test-imported-worker.abc123.dev.vpc.direct")); - } - - #[test] - fn detects_azure_authorization_propagation_error_from_http_context() { - let http_error = AlienError::new(CloudClientErrorData::HttpResponseError { - message: "Azure CreateOrUpdateDaprComponent failed: HTTP 403 Forbidden".to_string(), - url: "https://management.azure.com/test".to_string(), - http_status: 403, - http_request_text: None, - http_response_text: Some( - "{\"error\":{\"code\":\"AuthorizationFailed\",\"message\":\"The client does not have authorization to perform action. If access was recently granted, please refresh your credentials.\"}}" - .to_string(), - ), - }); - - let error = http_error.context(ErrorData::CloudPlatformError { - message: "Failed to create commands Dapr component".to_string(), - resource_id: Some("alien-rs-fn".to_string()), - }); - - assert!(is_azure_authorization_propagation_error(&error)); - } - - #[test] - fn ignores_non_authorization_cloud_platform_errors() { - let error = AlienError::new(ErrorData::CloudPlatformError { - message: "Failed to create commands Dapr component".to_string(), - resource_id: Some("alien-rs-fn".to_string()), - }); - - assert!(!is_azure_authorization_propagation_error(&error)); - } - - fn create_successful_container_app_response(app_name: &str, has_url: bool) -> ContainerApp { - let fqdn = if has_url { - Some(format!("{}.azurecontainerapps.io", app_name)) - } else { - None - }; - - let ingress = if has_url { - Some(alien_azure_clients::models::container_apps::Ingress { - external: true, - target_port: Some(8080), - fqdn: fqdn.clone(), - traffic: vec![alien_azure_clients::models::container_apps::TrafficWeight { - latest_revision: true, - weight: Some(100), - revision_name: None, - label: None, - }], - transport: alien_azure_clients::models::container_apps::IngressTransport::Auto, - allow_insecure: false, - additional_port_mappings: vec![], - custom_domains: vec![], - ip_security_restrictions: vec![], - cors_policy: None, - client_certificate_mode: None, - exposed_port: None, - sticky_sessions: None, - }) - } else { - None - }; - - ContainerApp { - id: Some(format!( - "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.App/containerApps/{}", - app_name - )), - name: Some(app_name.to_string()), - location: "East US".to_string(), - properties: Some(ContainerAppProperties { - provisioning_state: Some(ContainerAppPropertiesProvisioningState::Succeeded), - configuration: Some(Configuration { - ingress, - active_revisions_mode: ConfigurationActiveRevisionsMode::Single, - identity_settings: vec![], - registries: vec![], - secrets: vec![], - dapr: None, - max_inactive_revisions: None, - runtime: None, - service: None, - }), - outbound_ip_addresses: vec![], - custom_domain_verification_id: None, - environment_id: None, - event_stream_endpoint: None, - latest_ready_revision_name: None, - latest_revision_fqdn: None, - latest_revision_name: None, - managed_environment_id: None, - running_status: None, - template: None, - workload_profile_name: None, - }), - tags: std::collections::HashMap::new(), - extended_location: None, - identity: None, - managed_by: None, - system_data: None, - type_: None, - } - } - - fn create_in_progress_container_app_response(app_name: &str) -> ContainerApp { - ContainerApp { - id: Some(format!( - "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.App/containerApps/{}", - app_name - )), - name: Some(app_name.to_string()), - location: "East US".to_string(), - properties: Some(ContainerAppProperties { - provisioning_state: Some(ContainerAppPropertiesProvisioningState::InProgress), - outbound_ip_addresses: vec![], - custom_domain_verification_id: None, - environment_id: None, - event_stream_endpoint: None, - latest_ready_revision_name: None, - latest_revision_fqdn: None, - latest_revision_name: None, - managed_environment_id: None, - running_status: None, - template: None, - workload_profile_name: None, - configuration: None, - }), - tags: std::collections::HashMap::new(), - extended_location: None, - identity: None, - managed_by: None, - system_data: None, - type_: None, - } - } - - fn setup_mock_client_for_creation_and_update( - app_name: &str, - has_url: bool, - ) -> Arc { - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Mock successful app creation - immediate completion - let app_name = app_name.to_string(); - let app_name_for_create = app_name.clone(); - mock_container_apps - .expect_create_or_update_container_app() - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name_for_create, has_url), - )) - }); - - // Mock successful updates - immediate completion - let app_name_for_update = app_name.clone(); - mock_container_apps - .expect_update_container_app() - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name_for_update, has_url), - )) - }); - - // Mock get operations - may be called multiple times during creation and update flows - let app_name_for_get = app_name.clone(); - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| { - Ok(create_successful_container_app_response( - &app_name_for_get, - has_url, - )) - }) - .times(0..); // Allow 0 or more calls - - Arc::new(mock_container_apps) - } - - fn setup_mock_client_for_creation_and_deletion( - app_name: &str, - has_url: bool, - ) -> Arc { - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Mock successful app creation - immediate completion - let app_name = app_name.to_string(); - let app_name_for_create = app_name.clone(); - mock_container_apps - .expect_create_or_update_container_app() - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name_for_create, has_url), - )) - }); - - // Mock successful deletion - immediate completion - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - - // Mock get operations during creation (may be called multiple times) - let app_name_for_get_creation = app_name.clone(); - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| { - Ok(create_successful_container_app_response( - &app_name_for_get_creation, - has_url, - )) - }) - .times(0..); // Allow 0 or more calls during creation - - // Mock get operation failure for deletion verification - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }) - .times(0..); - - Arc::new(mock_container_apps) - } - - fn setup_mock_client_for_long_running_creation( - app_name: &str, - has_url: bool, - ) -> (Arc, Arc) { - let mut mock_container_apps = MockContainerAppsApi::new(); - let mut mock_lro = MockLongRunningOperationApi::new(); - - // Mock creation that starts as long-running - // Use minimal retry_after for fast tests (actual Azure would use seconds) - let app_name = app_name.to_string(); - mock_container_apps - .expect_create_or_update_container_app() - .returning(|_, _, _| { - Ok(OperationResult::LongRunning(LongRunningOperation { - url: "https://management.azure.com/subscriptions/.../operations/test-op" - .to_string(), - retry_after: Some(Duration::from_millis(10)), - location_url: None, - })) - }); - - // Mock LRO polling - first incomplete, then complete - mock_lro - .expect_check_status() - .returning(|_, _, _| Ok(None)) // Still running - .times(1); - - mock_lro - .expect_check_status() - .returning(|_, _, _| Ok(Some("completed".to_string()))) // Completed - .times(1); - - // Mock get operations showing progression - let app_name_for_get1 = app_name.clone(); - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| { - Ok(create_in_progress_container_app_response( - &app_name_for_get1, - )) - }) - .times(1); - - let app_name_for_get2 = app_name.clone(); - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| { - Ok(create_successful_container_app_response( - &app_name_for_get2, - has_url, - )) - }); - - (Arc::new(mock_container_apps), Arc::new(mock_lro)) - } - - fn setup_mock_client_for_best_effort_deletion( - _app_name: &str, - app_missing: bool, - ) -> Arc { - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Mock deletion (might fail if app missing) - if app_missing { - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }); - } else { - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - } - - // Always return not found for final status check - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }); - - Arc::new(mock_container_apps) - } - - fn setup_mock_service_provider( - mock_container_apps: Arc, - mock_lro: Option>, - ) -> Arc { - let mut mock_provider = MockPlatformServiceProvider::new(); - - mock_provider - .expect_get_azure_container_apps_client() - .returning(move |_| Ok(mock_container_apps.clone())); - - if let Some(lro_client) = mock_lro { - mock_provider - .expect_get_azure_long_running_operation_client() - .returning(move |_| Ok(lro_client.clone())); - } - - // Mock Azure authorization client for resource-scoped permissions - mock_provider - .expect_get_azure_authorization_client() - .returning(|_| { - use alien_azure_clients::authorization::MockAuthorizationApi; - let mut mock_auth = MockAuthorizationApi::new(); - mock_auth - .expect_create_or_update_role_definition() - .returning(|_, _, role_def| Ok(role_def.clone())); - mock_auth - .expect_build_role_assignment_id() - .returning(|_, name| { - format!( - "/test/providers/Microsoft.Authorization/roleAssignments/{}", - name - ) - }); - mock_auth - .expect_create_or_update_role_assignment_by_id() - .returning(|_, role_assignment| Ok(role_assignment.clone())); - mock_auth - .expect_delete_role_assignment_by_id() - .returning(|_| Ok(None)); - Ok(Arc::new(mock_auth)) - }); - - Arc::new(mock_provider) - } - - /// Sets up mock Container Apps client and optional readiness probe mock server - /// Returns (container_apps_mock_provider, optional_mock_server) - fn setup_mocks_for_function( - worker: &Worker, - app_name: &str, - for_deletion: bool, - ) -> (Arc, Option) { - let has_url = !worker.public_endpoints.is_empty(); - let needs_readiness_probe = has_url && worker.readiness_probe.is_some(); - - // Set up mock server for readiness probe if needed - let mock_server = if needs_readiness_probe { - Some(create_readiness_probe_mock(worker)) - } else { - None - }; - - // Set up Container Apps client mock - create custom response if we need to override URL - let container_apps_mock = if needs_readiness_probe && mock_server.is_some() { - // Create custom mock that returns the mock server URL - let mock_server_url = mock_server.as_ref().unwrap().base_url(); - setup_mock_client_with_custom_url(app_name, &mock_server_url, for_deletion) - } else if for_deletion { - setup_mock_client_for_creation_and_deletion(app_name, has_url) - } else { - setup_mock_client_for_creation_and_update(app_name, has_url) - }; - - let mock_provider = setup_mock_service_provider(container_apps_mock, None); - - (mock_provider, mock_server) - } - - fn setup_mock_client_with_custom_url( - app_name: &str, - custom_url: &str, - for_deletion: bool, - ) -> Arc { - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Create a container app response with custom URL - let custom_response = create_container_app_with_custom_url(app_name, custom_url); - - // Mock successful app creation - let response_for_create = custom_response.clone(); - mock_container_apps - .expect_create_or_update_container_app() - .returning(move |_, _, _| Ok(OperationResult::Completed(response_for_create.clone()))); - - if for_deletion { - // Mock successful deletion - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - - // Mock get operations during creation (may be called multiple times) - let response_for_get_creation = custom_response.clone(); - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| Ok(response_for_get_creation.clone())) - .times(0..); - - // Mock get operation failure for deletion verification - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }) - .times(0..); - } else { - // Mock successful updates - let response_for_update = custom_response.clone(); - mock_container_apps - .expect_update_container_app() - .returning(move |_, _, _| { - Ok(OperationResult::Completed(response_for_update.clone())) - }); - - // Mock get operations (may be called multiple times) - let response_for_get = custom_response.clone(); - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| Ok(response_for_get.clone())) - .times(0..); - } - - Arc::new(mock_container_apps) - } - - fn create_container_app_with_custom_url(app_name: &str, custom_url: &str) -> ContainerApp { - // For tests, just extract the host and port from the URL string - let url_without_protocol = custom_url.strip_prefix("http://").unwrap_or(custom_url); - let (host, _port) = if let Some(colon_pos) = url_without_protocol.find(':') { - let host = &url_without_protocol[..colon_pos]; - let port_str = &url_without_protocol[colon_pos + 1..]; - let port = port_str.parse::().unwrap_or(80); - (host, Some(port)) - } else { - (url_without_protocol, None) - }; - - // Create FQDN that matches the custom URL - let _fqdn = if let Some(port) = _port { - format!("{}:{}", host, port) - } else { - host.to_string() - }; - - let ingress = Some(alien_azure_clients::models::container_apps::Ingress { - external: true, - target_port: Some(8080), - fqdn: Some(custom_url.to_string()), // Use the full URL as FQDN for the test - traffic: vec![alien_azure_clients::models::container_apps::TrafficWeight { - latest_revision: true, - weight: Some(100), - revision_name: None, - label: None, - }], - transport: alien_azure_clients::models::container_apps::IngressTransport::Auto, - allow_insecure: false, - additional_port_mappings: vec![], - custom_domains: vec![], - ip_security_restrictions: vec![], - cors_policy: None, - client_certificate_mode: None, - exposed_port: None, - sticky_sessions: None, - }); - - ContainerApp { - id: Some(format!( - "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.App/containerApps/{}", - app_name - )), - name: Some(app_name.to_string()), - location: "East US".to_string(), - properties: Some(ContainerAppProperties { - provisioning_state: Some(ContainerAppPropertiesProvisioningState::Succeeded), - configuration: Some(Configuration { - ingress, - active_revisions_mode: ConfigurationActiveRevisionsMode::Single, - identity_settings: vec![], - registries: vec![], - secrets: vec![], - dapr: None, - max_inactive_revisions: None, - runtime: None, - service: None, - }), - outbound_ip_addresses: vec![], - custom_domain_verification_id: None, - environment_id: None, - event_stream_endpoint: None, - latest_ready_revision_name: None, - latest_revision_fqdn: None, - latest_revision_name: None, - managed_environment_id: None, - running_status: None, - template: None, - workload_profile_name: None, - }), - tags: std::collections::HashMap::new(), - extended_location: None, - identity: None, - managed_by: None, - system_data: None, - type_: None, - } - } - - async fn executor_for_wait_state( - controller: AzureWorkerController, - ) -> SingleControllerExecutor { - SingleControllerExecutor::builder() - .resource(basic_function()) - .controller(controller) - .platform(Platform::Azure) - .service_provider(Arc::new(MockPlatformServiceProvider::new())) - .with_test_dependencies() - .build() - .await - .unwrap() - } - - #[tokio::test] - async fn test_pre_container_app_rbac_wait_holds_state_when_woken_early() { - let deadline = current_unix_timestamp_secs().saturating_add(60); - let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); - controller.state = AzureWorkerState::WaitingBeforeContainerAppCreation; - controller.pre_container_app_rbac_wait_until_epoch_secs = Some(deadline); - - let mut executor = executor_for_wait_state(controller).await; - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Provisioning); - assert_eq!( - controller.state, - AzureWorkerState::WaitingBeforeContainerAppCreation - ); - assert_eq!( - step_result.suggested_delay, - Some(Duration::from_secs(AZURE_RBAC_WAIT_POLL_SECS)) - ); - assert_eq!( - controller.pre_container_app_rbac_wait_until_epoch_secs, - Some(deadline) - ); - } - - #[tokio::test] - async fn test_ready_rbac_wait_holds_state_when_woken_early() { - let deadline = current_unix_timestamp_secs().saturating_add(60); - let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); - controller.state = AzureWorkerState::WaitingForRbacPropagation; - controller.ready_rbac_wait_until_epoch_secs = Some(deadline); - - let mut executor = executor_for_wait_state(controller).await; - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Provisioning); - assert_eq!( - controller.state, - AzureWorkerState::WaitingForRbacPropagation - ); - assert_eq!( - step_result.suggested_delay, - Some(Duration::from_secs(AZURE_RBAC_WAIT_POLL_SECS)) - ); - assert_eq!(controller.ready_rbac_wait_until_epoch_secs, Some(deadline)); - } - - #[tokio::test] - async fn test_ready_rbac_wait_advances_after_deadline() { - let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); - controller.state = AzureWorkerState::WaitingForRbacPropagation; - controller.ready_rbac_wait_until_epoch_secs = - Some(current_unix_timestamp_secs().saturating_sub(1)); - - let mut executor = executor_for_wait_state(controller).await; - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Provisioning); - assert_eq!(controller.state, AzureWorkerState::RunningReadinessProbe); - assert_eq!(step_result.suggested_delay, None); - assert_eq!(controller.ready_rbac_wait_until_epoch_secs, None); - - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Running); - assert_eq!(controller.state, AzureWorkerState::Ready); - assert_eq!(step_result.suggested_delay, None); - } - - #[tokio::test] - async fn test_update_rbac_wait_holds_and_clears() { - let deadline = current_unix_timestamp_secs().saturating_add(60); - let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); - controller.state = AzureWorkerState::UpdateWaitingForRbacPropagation; - controller.ready_rbac_wait_until_epoch_secs = Some(deadline); - controller.update_rbac_wait_required = true; - - let mut executor = executor_for_wait_state(controller).await; - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Updating); - assert_eq!( - controller.state, - AzureWorkerState::UpdateWaitingForRbacPropagation - ); - assert_eq!( - step_result.suggested_delay, - Some(Duration::from_secs(AZURE_RBAC_WAIT_POLL_SECS)) - ); - assert_eq!(controller.ready_rbac_wait_until_epoch_secs, Some(deadline)); - assert!(controller.update_rbac_wait_required); - - let mut controller = controller.clone(); - controller.ready_rbac_wait_until_epoch_secs = - Some(current_unix_timestamp_secs().saturating_sub(1)); - let mut executor = executor_for_wait_state(controller).await; - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Updating); - assert_eq!( - controller.state, - AzureWorkerState::UpdateRunningReadinessProbe - ); - assert_eq!(step_result.suggested_delay, None); - assert_eq!(controller.ready_rbac_wait_until_epoch_secs, None); - assert!(!controller.update_rbac_wait_required); - - let step_result = executor.step().await.unwrap(); - let controller = executor.internal_state::().unwrap(); - - assert_eq!(executor.status(), ResourceStatus::Running); - assert_eq!(controller.state, AzureWorkerState::Ready); - assert_eq!(step_result.suggested_delay, None); - } - - // ─────────────── CREATE AND DELETE FLOW TESTS ──────────────────── - - #[rstest] - #[case::basic(basic_function())] - #[case::env_vars(function_with_env_vars())] - #[case::storage_link(function_with_storage_link())] - #[case::env_and_storage(function_with_env_and_storage())] - #[case::multiple_storages(function_with_multiple_storages())] - #[case::public_ingress(function_public_ingress())] - #[case::private_ingress(function_private_ingress())] - #[case::concurrency(function_with_concurrency())] - #[case::custom_config(function_custom_config())] - #[case::readiness_probe(function_with_readiness_probe())] - #[case::complete_test(function_complete_test())] - #[tokio::test] - async fn test_create_and_delete_flow_succeeds(#[case] worker: Worker) { - let app_name = format!("test-{}", worker.id); - let (mock_provider, _mock_server) = setup_mocks_for_function(&worker, &app_name, true); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(AzureWorkerController::default()) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - // Run create flow - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - - // Verify outputs are available - let outputs = executor.outputs().unwrap(); - let function_outputs = outputs.downcast_ref::().unwrap(); - assert!(function_outputs.identifier.is_some()); - assert!(function_outputs.worker_name.starts_with("test-")); - - // Delete the worker - executor.delete().unwrap(); - - // Run delete flow - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Deleted); - - // Verify outputs are no longer available - assert!(executor.outputs().is_none()); - } - - // ─────────────── UPDATE FLOW TESTS ──────────────────────────────── - - #[rstest] - #[case::basic_to_env(basic_function(), function_with_env_vars())] - #[case::env_to_storage(function_with_env_vars(), function_with_storage_link())] - #[case::storage_to_custom(function_with_storage_link(), function_custom_config())] - #[case::custom_to_public(function_custom_config(), function_public_ingress())] - #[case::public_to_complete(function_public_ingress(), function_complete_test())] - #[case::complete_to_basic(function_complete_test(), basic_function())] - #[tokio::test] - async fn test_update_flow_succeeds(#[case] from_function: Worker, #[case] to_function: Worker) { - // Ensure both workers have the same ID for valid updates - let worker_id = "test-update-worker".to_string(); - let mut from_function = from_function; - from_function.id = worker_id.clone(); - - let mut to_function = to_function; - to_function.id = worker_id.clone(); - - let app_name = format!("test-{}", worker_id); - let (mock_provider, mock_server) = setup_mocks_for_function(&to_function, &app_name, false); - - // Start with the "from" worker in Ready state - let mut ready_controller = AzureWorkerController::mock_ready(&app_name); - - // If the target worker has a readiness probe, update the controller URL to point to mock server - if to_function.readiness_probe.is_some() && !to_function.public_endpoints.is_empty() { - if let Some(ref server) = mock_server { - ready_controller.url = Some(server.base_url()); - } - } else if !to_function.public_endpoints.is_empty() { - // Ensure the controller has a URL for public workers - ready_controller.url = Some(format!("https://{}.azurecontainerapps.io", app_name)); - } - - let mut executor = SingleControllerExecutor::builder() - .resource(from_function) - .controller(ready_controller) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - // Ensure we start in Running state - assert_eq!(executor.status(), ResourceStatus::Running); - - // Update to the new worker - executor.update(to_function).unwrap(); - - // Run the update flow - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - } - - // ─────────────── BEST EFFORT DELETION TESTS ─────────────────────── - - #[rstest] - #[case::basic(basic_function(), false)] - #[case::public_with_missing_app(function_public_ingress(), true)] - #[case::private_with_missing_app(function_private_ingress(), true)] - #[tokio::test] - async fn test_best_effort_deletion_when_resources_missing( - #[case] worker: Worker, - #[case] app_missing: bool, - ) { - let app_name = format!("test-{}", worker.id); - let mock_container_apps = - setup_mock_client_for_best_effort_deletion(&app_name, app_missing); - let mock_provider = setup_mock_service_provider(mock_container_apps, None); - - // Start with a ready controller - let mut ready_controller = AzureWorkerController::mock_ready(&app_name); - if !worker.public_endpoints.is_empty() { - ready_controller.url = Some(format!("https://{}.azurecontainerapps.io", app_name)); - } - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(ready_controller) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - // Ensure we start in Running state - assert_eq!(executor.status(), ResourceStatus::Running); - - // Delete the worker - executor.delete().unwrap(); - - // Run the delete flow - it should succeed even when resources are missing - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Deleted); - - // Verify outputs are no longer available - assert!(executor.outputs().is_none()); - } - - // ─────────────── LONG RUNNING OPERATION TESTS ────────────────────── - - #[tokio::test] - async fn test_long_running_creation_operation() { - let worker = basic_function(); - let app_name = format!("test-{}", worker.id); - let (mock_container_apps, mock_lro) = - setup_mock_client_for_long_running_creation(&app_name, false); - let mock_provider = setup_mock_service_provider(mock_container_apps, Some(mock_lro)); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(AzureWorkerController::default()) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - // Run create flow - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - - // Verify the controller went through LRO states - let controller = executor.internal_state::().unwrap(); - assert!(controller.container_app_name.is_some()); - assert!(controller.resource_id.is_some()); - } - - // ─────────────── SPECIFIC VALIDATION TESTS ───────────────── - - /// Test that verifies public workers get URL in outputs - #[tokio::test] - async fn test_public_function_gets_url_in_outputs() { - let worker = function_public_ingress(); - let app_name = format!("test-{}", worker.id); - - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Mock creation with URL - mock_container_apps - .expect_create_or_update_container_app() - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name, true), - )) - }); - - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }); - - let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(AzureWorkerController::default()) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - - // Verify URL is in outputs - let outputs = executor.outputs().unwrap(); - let function_outputs = outputs.downcast_ref::().unwrap(); - let endpoint = function_outputs - .public_endpoints - .get("default") - .expect("default public endpoint"); - assert!(endpoint.url.contains("azurecontainerapps.io")); - } - - /// Test that verifies private workers don't get URL in outputs - #[tokio::test] - async fn test_private_function_has_no_url_in_outputs() { - let worker = function_private_ingress(); - let app_name = format!("test-{}", worker.id); - - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Mock creation without URL - mock_container_apps - .expect_create_or_update_container_app() - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name, false), - )) - }); - - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }); - - let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(AzureWorkerController::default()) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - - // Verify no URL in outputs - let outputs = executor.outputs().unwrap(); - let function_outputs = outputs.downcast_ref::().unwrap(); - assert!(function_outputs.public_endpoints.is_empty()); - } - - /// Test that verifies correct container app configuration parameters - #[tokio::test] - async fn test_container_app_configuration_validation() { - let worker = function_custom_config(); - let app_name = format!("test-{}", worker.id); - - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Validate container app creation request has correct parameters - let app_name_for_response = app_name.clone(); - mock_container_apps - .expect_create_or_update_container_app() - .withf(|_rg, _name, container_app| { - // Check that the container has correct resource configuration - if let Some(properties) = &container_app.properties { - if let Some(template) = &properties.template { - if let Some(container) = template.containers.first() { - if let Some(resources) = &container.resources { - // function_custom_config has 512MB memory - let expected_memory = format!("{}Gi", 512.0 / 1024.0); - return resources.memory.as_ref() == Some(&expected_memory) - && resources.cpu == Some(0.25); - } - } - } - } - false - }) - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name_for_response, false), - )) - }); - - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - - // Allow get_container_app calls during creation (may be called 0 or more times) - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| Ok(create_successful_container_app_response(&app_name, false))) - .times(0..); - - // Mock get operation failure for deletion verification - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }) - .times(0..); - - let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(AzureWorkerController::default()) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - } - - /// Test that verifies environment variables are correctly passed - #[tokio::test] - async fn test_environment_variable_handling() { - let worker = function_with_env_vars(); - let app_name = format!("test-{}", worker.id); - - let mut mock_container_apps = MockContainerAppsApi::new(); - - // Validate container app creation request has environment variables - let app_name_for_response = app_name.clone(); - mock_container_apps - .expect_create_or_update_container_app() - .withf(|_rg, _name, container_app| { - if let Some(properties) = &container_app.properties { - if let Some(template) = &properties.template { - if let Some(container) = template.containers.first() { - // Check that environment variables are present - let has_app_env = container.env.iter().any(|env_var| { - env_var.name.as_deref() == Some("APP_ENV") - && env_var.value.as_deref() == Some("production") - }); - let has_log_level = container.env.iter().any(|env_var| { - env_var.name.as_deref() == Some("LOG_LEVEL") - && env_var.value.as_deref() == Some("debug") - }); - let has_db_name = container.env.iter().any(|env_var| { - env_var.name.as_deref() == Some("DB_NAME") - && env_var.value.as_deref() == Some("myapp") - }); - return has_app_env && has_log_level && has_db_name; - } - } - } - false - }) - .returning(move |_, _, _| { - Ok(OperationResult::Completed( - create_successful_container_app_response(&app_name_for_response, false), - )) - }); - - mock_container_apps - .expect_delete_container_app() - .returning(|_, _| Ok(OperationResult::Completed(()))); - - // Allow get_container_app calls during creation (may be called 0 or more times) - mock_container_apps - .expect_get_container_app() - .returning(move |_, _| Ok(create_successful_container_app_response(&app_name, false))) - .times(0..); - - // Mock get operation failure for deletion verification - mock_container_apps - .expect_get_container_app() - .returning(|_, _| { - Err(AlienError::new( - CloudClientErrorData::RemoteResourceNotFound { - resource_type: "ContainerApp".to_string(), - resource_name: "test-app".to_string(), - }, - )) - }) - .times(0..); - - let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(AzureWorkerController::default()) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Running); - } - - /// Test that verifies deletion works when container_app_name is not set (early creation failure) - #[tokio::test] - async fn test_delete_with_no_container_app_name_succeeds() { - let worker = basic_function(); - - // Create a controller with no container app name set (simulating early creation failure) - let controller = AzureWorkerController { - state: AzureWorkerState::CreateFailed, - container_app_name: None, // This is the key - no container app name set - resource_id: None, - url: None, - container_app_url: None, - pending_operation_url: None, - pending_operation_retry_after: None, - dapr_components: Vec::new(), - storage_trigger_infrastructure: Vec::new(), - fqdn: None, - certificate_id: None, - keyvault_cert_id: None, - container_apps_certificate_id: None, - uses_custom_domain: false, - certificate_issued_at: None, - commands_namespace_name: None, - commands_queue_name: None, - commands_dapr_component: None, - commands_sender_role_assignment_id: None, - commands_receiver_role_assignment_id: None, - commands_infrastructure_auth_wait_until_epoch_secs: None, - container_apps_environment_wake_wait_until_epoch_secs: None, - container_apps_environment_wake_retry_after_epoch_secs: None, - pre_container_app_rbac_wait_until_epoch_secs: None, - ready_rbac_wait_until_epoch_secs: None, - update_rbac_wait_required: false, - update_dapr_components_deleted: false, - _internal_stay_count: None, - }; - - // Mock provider - no expectations since no API calls should be made - let mock_provider = Arc::new(MockPlatformServiceProvider::new()); - - let mut executor = SingleControllerExecutor::builder() - .resource(worker) - .controller(controller) - .platform(Platform::Azure) - .service_provider(mock_provider) - .with_test_dependencies() - .build() - .await - .unwrap(); - - // Start in CreateFailed state - assert_eq!(executor.status(), ResourceStatus::ProvisionFailed); - - // Delete the worker - executor.delete().unwrap(); - - // Run the delete flow - should succeed without making any API calls - executor.run_until_terminal().await.unwrap(); - assert_eq!(executor.status(), ResourceStatus::Deleted); - - // Verify outputs are no longer available - assert!(executor.outputs().is_none()); - } -} +#[path = "azure_tests.rs"] +mod tests; diff --git a/crates/alien-infra/src/worker/azure_cleanup.rs b/crates/alien-infra/src/worker/azure_cleanup.rs new file mode 100644 index 000000000..99caa4981 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_cleanup.rs @@ -0,0 +1,680 @@ +use super::{ + get_azure_storage_event_subscription_name, AzureStorageTriggerInfrastructure, + AzureStorageTriggerTeardownProgress, AzureWorkerController, CommandsSenderReconcileResult, + CommandsTeardownResult, StorageTriggerTeardownResult, +}; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_core::{ResourceRef, Worker}; +use alien_error::{AlienError, ContextError}; +use std::time::Duration; +use tracing::info; + +use crate::core::ResourceControllerContext; +use crate::error::{ErrorData, Result}; +use crate::infra_requirements::azure_utils::{ + get_container_apps_environment_outputs, get_resource_group_name, +}; +use crate::worker::azure::role_assignments::discover_proven_role_assignments; +use crate::worker::azure::trigger_targets::storage_trigger_receiver_role_definition_id; +use crate::worker::azure_dapr_components::{ + delete_dapr_component_if_owned, DaprComponentDeleteOperation, +}; +use crate::worker::azure_dapr_names_migration::commands_component_removal_names; +use crate::worker::azure_names::{ + commands_queue_name, service_bus_queue_scope, storage_trigger_queue_name, + storage_trigger_receiver_role_assignment_name, +}; + +fn commands_queue_cleanup_target( + resource_group_name: Option, + namespace_name: Option, + queue_name: Option, + worker_id: &str, +) -> Result> { + match (resource_group_name, namespace_name, queue_name) { + (Some(resource_group_name), Some(namespace_name), Some(queue_name)) => { + Ok(Some((resource_group_name, namespace_name, queue_name))) + } + (None, None, None) => Ok(None), + (resource_group_name, namespace_name, queue_name) => Err(AlienError::new( + ErrorData::ResourceControllerConfigError { + resource_id: worker_id.to_string(), + message: format!( + "Commands cleanup state is incomplete: resource_group={resource_group_name:?}, namespace={namespace_name:?}, queue={queue_name:?}" + ), + }, + )), + } +} + +pub(super) struct AzureCommandsQueueTarget { + pub(super) resource_group_name: String, + pub(super) namespace_name: String, + pub(super) queue_name: String, +} + +pub(super) enum CommandsQueueTargetPreparation { + Ready, + Checkpoint, + LongRunning(Duration), +} + +impl AzureWorkerController { + pub(super) fn commands_cleanup_target( + &self, + worker_id: &str, + ) -> Result> { + commands_queue_cleanup_target( + self.commands_resource_group_name.clone(), + self.commands_namespace_name.clone(), + self.commands_queue_name.clone(), + worker_id, + ) + } + + pub(super) async fn prepare_commands_target_for_setup( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + desired: &AzureCommandsQueueTarget, + ) -> Result { + // Controllers written before commands resource-group tracking contain + // exactly namespace+queue. Preserve that historical target first, + // even when the namespace dependency has since rotated, so teardown + // can run against the old namespace instead of deadlocking on a + // malformed partial triple. Other partial shapes remain fail-closed. + if self.commands_resource_group_name.is_none() + && self.commands_namespace_name.is_some() + && self.commands_queue_name.is_some() + { + let namespace_ref = ResourceRef::new( + alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, + "default-service-bus-namespace", + ); + let namespace_controller = ctx.require_dependency::(&namespace_ref)?; + self.commands_resource_group_name = + Some(namespace_controller.resource_group_name(ctx)?); + self.commands_queue_applied = false; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsQueueTargetPreparation::Checkpoint); + } + + let target_field_count = [ + self.commands_resource_group_name.is_some(), + self.commands_namespace_name.is_some(), + self.commands_queue_name.is_some(), + ] + .into_iter() + .filter(|is_some| *is_some) + .count(); + if target_field_count < 3 + && self + .commands_resource_group_name + .as_ref() + .is_none_or(|tracked| tracked == &desired.resource_group_name) + && self + .commands_namespace_name + .as_ref() + .is_none_or(|tracked| tracked == &desired.namespace_name) + && self + .commands_queue_name + .as_ref() + .is_none_or(|tracked| tracked == &desired.queue_name) + { + self.commands_resource_group_name + .get_or_insert_with(|| desired.resource_group_name.clone()); + self.commands_namespace_name + .get_or_insert_with(|| desired.namespace_name.clone()); + self.commands_queue_name + .get_or_insert_with(|| desired.queue_name.clone()); + self.commands_queue_applied = false; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsQueueTargetPreparation::Checkpoint); + } + + let Some((tracked_resource_group, tracked_namespace, tracked_queue)) = + self.commands_cleanup_target(&worker.id)? + else { + return Ok(CommandsQueueTargetPreparation::Ready); + }; + if tracked_resource_group == desired.resource_group_name + && tracked_namespace == desired.namespace_name + && tracked_queue == desired.queue_name + { + return Ok(CommandsQueueTargetPreparation::Ready); + } + + if !self.commands_update_teardown_candidates_initialized { + self.initialize_commands_teardown_candidates(ctx, worker, container_app_name) + .await?; + self.commands_update_teardown_candidates_initialized = true; + return Ok(CommandsQueueTargetPreparation::Checkpoint); + } + match self.delete_commands_infrastructure_step(ctx).await? { + CommandsTeardownResult::Complete => { + self.commands_update_teardown_candidates_initialized = false; + Ok(CommandsQueueTargetPreparation::Checkpoint) + } + CommandsTeardownResult::Mutated => Ok(CommandsQueueTargetPreparation::Checkpoint), + CommandsTeardownResult::LongRunning(delay) => { + Ok(CommandsQueueTargetPreparation::LongRunning(delay)) + } + } + } + + pub(super) async fn delete_commands_infrastructure_step( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + if let Some(component_name) = self.commands_dapr_component.clone() { + let env_outputs = get_container_apps_environment_outputs(ctx.state)?; + let worker = ctx.desired_resource_config::()?; + let container_app_name = self.container_app_name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: "Container app name not set in state".to_string(), + }) + })?; + let client = ctx + .service_provider + .get_azure_container_apps_client(ctx.get_azure_config()?)?; + + match delete_dapr_component_if_owned( + client.as_ref(), + &env_outputs.resource_group_name, + &env_outputs.environment_name, + container_app_name, + &component_name, + &worker.id, + ) + .await? + { + DaprComponentDeleteOperation::NotFound + | DaprComponentDeleteOperation::Foreign + | DaprComponentDeleteOperation::Completed => { + self.complete_commands_dapr_component_deletion(); + return Ok(CommandsTeardownResult::Mutated); + } + DaprComponentDeleteOperation::LongRunning(lro) => { + let delay = lro.retry_after.unwrap_or(Duration::from_secs(15)); + self.pending_operation_url = Some(lro.url); + self.pending_operation_retry_after = + lro.retry_after.map(|retry_after| retry_after.as_secs()); + return Ok(CommandsTeardownResult::LongRunning(delay)); + } + } + } + + let worker = ctx.desired_resource_config::()?; + if !matches!( + self.delete_commands_sender_role_assignment_step(ctx, worker) + .await?, + CommandsSenderReconcileResult::Complete + ) { + return Ok(CommandsTeardownResult::Mutated); + } + + if let Some(assignment_id) = self.commands_receiver_role_assignment_id.clone() { + info!( + assignment_id, + "Discarding setup-owned commands receiver cursor without deleting it" + ); + self.commands_receiver_role_assignment_id = None; + return Ok(CommandsTeardownResult::Mutated); + } + + if let Some((resource_group_name, namespace_name, queue_name)) = + self.commands_cleanup_target(ctx.desired_config.id())? + { + info!(namespace=%namespace_name, queue=%queue_name, "Deleting commands Service Bus queue"); + let management_client = ctx + .service_provider + .get_azure_service_bus_management_client(ctx.get_azure_config()?)?; + match management_client + .delete_queue( + resource_group_name, + namespace_name.clone(), + queue_name.clone(), + ) + .await + { + Ok(_) => info!(queue=%queue_name, "Commands Service Bus queue deleted"), + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + info!(queue=%queue_name, "Commands Service Bus queue was already deleted"); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!( + "Failed to delete commands Service Bus queue '{queue_name}'" + ), + resource_id: Some(ctx.desired_config.id().to_string()), + })); + } + } + self.commands_resource_group_name = None; + self.commands_namespace_name = None; + self.commands_queue_name = None; + self.commands_queue_applied = false; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsTeardownResult::Mutated); + } + + Ok(CommandsTeardownResult::Complete) + } + + pub(super) fn complete_commands_dapr_component_deletion(&mut self) { + if let Some(component_name) = self.commands_dapr_component.take() { + self.commands_dapr_component_deletion_candidates + .retain(|candidate| candidate != &component_name); + } + self.commands_dapr_component = self + .commands_dapr_component_deletion_candidates + .first() + .cloned(); + } + + pub(super) async fn delete_commands_role_assignment( + ctx: &ResourceControllerContext<'_>, + assignment_id: &str, + role: &str, + ) -> Result<()> { + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(ctx.get_azure_config()?)?; + match authorization_client + .delete_role_assignment_by_id(assignment_id.to_string()) + .await + { + Ok(_) => { + info!(assignment_id, role, "Commands role assignment deleted"); + Ok(()) + } + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + info!( + assignment_id, + role, "Commands role assignment was already deleted" + ); + Ok(()) + } + Err(error) => Err(error.context(ErrorData::CloudPlatformError { + message: format!("Failed to delete commands {role} role assignment"), + resource_id: Some(ctx.desired_config.id().to_string()), + })), + } + } + + pub(super) async fn delete_storage_trigger_infrastructure( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let Some(infrastructure) = self.storage_trigger_infrastructure.first().cloned() else { + self.storage_trigger_teardown_progress = AzureStorageTriggerTeardownProgress::default(); + return Ok(StorageTriggerTeardownResult::Complete); + }; + + let azure_config = ctx.get_azure_config()?; + match self.storage_trigger_teardown_progress { + AzureStorageTriggerTeardownProgress::EventSubscription => { + let event_grid_client = ctx + .service_provider + .get_azure_event_grid_client(azure_config)?; + match event_grid_client + .delete_event_subscription( + infrastructure.source_resource_id.clone(), + infrastructure.event_subscription_name.clone(), + ) + .await + { + Ok(()) => info!( + subscription=%infrastructure.event_subscription_name, + "Deleted Event Grid storage subscription" + ), + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + info!( + subscription=%infrastructure.event_subscription_name, + "Event Grid storage subscription was already deleted" + ); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!( + "Failed to delete Event Grid storage subscription '{}'", + infrastructure.event_subscription_name + ), + resource_id: Some(ctx.desired_config.id().to_string()), + })); + } + } + self.storage_trigger_teardown_progress = + AzureStorageTriggerTeardownProgress::ReceiverRoleAssignment; + } + AzureStorageTriggerTeardownProgress::ReceiverRoleAssignment => { + let Some(storage_id) = infrastructure.storage_id.as_deref() else { + self.storage_trigger_teardown_progress = + AzureStorageTriggerTeardownProgress::Queue; + return Ok(StorageTriggerTeardownResult::Mutated); + }; + let worker = ctx.desired_resource_config::()?; + let queue_scope = service_bus_queue_scope( + &infrastructure.service_bus_resource_group, + &infrastructure.namespace_name, + &infrastructure.queue_name, + ); + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + let role_definition_id = + storage_trigger_receiver_role_definition_id(&azure_config.subscription_id); + let assignments = discover_proven_role_assignments( + ctx, + &queue_scope, + &role_definition_id, + &worker.id, + "storage receiver", + |principal_id| { + storage_trigger_receiver_role_assignment_name( + ctx.resource_prefix, + &worker.id, + storage_id, + principal_id, + ) + }, + ) + .await?; + for assignment in assignments { + match authorization_client + .delete_role_assignment_by_id(assignment.id.clone()) + .await + { + Ok(_) => info!( + assignment_id=%assignment.id, + "Deleted proven storage-trigger receiver role assignment" + ), + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + info!( + assignment_id=%assignment.id, + "Proven storage-trigger receiver role assignment was already deleted" + ); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!( + "Failed to delete proven storage-trigger receiver role assignment '{}'", + assignment.id + ), + resource_id: Some(worker.id.clone()), + })); + } + } + return Ok(StorageTriggerTeardownResult::Mutated); + } + self.storage_trigger_teardown_progress = AzureStorageTriggerTeardownProgress::Queue; + } + AzureStorageTriggerTeardownProgress::Queue => { + let service_bus_client = ctx + .service_provider + .get_azure_service_bus_management_client(azure_config)?; + match service_bus_client + .delete_queue( + infrastructure.service_bus_resource_group, + infrastructure.namespace_name, + infrastructure.queue_name.clone(), + ) + .await + { + Ok(()) => info!( + queue=%infrastructure.queue_name, + "Deleted storage-trigger Service Bus queue" + ), + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + info!( + queue=%infrastructure.queue_name, + "Storage-trigger Service Bus queue was already deleted" + ); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!( + "Failed to delete storage-trigger Service Bus queue '{}'", + infrastructure.queue_name + ), + resource_id: Some(ctx.desired_config.id().to_string()), + })); + } + } + self.storage_trigger_infrastructure.remove(0); + self.storage_trigger_teardown_progress = + AzureStorageTriggerTeardownProgress::default(); + } + } + + Ok(StorageTriggerTeardownResult::Mutated) + } + + pub(super) async fn initialize_auxiliary_teardown_candidates( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + ) -> Result { + if self.auxiliary_teardown_candidates_initialized { + return Ok(false); + } + + let has_storage_triggers = worker + .triggers + .iter() + .any(|trigger| matches!(trigger, alien_core::WorkerTrigger::Storage { .. })); + let has_commands_candidates = worker.commands_enabled + || self.commands_resource_group_name.is_some() + || self.commands_namespace_name.is_some() + || self.commands_queue_name.is_some() + || self.commands_dapr_component.is_some() + || !self.commands_dapr_component_deletion_candidates.is_empty() + || self.commands_sender_role_assignment_id.is_some() + || self.commands_sender_role_assignment_intent.is_some() + || self.commands_receiver_role_assignment_id.is_some(); + if !has_commands_candidates && !has_storage_triggers { + self.auxiliary_teardown_candidates_initialized = true; + return Ok(true); + } + + if has_storage_triggers { + self.initialize_storage_trigger_teardown_candidates(ctx, worker, container_app_name) + .await?; + } + + if has_commands_candidates { + self.initialize_commands_teardown_candidates(ctx, worker, container_app_name) + .await?; + } + + self.auxiliary_teardown_candidates_initialized = true; + Ok(true) + } + + pub(super) async fn initialize_storage_trigger_teardown_candidates( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + ) -> Result<()> { + if !worker + .triggers + .iter() + .any(|trigger| matches!(trigger, alien_core::WorkerTrigger::Storage { .. })) + { + return Ok(()); + } + + let azure_config = ctx.get_azure_config()?; + let namespace_ref = ResourceRef::new( + alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, + "default-service-bus-namespace", + ); + let namespace_controller = ctx.require_dependency::(&namespace_ref)?; + let namespace_name = namespace_controller.namespace_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: namespace_ref.id.clone(), + }) + })?; + let service_bus_resource_group = namespace_controller.resource_group_name(ctx)?; + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + let service_account_ref = ResourceRef::new( + alien_core::ServiceAccount::RESOURCE_TYPE, + format!("{}-sa", worker.get_permissions()), + ); + let service_account = ctx + .require_dependency::( + &service_account_ref, + )?; + let execution_principal_id = service_account + .identity_principal_id + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: service_account_ref.id.clone(), + }) + })?; + let deployment_resource_group = get_resource_group_name(ctx.state)?; + + for trigger in &worker.triggers { + let alien_core::WorkerTrigger::Storage { storage, .. } = trigger else { + continue; + }; + let storage_controller = + ctx.require_dependency::(storage)?; + let storage_account_name = storage_controller + .storage_account_name + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: storage.id.clone(), + }) + })?; + let queue_name = storage_trigger_queue_name(container_app_name, &storage.id); + let event_subscription_name = + get_azure_storage_event_subscription_name(&worker.id, &storage.id); + if let Some(candidate) = self + .storage_trigger_infrastructure + .iter_mut() + .find(|candidate| candidate.event_subscription_name == event_subscription_name) + { + if candidate.storage_id.is_none() { + candidate.storage_id = Some(storage.id.clone()); + } + continue; + } + + let queue_scope = + service_bus_queue_scope(&service_bus_resource_group, &namespace_name, &queue_name); + let role_assignment_id = storage_trigger_receiver_role_assignment_name( + ctx.resource_prefix, + &worker.id, + &storage.id, + execution_principal_id, + ); + self.storage_trigger_infrastructure + .push(AzureStorageTriggerInfrastructure { + storage_id: Some(storage.id.clone()), + source_resource_id: format!( + "/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Storage/storageAccounts/{}", + azure_config.subscription_id, + deployment_resource_group, + storage_account_name + ), + source_container_name: storage_controller.container_name.clone(), + event_subscription_name, + service_bus_resource_group: service_bus_resource_group.clone(), + namespace_name: namespace_name.clone(), + queue_name, + queue_applied: false, + receiver_role_assignment_id: Some( + authorization_client.build_role_assignment_id( + &queue_scope, + role_assignment_id, + ), + ), + delivery_reconciled: false, + }); + } + + Ok(()) + } + + pub(super) async fn initialize_commands_teardown_candidates( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + ) -> Result<()> { + let namespace_ref = ResourceRef::new( + alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, + "default-service-bus-namespace", + ); + let namespace_controller = ctx.require_dependency::(&namespace_ref)?; + let namespace_name = namespace_controller.namespace_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: namespace_ref.id.clone(), + }) + })?; + let resource_group_name = namespace_controller.resource_group_name(ctx)?; + let queue_name = commands_queue_name(container_app_name); + self.commands_resource_group_name + .get_or_insert(resource_group_name); + self.commands_namespace_name + .get_or_insert_with(|| namespace_name.clone()); + self.commands_queue_name + .get_or_insert_with(|| queue_name.clone()); + self.commands_queue_applied = false; + self.commands_dapr_component_deletion_candidates = commands_component_removal_names( + container_app_name, + self.commands_dapr_component.as_deref(), + ); + self.commands_dapr_component = self + .commands_dapr_component_deletion_candidates + .first() + .cloned(); + + self.commands_receiver_role_assignment_id = None; + self.commands_sender_role_assignment_discovery_complete = false; + + Ok(()) + } +} + +#[cfg(test)] +#[path = "azure_cleanup_tests.rs"] +mod tests; diff --git a/crates/alien-infra/src/worker/azure_cleanup_tests.rs b/crates/alien-infra/src/worker/azure_cleanup_tests.rs new file mode 100644 index 000000000..935bc836a --- /dev/null +++ b/crates/alien-infra/src/worker/azure_cleanup_tests.rs @@ -0,0 +1,23 @@ +use super::commands_queue_cleanup_target; + +#[test] +fn partial_commands_queue_cleanup_state_fails_closed() { + assert!(commands_queue_cleanup_target( + Some("rg".to_string()), + Some("namespace".to_string()), + None, + "worker" + ) + .is_err()); + assert!(commands_queue_cleanup_target( + None, + Some("namespace".to_string()), + Some("queue".to_string()), + "worker" + ) + .is_err()); + assert_eq!( + commands_queue_cleanup_target(None, None, None, "worker").unwrap(), + None + ); +} diff --git a/crates/alien-infra/src/worker/azure_command_sender.rs b/crates/alien-infra/src/worker/azure_command_sender.rs new file mode 100644 index 000000000..3908bb228 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_command_sender.rs @@ -0,0 +1,297 @@ +use alien_core::Worker; +use alien_error::{AlienError, Context}; +use serde::{Deserialize, Serialize}; + +use super::{management_profile_dispatches_commands, AzureWorkerController}; +use crate::core::{AzurePermissionsHelper, ResourceControllerContext}; +use crate::error::{ErrorData, Result}; +use crate::worker::azure::role_assignments::discover_proven_role_assignments; +use crate::worker::azure_names::{commands_sender_role_assignment_name, service_bus_queue_scope}; + +const SERVICE_BUS_DATA_SENDER_ROLE_DEFINITION_GUID: &str = "69a216fc-b8fb-44d8-bc22-1f3c2cd27a39"; + +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct AzureCommandsSenderRoleAssignmentIntent { + pub(crate) assignment_id: String, + pub(crate) assignment_name: String, + pub(crate) principal_id: String, + pub(crate) resource_group_name: String, + pub(crate) namespace_name: String, + pub(crate) queue_name: String, +} + +pub(super) enum CommandsSenderReconcileResult { + Complete, + Pending, +} + +enum CommandsSenderDiscoveryResult { + Complete { desired_found: bool }, + Mutated, +} + +pub(super) fn commands_sender_role_definition_id(subscription_id: &str) -> String { + format!( + "/subscriptions/{subscription_id}/providers/Microsoft.Authorization/roleDefinitions/{SERVICE_BUS_DATA_SENDER_ROLE_DEFINITION_GUID}" + ) +} + +impl AzureWorkerController { + async fn desired_commands_sender_role_assignment( + &self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + ) -> Result> { + if !worker.commands_enabled + || !management_profile_dispatches_commands(ctx, &worker.id) + || AzurePermissionsHelper::get_management_uami_principal_id(ctx)?.is_some() + { + return Ok(None); + } + + let resource_group_name = self.commands_resource_group_name.as_ref().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: "commands-resource-group".to_string(), + }) + })?; + let namespace_name = self.commands_namespace_name.as_ref().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: "commands-namespace".to_string(), + }) + })?; + let queue_name = self.commands_queue_name.as_ref().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: "commands-queue".to_string(), + }) + })?; + let azure_config = ctx.get_azure_config()?; + let principal_id = ctx + .service_provider + .get_azure_caller_principal_id(azure_config) + .await + .context(ErrorData::CloudPlatformError { + message: "Failed to resolve Azure command sender principal".to_string(), + resource_id: Some(worker.id.clone()), + })?; + let queue_scope = service_bus_queue_scope(resource_group_name, namespace_name, queue_name); + let assignment_name = commands_sender_role_assignment_name( + ctx.resource_prefix, + &worker.id, + &principal_id, + namespace_name, + queue_name, + ); + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + let assignment_id = + authorization_client.build_role_assignment_id(&queue_scope, assignment_name.clone()); + + Ok(Some(AzureCommandsSenderRoleAssignmentIntent { + assignment_id, + assignment_name, + principal_id, + resource_group_name: resource_group_name.clone(), + namespace_name: namespace_name.clone(), + queue_name: queue_name.clone(), + })) + } + + async fn discover_commands_sender_role_assignments( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + desired: Option<&AzureCommandsSenderRoleAssignmentIntent>, + ) -> Result { + let Some((resource_group_name, namespace_name, queue_name)) = + self.commands_cleanup_target(&worker.id)? + else { + self.commands_sender_role_assignment_discovery_complete = true; + return Ok(CommandsSenderDiscoveryResult::Complete { + desired_found: false, + }); + }; + let azure_config = ctx.get_azure_config()?; + let queue_scope = + service_bus_queue_scope(&resource_group_name, &namespace_name, &queue_name); + let role_definition_id = commands_sender_role_definition_id(&azure_config.subscription_id); + let assignments = discover_proven_role_assignments( + ctx, + &queue_scope, + &role_definition_id, + &worker.id, + "command sender", + |principal_id| { + commands_sender_role_assignment_name( + ctx.resource_prefix, + &worker.id, + principal_id, + &namespace_name, + &queue_name, + ) + }, + ) + .await?; + + let mut desired_found = false; + for assignment in assignments { + if desired + .is_some_and(|desired| assignment.id.eq_ignore_ascii_case(&desired.assignment_id)) + { + desired_found = true; + continue; + } + + Self::delete_commands_role_assignment(ctx, &assignment.id, "discovered sender").await?; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsSenderDiscoveryResult::Mutated); + } + + self.commands_sender_role_assignment_discovery_complete = true; + Ok(CommandsSenderDiscoveryResult::Complete { desired_found }) + } + + pub(super) async fn reconcile_commands_sender_role_assignment( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + ) -> Result { + let desired = self + .desired_commands_sender_role_assignment(ctx, worker) + .await?; + + if let Some(applied_id) = self.commands_sender_role_assignment_id.clone() { + if self + .commands_sender_role_assignment_intent + .as_ref() + .is_some_and(|intent| intent.assignment_id == applied_id) + { + self.commands_sender_role_assignment_intent = None; + return Ok(CommandsSenderReconcileResult::Pending); + } + if desired + .as_ref() + .is_some_and(|intent| intent.assignment_id == applied_id) + { + if self.commands_sender_role_assignment_discovery_complete { + return Ok(CommandsSenderReconcileResult::Complete); + } + } else { + self.commands_sender_role_assignment_id = None; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsSenderReconcileResult::Pending); + } + } + + if let Some(planned) = self.commands_sender_role_assignment_intent.clone() { + if desired.as_ref() != Some(&planned) { + self.commands_sender_role_assignment_intent = None; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsSenderReconcileResult::Pending); + } + } + + if !self.commands_sender_role_assignment_discovery_complete { + match self + .discover_commands_sender_role_assignments(ctx, worker, desired.as_ref()) + .await? + { + CommandsSenderDiscoveryResult::Mutated => { + return Ok(CommandsSenderReconcileResult::Pending); + } + CommandsSenderDiscoveryResult::Complete { desired_found } => { + if let Some(desired) = desired.as_ref() { + if desired_found { + self.commands_sender_role_assignment_id = + Some(desired.assignment_id.clone()); + self.commands_sender_role_assignment_intent = None; + } else if self + .commands_sender_role_assignment_id + .as_ref() + .is_some_and(|applied| applied == &desired.assignment_id) + { + self.commands_sender_role_assignment_id = None; + } + } + return Ok(CommandsSenderReconcileResult::Pending); + } + } + } + + if let Some(planned) = self.commands_sender_role_assignment_intent.clone() { + let azure_config = ctx.get_azure_config()?; + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + let queue_scope = service_bus_queue_scope( + &planned.resource_group_name, + &planned.namespace_name, + &planned.queue_name, + ); + let role_definition_id = + commands_sender_role_definition_id(&azure_config.subscription_id); + AzurePermissionsHelper::create_role_assignment( + &authorization_client, + azure_config, + &queue_scope, + &planned.assignment_name, + &planned.principal_id, + &role_definition_id, + ) + .await + .context(ErrorData::CloudPlatformError { + message: "Failed to grant Azure command sender role".to_string(), + resource_id: Some(worker.id.clone()), + })?; + self.commands_sender_role_assignment_id = Some(planned.assignment_id); + self.commands_sender_role_assignment_intent = None; + return Ok(CommandsSenderReconcileResult::Pending); + } + + if let Some(desired) = desired { + self.commands_sender_role_assignment_intent = Some(desired); + return Ok(CommandsSenderReconcileResult::Pending); + } + + Ok(CommandsSenderReconcileResult::Complete) + } + + pub(super) async fn delete_commands_sender_role_assignment_step( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + ) -> Result { + if self.commands_sender_role_assignment_id.is_some() { + self.commands_sender_role_assignment_id = None; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsSenderReconcileResult::Pending); + } + if self.commands_sender_role_assignment_intent.is_some() { + self.commands_sender_role_assignment_intent = None; + self.commands_sender_role_assignment_discovery_complete = false; + return Ok(CommandsSenderReconcileResult::Pending); + } + if !self.commands_sender_role_assignment_discovery_complete { + return match self + .discover_commands_sender_role_assignments(ctx, worker, None) + .await? + { + CommandsSenderDiscoveryResult::Mutated => { + Ok(CommandsSenderReconcileResult::Pending) + } + CommandsSenderDiscoveryResult::Complete { .. } => { + Ok(CommandsSenderReconcileResult::Pending) + } + }; + } + Ok(CommandsSenderReconcileResult::Complete) + } +} + +#[cfg(test)] +#[path = "azure_command_sender_tests.rs"] +mod tests; diff --git a/crates/alien-infra/src/worker/azure_command_sender_tests.rs b/crates/alien-infra/src/worker/azure_command_sender_tests.rs new file mode 100644 index 000000000..1bf4b1902 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_command_sender_tests.rs @@ -0,0 +1,516 @@ +use std::collections::VecDeque; +use std::sync::{Arc, Mutex}; + +use alien_azure_clients::authorization::{MockAuthorizationApi, Scope}; +use alien_azure_clients::models::authorization_role_assignments::{ + RoleAssignment, RoleAssignmentProperties, RoleAssignmentPropertiesPrincipalType, +}; +use alien_azure_clients::service_bus::MockServiceBusManagementApi; +use alien_core::{Platform, ResourceStatus, Worker}; + +use super::{commands_sender_role_definition_id, AzureCommandsSenderRoleAssignmentIntent}; +use crate::core::controller_test::SingleControllerExecutor; +use crate::core::MockPlatformServiceProvider; +use crate::worker::azure_names::commands_sender_role_assignment_name; +use crate::worker::fixtures::basic_function; +use crate::worker::{AzureWorkerController, AzureWorkerState}; + +const SUBSCRIPTION_ID: &str = "12345678-1234-1234-1234-123456789012"; +const RESOURCE_GROUP: &str = "mock-rg"; +const NAMESPACE: &str = "default-service-bus-namespace"; +const QUEUE: &str = "test-sender-worker-rq"; +const WORKER_ID: &str = "sender-worker"; + +fn worker(commands_enabled: bool) -> Worker { + let mut worker = basic_function(); + worker.id = WORKER_ID.to_string(); + worker.commands_enabled = commands_enabled; + worker +} + +fn assignment_id(name: &str) -> String { + format!( + "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.ServiceBus/namespaces/{NAMESPACE}/queues/{QUEUE}/providers/Microsoft.Authorization/roleAssignments/{name}" + ) +} + +fn direct_assignment(principal_id: &str) -> RoleAssignment { + let name = + commands_sender_role_assignment_name("test", WORKER_ID, principal_id, NAMESPACE, QUEUE); + RoleAssignment { + id: Some(assignment_id(&name)), + name: Some(name), + properties: Some(RoleAssignmentProperties { + principal_id: principal_id.to_string(), + role_definition_id: commands_sender_role_definition_id(SUBSCRIPTION_ID), + scope: None, + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + condition: None, + condition_version: None, + delegated_managed_identity_resource_id: None, + description: None, + created_by: None, + created_on: None, + updated_by: None, + updated_on: None, + }), + type_: None, + } +} + +fn setup_owned_assignment(principal_id: &str) -> RoleAssignment { + RoleAssignment { + id: Some(assignment_id("setup-owned")), + name: Some("setup-owned".to_string()), + properties: Some(RoleAssignmentProperties { + principal_id: principal_id.to_string(), + role_definition_id: commands_sender_role_definition_id(SUBSCRIPTION_ID), + scope: None, + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + condition: None, + condition_version: None, + delegated_managed_identity_resource_id: None, + description: None, + created_by: None, + created_on: None, + updated_by: None, + updated_on: None, + }), + type_: None, + } +} + +fn provider( + principal_id: &str, + list_responses: Vec>, + actions: Arc>>, +) -> Arc { + provider_with_queue_cleanup(principal_id, list_responses, actions, false) +} + +fn provider_with_queue_cleanup( + principal_id: &str, + list_responses: Vec>, + actions: Arc>>, + delete_queue: bool, +) -> Arc { + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .returning(|_, name| assignment_id(&name)); + let responses = Arc::new(Mutex::new(VecDeque::from(list_responses))); + authorization + .expect_list_role_assignments() + .returning(move |scope, role_definition_id| { + assert!(matches!( + scope, + Scope::Resource { + resource_group_name, + resource_provider, + parent_resource_path: Some(parent), + resource_type, + resource_name, + } if resource_group_name == RESOURCE_GROUP + && resource_provider == "Microsoft.ServiceBus" + && parent == &format!("namespaces/{NAMESPACE}") + && resource_type == "queues" + && resource_name == QUEUE + )); + assert_eq!( + role_definition_id.as_deref(), + Some(commands_sender_role_definition_id(SUBSCRIPTION_ID).as_str()) + ); + Ok(responses + .lock() + .expect("list response lock") + .pop_front() + .unwrap_or_default()) + }); + let delete_actions = actions.clone(); + authorization + .expect_delete_role_assignment_by_id() + .returning(move |id| { + delete_actions + .lock() + .expect("action lock") + .push(format!("delete:{id}")); + Ok(None) + }); + let put_actions = actions.clone(); + authorization + .expect_create_or_update_role_assignment_by_id() + .returning(move |id, assignment| { + let principal = assignment + .properties + .as_ref() + .expect("role assignment properties") + .principal_id + .clone(); + put_actions + .lock() + .expect("action lock") + .push(format!("put:{id}:{principal}")); + Ok(assignment.clone()) + }); + let authorization = Arc::new(authorization); + + let principal_id = principal_id.to_string(); + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_caller_principal_id() + .times(0..) + .returning(move |_| Ok(principal_id.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + if delete_queue { + let queue_actions = actions.clone(); + let mut service_bus = MockServiceBusManagementApi::new(); + service_bus.expect_delete_queue().times(1).returning( + move |resource_group, namespace, queue| { + assert_eq!(resource_group, RESOURCE_GROUP); + assert_eq!(namespace, NAMESPACE); + assert_eq!(queue, QUEUE); + queue_actions + .lock() + .expect("action lock") + .push("delete-queue".to_string()); + Ok(()) + }, + ); + let service_bus = Arc::new(service_bus); + provider + .expect_get_azure_service_bus_management_client() + .times(1) + .returning(move |_| Ok(service_bus.clone())); + } + Arc::new(provider) +} + +async fn build_executor( + worker: Worker, + mut controller: AzureWorkerController, + provider: Arc, +) -> SingleControllerExecutor { + controller.commands_resource_group_name = Some(RESOURCE_GROUP.to_string()); + controller.commands_namespace_name = Some(NAMESPACE.to_string()); + controller.commands_queue_name = Some(QUEUE.to_string()); + SingleControllerExecutor::builder() + .resource(worker) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .expect("executor should build") +} + +#[tokio::test] +async fn sender_intent_is_checkpointed_before_put_and_crash_retry_reuses_exact_id() { + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = provider("principal-b", vec![vec![]], actions.clone()); + let mut executor = build_executor( + worker(true), + AzureWorkerController::mock_ready("test-sender-worker"), + provider.clone(), + ) + .await; + + executor.step().await.expect("discovery checkpoint"); + assert!(actions.lock().expect("action lock").is_empty()); + executor.step().await.expect("intent checkpoint"); + let before_put = executor + .internal_state::() + .expect("controller") + .clone(); + let planned_id = before_put + .commands_sender_role_assignment_intent + .as_ref() + .expect("planned sender") + .assignment_id + .clone(); + assert!(actions.lock().expect("action lock").is_empty()); + + executor.step().await.expect("first idempotent put"); + let mut retry_executor = build_executor(worker(true), before_put, provider).await; + retry_executor + .step() + .await + .expect("retry the same idempotent put"); + + let puts: Vec = actions + .lock() + .expect("action lock") + .iter() + .filter(|action| action.starts_with("put:")) + .cloned() + .collect(); + assert_eq!(puts.len(), 2); + assert!(puts + .iter() + .all(|action| action.contains(&planned_id) && action.ends_with(":principal-b"))); +} + +#[tokio::test] +async fn applied_principal_is_deleted_before_new_principal_is_planned_and_put() { + let actions = Arc::new(Mutex::new(Vec::new())); + let mut controller = AzureWorkerController::mock_ready("test-sender-worker"); + let old = direct_assignment("principal-a"); + let provider = provider( + "principal-b", + vec![vec![old.clone()], vec![]], + actions.clone(), + ); + controller.commands_sender_role_assignment_id = old.id.clone(); + controller.commands_sender_role_assignment_discovery_complete = true; + let mut executor = build_executor(worker(true), controller, provider).await; + + for _ in 0..5 { + executor.step().await.expect("sender reconciliation step"); + } + + let actions = actions.lock().expect("action lock"); + assert_eq!(actions.len(), 2); + assert_eq!(actions[0], format!("delete:{}", old.id.as_deref().unwrap())); + assert!(actions[1].starts_with("put:")); + assert!(actions[1].ends_with(":principal-b")); +} + +#[tokio::test] +async fn missing_applied_grant_is_recreated_only_after_discovery_checkpoint() { + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = provider("principal-b", vec![vec![]], actions.clone()); + let mut controller = AzureWorkerController::mock_ready("test-sender-worker"); + controller.commands_sender_role_assignment_id = direct_assignment("principal-b").id; + controller.commands_sender_role_assignment_discovery_complete = false; + let mut executor = build_executor(worker(true), controller, provider).await; + + executor.step().await.expect("missing grant discovery"); + assert!(actions.lock().expect("action lock").is_empty()); + executor.step().await.expect("intent checkpoint"); + assert!(actions.lock().expect("action lock").is_empty()); + executor.step().await.expect("grant recreation"); + + let actions = actions.lock().expect("action lock"); + assert_eq!(actions.len(), 1); + assert!(actions[0].starts_with("put:")); + assert!(actions[0].ends_with(":principal-b")); +} + +#[tokio::test] +async fn equal_update_revalidates_missing_and_stale_sender_grants() { + let actions = Arc::new(Mutex::new(Vec::new())); + let desired = direct_assignment("principal-b"); + let stale = direct_assignment("principal-a"); + let mut controller = AzureWorkerController::mock_ready("test-sender-worker"); + controller.commands_sender_role_assignment_id = desired.id.clone(); + controller.commands_sender_role_assignment_discovery_complete = true; + let mut checkpoint_executor = build_executor( + worker(true), + controller, + Arc::new(MockPlatformServiceProvider::new()), + ) + .await; + checkpoint_executor + .update(worker(true)) + .expect("equal update should start"); + checkpoint_executor + .step() + .await + .expect("enter equal update"); + checkpoint_executor + .step() + .await + .expect("equal update discovery checkpoint"); + let mut checkpointed = checkpoint_executor + .internal_state::() + .expect("checkpointed controller") + .clone(); + assert_eq!(checkpointed.state, AzureWorkerState::UpdateStart); + assert!(!checkpointed.commands_sender_role_assignment_discovery_complete); + + checkpointed.state = AzureWorkerState::Ready; + let provider = provider( + "principal-b", + vec![vec![stale.clone()], vec![]], + actions.clone(), + ); + let mut executor = build_executor(worker(true), checkpointed, provider).await; + for _ in 0..4 { + executor + .step() + .await + .expect("checkpointed sender drift reconciliation"); + } + + let actions = actions.lock().expect("action lock"); + assert_eq!(actions.len(), 2); + assert_eq!( + actions[0], + format!( + "delete:{}", + stale.id.as_deref().expect("stale assignment ID") + ) + ); + assert!(actions[1].starts_with("put:")); + assert!(actions[1].ends_with(":principal-b")); +} + +#[tokio::test] +async fn desired_grant_discovered_from_azure_is_adopted_without_put() { + let actions = Arc::new(Mutex::new(Vec::new())); + let desired = direct_assignment("principal-b"); + let provider = provider("principal-b", vec![vec![desired.clone()]], actions.clone()); + let mut executor = build_executor( + worker(true), + AzureWorkerController::mock_ready("test-sender-worker"), + provider, + ) + .await; + + executor.step().await.expect("discover desired grant"); + + assert!(actions.lock().expect("action lock").is_empty()); + let controller = executor + .internal_state::() + .expect("controller"); + assert_eq!(controller.commands_sender_role_assignment_id, desired.id); + assert!(controller.commands_sender_role_assignment_discovery_complete); +} + +#[tokio::test] +async fn discovery_deletes_stale_direct_grant_and_preserves_setup_owned_assignment() { + let actions = Arc::new(Mutex::new(Vec::new())); + let old = direct_assignment("principal-a"); + let setup_owned = setup_owned_assignment("setup-principal"); + let provider = provider( + "principal-b", + vec![vec![old.clone(), setup_owned.clone()], vec![setup_owned]], + actions.clone(), + ); + let mut executor = build_executor( + worker(true), + AzureWorkerController::mock_ready("test-sender-worker"), + provider, + ) + .await; + + for _ in 0..4 { + executor.step().await.expect("sender reconciliation step"); + } + + let actions = actions.lock().expect("action lock"); + let expected_delete = format!("delete:{}", old.id.as_deref().unwrap()); + assert_eq!( + actions + .iter() + .filter(|action| action.starts_with("delete:")) + .cloned() + .collect::>(), + vec![expected_delete] + ); + assert!(actions + .iter() + .any(|action| action.ends_with(":principal-b"))); + assert!(!actions.iter().any(|action| action.contains("setup-owned"))); +} + +#[tokio::test] +async fn disabling_commands_deletes_applied_direct_grant_without_putting_a_new_one() { + let actions = Arc::new(Mutex::new(Vec::new())); + let old = direct_assignment("principal-a"); + let provider = provider("unused", vec![vec![old.clone()], vec![]], actions.clone()); + let mut controller = AzureWorkerController::mock_ready("test-sender-worker"); + controller.commands_sender_role_assignment_id = old.id.clone(); + controller.commands_sender_role_assignment_discovery_complete = true; + let mut executor = build_executor(worker(false), controller, provider).await; + + for _ in 0..3 { + executor.step().await.expect("sender revoke"); + } + + let actions = actions.lock().expect("action lock"); + assert_eq!( + actions.as_slice(), + [format!("delete:{}", old.id.as_deref().unwrap())] + ); + assert!(!actions.iter().any(|action| action.starts_with("put:"))); + assert_eq!(executor.status(), ResourceStatus::Running); +} + +#[tokio::test] +async fn persisted_unproven_ids_are_cleared_without_delete_and_setup_owned_remote_is_preserved() { + let actions = Arc::new(Mutex::new(Vec::new())); + let setup_owned = setup_owned_assignment("setup-principal"); + let provider = provider("unused", vec![vec![setup_owned]], actions.clone()); + let mut controller = AzureWorkerController::mock_ready("test-sender-worker"); + controller.commands_sender_role_assignment_id = Some("unproven-applied-id".to_string()); + controller.commands_sender_role_assignment_intent = + Some(AzureCommandsSenderRoleAssignmentIntent { + assignment_id: "unproven-intent-id".to_string(), + assignment_name: "unproven-intent".to_string(), + principal_id: "unproven-principal".to_string(), + resource_group_name: RESOURCE_GROUP.to_string(), + namespace_name: NAMESPACE.to_string(), + queue_name: QUEUE.to_string(), + }); + controller.commands_sender_role_assignment_discovery_complete = true; + let mut executor = build_executor(worker(false), controller, provider).await; + + for _ in 0..3 { + executor.step().await.expect("proof-boundary cleanup"); + } + + assert!(actions.lock().expect("action lock").is_empty()); + let controller = executor + .internal_state::() + .expect("controller"); + assert!(controller.commands_sender_role_assignment_id.is_none()); + assert!(controller.commands_sender_role_assignment_intent.is_none()); + assert!(controller.commands_sender_role_assignment_discovery_complete); +} + +#[tokio::test] +async fn cleanup_discovers_all_direct_grants_before_deleting_queue_and_preserves_setup_owned() { + let actions = Arc::new(Mutex::new(Vec::new())); + let first = direct_assignment("principal-a"); + let second = direct_assignment("principal-b"); + let setup_owned = setup_owned_assignment("setup-principal"); + let provider = provider_with_queue_cleanup( + "unused", + vec![ + vec![first.clone(), second.clone(), setup_owned.clone()], + vec![second.clone(), setup_owned.clone()], + vec![setup_owned], + ], + actions.clone(), + true, + ); + let mut controller = AzureWorkerController::mock_ready("test-sender-worker"); + controller.state = AzureWorkerState::DeletingCommandsInfrastructure; + controller.commands_resource_group_name = Some(RESOURCE_GROUP.to_string()); + controller.commands_namespace_name = Some(NAMESPACE.to_string()); + controller.commands_queue_name = Some(QUEUE.to_string()); + controller.commands_sender_role_assignment_discovery_complete = false; + let mut executor = build_executor(worker(false), controller, provider).await; + + for _ in 0..4 { + executor.step().await.expect("commands cleanup step"); + } + + assert_eq!( + actions.lock().expect("action lock").as_slice(), + [ + format!("delete:{}", first.id.as_deref().unwrap()), + format!("delete:{}", second.id.as_deref().unwrap()), + "delete-queue".to_string(), + ] + ); + let controller = executor + .internal_state::() + .expect("controller"); + assert!(controller.commands_resource_group_name.is_none()); + assert!(controller.commands_namespace_name.is_none()); + assert!(controller.commands_queue_name.is_none()); +} diff --git a/crates/alien-infra/src/worker/azure_commands_target_tests.rs b/crates/alien-infra/src/worker/azure_commands_target_tests.rs new file mode 100644 index 000000000..f157f02b8 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_commands_target_tests.rs @@ -0,0 +1,654 @@ +use std::collections::{HashMap, VecDeque}; +use std::sync::{Arc, Mutex}; + +use alien_azure_clients::{ + authorization::MockAuthorizationApi, + container_apps::MockContainerAppsApi, + long_running_operation::OperationResult, + models::authorization_role_assignments::{ + RoleAssignment, RoleAssignmentProperties, RoleAssignmentPropertiesPrincipalType, + }, + models::managed_environments_dapr_components::DaprComponent, + service_bus::MockServiceBusManagementApi, + AzureClientConfigExt, +}; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_core::{Platform, ResourceStatus}; +use alien_error::AlienError; + +use crate::core::{controller_test::SingleControllerExecutor, MockPlatformServiceProvider}; +use crate::worker::{ + azure_dapr_components::service_bus_dapr_component, + azure_names::{ + commands_queue_name, commands_sender_role_assignment_name, + get_azure_internal_commands_dapr_component_name, + }, + AzureWorkerController, +}; + +fn record(actions: &Arc>>, action: impl Into) { + actions.lock().expect("action log lock").push(action.into()); +} + +fn action_index(actions: &[String], expected: &str) -> usize { + actions + .iter() + .position(|action| action == expected) + .unwrap_or_else(|| panic!("missing action {expected:?} in {actions:#?}")) +} + +fn remote_not_found(resource_name: &str) -> AlienError { + AlienError::new(CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: resource_name.to_string(), + }) +} + +fn sender_assignment_id( + resource_group: &str, + namespace: &str, + queue: &str, + assignment_name: &str, +) -> String { + format!( + "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/{resource_group}/providers/Microsoft.ServiceBus/namespaces/{namespace}/queues/{queue}/providers/Microsoft.Authorization/roleAssignments/{assignment_name}" + ) +} + +fn provider( + app_name: &str, + old_component: DaprComponent, + actions: Arc>>, +) -> Arc { + let components = Arc::new(Mutex::new(HashMap::from([( + old_component.name.clone().expect("old component name"), + old_component, + )]))); + let mut container_apps = MockContainerAppsApi::new(); + let update_actions = actions.clone(); + let update_app_name = app_name.to_string(); + container_apps + .expect_update_container_app() + .times(1) + .returning(move |resource_group, app_name, _| { + assert_eq!(resource_group, "default-resource-group"); + assert_eq!(app_name, update_app_name); + record(&update_actions, "update-app"); + Ok(OperationResult::Completed( + create_successful_container_app_response(&update_app_name, false), + )) + }); + let get_app_name = app_name.to_string(); + container_apps + .expect_get_container_app() + .times(1) + .returning(move |resource_group, app_name| { + assert_eq!(resource_group, "default-resource-group"); + assert_eq!(app_name, get_app_name); + Ok(create_successful_container_app_response( + &get_app_name, + false, + )) + }); + let get_components = components.clone(); + container_apps + .expect_get_dapr_component() + .times(1..) + .returning(move |_, _, name| { + get_components + .lock() + .expect("component map lock") + .get(name) + .cloned() + .ok_or_else(|| remote_not_found(name)) + }); + let delete_components = components.clone(); + let delete_actions = actions.clone(); + container_apps + .expect_delete_dapr_component() + .times(1) + .returning(move |_, _, name| { + assert!( + delete_components + .lock() + .expect("component map lock") + .remove(name) + .is_some(), + "delete requires an owned component" + ); + record(&delete_actions, format!("delete-dapr:{name}")); + Ok(OperationResult::Completed(())) + }); + let put_components = components; + let put_actions = actions.clone(); + container_apps + .expect_create_or_update_dapr_component() + .times(1) + .returning(move |_, _, name, component| { + let metadata = component + .properties + .as_ref() + .expect("Dapr properties") + .metadata + .iter() + .filter_map(|item| Some((item.name.as_deref()?, item.value.as_deref()?))) + .collect::>(); + assert_eq!( + metadata.get("namespaceName").copied(), + Some("default-service-bus-namespace.servicebus.windows.net") + ); + record(&put_actions, format!("put-dapr:{name}")); + put_components + .lock() + .expect("component map lock") + .insert(name.to_string(), component.clone()); + Ok(OperationResult::Completed(component.clone())) + }); + let container_apps = Arc::new(container_apps); + + let mut service_bus = MockServiceBusManagementApi::new(); + let delete_queue_actions = actions.clone(); + service_bus.expect_delete_queue().times(1).returning( + move |resource_group, namespace, queue| { + record( + &delete_queue_actions, + format!("delete-queue:{resource_group}/{namespace}/{queue}"), + ); + Ok(()) + }, + ); + let create_queue_actions = actions.clone(); + service_bus + .expect_create_or_update_queue() + .times(1) + .returning(move |resource_group, namespace, queue, _| { + record( + &create_queue_actions, + format!("create-queue:{resource_group}/{namespace}/{queue}"), + ); + Ok(alien_azure_clients::models::queue::SbQueue::default()) + }); + let service_bus = Arc::new(service_bus); + + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .returning(|scope, name| { + format!( + "/{}/providers/Microsoft.Authorization/roleAssignments/{name}", + scope.to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + ) + }); + let old_assignment_name = commands_sender_role_assignment_name( + "test", + "commands-target-worker", + "old-manager-principal", + "old-namespace", + &commands_queue_name(app_name), + ); + let old_assignment_id = sender_assignment_id( + "old-resource-group", + "old-namespace", + &commands_queue_name(app_name), + &old_assignment_name, + ); + let old_assignment = RoleAssignment { + id: Some(old_assignment_id), + name: Some(old_assignment_name), + properties: Some(RoleAssignmentProperties { + principal_id: "old-manager-principal".to_string(), + role_definition_id: super::super::command_sender::commands_sender_role_definition_id( + "12345678-1234-1234-1234-123456789012", + ), + scope: None, + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + condition: None, + condition_version: None, + delegated_managed_identity_resource_id: None, + description: None, + created_by: None, + created_on: None, + updated_by: None, + updated_on: None, + }), + type_: None, + }; + let list_responses = Arc::new(Mutex::new(VecDeque::from([ + vec![old_assignment], + Vec::new(), + Vec::new(), + ]))); + authorization + .expect_list_role_assignments() + .times(1..) + .returning(move |_, _| { + Ok(list_responses + .lock() + .expect("list responses lock") + .pop_front() + .unwrap_or_default()) + }); + let delete_role_actions = actions.clone(); + authorization + .expect_delete_role_assignment_by_id() + .times(1) + .returning(move |id| { + record(&delete_role_actions, format!("delete-rbac:{id}")); + Ok(None) + }); + let put_role_actions = actions; + authorization + .expect_create_or_update_role_assignment_by_id() + .times(1) + .returning(move |id, assignment| { + let principal = &assignment + .properties + .as_ref() + .expect("role assignment properties") + .principal_id; + record(&put_role_actions, format!("put-rbac:{id}:{principal}")); + Ok(assignment.clone()) + }); + let authorization = Arc::new(authorization); + + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + provider + .expect_get_azure_caller_principal_id() + .times(0..) + .returning(|_| Ok("new-manager-principal".to_string())); + Arc::new(provider) +} + +#[tokio::test] +async fn commands_dependency_target_move_checkpoints_and_deletes_old_target_before_create() { + let app_name = "test-commands-target-worker"; + let component_name = get_azure_internal_commands_dapr_component_name(app_name); + let queue_name = commands_queue_name(app_name); + let old_component = service_bus_dapr_component( + component_name.clone(), + app_name, + "old-namespace", + queue_name.clone(), + "old-execution-client", + ); + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = provider(app_name, old_component, actions.clone()); + + let mut worker = basic_function(); + worker.id = "commands-target-worker".to_string(); + worker.commands_enabled = true; + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.commands_resource_group_name = Some("old-resource-group".to_string()); + controller.commands_namespace_name = Some("old-namespace".to_string()); + controller.commands_queue_name = Some(queue_name.clone()); + controller.commands_dapr_component = Some(component_name.clone()); + controller.commands_sender_role_assignment_id = None; + controller.commands_sender_role_assignment_discovery_complete = false; + + let mut executor = SingleControllerExecutor::builder() + .resource(worker.clone()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .expect("executor should build"); + executor.update(worker).expect("equal update should start"); + + for step in 0..10 { + if executor + .internal_state::() + .expect("Azure worker controller") + .commands_update_teardown_candidates_initialized + { + break; + } + executor + .step() + .await + .unwrap_or_else(|error| panic!("commands checkpoint failed at step {step}: {error}")); + assert!( + actions + .lock() + .expect("action log lock") + .iter() + .all(|action| action == "update-app"), + "no cleanup mutation is allowed before the durable teardown checkpoint" + ); + } + { + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + assert!(controller.commands_update_teardown_candidates_initialized); + assert_eq!( + controller.commands_resource_group_name.as_deref(), + Some("old-resource-group") + ); + assert_eq!( + controller.commands_namespace_name.as_deref(), + Some("old-namespace") + ); + assert_eq!( + controller.commands_queue_name.as_deref(), + Some(queue_name.as_str()) + ); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some(component_name.as_str()) + ); + } + assert_eq!( + actions.lock().expect("action log lock").as_slice(), + ["update-app"], + "cleanup cursors must be durable before remote deletion" + ); + + let old_queue_action = format!("delete-queue:old-resource-group/old-namespace/{queue_name}"); + for step in 0..40 { + if actions + .lock() + .expect("action log lock") + .contains(&old_queue_action) + { + break; + } + executor + .step() + .await + .unwrap_or_else(|error| panic!("old target cleanup failed at step {step}: {error}")); + } + assert!(!actions + .lock() + .expect("action log lock") + .iter() + .any(|action| action.starts_with("create-queue:"))); + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + assert!(controller.commands_resource_group_name.is_none()); + assert!(controller.commands_namespace_name.is_none()); + assert!(controller.commands_queue_name.is_none()); + + for step in 0..10 { + let target_is_checkpointed = executor + .internal_state::() + .expect("Azure worker controller") + .commands_cleanup_target("commands-target-worker") + .expect("valid commands target") + .is_some_and(|(resource_group, namespace, queue)| { + resource_group == "mock-rg" + && namespace == "default-service-bus-namespace" + && queue == queue_name + }); + if target_is_checkpointed { + break; + } + executor.step().await.unwrap_or_else(|error| { + panic!("desired target checkpoint failed at step {step}: {error}") + }); + } + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + assert_eq!( + controller.commands_resource_group_name.as_deref(), + Some("mock-rg") + ); + assert_eq!( + controller.commands_namespace_name.as_deref(), + Some("default-service-bus-namespace") + ); + assert_eq!( + controller.commands_queue_name.as_deref(), + Some(queue_name.as_str()) + ); + assert!( + !actions + .lock() + .expect("action log lock") + .iter() + .any(|action| action.starts_with("create-queue:")), + "desired target must be durable before queue creation" + ); + + let actions_before_queue = actions.lock().expect("action log lock").len(); + executor + .step() + .await + .expect("apply the checkpointed commands queue"); + { + let actions = actions.lock().expect("action log lock"); + assert_eq!( + &actions[actions_before_queue..], + [format!( + "create-queue:mock-rg/default-service-bus-namespace/{queue_name}" + )], + "the queue PUT must be the only mutation in its controller step" + ); + } + + let actions_before_dapr = actions.lock().expect("action log lock").len(); + executor + .step() + .await + .expect("apply the commands Dapr component"); + { + let actions = actions.lock().expect("action log lock"); + assert_eq!( + &actions[actions_before_dapr..], + [format!("put-dapr:{component_name}")], + "the Dapr PUT must be checkpointed before sender RBAC reconciliation" + ); + } + + for step in 0..40 { + if actions + .lock() + .expect("action log lock") + .iter() + .any(|action| { + action.starts_with("put-rbac:") && action.ends_with(":new-manager-principal") + }) + { + break; + } + executor + .step() + .await + .unwrap_or_else(|error| panic!("new target creation failed at step {step}: {error}")); + } + + let actions = actions.lock().expect("action log lock"); + let delete_dapr = action_index(&actions, &format!("delete-dapr:{component_name}")); + let old_assignment_name = commands_sender_role_assignment_name( + "test", + "commands-target-worker", + "old-manager-principal", + "old-namespace", + &queue_name, + ); + let delete_sender = action_index( + &actions, + &format!( + "delete-rbac:{}", + sender_assignment_id( + "old-resource-group", + "old-namespace", + &queue_name, + &old_assignment_name, + ) + ), + ); + let delete_queue = action_index(&actions, &old_queue_action); + let create_queue = action_index( + &actions, + &format!("create-queue:mock-rg/default-service-bus-namespace/{queue_name}"), + ); + let put_dapr = action_index(&actions, &format!("put-dapr:{component_name}")); + let put_sender = actions + .iter() + .position(|action| { + action.starts_with("put-rbac:") && action.ends_with(":new-manager-principal") + }) + .expect("new direct sender assignment"); + assert!( + delete_dapr < delete_sender + && delete_sender < delete_queue + && delete_queue < create_queue + && create_queue < put_dapr + && put_dapr < put_sender, + "old target must be gone before new target creation: {actions:#?}" + ); + assert_eq!(executor.status(), ResourceStatus::Updating); +} + +fn legacy_commands_provider( + app_name: &str, + queue_deleted: Arc>>, +) -> Arc { + let mut container_apps = MockContainerAppsApi::new(); + let update_name = app_name.to_string(); + container_apps + .expect_update_container_app() + .times(1) + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&update_name, false), + )) + }); + let get_name = app_name.to_string(); + container_apps + .expect_get_container_app() + .times(1) + .returning(move |_, _| Ok(create_successful_container_app_response(&get_name, false))); + container_apps + .expect_get_dapr_component() + .times(1..) + .returning(|_, _, name| Err(remote_not_found(name))); + let container_apps = Arc::new(container_apps); + + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_list_role_assignments() + .times(1) + .returning(|_, _| Ok(Vec::new())); + let authorization = Arc::new(authorization); + + let mut service_bus = MockServiceBusManagementApi::new(); + service_bus.expect_delete_queue().times(1).returning( + move |resource_group, namespace, queue| { + assert_eq!(resource_group, "rotated-resource-group"); + assert_eq!(namespace, "legacy-namespace"); + *queue_deleted.lock().expect("queue deletion lock") = + Some(format!("{resource_group}/{namespace}/{queue}")); + Ok(()) + }, + ); + let service_bus = Arc::new(service_bus); + + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + Arc::new(provider) +} + +#[tokio::test] +async fn legacy_commands_state_without_resource_group_checkpoints_rotated_cleanup_target() { + let app_name = "test-commands-target-worker"; + let queue_name = commands_queue_name(app_name); + let mut previous = basic_function(); + previous.id = "commands-target-worker".to_string(); + previous.commands_enabled = true; + let mut desired = previous.clone(); + desired.commands_enabled = false; + + let mut legacy = AzureWorkerController::mock_ready(app_name); + legacy.commands_resource_group_name = None; + legacy.commands_namespace_name = Some("legacy-namespace".to_string()); + legacy.commands_queue_name = Some(queue_name.clone()); + let mut serialized = serde_json::to_value(legacy).expect("serialize legacy controller"); + serialized + .as_object_mut() + .expect("controller object") + .remove("commandsResourceGroupName"); + let legacy: AzureWorkerController = + serde_json::from_value(serialized).expect("deserialize pre-resource-group state"); + + let queue_deleted = Arc::new(Mutex::new(None)); + let mut namespace = crate::infra_requirements::AzureServiceBusNamespaceController::mock_ready( + "rotated-namespace", + ); + namespace.resource_group_name = Some("rotated-resource-group".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(previous) + .controller(legacy) + .platform(Platform::Azure) + .service_provider(legacy_commands_provider(app_name, queue_deleted.clone())) + .with_test_dependencies() + .with_dependency( + crate::core::controller_test::test_azure_service_bus_namespace(), + namespace, + ) + .build() + .await + .expect("legacy executor"); + executor.update(desired).expect("disable commands update"); + + let mut checkpoint_observed = false; + for step in 0..40 { + if queue_deleted.lock().expect("queue deletion lock").is_some() { + break; + } + executor + .step() + .await + .unwrap_or_else(|error| panic!("legacy cleanup failed at step {step}: {error}")); + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + if controller.commands_update_teardown_candidates_initialized && !checkpoint_observed { + assert_eq!( + controller.commands_resource_group_name.as_deref(), + Some("rotated-resource-group") + ); + assert_eq!( + controller.commands_namespace_name.as_deref(), + Some("legacy-namespace") + ); + assert_eq!( + controller.commands_queue_name.as_deref(), + Some(queue_name.as_str()) + ); + checkpoint_observed = true; + } + } + assert!( + checkpoint_observed, + "the rotated cleanup target must be durably checkpointed before deletion" + ); + assert_eq!( + queue_deleted + .lock() + .expect("queue deletion lock") + .as_deref(), + Some(format!("rotated-resource-group/legacy-namespace/{queue_name}").as_str()) + ); +} diff --git a/crates/alien-infra/src/worker/azure_dapr_components.rs b/crates/alien-infra/src/worker/azure_dapr_components.rs new file mode 100644 index 000000000..a7293454e --- /dev/null +++ b/crates/alien-infra/src/worker/azure_dapr_components.rs @@ -0,0 +1,422 @@ +use alien_azure_clients::container_apps::ContainerAppsApi; +use alien_azure_clients::long_running_operation::{LongRunningOperation, OperationResult}; +use alien_azure_clients::models::managed_environments_dapr_components::{ + DaprComponent, DaprComponentProperties, DaprMetadata, Secret, +}; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_error::{AlienError, Context, ContextError}; +use tracing::{info, warn}; + +use crate::error::{ErrorData, Result}; + +use super::azure_names::get_azure_dapr_component_name; + +pub(super) enum DaprComponentDeleteOperation { + NotFound, + Foreign, + Completed, + LongRunning(LongRunningOperation), +} + +#[derive(Debug)] +pub(super) enum DaprComponentEnsureOperation { + Unchanged, + Completed, + LongRunning(LongRunningOperation), +} + +pub(super) enum LegacyDaprComponentCleanupStep { + Complete, + Mutated, + LongRunning(LongRunningOperation), +} + +pub(super) enum DaprComponentOwnership { + NotFound, + Owned(DaprComponent), + Foreign, +} + +pub(super) enum TrackedDaprComponentDeleteStep { + Complete, + Mutated, + LongRunning { + operation: LongRunningOperation, + component_name: String, + }, +} + +pub(super) fn service_bus_dapr_component( + component_name: String, + container_app_name: &str, + namespace_name: &str, + queue_name: String, + azure_client_id: &str, +) -> DaprComponent { + // Keep the provider constraint at the construction boundary as well as in + // the higher-level naming helpers. This prevents a future raw-name call + // site from sending Azure a component name longer than 60 characters. + let component_name = get_azure_dapr_component_name(&component_name); + let metadata = vec![ + DaprMetadata { + name: Some("namespaceName".into()), + value: Some(format!("{namespace_name}.servicebus.windows.net")), + secret_ref: None, + }, + DaprMetadata { + name: Some("queueName".into()), + value: Some(queue_name), + secret_ref: None, + }, + DaprMetadata { + name: Some("direction".into()), + value: Some("input".into()), + secret_ref: None, + }, + DaprMetadata { + name: Some("azureClientId".into()), + value: Some(azure_client_id.to_string()), + secret_ref: None, + }, + ]; + + DaprComponent { + name: Some(component_name), + properties: Some(DaprComponentProperties { + component_type: Some("bindings.azure.servicebusqueues".to_string()), + ignore_errors: false, + init_timeout: None, + version: Some("v1".to_string()), + metadata, + scopes: vec![container_app_name.to_string()], + secret_store_component: None, + secrets: vec![], + }), + id: None, + system_data: None, + type_: None, + } +} + +pub(super) async fn get_dapr_component_ownership( + client: &dyn ContainerAppsApi, + resource_group_name: &str, + environment_name: &str, + container_app_name: &str, + component_name: &str, + worker_id: &str, +) -> Result { + let component = match client + .get_dapr_component(resource_group_name, environment_name, component_name) + .await + { + Ok(component) => component, + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + return Ok(DaprComponentOwnership::NotFound); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!("Failed to inspect Dapr component '{component_name}'"), + resource_id: Some(worker_id.to_string()), + })); + } + }; + + let scopes = component + .properties + .as_ref() + .map(|properties| properties.scopes.as_slice()) + .unwrap_or_default(); + if scopes == [container_app_name] { + Ok(DaprComponentOwnership::Owned(component)) + } else { + warn!( + worker=%worker_id, + component=%component_name, + scopes=?scopes, + "Dapr component is not exclusively scoped to this worker" + ); + Ok(DaprComponentOwnership::Foreign) + } +} + +pub(super) async fn delete_dapr_component_if_owned( + client: &dyn ContainerAppsApi, + resource_group_name: &str, + environment_name: &str, + container_app_name: &str, + component_name: &str, + worker_id: &str, +) -> Result { + match get_dapr_component_ownership( + client, + resource_group_name, + environment_name, + container_app_name, + component_name, + worker_id, + ) + .await? + { + DaprComponentOwnership::NotFound => return Ok(DaprComponentDeleteOperation::NotFound), + DaprComponentOwnership::Foreign => return Ok(DaprComponentDeleteOperation::Foreign), + DaprComponentOwnership::Owned(_) => {} + } + + match client + .delete_dapr_component(resource_group_name, environment_name, component_name) + .await + { + Ok(OperationResult::Completed(())) => Ok(DaprComponentDeleteOperation::Completed), + Ok(OperationResult::LongRunning(lro)) => Ok(DaprComponentDeleteOperation::LongRunning(lro)), + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + Ok(DaprComponentDeleteOperation::NotFound) + } + Err(error) => Err(error.context(ErrorData::CloudPlatformError { + message: format!("Failed to delete Dapr component '{component_name}'"), + resource_id: Some(worker_id.to_string()), + })), + } +} + +async fn dapr_component_needs_write( + client: &dyn ContainerAppsApi, + resource_group_name: &str, + environment_name: &str, + container_app_name: &str, + desired: &DaprComponent, + worker_id: &str, +) -> Result { + let component_name = desired.name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker_id.to_string(), + message: "Desired Dapr component has no name".to_string(), + }) + })?; + match get_dapr_component_ownership( + client, + resource_group_name, + environment_name, + container_app_name, + component_name, + worker_id, + ) + .await? + { + DaprComponentOwnership::NotFound => Ok(true), + DaprComponentOwnership::Owned(existing) => Ok(!dapr_component_matches(&existing, desired)), + DaprComponentOwnership::Foreign => Err(AlienError::new(ErrorData::ResourceDrift { + resource_id: worker_id.to_string(), + message: format!("Dapr component '{component_name}' is owned by another Container App"), + })), + } +} + +pub(super) async fn ensure_dapr_component( + client: &dyn ContainerAppsApi, + resource_group_name: &str, + environment_name: &str, + container_app_name: &str, + desired: &DaprComponent, + worker_id: &str, +) -> Result { + let component_name = desired.name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker_id.to_string(), + message: "Desired Dapr component has no name".to_string(), + }) + })?; + if !dapr_component_needs_write( + client, + resource_group_name, + environment_name, + container_app_name, + desired, + worker_id, + ) + .await? + { + return Ok(DaprComponentEnsureOperation::Unchanged); + } + + match client + .create_or_update_dapr_component( + resource_group_name, + environment_name, + component_name, + desired, + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!("Failed to create or update Dapr component '{component_name}'"), + resource_id: Some(worker_id.to_string()), + })? { + OperationResult::Completed(_) => Ok(DaprComponentEnsureOperation::Completed), + OperationResult::LongRunning(operation) => { + Ok(DaprComponentEnsureOperation::LongRunning(operation)) + } + } +} + +pub(super) async fn delete_owned_legacy_dapr_components( + client: &dyn ContainerAppsApi, + resource_group_name: &str, + environment_name: &str, + container_app_name: &str, + desired_component_name: &str, + legacy_component_names: &[String], + worker_id: &str, +) -> Result { + for legacy_component_name in legacy_component_names { + if legacy_component_name == desired_component_name { + continue; + } + + match delete_dapr_component_if_owned( + client, + resource_group_name, + environment_name, + container_app_name, + legacy_component_name, + worker_id, + ) + .await? + { + DaprComponentDeleteOperation::NotFound | DaprComponentDeleteOperation::Foreign => {} + DaprComponentDeleteOperation::Completed => { + return Ok(LegacyDaprComponentCleanupStep::Mutated); + } + DaprComponentDeleteOperation::LongRunning(lro) => { + info!( + worker=%worker_id, + component=%legacy_component_name, + replacement=%desired_component_name, + "Waiting for legacy Dapr component deletion before creating its structured replacement" + ); + return Ok(LegacyDaprComponentCleanupStep::LongRunning(lro)); + } + } + } + + Ok(LegacyDaprComponentCleanupStep::Complete) +} + +pub(super) fn dapr_component_matches(existing: &DaprComponent, desired: &DaprComponent) -> bool { + let (Some(existing_properties), Some(desired_properties)) = + (existing.properties.as_ref(), desired.properties.as_ref()) + else { + return false; + }; + + existing.name == desired.name + && existing_properties.component_type == desired_properties.component_type + && existing_properties.ignore_errors == desired_properties.ignore_errors + && existing_properties.init_timeout == desired_properties.init_timeout + && existing_properties.version == desired_properties.version + && existing_properties.scopes == desired_properties.scopes + && existing_properties.secret_store_component == desired_properties.secret_store_component + && normalized_metadata(&existing_properties.metadata) + == normalized_metadata(&desired_properties.metadata) + && normalized_secrets(&existing_properties.secrets) + == normalized_secrets(&desired_properties.secrets) +} + +fn normalized_metadata( + metadata: &[DaprMetadata], +) -> Vec<(Option<&str>, Option<&str>, Option<&str>)> { + let mut normalized = metadata + .iter() + .map(|entry| { + ( + entry.name.as_deref(), + entry.value.as_deref(), + entry.secret_ref.as_deref(), + ) + }) + .collect::>(); + normalized.sort_unstable(); + normalized +} + +fn normalized_secrets( + secrets: &[Secret], +) -> Vec<(Option<&str>, Option<&str>, Option<&str>, Option<&str>)> { + let mut normalized = secrets + .iter() + .map(|secret| { + ( + secret.name.as_deref(), + secret.value.as_deref(), + secret.identity.as_deref(), + secret.key_vault_url.as_deref(), + ) + }) + .collect::>(); + normalized.sort_unstable(); + normalized +} + +#[cfg(test)] +mod tests { + use super::service_bus_dapr_component; + use crate::worker::azure_names::get_azure_internal_commands_dapr_component_name; + + const LIVE_E2E_COMMANDS_COMPONENT_NAME: &str = + "servicebus-e2e-03-azure-terraform-pr-1608f028be-test-alien-ts-function-commands"; + + #[test] + fn service_bus_component_normalizes_the_live_e2e_name_at_the_request_boundary() { + let first = service_bus_dapr_component( + LIVE_E2E_COMMANDS_COMPONENT_NAME.to_string(), + "worker-app", + "namespace", + "commands".to_string(), + "client-id", + ); + let second = service_bus_dapr_component( + LIVE_E2E_COMMANDS_COMPONENT_NAME.to_string(), + "worker-app", + "namespace", + "commands".to_string(), + "client-id", + ); + + let first_name = first.name.expect("Dapr component should have a name"); + assert_eq!( + first_name, + "servicebus-e2e-03-azure-ter-b11ae730a7375f62a2bcaddaa1abe84c" + ); + assert_eq!(second.name.as_deref(), Some(first_name.as_str())); + assert_eq!(first_name.len(), 60); + assert!(first_name + .chars() + .last() + .is_some_and(|character| character.is_ascii_alphanumeric())); + } + + #[test] + fn service_bus_component_does_not_rehash_a_structured_safe_name() { + let structured_name = get_azure_internal_commands_dapr_component_name( + "e2e-03-azure-terraform-pr-1608f028be-test-alien-ts-function", + ); + let component = service_bus_dapr_component( + structured_name.clone(), + "worker-app", + "namespace", + "commands".to_string(), + "client-id", + ); + + assert_eq!(component.name.as_deref(), Some(structured_name.as_str())); + } +} diff --git a/crates/alien-infra/src/worker/azure_dapr_names_migration.rs b/crates/alien-infra/src/worker/azure_dapr_names_migration.rs new file mode 100644 index 000000000..0a3b5672a --- /dev/null +++ b/crates/alien-infra/src/worker/azure_dapr_names_migration.rs @@ -0,0 +1,640 @@ +use alien_azure_clients::long_running_operation::LongRunningOperation; +use alien_azure_clients::models::managed_environments_dapr_components::DaprComponent; +use alien_core::{ResourceRef, Worker}; +use alien_error::AlienError; + +use super::azure::AzureWorkerController; +use super::azure_dapr_components::{ + delete_dapr_component_if_owned, ensure_dapr_component, get_dapr_component_ownership, + service_bus_dapr_component, DaprComponentDeleteOperation, DaprComponentEnsureOperation, + DaprComponentOwnership, TrackedDaprComponentDeleteStep, +}; +use super::azure_names::{ + commands_queue_name, get_azure_blob_trigger_dapr_component_name, get_azure_dapr_component_name, + get_azure_internal_commands_dapr_component_name, get_azure_queue_trigger_dapr_component_name, + get_legacy_azure_blob_trigger_dapr_component_names, + get_legacy_azure_internal_commands_dapr_component_names, + get_legacy_azure_queue_trigger_dapr_component_names, storage_trigger_queue_name, +}; +use crate::core::ResourceControllerContext; +use crate::error::{ErrorData, Result}; +use crate::infra_requirements::azure_utils::get_container_apps_environment_outputs; + +pub(super) const CURRENT_DAPR_COMPONENT_NAMING_VERSION: u8 = 1; + +pub(super) enum DaprComponentMigrationStep { + Complete, + Mutated, + LongRunning { + operation: LongRunningOperation, + deleted_component: Option, + }, +} + +enum MigrationAction { + EnsureCommands { + component: DaprComponent, + legacy_names: Vec, + }, + RemoveCommands { + names: Vec, + }, + EnsureTrigger { + component: DaprComponent, + legacy_names: Vec, + }, + KeepTrigger { + name: String, + }, +} + +fn push_unique(names: &mut Vec, name: String) { + if !names.contains(&name) { + names.push(name); + } +} + +pub(super) fn commands_component_removal_names( + container_app_name: &str, + tracked_component_name: Option<&str>, +) -> Vec { + let mut names = Vec::new(); + if let Some(component_name) = tracked_component_name { + push_unique(&mut names, component_name.to_string()); + } + push_unique( + &mut names, + get_azure_internal_commands_dapr_component_name(container_app_name), + ); + for legacy_name in get_legacy_azure_internal_commands_dapr_component_names(container_app_name) { + push_unique(&mut names, legacy_name); + } + names +} + +fn append_trigger_dapr_component_deletion_candidates( + names: &mut Vec, + worker: &Worker, + container_app_name: &str, +) { + let mut cron_index = 0usize; + for trigger in &worker.triggers { + match trigger { + alien_core::WorkerTrigger::Queue { queue } => { + push_unique( + names, + get_azure_queue_trigger_dapr_component_name(container_app_name, &queue.id), + ); + for legacy_name in get_legacy_azure_queue_trigger_dapr_component_names( + container_app_name, + &queue.id, + ) { + push_unique(names, legacy_name); + } + } + alien_core::WorkerTrigger::Storage { storage, .. } => { + push_unique( + names, + get_azure_blob_trigger_dapr_component_name(container_app_name, &storage.id), + ); + for legacy_name in get_legacy_azure_blob_trigger_dapr_component_names( + container_app_name, + &storage.id, + ) { + push_unique(names, legacy_name); + } + } + alien_core::WorkerTrigger::Schedule { .. } => { + push_unique( + names, + get_azure_dapr_component_name(&format!( + "cron-{container_app_name}-{cron_index}" + )), + ); + cron_index += 1; + } + } + } +} + +fn dapr_component_deletion_candidates( + worker: &Worker, + container_app_name: &str, + tracked_trigger_components: &[String], + tracked_commands_component: Option<&str>, +) -> Vec { + let mut names = tracked_trigger_components.to_vec(); + if let Some(component_name) = tracked_commands_component { + push_unique(&mut names, component_name.to_string()); + } + + push_unique( + &mut names, + get_azure_internal_commands_dapr_component_name(container_app_name), + ); + for legacy_name in get_legacy_azure_internal_commands_dapr_component_names(container_app_name) { + push_unique(&mut names, legacy_name); + } + + append_trigger_dapr_component_deletion_candidates(&mut names, worker, container_app_name); + + names +} + +impl AzureWorkerController { + pub(super) fn initialize_dapr_component_deletion_candidates( + &mut self, + worker: &Worker, + container_app_name: &str, + ) -> bool { + if self.dapr_component_deletion_candidates_initialized { + return false; + } + + self.dapr_components = dapr_component_deletion_candidates( + worker, + container_app_name, + &self.dapr_components, + self.commands_dapr_component.as_deref(), + ); + self.dapr_component_deletion_candidates_initialized = true; + true + } + + pub(super) fn initialize_trigger_update_teardown_candidates( + &mut self, + previous_worker: &Worker, + container_app_name: &str, + ) { + let mut names = self.dapr_components.clone(); + append_trigger_dapr_component_deletion_candidates( + &mut names, + previous_worker, + container_app_name, + ); + self.dapr_components = names; + } + + fn default_service_bus_namespace_name( + ctx: &ResourceControllerContext<'_>, + worker_id: &str, + ) -> Result { + let namespace_ref = ResourceRef::new( + alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, + "default-service-bus-namespace", + ); + let namespace = ctx.require_dependency::(&namespace_ref)?; + namespace.namespace_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker_id.to_string(), + dependency_id: namespace_ref.id, + }) + }) + } + + fn worker_execution_client_id( + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + ) -> Result { + let service_account_ref = ResourceRef::new( + alien_core::ServiceAccount::RESOURCE_TYPE, + format!("{}-sa", worker.get_permissions()), + ); + let service_account = ctx + .require_dependency::( + &service_account_ref, + )?; + service_account.identity_client_id.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: service_account_ref.id, + }) + }) + } + + fn dapr_component_migration_plan( + &self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + ) -> Result> { + let needs_worker_identity = worker.commands_enabled + || worker.triggers.iter().any(|trigger| { + matches!( + trigger, + alien_core::WorkerTrigger::Queue { .. } + | alien_core::WorkerTrigger::Storage { .. } + ) + }); + let azure_client_id = needs_worker_identity + .then(|| Self::worker_execution_client_id(ctx, worker)) + .transpose()?; + let needs_default_namespace = worker.commands_enabled + || worker + .triggers + .iter() + .any(|trigger| matches!(trigger, alien_core::WorkerTrigger::Storage { .. })); + let default_namespace = needs_default_namespace + .then(|| Self::default_service_bus_namespace_name(ctx, &worker.id)) + .transpose()?; + let resolved_worker_execution_client_id = || { + azure_client_id.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: "Dapr migration plan requires a worker execution identity".to_string(), + operation: Some("build_dapr_component_migration_plan".to_string()), + resource_id: Some(worker.id.clone()), + }) + }) + }; + let mut plan = Vec::new(); + + if worker.commands_enabled { + let component_name = + get_azure_internal_commands_dapr_component_name(container_app_name); + let namespace_name = default_namespace.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: "default-service-bus-namespace".to_string(), + }) + })?; + let mut legacy_names = + get_legacy_azure_internal_commands_dapr_component_names(container_app_name); + if let Some(persisted_name) = &self.commands_dapr_component { + push_unique(&mut legacy_names, persisted_name.clone()); + } + plan.push(MigrationAction::EnsureCommands { + component: service_bus_dapr_component( + component_name, + container_app_name, + namespace_name, + commands_queue_name(container_app_name), + resolved_worker_execution_client_id()?, + ), + legacy_names, + }); + } else { + let names = commands_component_removal_names( + container_app_name, + self.commands_dapr_component.as_deref(), + ); + plan.push(MigrationAction::RemoveCommands { names }); + } + + for trigger in &worker.triggers { + match trigger { + alien_core::WorkerTrigger::Queue { queue } => { + let queue_controller = + ctx.require_dependency::(queue)?; + let namespace_name = + queue_controller.namespace_name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: queue.id.clone(), + }) + })?; + let queue_name = queue_controller.queue_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: queue.id.clone(), + }) + })?; + let component_name = + get_azure_queue_trigger_dapr_component_name(container_app_name, &queue.id); + plan.push(MigrationAction::EnsureTrigger { + component: service_bus_dapr_component( + component_name, + container_app_name, + namespace_name, + queue_name, + resolved_worker_execution_client_id()?, + ), + legacy_names: get_legacy_azure_queue_trigger_dapr_component_names( + container_app_name, + &queue.id, + ), + }); + } + alien_core::WorkerTrigger::Storage { storage, .. } => { + let component_name = + get_azure_blob_trigger_dapr_component_name(container_app_name, &storage.id); + let namespace_name = default_namespace.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: "default-service-bus-namespace".to_string(), + }) + })?; + plan.push(MigrationAction::EnsureTrigger { + component: service_bus_dapr_component( + component_name, + container_app_name, + namespace_name, + storage_trigger_queue_name(container_app_name, &storage.id), + resolved_worker_execution_client_id()?, + ), + legacy_names: get_legacy_azure_blob_trigger_dapr_component_names( + container_app_name, + &storage.id, + ), + }); + } + alien_core::WorkerTrigger::Schedule { .. } => { + let name = get_azure_dapr_component_name(&format!( + "cron-{container_app_name}-{}", + plan.iter() + .filter(|action| matches!(action, MigrationAction::KeepTrigger { .. })) + .count() + )); + plan.push(MigrationAction::KeepTrigger { name }); + } + } + } + + Ok(plan) + } + + async fn reconcile_dapr_component( + &self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + component: &DaprComponent, + legacy_names: &[String], + ) -> Result { + let azure_config = ctx.get_azure_config()?; + let env_outputs = get_container_apps_environment_outputs(ctx.state)?; + let client = ctx + .service_provider + .get_azure_container_apps_client(azure_config)?; + let desired_name = component.name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: "Dapr migration component has no name".to_string(), + }) + })?; + if matches!( + get_dapr_component_ownership( + client.as_ref(), + &env_outputs.resource_group_name, + &env_outputs.environment_name, + container_app_name, + desired_name, + &worker.id, + ) + .await?, + DaprComponentOwnership::Foreign + ) { + return Err(AlienError::new(ErrorData::ResourceDrift { + resource_id: worker.id.clone(), + message: format!( + "Dapr component '{desired_name}' is owned by another Container App" + ), + })); + } + for legacy_name in legacy_names { + if legacy_name == desired_name { + continue; + } + match delete_dapr_component_if_owned( + client.as_ref(), + &env_outputs.resource_group_name, + &env_outputs.environment_name, + container_app_name, + legacy_name, + &worker.id, + ) + .await? + { + DaprComponentDeleteOperation::NotFound | DaprComponentDeleteOperation::Foreign => {} + DaprComponentDeleteOperation::Completed => { + return Ok(DaprComponentMigrationStep::Mutated); + } + DaprComponentDeleteOperation::LongRunning(operation) => { + return Ok(DaprComponentMigrationStep::LongRunning { + operation, + deleted_component: None, + }); + } + } + } + + match ensure_dapr_component( + client.as_ref(), + &env_outputs.resource_group_name, + &env_outputs.environment_name, + container_app_name, + component, + &worker.id, + ) + .await? + { + DaprComponentEnsureOperation::Unchanged => Ok(DaprComponentMigrationStep::Complete), + DaprComponentEnsureOperation::Completed => Ok(DaprComponentMigrationStep::Mutated), + DaprComponentEnsureOperation::LongRunning(operation) => { + Ok(DaprComponentMigrationStep::LongRunning { + operation, + deleted_component: None, + }) + } + } + } + + async fn remove_commands_dapr_components( + &self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + names: &[String], + ) -> Result { + let azure_config = ctx.get_azure_config()?; + let env_outputs = get_container_apps_environment_outputs(ctx.state)?; + let client = ctx + .service_provider + .get_azure_container_apps_client(azure_config)?; + for name in names { + match delete_dapr_component_if_owned( + client.as_ref(), + &env_outputs.resource_group_name, + &env_outputs.environment_name, + container_app_name, + name, + &worker.id, + ) + .await? + { + DaprComponentDeleteOperation::NotFound | DaprComponentDeleteOperation::Foreign => {} + DaprComponentDeleteOperation::Completed => { + return Ok(DaprComponentMigrationStep::Mutated); + } + DaprComponentDeleteOperation::LongRunning(operation) => { + return Ok(DaprComponentMigrationStep::LongRunning { + operation, + deleted_component: None, + }); + } + } + } + Ok(DaprComponentMigrationStep::Complete) + } + + pub(super) async fn migrate_dapr_component_names( + &mut self, + ctx: &ResourceControllerContext<'_>, + ) -> Result { + let worker = ctx.desired_resource_config::()?; + let container_app_name = self.container_app_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: "Container app name not set in state".to_string(), + }) + })?; + let plan = self.dapr_component_migration_plan(ctx, worker, &container_app_name)?; + let desired_trigger_names = + plan.iter() + .filter_map(|action| match action { + MigrationAction::EnsureTrigger { component, .. } => component.name.clone(), + MigrationAction::KeepTrigger { name } => Some(name.clone()), + MigrationAction::EnsureCommands { .. } + | MigrationAction::RemoveCommands { .. } => None, + }) + .collect::>(); + + if let Some(component_name) = self + .dapr_components + .iter() + .find(|name| !desired_trigger_names.contains(name)) + .cloned() + { + return match self + .delete_tracked_dapr_component( + ctx, + &container_app_name, + &worker.id, + &component_name, + ) + .await? + { + TrackedDaprComponentDeleteStep::Complete => { + unreachable!("a component was supplied") + } + TrackedDaprComponentDeleteStep::Mutated => { + self.dapr_components.retain(|name| name != &component_name); + Ok(DaprComponentMigrationStep::Mutated) + } + TrackedDaprComponentDeleteStep::LongRunning { + operation, + component_name, + } => Ok(DaprComponentMigrationStep::LongRunning { + operation, + deleted_component: Some(component_name), + }), + }; + } + + for action in &plan { + match action { + MigrationAction::EnsureCommands { + component, + legacy_names, + } => match self + .reconcile_dapr_component( + ctx, + worker, + &container_app_name, + component, + legacy_names, + ) + .await? + { + DaprComponentMigrationStep::Complete => { + if self.commands_dapr_component != component.name { + self.commands_dapr_component = component.name.clone(); + return Ok(DaprComponentMigrationStep::Mutated); + } + } + step => return Ok(step), + }, + MigrationAction::RemoveCommands { names } => match self + .remove_commands_dapr_components(ctx, worker, &container_app_name, names) + .await? + { + DaprComponentMigrationStep::Complete => { + if self.commands_dapr_component.take().is_some() { + return Ok(DaprComponentMigrationStep::Mutated); + } + } + step => return Ok(step), + }, + MigrationAction::EnsureTrigger { + component, + legacy_names, + } => match self + .reconcile_dapr_component( + ctx, + worker, + &container_app_name, + component, + legacy_names, + ) + .await? + { + DaprComponentMigrationStep::Complete => {} + step => return Ok(step), + }, + MigrationAction::KeepTrigger { .. } => {} + } + } + + if self.dapr_components != desired_trigger_names { + self.dapr_components = desired_trigger_names; + return Ok(DaprComponentMigrationStep::Mutated); + } + self.dapr_component_naming_version = CURRENT_DAPR_COMPONENT_NAMING_VERSION; + Ok(DaprComponentMigrationStep::Complete) + } + + pub(super) async fn delete_tracked_dapr_component( + &self, + ctx: &ResourceControllerContext<'_>, + container_app_name: &str, + worker_id: &str, + component_name: &str, + ) -> Result { + let azure_config = ctx.get_azure_config()?; + let env_outputs = get_container_apps_environment_outputs(ctx.state)?; + let client = ctx + .service_provider + .get_azure_container_apps_client(azure_config)?; + match delete_dapr_component_if_owned( + client.as_ref(), + &env_outputs.resource_group_name, + &env_outputs.environment_name, + container_app_name, + component_name, + worker_id, + ) + .await? + { + DaprComponentDeleteOperation::NotFound + | DaprComponentDeleteOperation::Foreign + | DaprComponentDeleteOperation::Completed => { + Ok(TrackedDaprComponentDeleteStep::Mutated) + } + DaprComponentDeleteOperation::LongRunning(operation) => { + Ok(TrackedDaprComponentDeleteStep::LongRunning { + operation, + component_name: component_name.to_string(), + }) + } + } + } + + pub(super) fn complete_pending_dapr_component_deletion(&mut self) { + if let Some(component_name) = self.pending_dapr_component_deletion_name.take() { + self.dapr_components.retain(|name| name != &component_name); + } + } +} + +#[cfg(test)] +#[path = "azure_dapr_names_migration_tests.rs"] +mod tests; diff --git a/crates/alien-infra/src/worker/azure_dapr_names_migration_tests.rs b/crates/alien-infra/src/worker/azure_dapr_names_migration_tests.rs new file mode 100644 index 000000000..99fe6bae4 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_dapr_names_migration_tests.rs @@ -0,0 +1,380 @@ +use std::time::Duration; + +use alien_azure_clients::container_apps::MockContainerAppsApi; +use alien_azure_clients::long_running_operation::{LongRunningOperation, OperationResult}; +use alien_azure_clients::models::managed_environments_dapr_components::{DaprComponent, Secret}; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_core::{Queue, ResourceRef, Storage, Worker, WorkerCode, WorkerTrigger}; +use alien_error::AlienError; + +use super::*; +use crate::worker::azure_dapr_components::{ + dapr_component_matches, delete_dapr_component_if_owned, delete_owned_legacy_dapr_components, + ensure_dapr_component, service_bus_dapr_component, DaprComponentDeleteOperation, + DaprComponentEnsureOperation, LegacyDaprComponentCleanupStep, +}; +use crate::worker::azure_names::{ + get_azure_blob_trigger_dapr_component_name, get_azure_dapr_component_name, + get_azure_internal_commands_dapr_component_name, get_azure_queue_trigger_dapr_component_name, + get_legacy_azure_internal_commands_dapr_component_names, + get_legacy_azure_queue_trigger_dapr_component_names, +}; +use crate::worker::AzureWorkerController; + +#[test] +fn disabled_imported_worker_removes_current_structured_commands_component() { + let current_name = get_azure_internal_commands_dapr_component_name("worker-app"); + + let imported_names = commands_component_removal_names("worker-app", None); + assert!(imported_names.contains(¤t_name)); + + let tracked_names = commands_component_removal_names("worker-app", Some(¤t_name)); + assert_eq!( + tracked_names + .iter() + .filter(|component_name| *component_name == ¤t_name) + .count(), + 1 + ); +} + +#[test] +fn deletion_plan_covers_queue_storage_and_cron_without_touching_cron_naming() { + let worker = worker_with_triggers(vec![ + WorkerTrigger::Queue { + queue: ResourceRef::new(Queue::RESOURCE_TYPE, "events"), + }, + WorkerTrigger::Storage { + storage: ResourceRef::new(Storage::RESOURCE_TYPE, "archive"), + events: vec!["created".to_string()], + }, + WorkerTrigger::schedule("0 * * * *"), + ]); + + let names = dapr_component_deletion_candidates(&worker, "worker-app", &[], None); + + assert!(names.contains(&get_azure_queue_trigger_dapr_component_name( + "worker-app", + "events" + ))); + assert!(names.contains(&get_azure_blob_trigger_dapr_component_name( + "worker-app", + "archive" + ))); + assert!(names.contains(&get_azure_dapr_component_name("cron-worker-app-0"))); +} + +#[test] +fn deletion_plan_deduplicates_shared_commands_and_queue_legacy_alias() { + let worker = worker_with_triggers(vec![WorkerTrigger::Queue { + queue: ResourceRef::new(Queue::RESOURCE_TYPE, "internal-commands"), + }]); + let command_legacy = get_legacy_azure_internal_commands_dapr_component_names("worker-app"); + let queue_legacy = + get_legacy_azure_queue_trigger_dapr_component_names("worker-app", "internal-commands"); + let shared_name = command_legacy + .iter() + .find(|name| queue_legacy.contains(name)) + .expect("historical commands and queue names should overlap"); + + let names = dapr_component_deletion_candidates(&worker, "worker-app", &[], None); + + assert_eq!(names.iter().filter(|name| *name == shared_name).count(), 1); +} + +#[test] +fn imported_empty_tracking_is_repaired_once_before_delete() { + let worker = worker_with_triggers(vec![WorkerTrigger::Storage { + storage: ResourceRef::new(Storage::RESOURCE_TYPE, "archive"), + events: vec!["created".to_string()], + }]); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.dapr_component_naming_version = 0; + controller.dapr_components.clear(); + controller.commands_dapr_component = None; + + assert!(controller.initialize_dapr_component_deletion_candidates(&worker, "worker-app")); + assert!(!controller.dapr_components.is_empty()); + assert!(controller + .dapr_components + .contains(&get_azure_internal_commands_dapr_component_name( + "worker-app" + ))); + assert!(controller + .dapr_components + .contains(&get_azure_blob_trigger_dapr_component_name( + "worker-app", + "archive" + ))); + assert_eq!(controller.dapr_component_naming_version, 0); + + let persisted_names = controller.dapr_components.clone(); + assert!(!controller.initialize_dapr_component_deletion_candidates(&worker, "worker-app")); + assert_eq!(controller.dapr_components, persisted_names); +} + +#[test] +fn pending_delete_completion_does_not_advance_migration_version() { + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.dapr_component_naming_version = 0; + controller.dapr_components = vec!["legacy-component".to_string()]; + controller.pending_dapr_component_deletion_name = Some("legacy-component".to_string()); + + controller.complete_pending_dapr_component_deletion(); + + assert!(controller.dapr_components.is_empty()); + assert_eq!(controller.dapr_component_naming_version, 0); +} + +#[test] +fn service_bus_component_validation_detects_all_mutable_property_drift() { + let desired = service_bus_dapr_component( + "component".to_string(), + "worker-app", + "namespace", + "queue".to_string(), + "client-id", + ); + assert!(dapr_component_matches(&desired, &desired)); + + let mut metadata_drift = desired.clone(); + metadata_drift + .properties + .as_mut() + .unwrap() + .metadata + .iter_mut() + .find(|metadata| metadata.name.as_deref() == Some("queueName")) + .unwrap() + .value = Some("wrong-queue".to_string()); + assert!(!dapr_component_matches(&metadata_drift, &desired)); + + let mut ignore_errors_drift = desired.clone(); + ignore_errors_drift + .properties + .as_mut() + .unwrap() + .ignore_errors = true; + assert!(!dapr_component_matches(&ignore_errors_drift, &desired)); + + let mut init_timeout_drift = desired.clone(); + init_timeout_drift.properties.as_mut().unwrap().init_timeout = Some("30s".to_string()); + assert!(!dapr_component_matches(&init_timeout_drift, &desired)); + + let mut secret_store_drift = desired.clone(); + secret_store_drift + .properties + .as_mut() + .unwrap() + .secret_store_component = Some("secret-store".to_string()); + assert!(!dapr_component_matches(&secret_store_drift, &desired)); + + let mut secrets_drift = desired.clone(); + secrets_drift.properties.as_mut().unwrap().secrets = vec![Secret { + identity: None, + key_vault_url: None, + name: Some("token".to_string()), + value: Some("secret".to_string()), + }]; + assert!(!dapr_component_matches(&secrets_drift, &desired)); +} + +#[tokio::test] +async fn legacy_cleanup_deletes_only_component_owned_by_worker() { + let mut client = MockContainerAppsApi::new(); + client + .expect_get_dapr_component() + .returning(|_, _, _| Ok(component_with_scopes(&["worker-app"]))); + client + .expect_delete_dapr_component() + .returning(|_, _, _| Ok(OperationResult::Completed(()))); + + let operation = delete_owned_legacy_dapr_components( + &client, + "environment-rg", + "environment", + "worker-app", + "structured-component", + &["legacy-component".to_string()], + "worker", + ) + .await + .unwrap(); + + assert!(matches!(operation, LegacyDaprComponentCleanupStep::Mutated)); +} + +#[tokio::test] +async fn legacy_cleanup_preserves_foreign_collision() { + let mut client = MockContainerAppsApi::new(); + client + .expect_get_dapr_component() + .returning(|_, _, _| Ok(component_with_scopes(&["other-worker-app"]))); + client.expect_delete_dapr_component().times(0); + + let operation = delete_owned_legacy_dapr_components( + &client, + "environment-rg", + "environment", + "worker-app", + "structured-component", + &["legacy-component".to_string()], + "worker", + ) + .await + .unwrap(); + + assert!(matches!( + operation, + LegacyDaprComponentCleanupStep::Complete + )); +} + +#[tokio::test] +async fn foreign_desired_name_is_rejected_before_write() { + let mut client = MockContainerAppsApi::new(); + client + .expect_get_dapr_component() + .returning(|_, _, _| Ok(component_with_scopes(&["other-worker-app"]))); + + let desired = service_bus_dapr_component( + "structured-component".to_string(), + "worker-app", + "namespace", + "queue".to_string(), + "client-id", + ); + let error = ensure_dapr_component( + &client, + "environment-rg", + "environment", + "worker-app", + &desired, + "worker", + ) + .await + .unwrap_err(); + + assert!(matches!(error.error, Some(ErrorData::ResourceDrift { .. }))); +} + +#[tokio::test] +async fn matching_owned_component_converges_without_another_put() { + let desired = service_bus_dapr_component( + "structured-component".to_string(), + "worker-app", + "namespace", + "queue".to_string(), + "client-id", + ); + let existing = desired.clone(); + let mut client = MockContainerAppsApi::new(); + client + .expect_get_dapr_component() + .times(1) + .return_once(move |_, _, _| Ok(existing)); + client.expect_create_or_update_dapr_component().times(0); + + let operation = ensure_dapr_component( + &client, + "environment-rg", + "environment", + "worker-app", + &desired, + "worker", + ) + .await + .unwrap(); + + assert!(matches!(operation, DaprComponentEnsureOperation::Unchanged)); +} + +#[tokio::test] +async fn legacy_cleanup_returns_delete_lro_to_state_handler() { + let mut client = MockContainerAppsApi::new(); + client + .expect_get_dapr_component() + .returning(|_, _, _| Ok(component_with_scopes(&["worker-app"]))); + client.expect_delete_dapr_component().returning(|_, _, _| { + Ok(OperationResult::LongRunning(LongRunningOperation { + url: "https://management.azure.com/operations/delete-legacy".to_string(), + retry_after: Some(Duration::from_secs(2)), + location_url: None, + })) + }); + + let operation = match delete_owned_legacy_dapr_components( + &client, + "environment-rg", + "environment", + "worker-app", + "structured-component", + &["legacy-component".to_string()], + "worker", + ) + .await + .unwrap() + { + LegacyDaprComponentCleanupStep::LongRunning(operation) => operation, + _ => panic!("delete should be awaited before creating the replacement"), + }; + + assert_eq!( + operation.url, + "https://management.azure.com/operations/delete-legacy" + ); +} + +#[tokio::test] +async fn delete_404_after_owned_get_is_idempotent_success() { + let mut client = MockContainerAppsApi::new(); + client + .expect_get_dapr_component() + .returning(|_, _, _| Ok(component_with_scopes(&["worker-app"]))); + client.expect_delete_dapr_component().returning(|_, _, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: "legacy-component".to_string(), + }, + )) + }); + + let operation = delete_dapr_component_if_owned( + &client, + "environment-rg", + "environment", + "worker-app", + "legacy-component", + "worker", + ) + .await + .unwrap(); + + assert!(matches!(operation, DaprComponentDeleteOperation::NotFound)); +} + +fn component_with_scopes(scopes: &[&str]) -> DaprComponent { + let mut component = service_bus_dapr_component( + "legacy-component".to_string(), + "worker-app", + "namespace", + "queue".to_string(), + "client-id", + ); + component.properties.as_mut().unwrap().scopes = + scopes.iter().map(|scope| (*scope).to_string()).collect(); + component +} + +fn worker_with_triggers(triggers: Vec) -> Worker { + let mut builder = Worker::new("worker".to_string()) + .code(WorkerCode::Image { + image: "registry.invalid/worker:latest".to_string(), + }) + .permissions("default-profile".to_string()); + for trigger in triggers { + builder = builder.trigger(trigger); + } + builder.build() +} diff --git a/crates/alien-infra/src/worker/azure_import.rs b/crates/alien-infra/src/worker/azure_import.rs index 0de264d38..587edb237 100644 --- a/crates/alien-infra/src/worker/azure_import.rs +++ b/crates/alien-infra/src/worker/azure_import.rs @@ -38,16 +38,22 @@ impl ResourceImporter for AzureWorkerImporter { pending_operation_retry_after: None, dapr_components: Vec::new(), storage_trigger_infrastructure: Vec::new(), + storage_trigger_teardown_progress: Default::default(), fqdn: data.fqdn, certificate_id: None, keyvault_cert_id: None, container_apps_certificate_id: None, uses_custom_domain: false, certificate_issued_at: None, + commands_resource_group_name: None, commands_namespace_name: None, commands_queue_name: None, + commands_queue_applied: false, commands_dapr_component: None, + commands_dapr_component_deletion_candidates: Vec::new(), commands_sender_role_assignment_id: None, + commands_sender_role_assignment_intent: None, + commands_sender_role_assignment_discovery_complete: false, commands_receiver_role_assignment_id: None, commands_infrastructure_auth_wait_until_epoch_secs: None, container_apps_environment_wake_wait_until_epoch_secs: None, @@ -56,6 +62,13 @@ impl ResourceImporter for AzureWorkerImporter { ready_rbac_wait_until_epoch_secs: None, update_rbac_wait_required: false, update_dapr_components_deleted: false, + dapr_component_naming_version: 0, + pending_dapr_component_deletion_name: None, + dapr_component_deletion_candidates_initialized: false, + auxiliary_teardown_candidates_initialized: false, + commands_update_teardown_candidates_initialized: false, + trigger_update_teardown_candidates_initialized: false, + storage_delivery_update_reconciliation_initialized: false, _internal_stay_count: None, }; make_imported_state(controller, ctx) diff --git a/crates/alien-infra/src/worker/azure_lifecycle_tests.rs b/crates/alien-infra/src/worker/azure_lifecycle_tests.rs new file mode 100644 index 000000000..baa9344b6 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_lifecycle_tests.rs @@ -0,0 +1,892 @@ +#[tokio::test] +async fn test_pre_container_app_rbac_wait_holds_state_when_woken_early() { + let deadline = current_unix_timestamp_secs().saturating_add(60); + let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); + controller.state = AzureWorkerState::WaitingBeforeContainerAppCreation; + controller.pre_container_app_rbac_wait_until_epoch_secs = Some(deadline); + + let mut executor = executor_for_wait_state(controller).await; + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Provisioning); + assert_eq!( + controller.state, + AzureWorkerState::WaitingBeforeContainerAppCreation + ); + assert_eq!( + step_result.suggested_delay, + Some(Duration::from_secs(AZURE_RBAC_WAIT_POLL_SECS)) + ); + assert_eq!( + controller.pre_container_app_rbac_wait_until_epoch_secs, + Some(deadline) + ); +} + +#[tokio::test] +async fn test_ready_rbac_wait_holds_state_when_woken_early() { + let deadline = current_unix_timestamp_secs().saturating_add(60); + let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); + controller.state = AzureWorkerState::WaitingForRbacPropagation; + controller.ready_rbac_wait_until_epoch_secs = Some(deadline); + + let mut executor = executor_for_wait_state(controller).await; + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Provisioning); + assert_eq!( + controller.state, + AzureWorkerState::WaitingForRbacPropagation + ); + assert_eq!( + step_result.suggested_delay, + Some(Duration::from_secs(AZURE_RBAC_WAIT_POLL_SECS)) + ); + assert_eq!(controller.ready_rbac_wait_until_epoch_secs, Some(deadline)); +} + +#[tokio::test] +async fn test_ready_rbac_wait_advances_after_deadline() { + let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); + controller.state = AzureWorkerState::WaitingForRbacPropagation; + controller.ready_rbac_wait_until_epoch_secs = + Some(current_unix_timestamp_secs().saturating_sub(1)); + + let mut executor = executor_for_wait_state(controller).await; + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Provisioning); + assert_eq!(controller.state, AzureWorkerState::RunningReadinessProbe); + assert_eq!(step_result.suggested_delay, None); + assert_eq!(controller.ready_rbac_wait_until_epoch_secs, None); + + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Running); + assert_eq!(controller.state, AzureWorkerState::Ready); + assert_eq!(step_result.suggested_delay, None); +} + +#[tokio::test] +async fn test_update_rbac_wait_holds_and_clears() { + let deadline = current_unix_timestamp_secs().saturating_add(60); + let mut controller = AzureWorkerController::mock_ready("test-basic-worker"); + controller.state = AzureWorkerState::UpdateWaitingForRbacPropagation; + controller.ready_rbac_wait_until_epoch_secs = Some(deadline); + controller.update_rbac_wait_required = true; + + let mut executor = executor_for_wait_state(controller).await; + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Updating); + assert_eq!( + controller.state, + AzureWorkerState::UpdateWaitingForRbacPropagation + ); + assert_eq!( + step_result.suggested_delay, + Some(Duration::from_secs(AZURE_RBAC_WAIT_POLL_SECS)) + ); + assert_eq!(controller.ready_rbac_wait_until_epoch_secs, Some(deadline)); + assert!(controller.update_rbac_wait_required); + + let mut controller = controller.clone(); + controller.ready_rbac_wait_until_epoch_secs = + Some(current_unix_timestamp_secs().saturating_sub(1)); + let mut executor = executor_for_wait_state(controller).await; + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Updating); + assert_eq!( + controller.state, + AzureWorkerState::UpdateRunningReadinessProbe + ); + assert_eq!(step_result.suggested_delay, None); + assert_eq!(controller.ready_rbac_wait_until_epoch_secs, None); + assert!(!controller.update_rbac_wait_required); + + let step_result = executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + assert_eq!(executor.status(), ResourceStatus::Running); + assert_eq!(controller.state, AzureWorkerState::Ready); + assert_eq!(step_result.suggested_delay, None); +} + +// ─────────────── CREATE AND DELETE FLOW TESTS ──────────────────── + +#[rstest] +#[case::basic(basic_function())] +#[case::env_vars(function_with_env_vars())] +#[case::storage_link(function_with_storage_link())] +#[case::env_and_storage(function_with_env_and_storage())] +#[case::multiple_storages(function_with_multiple_storages())] +#[case::public_ingress(function_public_ingress())] +#[case::private_ingress(function_private_ingress())] +#[case::concurrency(function_with_concurrency())] +#[case::custom_config(function_custom_config())] +#[case::readiness_probe(function_with_readiness_probe())] +#[case::complete_test(function_complete_test())] +#[tokio::test] +async fn test_create_and_delete_flow_succeeds(#[case] worker: Worker) { + let app_name = format!("test-{}", worker.id); + let (mock_provider, _mock_server) = setup_mocks_for_function(&worker, &app_name, true); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + // Run create flow + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); + + // Verify outputs are available + let outputs = executor.outputs().unwrap(); + let function_outputs = outputs.downcast_ref::().unwrap(); + assert!(function_outputs.identifier.is_some()); + assert!(function_outputs.worker_name.starts_with("test-")); + + // Delete the worker + executor.delete().unwrap(); + + // Run delete flow + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Deleted); + + // Verify outputs are no longer available + assert!(executor.outputs().is_none()); +} + +// ─────────────── UPDATE FLOW TESTS ──────────────────────────────── + +#[rstest] +#[case::basic_to_env(basic_function(), function_with_env_vars())] +#[case::env_to_storage(function_with_env_vars(), function_with_storage_link())] +#[case::storage_to_custom(function_with_storage_link(), function_custom_config())] +#[case::custom_to_public(function_custom_config(), function_public_ingress())] +#[case::public_to_complete(function_public_ingress(), function_complete_test())] +#[case::complete_to_basic(function_complete_test(), basic_function())] +#[tokio::test] +async fn test_update_flow_succeeds(#[case] from_function: Worker, #[case] to_function: Worker) { + // Ensure both workers have the same ID for valid updates + let worker_id = "test-update-worker".to_string(); + let mut from_function = from_function; + from_function.id = worker_id.clone(); + + let mut to_function = to_function; + to_function.id = worker_id.clone(); + + let app_name = format!("test-{}", worker_id); + let (mock_provider, mock_server) = setup_mocks_for_function(&to_function, &app_name, false); + + // Start with the "from" worker in Ready state + let mut ready_controller = AzureWorkerController::mock_ready(&app_name); + + // If the target worker has a readiness probe, update the controller URL to point to mock server + if to_function.readiness_probe.is_some() && !to_function.public_endpoints.is_empty() { + if let Some(ref server) = mock_server { + ready_controller.url = Some(server.base_url()); + } + } else if !to_function.public_endpoints.is_empty() { + // Ensure the controller has a URL for public workers + ready_controller.url = Some(format!("https://{}.azurecontainerapps.io", app_name)); + } + + let mut executor = SingleControllerExecutor::builder() + .resource(from_function) + .controller(ready_controller) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + // Ensure we start in Running state + assert_eq!(executor.status(), ResourceStatus::Running); + + // Update to the new worker + executor.update(to_function).unwrap(); + + // Run the update flow + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); +} + +#[tokio::test] +async fn update_enables_commands_and_reconciles_partial_tracking() { + let mut from_worker = basic_function(); + from_worker.id = "commands-toggle-worker".to_string(); + let mut to_worker = from_worker.clone(); + to_worker.commands_enabled = true; + let app_name = "test-commands-toggle-worker"; + let component_name = get_azure_internal_commands_dapr_component_name(app_name); + let desired_component = service_bus_dapr_component( + component_name.clone(), + app_name, + "default-service-bus-namespace", + commands_queue_name(app_name), + "12345678-1234-1234-1234-123456789012", + ); + let component_created = Arc::new(AtomicBool::new(false)); + + let mut container_apps = MockContainerAppsApi::new(); + let app_name_for_update = app_name.to_string(); + container_apps + .expect_update_container_app() + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_update, false), + )) + }); + let app_name_for_get = app_name.to_string(); + container_apps + .expect_get_container_app() + .returning(move |_, _| { + Ok(create_successful_container_app_response( + &app_name_for_get, + false, + )) + }) + .times(0..); + let component_name_for_get = component_name.clone(); + let desired_for_get = desired_component.clone(); + let created_for_get = component_created.clone(); + container_apps + .expect_get_dapr_component() + .returning(move |_, _, name| { + if name == component_name_for_get && created_for_get.load(Ordering::SeqCst) { + Ok(desired_for_get.clone()) + } else { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: name.to_string(), + }, + )) + } + }) + .times(1..); + let created_by_put = component_created.clone(); + container_apps + .expect_create_or_update_dapr_component() + .times(1) + .returning(move |_, _, _, component| { + created_by_put.store(true, Ordering::SeqCst); + Ok(OperationResult::Completed(component.clone())) + }); + + let mut service_bus = MockServiceBusManagementApi::new(); + service_bus + .expect_create_or_update_queue() + .times(1..) + .returning(|_, _, _, _| Ok(alien_azure_clients::models::queue::SbQueue::default())); + let provider = + setup_commands_toggle_provider(Arc::new(container_apps), Arc::new(service_bus), None); + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.commands_namespace_name = Some("default-service-bus-namespace".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(from_worker) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.update(to_worker).unwrap(); + for step in 0..30 { + if executor.status() == ResourceStatus::Running { + break; + } + executor.step().await.unwrap_or_else(|error| { + let state = executor + .internal_state::() + .map(|controller| format!("{:?}", controller.state)) + .unwrap_or_else(|| "unavailable".to_string()); + panic!("commands-enable update failed at step {step}, state {state}: {error}"); + }); + } + + let controller = executor.internal_state::().unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); + assert_eq!( + controller.commands_namespace_name.as_deref(), + Some("default-service-bus-namespace") + ); + assert_eq!( + controller.commands_queue_name.as_deref(), + Some("test-commands-toggle-worker-rq") + ); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some(component_name.as_str()) + ); +} + +#[tokio::test] +async fn update_disables_imported_commands_without_touching_storage() { + let mut from_worker = basic_function(); + from_worker.id = "commands-toggle-worker".to_string(); + from_worker.commands_enabled = true; + let enabled_worker = from_worker.clone(); + let mut to_worker = from_worker.clone(); + to_worker.commands_enabled = false; + let app_name = "test-commands-toggle-worker"; + let component_name = get_azure_internal_commands_dapr_component_name(app_name); + let existing_component = service_bus_dapr_component( + component_name.clone(), + app_name, + "default-service-bus-namespace", + commands_queue_name(app_name), + "12345678-1234-1234-1234-123456789012", + ); + + let mut container_apps = MockContainerAppsApi::new(); + let app_name_for_update = app_name.to_string(); + container_apps + .expect_update_container_app() + .times(2) + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_update, false), + )) + }); + let app_name_for_get = app_name.to_string(); + container_apps + .expect_get_container_app() + .returning(move |_, _| { + Ok(create_successful_container_app_response( + &app_name_for_get, + false, + )) + }) + .times(0..); + let component_name_for_get = component_name.clone(); + let existing_component_for_get = existing_component.clone(); + container_apps + .expect_get_dapr_component() + .times(2..) + .returning(move |_, _, name| { + if name == component_name_for_get { + Ok(existing_component_for_get.clone()) + } else { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: name.to_string(), + }, + )) + } + }); + container_apps + .expect_delete_dapr_component() + .times(1) + .returning(|_, _, _| Ok(OperationResult::Completed(()))); + container_apps + .expect_create_or_update_dapr_component() + .times(0); + + let mut service_bus = MockServiceBusManagementApi::new(); + service_bus + .expect_delete_queue() + .times(1) + .returning(|_, _, _| Ok(())); + service_bus + .expect_create_or_update_queue() + .times(1..) + .returning(|_, _, _, _| Ok(alien_azure_clients::models::queue::SbQueue::default())); + let role_assignment_created = Arc::new(AtomicBool::new(false)); + let provider = setup_commands_toggle_provider( + Arc::new(container_apps), + Arc::new(service_bus), + Some(role_assignment_created.clone()), + ); + let controller = AzureWorkerController::mock_ready(app_name); + let mut executor = SingleControllerExecutor::builder() + .resource(from_worker) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.update(to_worker).unwrap(); + for step in 0..30 { + if executor.status() == ResourceStatus::Running { + break; + } + executor.step().await.unwrap_or_else(|error| { + let state = executor + .internal_state::() + .map(|controller| format!("{:?}", controller.state)) + .unwrap_or_else(|| "unavailable".to_string()); + panic!("commands-disable update failed at step {step}, state {state}: {error}"); + }); + } + + assert_eq!(executor.status(), ResourceStatus::Running); + { + let controller = executor.internal_state::().unwrap(); + assert!(controller.commands_namespace_name.is_none()); + assert!(controller.commands_queue_name.is_none()); + assert!(controller.commands_dapr_component.is_none()); + assert!(controller.storage_trigger_infrastructure.is_empty()); + } + + role_assignment_created.store(false, Ordering::SeqCst); + executor.update(enabled_worker).unwrap(); + for step in 0..30 { + if executor.status() == ResourceStatus::Running { + break; + } + executor.step().await.unwrap_or_else(|error| { + let state = executor + .internal_state::() + .map(|controller| format!("{:?}", controller.state)) + .unwrap_or_else(|| "unavailable".to_string()); + panic!("commands-reenable update failed at step {step}, state {state}: {error}"); + }); + } + + let controller = executor.internal_state::().unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); + assert!(role_assignment_created.load(Ordering::SeqCst)); + assert!(controller.commands_sender_role_assignment_id.is_some()); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some(component_name.as_str()) + ); +} + +// ─────────────── BEST EFFORT DELETION TESTS ─────────────────────── + +#[rstest] +#[case::basic(basic_function(), false)] +#[case::public_with_missing_app(function_public_ingress(), true)] +#[case::private_with_missing_app(function_private_ingress(), true)] +#[tokio::test] +async fn test_best_effort_deletion_when_resources_missing( + #[case] worker: Worker, + #[case] app_missing: bool, +) { + let app_name = format!("test-{}", worker.id); + let mock_container_apps = setup_mock_client_for_best_effort_deletion(&app_name, app_missing); + let mock_provider = setup_mock_service_provider(mock_container_apps, None); + + // Start with a ready controller + let mut ready_controller = AzureWorkerController::mock_ready(&app_name); + if !worker.public_endpoints.is_empty() { + ready_controller.url = Some(format!("https://{}.azurecontainerapps.io", app_name)); + } + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(ready_controller) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + // Ensure we start in Running state + assert_eq!(executor.status(), ResourceStatus::Running); + + // Delete the worker + executor.delete().unwrap(); + + // Run the delete flow - it should succeed even when resources are missing + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Deleted); + + // Verify outputs are no longer available + assert!(executor.outputs().is_none()); +} + +// ─────────────── LONG RUNNING OPERATION TESTS ────────────────────── + +#[tokio::test] +async fn test_long_running_creation_operation() { + let worker = basic_function(); + let app_name = format!("test-{}", worker.id); + let (mock_container_apps, mock_lro) = + setup_mock_client_for_long_running_creation(&app_name, false); + let mock_provider = setup_mock_service_provider(mock_container_apps, Some(mock_lro)); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + // Run create flow + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); + + // Verify the controller went through LRO states + let controller = executor.internal_state::().unwrap(); + assert!(controller.container_app_name.is_some()); + assert!(controller.resource_id.is_some()); +} + +// ─────────────── SPECIFIC VALIDATION TESTS ───────────────── + +/// Test that verifies public workers get URL in outputs +#[tokio::test] +async fn test_public_function_gets_url_in_outputs() { + let worker = function_public_ingress(); + let app_name = format!("test-{}", worker.id); + + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Mock creation with URL + mock_container_apps + .expect_create_or_update_container_app() + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name, true), + )) + }); + + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }); + + let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); + + // Verify URL is in outputs + let outputs = executor.outputs().unwrap(); + let function_outputs = outputs.downcast_ref::().unwrap(); + let endpoint = function_outputs + .public_endpoints + .get("default") + .expect("default public endpoint"); + assert!(endpoint.url.contains("azurecontainerapps.io")); +} + +/// Test that verifies private workers don't get URL in outputs +#[tokio::test] +async fn test_private_function_has_no_url_in_outputs() { + let worker = function_private_ingress(); + let app_name = format!("test-{}", worker.id); + + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Mock creation without URL + mock_container_apps + .expect_create_or_update_container_app() + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name, false), + )) + }); + + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }); + + let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); + + // Verify no URL in outputs + let outputs = executor.outputs().unwrap(); + let function_outputs = outputs.downcast_ref::().unwrap(); + assert!(function_outputs.public_endpoints.is_empty()); +} + +/// Test that verifies correct container app configuration parameters +#[tokio::test] +async fn test_container_app_configuration_validation() { + let worker = function_custom_config(); + let app_name = format!("test-{}", worker.id); + + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Validate container app creation request has correct parameters + let app_name_for_response = app_name.clone(); + mock_container_apps + .expect_create_or_update_container_app() + .withf(|_rg, _name, container_app| { + // Check that the container has correct resource configuration + if let Some(properties) = &container_app.properties { + if let Some(template) = &properties.template { + if let Some(container) = template.containers.first() { + if let Some(resources) = &container.resources { + // function_custom_config has 512MB memory + let expected_memory = format!("{}Gi", 512.0 / 1024.0); + return resources.memory.as_ref() == Some(&expected_memory) + && resources.cpu == Some(0.25); + } + } + } + } + false + }) + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_response, false), + )) + }); + + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + + // Allow get_container_app calls during creation (may be called 0 or more times) + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| Ok(create_successful_container_app_response(&app_name, false))) + .times(0..); + + // Mock get operation failure for deletion verification + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }) + .times(0..); + + let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); +} + +/// Test that verifies environment variables are correctly passed +#[tokio::test] +async fn test_environment_variable_handling() { + let worker = function_with_env_vars(); + let app_name = format!("test-{}", worker.id); + + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Validate container app creation request has environment variables + let app_name_for_response = app_name.clone(); + mock_container_apps + .expect_create_or_update_container_app() + .withf(|_rg, _name, container_app| { + if let Some(properties) = &container_app.properties { + if let Some(template) = &properties.template { + if let Some(container) = template.containers.first() { + // Check that environment variables are present + let has_app_env = container.env.iter().any(|env_var| { + env_var.name.as_deref() == Some("APP_ENV") + && env_var.value.as_deref() == Some("production") + }); + let has_log_level = container.env.iter().any(|env_var| { + env_var.name.as_deref() == Some("LOG_LEVEL") + && env_var.value.as_deref() == Some("debug") + }); + let has_db_name = container.env.iter().any(|env_var| { + env_var.name.as_deref() == Some("DB_NAME") + && env_var.value.as_deref() == Some("myapp") + }); + return has_app_env && has_log_level && has_db_name; + } + } + } + false + }) + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_response, false), + )) + }); + + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + + // Allow get_container_app calls during creation (may be called 0 or more times) + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| Ok(create_successful_container_app_response(&app_name, false))) + .times(0..); + + // Mock get operation failure for deletion verification + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }) + .times(0..); + + let mock_provider = setup_mock_service_provider(Arc::new(mock_container_apps), None); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Running); +} + +/// Test that verifies deletion works when container_app_name is not set (early creation failure) +#[tokio::test] +async fn test_delete_with_no_container_app_name_succeeds() { + let worker = basic_function(); + + // Create a controller with no container app name set (simulating early creation failure) + let controller = AzureWorkerController { + state: AzureWorkerState::CreateFailed, + container_app_name: None, // This is the key - no container app name set + resource_id: None, + url: None, + container_app_url: None, + pending_operation_url: None, + pending_operation_retry_after: None, + dapr_components: Vec::new(), + storage_trigger_infrastructure: Vec::new(), + storage_trigger_teardown_progress: AzureStorageTriggerTeardownProgress::default(), + fqdn: None, + certificate_id: None, + keyvault_cert_id: None, + container_apps_certificate_id: None, + uses_custom_domain: false, + certificate_issued_at: None, + commands_resource_group_name: None, + commands_namespace_name: None, + commands_queue_name: None, + commands_queue_applied: false, + commands_dapr_component: None, + commands_dapr_component_deletion_candidates: Vec::new(), + commands_sender_role_assignment_id: None, + commands_sender_role_assignment_intent: None, + commands_sender_role_assignment_discovery_complete: false, + commands_receiver_role_assignment_id: None, + commands_infrastructure_auth_wait_until_epoch_secs: None, + container_apps_environment_wake_wait_until_epoch_secs: None, + container_apps_environment_wake_retry_after_epoch_secs: None, + pre_container_app_rbac_wait_until_epoch_secs: None, + ready_rbac_wait_until_epoch_secs: None, + update_rbac_wait_required: false, + update_dapr_components_deleted: false, + dapr_component_naming_version: CURRENT_DAPR_COMPONENT_NAMING_VERSION, + pending_dapr_component_deletion_name: None, + dapr_component_deletion_candidates_initialized: false, + auxiliary_teardown_candidates_initialized: false, + commands_update_teardown_candidates_initialized: false, + trigger_update_teardown_candidates_initialized: false, + storage_delivery_update_reconciliation_initialized: false, + _internal_stay_count: None, + }; + + // Mock provider - no expectations since no API calls should be made + let mock_provider = Arc::new(MockPlatformServiceProvider::new()); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(controller) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + // Start in CreateFailed state + assert_eq!(executor.status(), ResourceStatus::ProvisionFailed); + + // Delete the worker + executor.delete().unwrap(); + + // Run the delete flow - should succeed without making any API calls + executor.run_until_terminal().await.unwrap(); + assert_eq!(executor.status(), ResourceStatus::Deleted); + + // Verify outputs are no longer available + assert!(executor.outputs().is_none()); +} diff --git a/crates/alien-infra/src/worker/azure_lro_routing_tests.rs b/crates/alien-infra/src/worker/azure_lro_routing_tests.rs new file mode 100644 index 000000000..43aecd22b --- /dev/null +++ b/crates/alien-infra/src/worker/azure_lro_routing_tests.rs @@ -0,0 +1,383 @@ +use alien_azure_clients::long_running_operation::MockLongRunningOperationApi; +use alien_azure_clients::AzureClientConfigExt; +use std::sync::Mutex; + +fn stale_lro_error() -> AlienError { + AlienError::new(CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Azure operation".to_string(), + resource_name: "stale-operation".to_string(), + }) +} + +#[tokio::test] +async fn pre_create_queue_legacy_delete_uses_delete_waiter() { + let app_name = "test-basic-func"; + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_get_dapr_component() + .times(1) + .returning(move |_, _, component_name| { + Ok(service_bus_dapr_component( + component_name.to_string(), + app_name, + "default-service-bus-namespace", + "test-trigger-queue".to_string(), + "12345678-1234-1234-1234-123456789012", + )) + }); + container_apps + .expect_delete_dapr_component() + .times(1) + .returning(|_, _, _| { + Ok(OperationResult::LongRunning(LongRunningOperation { + url: "https://management.azure.com/operations/delete-queue-legacy".to_string(), + retry_after: Some(Duration::from_secs(7)), + location_url: None, + })) + }); + container_apps + .expect_create_or_update_dapr_component() + .times(0); + let provider = setup_mock_service_provider(Arc::new(container_apps), None); + let queue = alien_core::Queue::new("trigger-queue".to_string()).build(); + let queue_controller = crate::queue::azure::AzureQueueController { + state: crate::queue::azure::AzureQueueState::Ready, + namespace_name: Some("default-service-bus-namespace".to_string()), + queue_name: Some("test-trigger-queue".to_string()), + _internal_stay_count: None, + }; + let mut worker = basic_function(); + worker.triggers.push(WorkerTrigger::queue(&queue)); + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(provider) + .with_dependency(queue, queue_controller) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::WaitingForPreCreateDaprComponentDeletion + ); + assert_eq!( + controller.pending_operation_url.as_deref(), + Some("https://management.azure.com/operations/delete-queue-legacy") + ); + assert_eq!(controller.pending_operation_retry_after, Some(7)); +} + +#[tokio::test] +async fn pre_create_storage_legacy_delete_uses_delete_waiter() { + let app_name = "test-basic-func"; + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_get_dapr_component() + .times(1) + .returning(move |_, _, component_name| { + Ok(service_bus_dapr_component( + component_name.to_string(), + app_name, + "default-service-bus-namespace", + "test-basic-func-test-storage-1-storage".to_string(), + "12345678-1234-1234-1234-123456789012", + )) + }); + container_apps + .expect_delete_dapr_component() + .times(1) + .returning(|_, _, _| { + Ok(OperationResult::LongRunning(LongRunningOperation { + url: "https://management.azure.com/operations/delete-storage-legacy".to_string(), + retry_after: Some(Duration::from_secs(11)), + location_url: None, + })) + }); + container_apps + .expect_create_or_update_dapr_component() + .times(0); + + let mut service_bus = MockServiceBusManagementApi::new(); + service_bus + .expect_create_or_update_queue() + .times(1) + .returning(|_, _, _, _| Ok(alien_azure_clients::models::queue::SbQueue::default())); + + let mut authorization = MockAuthorizationApi::new(); + let created_assignment = Arc::new(Mutex::new(None)); + authorization + .expect_build_role_assignment_id() + .times(1..) + .returning(|scope, assignment_name| { + format!( + "/{}/providers/Microsoft.Authorization/roleAssignments/{assignment_name}", + scope.to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + ) + }); + let assignment_for_list = created_assignment.clone(); + authorization + .expect_list_role_assignments() + .times(1..) + .returning(move |_, _| { + Ok(assignment_for_list + .lock() + .expect("created role assignment lock") + .clone() + .into_iter() + .collect()) + }); + let assignment_for_create = created_assignment.clone(); + authorization + .expect_create_or_update_role_assignment_by_id() + .times(1) + .returning(move |assignment_id, assignment| { + let mut created = assignment.clone(); + created.id = Some(assignment_id.clone()); + created.name = assignment_id.rsplit('/').next().map(ToString::to_string); + *assignment_for_create + .lock() + .expect("created role assignment lock") = Some(created.clone()); + Ok(created) + }); + + let mut event_grid = MockEventGridApi::new(); + event_grid + .expect_create_or_update_event_subscription() + .times(1) + .returning(|_, subscription_name, _| { + Ok(alien_azure_clients::event_grid::EventSubscription { + id: None, + name: Some(subscription_name), + properties: Some( + alien_azure_clients::event_grid::EventSubscriptionProperties { + provisioning_state: Some("Succeeded".to_string()), + }, + ), + }) + }); + + let container_apps = Arc::new(container_apps); + let service_bus = Arc::new(service_bus); + let authorization = Arc::new(authorization); + let event_grid = Arc::new(event_grid); + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + provider + .expect_get_azure_event_grid_client() + .returning(move |_| Ok(event_grid.clone())); + + let storage = test_storage_1(); + let mut worker = basic_function(); + worker.triggers.push(WorkerTrigger::storage( + &storage, + vec!["created".to_string()], + )); + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::default()) + .platform(Platform::Azure) + .service_provider(Arc::new(provider)) + .with_test_dependencies() + .build() + .await + .unwrap(); + + for _ in 0..10 { + executor.step().await.unwrap(); + if executor + .internal_state::() + .unwrap() + .state + == AzureWorkerState::WaitingForPreCreateDaprComponentDeletion + { + break; + } + } + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::WaitingForPreCreateDaprComponentDeletion + ); + assert_eq!( + controller.pending_operation_url.as_deref(), + Some("https://management.azure.com/operations/delete-storage-legacy") + ); + assert_eq!(controller.pending_operation_retry_after, Some(11)); +} + +fn reconciliation_cursor(controller: &mut AzureWorkerController) { + controller.pending_dapr_component_deletion_name = Some("tracked-trigger".to_string()); + controller.commands_dapr_component = Some("tracked-commands".to_string()); +} + +fn assert_reconciliation_cursor(controller: &AzureWorkerController) { + assert_eq!( + controller.pending_dapr_component_deletion_name.as_deref(), + Some("tracked-trigger") + ); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some("tracked-commands") + ); +} + +#[tokio::test] +async fn stale_pre_create_legacy_delete_reenters_reconciliation() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, operation, _| { + assert_eq!(operation, "DeleteDaprComponent"); + Err(stale_lro_error()) + }); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForPreCreateDaprComponentDeletion; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + controller.pending_operation_retry_after = Some(30); + reconciliation_cursor(&mut controller); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::CreateStart); + assert!(controller.pending_operation_url.is_none()); + assert!(controller.pending_operation_retry_after.is_none()); + assert_reconciliation_cursor(controller); +} + +#[tokio::test] +async fn completed_fallback_commands_legacy_delete_reenters_reconciliation() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, operation, _| { + assert_eq!(operation, "DeleteDaprComponent"); + Ok(Some("completed".to_string())) + }); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForLegacyCommandsDaprComponentDeletionDuringCreate; + controller.pending_operation_url = + Some("https://management.azure.com/operations/delete-commands".to_string()); + controller.pending_operation_retry_after = Some(30); + reconciliation_cursor(&mut controller); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::CreatingCommandsInfrastructure + ); + assert!(controller.pending_operation_url.is_none()); + assert!(controller.pending_operation_retry_after.is_none()); + assert_reconciliation_cursor(controller); +} + +#[tokio::test] +async fn completed_post_create_legacy_delete_reenters_reconciliation() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, operation, _| { + assert_eq!(operation, "DeleteDaprComponent"); + Ok(Some("completed".to_string())) + }); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForLegacyDaprComponentDeletionDuringCreate; + controller.pending_operation_url = + Some("https://management.azure.com/operations/delete-trigger".to_string()); + reconciliation_cursor(&mut controller); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::ConfiguringDaprComponents + ); + assert!(controller.pending_operation_url.is_none()); + assert_reconciliation_cursor(controller); +} + +#[tokio::test] +async fn stale_update_legacy_delete_reenters_reconciliation() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, operation, _| { + assert_eq!(operation, "DeleteDaprComponent"); + Err(stale_lro_error()) + }); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::UpdateWaitingForLegacyDaprComponentDeletion; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale-update".to_string()); + reconciliation_cursor(&mut controller); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::UpdateDaprComponents); + assert!(controller.pending_operation_url.is_none()); + assert_reconciliation_cursor(controller); +} diff --git a/crates/alien-infra/src/worker/azure_names.rs b/crates/alien-infra/src/worker/azure_names.rs new file mode 100644 index 000000000..de479369c --- /dev/null +++ b/crates/alien-infra/src/worker/azure_names.rs @@ -0,0 +1,662 @@ +use alien_azure_clients::authorization::Scope; + +const CONTAINER_APP_NAME_MAX_LEN: usize = 32; +const CONTAINER_APP_NAME_HASH_LEN: usize = 16; +const CONTAINER_APP_IDENTITY_DOMAIN: &str = "alien.azure.container-app.v1"; +const DAPR_COMPONENT_NAME_MAX_LEN: usize = 60; +const DAPR_COMPONENT_IDENTITY_DOMAIN: &str = "alien.azure.dapr.component.v1"; + +/// Returns a valid Azure Container App name for a worker. +/// +/// Existing canonical names are preserved. Names that require normalization or +/// shortening retain a readable alphanumeric prefix and append a deterministic +/// hash of the full deployment/worker identity. Transformed names contain no +/// hyphens, while canonical names always contain the separator between the +/// resource prefix and worker ID, so the two namespaces cannot alias. +pub(super) fn get_azure_container_app_name(resource_prefix: &str, worker_id: &str) -> String { + let raw = format!("{resource_prefix}-{worker_id}"); + let normalized = normalize_azure_container_app_name(&raw); + + if normalized == raw && normalized.len() <= CONTAINER_APP_NAME_MAX_LEN { + return normalized; + } + + let hash = stable_identity_hash(CONTAINER_APP_IDENTITY_DOMAIN, &[resource_prefix, worker_id]); + let max_stem_len = CONTAINER_APP_NAME_MAX_LEN - CONTAINER_APP_NAME_HASH_LEN; + let stem: String = normalized + .chars() + .filter(|character| character.is_ascii_alphanumeric()) + .take(max_stem_len) + .collect(); + + format!("{stem}{}", &hash[..CONTAINER_APP_NAME_HASH_LEN]) +} + +fn normalize_azure_container_app_name(raw: &str) -> String { + let mut normalized = String::with_capacity(raw.len()); + let mut previous_was_hyphen = false; + + for character in raw.chars() { + let character = if character.is_ascii_alphanumeric() { + character.to_ascii_lowercase() + } else { + '-' + }; + + if character == '-' { + if normalized.is_empty() || previous_was_hyphen { + continue; + } + } + normalized.push(character); + previous_was_hyphen = character == '-'; + } + + while normalized.ends_with('-') { + normalized.pop(); + } + if normalized.is_empty() { + normalized.push_str("app"); + } else if !normalized + .chars() + .next() + .is_some_and(|character| character.is_ascii_lowercase()) + { + normalized.insert_str(0, "app-"); + } + + normalized +} + +/// Returns a valid Azure Container Apps Dapr component name. +/// +/// Canonical names are preserved. Any normalization or shortening appends a +/// deterministic hash of the original input so distinct resource IDs cannot +/// collapse to the same component name through normalization. +pub(super) fn get_azure_dapr_component_name(raw: &str) -> String { + let normalized = normalize_azure_dapr_component_name(raw); + + if normalized == raw && normalized.len() <= DAPR_COMPONENT_NAME_MAX_LEN { + return normalized; + } + + append_raw_input_hash(&normalized, raw) +} + +fn normalize_azure_dapr_component_name(raw: &str) -> String { + let mut normalized = String::with_capacity(raw.len()); + let mut previous_was_hyphen = false; + + for character in raw.chars() { + let character = if character.is_ascii_alphanumeric() { + character.to_ascii_lowercase() + } else if character == '.' { + character + } else { + '-' + }; + + if character == '-' && previous_was_hyphen { + continue; + } + normalized.push(character); + previous_was_hyphen = character == '-'; + } + + while normalized + .chars() + .last() + .is_some_and(|character| !character.is_ascii_alphanumeric()) + { + normalized.pop(); + } + if normalized.is_empty() { + normalized.push_str("dapr"); + } else if !normalized + .chars() + .next() + .is_some_and(|character| character.is_ascii_alphabetic()) + { + normalized.insert_str(0, "dapr-"); + } + + normalized +} + +pub(super) fn get_azure_internal_commands_dapr_component_name(container_app_name: &str) -> String { + structured_dapr_component_name( + &format!("servicebus-{container_app_name}-internal-commands"), + &["internal-commands", container_app_name], + ) +} + +pub(super) fn get_legacy_azure_internal_commands_dapr_component_names( + container_app_name: &str, +) -> Vec { + historical_dapr_component_names(&[ + format!("servicebus-{container_app_name}-commands"), + format!("servicebus-{container_app_name}-internal-commands"), + ]) +} + +pub(super) fn get_azure_queue_trigger_dapr_component_name( + container_app_name: &str, + queue_id: &str, +) -> String { + structured_dapr_component_name( + &format!("servicebus-{container_app_name}-queue-trigger-{queue_id}"), + &["queue-trigger", container_app_name, queue_id], + ) +} + +pub(super) fn get_legacy_azure_queue_trigger_dapr_component_names( + container_app_name: &str, + queue_id: &str, +) -> Vec { + historical_dapr_component_names(&[ + format!("servicebus-{container_app_name}-{queue_id}"), + format!("servicebus-{container_app_name}-queue-trigger-{queue_id}"), + ]) +} + +pub(super) fn get_azure_blob_trigger_dapr_component_name( + container_app_name: &str, + storage_id: &str, +) -> String { + structured_dapr_component_name( + &format!("blobstorage-{container_app_name}-{storage_id}"), + &["blob-trigger", container_app_name, storage_id], + ) +} + +pub(super) fn get_legacy_azure_blob_trigger_dapr_component_names( + container_app_name: &str, + storage_id: &str, +) -> Vec { + historical_dapr_component_names(&[format!("blobstorage-{container_app_name}-{storage_id}")]) +} + +pub(super) fn get_azure_storage_event_subscription_name( + worker_id: &str, + storage_id: &str, +) -> String { + let mut stem: String = format!("alien{worker_id}{storage_id}") + .chars() + .filter(|character| character.is_ascii_alphanumeric()) + .collect(); + stem.truncate(31); + let suffix = uuid::Uuid::new_v5( + &uuid::Uuid::NAMESPACE_OID, + format!("azure-storage-trigger:{worker_id}:{storage_id}").as_bytes(), + ) + .simple() + .to_string(); + format!("{stem}{suffix}") +} + +pub(super) fn commands_queue_name(container_app_name: &str) -> String { + format!("{container_app_name}-rq") +} + +pub(super) fn storage_trigger_queue_name(container_app_name: &str, storage_id: &str) -> String { + format!("{container_app_name}-storage-{storage_id}") +} + +pub(super) fn service_bus_queue_scope( + resource_group_name: &str, + namespace_name: &str, + queue_name: &str, +) -> Scope { + Scope::Resource { + resource_group_name: resource_group_name.to_string(), + resource_provider: "Microsoft.ServiceBus".to_string(), + parent_resource_path: Some(format!("namespaces/{namespace_name}")), + resource_type: "queues".to_string(), + resource_name: queue_name.to_string(), + } +} + +pub(super) fn commands_sender_role_assignment_name( + resource_prefix: &str, + worker_id: &str, + principal_id: &str, + namespace_name: &str, + queue_name: &str, +) -> String { + uuid::Uuid::new_v5( + &uuid::Uuid::NAMESPACE_OID, + format!( + "deployment:azure:commands-sender:{resource_prefix}:{worker_id}:{principal_id}:{namespace_name}:{queue_name}" + ) + .as_bytes(), + ) + .to_string() +} + +pub(super) fn storage_trigger_receiver_role_assignment_name( + resource_prefix: &str, + worker_id: &str, + storage_id: &str, + principal_id: &str, +) -> String { + uuid::Uuid::new_v5( + &uuid::Uuid::NAMESPACE_OID, + format!( + "deployment:azure:storage-trigger-receiver:{resource_prefix}:{worker_id}:{storage_id}:{principal_id}" + ) + .as_bytes(), + ) + .to_string() +} + +fn append_raw_input_hash(normalized: &str, raw: &str) -> String { + let hash = uuid::Uuid::new_v5(&uuid::Uuid::NAMESPACE_OID, raw.as_bytes()) + .simple() + .to_string(); + append_hash(normalized, &hash) +} + +fn historical_dapr_component_names(raw_names: &[String]) -> Vec { + let mut names = Vec::new(); + for raw_name in raw_names { + for name in [ + get_azure_dapr_component_name(raw_name), + get_legacy_eight_character_hash_dapr_component_name(raw_name), + ] { + if !names.contains(&name) { + names.push(name); + } + } + } + names +} + +/// Reproduces the first bounded-name rollout so partially upgraded stacks can +/// be migrated. That version normalized short names without a hash and used an +/// eight-character UUID suffix only when the 60-character limit was exceeded. +fn get_legacy_eight_character_hash_dapr_component_name(raw: &str) -> String { + let normalized = normalize_azure_dapr_component_name(raw); + if normalized.len() <= DAPR_COMPONENT_NAME_MAX_LEN { + return normalized; + } + + let hash = uuid::Uuid::new_v5(&uuid::Uuid::NAMESPACE_OID, raw.as_bytes()) + .simple() + .to_string(); + append_hash(&normalized, &hash[..8]) +} + +fn structured_dapr_component_name(readable_stem: &str, identity_parts: &[&str]) -> String { + let normalized = normalize_azure_dapr_component_name(readable_stem); + let hash = structured_identity_hash(identity_parts); + append_hash(&normalized, &hash) +} + +/// Hash semantic fields independently of their human-readable concatenation. +/// Fixed-width length prefixes make tuple boundaries unambiguous, and the +/// domain version prevents future identity formats from aliasing this one. +fn structured_identity_hash(identity_parts: &[&str]) -> String { + stable_identity_hash(DAPR_COMPONENT_IDENTITY_DOMAIN, identity_parts) +} + +fn stable_identity_hash(domain: &str, identity_parts: &[&str]) -> String { + let mut identity = Vec::new(); + for part in std::iter::once(domain).chain(identity_parts.iter().copied()) { + identity.extend_from_slice(&(part.len() as u64).to_be_bytes()); + identity.extend_from_slice(part.as_bytes()); + } + uuid::Uuid::new_v5(&uuid::Uuid::NAMESPACE_OID, &identity) + .simple() + .to_string() +} + +fn append_hash(normalized: &str, hash: &str) -> String { + let max_stem_len = DAPR_COMPONENT_NAME_MAX_LEN - 1 - hash.len(); + let mut stem: String = normalized.chars().take(max_stem_len).collect(); + while stem + .chars() + .last() + .is_some_and(|character| !character.is_ascii_alphanumeric()) + { + stem.pop(); + } + format!("{stem}-{hash}") +} + +#[cfg(test)] +mod tests { + use super::{ + commands_queue_name, commands_sender_role_assignment_name, + get_azure_blob_trigger_dapr_component_name, get_azure_container_app_name, + get_azure_dapr_component_name, get_azure_internal_commands_dapr_component_name, + get_azure_queue_trigger_dapr_component_name, get_azure_storage_event_subscription_name, + get_legacy_azure_blob_trigger_dapr_component_names, + get_legacy_azure_internal_commands_dapr_component_names, + get_legacy_azure_queue_trigger_dapr_component_names, service_bus_queue_scope, + storage_trigger_queue_name, storage_trigger_receiver_role_assignment_name, + CONTAINER_APP_NAME_MAX_LEN, DAPR_COMPONENT_NAME_MAX_LEN, + }; + use alien_azure_clients::authorization::Scope; + + #[test] + fn container_app_name_preserves_existing_canonical_names() { + assert_eq!( + get_azure_container_app_name("acme-prod", "worker"), + "acme-prod-worker" + ); + let max_length_worker = "w".repeat(CONTAINER_APP_NAME_MAX_LEN - "acme-prod-".len()); + assert_eq!( + get_azure_container_app_name("acme-prod", &max_length_worker), + format!("acme-prod-{max_length_worker}") + ); + } + + #[test] + fn container_app_name_bounds_current_e2e_identity_stably() { + let resource_prefix = "e2e-10-azure-terraform-pr-0123456789"; + let worker_id = "test-alien-ts-function"; + let name = get_azure_container_app_name(resource_prefix, worker_id); + + assert_valid_container_app_name(&name); + assert_eq!(name, "e2e10azureterraf731185acf8be53ed"); + } + + #[test] + fn container_app_name_normalizes_invalid_characters() { + let name = get_azure_container_app_name("123_Test.Stack", "Worker_Name_"); + + assert_valid_container_app_name(&name); + assert_ne!(name, "123_Test.Stack-Worker_Name_"); + } + + #[test] + fn container_app_name_hash_distinguishes_shared_truncated_stems() { + let prefix = "e2e-10-azure-terraform-pr-0123456789"; + let first = get_azure_container_app_name(prefix, "worker-with-shared-prefix-first"); + let second = get_azure_container_app_name(prefix, "worker-with-shared-prefix-second"); + + assert_valid_container_app_name(&first); + assert_valid_container_app_name(&second); + assert_ne!(first, second); + } + + #[test] + fn transformed_container_app_name_cannot_alias_a_canonical_name() { + let transformed = + get_azure_container_app_name("acme", "worker-name-that-is-long-enough-to-hash"); + let canonical = get_azure_container_app_name("acme", "worker-nam-726449ac71e95aa5"); + let old_single_separator_output = "acme-worker-nam-726449ac71e95aa5"; + + assert_eq!(canonical, old_single_separator_output); + assert_eq!(transformed, "acmeworkernameth726449ac71e95aa5"); + assert_ne!(transformed, canonical); + assert_valid_container_app_name(&transformed); + assert_valid_container_app_name(&canonical); + } + + #[test] + fn auxiliary_resource_identities_match_the_creation_contract() { + assert_eq!(commands_queue_name("app"), "app-rq"); + assert_eq!( + storage_trigger_queue_name("app", "assets"), + "app-storage-assets" + ); + + let commands_name = commands_sender_role_assignment_name( + "deployment", + "worker", + "principal", + "namespace", + "app-rq", + ); + assert_eq!( + commands_name, + uuid::Uuid::new_v5( + &uuid::Uuid::NAMESPACE_OID, + b"deployment:azure:commands-sender:deployment:worker:principal:namespace:app-rq", + ) + .to_string() + ); + + let storage_name = storage_trigger_receiver_role_assignment_name( + "deployment", + "worker", + "assets", + "principal", + ); + assert_eq!( + storage_name, + uuid::Uuid::new_v5( + &uuid::Uuid::NAMESPACE_OID, + b"deployment:azure:storage-trigger-receiver:deployment:worker:assets:principal", + ) + .to_string() + ); + + let Scope::Resource { + resource_group_name, + resource_provider, + parent_resource_path, + resource_type, + resource_name, + } = service_bus_queue_scope("rg", "namespace", "app-rq") + else { + panic!("queue scope must be a resource scope"); + }; + assert_eq!(resource_group_name, "rg"); + assert_eq!(resource_provider, "Microsoft.ServiceBus"); + assert_eq!( + parent_resource_path.as_deref(), + Some("namespaces/namespace") + ); + assert_eq!(resource_type, "queues"); + assert_eq!(resource_name, "app-rq"); + } + + fn assert_valid_container_app_name(name: &str) { + assert!((2..=CONTAINER_APP_NAME_MAX_LEN).contains(&name.len())); + assert!(name + .chars() + .next() + .is_some_and(|character| character.is_ascii_lowercase())); + assert!(name + .chars() + .last() + .is_some_and(|character| character.is_ascii_alphanumeric())); + assert!(name.chars().all(|character| character.is_ascii_lowercase() + || character.is_ascii_digit() + || character == '-')); + assert!(!name.contains("--")); + } + + #[test] + fn dapr_component_name_preserves_canonical_names_within_limit() { + let name = "servicebus-worker-commands"; + let max_length_name = format!("a{}", "1".repeat(DAPR_COMPONENT_NAME_MAX_LEN - 1)); + + assert_eq!(get_azure_dapr_component_name(name), name); + assert_eq!( + get_azure_dapr_component_name(&max_length_name), + max_length_name + ); + } + + #[test] + fn dapr_component_name_is_valid_stable_and_distinct_after_shortening() { + let first_raw = "servicebus-e2e-03-azure-terraform-provider-very-long-worker-name-commands"; + let second_raw = "servicebus-e2e-03-azure-terraform-provider-very-long-worker-name-events"; + let first = get_azure_dapr_component_name(first_raw); + + assert_eq!(first, get_azure_dapr_component_name(first_raw)); + assert_ne!(first, get_azure_dapr_component_name(second_raw)); + assert_valid_dapr_component_name(&first); + } + + #[test] + fn dapr_component_name_does_not_collapse_distinct_normalized_inputs() { + for (first, second) in [ + ("servicebus-worker-foo_bar", "servicebus-worker-foo-bar"), + ("servicebus-worker-Foo", "servicebus-worker-foo"), + ("servicebus-worker-foo--bar", "servicebus-worker-foo-bar"), + ] { + let first_name = get_azure_dapr_component_name(first); + let second_name = get_azure_dapr_component_name(second); + + assert_ne!(first_name, second_name, "{first:?} and {second:?} collided"); + assert_valid_dapr_component_name(&first_name); + assert_valid_dapr_component_name(&second_name); + } + } + + #[test] + fn dapr_component_name_hashes_other_normalization_changes() { + for raw in ["___", "1-worker", "servicebus-worker-queue_"] { + let name = get_azure_dapr_component_name(raw); + + assert_ne!(name, raw); + assert_valid_dapr_component_name(&name); + } + } + + #[test] + fn commands_and_commands_queue_trigger_have_distinct_component_names() { + for container_app_name in [ + "worker", + "e2e-03-azure-terraform-provider-very-long-worker-name", + ] { + let internal_commands = + get_azure_internal_commands_dapr_component_name(container_app_name); + let commands_queue = + get_azure_queue_trigger_dapr_component_name(container_app_name, "commands"); + + assert_ne!(internal_commands, commands_queue); + assert_structured_dapr_component_name(&internal_commands); + assert_structured_dapr_component_name(&commands_queue); + } + } + + #[test] + fn structured_names_do_not_alias_any_legacy_name() { + let app = "worker"; + let queue = "events"; + let storage = "archive"; + + let commands = get_azure_internal_commands_dapr_component_name(app); + assert!(get_legacy_azure_internal_commands_dapr_component_names(app) + .iter() + .all(|legacy| legacy != &commands)); + + let queue_trigger = get_azure_queue_trigger_dapr_component_name(app, queue); + assert!( + get_legacy_azure_queue_trigger_dapr_component_names(app, queue) + .iter() + .all(|legacy| legacy != &queue_trigger) + ); + + let blob_trigger = get_azure_blob_trigger_dapr_component_name(app, storage); + assert!( + get_legacy_azure_blob_trigger_dapr_component_names(app, storage) + .iter() + .all(|legacy| legacy != &blob_trigger) + ); + } + + #[test] + fn legacy_names_include_first_bounded_rollout_hash() { + let names = get_legacy_azure_internal_commands_dapr_component_names( + "e2e-03-azure-terraform-provider-very-long-worker-name", + ); + + assert!(names + .contains(&"servicebus-e2e-03-azure-terraform-provider-very-lon-3c4abf84".to_string())); + } + + #[test] + fn queue_trigger_names_disambiguate_cross_worker_tuple_boundaries() { + let first = + get_azure_queue_trigger_dapr_component_name("prefix-worker", "queue-trigger-events"); + let second = + get_azure_queue_trigger_dapr_component_name("prefix-worker-queue-trigger", "events"); + + assert_distinct_structured_names(&first, &second); + assert_eq!( + first, + get_azure_queue_trigger_dapr_component_name("prefix-worker", "queue-trigger-events") + ); + } + + #[test] + fn commands_names_disambiguate_cross_kind_tuple_boundaries() { + let internal = + get_azure_internal_commands_dapr_component_name("prefix-worker-queue-trigger-events"); + let queue = get_azure_queue_trigger_dapr_component_name( + "prefix-worker", + "events-internal-commands", + ); + + assert_distinct_structured_names(&internal, &queue); + } + + #[test] + fn blob_trigger_names_disambiguate_cross_worker_tuple_boundaries() { + let first = get_azure_blob_trigger_dapr_component_name("prefix-worker", "archive-files"); + let second = get_azure_blob_trigger_dapr_component_name("prefix-worker-archive", "files"); + + assert_distinct_structured_names(&first, &second); + assert_eq!( + first, + get_azure_blob_trigger_dapr_component_name("prefix-worker", "archive-files") + ); + } + + #[test] + fn storage_event_subscription_name_is_stable_and_within_limit() { + let first = get_azure_storage_event_subscription_name( + "worker-with-a-very-long-name-that-needs-truncating", + "storage-with-a-very-long-name-that-needs-truncating", + ); + let second = get_azure_storage_event_subscription_name( + "worker-with-a-very-long-name-that-needs-truncating", + "storage-with-a-very-long-name-that-needs-truncating", + ); + + assert_eq!(first, second); + assert!(first.len() <= 64); + assert!(first + .chars() + .all(|character| character.is_ascii_alphanumeric())); + } + + fn assert_valid_dapr_component_name(name: &str) { + assert!(name.len() <= DAPR_COMPONENT_NAME_MAX_LEN); + assert!(name + .chars() + .next() + .is_some_and(|character| character.is_ascii_alphabetic())); + assert!(name + .chars() + .last() + .is_some_and(|character| character.is_ascii_alphanumeric())); + assert!(name.chars().all(|character| { + character.is_ascii_lowercase() + || character.is_ascii_digit() + || matches!(character, '-' | '.') + })); + assert!(!name.contains("--")); + } + + fn assert_structured_dapr_component_name(name: &str) { + assert_valid_dapr_component_name(name); + let (_, hash) = name + .rsplit_once('-') + .expect("structured Dapr component names should have a hash suffix"); + assert_eq!(hash.len(), 32); + assert!(hash.chars().all(|character| character.is_ascii_hexdigit())); + } + + fn assert_distinct_structured_names(first: &str, second: &str) { + assert_ne!(first, second); + assert_structured_dapr_component_name(first); + assert_structured_dapr_component_name(second); + } +} diff --git a/crates/alien-infra/src/worker/azure_operation_recovery_tests.rs b/crates/alien-infra/src/worker/azure_operation_recovery_tests.rs new file mode 100644 index 000000000..3e23a3a9e --- /dev/null +++ b/crates/alien-infra/src/worker/azure_operation_recovery_tests.rs @@ -0,0 +1,406 @@ +fn stale_lro_error() -> AlienError { + AlienError::new(CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Azure operation".to_string(), + resource_name: "stale-operation".to_string(), + }) +} + +#[tokio::test] +async fn stale_legacy_migration_delete_reenters_authoritative_reconciliation() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForDaprComponentNameMigrationOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale-migration-delete".to_string()); + controller.dapr_component_naming_version = 0; + controller.dapr_components = vec!["still-tracked".to_string()]; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::MigratingDaprComponentNames + ); + assert!(controller.pending_operation_url.is_none()); + assert_eq!(controller.dapr_components, ["still-tracked"]); + assert_eq!(controller.dapr_component_naming_version, 0); +} + +#[tokio::test] +async fn stale_commands_removal_migration_preserves_cursor_for_reconciliation() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForDaprComponentNameMigrationOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale-commands-removal".to_string()); + controller.commands_dapr_component = Some("legacy-commands-component".to_string()); + controller.dapr_component_naming_version = 0; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::MigratingDaprComponentNames + ); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some("legacy-commands-component") + ); + assert_eq!(controller.dapr_component_naming_version, 0); +} + +#[tokio::test] +async fn stale_tracked_migration_delete_does_not_consume_component_cursor() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForDaprComponentNameMigrationOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale-tracked-removal".to_string()); + controller.pending_dapr_component_deletion_name = Some("tracked-component".to_string()); + controller.dapr_components = vec!["tracked-component".to_string()]; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!( + controller.state, + AzureWorkerState::MigratingDaprComponentNames + ); + assert_eq!( + controller.pending_dapr_component_deletion_name.as_deref(), + Some("tracked-component") + ); + assert_eq!(controller.dapr_components, ["tracked-component"]); +} + +#[tokio::test] +async fn delete_treats_stale_legacy_operation_as_complete_without_consuming_dapr_cursor() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + controller.pending_dapr_component_deletion_name = Some("still-pending".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.delete().unwrap(); + executor.step().await.unwrap(); + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::DeleteStart); + assert!(controller.pending_operation_url.is_none()); + assert_eq!( + controller.pending_dapr_component_deletion_name.as_deref(), + Some("still-pending") + ); +} + +#[tokio::test] +async fn stale_dapr_delete_operation_rechecks_target_before_clearing_cursor() { + let component_name = "tracked-component".to_string(); + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_get_dapr_component() + .times(1) + .returning(|_, _, component_name| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: component_name.to_string(), + }, + )) + }); + let provider = setup_mock_service_provider(Arc::new(container_apps), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForDaprComponentDeletion; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + controller.pending_dapr_component_deletion_name = Some(component_name.clone()); + controller.dapr_components = vec![component_name.clone()]; + controller.dapr_component_deletion_candidates_initialized = true; + controller.auxiliary_teardown_candidates_initialized = true; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + { + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::DeletingDaprComponents); + assert_eq!( + controller.pending_dapr_component_deletion_name.as_deref(), + Some(component_name.as_str()) + ); + } + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert!(controller.pending_dapr_component_deletion_name.is_none()); + assert!(!controller.dapr_components.contains(&component_name)); +} + +#[tokio::test] +async fn stale_commands_delete_operation_rechecks_target_before_advancing() { + let component_name = "legacy-commands-component".to_string(); + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_get_dapr_component() + .times(1) + .returning(|_, _, component_name| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: component_name.to_string(), + }, + )) + }); + let provider = setup_mock_service_provider(Arc::new(container_apps), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForCommandsDaprComponentDeletion; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + controller.commands_dapr_component = Some(component_name.clone()); + controller.commands_dapr_component_deletion_candidates = vec![component_name.clone()]; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + assert_eq!( + executor + .internal_state::() + .unwrap() + .commands_dapr_component + .as_deref(), + Some(component_name.as_str()) + ); + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert!(controller.commands_dapr_component.is_none()); + assert!(controller + .commands_dapr_component_deletion_candidates + .is_empty()); +} + +#[tokio::test] +async fn stale_pre_create_commands_setup_delete_reenters_setup_without_consuming_target() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForPreCreateDaprComponentDeletion; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + controller.commands_dapr_component = Some("tracked-commands-component".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::CreateStart); + assert!(controller.pending_operation_url.is_none()); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some("tracked-commands-component") + ); +} + +#[tokio::test] +async fn completed_update_commands_setup_delete_reenters_setup_without_consuming_target() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Ok(Some("completed".to_string()))); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::UpdateWaitingForCommandsDaprComponentDeletionForSetup; + controller.pending_operation_url = + Some("https://management.azure.com/operations/delete-component".to_string()); + controller.commands_dapr_component = Some("tracked-commands-component".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::UpdateDaprComponents); + assert!(controller.pending_operation_url.is_none()); + assert_eq!( + controller.commands_dapr_component.as_deref(), + Some("tracked-commands-component") + ); +} + +#[tokio::test] +async fn stale_container_app_delete_operation_reissues_delete() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForDeleteOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::DeletingApp + ); +} + +#[tokio::test] +async fn stale_certificate_delete_operation_reissues_delete_before_clearing_identity() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Err(stale_lro_error())); + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_delete_managed_environment_certificate() + .times(1) + .returning(|_, _, _| Ok(OperationResult::Completed(()))); + let provider = setup_mock_service_provider(Arc::new(container_apps), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForCertificateDeleteOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/stale".to_string()); + controller.container_apps_certificate_id = Some("tracked-certificate-id".to_string()); + controller.uses_custom_domain = true; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + { + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::DeletingCertificate); + assert_eq!( + controller.container_apps_certificate_id.as_deref(), + Some("tracked-certificate-id") + ); + } + + executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::Deleted); + assert!(controller.container_apps_certificate_id.is_none()); +} diff --git a/crates/alien-infra/src/worker/azure_operations.rs b/crates/alien-infra/src/worker/azure_operations.rs new file mode 100644 index 000000000..f0db30d3d --- /dev/null +++ b/crates/alien-infra/src/worker/azure_operations.rs @@ -0,0 +1,109 @@ +use std::time::Duration; + +use alien_azure_clients::long_running_operation::LongRunningOperation; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_error::{AlienError, ContextError}; + +use crate::core::ResourceControllerContext; +use crate::error::{ErrorData, Result}; + +pub(super) enum AzureOperationPoll { + Complete, + Missing, + Pending(Duration), +} + +pub(super) enum AzureStrictOperationPoll { + Complete, + Pending(Duration), +} + +pub(super) struct AzureOperationPollRequest<'a> { + pub operation_name: &'a str, + pub operation_target: &'a str, + pub resource_id: &'a str, + pub handler_name: &'a str, + pub failure_message: &'a str, +} + +pub(super) async fn poll_pending_operation( + ctx: &ResourceControllerContext<'_>, + operation_url: Option<&str>, + retry_after_secs: Option, + request: AzureOperationPollRequest<'_>, +) -> Result { + match poll_operation(ctx, operation_url, retry_after_secs, request, false).await? { + AzureOperationPoll::Complete => Ok(AzureStrictOperationPoll::Complete), + AzureOperationPoll::Pending(delay) => Ok(AzureStrictOperationPoll::Pending(delay)), + AzureOperationPoll::Missing => { + unreachable!("strict operation polling rejects missing URLs") + } + } +} + +pub(super) async fn poll_reconciled_operation( + ctx: &ResourceControllerContext<'_>, + operation_url: Option<&str>, + retry_after_secs: Option, + request: AzureOperationPollRequest<'_>, +) -> Result { + poll_operation(ctx, operation_url, retry_after_secs, request, true).await +} + +async fn poll_operation( + ctx: &ResourceControllerContext<'_>, + operation_url: Option<&str>, + retry_after_secs: Option, + request: AzureOperationPollRequest<'_>, + allow_missing: bool, +) -> Result { + let operation_url = operation_url.ok_or_else(|| { + AlienError::new(ErrorData::InfrastructureError { + message: format!( + "No pending operation URL recorded in {}", + request.handler_name + ), + operation: Some(request.handler_name.to_string()), + resource_id: Some(request.resource_id.to_string()), + }) + })?; + let operation = LongRunningOperation { + url: operation_url.to_string(), + retry_after: retry_after_secs.map(Duration::from_secs), + location_url: None, + }; + let operation_client = ctx + .service_provider + .get_azure_long_running_operation_client(ctx.get_azure_config()?)?; + let status = match operation_client + .check_status(&operation, request.operation_name, request.operation_target) + .await + { + Ok(status) => status, + Err(error) + if allow_missing + && matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + return Ok(AzureOperationPoll::Missing); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: request.failure_message.to_string(), + resource_id: Some(request.resource_id.to_string()), + })); + } + }; + + if status.is_some() { + Ok(AzureOperationPoll::Complete) + } else { + Ok(AzureOperationPoll::Pending( + retry_after_secs + .map(Duration::from_secs) + .unwrap_or(Duration::from_secs(15)), + )) + } +} diff --git a/crates/alien-infra/src/worker/azure_reconciliation_tests.rs b/crates/alien-infra/src/worker/azure_reconciliation_tests.rs new file mode 100644 index 000000000..5e5831fae --- /dev/null +++ b/crates/alien-infra/src/worker/azure_reconciliation_tests.rs @@ -0,0 +1,590 @@ +#[test] +fn azure_storage_trigger_maps_only_supported_event_types() { + assert_eq!( + azure_storage_event_types( + &[ + "created".to_string(), + "deleted".to_string(), + "tierChanged".to_string(), + ], + "worker", + ) + .unwrap(), + vec![ + "Microsoft.Storage.BlobCreated", + "Microsoft.Storage.BlobDeleted", + "Microsoft.Storage.BlobTierChanged", + ] + ); + assert!(azure_storage_event_types(&["metadataUpdated".to_string()], "worker").is_err()); +} + +#[test] +fn legacy_controller_state_defaults_dapr_naming_version_to_zero() { + let mut serialized = serde_json::to_value(AzureWorkerController::mock_ready("worker")) + .expect("controller state should serialize"); + serialized + .as_object_mut() + .expect("controller state should be an object") + .remove("daprComponentNamingVersion"); + + let controller: AzureWorkerController = + serde_json::from_value(serialized).expect("legacy controller state should deserialize"); + + assert_eq!(controller.dapr_component_naming_version, 0); +} + +#[tokio::test] +async fn ready_legacy_controller_enters_dapr_name_migration() { + let mut controller = AzureWorkerController::mock_ready("worker"); + controller.dapr_component_naming_version = 0; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::Ready); + assert!(controller.auxiliary_teardown_candidates_initialized); + + executor.step().await.unwrap(); + + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::MigratingDaprComponentNames + ); +} + +#[tokio::test] +async fn delete_polls_pending_migration_operation_before_component_cleanup() { + let operation_polled = Arc::new(AtomicBool::new(false)); + let operation_polled_by_lro = operation_polled.clone(); + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(move |_, _, _| { + operation_polled_by_lro.store(true, Ordering::SeqCst); + Ok(Some("completed".to_string())) + }); + + let operation_polled_by_cleanup = operation_polled.clone(); + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_get_dapr_component() + .times(1) + .returning(move |_, _, component_name| { + assert!( + operation_polled_by_cleanup.load(Ordering::SeqCst), + "pending migration must finish before component cleanup starts" + ); + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: component_name.to_string(), + }, + )) + }); + + let provider = setup_mock_service_provider(Arc::new(container_apps), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForDaprComponentNameMigrationOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/migrate-dapr".to_string()); + controller.dapr_component_naming_version = 0; + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.delete().unwrap(); + executor.step().await.unwrap(); + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::WaitingForPendingOperationBeforeDelete + ); + + executor.step().await.unwrap(); + assert!(operation_polled.load(Ordering::SeqCst)); + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::DeleteStart + ); + + executor.step().await.unwrap(); + executor.step().await.unwrap(); + executor.step().await.unwrap(); + executor.step().await.unwrap(); +} + +#[tokio::test] +async fn delete_drains_pending_operation_before_no_app_fast_path() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Ok(Some("completed".to_string()))); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.container_app_name = None; + controller.pending_operation_url = + Some("https://management.azure.com/operations/create-app".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.delete().unwrap(); + executor.step().await.unwrap(); + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::WaitingForPendingOperationBeforeDelete + ); + executor.step().await.unwrap(); + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::DeleteStart + ); + executor.step().await.unwrap(); + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::Deleted + ); +} + +#[tokio::test] +async fn imported_storage_teardown_orders_event_role_queue_before_dapr() { + let order = Arc::new(AtomicUsize::new(0)); + let dapr_checked = Arc::new(AtomicBool::new(false)); + let storage = test_storage_1(); + let mut worker = basic_function(); + worker.commands_enabled = false; + worker.triggers.push(WorkerTrigger::storage( + &storage, + vec!["created".to_string()], + )); + let execution_principal_id = "87654321-4321-4321-4321-210987654321"; + let receiver_assignment_name = + crate::worker::azure_names::storage_trigger_receiver_role_assignment_name( + "test", + &worker.id, + &storage.id, + execution_principal_id, + ); + let receiver_assignment_id = format!("/roleAssignments/{receiver_assignment_name}"); + + let order_for_dapr = order.clone(); + let dapr_checked_by_get = dapr_checked.clone(); + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_get_dapr_component() + .times(1..) + .returning(move |_, _, component_name| { + assert_eq!( + order_for_dapr.load(Ordering::SeqCst), + 3, + "storage delivery infrastructure must be removed before Dapr" + ); + dapr_checked_by_get.store(true, Ordering::SeqCst); + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: component_name.to_string(), + }, + )) + }); + + let order_for_event = order.clone(); + let mut event_grid = MockEventGridApi::new(); + event_grid + .expect_delete_event_subscription() + .times(1) + .returning(move |_, _| { + assert_eq!(order_for_event.fetch_add(1, Ordering::SeqCst), 0); + Ok(()) + }); + + let order_for_role = order.clone(); + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .times(2) + .returning(|_, name| format!("/roleAssignments/{name}")); + let receiver_assignment_id_for_list = receiver_assignment_id.clone(); + let receiver_assignment_name_for_list = receiver_assignment_name.clone(); + let order_for_list = order.clone(); + authorization + .expect_list_role_assignments() + .times(2) + .returning(move |_, role_definition_id| { + let current_order = order_for_list.load(Ordering::SeqCst); + if current_order == 2 { + return Ok(Vec::new()); + } + assert_eq!( + current_order, 1, + "receiver role discovery must follow Event Grid deletion" + ); + Ok(vec![RoleAssignment { + id: Some(receiver_assignment_id_for_list.clone()), + name: Some(receiver_assignment_name_for_list.clone()), + properties: Some(RoleAssignmentProperties { + principal_id: execution_principal_id.to_string(), + role_definition_id: role_definition_id + .expect("storage receiver role definition filter"), + scope: None, + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + condition: None, + condition_version: None, + delegated_managed_identity_resource_id: None, + description: None, + created_by: None, + created_on: None, + updated_by: None, + updated_on: None, + }), + type_: None, + }]) + }); + authorization + .expect_delete_role_assignment_by_id() + .times(1) + .returning(move |assignment_id| { + assert_eq!(assignment_id, receiver_assignment_id); + assert_eq!(order_for_role.fetch_add(1, Ordering::SeqCst), 1); + Ok(None) + }); + let authorization = Arc::new(authorization); + + let order_for_queue = order.clone(); + let mut service_bus = MockServiceBusManagementApi::new(); + service_bus + .expect_delete_queue() + .times(1) + .returning(move |_, _, _| { + assert_eq!(order_for_queue.fetch_add(1, Ordering::SeqCst), 2); + Ok(()) + }); + + let mut provider = MockPlatformServiceProvider::new(); + let container_apps = Arc::new(container_apps); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + let event_grid = Arc::new(event_grid); + provider + .expect_get_azure_event_grid_client() + .returning(move |_| Ok(event_grid.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + let service_bus = Arc::new(service_bus); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(AzureWorkerController::mock_ready("worker-app")) + .platform(Platform::Azure) + .service_provider(Arc::new(provider)) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.delete().unwrap(); + for _ in 0..12 { + executor.step().await.unwrap(); + if dapr_checked.load(Ordering::SeqCst) { + break; + } + } + + assert_eq!(order.load(Ordering::SeqCst), 3); + assert!( + dapr_checked.load(Ordering::SeqCst), + "Dapr cleanup must run after storage delivery teardown" + ); +} + +#[tokio::test] +async fn imported_custom_domain_deletes_deterministic_certificate_without_tracked_id() { + let worker = function_public_ingress(); + let mut custom_domains = std::collections::HashMap::new(); + custom_domains.insert( + worker.id.clone(), + alien_core::CustomDomainConfig { + domain: "worker.example.com".to_string(), + certificate: alien_core::CustomCertificateConfig { + azure: Some(alien_core::AzureCustomCertificateConfig { + key_vault_certificate_id: "https://vault.example/certificates/worker" + .to_string(), + key_vault_resource_id: None, + }), + ..Default::default() + }, + }, + ); + let stack_settings = alien_core::StackSettings { + domains: Some(alien_core::DomainSettings { + custom_domains: Some(custom_domains), + public_endpoint_target: None, + }), + ..Default::default() + }; + let mut container_apps = MockContainerAppsApi::new(); + container_apps + .expect_delete_managed_environment_certificate() + .times(1) + .returning(|_, _, _| Ok(OperationResult::Completed(()))); + let provider = setup_mock_service_provider(Arc::new(container_apps), None); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::DeletingCertificate; + controller.container_apps_certificate_id = None; + controller.uses_custom_domain = false; + controller.fqdn = Some("worker.example.com".to_string()); + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(controller) + .platform(Platform::Azure) + .stack_settings(stack_settings) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + assert_eq!( + executor + .internal_state::() + .unwrap() + .state, + AzureWorkerState::Deleted + ); +} + +#[tokio::test] +async fn completed_update_operation_clears_persisted_lro_cursor() { + let mut lro = MockLongRunningOperationApi::new(); + lro.expect_check_status() + .times(1) + .returning(|_, _, _| Ok(Some("completed".to_string()))); + let provider = + setup_mock_service_provider(Arc::new(MockContainerAppsApi::new()), Some(Arc::new(lro))); + let mut controller = AzureWorkerController::mock_ready("worker-app"); + controller.state = AzureWorkerState::WaitingForUpdateOperation; + controller.pending_operation_url = + Some("https://management.azure.com/operations/update-app".to_string()); + controller.pending_operation_retry_after = Some(15); + let mut executor = SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + + let controller = executor.internal_state::().unwrap(); + assert_eq!(controller.state, AzureWorkerState::UpdatingContainerApp); + assert!(controller.pending_operation_url.is_none()); + assert!(controller.pending_operation_retry_after.is_none()); +} + +#[test] +fn strips_scheme_and_path_from_dns_endpoint_url() { + assert_eq!( + dns_name_from_url("https://app.example.azurecontainerapps.io/health"), + "app.example.azurecontainerapps.io" + ); + assert_eq!( + dns_name_from_url("app.example.azurecontainerapps.io."), + "app.example.azurecontainerapps.io" + ); +} + +#[test] +fn platform_domain_outputs_target_container_app_host_not_public_fqdn() { + let mut controller = AzureWorkerController::mock_ready("test-worker"); + controller.fqdn = Some("test-worker.public.example.com".to_string()); + controller.certificate_id = Some("cert_123".to_string()); + controller.url = Some("https://test-worker.azurecontainerapps.io".to_string()); + + let outputs = controller.build_outputs().unwrap(); + let worker_outputs = outputs.downcast_ref::().unwrap(); + let endpoint = worker_outputs + .public_endpoints + .get("default") + .expect("default public endpoint"); + + assert_eq!( + endpoint.url.as_str(), + "https://test-worker.azurecontainerapps.io" + ); + assert_eq!( + endpoint + .load_balancer_endpoint + .as_ref() + .map(|endpoint| endpoint.dns_name.as_str()), + Some("test-worker.azurecontainerapps.io") + ); +} + +#[test] +fn dns_target_is_ingress_host_when_url_is_overridden_to_public_fqdn() { + // Regression: when `url` is overridden to the public display FQDN (from `public_urls`), the + // CNAME target must still be the Container App ingress host. Otherwise the record name (the + // public FQDN) and the target collide into a self-referential CNAME, which the DNS provider + // rejects — the bug that deadlocked the Azure worker in `waitingForDns`. + let mut controller = AzureWorkerController::mock_ready("test-worker"); + controller.url = Some("https://test-worker.abc123.dev.vpc.direct".to_string()); + controller.container_app_url = + Some("https://test-worker.kindsky.eastus2.azurecontainerapps.io".to_string()); + + let outputs = controller.build_outputs().unwrap(); + let worker_outputs = outputs.downcast_ref::().unwrap(); + let endpoint = worker_outputs + .public_endpoints + .get("default") + .expect("default public endpoint"); + + // Display URL stays the public FQDN. + assert_eq!( + endpoint.url.as_str(), + "https://test-worker.abc123.dev.vpc.direct" + ); + // The CNAME target is the ingress host — and crucially NOT the record's own public FQDN. + let dns_name = endpoint + .load_balancer_endpoint + .as_ref() + .map(|endpoint| endpoint.dns_name.as_str()); + assert_eq!( + dns_name, + Some("test-worker.kindsky.eastus2.azurecontainerapps.io") + ); + assert_ne!(dns_name, Some("test-worker.abc123.dev.vpc.direct")); +} + +#[tokio::test] +async fn imported_worker_heartbeat_rebuilds_ingress_host_for_dns() { + // Regression for the create-path-only gap: an imported worker starts Ready with + // `container_app_url = None` and `url` = the public display FQDN (the importer skips the + // create flow). The heartbeat must rebuild `container_app_url` from the live Container App, + // so the DNS CNAME targets the ingress host rather than the self-referential public FQDN. + let app_name = "test-imported-worker"; + let mut mock = MockContainerAppsApi::new(); + mock.expect_get_container_app() + .returning(move |_, _| Ok(create_successful_container_app_response(app_name, true))) + .times(0..); + let mock_provider = setup_mock_service_provider(Arc::new(mock), None); + + // Imported shape: ingress host unset, url is the public display FQDN. + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.container_app_url = None; + controller.url = Some("https://test-imported-worker.abc123.dev.vpc.direct".to_string()); + controller.commands_sender_role_assignment_discovery_complete = true; + + let mut worker = basic_function(); + worker.commands_enabled = false; + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(controller) + .platform(Platform::Azure) + .service_provider(mock_provider) + .with_test_dependencies() + .build() + .await + .unwrap(); + + executor.step().await.unwrap(); + let controller = executor.internal_state::().unwrap(); + + // The heartbeat rebuilt the ingress host… + assert_eq!( + controller.container_app_url.as_deref(), + Some("https://test-imported-worker.azurecontainerapps.io") + ); + // …so build_outputs targets it, NOT the public display FQDN. + let outputs = controller.build_outputs().unwrap(); + let worker_outputs = outputs.downcast_ref::().unwrap(); + let endpoint = worker_outputs + .public_endpoints + .get("default") + .expect("default public endpoint"); + let dns_name = endpoint + .load_balancer_endpoint + .as_ref() + .map(|endpoint| endpoint.dns_name.as_str()); + assert_eq!(dns_name, Some("test-imported-worker.azurecontainerapps.io")); + assert_ne!(dns_name, Some("test-imported-worker.abc123.dev.vpc.direct")); +} + +#[test] +fn detects_azure_authorization_propagation_error_from_http_context() { + let http_error = AlienError::new(CloudClientErrorData::HttpResponseError { + message: "Azure CreateOrUpdateDaprComponent failed: HTTP 403 Forbidden".to_string(), + url: "https://management.azure.com/test".to_string(), + http_status: 403, + http_request_text: None, + http_response_text: Some( + "{\"error\":{\"code\":\"AuthorizationFailed\",\"message\":\"The client does not have authorization to perform action. If access was recently granted, please refresh your credentials.\"}}" + .to_string(), + ), + }); + + let error = http_error.context(ErrorData::CloudPlatformError { + message: "Failed to create commands Dapr component".to_string(), + resource_id: Some("alien-rs-fn".to_string()), + }); + + assert!(is_azure_authorization_propagation_error(&error)); +} + +#[test] +fn ignores_non_authorization_cloud_platform_errors() { + let error = AlienError::new(ErrorData::CloudPlatformError { + message: "Failed to create commands Dapr component".to_string(), + resource_id: Some("alien-rs-fn".to_string()), + }); + + assert!(!is_azure_authorization_propagation_error(&error)); +} diff --git a/crates/alien-infra/src/worker/azure_role_assignments.rs b/crates/alien-infra/src/worker/azure_role_assignments.rs new file mode 100644 index 000000000..06db94a6a --- /dev/null +++ b/crates/alien-infra/src/worker/azure_role_assignments.rs @@ -0,0 +1,104 @@ +use alien_azure_clients::authorization::Scope; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_error::{AlienError, ContextError}; + +use crate::core::ResourceControllerContext; +use crate::error::{ErrorData, Result}; + +pub(super) struct ProvenRoleAssignment { + pub(super) id: String, +} + +pub(super) async fn discover_proven_role_assignments( + ctx: &ResourceControllerContext<'_>, + scope: &Scope, + role_definition_id: &str, + resource_id: &str, + assignment_kind: &str, + expected_name_for_principal: impl Fn(&str) -> String, +) -> Result> { + let azure_config = ctx.get_azure_config()?; + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + let assignments = match authorization_client + .list_role_assignments(scope, Some(role_definition_id.to_string())) + .await + { + Ok(assignments) => assignments, + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => + { + return Ok(Vec::new()); + } + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!("Failed to discover {assignment_kind} role assignments"), + resource_id: Some(resource_id.to_string()), + })); + } + }; + + let mut proven = Vec::new(); + for assignment in assignments { + let properties = assignment.properties.as_ref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: resource_id.to_string(), + message: format!( + "{assignment_kind} role discovery returned an assignment without properties" + ), + }) + })?; + if !properties + .role_definition_id + .eq_ignore_ascii_case(role_definition_id) + { + return Err(AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: resource_id.to_string(), + message: format!( + "{assignment_kind} role discovery returned unexpected role definition '{}'", + properties.role_definition_id + ), + })); + } + let assignment_id = assignment.id.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: resource_id.to_string(), + message: format!( + "{assignment_kind} role discovery returned an assignment without an ID" + ), + }) + })?; + let assignment_name = assignment.name.as_deref().ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: resource_id.to_string(), + message: format!( + "{assignment_kind} role discovery returned an assignment without a name" + ), + }) + })?; + let expected_name = expected_name_for_principal(&properties.principal_id); + let expected_id = + authorization_client.build_role_assignment_id(scope, expected_name.clone()); + let name_matches = assignment_name.eq_ignore_ascii_case(&expected_name); + let id_matches = assignment_id.eq_ignore_ascii_case(&expected_id); + if name_matches != id_matches { + return Err(AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: resource_id.to_string(), + message: format!( + "Malformed deterministic {assignment_kind} role assignment '{assignment_id}'" + ), + })); + } + if name_matches { + proven.push(ProvenRoleAssignment { + id: assignment_id.to_string(), + }); + } + } + + Ok(proven) +} diff --git a/crates/alien-infra/src/worker/azure_state_persistence_tests.rs b/crates/alien-infra/src/worker/azure_state_persistence_tests.rs new file mode 100644 index 000000000..b11c5456b --- /dev/null +++ b/crates/alien-infra/src/worker/azure_state_persistence_tests.rs @@ -0,0 +1,149 @@ +#[test] +fn storage_trigger_teardown_progress_is_persisted_and_legacy_safe() { + let mut controller = AzureWorkerController::mock_ready("worker"); + controller.storage_trigger_teardown_progress = + AzureStorageTriggerTeardownProgress::ReceiverRoleAssignment; + let serialized = serde_json::to_value(&controller).expect("controller state should serialize"); + let restored: AzureWorkerController = + serde_json::from_value(serialized.clone()).expect("controller state should restore"); + assert_eq!( + restored.storage_trigger_teardown_progress, + AzureStorageTriggerTeardownProgress::ReceiverRoleAssignment + ); + + let mut legacy = serialized; + legacy + .as_object_mut() + .expect("controller state should be an object") + .remove("storageTriggerTeardownProgress"); + let restored: AzureWorkerController = + serde_json::from_value(legacy).expect("legacy controller state should restore"); + assert_eq!( + restored.storage_trigger_teardown_progress, + AzureStorageTriggerTeardownProgress::EventSubscription + ); +} + +#[test] +fn commands_sender_intent_is_persisted_in_camel_case_and_legacy_safe() { + let mut controller = AzureWorkerController::mock_ready("worker"); + controller.commands_queue_applied = true; + controller.commands_sender_role_assignment_intent = + Some(AzureCommandsSenderRoleAssignmentIntent { + assignment_id: "assignment-id".to_string(), + assignment_name: "assignment-name".to_string(), + principal_id: "principal-id".to_string(), + resource_group_name: "resource-group".to_string(), + namespace_name: "namespace".to_string(), + queue_name: "queue".to_string(), + }); + controller.commands_sender_role_assignment_discovery_complete = true; + let serialized = serde_json::to_value(&controller).expect("controller state should serialize"); + let intent = serialized + .get("commandsSenderRoleAssignmentIntent") + .and_then(serde_json::Value::as_object) + .expect("intent should use the controller's camelCase state contract"); + assert_eq!( + intent + .get("assignmentId") + .and_then(serde_json::Value::as_str), + Some("assignment-id") + ); + assert!(!intent.contains_key("assignment_id")); + + let restored: AzureWorkerController = + serde_json::from_value(serialized.clone()).expect("controller state should restore"); + assert_eq!( + restored.commands_sender_role_assignment_intent, + controller.commands_sender_role_assignment_intent + ); + assert!(restored.commands_queue_applied); + assert!(restored.commands_sender_role_assignment_discovery_complete); + + let mut legacy = serialized; + legacy + .as_object_mut() + .expect("controller state should be an object") + .remove("commandsSenderRoleAssignmentIntent"); + legacy + .as_object_mut() + .expect("controller state should be an object") + .remove("commandsSenderRoleAssignmentDiscoveryComplete"); + legacy + .as_object_mut() + .expect("controller state should be an object") + .remove("commandsQueueApplied"); + let restored: AzureWorkerController = + serde_json::from_value(legacy).expect("legacy controller state should restore"); + assert!(restored.commands_sender_role_assignment_intent.is_none()); + assert!(!restored.commands_queue_applied); + assert!(!restored.commands_sender_role_assignment_discovery_complete); +} + +#[test] +fn clear_all_resets_commands_lro_and_retry_state() { + let mut controller = AzureWorkerController::mock_ready("worker"); + controller.pending_operation_url = Some("operation".to_string()); + controller.pending_operation_retry_after = Some(30); + controller.pending_dapr_component_deletion_name = Some("component".to_string()); + controller.commands_resource_group_name = Some("resource-group".to_string()); + controller.commands_namespace_name = Some("namespace".to_string()); + controller.commands_queue_name = Some("queue".to_string()); + controller.commands_queue_applied = true; + controller.commands_dapr_component = Some("component".to_string()); + controller.commands_dapr_component_deletion_candidates = vec!["component".to_string()]; + controller.commands_sender_role_assignment_id = Some("assignment".to_string()); + controller.commands_sender_role_assignment_intent = + Some(AzureCommandsSenderRoleAssignmentIntent { + assignment_id: "planned-assignment".to_string(), + assignment_name: "assignment-name".to_string(), + principal_id: "principal".to_string(), + resource_group_name: "resource-group".to_string(), + namespace_name: "namespace".to_string(), + queue_name: "queue".to_string(), + }); + controller.commands_sender_role_assignment_discovery_complete = true; + controller.commands_infrastructure_auth_wait_until_epoch_secs = Some(1); + controller.container_apps_environment_wake_wait_until_epoch_secs = Some(2); + controller.container_apps_environment_wake_retry_after_epoch_secs = Some(3); + controller.pre_container_app_rbac_wait_until_epoch_secs = Some(4); + controller.ready_rbac_wait_until_epoch_secs = Some(5); + controller.update_rbac_wait_required = true; + controller.update_dapr_components_deleted = true; + controller.commands_update_teardown_candidates_initialized = true; + controller.trigger_update_teardown_candidates_initialized = true; + + controller.clear_all(); + + assert!(controller.pending_operation_url.is_none()); + assert!(controller.pending_operation_retry_after.is_none()); + assert!(controller.pending_dapr_component_deletion_name.is_none()); + assert!(controller.commands_resource_group_name.is_none()); + assert!(controller.commands_namespace_name.is_none()); + assert!(controller.commands_queue_name.is_none()); + assert!(!controller.commands_queue_applied); + assert!(controller.commands_dapr_component.is_none()); + assert!(controller + .commands_dapr_component_deletion_candidates + .is_empty()); + assert!(controller.commands_sender_role_assignment_id.is_none()); + assert!(controller.commands_sender_role_assignment_intent.is_none()); + assert!(!controller.commands_sender_role_assignment_discovery_complete); + assert!(controller + .commands_infrastructure_auth_wait_until_epoch_secs + .is_none()); + assert!(controller + .container_apps_environment_wake_wait_until_epoch_secs + .is_none()); + assert!(controller + .container_apps_environment_wake_retry_after_epoch_secs + .is_none()); + assert!(controller + .pre_container_app_rbac_wait_until_epoch_secs + .is_none()); + assert!(controller.ready_rbac_wait_until_epoch_secs.is_none()); + assert!(!controller.update_rbac_wait_required); + assert!(!controller.update_dapr_components_deleted); + assert!(!controller.commands_update_teardown_candidates_initialized); + assert!(!controller.trigger_update_teardown_candidates_initialized); +} diff --git a/crates/alien-infra/src/worker/azure_storage_delivery_update_tests.rs b/crates/alien-infra/src/worker/azure_storage_delivery_update_tests.rs new file mode 100644 index 000000000..8cd4933aa --- /dev/null +++ b/crates/alien-infra/src/worker/azure_storage_delivery_update_tests.rs @@ -0,0 +1,236 @@ +fn equal_update_drift_provider( + app_name: &str, + desired: StorageTarget, + actions: Arc>>, +) -> Arc { + let mut container_apps = MockContainerAppsApi::new(); + let update_app_name = app_name.to_string(); + let update_actions = actions.clone(); + container_apps + .expect_update_container_app() + .times(1) + .returning(move |_, app_name, _| { + assert_eq!(app_name, update_app_name); + record(&update_actions, "update-app"); + Ok(OperationResult::Completed( + create_successful_container_app_response(&update_app_name, false), + )) + }); + let get_app_name = app_name.to_string(); + let get_actions = actions.clone(); + container_apps + .expect_get_container_app() + .times(1) + .returning(move |_, app_name| { + assert_eq!(app_name, get_app_name); + record(&get_actions, "get-app"); + Ok(create_successful_container_app_response( + &get_app_name, + false, + )) + }); + let container_apps = Arc::new(container_apps); + + let mut service_bus = MockServiceBusManagementApi::new(); + let desired_queue = desired.clone(); + let queue_actions = actions.clone(); + service_bus + .expect_create_or_update_queue() + .times(1) + .returning(move |resource_group, namespace, queue, _| { + assert_eq!(resource_group, desired_queue.resource_group); + assert_eq!(namespace, desired_queue.namespace); + assert_eq!(queue, desired_queue.queue); + record(&queue_actions, format!("create-queue:{queue}")); + Ok(alien_azure_clients::models::queue::SbQueue::default()) + }); + let service_bus = Arc::new(service_bus); + + let role_definition_id = format!( + "/subscriptions/{SUBSCRIPTION_ID}/providers/Microsoft.Authorization/roleDefinitions/4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0" + ); + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .returning(|scope, name| { + format!( + "/{}/providers/Microsoft.Authorization/roleAssignments/{name}", + scope.to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + ) + }); + let assignment = receiver_role_assignment(&desired, &role_definition_id); + let desired_scope = desired + .receiver_assignment_id + .split("/providers/Microsoft.Authorization") + .next() + .expect("desired assignment scope") + .to_string(); + authorization + .expect_list_role_assignments() + .times(1) + .returning(move |scope, requested_role_definition| { + assert_eq!( + requested_role_definition.as_deref(), + Some(role_definition_id.as_str()) + ); + let scope = format!( + "/{}", + scope + .to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + .trim_start_matches('/') + ); + assert_eq!(scope, desired_scope); + Ok(vec![assignment.clone()]) + }); + let authorization = Arc::new(authorization); + + let mut event_grid = MockEventGridApi::new(); + let desired_event = desired; + let event_actions = actions; + event_grid + .expect_create_or_update_event_subscription() + .times(1) + .returning(move |source_resource_id, subscription_name, request| { + assert_eq!(source_resource_id, desired_event.source_resource_id); + assert_eq!(subscription_name, desired_event.event_subscription_name); + assert_eq!( + request.properties.destination.properties.resource_id, + format!( + "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{}/providers/Microsoft.ServiceBus/namespaces/{}/queues/{}", + desired_event.resource_group, + desired_event.namespace, + desired_event.queue + ) + ); + record(&event_actions, format!("put-event:{subscription_name}")); + Ok(EventSubscription { + id: None, + name: Some(subscription_name), + properties: Some(EventSubscriptionProperties { + provisioning_state: Some("Succeeded".to_string()), + }), + }) + }); + let event_grid = Arc::new(event_grid); + + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + provider + .expect_get_azure_event_grid_client() + .returning(move |_| Ok(event_grid.clone())); + Arc::new(provider) +} + +#[tokio::test] +async fn equal_update_revalidates_tracked_storage_delivery_once() { + let app_name = "test-storage-target-worker"; + let storage = test_storage_1(); + let worker = storage_trigger_worker(&storage); + let desired = storage_target( + &worker.id, + &storage.id, + "storage-account", + "storage-container", + "service-bus-rg", + "service-bus-namespace", + "execution-principal", + ); + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = equal_update_drift_provider(app_name, desired.clone(), actions.clone()); + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.storage_trigger_infrastructure = vec![AzureStorageTriggerInfrastructure { + storage_id: Some(desired.storage_id.clone()), + source_resource_id: desired.source_resource_id.clone(), + source_container_name: Some(desired.source_container_name.clone()), + event_subscription_name: desired.event_subscription_name.clone(), + service_bus_resource_group: desired.resource_group.clone(), + namespace_name: desired.namespace.clone(), + queue_name: desired.queue.clone(), + queue_applied: true, + receiver_role_assignment_id: Some(desired.receiver_assignment_id.clone()), + delivery_reconciled: true, + }]; + let service_account = ServiceAccount::new("default-profile-sa".to_string()).build(); + let mut executor = SingleControllerExecutor::builder() + .resource(worker.clone()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .with_dependency( + storage.clone(), + storage_controller(&storage.id, "storage-account", "storage-container"), + ) + .with_dependency( + test_azure_service_bus_namespace(), + namespace_controller("service-bus-namespace", "service-bus-rg"), + ) + .with_dependency( + service_account, + rotated_service_account( + "execution-identity", + "execution-client", + "execution-principal", + ), + ) + .build() + .await + .expect("executor should build"); + executor.update(worker).expect("equal update should start"); + + executor.step().await.expect("enter UpdateStart"); + executor + .step() + .await + .expect("checkpoint delivery revalidation"); + assert!( + actions.lock().expect("action log lock").is_empty(), + "delivery latches must be checkpointed before any remote update" + ); + let checkpoint = executor + .internal_state::() + .expect("Azure worker controller"); + assert!(checkpoint.storage_delivery_update_reconciliation_initialized); + assert!(!checkpoint.storage_trigger_infrastructure[0].queue_applied); + assert!(!checkpoint.storage_trigger_infrastructure[0].delivery_reconciled); + + for step in 0..16 { + executor + .step() + .await + .unwrap_or_else(|error| panic!("equal-update drift repair failed at {step}: {error}")); + if executor + .internal_state::() + .expect("Azure worker controller") + .storage_trigger_infrastructure[0] + .delivery_reconciled + { + break; + } + } + + assert!( + executor + .internal_state::() + .expect("Azure worker controller") + .storage_trigger_infrastructure[0] + .delivery_reconciled + ); + assert_eq!( + actions.lock().expect("action log lock").as_slice(), + [ + "update-app".to_string(), + "get-app".to_string(), + format!("create-queue:{}", desired.queue), + format!("put-event:{}", desired.event_subscription_name), + ] + ); +} diff --git a/crates/alien-infra/src/worker/azure_storage_target_test_support.rs b/crates/alien-infra/src/worker/azure_storage_target_test_support.rs new file mode 100644 index 000000000..265bd1dd5 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_storage_target_test_support.rs @@ -0,0 +1,562 @@ +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; + +use alien_azure_clients::authorization::MockAuthorizationApi; +use alien_azure_clients::container_apps::MockContainerAppsApi; +use alien_azure_clients::event_grid::{ + EventSubscription, EventSubscriptionProperties, MockEventGridApi, +}; +use alien_azure_clients::long_running_operation::OperationResult; +use alien_azure_clients::models::authorization_role_assignments::{ + RoleAssignment, RoleAssignmentProperties, RoleAssignmentPropertiesPrincipalType, +}; +use alien_azure_clients::models::managed_environments_dapr_components::DaprComponent; +use alien_azure_clients::service_bus::MockServiceBusManagementApi; +use alien_azure_clients::AzureClientConfigExt; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_core::{Platform, ServiceAccount, Worker, WorkerTrigger}; +use alien_error::AlienError; + +use crate::core::controller_test::{ + test_azure_service_bus_namespace, test_storage_1, SingleControllerExecutor, +}; +use crate::core::MockPlatformServiceProvider; +use crate::infra_requirements::AzureServiceBusNamespaceController; +use crate::service_account::AzureServiceAccountController; +use crate::storage::AzureStorageController; +use crate::worker::azure::AzureStorageTriggerInfrastructure; +use crate::worker::azure_dapr_components::service_bus_dapr_component; +use crate::worker::azure_names::{ + get_azure_blob_trigger_dapr_component_name, get_azure_storage_event_subscription_name, + get_legacy_azure_blob_trigger_dapr_component_names, storage_trigger_queue_name, + storage_trigger_receiver_role_assignment_name, +}; +use crate::worker::AzureWorkerController; + +const SUBSCRIPTION_ID: &str = "12345678-1234-1234-1234-123456789012"; + +fn record(actions: &Arc>>, action: impl Into) { + actions.lock().expect("action log lock").push(action.into()); +} + +fn action_index(actions: &[String], expected: &str) -> usize { + actions + .iter() + .position(|action| action == expected) + .unwrap_or_else(|| panic!("missing action {expected:?} in {actions:#?}")) +} + +fn remote_not_found(resource_type: &str, resource_name: &str) -> AlienError { + AlienError::new(CloudClientErrorData::RemoteResourceNotFound { + resource_type: resource_type.to_string(), + resource_name: resource_name.to_string(), + }) +} + +fn receiver_role_assignment(target: &StorageTarget, role_definition_id: &str) -> RoleAssignment { + RoleAssignment { + id: Some(target.receiver_assignment_id.clone()), + name: Some( + target + .receiver_assignment_id + .rsplit('/') + .next() + .expect("role assignment name") + .to_string(), + ), + properties: Some(RoleAssignmentProperties { + principal_id: target.execution_principal_id.clone(), + role_definition_id: role_definition_id.to_string(), + scope: None, + principal_type: RoleAssignmentPropertiesPrincipalType::ServicePrincipal, + condition: None, + condition_version: None, + delegated_managed_identity_resource_id: None, + description: None, + created_by: None, + created_on: None, + updated_by: None, + updated_on: None, + }), + type_: None, + } +} + +#[derive(Clone)] +struct StorageTarget { + storage_id: String, + source_resource_id: String, + source_container_name: String, + event_subscription_name: String, + resource_group: String, + namespace: String, + queue: String, + receiver_assignment_id: String, + execution_principal_id: String, +} + +struct StorageProviderExpectations { + app_name: String, + existing_components: Vec, + old: StorageTarget, + desired: StorageTarget, + expected_execution_client_id: String, + expected_execution_principal_id: String, + expected_container_identity_id: Option, + expect_container_app_update: bool, + deletes_are_missing: bool, +} + +fn storage_target( + worker_id: &str, + storage_id: &str, + storage_account_name: &str, + source_container_name: &str, + service_bus_resource_group: &str, + namespace: &str, + execution_principal_id: &str, +) -> StorageTarget { + let queue = storage_trigger_queue_name("test-storage-target-worker", storage_id); + let assignment_name = storage_trigger_receiver_role_assignment_name( + "test", + worker_id, + storage_id, + execution_principal_id, + ); + StorageTarget { + storage_id: storage_id.to_string(), + source_resource_id: format!( + "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/default-resource-group/providers/Microsoft.Storage/storageAccounts/{storage_account_name}" + ), + source_container_name: source_container_name.to_string(), + event_subscription_name: get_azure_storage_event_subscription_name(worker_id, storage_id), + resource_group: service_bus_resource_group.to_string(), + namespace: namespace.to_string(), + queue: queue.clone(), + receiver_assignment_id: format!( + "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{service_bus_resource_group}/providers/Microsoft.ServiceBus/namespaces/{namespace}/queues/{queue}/providers/Microsoft.Authorization/roleAssignments/{assignment_name}" + ), + execution_principal_id: execution_principal_id.to_string(), + } +} + +fn storage_trigger_worker(storage: &alien_core::Storage) -> Worker { + let mut worker = basic_function(); + worker.id = "storage-target-worker".to_string(); + worker + .triggers + .push(WorkerTrigger::storage(storage, vec!["created".to_string()])); + worker +} + +fn storage_components( + app_name: &str, + storage_id: &str, + namespace: &str, + queue: &str, + execution_client_id: &str, +) -> Vec { + let current_name = get_azure_blob_trigger_dapr_component_name(app_name, storage_id); + let mut names = vec![current_name]; + for legacy_name in get_legacy_azure_blob_trigger_dapr_component_names(app_name, storage_id) { + if !names.contains(&legacy_name) { + names.push(legacy_name); + } + } + names + .into_iter() + .map(|name| { + service_bus_dapr_component( + name, + app_name, + namespace, + queue.to_string(), + execution_client_id, + ) + }) + .collect() +} + +fn storage_controller( + storage_id: &str, + storage_account_name: &str, + container_name: &str, +) -> AzureStorageController { + let mut controller = AzureStorageController::mock_ready(storage_id); + controller.storage_account_name = Some(storage_account_name.to_string()); + controller.container_name = Some(container_name.to_string()); + controller +} + +fn rotated_service_account( + identity_resource_id: &str, + client_id: &str, + principal_id: &str, +) -> AzureServiceAccountController { + let mut controller = AzureServiceAccountController::mock_ready("default-profile-sa"); + controller.identity_resource_id = Some(identity_resource_id.to_string()); + controller.identity_client_id = Some(client_id.to_string()); + controller.identity_principal_id = Some(principal_id.to_string()); + controller +} + +fn namespace_controller( + namespace_name: &str, + resource_group_name: &str, +) -> AzureServiceBusNamespaceController { + let mut controller = AzureServiceBusNamespaceController::mock_ready(namespace_name); + controller.resource_group_name = Some(resource_group_name.to_string()); + controller +} + +fn assert_container_app_identity( + app: &alien_azure_clients::models::container_apps::ContainerApp, + expected_identity_id: &str, + expected_client_id: &str, +) { + let serialized = serde_json::to_value(app).expect("serialize desired Container App"); + let identities = serialized + .pointer("/identity/userAssignedIdentities") + .and_then(serde_json::Value::as_object) + .expect("desired Container App user-assigned identities"); + assert_eq!( + identities.keys().cloned().collect::>(), + vec![expected_identity_id.to_string()] + ); + let environment = serialized + .pointer("/properties/template/containers/0/env") + .and_then(serde_json::Value::as_array) + .expect("desired Container App environment"); + let azure_client_id = environment + .iter() + .find(|item| { + item.get("name").and_then(serde_json::Value::as_str) == Some("AZURE_CLIENT_ID") + }) + .and_then(|item| item.get("value")) + .and_then(serde_json::Value::as_str); + assert_eq!(azure_client_id, Some(expected_client_id)); +} + +fn storage_provider( + expected: StorageProviderExpectations, + actions: Arc>>, +) -> Arc { + let components = Arc::new(Mutex::new( + expected + .existing_components + .into_iter() + .map(|component| { + ( + component.name.clone().expect("existing component name"), + component, + ) + }) + .collect::>(), + )); + + let mut container_apps = MockContainerAppsApi::new(); + let update_actions = actions.clone(); + let app_name_for_update = expected.app_name.clone(); + let expected_identity_id = expected.expected_container_identity_id.clone(); + let expected_client_id = expected.expected_execution_client_id.clone(); + container_apps + .expect_update_container_app() + .times(usize::from(expected.expect_container_app_update)) + .returning(move |resource_group, app_name, app| { + assert_eq!(resource_group, "default-resource-group"); + assert_eq!(app_name, app_name_for_update); + if let Some(identity_id) = expected_identity_id.as_deref() { + assert_container_app_identity(app, identity_id, &expected_client_id); + } + record(&update_actions, "update-app"); + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_update, false), + )) + }); + let app_name_for_get = expected.app_name.clone(); + container_apps + .expect_get_container_app() + .times(usize::from(expected.expect_container_app_update)) + .returning(move |resource_group, app_name| { + assert_eq!(resource_group, "default-resource-group"); + assert_eq!(app_name, app_name_for_get); + Ok(create_successful_container_app_response( + &app_name_for_get, + false, + )) + }); + let get_components = components.clone(); + container_apps + .expect_get_dapr_component() + .times(1..) + .returning(move |_, _, component_name| { + get_components + .lock() + .expect("component map lock") + .get(component_name) + .cloned() + .ok_or_else(|| remote_not_found("Dapr component", component_name)) + }); + let delete_components = components.clone(); + let delete_actions = actions.clone(); + let missing_dapr_delete = expected.deletes_are_missing; + container_apps + .expect_delete_dapr_component() + .times(1..) + .returning(move |_, _, component_name| { + assert!( + delete_components + .lock() + .expect("component map lock") + .remove(component_name) + .is_some(), + "controller must establish ownership before deleting {component_name}" + ); + record(&delete_actions, format!("delete-dapr:{component_name}")); + if missing_dapr_delete { + Err(remote_not_found("Dapr component", component_name)) + } else { + Ok(OperationResult::Completed(())) + } + }); + let put_components = components; + let put_actions = actions.clone(); + let desired_client_id = expected.expected_execution_client_id.clone(); + container_apps + .expect_create_or_update_dapr_component() + .times(1) + .returning(move |_, _, component_name, component| { + let metadata = component + .properties + .as_ref() + .expect("Dapr component properties") + .metadata + .iter() + .filter_map(|item| Some((item.name.as_deref()?, item.value.as_deref()?))) + .collect::>(); + assert_eq!( + metadata.get("azureClientId").copied(), + Some(desired_client_id.as_str()) + ); + record(&put_actions, format!("put-dapr:{component_name}")); + put_components + .lock() + .expect("component map lock") + .insert(component_name.to_string(), component.clone()); + Ok(OperationResult::Completed(component.clone())) + }); + let container_apps = Arc::new(container_apps); + + let mut event_grid = MockEventGridApi::new(); + let old_for_delete = expected.old.clone(); + let event_delete_actions = actions.clone(); + let missing_event_delete = expected.deletes_are_missing; + event_grid + .expect_delete_event_subscription() + .times(1) + .returning(move |source_resource_id, subscription_name| { + assert_eq!(source_resource_id, old_for_delete.source_resource_id); + assert_eq!(subscription_name, old_for_delete.event_subscription_name); + record( + &event_delete_actions, + format!("delete-event:{source_resource_id}/{subscription_name}"), + ); + if missing_event_delete { + Err(remote_not_found( + "Event Grid subscription", + &subscription_name, + )) + } else { + Ok(()) + } + }); + let desired_for_create = expected.desired.clone(); + let event_create_actions = actions.clone(); + event_grid + .expect_create_or_update_event_subscription() + .times(1) + .returning(move |source_resource_id, subscription_name, request| { + assert_eq!(source_resource_id, desired_for_create.source_resource_id); + assert_eq!(subscription_name, desired_for_create.event_subscription_name); + assert_eq!( + request.properties.destination.properties.resource_id, + format!( + "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{}/providers/Microsoft.ServiceBus/namespaces/{}/queues/{}", + desired_for_create.resource_group, + desired_for_create.namespace, + desired_for_create.queue + ) + ); + assert_eq!( + request.properties.filter.subject_begins_with, + format!( + "/blobServices/default/containers/{}/blobs/", + desired_for_create.source_container_name + ) + ); + record( + &event_create_actions, + format!("create-event:{source_resource_id}/{subscription_name}"), + ); + Ok(EventSubscription { + id: None, + name: Some(subscription_name), + properties: Some(EventSubscriptionProperties { + provisioning_state: Some("Succeeded".to_string()), + }), + }) + }); + let event_grid = Arc::new(event_grid); + + let mut service_bus = MockServiceBusManagementApi::new(); + let old_for_queue_delete = expected.old.clone(); + let queue_delete_actions = actions.clone(); + let missing_queue_delete = expected.deletes_are_missing; + service_bus.expect_delete_queue().times(1).returning( + move |resource_group, namespace, queue| { + assert_eq!(resource_group, old_for_queue_delete.resource_group); + assert_eq!(namespace, old_for_queue_delete.namespace); + assert_eq!(queue, old_for_queue_delete.queue); + record( + &queue_delete_actions, + format!("delete-queue:{resource_group}/{namespace}/{queue}"), + ); + if missing_queue_delete { + Err(remote_not_found("Service Bus queue", &queue)) + } else { + Ok(()) + } + }, + ); + let desired_for_queue_create = expected.desired.clone(); + let queue_create_actions = actions.clone(); + service_bus + .expect_create_or_update_queue() + .times(1..) + .returning(move |resource_group, namespace, queue, _| { + assert_eq!(resource_group, desired_for_queue_create.resource_group); + assert_eq!(namespace, desired_for_queue_create.namespace); + assert_eq!(queue, desired_for_queue_create.queue); + record( + &queue_create_actions, + format!("create-queue:{resource_group}/{namespace}/{queue}"), + ); + Ok(alien_azure_clients::models::queue::SbQueue::default()) + }); + let service_bus = Arc::new(service_bus); + + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .returning(|scope, assignment_name| { + format!( + "/{}/providers/Microsoft.Authorization/roleAssignments/{assignment_name}", + scope.to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + ) + }); + let role_definition_id = format!( + "/subscriptions/{SUBSCRIPTION_ID}/providers/Microsoft.Authorization/roleDefinitions/4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0" + ); + let old_for_list = expected.old.clone(); + let desired_for_list = expected.desired.clone(); + let assignment_availability = Arc::new(Mutex::new((true, false))); + let list_availability = assignment_availability.clone(); + let role_definition_for_list = role_definition_id.clone(); + authorization + .expect_list_role_assignments() + .times(1..) + .returning(move |scope, requested_role_definition| { + assert_eq!( + requested_role_definition.as_deref(), + Some(role_definition_for_list.as_str()) + ); + let scope = format!( + "/{}", + scope + .to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + .trim_start_matches('/') + ); + let old_scope = old_for_list + .receiver_assignment_id + .split("/providers/Microsoft.Authorization") + .next() + .expect("old assignment scope"); + let desired_scope = desired_for_list + .receiver_assignment_id + .split("/providers/Microsoft.Authorization") + .next() + .expect("desired assignment scope"); + let availability = list_availability.lock().expect("assignment availability"); + if scope.eq_ignore_ascii_case(old_scope) && availability.0 { + return Ok(vec![receiver_role_assignment( + &old_for_list, + &role_definition_for_list, + )]); + } + if scope.eq_ignore_ascii_case(desired_scope) && availability.1 { + return Ok(vec![receiver_role_assignment( + &desired_for_list, + &role_definition_for_list, + )]); + } + Ok(Vec::new()) + }); + let old_assignment_id = expected.old.receiver_assignment_id.clone(); + let role_delete_actions = actions.clone(); + let missing_role_delete = expected.deletes_are_missing; + let delete_availability = assignment_availability.clone(); + authorization + .expect_delete_role_assignment_by_id() + .times(1) + .returning(move |assignment_id| { + assert_eq!(assignment_id, old_assignment_id); + delete_availability + .lock() + .expect("assignment availability") + .0 = false; + record(&role_delete_actions, format!("delete-rbac:{assignment_id}")); + if missing_role_delete { + Err(remote_not_found("role assignment", &assignment_id)) + } else { + Ok(None) + } + }); + let desired_assignment_id = expected.desired.receiver_assignment_id; + let desired_role_principal = expected.expected_execution_principal_id; + let role_put_actions = actions; + let put_availability = assignment_availability; + authorization + .expect_create_or_update_role_assignment_by_id() + .times(1) + .returning(move |assignment_id, assignment| { + assert_eq!(assignment_id, desired_assignment_id); + let principal_id = &assignment + .properties + .as_ref() + .expect("role assignment properties") + .principal_id; + assert_eq!(principal_id, &desired_role_principal); + put_availability.lock().expect("assignment availability").1 = true; + record( + &role_put_actions, + format!("put-rbac:{assignment_id}:{principal_id}"), + ); + Ok(assignment.clone()) + }); + let authorization = Arc::new(authorization); + + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + provider + .expect_get_azure_event_grid_client() + .returning(move |_| Ok(event_grid.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + Arc::new(provider) +} diff --git a/crates/alien-infra/src/worker/azure_storage_target_tests.rs b/crates/alien-infra/src/worker/azure_storage_target_tests.rs new file mode 100644 index 000000000..6542e1c90 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_storage_target_tests.rs @@ -0,0 +1,846 @@ +include!("azure_storage_target_test_support.rs"); + +use crate::core::controller_test::test_storage_2; + +async fn run_until_storage_subscription_created( + executor: &mut SingleControllerExecutor, + actions: &Arc>>, +) { + for step in 0..80 { + let actions = actions.lock().expect("action log lock"); + if actions + .iter() + .any(|action| action.starts_with("create-event:")) + && actions.iter().any(|action| action.starts_with("put-dapr:")) + { + return; + } + drop(actions); + executor.step().await.unwrap_or_else(|error| { + panic!( + "storage target reconciliation failed at step {step}, state {:?}: {error}", + executor + .internal_state::() + .expect("Azure worker controller") + .state + ) + }); + } + panic!( + "storage subscription was not created; actions: {:#?}", + actions.lock().expect("action log lock") + ); +} + +fn assert_old_storage_removed_before_new_target( + actions: &[String], + old: &StorageTarget, + desired: &StorageTarget, + old_component_names: &[String], + desired_component_name: &str, +) { + let delete_event = action_index( + actions, + &format!( + "delete-event:{}/{}", + old.source_resource_id, old.event_subscription_name + ), + ); + let delete_receiver = action_index( + actions, + &format!("delete-rbac:{}", old.receiver_assignment_id), + ); + let delete_queue = action_index( + actions, + &format!( + "delete-queue:{}/{}/{}", + old.resource_group, old.namespace, old.queue + ), + ); + let deleted_components = old_component_names + .iter() + .filter(|name| name.as_str() != desired_component_name) + .map(|name| action_index(actions, &format!("delete-dapr:{name}"))) + .collect::>(); + let create_queue = action_index( + actions, + &format!( + "create-queue:{}/{}/{}", + desired.resource_group, desired.namespace, desired.queue + ), + ); + let create_receiver = actions + .iter() + .position(|action| { + action.starts_with(&format!("put-rbac:{}:", desired.receiver_assignment_id)) + }) + .expect("new storage receiver assignment"); + let put_dapr = action_index(actions, &format!("put-dapr:{desired_component_name}")); + let create_event = action_index( + actions, + &format!( + "create-event:{}/{}", + desired.source_resource_id, desired.event_subscription_name + ), + ); + assert!( + delete_event < delete_receiver && delete_receiver < delete_queue, + "storage delivery resources must be torn down in durable order: {actions:#?}" + ); + assert!( + deleted_components + .iter() + .all(|delete_component| *delete_component < put_dapr), + "every historical Dapr component must be removed before applying the desired component: {actions:#?}" + ); + assert!( + delete_queue < create_queue + && create_queue < create_receiver + && create_receiver < create_event + && create_event < put_dapr, + "the old target must be fully absent before the new target is constructed: {actions:#?}" + ); +} + +#[tokio::test] +async fn imported_storage_trigger_update_checkpoints_exact_old_target_before_remote_cleanup() { + let app_name = "test-storage-target-worker"; + let old_storage = test_storage_1(); + let new_storage = test_storage_2(); + let previous_worker = storage_trigger_worker(&old_storage); + let desired_worker = storage_trigger_worker(&new_storage); + let execution_client_id = "12345678-1234-1234-1234-123456789012"; + let execution_principal_id = "87654321-4321-4321-4321-210987654321"; + let old = storage_target( + &previous_worker.id, + &old_storage.id, + "old-storage-account", + "old-container", + "mock-rg", + "default-service-bus-namespace", + execution_principal_id, + ); + let desired = storage_target( + &desired_worker.id, + &new_storage.id, + "new-storage-account", + "new-container", + "mock-rg", + "default-service-bus-namespace", + execution_principal_id, + ); + let old_components = storage_components( + app_name, + &old_storage.id, + &old.namespace, + &old.queue, + execution_client_id, + ); + let old_component_names = old_components + .iter() + .map(|component| component.name.clone().expect("component name")) + .collect::>(); + let desired_component_name = + get_azure_blob_trigger_dapr_component_name(app_name, &new_storage.id); + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = storage_provider( + StorageProviderExpectations { + app_name: app_name.to_string(), + existing_components: old_components, + old: old.clone(), + desired: desired.clone(), + expected_execution_client_id: execution_client_id.to_string(), + expected_execution_principal_id: execution_principal_id.to_string(), + expected_container_identity_id: None, + expect_container_app_update: true, + deletes_are_missing: false, + }, + actions.clone(), + ); + + let mut executor = SingleControllerExecutor::builder() + .resource(previous_worker) + .controller(AzureWorkerController::mock_ready(app_name)) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .with_dependency( + old_storage.clone(), + storage_controller(&old_storage.id, "old-storage-account", "old-container"), + ) + .with_dependency( + new_storage.clone(), + storage_controller(&new_storage.id, "new-storage-account", "new-container"), + ) + .build() + .await + .expect("executor should build"); + executor + .update(desired_worker) + .expect("storage trigger update should start"); + + for step in 0..10 { + if executor + .internal_state::() + .expect("Azure worker controller") + .trigger_update_teardown_candidates_initialized + { + break; + } + executor + .step() + .await + .unwrap_or_else(|error| panic!("storage checkpoint failed at step {step}: {error}")); + assert!( + actions + .lock() + .expect("action log lock") + .iter() + .all(|action| action == "update-app"), + "no cleanup mutation is allowed before imported cursors are durable" + ); + } + + { + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + assert!(controller.trigger_update_teardown_candidates_initialized); + assert_eq!(controller.storage_trigger_infrastructure.len(), 1); + let reconstructed = &controller.storage_trigger_infrastructure[0]; + assert_eq!( + reconstructed.storage_id.as_deref(), + Some(old.storage_id.as_str()) + ); + assert_eq!(reconstructed.source_resource_id, old.source_resource_id); + assert_eq!( + reconstructed.source_container_name.as_deref(), + Some(old.source_container_name.as_str()) + ); + assert_eq!( + reconstructed.event_subscription_name, + old.event_subscription_name + ); + assert_eq!(reconstructed.service_bus_resource_group, old.resource_group); + assert_eq!(reconstructed.namespace_name, old.namespace); + assert_eq!(reconstructed.queue_name, old.queue); + assert_eq!( + reconstructed.receiver_role_assignment_id.as_deref(), + Some(old.receiver_assignment_id.as_str()) + ); + assert!(!reconstructed.queue_applied); + assert!(!reconstructed.delivery_reconciled); + assert_eq!(controller.dapr_components, old_component_names); + } + assert_eq!( + actions.lock().expect("action log lock").as_slice(), + ["update-app"], + "import reconstruction must be durable before deleting any remote resource" + ); + + run_until_storage_subscription_created(&mut executor, &actions).await; + + let actions = actions.lock().expect("action log lock"); + assert_old_storage_removed_before_new_target( + &actions, + &old, + &desired, + &old_component_names, + &desired_component_name, + ); + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + assert_eq!(controller.storage_trigger_infrastructure.len(), 1); + let tracked = &controller.storage_trigger_infrastructure[0]; + assert_eq!( + tracked.storage_id.as_deref(), + Some(desired.storage_id.as_str()) + ); + assert_eq!(tracked.source_resource_id, desired.source_resource_id); + assert_eq!( + tracked.source_container_name.as_deref(), + Some(desired.source_container_name.as_str()) + ); + assert_eq!( + tracked.receiver_role_assignment_id.as_deref(), + Some(desired.receiver_assignment_id.as_str()) + ); + assert!(tracked.queue_applied); + assert!(tracked.delivery_reconciled); +} + +#[tokio::test] +async fn equal_worker_update_reconciles_rotated_execution_identity_and_storage_delivery() { + let app_name = "test-storage-target-worker"; + let storage = test_storage_1(); + let worker = storage_trigger_worker(&storage); + let old_client_id = "old-execution-client"; + let old_principal_id = "old-execution-principal"; + let new_client_id = "new-execution-client"; + let new_principal_id = "new-execution-principal"; + let new_identity_id = format!( + "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/default-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/new-execution-identity" + ); + let old = storage_target( + &worker.id, + &storage.id, + "old-storage-account", + "old-container", + "old-service-bus-rg", + "old-service-bus-namespace", + old_principal_id, + ); + let desired = storage_target( + &worker.id, + &storage.id, + "new-storage-account", + "new-container", + "new-service-bus-rg", + "new-service-bus-namespace", + new_principal_id, + ); + let existing_components = storage_components( + app_name, + &storage.id, + &old.namespace, + &old.queue, + old_client_id, + ); + let old_component_names = existing_components + .iter() + .map(|component| component.name.clone().expect("component name")) + .collect::>(); + let desired_component_name = get_azure_blob_trigger_dapr_component_name(app_name, &storage.id); + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = storage_provider( + StorageProviderExpectations { + app_name: app_name.to_string(), + existing_components, + old: old.clone(), + desired: desired.clone(), + expected_execution_client_id: new_client_id.to_string(), + expected_execution_principal_id: new_principal_id.to_string(), + expected_container_identity_id: Some(new_identity_id.clone()), + expect_container_app_update: true, + deletes_are_missing: false, + }, + actions.clone(), + ); + + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.storage_trigger_infrastructure = vec![AzureStorageTriggerInfrastructure { + storage_id: Some(old.storage_id.clone()), + source_resource_id: old.source_resource_id.clone(), + source_container_name: Some(old.source_container_name.clone()), + event_subscription_name: old.event_subscription_name.clone(), + service_bus_resource_group: old.resource_group.clone(), + namespace_name: old.namespace.clone(), + queue_name: old.queue.clone(), + receiver_role_assignment_id: Some(old.receiver_assignment_id.clone()), + queue_applied: true, + delivery_reconciled: true, + }]; + controller.dapr_components = vec![desired_component_name.clone()]; + let service_account = ServiceAccount::new("default-profile-sa".to_string()).build(); + let mut executor = SingleControllerExecutor::builder() + .resource(worker.clone()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .with_dependency( + storage.clone(), + storage_controller(&storage.id, "new-storage-account", "new-container"), + ) + .with_dependency( + test_azure_service_bus_namespace(), + namespace_controller("new-service-bus-namespace", "new-service-bus-rg"), + ) + .with_dependency( + service_account, + rotated_service_account(&new_identity_id, new_client_id, new_principal_id), + ) + .build() + .await + .expect("executor should build"); + executor + .update(worker) + .expect("equal worker update should start"); + + executor + .step() + .await + .expect("update identity on Container App"); + executor + .step() + .await + .expect("observe updated Container App"); + executor + .step() + .await + .expect("checkpoint identity-dependent cleanup targets"); + assert_eq!( + actions.lock().expect("action log lock").as_slice(), + ["update-app"], + "identity rotation cleanup must be checkpointed before remote mutation" + ); + + run_until_storage_subscription_created(&mut executor, &actions).await; + + let actions = actions.lock().expect("action log lock"); + assert_old_storage_removed_before_new_target( + &actions, + &old, + &desired, + &old_component_names, + &desired_component_name, + ); + let new_receiver = actions + .iter() + .find(|action| action.starts_with(&format!("put-rbac:{}:", desired.receiver_assignment_id))) + .expect("new receiver role assignment"); + assert!(new_receiver.ends_with(&format!(":{new_principal_id}"))); + let controller = executor + .internal_state::() + .expect("Azure worker controller"); + assert_eq!(controller.storage_trigger_infrastructure.len(), 1); + assert_eq!( + controller.storage_trigger_infrastructure[0] + .receiver_role_assignment_id + .as_deref(), + Some(desired.receiver_assignment_id.as_str()) + ); + assert_eq!( + controller.storage_trigger_infrastructure[0] + .storage_id + .as_deref(), + Some(desired.storage_id.as_str()) + ); + assert!(controller.storage_trigger_infrastructure[0].queue_applied); + assert!(controller.storage_trigger_infrastructure[0].delivery_reconciled); + assert_eq!( + controller.storage_trigger_infrastructure[0] + .source_container_name + .as_deref(), + Some("new-container") + ); +} + +fn storage_checkpoint_provider() -> Arc { + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .returning(|scope, name| { + format!( + "/{}/providers/Microsoft.Authorization/roleAssignments/{name}", + scope.to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + ) + }); + let authorization = Arc::new(authorization); + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + Arc::new(provider) +} + +fn imported_ready_storage_provider( + stale: StorageTarget, + desired: StorageTarget, + actions: Arc>>, +) -> Arc { + let mut service_bus = MockServiceBusManagementApi::new(); + let desired_queue = desired.clone(); + let queue_actions = actions.clone(); + service_bus + .expect_create_or_update_queue() + .times(1) + .returning(move |resource_group, namespace, queue, _| { + assert_eq!(resource_group, desired_queue.resource_group); + assert_eq!(namespace, desired_queue.namespace); + assert_eq!(queue, desired_queue.queue); + record(&queue_actions, format!("create-queue:{queue}")); + Ok(alien_azure_clients::models::queue::SbQueue::default()) + }); + let service_bus = Arc::new(service_bus); + + let role_definition_id = format!( + "/subscriptions/{SUBSCRIPTION_ID}/providers/Microsoft.Authorization/roleDefinitions/4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0" + ); + let list_responses = Arc::new(Mutex::new(std::collections::VecDeque::from([ + vec![receiver_role_assignment(&stale, &role_definition_id)], + Vec::new(), + vec![receiver_role_assignment(&desired, &role_definition_id)], + ]))); + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_build_role_assignment_id() + .returning(|scope, name| { + format!( + "/{}/providers/Microsoft.Authorization/roleAssignments/{name}", + scope.to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + ) + }); + let desired_scope = desired + .receiver_assignment_id + .split("/providers/Microsoft.Authorization") + .next() + .expect("desired assignment scope") + .to_string(); + let role_definition_for_list = role_definition_id.clone(); + authorization + .expect_list_role_assignments() + .times(3) + .returning(move |scope, requested_role_definition| { + assert_eq!( + requested_role_definition.as_deref(), + Some(role_definition_for_list.as_str()) + ); + let scope = format!( + "/{}", + scope + .to_scope_string(&alien_azure_clients::AzureClientConfig::mock()) + .trim_start_matches('/') + ); + assert_eq!(scope, desired_scope); + Ok(list_responses + .lock() + .expect("list responses") + .pop_front() + .expect("expected receiver discovery response")) + }); + let stale_assignment_id = stale.receiver_assignment_id.clone(); + let delete_actions = actions.clone(); + authorization + .expect_delete_role_assignment_by_id() + .times(1) + .returning(move |assignment_id| { + assert_eq!(assignment_id, stale_assignment_id); + record(&delete_actions, format!("delete-rbac:{assignment_id}")); + Ok(None) + }); + let desired_assignment_id = desired.receiver_assignment_id.clone(); + let desired_principal_id = desired.execution_principal_id.clone(); + let put_actions = actions.clone(); + authorization + .expect_create_or_update_role_assignment_by_id() + .times(1) + .returning(move |assignment_id, assignment| { + assert_eq!(assignment_id, desired_assignment_id); + assert_eq!( + assignment + .properties + .as_ref() + .expect("role assignment properties") + .principal_id, + desired_principal_id + ); + record(&put_actions, format!("put-rbac:{assignment_id}")); + Ok(assignment.clone()) + }); + let authorization = Arc::new(authorization); + + let mut event_grid = MockEventGridApi::new(); + let desired_event = desired; + let event_actions = actions; + event_grid + .expect_create_or_update_event_subscription() + .times(1) + .returning(move |source_resource_id, subscription_name, request| { + assert_eq!(source_resource_id, desired_event.source_resource_id); + assert_eq!(subscription_name, desired_event.event_subscription_name); + assert_eq!( + request.properties.filter.subject_begins_with, + format!( + "/blobServices/default/containers/{}/blobs/", + desired_event.source_container_name + ) + ); + record(&event_actions, format!("put-event:{subscription_name}")); + Ok(EventSubscription { + id: None, + name: Some(subscription_name), + properties: Some(EventSubscriptionProperties { + provisioning_state: Some("Succeeded".to_string()), + }), + }) + }); + let event_grid = Arc::new(event_grid); + + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_authorization_client() + .returning(move |_| Ok(authorization.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + provider + .expect_get_azure_event_grid_client() + .returning(move |_| Ok(event_grid.clone())); + Arc::new(provider) +} + +#[tokio::test] +async fn imported_ready_worker_checkpoints_then_repairs_storage_delivery() { + let app_name = "test-storage-target-worker"; + let storage = test_storage_1(); + let worker = storage_trigger_worker(&storage); + let stale = storage_target( + &worker.id, + &storage.id, + "storage-account", + "storage-container", + "service-bus-rg", + "service-bus-namespace", + "stale-principal", + ); + let desired = storage_target( + &worker.id, + &storage.id, + "storage-account", + "storage-container", + "service-bus-rg", + "service-bus-namespace", + "desired-principal", + ); + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = imported_ready_storage_provider(stale.clone(), desired.clone(), actions.clone()); + let service_account = ServiceAccount::new("default-profile-sa".to_string()).build(); + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.resource_id = None; + controller.storage_trigger_infrastructure.clear(); + controller.auxiliary_teardown_candidates_initialized = false; + let mut executor = SingleControllerExecutor::builder() + .resource(worker) + .controller(controller) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .with_dependency( + storage.clone(), + storage_controller(&storage.id, "storage-account", "storage-container"), + ) + .with_dependency( + test_azure_service_bus_namespace(), + namespace_controller("service-bus-namespace", "service-bus-rg"), + ) + .with_dependency( + service_account, + rotated_service_account("desired-identity", "desired-client", "desired-principal"), + ) + .build() + .await + .expect("executor should build"); + + executor.step().await.expect("checkpoint imported target"); + assert!( + actions.lock().expect("action log lock").is_empty(), + "the first Ready pass must not mutate remote delivery resources" + ); + let checkpoint = executor + .internal_state::() + .expect("Azure worker controller"); + assert_eq!(checkpoint.storage_trigger_infrastructure.len(), 1); + assert_eq!( + checkpoint.storage_trigger_infrastructure[0] + .receiver_role_assignment_id + .as_deref(), + Some(desired.receiver_assignment_id.as_str()) + ); + assert!(!checkpoint.storage_trigger_infrastructure[0].delivery_reconciled); + + for step in 0..12 { + let before = actions.lock().expect("action log lock").len(); + executor + .step() + .await + .unwrap_or_else(|error| panic!("Ready repair failed at step {step}: {error}")); + let after = actions.lock().expect("action log lock").len(); + assert!(after <= before + 1, "at most one durable mutation per step"); + if executor + .internal_state::() + .expect("Azure worker controller") + .storage_trigger_infrastructure[0] + .delivery_reconciled + { + break; + } + } + + assert!( + executor + .internal_state::() + .expect("Azure worker controller") + .storage_trigger_infrastructure[0] + .delivery_reconciled, + "Ready repair must reach a proven receiver grant and exact Event Grid subscription" + ); + assert_eq!( + actions.lock().expect("action log lock").as_slice(), + [ + format!("create-queue:{}", desired.queue), + format!("delete-rbac:{}", stale.receiver_assignment_id), + format!("put-rbac:{}", desired.receiver_assignment_id), + format!("put-event:{}", desired.event_subscription_name), + ] + ); +} + +#[tokio::test] +async fn create_crash_then_dependency_rotation_drains_checkpointed_target_before_new_target() { + let app_name = "test-storage-target-worker"; + let storage = test_storage_1(); + let worker = storage_trigger_worker(&storage); + let target_a = storage_target( + &worker.id, + &storage.id, + "storage-a", + "container-a", + "service-bus-rg-a", + "namespace-a", + "principal-a", + ); + let target_b = storage_target( + &worker.id, + &storage.id, + "storage-b", + "container-b", + "service-bus-rg-b", + "namespace-b", + "principal-b", + ); + let service_account = ServiceAccount::new("default-profile-sa".to_string()).build(); + let mut controller = AzureWorkerController::mock_ready(app_name); + controller.state = AzureWorkerState::ConfiguringDaprComponents; + let mut first = SingleControllerExecutor::builder() + .resource(worker.clone()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(storage_checkpoint_provider()) + .with_test_dependencies() + .with_dependency( + storage.clone(), + storage_controller(&storage.id, "storage-a", "container-a"), + ) + .with_dependency( + test_azure_service_bus_namespace(), + namespace_controller("namespace-a", "service-bus-rg-a"), + ) + .with_dependency( + service_account.clone(), + rotated_service_account("identity-a", "client-a", "principal-a"), + ) + .build() + .await + .expect("first executor"); + + first.step().await.expect("checkpoint target A"); + let persisted = first + .internal_state::() + .expect("Azure worker controller") + .clone(); + assert_eq!(persisted.storage_trigger_infrastructure.len(), 1); + assert_eq!( + persisted.storage_trigger_infrastructure[0].source_resource_id, + target_a.source_resource_id + ); + assert_eq!( + persisted.storage_trigger_infrastructure[0] + .storage_id + .as_deref(), + Some(target_a.storage_id.as_str()) + ); + assert_eq!( + persisted.storage_trigger_infrastructure[0] + .receiver_role_assignment_id + .as_deref(), + Some(target_a.receiver_assignment_id.as_str()) + ); + assert!(!persisted.storage_trigger_infrastructure[0].queue_applied); + assert!(!persisted.storage_trigger_infrastructure[0].delivery_reconciled); + + let old_components = storage_components( + app_name, + &storage.id, + &target_a.namespace, + &target_a.queue, + "client-a", + ); + let old_names = old_components + .iter() + .map(|component| component.name.clone().expect("component name")) + .collect::>(); + let desired_component = get_azure_blob_trigger_dapr_component_name(app_name, &storage.id); + let actions = Arc::new(Mutex::new(Vec::new())); + let provider = storage_provider( + StorageProviderExpectations { + app_name: app_name.to_string(), + existing_components: old_components, + old: target_a.clone(), + desired: target_b.clone(), + expected_execution_client_id: "client-b".to_string(), + expected_execution_principal_id: "principal-b".to_string(), + expected_container_identity_id: None, + expect_container_app_update: false, + deletes_are_missing: true, + }, + actions.clone(), + ); + let mut resumed = SingleControllerExecutor::builder() + .resource(worker) + .controller(persisted) + .platform(Platform::Azure) + .service_provider(provider) + .with_test_dependencies() + .with_dependency( + storage.clone(), + storage_controller(&storage.id, "storage-b", "container-b"), + ) + .with_dependency( + test_azure_service_bus_namespace(), + namespace_controller("namespace-b", "service-bus-rg-b"), + ) + .with_dependency( + service_account, + rotated_service_account("identity-b", "client-b", "principal-b"), + ) + .build() + .await + .expect("resumed executor"); + + for step in 0..80 { + let before = actions.lock().expect("action log lock").len(); + resumed + .step() + .await + .unwrap_or_else(|error| panic!("rotated create failed at step {step}: {error}")); + let after = actions.lock().expect("action log lock").len(); + assert!(after <= before + 1, "at most one durable mutation per step"); + let controller = resumed + .internal_state::() + .expect("Azure worker controller"); + if controller.storage_trigger_infrastructure.len() == 1 + && controller.storage_trigger_infrastructure[0].source_resource_id + == target_b.source_resource_id + { + assert!( + !actions + .lock() + .expect("action log lock") + .iter() + .any(|action| action.starts_with("create-queue:")), + "target B must checkpoint before B mutation" + ); + break; + } + } + run_until_storage_subscription_created(&mut resumed, &actions).await; + assert_old_storage_removed_before_new_target( + &actions.lock().expect("action log lock"), + &target_a, + &target_b, + &old_names, + &desired_component, + ); +} diff --git a/crates/alien-infra/src/worker/azure_test_support.rs b/crates/alien-infra/src/worker/azure_test_support.rs new file mode 100644 index 000000000..3d8d7666a --- /dev/null +++ b/crates/alien-infra/src/worker/azure_test_support.rs @@ -0,0 +1,585 @@ +fn create_successful_container_app_response(app_name: &str, has_url: bool) -> ContainerApp { + let fqdn = if has_url { + Some(format!("{}.azurecontainerapps.io", app_name)) + } else { + None + }; + + let ingress = if has_url { + Some(alien_azure_clients::models::container_apps::Ingress { + external: true, + target_port: Some(8080), + fqdn: fqdn.clone(), + traffic: vec![alien_azure_clients::models::container_apps::TrafficWeight { + latest_revision: true, + weight: Some(100), + revision_name: None, + label: None, + }], + transport: alien_azure_clients::models::container_apps::IngressTransport::Auto, + allow_insecure: false, + additional_port_mappings: vec![], + custom_domains: vec![], + ip_security_restrictions: vec![], + cors_policy: None, + client_certificate_mode: None, + exposed_port: None, + sticky_sessions: None, + }) + } else { + None + }; + + ContainerApp { + id: Some(format!( + "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.App/containerApps/{}", + app_name + )), + name: Some(app_name.to_string()), + location: "East US".to_string(), + properties: Some(ContainerAppProperties { + provisioning_state: Some(ContainerAppPropertiesProvisioningState::Succeeded), + configuration: Some(Configuration { + ingress, + active_revisions_mode: ConfigurationActiveRevisionsMode::Single, + identity_settings: vec![], + registries: vec![], + secrets: vec![], + dapr: None, + max_inactive_revisions: None, + runtime: None, + service: None, + }), + outbound_ip_addresses: vec![], + custom_domain_verification_id: None, + environment_id: None, + event_stream_endpoint: None, + latest_ready_revision_name: None, + latest_revision_fqdn: None, + latest_revision_name: None, + managed_environment_id: None, + running_status: None, + template: None, + workload_profile_name: None, + }), + tags: std::collections::HashMap::new(), + extended_location: None, + identity: None, + managed_by: None, + system_data: None, + type_: None, + } +} + +fn create_in_progress_container_app_response(app_name: &str) -> ContainerApp { + ContainerApp { + id: Some(format!( + "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.App/containerApps/{}", + app_name + )), + name: Some(app_name.to_string()), + location: "East US".to_string(), + properties: Some(ContainerAppProperties { + provisioning_state: Some(ContainerAppPropertiesProvisioningState::InProgress), + outbound_ip_addresses: vec![], + custom_domain_verification_id: None, + environment_id: None, + event_stream_endpoint: None, + latest_ready_revision_name: None, + latest_revision_fqdn: None, + latest_revision_name: None, + managed_environment_id: None, + running_status: None, + template: None, + workload_profile_name: None, + configuration: None, + }), + tags: std::collections::HashMap::new(), + extended_location: None, + identity: None, + managed_by: None, + system_data: None, + type_: None, + } +} + +fn setup_mock_client_for_creation_and_update( + app_name: &str, + has_url: bool, +) -> Arc { + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Mock successful app creation - immediate completion + let app_name = app_name.to_string(); + let app_name_for_create = app_name.clone(); + mock_container_apps + .expect_create_or_update_container_app() + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_create, has_url), + )) + }); + + // Mock successful updates - immediate completion + let app_name_for_update = app_name.clone(); + mock_container_apps + .expect_update_container_app() + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_update, has_url), + )) + }); + + // Mock get operations - may be called multiple times during creation and update flows + let app_name_for_get = app_name.clone(); + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| { + Ok(create_successful_container_app_response( + &app_name_for_get, + has_url, + )) + }) + .times(0..); // Allow 0 or more calls + + Arc::new(mock_container_apps) +} + +fn setup_mock_client_for_creation_and_deletion( + app_name: &str, + has_url: bool, +) -> Arc { + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Mock successful app creation - immediate completion + let app_name = app_name.to_string(); + let app_name_for_create = app_name.clone(); + mock_container_apps + .expect_create_or_update_container_app() + .returning(move |_, _, _| { + Ok(OperationResult::Completed( + create_successful_container_app_response(&app_name_for_create, has_url), + )) + }); + + // Mock successful deletion - immediate completion + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + + // Mock get operations during creation (may be called multiple times) + let app_name_for_get_creation = app_name.clone(); + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| { + Ok(create_successful_container_app_response( + &app_name_for_get_creation, + has_url, + )) + }) + .times(0..); // Allow 0 or more calls during creation + + // Mock get operation failure for deletion verification + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }) + .times(0..); + + expect_dapr_components_missing(&mut mock_container_apps); + Arc::new(mock_container_apps) +} + +fn setup_mock_client_for_long_running_creation( + app_name: &str, + has_url: bool, +) -> (Arc, Arc) { + let mut mock_container_apps = MockContainerAppsApi::new(); + let mut mock_lro = MockLongRunningOperationApi::new(); + + // Mock creation that starts as long-running + // Use minimal retry_after for fast tests (actual Azure would use seconds) + let app_name = app_name.to_string(); + mock_container_apps + .expect_create_or_update_container_app() + .returning(|_, _, _| { + Ok(OperationResult::LongRunning(LongRunningOperation { + url: "https://management.azure.com/subscriptions/.../operations/test-op" + .to_string(), + retry_after: Some(Duration::from_millis(10)), + location_url: None, + })) + }); + + // Mock LRO polling - first incomplete, then complete + mock_lro + .expect_check_status() + .returning(|_, _, _| Ok(None)) // Still running + .times(1); + + mock_lro + .expect_check_status() + .returning(|_, _, _| Ok(Some("completed".to_string()))) // Completed + .times(1); + + // Mock get operations showing progression + let app_name_for_get1 = app_name.clone(); + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| { + Ok(create_in_progress_container_app_response( + &app_name_for_get1, + )) + }) + .times(1); + + let app_name_for_get2 = app_name.clone(); + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| { + Ok(create_successful_container_app_response( + &app_name_for_get2, + has_url, + )) + }); + + (Arc::new(mock_container_apps), Arc::new(mock_lro)) +} + +fn setup_mock_client_for_best_effort_deletion( + _app_name: &str, + app_missing: bool, +) -> Arc { + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Mock deletion (might fail if app missing) + if app_missing { + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }); + } else { + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + } + + // Always return not found for final status check + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }); + + expect_dapr_components_missing(&mut mock_container_apps); + Arc::new(mock_container_apps) +} + +fn setup_mock_service_provider( + mock_container_apps: Arc, + mock_lro: Option>, +) -> Arc { + let mut mock_provider = MockPlatformServiceProvider::new(); + + mock_provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(mock_container_apps.clone())); + + if let Some(lro_client) = mock_lro { + mock_provider + .expect_get_azure_long_running_operation_client() + .returning(move |_| Ok(lro_client.clone())); + } + + // Mock Azure authorization client for resource-scoped permissions + mock_provider + .expect_get_azure_authorization_client() + .returning(|_| { + use alien_azure_clients::authorization::MockAuthorizationApi; + let mut mock_auth = MockAuthorizationApi::new(); + mock_auth + .expect_create_or_update_role_definition() + .returning(|_, _, role_def| Ok(role_def.clone())); + mock_auth + .expect_build_role_assignment_id() + .returning(|_, name| { + format!( + "/test/providers/Microsoft.Authorization/roleAssignments/{}", + name + ) + }); + mock_auth + .expect_create_or_update_role_assignment_by_id() + .returning(|_, role_assignment| Ok(role_assignment.clone())); + mock_auth + .expect_delete_role_assignment_by_id() + .returning(|_| Ok(None)); + Ok(Arc::new(mock_auth)) + }); + + Arc::new(mock_provider) +} + +fn setup_commands_toggle_provider( + container_apps: Arc, + service_bus: Arc, + role_assignment_created: Option>, +) -> Arc { + let mut provider = MockPlatformServiceProvider::new(); + provider + .expect_get_azure_container_apps_client() + .returning(move |_| Ok(container_apps.clone())); + provider + .expect_get_azure_service_bus_management_client() + .returning(move |_| Ok(service_bus.clone())); + provider + .expect_get_azure_caller_principal_id() + .returning(|_| Ok("test-manager-principal".to_string())); + provider + .expect_get_azure_authorization_client() + .returning(move |_| { + let mut authorization = MockAuthorizationApi::new(); + authorization + .expect_create_or_update_role_definition() + .returning(|_, _, role_definition| Ok(role_definition.clone())); + authorization + .expect_build_role_assignment_id() + .returning(|_, name| { + format!("/test/providers/Microsoft.Authorization/roleAssignments/{name}") + }); + authorization + .expect_list_role_assignments() + .returning(|_, _| Ok(Vec::new())); + let role_assignment_created = role_assignment_created.clone(); + authorization + .expect_create_or_update_role_assignment_by_id() + .returning(move |_, role_assignment| { + if let Some(created) = &role_assignment_created { + created.store(true, Ordering::SeqCst); + } + Ok(role_assignment.clone()) + }); + authorization + .expect_delete_role_assignment_by_id() + .returning(|_| Ok(None)); + Ok(Arc::new(authorization)) + }); + Arc::new(provider) +} + +/// Sets up mock Container Apps client and optional readiness probe mock server +/// Returns (container_apps_mock_provider, optional_mock_server) +fn setup_mocks_for_function( + worker: &Worker, + app_name: &str, + for_deletion: bool, +) -> (Arc, Option) { + let has_url = !worker.public_endpoints.is_empty(); + let needs_readiness_probe = has_url && worker.readiness_probe.is_some(); + + // Set up mock server for readiness probe if needed + let mock_server = if needs_readiness_probe { + Some(create_readiness_probe_mock(worker)) + } else { + None + }; + + // Set up Container Apps client mock - create custom response if we need to override URL + let container_apps_mock = if needs_readiness_probe && mock_server.is_some() { + // Create custom mock that returns the mock server URL + let mock_server_url = mock_server.as_ref().unwrap().base_url(); + setup_mock_client_with_custom_url(app_name, &mock_server_url, for_deletion) + } else if for_deletion { + setup_mock_client_for_creation_and_deletion(app_name, has_url) + } else { + setup_mock_client_for_creation_and_update(app_name, has_url) + }; + + let mock_provider = setup_mock_service_provider(container_apps_mock, None); + + (mock_provider, mock_server) +} + +fn setup_mock_client_with_custom_url( + app_name: &str, + custom_url: &str, + for_deletion: bool, +) -> Arc { + let mut mock_container_apps = MockContainerAppsApi::new(); + + // Create a container app response with custom URL + let custom_response = create_container_app_with_custom_url(app_name, custom_url); + + // Mock successful app creation + let response_for_create = custom_response.clone(); + mock_container_apps + .expect_create_or_update_container_app() + .returning(move |_, _, _| Ok(OperationResult::Completed(response_for_create.clone()))); + + if for_deletion { + // Mock successful deletion + mock_container_apps + .expect_delete_container_app() + .returning(|_, _| Ok(OperationResult::Completed(()))); + + // Mock get operations during creation (may be called multiple times) + let response_for_get_creation = custom_response.clone(); + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| Ok(response_for_get_creation.clone())) + .times(0..); + + // Mock get operation failure for deletion verification + mock_container_apps + .expect_get_container_app() + .returning(|_, _| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "ContainerApp".to_string(), + resource_name: "test-app".to_string(), + }, + )) + }) + .times(0..); + expect_dapr_components_missing(&mut mock_container_apps); + } else { + // Mock successful updates + let response_for_update = custom_response.clone(); + mock_container_apps + .expect_update_container_app() + .returning(move |_, _, _| Ok(OperationResult::Completed(response_for_update.clone()))); + + // Mock get operations (may be called multiple times) + let response_for_get = custom_response.clone(); + mock_container_apps + .expect_get_container_app() + .returning(move |_, _| Ok(response_for_get.clone())) + .times(0..); + } + + Arc::new(mock_container_apps) +} + +fn expect_dapr_components_missing(mock_container_apps: &mut MockContainerAppsApi) { + mock_container_apps + .expect_get_dapr_component() + .returning(|_, _, component_name| { + Err(AlienError::new( + CloudClientErrorData::RemoteResourceNotFound { + resource_type: "Dapr component".to_string(), + resource_name: component_name.to_string(), + }, + )) + }) + .times(0..); +} + +fn create_container_app_with_custom_url(app_name: &str, custom_url: &str) -> ContainerApp { + // For tests, just extract the host and port from the URL string + let url_without_protocol = custom_url.strip_prefix("http://").unwrap_or(custom_url); + let (host, _port) = if let Some(colon_pos) = url_without_protocol.find(':') { + let host = &url_without_protocol[..colon_pos]; + let port_str = &url_without_protocol[colon_pos + 1..]; + let port = port_str.parse::().unwrap_or(80); + (host, Some(port)) + } else { + (url_without_protocol, None) + }; + + // Create FQDN that matches the custom URL + let _fqdn = if let Some(port) = _port { + format!("{}:{}", host, port) + } else { + host.to_string() + }; + + let ingress = Some(alien_azure_clients::models::container_apps::Ingress { + external: true, + target_port: Some(8080), + fqdn: Some(custom_url.to_string()), // Use the full URL as FQDN for the test + traffic: vec![alien_azure_clients::models::container_apps::TrafficWeight { + latest_revision: true, + weight: Some(100), + revision_name: None, + label: None, + }], + transport: alien_azure_clients::models::container_apps::IngressTransport::Auto, + allow_insecure: false, + additional_port_mappings: vec![], + custom_domains: vec![], + ip_security_restrictions: vec![], + cors_policy: None, + client_certificate_mode: None, + exposed_port: None, + sticky_sessions: None, + }); + + ContainerApp { + id: Some(format!( + "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.App/containerApps/{}", + app_name + )), + name: Some(app_name.to_string()), + location: "East US".to_string(), + properties: Some(ContainerAppProperties { + provisioning_state: Some(ContainerAppPropertiesProvisioningState::Succeeded), + configuration: Some(Configuration { + ingress, + active_revisions_mode: ConfigurationActiveRevisionsMode::Single, + identity_settings: vec![], + registries: vec![], + secrets: vec![], + dapr: None, + max_inactive_revisions: None, + runtime: None, + service: None, + }), + outbound_ip_addresses: vec![], + custom_domain_verification_id: None, + environment_id: None, + event_stream_endpoint: None, + latest_ready_revision_name: None, + latest_revision_fqdn: None, + latest_revision_name: None, + managed_environment_id: None, + running_status: None, + template: None, + workload_profile_name: None, + }), + tags: std::collections::HashMap::new(), + extended_location: None, + identity: None, + managed_by: None, + system_data: None, + type_: None, + } +} + +async fn executor_for_wait_state(controller: AzureWorkerController) -> SingleControllerExecutor { + SingleControllerExecutor::builder() + .resource(basic_function()) + .controller(controller) + .platform(Platform::Azure) + .service_provider(Arc::new(MockPlatformServiceProvider::new())) + .with_test_dependencies() + .build() + .await + .unwrap() +} diff --git a/crates/alien-infra/src/worker/azure_tests.rs b/crates/alien-infra/src/worker/azure_tests.rs new file mode 100644 index 000000000..d7361e27e --- /dev/null +++ b/crates/alien-infra/src/worker/azure_tests.rs @@ -0,0 +1,90 @@ +//! # Azure Worker Controller Tests +//! +//! See `crate::core::controller_test` for a comprehensive guide on testing infrastructure controllers. + +mod lro_routing_tests { + use super::*; + include!("azure_lro_routing_tests.rs"); +} + +mod commands_target_tests { + use super::*; + include!("azure_commands_target_tests.rs"); +} + +mod storage_target_tests { + use super::*; + include!("azure_storage_target_tests.rs"); + include!("azure_storage_delivery_update_tests.rs"); +} + +mod state_persistence_tests { + use super::*; + include!("azure_state_persistence_tests.rs"); +} + +mod operation_recovery_tests { + use super::*; + include!("azure_operation_recovery_tests.rs"); +} + +use std::sync::{ + atomic::{AtomicBool, AtomicUsize, Ordering}, + Arc, +}; +use std::time::Duration; + +use alien_azure_clients::models::authorization_role_assignments::{ + RoleAssignment, RoleAssignmentProperties, RoleAssignmentPropertiesPrincipalType, +}; +use alien_azure_clients::models::container_apps::{ + Configuration, ConfigurationActiveRevisionsMode, ContainerApp, ContainerAppProperties, + ContainerAppPropertiesProvisioningState, +}; +use alien_azure_clients::{ + authorization::MockAuthorizationApi, + container_apps::MockContainerAppsApi, + event_grid::MockEventGridApi, + long_running_operation::{LongRunningOperation, MockLongRunningOperationApi, OperationResult}, + service_bus::MockServiceBusManagementApi, +}; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_core::{Platform, ResourceStatus, Worker, WorkerOutputs, WorkerTrigger}; +use alien_error::{AlienError, ContextError}; +use httpmock::MockServer; +use rstest::rstest; + +use super::{ + commands_queue_name, current_unix_timestamp_secs, dns_name_from_url, + get_azure_internal_commands_dapr_component_name, get_container_apps_certificate_name, + AzureCommandsSenderRoleAssignmentIntent, AzureStorageTriggerTeardownProgress, + AZURE_RBAC_WAIT_POLL_SECS, +}; +use crate::core::{ + controller_test::{test_storage_1, SingleControllerExecutor}, + MockPlatformServiceProvider, +}; +use crate::error::ErrorData; +use crate::infra_requirements::azure_utils::is_azure_authorization_propagation_error; +use crate::worker::azure::trigger_targets::azure_storage_event_types; +use crate::worker::azure_dapr_components::service_bus_dapr_component; +use crate::worker::azure_dapr_names_migration::CURRENT_DAPR_COMPONENT_NAMING_VERSION; +use crate::worker::{ + fixtures::*, readiness_probe::test_utils::create_readiness_probe_mock, AzureWorkerController, +}; +use crate::AzureWorkerState; + +include!("azure_reconciliation_tests.rs"); +include!("azure_test_support.rs"); +include!("azure_lifecycle_tests.rs"); + +#[test] +fn custom_domain_certificate_name_uses_bounded_container_app_name() { + let name = get_container_apps_certificate_name( + "e2e-10-azure-terraform-pr-0123456789", + "test-alien-ts-function", + ); + + assert_eq!(name, "e2e10azureterraf731185acf8be53ed"); + assert!(name.len() <= 32); +} diff --git a/crates/alien-infra/src/worker/azure_trigger_targets.rs b/crates/alien-infra/src/worker/azure_trigger_targets.rs new file mode 100644 index 000000000..ce5e027c6 --- /dev/null +++ b/crates/alien-infra/src/worker/azure_trigger_targets.rs @@ -0,0 +1,491 @@ +use std::time::Duration; + +use alien_azure_clients::event_grid::{ + EventSubscriptionFilter, EventSubscriptionRequest, EventSubscriptionRequestProperties, + ServiceBusQueueDestination, ServiceBusQueueDestinationProperties, +}; +use alien_client_core::ErrorData as CloudClientErrorData; +use alien_core::{ResourceRef, Worker, WorkerTrigger}; +use alien_error::{AlienError, Context, ContextError}; +use tracing::info; + +use super::{ + get_azure_storage_event_subscription_name, AzureStorageTriggerInfrastructure, + AzureStorageTriggerTeardownProgress, AzureWorkerController, +}; +use crate::core::{AzurePermissionsHelper, ResourceControllerContext}; +use crate::error::{ErrorData, Result}; +use crate::infra_requirements::azure_utils::get_resource_group_name; +use crate::worker::azure::role_assignments::discover_proven_role_assignments; +use crate::worker::azure_names::{ + service_bus_queue_scope, storage_trigger_queue_name, + storage_trigger_receiver_role_assignment_name, +}; + +const SERVICE_BUS_DATA_RECEIVER_ROLE_DEFINITION_GUID: &str = "4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0"; + +pub(super) fn storage_trigger_receiver_role_definition_id(subscription_id: &str) -> String { + format!( + "/subscriptions/{subscription_id}/providers/Microsoft.Authorization/roleDefinitions/{SERVICE_BUS_DATA_RECEIVER_ROLE_DEFINITION_GUID}" + ) +} + +pub(super) struct AzureStorageTriggerTarget { + pub(super) infrastructure: AzureStorageTriggerInfrastructure, + pub(super) execution_client_id: String, + pub(super) execution_principal_id: String, + pub(super) receiver_role_assignment_name: String, +} + +pub(super) enum StorageTargetPreparation { + Ready, + Pending, +} + +pub(super) enum StorageDeliveryReconcileResult { + Complete, + Pending(Duration), +} + +pub(super) fn azure_storage_event_types(events: &[String], worker_id: &str) -> Result> { + events + .iter() + .map(|event| { + let event_type = match event.as_str() { + "created" => "Microsoft.Storage.BlobCreated", + "deleted" => "Microsoft.Storage.BlobDeleted", + "tierChanged" => "Microsoft.Storage.BlobTierChanged", + _ => { + return Err(AlienError::new(ErrorData::ResourceConfigInvalid { + message: format!( + "Azure storage trigger event '{}' is not supported; expected one of: created, deleted, tierChanged", + event + ), + resource_id: Some(worker_id.to_string()), + })); + } + }; + Ok(event_type.to_string()) + }) + .collect() +} + +impl AzureStorageTriggerInfrastructure { + pub(super) fn matches_target(&self, desired: &Self) -> bool { + self.storage_id == desired.storage_id + && self.source_resource_id == desired.source_resource_id + && self.source_container_name == desired.source_container_name + && self.event_subscription_name == desired.event_subscription_name + && self.service_bus_resource_group == desired.service_bus_resource_group + && self.namespace_name == desired.namespace_name + && self.queue_name == desired.queue_name + && self.receiver_role_assignment_id == desired.receiver_role_assignment_id + } +} + +impl AzureWorkerController { + pub(super) async fn desired_storage_trigger_target( + &self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + storage_ref: &ResourceRef, + ) -> Result { + let azure_config = ctx.get_azure_config()?; + let namespace_ref = ResourceRef::new( + alien_core::AzureServiceBusNamespace::RESOURCE_TYPE, + "default-service-bus-namespace", + ); + let namespace_controller = ctx.require_dependency::(&namespace_ref)?; + let namespace_name = namespace_controller.namespace_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: namespace_ref.id.clone(), + }) + })?; + let service_bus_resource_group = namespace_controller.resource_group_name(ctx)?; + let storage_controller = + ctx.require_dependency::(storage_ref)?; + let storage_account_name = storage_controller + .storage_account_name + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: storage_ref.id.clone(), + }) + })?; + let storage_container_name = + storage_controller.container_name.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: storage_ref.id.clone(), + }) + })?; + let service_account_ref = ResourceRef::new( + alien_core::ServiceAccount::RESOURCE_TYPE, + format!("{}-sa", worker.get_permissions()), + ); + let service_account = ctx + .require_dependency::( + &service_account_ref, + )?; + let execution_client_id = service_account.identity_client_id.clone().ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: service_account_ref.id.clone(), + }) + })?; + let execution_principal_id = + service_account + .identity_principal_id + .clone() + .ok_or_else(|| { + AlienError::new(ErrorData::DependencyNotReady { + resource_id: worker.id.clone(), + dependency_id: service_account_ref.id.clone(), + }) + })?; + let queue_name = storage_trigger_queue_name(container_app_name, &storage_ref.id); + let event_subscription_name = + get_azure_storage_event_subscription_name(&worker.id, &storage_ref.id); + let deployment_resource_group = get_resource_group_name(ctx.state)?; + let source_resource_id = format!( + "/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Storage/storageAccounts/{}", + azure_config.subscription_id, deployment_resource_group, storage_account_name + ); + let queue_scope = + service_bus_queue_scope(&service_bus_resource_group, &namespace_name, &queue_name); + let assignment_name = storage_trigger_receiver_role_assignment_name( + ctx.resource_prefix, + &worker.id, + &storage_ref.id, + &execution_principal_id, + ); + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + let receiver_role_assignment_id = + authorization_client.build_role_assignment_id(&queue_scope, assignment_name.clone()); + + Ok(AzureStorageTriggerTarget { + infrastructure: AzureStorageTriggerInfrastructure { + storage_id: Some(storage_ref.id.clone()), + source_resource_id, + source_container_name: Some(storage_container_name), + event_subscription_name, + service_bus_resource_group, + namespace_name, + queue_name, + queue_applied: false, + receiver_role_assignment_id: Some(receiver_role_assignment_id), + delivery_reconciled: false, + }, + execution_client_id, + execution_principal_id, + receiver_role_assignment_name: assignment_name, + }) + } + + pub(super) async fn prepare_storage_trigger_target( + &mut self, + ctx: &ResourceControllerContext<'_>, + desired: &AzureStorageTriggerInfrastructure, + ) -> Result { + let tracker_index = self + .storage_trigger_infrastructure + .iter() + .position(|item| item.event_subscription_name == desired.event_subscription_name); + match tracker_index { + Some(index) if !self.storage_trigger_infrastructure[index].matches_target(desired) => { + // A dependency may rotate after the old exact target was + // checkpointed but before its first remote mutation. Finish + // teardown from that durable cursor, then checkpoint the + // newly resolved target on a later controller step. + if self.storage_trigger_teardown_progress + == AzureStorageTriggerTeardownProgress::EventSubscription + && index != 0 + { + self.storage_trigger_infrastructure.swap(0, index); + return Ok(StorageTargetPreparation::Pending); + } + let _ = self.delete_storage_trigger_infrastructure(ctx).await?; + Ok(StorageTargetPreparation::Pending) + } + Some(_) => Ok(StorageTargetPreparation::Ready), + None => { + self.storage_trigger_infrastructure.push(desired.clone()); + Ok(StorageTargetPreparation::Pending) + } + } + } + + pub(super) async fn ensure_storage_delivery_infrastructure( + &mut self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + storage_ref: &ResourceRef, + events: &[String], + desired: &AzureStorageTriggerTarget, + ) -> Result { + let azure_config = ctx.get_azure_config()?; + let desired_infrastructure = &desired.infrastructure; + let tracker_index = self + .storage_trigger_infrastructure + .iter() + .position(|item| { + item.event_subscription_name == desired_infrastructure.event_subscription_name + }) + .ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: format!( + "Storage-trigger target '{}' was not checkpointed", + desired_infrastructure.event_subscription_name + ), + }) + })?; + if !self.storage_trigger_infrastructure[tracker_index] + .matches_target(desired_infrastructure) + { + return Err(AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: format!( + "Storage-trigger target '{}' changed during delivery reconciliation", + desired_infrastructure.event_subscription_name + ), + })); + } + if self.storage_trigger_infrastructure[tracker_index].delivery_reconciled { + return Ok(StorageDeliveryReconcileResult::Complete); + } + + let resource_group_name = &desired_infrastructure.service_bus_resource_group; + let namespace_name = &desired_infrastructure.namespace_name; + let queue_name = &desired_infrastructure.queue_name; + if !self.storage_trigger_infrastructure[tracker_index].queue_applied { + let service_bus_client = ctx + .service_provider + .get_azure_service_bus_management_client(azure_config)?; + service_bus_client + .create_or_update_queue( + resource_group_name.clone(), + namespace_name.clone(), + queue_name.clone(), + alien_azure_clients::models::queue::SbQueueProperties::default(), + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to create storage-trigger Service Bus queue '{queue_name}'" + ), + resource_id: Some(worker.id.clone()), + })?; + self.storage_trigger_infrastructure[tracker_index].queue_applied = true; + return Ok(StorageDeliveryReconcileResult::Pending( + Duration::from_secs(1), + )); + } + + let storage_id = desired_infrastructure + .storage_id + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: format!( + "Storage-trigger target '{}' has no storage ID", + desired_infrastructure.event_subscription_name + ), + }) + })?; + let queue_scope = service_bus_queue_scope(resource_group_name, namespace_name, queue_name); + let role_definition_id = + storage_trigger_receiver_role_definition_id(&azure_config.subscription_id); + let proven_assignments = discover_proven_role_assignments( + ctx, + &queue_scope, + &role_definition_id, + &worker.id, + "storage receiver", + |principal_id| { + storage_trigger_receiver_role_assignment_name( + ctx.resource_prefix, + &worker.id, + storage_id, + principal_id, + ) + }, + ) + .await?; + let desired_assignment_id = desired_infrastructure + .receiver_role_assignment_id + .as_deref() + .expect("desired storage target includes a receiver role assignment"); + let mut desired_assignment_found = false; + let authorization_client = ctx + .service_provider + .get_azure_authorization_client(azure_config)?; + for assignment in proven_assignments { + if assignment.id.eq_ignore_ascii_case(desired_assignment_id) { + desired_assignment_found = true; + continue; + } + match authorization_client + .delete_role_assignment_by_id(assignment.id.clone()) + .await + { + Ok(_) => {} + Err(error) + if matches!( + error.error, + Some(CloudClientErrorData::RemoteResourceNotFound { .. }) + ) => {} + Err(error) => { + return Err(error.context(ErrorData::CloudPlatformError { + message: format!( + "Failed to delete stale storage receiver role assignment '{}'", + assignment.id + ), + resource_id: Some(worker.id.clone()), + })); + } + } + return Ok(StorageDeliveryReconcileResult::Pending( + Duration::from_secs(1), + )); + } + if !desired_assignment_found { + AzurePermissionsHelper::create_role_assignment( + &authorization_client, + azure_config, + &queue_scope, + &desired.receiver_role_assignment_name, + &desired.execution_principal_id, + &role_definition_id, + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to grant the worker access to storage-trigger queue '{queue_name}'" + ), + resource_id: Some(worker.id.clone()), + })?; + return Ok(StorageDeliveryReconcileResult::Pending( + Duration::from_secs(1), + )); + } + + let container_name = desired_infrastructure + .source_container_name + .as_deref() + .ok_or_else(|| { + AlienError::new(ErrorData::ResourceControllerConfigError { + resource_id: worker.id.clone(), + message: format!( + "Storage-trigger target '{}' has no source container", + desired_infrastructure.event_subscription_name + ), + }) + })?; + let queue_resource_id = format!( + "/subscriptions/{}/resourceGroups/{resource_group_name}/providers/Microsoft.ServiceBus/namespaces/{namespace_name}/queues/{queue_name}", + azure_config.subscription_id + ); + let included_event_types = azure_storage_event_types(events, &worker.id)?; + let event_grid_client = ctx + .service_provider + .get_azure_event_grid_client(azure_config)?; + let event_subscription = event_grid_client + .create_or_update_event_subscription( + desired_infrastructure.source_resource_id.clone(), + desired_infrastructure.event_subscription_name.clone(), + EventSubscriptionRequest { + properties: EventSubscriptionRequestProperties { + destination: ServiceBusQueueDestination { + endpoint_type: "ServiceBusQueue".to_string(), + properties: ServiceBusQueueDestinationProperties { + resource_id: queue_resource_id, + }, + }, + filter: EventSubscriptionFilter { + included_event_types, + subject_begins_with: format!( + "/blobServices/default/containers/{container_name}/blobs/" + ), + is_subject_case_sensitive: false, + }, + event_delivery_schema: "CloudEventSchemaV1_0".to_string(), + }, + }, + ) + .await + .context(ErrorData::CloudPlatformError { + message: format!( + "Failed to reconcile Event Grid subscription '{}' for storage '{}'", + desired_infrastructure.event_subscription_name, storage_ref.id + ), + resource_id: Some(worker.id.clone()), + })?; + let provisioning_state = event_subscription + .properties + .and_then(|properties| properties.provisioning_state); + if provisioning_state + .as_deref() + .is_none_or(|state| !state.eq_ignore_ascii_case("Succeeded")) + { + info!( + worker=%worker.id, + subscription=%desired_infrastructure.event_subscription_name, + state=?provisioning_state, + "Waiting for exact Event Grid storage subscription" + ); + return Ok(StorageDeliveryReconcileResult::Pending( + Duration::from_secs(5), + )); + } + + self.storage_trigger_infrastructure[tracker_index].delivery_reconciled = true; + Ok(StorageDeliveryReconcileResult::Pending( + Duration::from_secs(1), + )) + } + + pub(super) async fn storage_trigger_targets_changed( + &self, + ctx: &ResourceControllerContext<'_>, + worker: &Worker, + container_app_name: &str, + ) -> Result { + let storage_refs: Vec<&ResourceRef> = worker + .triggers + .iter() + .filter_map(|trigger| match trigger { + WorkerTrigger::Storage { storage, .. } => Some(storage), + _ => None, + }) + .collect(); + if storage_refs.len() != self.storage_trigger_infrastructure.len() { + return Ok(true); + } + + for storage_ref in storage_refs { + let desired = self + .desired_storage_trigger_target(ctx, worker, container_app_name, storage_ref) + .await? + .infrastructure; + let Some(tracked) = self + .storage_trigger_infrastructure + .iter() + .find(|tracked| tracked.event_subscription_name == desired.event_subscription_name) + else { + return Ok(true); + }; + if !tracked.matches_target(&desired) { + return Ok(true); + } + } + + Ok(false) + } +} diff --git a/crates/alien-infra/src/worker/gcp.rs b/crates/alien-infra/src/worker/gcp.rs index caf57e1d3..06ee37440 100644 --- a/crates/alien-infra/src/worker/gcp.rs +++ b/crates/alien-infra/src/worker/gcp.rs @@ -3638,6 +3638,16 @@ impl GcpWorkerController { { info!(name=%neg_name, "Serverless NEG was already deleted"); } + Err(e) if is_gcp_resource_in_use(&e) => { + info!( + name=%neg_name, + "Serverless NEG is still referenced by another GCP resource; retrying deletion" + ); + return Ok(HandlerAction::Stay { + max_times: Some(30), + suggested_delay: Some(Duration::from_secs(10)), + }); + } Err(e) => { return Err(e.context(ErrorData::CloudPlatformError { message: format!("Failed to delete serverless NEG '{}'", neg_name), @@ -6542,36 +6552,66 @@ mod tests { assert!(executor.outputs().is_none()); } + #[derive(Clone, Copy, Debug)] + enum LoadBalancerDeleteDependency { + TargetProxy, + ServerlessNeg, + } + + #[rstest] + #[case::target_proxy(LoadBalancerDeleteDependency::TargetProxy)] + #[case::serverless_neg(LoadBalancerDeleteDependency::ServerlessNeg)] #[tokio::test] - async fn test_delete_retries_target_proxy_while_forwarding_rule_reference_drains() { + async fn test_delete_retries_while_load_balancer_dependency_drains( + #[case] dependency: LoadBalancerDeleteDependency, + ) { let worker = function_public_ingress(); let function_name = format!("test-{}", worker.id); - let proxy_delete_attempts = Arc::new(AtomicUsize::new(0)); - let proxy_delete_attempts_for_mock = Arc::clone(&proxy_delete_attempts); + let delete_attempts = Arc::new(AtomicUsize::new(0)); let mock_cloudrun = setup_mock_client_for_creation_and_deletion(&function_name, true); let mut mock_compute = MockComputeApi::new(); mock_compute .expect_delete_global_forwarding_rule() .returning(|_| Ok(Operation::default())); - mock_compute - .expect_delete_target_https_proxy() - .returning(move |_| { - if proxy_delete_attempts_for_mock.fetch_add(1, Ordering::SeqCst) == 0 { - Err(resource_in_use_error()) - } else { - Ok(Operation::default()) - } - }); + match dependency { + LoadBalancerDeleteDependency::TargetProxy => { + let delete_attempts = Arc::clone(&delete_attempts); + mock_compute + .expect_delete_target_https_proxy() + .returning(move |_| { + if delete_attempts.fetch_add(1, Ordering::SeqCst) == 0 { + Err(resource_in_use_error()) + } else { + Ok(Operation::default()) + } + }); + mock_compute + .expect_delete_region_network_endpoint_group() + .returning(|_, _| Ok(Operation::default())); + } + LoadBalancerDeleteDependency::ServerlessNeg => { + mock_compute + .expect_delete_target_https_proxy() + .returning(|_| Ok(Operation::default())); + let delete_attempts = Arc::clone(&delete_attempts); + mock_compute + .expect_delete_region_network_endpoint_group() + .returning(move |_, _| { + if delete_attempts.fetch_add(1, Ordering::SeqCst) == 0 { + Err(resource_in_use_error()) + } else { + Ok(Operation::default()) + } + }); + } + } mock_compute .expect_delete_url_map() .returning(|_| Ok(Operation::default())); mock_compute .expect_delete_backend_service() .returning(|_| Ok(Operation::default())); - mock_compute - .expect_delete_region_network_endpoint_group() - .returning(|_, _| Ok(Operation::default())); mock_compute .expect_delete_global_address() .returning(|_| Ok(Operation::default())); @@ -6601,7 +6641,7 @@ mod tests { executor.run_until_terminal().await.unwrap(); assert_eq!(executor.status(), ResourceStatus::Deleted); - assert_eq!(proxy_delete_attempts.load(Ordering::SeqCst), 2); + assert_eq!(delete_attempts.load(Ordering::SeqCst), 2); } // ─────────────── SPECIFIC VALIDATION TESTS ───────────────── diff --git a/crates/alien-infra/src/worker/mod.rs b/crates/alien-infra/src/worker/mod.rs index 72ac8a437..01e79d950 100644 --- a/crates/alien-infra/src/worker/mod.rs +++ b/crates/alien-infra/src/worker/mod.rs @@ -13,6 +13,10 @@ pub use gcp_import::GcpWorkerImporter; mod azure; pub use azure::*; +mod azure_dapr_components; +mod azure_dapr_names_migration; +mod azure_names; + mod azure_import; pub use azure_import::AzureWorkerImporter; diff --git a/crates/alien-infra/tests/importers.rs b/crates/alien-infra/tests/importers.rs index db5b9e64e..c14ad30d7 100644 --- a/crates/alien-infra/tests/importers.rs +++ b/crates/alien-infra/tests/importers.rs @@ -28,8 +28,9 @@ use alien_core::import::{ AwsStorageImportData, AzureContainerAppsEnvironmentImportData, AzureRemoteStackManagementImportData, AzureResourceGroupImportData, AzureServiceAccountImportData, AzureStorageAccountImportData, AzureStorageImportData, - GcpBuildImportData, GcpKvImportData, GcpNetworkImportData, GcpServiceActivationImportData, - GcpStorageImportData, KubernetesClusterImportData, + GcpBuildImportData, GcpKvImportData, GcpNetworkImportData, + GcpRemoteStackManagementImportData, GcpServiceActivationImportData, GcpStorageImportData, + KubernetesClusterImportData, }, ImportContext, }; @@ -48,6 +49,9 @@ use alien_infra::ImporterRegistry; use serde_json::json; use std::collections::HashMap; +#[path = "importers/remote_stack_management.rs"] +mod remote_stack_management; + /// Build a `ResourceEntry` whose `config` is `T`. The importer reads /// `ctx.resource.config` to derive the resource_type written into the /// returned `StackResourceState`. @@ -61,6 +65,16 @@ fn entry(resource: T) -> ResourceEntry { } } +fn remote_entry(resource: T) -> ResourceEntry { + ResourceEntry { + config: Resource::new(resource), + lifecycle: ResourceLifecycle::Live, + dependencies: vec![], + remote_access: true, + enabled_when: None, + } +} + fn frozen_entry(resource: T) -> ResourceEntry { ResourceEntry { config: Resource::new(resource), @@ -271,25 +285,6 @@ fn aws_service_account_round_trip() { assert_eq!(internal["stackPermissionsApplied"], true); } -#[test] -fn aws_remote_stack_management_round_trip() { - let entry = entry(RemoteStackManagement::new("rsm".to_string()).build()); - let data = AwsRemoteStackManagementImportData { - role_arn: "arn:aws:iam::123456789012:role/alien-stack-mgmt".to_string(), - role_name: "alien-stack-mgmt".to_string(), - management_permissions_applied: true, - }; - let state = run_through_registry( - &RemoteStackManagement::RESOURCE_TYPE, - Platform::Aws, - serde_json::to_value(&data).unwrap(), - &entry, - "us-east-1", - &aws_management_config(), - ); - assert_running_with_internal_state(&state); -} - /// A fully wired email resource (seed domain + inbound) imports as Running /// with typed [`EmailOutputs`] carrying exactly what the setup stack handed /// over: DKIM CNAME records per domain, the configuration set, and the @@ -350,15 +345,11 @@ fn aws_email_round_trip() { assert_eq!(domain.dkim_tokens[0].name, "t1._domainkey.mail.example.com"); assert_eq!(domain.dkim_tokens[0].value, "t1.dkim.amazonses.com"); - // Manager-provisioned workers receive the mail binding from the imported - // controller state, mirroring the CloudFormation emitter's binding ref. + // Imported resources must not publish binding material unless the entry + // explicitly opts into remote access. assert_eq!( - state.remote_binding_params, - Some(json!({ - "service": "ses", - "configurationSet": "alien-stack-mailer", - "region": "us-east-1", - })) + state.remote_binding_params, None, + "an imported resource without remote access must not publish its binding params" ); } @@ -467,16 +458,11 @@ fn aws_open_search_round_trip() { "arn:aws:aoss:us-east-1:123456789012:collection/abc123def456" ); - // Manager-provisioned workers receive the collection binding from the - // imported controller state, mirroring the CloudFormation emitter's - // binding ref (SigV4 HTTP with service name `aoss`). + // Imported resources must not publish binding material unless the entry + // explicitly opts into remote access. assert_eq!( - state.remote_binding_params, - Some(json!({ - "service": "aoss", - "endpoint": "https://abc123def456.aoss.us-east-1.on.aws", - "collectionName": "search-a2591da2", - })) + state.remote_binding_params, None, + "an imported resource without remote access must not publish its binding params" ); } @@ -538,11 +524,45 @@ fn gcp_storage_round_trip() { internal_state(&state)["bucketName"], "alien-stack-my-bucket" ); + assert_eq!( + state.remote_binding_params, None, + "an imported resource without remote access must not publish its binding params" + ); } #[test] -fn gcp_kv_round_trip() { - let entry = entry(Kv::new("settings".to_string()).build()); +fn gcp_storage_remote_access_round_trip() { + let entry = remote_entry(Storage::new("my-bucket".to_string()).build()); + let data = GcpStorageImportData { + project_id: "my-project".to_string(), + bucket_name: "alien-stack-my-bucket".to_string(), + bucket_self_link: "https://www.googleapis.com/storage/v1/b/alien-stack-my-bucket" + .to_string(), + location: "us-central1".to_string(), + }; + let state = run_through_registry( + &Storage::RESOURCE_TYPE, + Platform::Gcp, + serde_json::to_value(&data).unwrap(), + &entry, + "us-central1", + &gcp_management_config(), + ); + + assert_running_with_internal_state(&state); + assert_eq!( + state.remote_binding_params, + Some(json!({ + "service": "gcs", + "bucketName": "alien-stack-my-bucket", + })), + "an imported resource with remote access must publish its binding params" + ); +} + +#[test] +fn gcp_kv_remote_access_round_trip() { + let entry = remote_entry(Kv::new("settings".to_string()).build()); let data = GcpKvImportData { project_id: "my-project".to_string(), database_id: "alien-stack-settings".to_string(), @@ -570,8 +590,8 @@ fn gcp_kv_round_trip() { } #[test] -fn gcp_build_round_trip() { - let entry = entry( +fn gcp_build_remote_access_round_trip() { + let entry = remote_entry( Build::new("builder".to_string()) .permissions("build-execution".to_string()) .environment(HashMap::from([( @@ -825,47 +845,6 @@ fn azure_service_account_import_waits_for_stack_permission_propagation() { assert_eq!(internal_state(&state)["state"], "waitingForRbacPropagation"); } -#[test] -fn azure_remote_stack_management_round_trip_includes_access_outputs() { - let entry = entry(RemoteStackManagement::new("rsm".to_string()).build()); - let data = AzureRemoteStackManagementImportData { - subscription_id: "00000000-0000-0000-0000-000000000000".to_string(), - resource_group: "rg-alien".to_string(), - identity_id: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-alien/providers/Microsoft.ManagedIdentity/userAssignedIdentities/alien-management".to_string(), - client_id: "11111111-1111-1111-1111-111111111111".to_string(), - principal_id: "22222222-2222-2222-2222-222222222222".to_string(), - tenant_id: "33333333-3333-3333-3333-333333333333".to_string(), - management_permissions_applied: true, - }; - let state = run_through_registry( - &RemoteStackManagement::RESOURCE_TYPE, - Platform::Azure, - serde_json::to_value(&data).unwrap(), - &entry, - "eastus", - &azure_management_config(), - ); - assert_provisioning_with_internal_state(&state); - assert_eq!(internal_state(&state)["state"], "waitingForRbacPropagation"); - - let outputs = state - .outputs - .as_ref() - .and_then(|outputs| outputs.downcast_ref::()) - .expect("Azure remote-stack-management import must produce outputs"); - assert_eq!(outputs.management_resource_id, data.identity_id); - - let access_config: serde_json::Value = - serde_json::from_str(&outputs.access_configuration).unwrap(); - assert_eq!( - access_config, - json!({ - "uamiClientId": data.client_id, - "tenantId": data.tenant_id, - }) - ); -} - #[test] fn registry_built_in_covers_all_oss_pairs() { let registry = ImporterRegistry::built_in(); diff --git a/crates/alien-infra/tests/importers/remote_stack_management.rs b/crates/alien-infra/tests/importers/remote_stack_management.rs new file mode 100644 index 000000000..3e18fbbdc --- /dev/null +++ b/crates/alien-infra/tests/importers/remote_stack_management.rs @@ -0,0 +1,118 @@ +use super::*; + +#[test] +fn aws_remote_stack_management_import_preserves_setup_ownership() { + let entry = entry(RemoteStackManagement::new("rsm".to_string()).build()); + let data = AwsRemoteStackManagementImportData { + role_arn: "arn:aws:iam::123456789012:role/alien-stack-mgmt".to_string(), + role_name: "alien-stack-mgmt".to_string(), + management_permissions_applied: true, + }; + let state = run_through_registry( + &RemoteStackManagement::RESOURCE_TYPE, + Platform::Aws, + serde_json::to_value(&data).unwrap(), + &entry, + "us-east-1", + &aws_management_config(), + ); + assert_eq!(state.status, ResourceStatus::Running); + let internal = internal_state(&state); + assert!( + internal + .as_object() + .expect("internal_state must serialize as object") + .contains_key("type"), + "serialize_controller must inject a `type` discriminator" + ); + assert_eq!(internal["state"], "ready"); + assert_eq!(internal["setupManaged"], true); + assert_eq!( + internal["appliedManagementGrantFingerprint"], + serde_json::Value::Null, + "import must not claim setup-created grants are runtime-owned" + ); +} + +#[test] +fn gcp_remote_stack_management_import_preserves_setup_ownership() { + let entry = entry(RemoteStackManagement::new("rsm".to_string()).build()); + let data = GcpRemoteStackManagementImportData { + project_id: "my-project".to_string(), + project_number: Some("123456789012".to_string()), + service_account_email: "management@my-project.iam.gserviceaccount.com".to_string(), + service_account_unique_id: "123456789012345678901".to_string(), + management_permissions_applied: true, + }; + let state = run_through_registry( + &RemoteStackManagement::RESOURCE_TYPE, + Platform::Gcp, + serde_json::to_value(&data).unwrap(), + &entry, + "us-central1", + &gcp_management_config(), + ); + + assert_eq!(state.status, ResourceStatus::Running); + assert_eq!(internal_state(&state)["state"], "ready"); + let internal = internal_state(&state); + assert_eq!(internal["setupManaged"], true); + assert_eq!( + internal["appliedManagementGrantFingerprint"], + serde_json::Value::Null, + "import must not claim setup-created grants are runtime-owned", + ); + assert_eq!(internal["remoteStorageBucketNames"], json!([])); +} + +#[test] +fn azure_remote_stack_management_round_trip_includes_access_outputs() { + let entry = entry(RemoteStackManagement::new("rsm".to_string()).build()); + let data = AzureRemoteStackManagementImportData { + subscription_id: "00000000-0000-0000-0000-000000000000".to_string(), + resource_group: "rg-alien".to_string(), + identity_id: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-alien/providers/Microsoft.ManagedIdentity/userAssignedIdentities/alien-management".to_string(), + client_id: "11111111-1111-1111-1111-111111111111".to_string(), + principal_id: "22222222-2222-2222-2222-222222222222".to_string(), + tenant_id: "33333333-3333-3333-3333-333333333333".to_string(), + management_permissions_applied: true, + }; + let state = run_through_registry( + &RemoteStackManagement::RESOURCE_TYPE, + Platform::Azure, + serde_json::to_value(&data).unwrap(), + &entry, + "eastus", + &azure_management_config(), + ); + assert_eq!(state.status, ResourceStatus::Provisioning); + assert_eq!(internal_state(&state)["state"], "waitingForRbacPropagation"); + assert_eq!(internal_state(&state)["setupManaged"], true); + assert_eq!( + internal_state(&state)["appliedManagementGrantFingerprint"], + serde_json::Value::Null, + "import must not claim setup-created grants are runtime-owned" + ); + assert_eq!( + internal_state(&state)["resourceRoleDefinitionIds"], + json!({}), + ); + assert_eq!(internal_state(&state)["roleAssignmentIds"], json!([])); + + let outputs = state + .outputs + .as_ref() + .and_then(|outputs| outputs.downcast_ref::()) + .expect("Azure remote-stack-management import must produce outputs"); + assert_eq!(outputs.management_resource_id, data.identity_id); + + let access_config: serde_json::Value = + serde_json::from_str(&outputs.access_configuration).unwrap(); + assert_eq!( + access_config, + json!({ + "uamiClientId": data.client_id, + "tenantId": data.tenant_id, + }) + ); +} diff --git a/crates/alien-manager/Cargo.toml b/crates/alien-manager/Cargo.toml index e52a2fcc9..ad20cb6a6 100644 --- a/crates/alien-manager/Cargo.toml +++ b/crates/alien-manager/Cargo.toml @@ -38,10 +38,12 @@ alien-bindings = { workspace = true, features = ["aws", "gcp", "azure", "test", alien-deployment = { workspace = true } alien-preflights = { workspace = true } alien-infra = { workspace = true, features = ["test-utils", "aws", "gcp", "azure", "kubernetes"] } +alien-permissions = { workspace = true } alien-local = { workspace = true } # Client config extensions (always available — needed for cross-account credential resolution) alien-client-config = { workspace = true } +alien-aws-clients = { workspace = true } alien-azure-clients = { workspace = true } alien-gcp-clients = { workspace = true } @@ -111,6 +113,7 @@ futures = { workspace = true } [dev-dependencies] tokio = { workspace = true, features = ["full"] } tempfile = { workspace = true } +httpmock = { workspace = true } tower = { version = "0.5", features = ["util"] } http-body-util = { workspace = true } container-registry = { workspace = true, features = ["test-support"] } diff --git a/crates/alien-manager/openapi.json b/crates/alien-manager/openapi.json index 9f45a1cef..01d26cf66 100644 --- a/crates/alien-manager/openapi.json +++ b/crates/alien-manager/openapi.json @@ -29,6 +29,81 @@ } } }, + "/v1/bindings/resolve": { + "post": { + "tags": [ + "bindings" + ], + "operationId": "resolve_binding", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Remote binding resolved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveBindingResponse" + } + } + } + }, + "400": { + "description": "The deployment, release, or binding is not eligible for remote access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "401": { + "description": "Authentication is required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "403": { + "description": "The caller cannot resolve bindings for this deployment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + }, + "404": { + "description": "The deployment, release, or binding was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlienError" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, "/v1/commands": { "post": { "tags": [ @@ -1096,41 +1171,6 @@ ] } }, - "/v1/resolve-credentials": { - "post": { - "tags": [ - "credentials" - ], - "operationId": "resolve_credentials", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Credentials resolved successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveCredentialsResponse" - } - } - } - } - }, - "security": [ - { - "bearer": [] - } - ] - } - }, "/v1/stack/import": { "post": { "tags": [ @@ -3971,6 +4011,32 @@ } } }, + { + "type": "object", + "description": "A short-lived Azure Storage shared access signature.\n\nQuery parameter values are kept decoded. Azure clients must encode them\nwhen attaching them to a request URL.", + "required": [ + "query_parameters", + "type" + ], + "properties": { + "query_parameters": { + "type": "object", + "description": "Exact SAS query parameters, including the signature and expiry.", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "sasToken" + ] + } + } + }, { "type": "object", "description": "Azure VM IMDS managed identity.", @@ -6226,6 +6292,17 @@ "mode" ], "properties": { + "failure_domains": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout." + } + ] + }, "machine": { "type": [ "string", @@ -6256,6 +6333,17 @@ "mode" ], "properties": { + "failure_domains": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FailureDomainSelection", + "description": "Optional failure-domain policy. Absence preserves the existing aggregate layout." + } + ] + }, "machine": { "type": [ "string", @@ -7153,6 +7241,28 @@ "tcp" ] }, + "FailureDomainSelection": { + "type": "object", + "description": "Failure-domain policy selected for a compute pool.", + "required": [ + "spread" + ], + "properties": { + "selectedFailureDomains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Concrete provider domains selected during setup.\nEmpty delegates deterministic selection to the provider setup implementation." + }, + "spread": { + "type": "integer", + "format": "int32", + "description": "Number of distinct failure domains across which new stateful replicas may be spread.", + "minimum": 0 + } + } + }, "GcpArtifactRegistryHeartbeatData": { "type": "object", "required": [ @@ -13519,6 +13629,313 @@ } } }, + "RemoteAwsClientConfig": { + "type": "object", + "description": "Response-safe AWS client configuration. The public contract deliberately\nhas no static, profile, metadata, or web-identity credential variants.", + "required": [ + "accountId", + "region", + "credentials" + ], + "properties": { + "accountId": { + "type": "string", + "description": "AWS account containing the bucket." + }, + "credentials": { + "$ref": "#/components/schemas/RemoteAwsCredentials", + "description": "Expiring AWS session credentials." + }, + "region": { + "type": "string", + "description": "AWS region containing the bucket." + } + }, + "additionalProperties": false + }, + "RemoteAwsCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Temporary AWS session credentials with an authoritative expiry.", + "required": [ + "accessKeyId", + "secretAccessKey", + "sessionToken", + "expiresAt", + "type" + ], + "properties": { + "accessKeyId": { + "type": "string", + "description": "AWS access key id." + }, + "expiresAt": { + "type": "string", + "description": "Provider-reported credential expiry." + }, + "secretAccessKey": { + "type": "string", + "description": "AWS secret access key." + }, + "sessionToken": { + "type": "string", + "description": "AWS session token." + }, + "type": { + "type": "string", + "enum": [ + "sessionCredentials" + ] + } + } + } + ], + "description": "The only AWS credential form remote binding resolution can return." + }, + "RemoteAzureClientConfig": { + "type": "object", + "description": "Response-safe Azure client configuration. It contains one container-bound\nuser-delegation SAS and no OAuth or refreshable identity source.", + "required": [ + "subscriptionId", + "tenantId", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteAzureCredentials", + "description": "A short-lived SAS bound to the requested Blob container." + }, + "region": { + "type": [ + "string", + "null" + ], + "description": "Azure region configured for the deployment." + }, + "subscriptionId": { + "type": "string", + "description": "Azure subscription containing the storage account." + }, + "tenantId": { + "type": "string", + "description": "Azure tenant owning the identity." + } + }, + "additionalProperties": false + }, + "RemoteAzureContainerSas": { + "type": "object", + "description": "Explicit fields of an Azure user-delegation SAS. Keeping the fields typed\nlets clients independently validate container scope, permissions, protocol,\nand expiry before constructing query parameters.", + "required": [ + "accountName", + "containerName", + "permissions", + "startsAt", + "expiresAt", + "signedObjectId", + "signedTenantId", + "signedKeyStart", + "signedKeyExpiry", + "signedKeyService", + "signedKeyVersion", + "protocol", + "serviceVersion", + "signedResource", + "signature" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account named by the signed canonical resource." + }, + "containerName": { + "type": "string", + "description": "Blob container named by the signed canonical resource." + }, + "expiresAt": { + "type": "string", + "description": "SAS validity end (`se`)." + }, + "permissions": { + "type": "string", + "description": "Canonically ordered SAS permissions (`sp`)." + }, + "protocol": { + "type": "string", + "description": "Required transport protocol (`spr`)." + }, + "serviceVersion": { + "type": "string", + "description": "Storage authorization version (`sv`)." + }, + "signature": { + "type": "string", + "description": "HMAC-SHA256 signature (`sig`)." + }, + "signedKeyExpiry": { + "type": "string", + "description": "Delegation-key validity end (`ske`)." + }, + "signedKeyService": { + "type": "string", + "description": "Delegation-key service (`sks`)." + }, + "signedKeyStart": { + "type": "string", + "description": "Delegation-key validity start (`skt`)." + }, + "signedKeyVersion": { + "type": "string", + "description": "Delegation-key version (`skv`)." + }, + "signedObjectId": { + "type": "string", + "description": "Object ID that requested the delegation key (`skoid`)." + }, + "signedResource": { + "type": "string", + "description": "Signed resource kind (`sr`)." + }, + "signedTenantId": { + "type": "string", + "description": "Tenant ID that issued the delegation key (`sktid`)." + }, + "startsAt": { + "type": "string", + "description": "SAS validity start (`st`)." + } + }, + "additionalProperties": false + }, + "RemoteAzureCredentials": { + "oneOf": [ + { + "type": "object", + "description": "User-delegation SAS signed for exactly one container.", + "required": [ + "sas", + "type" + ], + "properties": { + "sas": { + "$ref": "#/components/schemas/RemoteAzureContainerSas", + "description": "Explicit signed fields required to reconstruct the SAS query." + }, + "type": { + "type": "string", + "enum": [ + "containerSas" + ] + } + } + } + ], + "description": "The only Azure credential form remote binding resolution can return." + }, + "RemoteBlobStorageBinding": { + "type": "object", + "description": "Concrete Azure Blob Storage topology returned to remote clients.", + "required": [ + "accountName", + "containerName" + ], + "properties": { + "accountName": { + "type": "string", + "description": "Storage account containing the authorized container." + }, + "containerName": { + "type": "string", + "description": "Blob container authorized by the credential lease." + } + }, + "additionalProperties": false + }, + "RemoteGcpClientConfig": { + "type": "object", + "description": "Response-safe GCP client configuration. Refreshable source credentials and\nservice endpoint overrides cannot be represented by this type.", + "required": [ + "projectId", + "region", + "credentials" + ], + "properties": { + "credentials": { + "$ref": "#/components/schemas/RemoteGcpCredentials", + "description": "Already-minted OAuth access token." + }, + "projectId": { + "type": "string", + "description": "GCP project containing the bucket." + }, + "projectNumber": { + "type": [ + "string", + "null" + ], + "description": "Numeric GCP project id, when known." + }, + "region": { + "type": "string", + "description": "GCP region configured for the deployment." + } + }, + "additionalProperties": false + }, + "RemoteGcpCredentials": { + "oneOf": [ + { + "type": "object", + "description": "Short-lived OAuth access token. Its expiry is the response `expiresAt`.", + "required": [ + "token", + "type" + ], + "properties": { + "token": { + "type": "string", + "description": "OAuth bearer token." + }, + "type": { + "type": "string", + "enum": [ + "accessToken" + ] + } + } + } + ], + "description": "The only GCP credential form remote binding resolution can return." + }, + "RemoteGcsStorageBinding": { + "type": "object", + "description": "Concrete Google Cloud Storage topology returned to remote clients.", + "required": [ + "bucketName" + ], + "properties": { + "bucketName": { + "type": "string", + "description": "GCS bucket name authorized by the credential lease." + } + }, + "additionalProperties": false + }, + "RemoteS3StorageBinding": { + "type": "object", + "description": "Concrete S3 topology returned to remote clients.", + "required": [ + "bucketName" + ], + "properties": { + "bucketName": { + "type": "string", + "description": "S3 bucket name authorized by the credential lease." + } + }, + "additionalProperties": false + }, "RemoteStackManagementHeartbeatData": { "oneOf": [ { @@ -13622,27 +14039,110 @@ } } }, - "ResolveCredentialsRequest": { + "ResolveBindingRequest": { "type": "object", + "description": "Request body for `POST /v1/bindings/resolve`.", "required": [ - "deploymentId" + "deploymentId", + "resourceId" ], "properties": { "deploymentId": { - "type": "string" + "type": "string", + "description": "Deployment containing the remote-enabled resource." + }, + "resourceId": { + "type": "string", + "description": "Logical Storage resource id in the deployment's stack state." } - } + }, + "additionalProperties": false }, - "ResolveCredentialsResponse": { - "type": "object", - "required": [ - "clientConfig" - ], - "properties": { - "clientConfig": { - "$ref": "#/components/schemas/ClientConfig" + "ResolveBindingResponse": { + "oneOf": [ + { + "type": "object", + "description": "AWS S3 and an AWS session.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteS3StorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAwsClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "s3" + ] + } + } + }, + { + "type": "object", + "description": "Azure Blob Storage and an exact container-scoped SAS.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteBlobStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteAzureClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "blob" + ] + } + } + }, + { + "type": "object", + "description": "Google Cloud Storage and a bucket-downscoped access token.", + "required": [ + "binding", + "clientConfig", + "expiresAt", + "service" + ], + "properties": { + "binding": { + "$ref": "#/components/schemas/RemoteGcsStorageBinding" + }, + "clientConfig": { + "$ref": "#/components/schemas/RemoteGcpClientConfig" + }, + "expiresAt": { + "type": "string" + }, + "service": { + "type": "string", + "enum": [ + "gcs" + ] + } + } } - } + ], + "description": "One approved remote Storage binding paired with credentials for the same\nprovider. The discriminant makes cross-provider combinations impossible." }, "ResourceEntry": { "type": "object", @@ -15382,6 +15882,12 @@ } } } + }, + "securitySchemes": { + "bearer": { + "type": "http", + "scheme": "bearer" + } } }, "tags": [ @@ -15417,6 +15923,10 @@ "name": "credentials", "description": "Credential resolution for deployments" }, + { + "name": "bindings", + "description": "Remote resource binding resolution" + }, { "name": "telemetry", "description": "OTLP telemetry ingestion" diff --git a/crates/alien-manager/src/api.rs b/crates/alien-manager/src/api.rs index 176b78ea3..9473cea7e 100644 --- a/crates/alien-manager/src/api.rs +++ b/crates/alien-manager/src/api.rs @@ -1,7 +1,26 @@ //! OpenAPI documentation for the alien-manager API. #[cfg(feature = "openapi")] -use utoipa::OpenApi; +use utoipa::{ + openapi::security::{Http, HttpAuthScheme, SecurityScheme}, + Modify, OpenApi, +}; + +#[cfg(feature = "openapi")] +struct BearerSecurity; + +#[cfg(feature = "openapi")] +impl Modify for BearerSecurity { + fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) { + openapi + .components + .get_or_insert_default() + .add_security_scheme( + "bearer", + SecurityScheme::Http(Http::new(HttpAuthScheme::Bearer)), + ); + } +} /// OpenAPI documentation for the Alien Manager API #[cfg(feature = "openapi")] @@ -45,8 +64,9 @@ use utoipa::OpenApi; crate::routes::sync::agent_sync, crate::routes::sync::initialize, // Credentials - crate::routes::credentials::resolve_credentials, crate::routes::credentials::mint_credentials, + // Remote bindings + crate::routes::bindings::resolve_binding, ), components(schemas( // Deployment types @@ -86,10 +106,11 @@ use utoipa::OpenApi; crate::routes::sync::InitializeRequest, crate::routes::sync::InitializeResponse, // Credentials types - crate::routes::credentials::ResolveCredentialsRequest, - crate::routes::credentials::ResolveCredentialsResponse, crate::routes::credentials::MintCredentialsRequest, crate::routes::credentials::MintCredentialsResponse, + // Remote binding types + crate::routes::bindings::ResolveBindingRequest, + crate::routes::bindings::ResolveBindingResponse, // Identity types crate::routes::whoami::WhoamiResponse, // Health types @@ -97,6 +118,7 @@ use utoipa::OpenApi; // Core types alien_core::Platform, )), + modifiers(&BearerSecurity), tags( (name = "health", description = "Health check"), (name = "identity", description = "Authentication identity"), @@ -106,7 +128,40 @@ use utoipa::OpenApi; (name = "stack-import", description = "Setup artifact stack import (CFN, TF, Helm)"), (name = "sync", description = "Agent sync and state reconciliation"), (name = "credentials", description = "Credential resolution for deployments"), + (name = "bindings", description = "Remote resource binding resolution"), (name = "telemetry", description = "OTLP telemetry ingestion"), ) )] pub struct ApiDoc; + +#[cfg(all(test, feature = "openapi"))] +mod tests { + use serde_json::json; + use utoipa::OpenApi; + + use super::ApiDoc; + + #[test] + fn openapi_declares_http_bearer_security_without_dropping_schemas() { + let document = serde_json::to_value(ApiDoc::openapi()) + .expect("manager OpenAPI should serialize as JSON"); + + assert_eq!( + document.pointer("/components/securitySchemes/bearer"), + Some(&json!({ + "type": "http", + "scheme": "bearer", + })) + ); + assert!( + document + .pointer("/components/schemas/ResolveBindingRequest") + .is_some(), + "adding bearer security must preserve generated component schemas" + ); + assert_eq!( + document.pointer("/paths/~1v1~1bindings~1resolve/post/security/0/bearer"), + Some(&json!([])) + ); + } +} diff --git a/crates/alien-manager/src/auth/authz.rs b/crates/alien-manager/src/auth/authz.rs index c4decb837..ffab8cc3b 100644 --- a/crates/alien-manager/src/auth/authz.rs +++ b/crates/alien-manager/src/auth/authz.rs @@ -38,6 +38,19 @@ pub trait Authz: Send + Sync { fn can_create_deployment(&self, subject: &Subject, ctx: DeploymentCreateCtx<'_>) -> bool; fn can_read_deployment(&self, subject: &Subject, deployment: &DeploymentRecord) -> bool; fn can_update_deployment(&self, subject: &Subject, deployment: &DeploymentRecord) -> bool; + /// Whether a caller may resolve a remote resource binding for a deployment. + /// This is deliberately separate from read access because the response + /// includes short-lived credentials for the deployment's management identity. + fn can_resolve_remote_bindings( + &self, + _subject: &Subject, + _deployment: &DeploymentRecord, + ) -> bool { + // Adding a credential-bearing endpoint must not silently grant access + // in downstream Authz implementations that have not made an explicit + // policy decision for it. + false + } fn can_delete_deployment(&self, subject: &Subject, deployment: &DeploymentRecord) -> bool; // -- Deployment groups ------------------------------------------------- @@ -55,6 +68,11 @@ pub trait Authz: Send + Sync { self.can_act_on_deployment(subject, deployment) } fn can_read_command(&self, subject: &Subject, deployment: &DeploymentRecord) -> bool; + /// Whether a caller holds an exact capability for one command payload. + /// This path deliberately does not infer access from workspace scope: a + /// manager may serve multiple workspaces and externally registered + /// commands have no local entity to authorize against. + fn can_read_command_payload(&self, subject: &Subject, command_id: &str) -> bool; /// Authorize a read from the canonical command record without loading its /// deployment. Deployment-group scope is intentionally handled through /// `can_read_command`, because the command record does not carry the group. diff --git a/crates/alien-manager/src/auth/subject.rs b/crates/alien-manager/src/auth/subject.rs index 5cd63ab0e..6549f4fc2 100644 --- a/crates/alien-manager/src/auth/subject.rs +++ b/crates/alien-manager/src/auth/subject.rs @@ -93,6 +93,16 @@ pub enum Scope { project_id: String, deployment_id: String, }, + /// Exact capability for reading one manager-local command payload. + /// + /// Platform-issued browser tokens use this scope after the control plane + /// has authorized the command and verified its current manager assignment. + /// It must not imply access to the owning deployment or project. + Command { + project_id: String, + deployment_id: String, + command_id: String, + }, } impl Scope { @@ -103,7 +113,8 @@ impl Scope { Scope::Workspace => None, Scope::Project { project_id } | Scope::DeploymentGroup { project_id, .. } - | Scope::Deployment { project_id, .. } => Some(project_id), + | Scope::Deployment { project_id, .. } + | Scope::Command { project_id, .. } => Some(project_id), } } } @@ -164,6 +175,18 @@ pub enum Role { DeploymentTelemetryWriter, DeploymentViewer, DeploymentGroupDeployer, + /// Read-only capability used by Platform telemetry-query JWTs. Query + /// handlers validate their signed scopes separately; generic manager + /// control-plane authorization grants this role nothing. + WorkspaceTelemetryReader, + /// Read-only capability for one command payload, paired with + /// [`Scope::Command`]. + CommandPayloadReader, + /// Exact capability for resolving remote bindings for one deployment. + /// + /// This role is paired with [`Scope::Deployment`] and must not imply generic + /// deployment read or mutation access. + RemoteBindingResolver, } #[cfg(test)] @@ -258,4 +281,14 @@ mod tests { other => panic!("unexpected scope {:?}", other), } } + + #[test] + fn remote_binding_capability_has_a_stable_wire_name() { + let json = serde_json::to_string(&Role::RemoteBindingResolver).expect("serialize role"); + assert_eq!(json, r#""remote-binding-resolver""#); + assert_eq!( + serde_json::from_str::(&json).expect("deserialize role"), + Role::RemoteBindingResolver + ); + } } diff --git a/crates/alien-manager/src/credential_materialization.rs b/crates/alien-manager/src/credential_materialization.rs new file mode 100644 index 000000000..187944b39 --- /dev/null +++ b/crates/alien-manager/src/credential_materialization.rs @@ -0,0 +1,437 @@ +//! Converts refreshable provider credentials into response-safe short-lived +//! configurations. HTTP routes choose a purpose; this module owns the cloud +//! handoff and expiry rules. + +use std::collections::HashMap; + +use alien_aws_clients::AwsClientConfigExt; +use alien_azure_clients::AzureClientConfigExt; +use alien_core::{ + AwsClientConfig, AwsCredentials, AzureClientConfig, AzureCredentials, ClientConfig, + GcpClientConfig, GcpCredentials, Platform, +}; +use alien_error::{AlienError, Context, IntoAlienError}; +use alien_gcp_clients::GcpClientConfigExt; +use chrono::{DateTime, Utc}; + +use crate::error::ErrorData; +use crate::traits::RemoteStorageCredentialSource; + +const GCP_CLOUD_PLATFORM_SCOPE: &str = "https://www.googleapis.com/auth/cloud-platform"; +pub(crate) const AZURE_STORAGE_SCOPE: &str = "https://storage.azure.com/.default"; +pub(crate) const AZURE_REMOTE_STORAGE_PERMISSIONS: &str = "rcwdl"; +const REMOTE_STORAGE_DURATION_SECONDS: i32 = 3600; +const AZURE_MINT_SCOPES: [&str; 4] = [ + "https://management.azure.com/.default", + AZURE_STORAGE_SCOPE, + "https://vault.azure.net/.default", + "https://servicebus.azure.net/.default", +]; + +pub(crate) struct MaterializedCredentialLease { + pub client_config: ClientConfig, + pub expires_at: DateTime, +} + +/// Exact cloud resource requested by remote binding resolution. +pub(crate) enum RemoteStorageCredentialScope { + AwsS3 { + bucket_name: String, + }, + GcpGcs { + bucket_name: String, + }, + AzureBlob { + account_name: String, + container_name: String, + }, +} + +impl std::fmt::Debug for MaterializedCredentialLease { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("MaterializedCredentialLease") + .field("client_config", &"[REDACTED]") + .field("expires_at", &self.expires_at) + .finish() + } +} + +/// Convert provider impersonation output into a response-safe credential form. +/// Refreshable sources and internal service overrides never cross the API. +pub(crate) async fn materialize_minted_client_config( + config: ClientConfig, +) -> Result> { + match config { + ClientConfig::Aws(config) + if matches!( + &config.credentials, + AwsCredentials::SessionCredentials { .. } + ) => + { + Ok(ClientConfig::Aws(Box::new(AwsClientConfig { + account_id: config.account_id, + region: config.region, + credentials: config.credentials, + service_overrides: None, + }))) + } + ClientConfig::Aws(_) => Err(ErrorData::internal( + "AWS impersonation did not return short-lived session credentials", + )), + ClientConfig::Gcp(config) => { + let token = config + .get_bearer_token(GCP_CLOUD_PLATFORM_SCOPE) + .await + .context(ErrorData::CredentialMaterializationFailed { + platform: Platform::Gcp, + purpose: "credential minting".to_string(), + })?; + Ok(ClientConfig::Gcp(Box::new(GcpClientConfig { + project_id: config.project_id, + region: config.region, + credentials: GcpCredentials::AccessToken { token }, + service_overrides: None, + project_number: config.project_number, + }))) + } + ClientConfig::Azure(config) => { + if matches!(&config.credentials, AzureCredentials::AccessToken { .. }) { + return Err(ErrorData::internal( + "Azure impersonation returned a single-scope access token; exact per-scope tokens are required", + )); + } + let mut tokens = HashMap::with_capacity(AZURE_MINT_SCOPES.len()); + for scope in AZURE_MINT_SCOPES { + let token = config.get_bearer_token_with_scope(scope).await.context( + ErrorData::CredentialMaterializationFailed { + platform: Platform::Azure, + purpose: format!("credential minting scope '{scope}'"), + }, + )?; + tokens.insert(scope.to_string(), token); + } + Ok(ClientConfig::Azure(Box::new(AzureClientConfig { + subscription_id: config.subscription_id, + tenant_id: config.tenant_id, + region: config.region, + credentials: AzureCredentials::ScopedAccessTokens { tokens }, + service_overrides: None, + }))) + } + other => Err(ErrorData::internal(format!( + "Credential impersonation returned unsupported {} client config", + other.platform() + ))), + } +} + +/// Materialize the one short-lived credential needed by remote Storage and +/// preserve the cloud provider's authoritative expiry. +pub(crate) async fn materialize_remote_storage_lease( + source: RemoteStorageCredentialSource, + scope: RemoteStorageCredentialScope, +) -> Result> { + match (source, scope) { + ( + RemoteStorageCredentialSource::Direct(ClientConfig::Aws(config)), + RemoteStorageCredentialScope::AwsS3 { bucket_name }, + ) => { + let policy = aws_s3_session_policy(&bucket_name)?; + let config = config + .materialize_web_identity_session_with_policy( + &format!("alien-remote-storage-{}", uuid::Uuid::new_v4().simple()), + REMOTE_STORAGE_DURATION_SECONDS, + &policy, + ) + .await + .context(ErrorData::CredentialMaterializationFailed { + platform: Platform::Aws, + purpose: format!("remote Storage bucket '{bucket_name}'"), + })?; + aws_remote_storage_lease(config) + } + ( + RemoteStorageCredentialSource::AwsAssumeRole { + source, + role_arn, + role_session_name, + target_account_id, + target_region, + }, + RemoteStorageCredentialScope::AwsS3 { bucket_name }, + ) => { + if !role_arn.starts_with(&format!("arn:aws:iam::{target_account_id}:role/")) { + return Err(ErrorData::internal( + "AWS remote Storage target role does not match the deployment account", + )); + } + let policy = aws_s3_session_policy(&bucket_name)?; + let config = source + .assume_role_with_session_policy( + &role_arn, + &role_session_name, + REMOTE_STORAGE_DURATION_SECONDS, + &policy, + &target_account_id, + &target_region, + ) + .await + .context(ErrorData::CredentialMaterializationFailed { + platform: Platform::Aws, + purpose: format!("remote Storage bucket '{bucket_name}'"), + })?; + aws_remote_storage_lease(config) + } + ( + RemoteStorageCredentialSource::GcpCredentialAccessBoundary(source), + RemoteStorageCredentialScope::GcpGcs { bucket_name }, + ) => { + let token = source + .source + .downscope_access_token_for_bucket(&bucket_name, &source.available_role) + .await + .context(ErrorData::CredentialMaterializationFailed { + platform: Platform::Gcp, + purpose: format!("remote Storage bucket '{bucket_name}'"), + })?; + Ok(MaterializedCredentialLease { + client_config: ClientConfig::Gcp(Box::new(GcpClientConfig { + project_id: source.source.project_id, + region: source.source.region, + credentials: GcpCredentials::AccessToken { token: token.token }, + service_overrides: None, + project_number: source.source.project_number, + })), + expires_at: token.expires_at, + }) + } + ( + RemoteStorageCredentialSource::Direct(ClientConfig::Azure(config)), + RemoteStorageCredentialScope::AzureBlob { + account_name, + container_name, + }, + ) => { + if matches!(&config.credentials, AzureCredentials::AccessToken { .. }) { + return Err(ErrorData::internal( + "Remote Azure Storage requires an exact storage-audience token source", + )); + } + let desired_expiry = + Utc::now() + chrono::Duration::seconds(i64::from(REMOTE_STORAGE_DURATION_SECONDS)); + let sas = config + .create_container_user_delegation_sas( + &account_name, + &container_name, + AZURE_REMOTE_STORAGE_PERMISSIONS, + desired_expiry, + ) + .await + .context(ErrorData::CredentialMaterializationFailed { + platform: Platform::Azure, + purpose: format!("remote Storage container '{account_name}/{container_name}'"), + })?; + let signed_expiry = sas + .expires_at + .to_rfc3339_opts(chrono::SecondsFormat::Secs, true); + if sas.account_name != account_name + || sas.container_name != container_name + || sas.permissions != AZURE_REMOTE_STORAGE_PERMISSIONS + || sas.query_parameters.get("sp") != Some(&sas.permissions) + || sas.query_parameters.get("se") != Some(&signed_expiry) + || sas.query_parameters.get("sr").map(String::as_str) != Some("c") + || sas.query_parameters.get("spr").map(String::as_str) != Some("https") + { + return Err(ErrorData::internal( + "Azure returned a SAS that does not prove the requested container scope", + )); + } + Ok(MaterializedCredentialLease { + client_config: ClientConfig::Azure(Box::new(AzureClientConfig { + subscription_id: config.subscription_id, + tenant_id: config.tenant_id, + region: config.region, + credentials: AzureCredentials::SasToken { + query_parameters: sas.query_parameters, + }, + service_overrides: None, + })), + expires_at: sas.expires_at, + }) + } + (source, scope) => Err(ErrorData::internal(format!( + "Remote Storage credential source and scope do not match (source {source:?}, scope {})", + remote_scope_platform(&scope) + ))), + } +} + +fn aws_remote_storage_lease( + config: AwsClientConfig, +) -> Result> { + let AwsCredentials::SessionCredentials { expires_at, .. } = &config.credentials else { + return Err(ErrorData::internal( + "Remote AWS Storage credentials are not a short-lived session", + )); + }; + let expires_at = DateTime::parse_from_rfc3339(expires_at) + .into_alien_error() + .context(ErrorData::InternalError { + message: "AWS returned an invalid session credential expiry".to_string(), + })? + .with_timezone(&Utc); + Ok(MaterializedCredentialLease { + client_config: ClientConfig::Aws(Box::new(AwsClientConfig { + account_id: config.account_id, + region: config.region, + credentials: config.credentials, + service_overrides: None, + })), + expires_at, + }) +} + +fn aws_s3_session_policy(bucket_name: &str) -> Result> { + let valid_bucket_name = (3..=63).contains(&bucket_name.len()) + && bucket_name.bytes().all(|byte| { + byte.is_ascii_lowercase() || byte.is_ascii_digit() || b".-".contains(&byte) + }) + && bucket_name + .as_bytes() + .first() + .is_some_and(u8::is_ascii_alphanumeric) + && bucket_name + .as_bytes() + .last() + .is_some_and(u8::is_ascii_alphanumeric) + && !bucket_name.contains("..") + && !bucket_name.contains(".-") + && !bucket_name.contains("-."); + if !valid_bucket_name { + return Err(ErrorData::bad_request( + "Remote S3 binding contains an invalid bucket name", + )); + } + serde_json::to_string(&serde_json::json!({ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "RemoteStorageBucket", + "Effect": "Allow", + "Action": ["s3:ListBucket"], + "Resource": [format!("arn:aws:s3:::{bucket_name}")] + }, + { + "Sid": "RemoteStorageObjects", + "Effect": "Allow", + "Action": [ + "s3:GetObject", + "s3:PutObject", + "s3:DeleteObject" + ], + "Resource": [format!("arn:aws:s3:::{bucket_name}/*")] + } + ] + })) + .into_alien_error() + .context(ErrorData::InternalError { + message: "Failed to serialize the remote S3 session policy".to_string(), + }) +} + +fn remote_scope_platform(scope: &RemoteStorageCredentialScope) -> Platform { + match scope { + RemoteStorageCredentialScope::AwsS3 { .. } => Platform::Aws, + RemoteStorageCredentialScope::GcpGcs { .. } => Platform::Gcp, + RemoteStorageCredentialScope::AzureBlob { .. } => Platform::Azure, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn aws_remote_storage_policy_has_exact_bucket_and_object_resources() { + let policy = aws_s3_session_policy("requested-bucket").expect("policy should serialize"); + assert_eq!( + serde_json::from_str::(&policy).unwrap(), + serde_json::json!({ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "RemoteStorageBucket", + "Effect": "Allow", + "Action": ["s3:ListBucket"], + "Resource": ["arn:aws:s3:::requested-bucket"] + }, + { + "Sid": "RemoteStorageObjects", + "Effect": "Allow", + "Action": [ + "s3:GetObject", + "s3:PutObject", + "s3:DeleteObject" + ], + "Resource": ["arn:aws:s3:::requested-bucket/*"] + } + ] + }) + ); + } + + #[test] + fn aws_remote_storage_policy_rejects_wildcard_or_malformed_buckets() { + assert!(aws_s3_session_policy("*").is_err()); + assert!(aws_s3_session_policy("bucket/*").is_err()); + assert!(aws_s3_session_policy("bucket..name").is_err()); + assert!(aws_s3_session_policy("valid-bucket-123").is_ok()); + } + + #[tokio::test] + async fn remote_gcp_storage_rejects_unproven_direct_credentials() { + let config = ClientConfig::Gcp(Box::new(GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "opaque-token".to_string(), + }, + service_overrides: None, + project_number: None, + })); + + let error = materialize_remote_storage_lease( + RemoteStorageCredentialSource::Direct(config), + RemoteStorageCredentialScope::GcpGcs { + bucket_name: "bucket".to_string(), + }, + ) + .await + .expect_err("unproven direct GCP credentials must fail closed"); + assert!(!error.retryable); + } + + #[tokio::test] + async fn remote_azure_storage_rejects_unscoped_access_token_before_network() { + let config = ClientConfig::Azure(Box::new(AzureClientConfig { + subscription_id: "subscription".to_string(), + tenant_id: "tenant".to_string(), + region: Some("eastus".to_string()), + credentials: AzureCredentials::AccessToken { + token: "generic-management-token".to_string(), + }, + service_overrides: None, + })); + + let error = materialize_remote_storage_lease( + RemoteStorageCredentialSource::Direct(config), + RemoteStorageCredentialScope::AzureBlob { + account_name: "account".to_string(), + container_name: "container".to_string(), + }, + ) + .await + .expect_err("generic Azure access token must fail closed"); + assert_eq!(error.code, "INTERNAL_ERROR"); + } +} diff --git a/crates/alien-manager/src/error.rs b/crates/alien-manager/src/error.rs index b3572a299..8fc36b6c8 100644 --- a/crates/alien-manager/src/error.rs +++ b/crates/alien-manager/src/error.rs @@ -115,6 +115,17 @@ pub enum ErrorData { platform: Platform, }, + /// A provider failed while turning a refreshable identity into a bearer token. + #[error( + code = "CREDENTIAL_MATERIALIZATION_FAILED", + message = "Failed to materialize {platform} credentials for {purpose}", + retryable = "inherit", + internal = "inherit", + http_status_code = "inherit", + human = "transparent" + )] + CredentialMaterializationFailed { platform: Platform, purpose: String }, + /// Registry permissions could not be removed during deployment cleanup. #[error( code = "REGISTRY_ACCESS_CLEANUP_FAILED", diff --git a/crates/alien-manager/src/lib.rs b/crates/alien-manager/src/lib.rs index 94d7f5515..a53dd81c2 100644 --- a/crates/alien-manager/src/lib.rs +++ b/crates/alien-manager/src/lib.rs @@ -35,6 +35,7 @@ pub mod auth; pub mod commands; pub mod config; +mod credential_materialization; pub mod error; pub(crate) mod ids; pub mod registry; diff --git a/crates/alien-manager/src/providers/impersonation_credentials.rs b/crates/alien-manager/src/providers/impersonation_credentials.rs index 291eefe0f..610cf5f1e 100644 --- a/crates/alien-manager/src/providers/impersonation_credentials.rs +++ b/crates/alien-manager/src/providers/impersonation_credentials.rs @@ -9,12 +9,28 @@ use std::sync::Arc; use alien_bindings::traits::ImpersonationRequest; use alien_bindings::{BindingsProviderApi, ServiceAccountInfo}; -use alien_core::{ClientConfig, DeploymentStatus, EnvironmentInfo, ManagementConfig, Platform}; +use alien_core::{ + ClientConfig, DeploymentStatus, EnvironmentInfo, ManagementConfig, Platform, + RemoteStackManagement, RemoteStackManagementOutputs, +}; use alien_error::{AlienError, Context, GenericError, IntoAlienError}; +use alien_permissions::{ + generators::GcpRuntimePermissionsGenerator, get_permission_set, PermissionContext, +}; use async_trait::async_trait; use crate::error::ErrorData; -use crate::traits::{CredentialResolver, DeploymentRecord, ResolvedCredentials}; +use crate::traits::{ + CredentialResolver, DeploymentRecord, GcpCredentialAccessBoundarySource, + RemoteStorageCredentialSource, ResolvedCredentials, +}; + +const GCP_REMOTE_STORAGE_PERMISSIONS: [&str; 4] = [ + "storage.objects.create", + "storage.objects.delete", + "storage.objects.get", + "storage.objects.list", +]; /// Resolves cloud credentials for push-model deployments via service account impersonation. /// @@ -167,6 +183,119 @@ impl CredentialResolver for ImpersonationCredentialResolver { }) } + async fn resolve_remote_storage_source( + &self, + deployment: &DeploymentRecord, + ) -> Result { + if deployment.platform == Platform::Gcp + && self.management_binding_platforms.contains(&Platform::Gcp) + && !uses_direct_impersonation_credentials(deployment) + { + let stack_state = deployment.stack_state.as_ref().ok_or_else(|| { + AlienError::new(GenericError { + message: format!( + "Remote stack state is required to attenuate GCP Storage credentials for deployment {}", + deployment.id + ), + }) + })?; + let provider = self.provider_for_target(Platform::Gcp); + let base_config = impersonate_management_sa(&**provider, Platform::Gcp).await?; + let resolved = alien_infra::RemoteAccessResolver::default() + .resolve_gcp_for_access_boundary( + base_config, + stack_state, + deployment.environment_info.as_ref(), + ) + .await + .context(ErrorData::RemoteCredentialHandoffFailed { + deployment_id: deployment.id.clone(), + platform: Platform::Gcp, + }) + .map_err(AlienError::into_generic)?; + let ClientConfig::Gcp(source) = resolved else { + return Err(AlienError::new(GenericError { + message: "GCP remote Storage credential handoff returned a non-GCP config" + .to_string(), + })); + }; + return Ok(RemoteStorageCredentialSource::GcpCredentialAccessBoundary( + GcpCredentialAccessBoundarySource { + source, + available_role: gcp_remote_storage_access_boundary_role(deployment)?, + }, + )); + } + + if deployment.platform != Platform::Aws + || !self.management_binding_platforms.contains(&Platform::Aws) + || uses_direct_impersonation_credentials(deployment) + { + return Ok(RemoteStorageCredentialSource::Direct( + self.resolve(deployment).await?, + )); + } + + let stack_state = deployment.stack_state.as_ref().ok_or_else(|| { + AlienError::new(GenericError { + message: format!( + "Remote stack state is required to attenuate AWS Storage credentials for deployment {}", + deployment.id + ), + }) + })?; + let outputs = stack_state + .resources + .values() + .find(|resource| { + resource.resource_type == RemoteStackManagement::RESOURCE_TYPE.as_ref() + }) + .and_then(|resource| resource.outputs.as_ref()) + .and_then(|outputs| outputs.downcast_ref::()) + .ok_or_else(|| { + AlienError::new(GenericError { + message: format!( + "Remote stack management outputs are required to attenuate AWS Storage credentials for deployment {}", + deployment.id + ), + }) + })?; + let provider = self.provider_for_target(Platform::Aws); + let base = impersonate_management_sa(&**provider, Platform::Aws).await?; + let ClientConfig::Aws(source) = base else { + return Err(AlienError::new(GenericError { + message: "AWS management service-account impersonation returned a non-AWS config" + .to_string(), + })); + }; + let (target_account_id, target_region) = if let Some(EnvironmentInfo::Aws(environment)) = + &deployment.environment_info + { + (environment.account_id.clone(), environment.region.clone()) + } else { + let account_id = outputs + .access_configuration + .split(':') + .nth(4) + .filter(|account| account.len() == 12 && account.bytes().all(|b| b.is_ascii_digit())) + .ok_or_else(|| { + AlienError::new(GenericError { + message: "AWS target account cannot be proven from deployment environment or remote role ARN".to_string(), + }) + })? + .to_string(); + (account_id, source.region.clone()) + }; + + Ok(RemoteStorageCredentialSource::AwsAssumeRole { + source, + role_arn: outputs.access_configuration.clone(), + role_session_name: format!("alien-remote-storage-{}", uuid::Uuid::new_v4().simple()), + target_account_id, + target_region, + }) + } + async fn resolve_management_config( &self, platform: Platform, @@ -204,6 +333,54 @@ impl CredentialResolver for ImpersonationCredentialResolver { } } +fn gcp_remote_storage_access_boundary_role( + deployment: &DeploymentRecord, +) -> Result { + let stack_state = deployment.stack_state.as_ref().ok_or_else(|| { + AlienError::new(GenericError { + message: format!( + "Remote stack state is required to attenuate GCP Storage credentials for deployment {}", + deployment.id + ), + }) + })?; + let EnvironmentInfo::Gcp(environment) = deployment.environment_info.as_ref().ok_or_else(|| { + AlienError::new(GenericError { + message: format!( + "GCP environment identity is required to attenuate Storage credentials for deployment {}", + deployment.id + ), + }) + })? else { + return Err(AlienError::new(GenericError { + message: format!( + "GCP deployment {} has non-GCP environment identity", + deployment.id + ), + })); + }; + let permission_set = get_permission_set("storage/remote-data-write").ok_or_else(|| { + AlienError::new(GenericError { + message: "GCP remote Storage permission set is unavailable".to_string(), + }) + })?; + let context = PermissionContext::new() + .with_stack_prefix(stack_state.resource_prefix.clone()) + .with_project_name(environment.project_id.clone()); + let mut roles = GcpRuntimePermissionsGenerator::new() + .generate_custom_roles(permission_set, &context) + .map_err(AlienError::into_generic)?; + if roles.len() != 1 || roles[0].included_permissions != GCP_REMOTE_STORAGE_PERMISSIONS { + return Err(AlienError::new(GenericError { + message: format!( + "GCP remote Storage permission set must generate one exact least-privilege custom role; generated {} role(s)", + roles.len(), + ), + })); + } + Ok(roles.remove(0).name) +} + /// Impersonate the management service account to get base credentials. pub async fn impersonate_management_sa( bindings_provider: &dyn BindingsProviderApi, @@ -392,6 +569,9 @@ fn uses_control_plane_credentials(platform: Platform) -> bool { #[cfg(test)] mod tests { use super::*; + use crate::credential_materialization::{ + materialize_remote_storage_lease, RemoteStorageCredentialScope, + }; use alien_bindings::BindingsProvider; use alien_core::{ bindings::ServiceAccountBinding, AwsClientConfig, AwsCredentials, AwsEnvironmentInfo, @@ -401,6 +581,8 @@ mod tests { StackResourceState, StackState, }; use chrono::Utc; + use httpmock::{Method::POST, MockServer}; + use serde_json::json; #[test] fn azure_target_environment_overrides_subscription_and_region_but_keeps_managing_tenant() { @@ -538,6 +720,119 @@ mod tests { } } + #[test] + fn gcp_remote_storage_uses_exact_generated_custom_role() { + let role = gcp_remote_storage_access_boundary_role(&gcp_handoff_deployment()) + .expect("managed GCP deployment should have an exact access-boundary role"); + + assert_eq!( + role, + "projects/target-project/roles/role_test_prefix_storage_remote_data_write" + ); + } + + #[test] + fn gcp_remote_storage_role_fails_closed_without_target_environment_identity() { + let mut deployment = gcp_handoff_deployment(); + deployment.environment_info = None; + + assert!(gcp_remote_storage_access_boundary_role(&deployment).is_err()); + } + + #[tokio::test] + async fn gcp_remote_storage_mints_each_impersonated_identity_once() { + let server = MockServer::start_async().await; + let management_mint = server + .mock_async(|when, then| { + when.method(POST) + .header("authorization", "Bearer source-token"); + then.status(200).json_body(json!({ + "accessToken": "management-token", + "expireTime": "2099-01-01T00:00:00Z" + })); + }) + .await; + let target_mint = server + .mock_async(|when, then| { + when.method(POST) + .header("authorization", "Bearer management-token"); + then.status(200).json_body(json!({ + "accessToken": "target-token", + "expireTime": "2099-01-01T00:00:00Z" + })); + }) + .await; + let downscope_exchange = server + .mock_async(|when, then| { + when.method(POST).path("/downscope"); + then.status(200).json_body(json!({ + "access_token": "bucket-confined-token", + "expires_in": 900, + "issued_token_type": "urn:ietf:params:oauth:token-type:access_token", + "token_type": "Bearer" + })); + }) + .await; + let base_config = ClientConfig::Gcp(Box::new(GcpClientConfig { + project_id: "managing-project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "source-token".to_string(), + }, + service_overrides: Some(GcpServiceOverrides { + endpoints: HashMap::from([ + ("iamcredentials".to_string(), server.url("/v1")), + ("sts".to_string(), server.url("/downscope")), + ]), + }), + project_number: Some("123456789".to_string()), + })); + let bindings = HashMap::from([( + "management".to_string(), + serde_json::to_value(ServiceAccountBinding::gcp_service_account( + "management@managing-project.iam.gserviceaccount.com", + "management-unique-id", + )) + .expect("management binding should serialize"), + )]); + let provider: Arc = Arc::new( + BindingsProvider::new(base_config, bindings) + .expect("GCP management bindings provider should be valid"), + ); + let resolver = ImpersonationCredentialResolver::new( + provider.clone(), + HashMap::from([(Platform::Gcp, provider)]), + HashSet::from([Platform::Gcp]), + ); + + let source = resolver + .resolve_remote_storage_source(&gcp_handoff_deployment()) + .await + .expect("GCP remote Storage source should resolve lazily"); + let lease = materialize_remote_storage_lease( + source, + RemoteStorageCredentialScope::GcpGcs { + bucket_name: "one-bucket".to_string(), + }, + ) + .await + .expect("GCP remote Storage lease should be downscoped"); + + let gcp = lease + .client_config + .gcp_config() + .expect("materialized lease should remain GCP"); + assert_eq!( + gcp.credentials, + GcpCredentials::AccessToken { + token: "bucket-confined-token".to_string() + } + ); + assert_eq!(management_mint.hits_async().await, 1); + assert_eq!(target_mint.hits_async().await, 1); + assert_eq!(downscope_exchange.hits_async().await, 1); + } + #[tokio::test] async fn gcp_materialization_failure_is_classified_for_bounded_handoff_retry() { let base_config = ClientConfig::Gcp(Box::new(GcpClientConfig { diff --git a/crates/alien-manager/src/providers/oss_authz.rs b/crates/alien-manager/src/providers/oss_authz.rs index f9858c437..37f8e073e 100644 --- a/crates/alien-manager/src/providers/oss_authz.rs +++ b/crates/alien-manager/src/providers/oss_authz.rs @@ -14,6 +14,18 @@ use crate::traits::release_store::ReleaseRecord; pub struct OssAuthz; impl OssAuthz { + /// Roles minted only for narrow platform-to-manager capabilities. They + /// must never inherit OSS's broad "any authenticated token can read" + /// behavior merely because their scope is workspace-wide. + fn is_internal_capability(s: &Subject) -> bool { + matches!( + s.role, + Role::WorkspaceTelemetryReader + | Role::CommandPayloadReader + | Role::RemoteBindingResolver + ) + } + /// True if the subject has workspace-level write authority. In OSS this /// covers the legacy "admin" token (mapped to `WorkspaceAdmin`) and any /// workspace-scoped service account with a write role. @@ -44,10 +56,11 @@ impl Authz for OssAuthz { } } - fn can_read_release(&self, _s: &Subject, _release: &ReleaseRecord) -> bool { + fn can_read_release(&self, s: &Subject, _release: &ReleaseRecord) -> bool { // OSS single-tenant: any valid token reads any release. Deployment - // tokens included — agents need their target release to deploy. - true + // tokens included — agents need their target release to deploy. Exact + // internal capabilities are intentionally limited to their purpose. + !Self::is_internal_capability(s) && !matches!(s.scope, Scope::Command { .. }) } fn can_export_release(&self, s: &Subject, release: &ReleaseRecord) -> bool { @@ -67,6 +80,10 @@ impl Authz for OssAuthz { } fn can_read_deployment(&self, s: &Subject, deployment: &DeploymentRecord) -> bool { + if Self::is_internal_capability(s) { + return false; + } + match &s.scope { Scope::Workspace => true, Scope::Project { project_id } => project_id == &deployment.project_id, @@ -78,6 +95,7 @@ impl Authz for OssAuthz { deployment_id == &deployment.id && matches!(s.role, Role::DeploymentManager | Role::DeploymentViewer) } + Scope::Command { .. } => false, } } @@ -95,6 +113,21 @@ impl Authz for OssAuthz { ) } + fn can_resolve_remote_bindings(&self, s: &Subject, deployment: &DeploymentRecord) -> bool { + if let ( + Scope::Deployment { + project_id, + deployment_id, + }, + Role::RemoteBindingResolver, + ) = (&s.scope, s.role) + { + return project_id == &deployment.project_id && deployment_id == &deployment.id; + } + + self.can_update_deployment(s, deployment) + } + fn can_delete_deployment(&self, s: &Subject, deployment: &DeploymentRecord) -> bool { // Deletion is workspace-write only — a deployment-group token can // create/update its own deployments, but tearing them down is an @@ -115,6 +148,10 @@ impl Authz for OssAuthz { } fn can_read_deployment_group(&self, s: &Subject, dg: &DeploymentGroupRecord) -> bool { + if Self::is_internal_capability(s) { + return false; + } + match &s.scope { Scope::Workspace | Scope::Project { .. } => true, Scope::DeploymentGroup { @@ -122,6 +159,7 @@ impl Authz for OssAuthz { .. } => deployment_group_id == &dg.id, Scope::Deployment { .. } => false, + Scope::Command { .. } => false, } } @@ -152,11 +190,28 @@ impl Authz for OssAuthz { self.can_read_deployment(s, deployment) } + fn can_read_command_payload(&self, s: &Subject, command_id: &str) -> bool { + matches!( + (&s.scope, s.role), + ( + Scope::Command { + command_id: scope_id, + .. + }, + Role::CommandPayloadReader + ) if scope_id == command_id + ) + } + fn can_read_command_context( &self, s: &Subject, command: &alien_commands::server::CommandAccessContext, ) -> bool { + if Self::is_internal_capability(s) { + return false; + } + match &s.scope { Scope::Workspace => true, Scope::Project { project_id } => project_id == &command.project_id, @@ -165,6 +220,7 @@ impl Authz for OssAuthz { && matches!(s.role, Role::DeploymentManager | Role::DeploymentViewer) } Scope::DeploymentGroup { .. } => false, + Scope::Command { .. } => false, } } @@ -181,6 +237,7 @@ impl Authz for OssAuthz { } => deployment_group_id == &deployment.deployment_group_id, Scope::Workspace => Self::is_workspace_writer(s), Scope::Project { .. } => true, + Scope::Command { .. } => false, } } @@ -272,6 +329,43 @@ mod tests { } } + fn deployment_viewer_token(deployment_id: &str) -> Subject { + let mut subject = deployment_token(deployment_id); + subject.role = Role::DeploymentViewer; + subject + } + + fn remote_binding_resolver(project_id: &str, deployment_id: &str) -> Subject { + Subject { + kind: SubjectKind::ServiceAccount { + id: "platform-remote-binding-resolver".to_string(), + }, + workspace_id: "default".to_string(), + scope: Scope::Deployment { + project_id: project_id.to_string(), + deployment_id: deployment_id.to_string(), + }, + role: Role::RemoteBindingResolver, + bearer_token: "bearer".to_string(), + } + } + + fn command_payload_reader(command_id: &str) -> Subject { + Subject { + kind: SubjectKind::ServiceAccount { + id: "platform-command-reader".to_string(), + }, + workspace_id: "default".to_string(), + scope: Scope::Command { + project_id: "default".to_string(), + deployment_id: "d1".to_string(), + command_id: command_id.to_string(), + }, + role: Role::CommandPayloadReader, + bearer_token: "bearer".to_string(), + } + } + fn deployment(id: &str, dg: &str) -> DeploymentRecord { DeploymentRecord { deployment_protocol_version: alien_core::CURRENT_DEPLOYMENT_PROTOCOL_VERSION, @@ -329,6 +423,33 @@ mod tests { assert!(!OssAuthz.can_read_deployment(&deployment_token("d2"), &dep)); } + #[test] + fn remote_binding_resolution_uses_deployment_writer_roles_not_viewers() { + let dep = deployment("d1", "dg-a"); + assert!(OssAuthz.can_resolve_remote_bindings(&deployment_token("d1"), &dep)); + assert!(!OssAuthz.can_resolve_remote_bindings(&deployment_viewer_token("d1"), &dep)); + } + + #[test] + fn remote_binding_capability_is_exact_and_has_no_other_deployment_access() { + let dep = deployment("d1", "dg-a"); + let subject = remote_binding_resolver("default", "d1"); + + assert!(OssAuthz.can_resolve_remote_bindings(&subject, &dep)); + assert!(!OssAuthz + .can_resolve_remote_bindings(&remote_binding_resolver("other-project", "d1"), &dep)); + assert!( + !OssAuthz.can_resolve_remote_bindings(&remote_binding_resolver("default", "d2"), &dep) + ); + assert!(!OssAuthz.can_read_deployment(&subject, &dep)); + assert!(!OssAuthz.can_update_deployment(&subject, &dep)); + assert!(!OssAuthz.can_delete_deployment(&subject, &dep)); + assert!(!OssAuthz.can_dispatch_command(&subject, &dep)); + assert!(!OssAuthz.can_read_command(&subject, &dep)); + assert!(!OssAuthz.can_sync_deployment(&subject, &dep)); + assert!(!OssAuthz.can_ingest_telemetry_for(&subject, "d1")); + } + #[test] fn command_execution_follows_deployment_access_without_granting_dispatch() { let dep = deployment("d1", "dg-a"); @@ -389,4 +510,36 @@ mod tests { assert!(!OssAuthz.can_sync_deployment(&s, &dep)); assert!(!OssAuthz.can_read_deployment(&s, &dep)); } + + #[test] + fn command_payload_reader_is_exact_and_has_no_deployment_access() { + let subject = command_payload_reader("cmd-1"); + let dep = deployment("d1", "dg-a"); + + assert!(OssAuthz.can_read_command_payload(&subject, "cmd-1")); + assert!(!OssAuthz.can_read_command_payload(&subject, "cmd-2")); + assert!(!OssAuthz.can_read_deployment(&subject, &dep)); + assert!(!OssAuthz.can_update_deployment(&subject, &dep)); + assert!(!OssAuthz.can_resolve_remote_bindings(&subject, &dep)); + assert!(!OssAuthz.can_ingest_telemetry_for(&subject, "d1")); + } + + #[test] + fn workspace_telemetry_reader_has_no_control_plane_access() { + let subject = Subject { + kind: SubjectKind::ServiceAccount { + id: "platform-query-reader".to_string(), + }, + workspace_id: "default".to_string(), + scope: Scope::Workspace, + role: Role::WorkspaceTelemetryReader, + bearer_token: "bearer".to_string(), + }; + let dep = deployment("d1", "dg-a"); + + assert!(!OssAuthz.can_read_deployment(&subject, &dep)); + assert!(!OssAuthz.can_update_deployment(&subject, &dep)); + assert!(!OssAuthz.can_resolve_remote_bindings(&subject, &dep)); + assert!(!OssAuthz.can_ingest_telemetry_for(&subject, "d1")); + } } diff --git a/crates/alien-manager/src/routes/bindings.rs b/crates/alien-manager/src/routes/bindings.rs new file mode 100644 index 000000000..a5f1f01da --- /dev/null +++ b/crates/alien-manager/src/routes/bindings.rs @@ -0,0 +1,778 @@ +//! Remote resource-binding resolution. +//! +//! The request names only a deployment and a logical resource. The manager +//! validates the authoritative stack state before it releases the resource's +//! binding topology together with materialized, short-lived credentials. + +use alien_core::{ + AwsClientConfig, AwsCredentials, AzureClientConfig, AzureCredentials, BindingValue, + ClientConfig, DeploymentStatus, GcpClientConfig, GcpCredentials, Platform, ResourceLifecycle, + ResourceStatus, Storage, StorageBinding, +}; +use alien_error::{Context, ContextError, IntoAlienError}; +use axum::{ + extract::{Json, State}, + http::{header::CACHE_CONTROL, header::PRAGMA, HeaderMap}, + response::{IntoResponse, Response}, + routing::post, + Router, +}; +use chrono::{DateTime, SecondsFormat, Utc}; +use serde::{Deserialize, Serialize}; + +use super::{auth, current_release_resource, load_current_release, AppState}; +use crate::credential_materialization::{ + materialize_remote_storage_lease, MaterializedCredentialLease, RemoteStorageCredentialScope, + AZURE_REMOTE_STORAGE_PERMISSIONS, +}; +use crate::error::ErrorData; +use crate::traits::{deployment_status_from_record, DeploymentRecord, ReleaseStore}; + +/// The remote client refreshes five minutes before this server-provided hint. +/// One hour matches the maximum supported lifetime for manager-minted cloud credentials. +const REMOTE_BINDING_REFRESH_HINT_SECONDS: i64 = 3600; + +/// Request body for `POST /v1/bindings/resolve`. +#[derive(Debug, Deserialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct ResolveBindingRequest { + /// Deployment containing the remote-enabled resource. + pub deployment_id: String, + /// Logical Storage resource id in the deployment's stack state. + pub resource_id: String, +} + +/// One approved remote Storage binding paired with credentials for the same +/// provider. The discriminant makes cross-provider combinations impossible. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(tag = "service", rename_all = "lowercase")] +pub enum ResolveBindingResponse { + /// AWS S3 and an AWS session. + S3 { + binding: RemoteS3StorageBinding, + #[serde(rename = "clientConfig")] + client_config: RemoteAwsClientConfig, + #[serde(rename = "expiresAt")] + expires_at: String, + }, + /// Azure Blob Storage and an exact container-scoped SAS. + Blob { + binding: RemoteBlobStorageBinding, + #[serde(rename = "clientConfig")] + client_config: RemoteAzureClientConfig, + #[serde(rename = "expiresAt")] + expires_at: String, + }, + /// Google Cloud Storage and a bucket-downscoped access token. + Gcs { + binding: RemoteGcsStorageBinding, + #[serde(rename = "clientConfig")] + client_config: RemoteGcpClientConfig, + #[serde(rename = "expiresAt")] + expires_at: String, + }, +} + +/// Concrete S3 topology returned to remote clients. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteS3StorageBinding { + /// S3 bucket name authorized by the credential lease. + pub bucket_name: String, +} + +/// Concrete Google Cloud Storage topology returned to remote clients. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteGcsStorageBinding { + /// GCS bucket name authorized by the credential lease. + pub bucket_name: String, +} + +/// Concrete Azure Blob Storage topology returned to remote clients. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteBlobStorageBinding { + /// Storage account containing the authorized container. + pub account_name: String, + /// Blob container authorized by the credential lease. + pub container_name: String, +} + +/// Response-safe AWS client configuration. The public contract deliberately +/// has no static, profile, metadata, or web-identity credential variants. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteAwsClientConfig { + /// AWS account containing the bucket. + pub account_id: String, + /// AWS region containing the bucket. + pub region: String, + /// Expiring AWS session credentials. + pub credentials: RemoteAwsCredentials, +} + +/// The only AWS credential form remote binding resolution can return. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde( + rename_all = "camelCase", + rename_all_fields = "camelCase", + tag = "type" +)] +pub enum RemoteAwsCredentials { + /// Temporary AWS session credentials with an authoritative expiry. + SessionCredentials { + /// AWS access key id. + #[serde(rename = "accessKeyId")] + #[cfg_attr(feature = "openapi", schema(rename = "accessKeyId"))] + access_key_id: String, + /// AWS secret access key. + #[serde(rename = "secretAccessKey")] + #[cfg_attr(feature = "openapi", schema(rename = "secretAccessKey"))] + secret_access_key: String, + /// AWS session token. + #[serde(rename = "sessionToken")] + #[cfg_attr(feature = "openapi", schema(rename = "sessionToken"))] + session_token: String, + /// Provider-reported credential expiry. + #[serde(rename = "expiresAt")] + #[cfg_attr(feature = "openapi", schema(rename = "expiresAt"))] + expires_at: String, + }, +} + +/// Response-safe GCP client configuration. Refreshable source credentials and +/// service endpoint overrides cannot be represented by this type. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteGcpClientConfig { + /// GCP project containing the bucket. + pub project_id: String, + /// GCP region configured for the deployment. + pub region: String, + /// Already-minted OAuth access token. + pub credentials: RemoteGcpCredentials, + /// Numeric GCP project id, when known. + #[serde(skip_serializing_if = "Option::is_none")] + pub project_number: Option, +} + +/// The only GCP credential form remote binding resolution can return. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", tag = "type")] +pub enum RemoteGcpCredentials { + /// Short-lived OAuth access token. Its expiry is the response `expiresAt`. + AccessToken { + /// OAuth bearer token. + token: String, + }, +} + +/// Response-safe Azure client configuration. It contains one container-bound +/// user-delegation SAS and no OAuth or refreshable identity source. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteAzureClientConfig { + /// Azure subscription containing the storage account. + pub subscription_id: String, + /// Azure tenant owning the identity. + pub tenant_id: String, + /// Azure region configured for the deployment. + pub region: Option, + /// A short-lived SAS bound to the requested Blob container. + pub credentials: RemoteAzureCredentials, +} + +/// The only Azure credential form remote binding resolution can return. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", tag = "type")] +pub enum RemoteAzureCredentials { + /// User-delegation SAS signed for exactly one container. + ContainerSas { + /// Explicit signed fields required to reconstruct the SAS query. + sas: RemoteAzureContainerSas, + }, +} + +/// Explicit fields of an Azure user-delegation SAS. Keeping the fields typed +/// lets clients independently validate container scope, permissions, protocol, +/// and expiry before constructing query parameters. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct RemoteAzureContainerSas { + /// Storage account named by the signed canonical resource. + pub account_name: String, + /// Blob container named by the signed canonical resource. + pub container_name: String, + /// Canonically ordered SAS permissions (`sp`). + pub permissions: String, + /// SAS validity start (`st`). + pub starts_at: String, + /// SAS validity end (`se`). + pub expires_at: String, + /// Object ID that requested the delegation key (`skoid`). + pub signed_object_id: String, + /// Tenant ID that issued the delegation key (`sktid`). + pub signed_tenant_id: String, + /// Delegation-key validity start (`skt`). + pub signed_key_start: String, + /// Delegation-key validity end (`ske`). + pub signed_key_expiry: String, + /// Delegation-key service (`sks`). + pub signed_key_service: String, + /// Delegation-key version (`skv`). + pub signed_key_version: String, + /// Required transport protocol (`spr`). + pub protocol: String, + /// Storage authorization version (`sv`). + pub service_version: String, + /// Signed resource kind (`sr`). + pub signed_resource: String, + /// HMAC-SHA256 signature (`sig`). + pub signature: String, +} + +/// Storage binding variants supported by the first hosted remote-bindings release. +#[derive(Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(tag = "service", rename_all = "lowercase")] +pub enum RemoteStorageBinding { + /// AWS S3. + S3(RemoteS3StorageBinding), + /// Azure Blob Storage. + Blob(RemoteBlobStorageBinding), + /// Google Cloud Storage. + Gcs(RemoteGcsStorageBinding), +} + +impl RemoteStorageBinding { + fn credential_scope(&self) -> RemoteStorageCredentialScope { + match self { + Self::S3(binding) => RemoteStorageCredentialScope::AwsS3 { + bucket_name: binding.bucket_name.clone(), + }, + Self::Gcs(binding) => RemoteStorageCredentialScope::GcpGcs { + bucket_name: binding.bucket_name.clone(), + }, + Self::Blob(binding) => RemoteStorageCredentialScope::AzureBlob { + account_name: binding.account_name.clone(), + container_name: binding.container_name.clone(), + }, + } + } +} + +/// Manual `Debug`: both the binding payload and client configuration can carry +/// sensitive service details or credential material and must never reach logs. +impl std::fmt::Debug for ResolveBindingResponse { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ResolveBindingResponse") + .field("lease", &"") + .finish() + } +} + +impl TryFrom for RemoteAwsClientConfig { + type Error = alien_error::AlienError; + + fn try_from(config: AwsClientConfig) -> Result { + if config.service_overrides.is_some() { + return Err(ErrorData::internal( + "Remote AWS Storage response contains service endpoint overrides", + )); + } + let AwsCredentials::SessionCredentials { + access_key_id, + secret_access_key, + session_token, + expires_at, + } = config.credentials + else { + return Err(ErrorData::internal( + "Remote AWS Storage response credentials are not a short-lived session", + )); + }; + + Ok(Self { + account_id: config.account_id, + region: config.region, + credentials: RemoteAwsCredentials::SessionCredentials { + access_key_id, + secret_access_key, + session_token, + expires_at, + }, + }) + } +} + +impl TryFrom for RemoteGcpClientConfig { + type Error = alien_error::AlienError; + + fn try_from(config: GcpClientConfig) -> Result { + if config.service_overrides.is_some() { + return Err(ErrorData::internal( + "Remote GCP Storage response contains service endpoint overrides", + )); + } + let GcpCredentials::AccessToken { token } = config.credentials else { + return Err(ErrorData::internal( + "Remote GCP Storage response credentials are not a short-lived access token", + )); + }; + + Ok(Self { + project_id: config.project_id, + region: config.region, + credentials: RemoteGcpCredentials::AccessToken { token }, + project_number: config.project_number, + }) + } +} + +impl TryFrom<(AzureClientConfig, &RemoteBlobStorageBinding)> for RemoteAzureClientConfig { + type Error = alien_error::AlienError; + + fn try_from( + (config, binding): (AzureClientConfig, &RemoteBlobStorageBinding), + ) -> Result { + if config.service_overrides.is_some() { + return Err(ErrorData::internal( + "Remote Azure Storage response contains service endpoint overrides", + )); + } + let AzureCredentials::SasToken { + mut query_parameters, + } = config.credentials + else { + return Err(ErrorData::internal( + "Remote Azure Storage response credentials are not a container SAS", + )); + }; + let credentials = RemoteAzureContainerSas { + account_name: binding.account_name.clone(), + container_name: binding.container_name.clone(), + permissions: take_sas_parameter(&mut query_parameters, "sp")?, + starts_at: take_sas_parameter(&mut query_parameters, "st")?, + expires_at: take_sas_parameter(&mut query_parameters, "se")?, + signed_object_id: take_sas_parameter(&mut query_parameters, "skoid")?, + signed_tenant_id: take_sas_parameter(&mut query_parameters, "sktid")?, + signed_key_start: take_sas_parameter(&mut query_parameters, "skt")?, + signed_key_expiry: take_sas_parameter(&mut query_parameters, "ske")?, + signed_key_service: take_sas_parameter(&mut query_parameters, "sks")?, + signed_key_version: take_sas_parameter(&mut query_parameters, "skv")?, + protocol: take_sas_parameter(&mut query_parameters, "spr")?, + service_version: take_sas_parameter(&mut query_parameters, "sv")?, + signed_resource: take_sas_parameter(&mut query_parameters, "sr")?, + signature: take_sas_parameter(&mut query_parameters, "sig")?, + }; + if !query_parameters.is_empty() + || credentials.permissions != AZURE_REMOTE_STORAGE_PERMISSIONS + || credentials.protocol != "https" + || credentials.signed_resource != "c" + || credentials.signed_key_service != "b" + { + return Err(ErrorData::internal( + "Remote Azure Storage SAS is not exactly container scoped", + )); + } + + Ok(Self { + subscription_id: config.subscription_id, + tenant_id: config.tenant_id, + region: config.region, + credentials: RemoteAzureCredentials::ContainerSas { sas: credentials }, + }) + } +} + +fn take_sas_parameter( + parameters: &mut std::collections::HashMap, + name: &str, +) -> Result> { + parameters.remove(name).ok_or_else(|| { + ErrorData::internal(format!( + "Remote Azure Storage SAS is missing required parameter '{name}'" + )) + }) +} + +fn concrete_binding_value( + value: &BindingValue, + field: &str, +) -> Result> { + match value { + BindingValue::Value(value) if !value.is_empty() => Ok(value.clone()), + _ => Err(ErrorData::internal(format!( + "Remote Storage binding field '{field}' is not a concrete value" + ))), + } +} + +impl ResolveBindingResponse { + fn from_parts( + binding: RemoteStorageBinding, + lease: MaterializedCredentialLease, + expires_at: String, + ) -> Result> { + match (binding, lease.client_config) { + (RemoteStorageBinding::S3(binding), ClientConfig::Aws(client_config)) => Ok(Self::S3 { + binding, + client_config: (*client_config).try_into()?, + expires_at, + }), + (RemoteStorageBinding::Blob(binding), ClientConfig::Azure(client_config)) => { + Ok(Self::Blob { + client_config: ((*client_config), &binding).try_into()?, + binding, + expires_at, + }) + } + (RemoteStorageBinding::Gcs(binding), ClientConfig::Gcp(client_config)) => { + Ok(Self::Gcs { + binding, + client_config: (*client_config).try_into()?, + expires_at, + }) + } + _ => Err(ErrorData::internal( + "Remote Storage binding and materialized credential platforms do not match", + )), + } + } +} + +pub fn router() -> Router { + Router::new().route("/v1/bindings/resolve", post(resolve_binding)) +} + +// Keep transient errors out of OpenAPI. Progenitor only supports one error +// response type per operation, while its typed payload parse failure drops the +// HTTP status. Leaving 408/425/429/5xx on the unexpected-response path preserves +// retryability and lets callers use still-valid cached credentials. +#[cfg_attr(feature = "openapi", utoipa::path( + post, + path = "/v1/bindings/resolve", + tag = "bindings", + request_body = ResolveBindingRequest, + responses( + (status = 200, description = "Remote binding resolved successfully", body = ResolveBindingResponse), + (status = 400, description = "The deployment, release, or binding is not eligible for remote access", body = alien_error::AlienError), + (status = 401, description = "Authentication is required", body = alien_error::AlienError), + (status = 403, description = "The caller cannot resolve bindings for this deployment", body = alien_error::AlienError), + (status = 404, description = "The deployment, release, or binding was not found", body = alien_error::AlienError) + ), + security( + ("bearer" = []) + ) +))] +async fn resolve_binding( + State(state): State, + headers: HeaderMap, + Json(request): Json, +) -> Response { + let subject = match auth::require_auth(&state, &headers).await { + Ok(subject) => subject, + Err(error) => return error.into_response(), + }; + let deployment = match state + .deployment_store + .get_deployment(&subject, &request.deployment_id) + .await + { + Ok(Some(deployment)) => deployment, + Ok(None) => return ErrorData::not_found_deployment(&request.deployment_id).into_response(), + Err(error) => return error.into_response(), + }; + if !state + .authz + .can_resolve_remote_bindings(&subject, &deployment) + { + return ErrorData::forbidden("Cannot resolve remote bindings for this deployment") + .into_response(); + } + + if !deployment_status_allows_remote_bindings(deployment_status_from_record(&deployment.status)) + { + return ErrorData::bad_request(format!( + "Deployment is not operational for remote bindings (status '{}')", + deployment.status + )) + .into_response(); + } + + if let Err(error) = require_current_release_remote_access( + state.release_store.as_ref(), + &deployment, + &request.resource_id, + ) + .await + { + return error.into_response(); + } + + if let Err(error) = require_setup_owned_remote_storage(&deployment, &request.resource_id) { + return error.into_response(); + } + + let binding = match remote_storage_binding(&deployment, &request.resource_id) { + Ok(binding) => binding, + Err(error) => return error.into_response(), + }; + + let scope = binding.credential_scope(); + let resolved = match state + .credential_resolver + .resolve_remote_storage_source(&deployment) + .await + { + Ok(source) => source, + Err(error) => { + return error + .context(ErrorData::RemoteCredentialHandoffFailed { + deployment_id: deployment.id.clone(), + platform: deployment.platform, + }) + .into_response() + } + }; + let lease = match materialize_remote_storage_lease(resolved, scope).await { + Ok(materialized) => materialized, + Err(error) => return error.into_response(), + }; + + let now = Utc::now(); + let expires_at = match remote_binding_expiry(lease.expires_at, now) { + Ok(expires_at) => expires_at.to_rfc3339_opts(SecondsFormat::Secs, true), + Err(error) => return error.into_response(), + }; + + let response = match ResolveBindingResponse::from_parts(binding, lease, expires_at.clone()) { + Ok(response) => response, + Err(error) => return error.into_response(), + }; + + tracing::info!( + event = "remote_binding_credentials_issued", + deployment_id = %request.deployment_id, + resource_id = %request.resource_id, + platform = %deployment.platform, + expires_at = %expires_at, + "Issued remote Storage credentials" + ); + + ( + [(CACHE_CONTROL, "no-store"), (PRAGMA, "no-cache")], + Json(response), + ) + .into_response() +} + +/// External bindings import caller-supplied resource references; they do not +/// prove that generated setup created the resource. Remote Bindings v0 must +/// therefore reject them even if stale synchronized state contains binding +/// parameters from an older manager. +fn require_setup_owned_remote_storage( + deployment: &DeploymentRecord, + resource_id: &str, +) -> Result<(), alien_error::AlienError> { + let in_deployment_config = deployment + .deployment_config + .as_ref() + .is_some_and(|config| config.external_bindings.has(resource_id)); + let in_stack_settings = deployment + .stack_settings + .as_ref() + .and_then(|settings| settings.external_bindings.as_ref()) + .is_some_and(|bindings| bindings.has(resource_id)); + if in_deployment_config || in_stack_settings { + return Err(ErrorData::bad_request(format!( + "Remote Storage resource '{resource_id}' cannot use an external binding; remote access is limited to resources created by setup" + ))); + } + Ok(()) +} + +fn deployment_status_allows_remote_bindings(status: Option) -> bool { + match status { + Some( + DeploymentStatus::Running + | DeploymentStatus::RefreshFailed + | DeploymentStatus::UpdatePending + | DeploymentStatus::Updating + | DeploymentStatus::UpdateFailed, + ) => true, + Some( + DeploymentStatus::Pending + | DeploymentStatus::PreflightsFailed + | DeploymentStatus::InitialSetup + | DeploymentStatus::InitialSetupFailed + | DeploymentStatus::Provisioning + | DeploymentStatus::WaitingForMachines + | DeploymentStatus::ProvisioningFailed + | DeploymentStatus::DeletePending + | DeploymentStatus::Deleting + | DeploymentStatus::DeleteFailed + | DeploymentStatus::TeardownRequired + | DeploymentStatus::TeardownFailed + | DeploymentStatus::Deleted + | DeploymentStatus::Error, + ) + | None => false, + } +} + +fn remote_binding_expiry( + provider_expires_at: DateTime, + now: DateTime, +) -> Result, alien_error::AlienError> { + let maximum = now + chrono::Duration::seconds(REMOTE_BINDING_REFRESH_HINT_SECONDS); + let expires_at = provider_expires_at.min(maximum); + + if expires_at <= now { + return Err(ErrorData::internal( + "Remote Storage credential lease is already expired", + )); + } + + Ok(expires_at) +} + +/// Require remote access in the user-authored current release before trusting +/// controller-published binding parameters in stack state. +/// +/// Stack state can outlive a release update or come from an older manager that +/// did not clear `remote_binding_params`. The current release is therefore the +/// authoritative opt-in source. In particular, desired/prepared release data +/// must not grant access while an update is still in progress. +async fn require_current_release_remote_access( + release_store: &dyn ReleaseStore, + deployment: &DeploymentRecord, + resource_id: &str, +) -> Result<(), alien_error::AlienError> { + let release_id = deployment.current_release_id.as_deref().ok_or_else(|| { + ErrorData::bad_request( + "Deployment has no current release; remote bindings cannot be resolved", + ) + })?; + + let release = load_current_release( + release_store, + deployment, + release_id, + "remote binding resolution", + ) + .await?; + let (_, resource) = current_release_resource(&release, deployment, release_id, resource_id)?; + + if resource.config.resource_type() != Storage::RESOURCE_TYPE { + return Err(ErrorData::bad_request(format!( + "Resource '{resource_id}' is not storage in the deployment's current release" + ))); + } + if resource.lifecycle != ResourceLifecycle::Frozen { + return Err(ErrorData::bad_request(format!( + "Storage resource '{resource_id}' is not Frozen in the deployment's current release" + ))); + } + if !resource.remote_access { + return Err(ErrorData::bad_request(format!( + "Storage resource '{resource_id}' is not enabled for remote access in the deployment's current release" + ))); + } + + Ok(()) +} + +fn remote_storage_binding( + deployment: &DeploymentRecord, + resource_id: &str, +) -> Result> { + if !matches!( + deployment.platform, + Platform::Aws | Platform::Gcp | Platform::Azure + ) { + return Err(ErrorData::bad_request(format!( + "Remote Storage is not supported for deployment platform '{}'", + deployment.platform + ))); + } + let stack_state = deployment.stack_state.as_ref().ok_or_else(|| { + ErrorData::bad_request("Deployment has no stack state (not yet provisioned)") + })?; + let resource = stack_state.resource(resource_id).ok_or_else(|| { + ErrorData::bad_request(format!( + "Resource '{resource_id}' does not exist in stack state" + )) + })?; + if resource.resource_type != Storage::RESOURCE_TYPE.as_ref() { + return Err(ErrorData::bad_request(format!( + "Resource '{resource_id}' is not storage" + ))); + } + if resource.lifecycle != Some(ResourceLifecycle::Frozen) { + return Err(ErrorData::bad_request(format!( + "Storage resource '{resource_id}' is not Frozen" + ))); + } + if resource.status != ResourceStatus::Running { + return Err(ErrorData::bad_request(format!( + "Storage resource '{resource_id}' is not running" + ))); + } + let binding = resource.remote_binding_params.clone().ok_or_else(|| { + ErrorData::bad_request(format!( + "Storage resource '{resource_id}' is not enabled for remote access" + )) + })?; + let binding: StorageBinding = + serde_json::from_value(binding) + .into_alien_error() + .context(ErrorData::BadRequest { + reason: format!("Storage resource '{resource_id}' has an invalid remote binding"), + })?; + match (deployment.platform, binding) { + (Platform::Aws, StorageBinding::S3(binding)) => { + Ok(RemoteStorageBinding::S3(RemoteS3StorageBinding { + bucket_name: concrete_binding_value(&binding.bucket_name, "S3 bucketName")?, + })) + } + (Platform::Gcp, StorageBinding::Gcs(binding)) => { + Ok(RemoteStorageBinding::Gcs(RemoteGcsStorageBinding { + bucket_name: concrete_binding_value(&binding.bucket_name, "GCS bucketName")?, + })) + } + (Platform::Azure, StorageBinding::Blob(binding)) => { + Ok(RemoteStorageBinding::Blob(RemoteBlobStorageBinding { + account_name: concrete_binding_value( + &binding.account_name, + "Azure Blob Storage accountName", + )?, + container_name: concrete_binding_value( + &binding.container_name, + "Azure Blob Storage containerName", + )?, + })) + } + _ => Err(ErrorData::bad_request(format!( + "Storage resource '{resource_id}' binding does not match deployment platform '{}'", + deployment.platform + ))), + } +} + +#[cfg(test)] +#[path = "bindings/tests.rs"] +mod tests; diff --git a/crates/alien-manager/src/routes/bindings/tests.rs b/crates/alien-manager/src/routes/bindings/tests.rs new file mode 100644 index 000000000..e0835a951 --- /dev/null +++ b/crates/alien-manager/src/routes/bindings/tests.rs @@ -0,0 +1,610 @@ +use std::collections::HashMap; + +use alien_core::{ + ExternalBinding, ExternalBindings, Platform, Resource, Stack, StackResourceState, + StackSettings, StackState, +}; +use alien_error::AlienError; +use async_trait::async_trait; + +use super::*; +use crate::auth::Subject; +use crate::traits::{CreateReleaseParams, ReleaseRecord}; + +#[derive(Default)] +struct StubReleaseStore { + releases: HashMap, +} + +#[async_trait] +impl ReleaseStore for StubReleaseStore { + async fn create_release( + &self, + caller: &Subject, + params: CreateReleaseParams, + ) -> Result { + Ok(ReleaseRecord { + id: "created-release".to_string(), + workspace_id: caller.workspace_id.clone(), + project_id: params.project_id, + stacks: params.stacks, + git_commit_sha: params.git_commit_sha, + git_commit_ref: params.git_commit_ref, + git_commit_message: params.git_commit_message, + created_at: Utc::now(), + }) + } + + async fn get_release( + &self, + _caller: &Subject, + id: &str, + ) -> Result, AlienError> { + Ok(self.releases.get(id).cloned()) + } + + async fn get_latest_release( + &self, + _caller: &Subject, + ) -> Result, AlienError> { + Ok(self.releases.values().next().cloned()) + } + + async fn list_releases(&self, _caller: &Subject) -> Result, AlienError> { + Ok(self.releases.values().cloned().collect()) + } +} + +fn stack_state_with_resource( + resource_type: &str, + lifecycle: Option, + status: ResourceStatus, + remote_binding_params: Option, +) -> StackState { + let mut stack_state = StackState::new(Platform::Aws); + stack_state.resources.insert( + "files".to_string(), + StackResourceState::builder() + .resource_type(resource_type.to_string()) + .status(status) + .config(Resource::new(Storage { + id: "files".to_string(), + public_read: false, + versioning: false, + lifecycle_rules: Vec::new(), + })) + .maybe_lifecycle(lifecycle) + .maybe_remote_binding_params(remote_binding_params) + .dependencies(Vec::new()) + .build(), + ); + stack_state +} + +fn deployment(stack_state: StackState) -> DeploymentRecord { + deployment_on_platform(stack_state, Platform::Aws) +} + +fn deployment_on_platform(stack_state: StackState, platform: Platform) -> DeploymentRecord { + DeploymentRecord { + id: "deployment".to_string(), + workspace_id: "default".to_string(), + project_id: "default".to_string(), + name: "deployment".to_string(), + deployment_group_id: "group".to_string(), + platform, + deployment_protocol_version: 1, + base_platform: None, + status: "running".to_string(), + stack_settings: None, + stack_state: Some(stack_state), + environment_info: None, + runtime_metadata: None, + current_release_id: None, + desired_release_id: None, + import_source: None, + setup_method: None, + setup_metadata: None, + setup_target: None, + setup_fingerprint: None, + setup_fingerprint_version: None, + user_environment_variables: None, + management_config: None, + deployment_config: None, + deployment_token: None, + input_values: Default::default(), + retry_requested: false, + locked_by: None, + locked_at: None, + created_at: Utc::now(), + updated_at: None, + error: None, + } +} + +fn storage() -> Storage { + Storage { + id: "files".to_string(), + public_read: false, + versioning: false, + lifecycle_rules: Vec::new(), + } +} + +fn storage_stack(remote_access: bool) -> Stack { + let builder = Stack::new("stack".to_string()); + if remote_access { + builder + .add_with_remote_access(storage(), ResourceLifecycle::Frozen) + .build() + } else { + builder.add(storage(), ResourceLifecycle::Frozen).build() + } +} + +fn release(id: &str, platform: Platform, stack: Stack) -> ReleaseRecord { + ReleaseRecord { + id: id.to_string(), + workspace_id: "default".to_string(), + project_id: "default".to_string(), + stacks: HashMap::from([(platform, stack)]), + git_commit_sha: None, + git_commit_ref: None, + git_commit_message: None, + created_at: Utc::now(), + } +} + +fn lease(client_config: ClientConfig) -> MaterializedCredentialLease { + MaterializedCredentialLease { + client_config, + expires_at: Utc::now() + chrono::Duration::minutes(15), + } +} + +fn azure_sas_parameters() -> HashMap { + HashMap::from([ + ( + "sp".to_string(), + AZURE_REMOTE_STORAGE_PERMISSIONS.to_string(), + ), + ("st".to_string(), "2030-01-01T00:00:00Z".to_string()), + ("se".to_string(), "2030-01-01T01:00:00Z".to_string()), + ("skoid".to_string(), "object-id".to_string()), + ("sktid".to_string(), "tenant-id".to_string()), + ("skt".to_string(), "2030-01-01T00:00:00Z".to_string()), + ("ske".to_string(), "2030-01-01T01:00:00Z".to_string()), + ("sks".to_string(), "b".to_string()), + ("skv".to_string(), "2023-11-03".to_string()), + ("spr".to_string(), "https".to_string()), + ("sv".to_string(), "2023-11-03".to_string()), + ("sr".to_string(), "c".to_string()), + ("sig".to_string(), "signature".to_string()), + ]) +} + +#[test] +fn remote_storage_validation_accepts_only_running_frozen_storage_with_binding() { + let binding = StorageBinding::s3("files"); + let deployment = deployment(stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(serde_json::to_value(&binding).unwrap()), + )); + + assert!(matches!( + remote_storage_binding(&deployment, "files"), + Ok(RemoteStorageBinding::S3(RemoteS3StorageBinding { .. })) + )); +} + +#[test] +fn external_storage_binding_is_rejected_even_with_synchronized_params() { + let binding = StorageBinding::s3("existing-files"); + let mut deployment = deployment(stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(serde_json::to_value(&binding).unwrap()), + )); + let mut external_bindings = ExternalBindings::new(); + external_bindings.insert("files", ExternalBinding::Storage(binding)); + deployment.stack_settings = Some(StackSettings { + external_bindings: Some(external_bindings), + ..StackSettings::default() + }); + + let error = require_setup_owned_remote_storage(&deployment, "files") + .expect_err("existing buckets are outside the Remote Bindings v0 contract"); + assert_eq!(error.code, "BAD_REQUEST"); + assert!(error.message.contains("cannot use an external binding")); + assert!(error.message.contains("created by setup")); +} + +#[tokio::test] +async fn remote_access_uses_the_current_release_not_the_desired_release() { + let mut deployment = deployment(stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(serde_json::to_value(StorageBinding::s3("files")).unwrap()), + )); + deployment.current_release_id = Some("current".to_string()); + deployment.desired_release_id = Some("desired".to_string()); + let store = StubReleaseStore { + releases: HashMap::from([ + ( + "current".to_string(), + release("current", Platform::Aws, storage_stack(true)), + ), + ( + "desired".to_string(), + release("desired", Platform::Aws, storage_stack(false)), + ), + ]), + }; + + require_current_release_remote_access(&store, &deployment, "files") + .await + .expect("the current release explicitly enables remote access"); +} + +#[tokio::test] +async fn legacy_binding_params_cannot_bypass_a_disabled_current_release() { + let mut deployment = deployment(stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(serde_json::to_value(StorageBinding::s3("files")).unwrap()), + )); + deployment.current_release_id = Some("current".to_string()); + let store = StubReleaseStore { + releases: HashMap::from([( + "current".to_string(), + release("current", Platform::Aws, storage_stack(false)), + )]), + }; + + assert!(remote_storage_binding(&deployment, "files").is_ok()); + let error = require_current_release_remote_access(&store, &deployment, "files") + .await + .expect_err("stack-state binding params cannot grant access by themselves"); + assert_eq!(error.code, "BAD_REQUEST"); + assert!(error.message.contains("current release")); + assert!(error.message.contains("not enabled for remote access")); +} + +#[tokio::test] +async fn remote_access_fails_closed_when_current_release_context_is_missing() { + let stack_state = stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(serde_json::to_value(StorageBinding::s3("files")).unwrap()), + ); + let store = StubReleaseStore::default(); + + let no_current_release = deployment(stack_state.clone()); + let error = require_current_release_remote_access(&store, &no_current_release, "files") + .await + .expect_err("missing current release must deny access"); + assert_eq!(error.code, "BAD_REQUEST"); + + let mut missing_release = deployment(stack_state.clone()); + missing_release.current_release_id = Some("missing".to_string()); + let error = require_current_release_remote_access(&store, &missing_release, "files") + .await + .expect_err("a dangling current release id must deny access"); + assert_eq!(error.code, "INTERNAL_ERROR"); + + let mut missing_platform_stack = deployment(stack_state.clone()); + missing_platform_stack.current_release_id = Some("current".to_string()); + let store = StubReleaseStore { + releases: HashMap::from([( + "current".to_string(), + release("current", Platform::Gcp, storage_stack(true)), + )]), + }; + let error = require_current_release_remote_access(&store, &missing_platform_stack, "files") + .await + .expect_err("missing platform stack must deny access"); + assert_eq!(error.code, "INTERNAL_ERROR"); + + let mut missing_resource = deployment(stack_state); + missing_resource.current_release_id = Some("current".to_string()); + let empty_stack = Stack::new("stack".to_string()).build(); + let store = StubReleaseStore { + releases: HashMap::from([( + "current".to_string(), + release("current", Platform::Aws, empty_stack), + )]), + }; + let error = require_current_release_remote_access(&store, &missing_resource, "files") + .await + .expect_err("resource absent from the current release must deny access"); + assert_eq!(error.code, "BAD_REQUEST"); +} + +#[test] +fn remote_storage_validation_rejects_unsupported_and_mismatched_platforms() { + let s3 = serde_json::to_value(StorageBinding::s3("files")).unwrap(); + let gcs = serde_json::to_value(StorageBinding::gcs("files")).unwrap(); + let local = deployment_on_platform( + stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(s3.clone()), + ), + Platform::Local, + ); + assert!(remote_storage_binding(&local, "files").is_err()); + + let mismatched = deployment(stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(gcs), + )); + assert!(remote_storage_binding(&mismatched, "files").is_err()); +} + +#[test] +fn remote_binding_deployment_status_gate_is_post_handoff_only() { + for status in [ + "running", + "refresh-failed", + "update-pending", + "updating", + "update-failed", + ] { + assert!( + deployment_status_allows_remote_bindings(deployment_status_from_record(status)), + "{status}" + ); + } + for status in [ + "pending", + "preflights-failed", + "initial-setup", + "initial-setup-failed", + "provisioning", + "waiting-for-machines", + "provisioning-failed", + "delete-pending", + "deleting", + "delete-failed", + "teardown-required", + "teardown-failed", + "deleted", + "error", + ] { + assert!( + !deployment_status_allows_remote_bindings(deployment_status_from_record(status)), + "{status}" + ); + } + assert!(!deployment_status_allows_remote_bindings( + deployment_status_from_record("future-or-corrupt-status") + )); +} + +#[test] +fn aws_remote_binding_expiry_uses_provider_expiry_and_rejects_expired_sessions() { + let now = DateTime::parse_from_rfc3339("2030-01-01T00:00:00Z") + .unwrap() + .with_timezone(&Utc); + assert_eq!( + remote_binding_expiry(now + chrono::Duration::minutes(15), now).unwrap(), + now + chrono::Duration::minutes(15) + ); + assert!(remote_binding_expiry(now - chrono::Duration::seconds(1), now).is_err()); +} + +#[test] +fn remote_storage_validation_rejects_missing_non_storage_non_frozen_non_running_and_non_remote() { + let rejected = [ + stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + None, + ), + stack_state_with_resource( + "queue", + Some(ResourceLifecycle::Frozen), + ResourceStatus::Running, + Some(serde_json::json!({"service": "s3"})), + ), + stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Live), + ResourceStatus::Running, + Some(serde_json::json!({"service": "s3"})), + ), + stack_state_with_resource( + Storage::RESOURCE_TYPE.as_ref(), + Some(ResourceLifecycle::Frozen), + ResourceStatus::Provisioning, + Some(serde_json::json!({"service": "s3"})), + ), + ]; + + for stack_state in rejected { + assert!(remote_storage_binding(&deployment(stack_state), "files").is_err()); + } + + assert!( + remote_storage_binding(&deployment(StackState::new(Platform::Aws)), "missing").is_err() + ); +} + +#[test] +fn response_contract_constructs_only_materialized_provider_credentials() { + let aws = ResolveBindingResponse::from_parts( + RemoteStorageBinding::S3(RemoteS3StorageBinding { + bucket_name: "bucket".to_string(), + }), + lease(ClientConfig::Aws(Box::new(AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: AwsCredentials::SessionCredentials { + access_key_id: "AKIA".to_string(), + secret_access_key: "secret".to_string(), + session_token: "session".to_string(), + expires_at: "2030-01-01T00:00:00Z".to_string(), + }, + service_overrides: None, + }))), + "2030-01-01T00:00:00Z".to_string(), + ) + .expect("short-lived AWS session should be accepted"); + let aws = serde_json::to_value(aws).unwrap(); + assert_eq!( + aws.pointer("/clientConfig/credentials/type"), + Some(&serde_json::json!("sessionCredentials")) + ); + assert!(aws.pointer("/clientConfig/serviceOverrides").is_none()); + + let gcp = ResolveBindingResponse::from_parts( + RemoteStorageBinding::Gcs(RemoteGcsStorageBinding { + bucket_name: "bucket".to_string(), + }), + lease(ClientConfig::Gcp(Box::new(GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::AccessToken { + token: "token".to_string(), + }, + service_overrides: None, + project_number: Some("123".to_string()), + }))), + "2030-01-01T00:00:00Z".to_string(), + ) + .expect("short-lived GCP access token should be accepted"); + let gcp = serde_json::to_value(gcp).unwrap(); + assert_eq!( + gcp.pointer("/clientConfig/credentials/type"), + Some(&serde_json::json!("accessToken")) + ); + assert_eq!( + gcp.pointer("/clientConfig/projectNumber"), + Some(&serde_json::json!("123")) + ); + + let azure = ResolveBindingResponse::from_parts( + RemoteStorageBinding::Blob(RemoteBlobStorageBinding { + account_name: "account".to_string(), + container_name: "container".to_string(), + }), + lease(ClientConfig::Azure(Box::new(AzureClientConfig { + subscription_id: "subscription".to_string(), + tenant_id: "tenant".to_string(), + region: Some("eastus".to_string()), + credentials: AzureCredentials::SasToken { + query_parameters: azure_sas_parameters(), + }, + service_overrides: None, + }))), + "2030-01-01T00:00:00Z".to_string(), + ) + .expect("exact Azure storage-scope token should be accepted"); + let azure = serde_json::to_value(azure).unwrap(); + assert_eq!( + azure.pointer("/clientConfig/credentials/type"), + Some(&serde_json::json!("containerSas")) + ); + assert_eq!( + azure.pointer("/clientConfig/credentials/sas/accountName"), + Some(&serde_json::json!("account")) + ); + assert_eq!( + azure.pointer("/clientConfig/credentials/sas/containerName"), + Some(&serde_json::json!("container")) + ); + assert_eq!( + azure.pointer("/clientConfig/credentials/sas/signedResource"), + Some(&serde_json::json!("c")) + ); +} + +#[test] +fn response_contract_rejects_refreshable_static_and_overbroad_credentials() { + let aws_error = RemoteAwsClientConfig::try_from(AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: AwsCredentials::AccessKeys { + access_key_id: "AKIA".to_string(), + secret_access_key: "secret".to_string(), + session_token: None, + }, + service_overrides: None, + }) + .err() + .expect("static AWS access keys must not enter a remote response"); + assert_eq!(aws_error.code, "INTERNAL_ERROR"); + + let gcp_error = RemoteGcpClientConfig::try_from(GcpClientConfig { + project_id: "project".to_string(), + region: "us-central1".to_string(), + credentials: GcpCredentials::ServiceMetadata, + service_overrides: None, + project_number: None, + }) + .err() + .expect("refreshable GCP metadata credentials must not enter a remote response"); + assert_eq!(gcp_error.code, "INTERNAL_ERROR"); + + let binding = RemoteBlobStorageBinding { + account_name: "account".to_string(), + container_name: "container".to_string(), + }; + let azure_error = RemoteAzureClientConfig::try_from(( + AzureClientConfig { + subscription_id: "subscription".to_string(), + tenant_id: "tenant".to_string(), + region: Some("eastus".to_string()), + credentials: AzureCredentials::ScopedAccessTokens { + tokens: HashMap::from([( + "https://management.azure.com/.default".to_string(), + "management".to_string(), + )]), + }, + service_overrides: None, + }, + &binding, + )) + .err() + .expect("non-storage Azure scopes must not enter a remote response"); + assert_eq!(azure_error.code, "INTERNAL_ERROR"); +} + +#[test] +fn resolve_response_debug_redacts_binding_and_credentials() { + let response = ResolveBindingResponse::from_parts( + RemoteStorageBinding::S3(RemoteS3StorageBinding { + bucket_name: "sensitive-bucket".to_string(), + }), + lease(ClientConfig::Aws(Box::new(AwsClientConfig { + account_id: "123456789012".to_string(), + region: "us-east-1".to_string(), + credentials: AwsCredentials::SessionCredentials { + access_key_id: "AKIASECRET".to_string(), + secret_access_key: "TOP_SECRET".to_string(), + session_token: "SESSION_SECRET".to_string(), + expires_at: "2099-01-01T00:00:00Z".to_string(), + }, + service_overrides: None, + }))), + "2099-01-01T00:00:00Z".to_string(), + ) + .expect("short-lived AWS session should construct a response"); + + let debug = format!("{response:?}"); + assert!(debug.contains("")); + assert!(!debug.contains("sensitive-bucket")); + assert!(!debug.contains("AKIASECRET")); + assert!(!debug.contains("TOP_SECRET")); + assert!(!debug.contains("SESSION_SECRET")); +} diff --git a/crates/alien-manager/src/routes/commands.rs b/crates/alien-manager/src/routes/commands.rs index f51878ba0..e2eb1bb17 100644 --- a/crates/alien-manager/src/routes/commands.rs +++ b/crates/alien-manager/src/routes/commands.rs @@ -322,35 +322,41 @@ async fn get_command_payload( Ok(s) => s, Err(e) => return e.into_response(), }; - // Verify the caller has access to this command's deployment via Authz. - // If the command isn't in the local registry (e.g. when command metadata - // is managed externally), fall back to requiring workspace-write - // authority. A *registry lookup error* must NOT trigger that fallback — - // a transient store error for a deployment-owned command would otherwise - // expose its payload to any workspace-admin/member token. - match state - .command_server - .get_command_access_context(&command_id) - .await - { - Ok(Some(command)) => { - if let Err(e) = require_command_read_access(&state, &subject, &command).await { - return e; + // A platform-issued browser token can carry an exact command capability. + // It was authorized against the control-plane command row before minting, + // so it neither needs nor receives broader deployment access. All other + // callers follow the entity-backed policy below. + if !state.authz.can_read_command_payload(&subject, &command_id) { + // Verify the caller has access to this command's deployment via Authz. + // If the command isn't in the local registry (e.g. when command metadata + // is managed externally), fall back to requiring workspace-write + // authority. A *registry lookup error* must NOT trigger that fallback — + // a transient store error for a deployment-owned command would otherwise + // expose its payload to any workspace-admin/member token. + match state + .command_server + .get_command_access_context(&command_id) + .await + { + Ok(Some(command)) => { + if let Err(e) = require_command_read_access(&state, &subject, &command).await { + return e; + } } - } - Ok(None) => { - // No canonical owner in the local registry — only workspace-wide - // writers may inspect such payloads. - if !matches!(subject.scope, crate::auth::Scope::Workspace) - || !matches!( - subject.role, - crate::auth::Role::WorkspaceAdmin | crate::auth::Role::WorkspaceMember - ) - { - return ErrorData::forbidden("Workspace-write access required").into_response(); + Ok(None) => { + // No canonical owner in the local registry — only workspace-wide + // writers may inspect such payloads. + if !matches!(subject.scope, crate::auth::Scope::Workspace) + || !matches!( + subject.role, + crate::auth::Role::WorkspaceAdmin | crate::auth::Role::WorkspaceMember + ) + { + return ErrorData::forbidden("Workspace-write access required").into_response(); + } } + Err(e) => return e.into_response(), } - Err(e) => return e.into_response(), } let params = match state.command_server.get_params(&command_id).await { @@ -492,3 +498,179 @@ async fn release_lease( Err(e) => e.into_response(), } } + +#[cfg(test)] +mod tests { + use std::{collections::HashMap, sync::Arc}; + + use alien_bindings::providers::{kv::local::LocalKv, storage::local::LocalStorage}; + use alien_commands::{ + dispatchers::NullCommandDispatcher, + server::{CommandDispatcher, CommandRegistry, CommandServer}, + types::BodySpec, + InMemoryCommandRegistry, + }; + use async_trait::async_trait; + use axum::{body::Body, http::Request, http::StatusCode}; + use tower::ServiceExt; + + use crate::{ + auth::{Role, Scope, Subject, SubjectKind}, + config::ManagerConfig, + providers::{local_credentials::LocalCredentialResolver, NullTelemetryBackend, OssAuthz}, + routes::{ + registry_proxy::{CredentialCache, PullValidationCache, RegistryRoutingTable}, + AppState, + }, + stores::sqlite::{ + SqliteDatabase, SqliteDeploymentStore, SqliteReleaseStore, SqliteTokenStore, + }, + traits::{ + AuthValidator, CredentialResolver, DeploymentStore, ReleaseStore, TelemetryBackend, + TokenStore, + }, + }; + + use super::router; + + #[derive(Clone)] + struct FixedSubjectValidator(Subject); + + #[async_trait] + impl AuthValidator for FixedSubjectValidator { + async fn validate( + &self, + _headers: &http::HeaderMap, + ) -> Result, alien_error::AlienError> { + Ok(Some(self.0.clone())) + } + } + + async fn command_capability_state(command_id: &str) -> (AppState, tempfile::TempDir) { + let temp = tempfile::tempdir().expect("create command route test directory"); + let db = Arc::new( + SqliteDatabase::new(&temp.path().join("manager.db").to_string_lossy()) + .await + .expect("create test database"), + ); + let deployment_store: Arc = + Arc::new(SqliteDeploymentStore::new(db.clone())); + let release_store: Arc = Arc::new(SqliteReleaseStore::new(db.clone())); + let token_store: Arc = Arc::new(SqliteTokenStore::new(db)); + let kv: Arc = Arc::new( + LocalKv::new(temp.path().join("kv")) + .await + .expect("create command KV"), + ); + let storage: Arc = Arc::new( + LocalStorage::new(temp.path().join("storage").to_string_lossy().to_string()) + .expect("create command storage"), + ); + let dispatcher: Arc = Arc::new(NullCommandDispatcher); + let registry: Arc = Arc::new(InMemoryCommandRegistry::default()); + let command_server = Arc::new(CommandServer::new( + kv.clone(), + storage, + dispatcher, + registry, + "http://localhost:0/v1".to_string(), + b"test-signing-key".to_vec(), + )); + command_server + .store_params(command_id, &BodySpec::inline(br#"{"safe":true}"#)) + .await + .expect("store exact command payload"); + + let subject = Subject { + kind: SubjectKind::ServiceAccount { + id: "platform-command-reader".to_string(), + }, + workspace_id: "default".to_string(), + scope: Scope::Command { + project_id: "default".to_string(), + deployment_id: "dep-1".to_string(), + command_id: command_id.to_string(), + }, + role: Role::CommandPayloadReader, + bearer_token: "command-token".to_string(), + }; + let credential_resolver: Arc = Arc::new( + LocalCredentialResolver::new(temp.path().join("local-credentials")), + ); + let telemetry_backend: Arc = Arc::new(NullTelemetryBackend); + + ( + AppState { + deployment_store, + release_store, + token_store, + auth_validator: Arc::new(FixedSubjectValidator(subject)), + authz: Arc::new(OssAuthz), + telemetry_backend, + credential_resolver, + command_server, + config: Arc::new(ManagerConfig::default()), + bindings_provider: None, + target_bindings_providers: HashMap::new(), + kv, + http_client: reqwest::Client::new(), + credential_cache: Arc::new(CredentialCache::new()), + pull_validation_cache: Arc::new(PullValidationCache::new()), + registry_routing_table: Arc::new( + RegistryRoutingTable::new(vec![]).expect("empty registry routing table"), + ), + import_registry: Arc::new(alien_infra::ImporterRegistry::built_in()), + }, + temp, + ) + } + + fn request(method: &str, uri: &str, body: Body) -> Request { + Request::builder() + .method(method) + .uri(uri) + .header(http::header::AUTHORIZATION, "Bearer command-token") + .header(http::header::CONTENT_TYPE, "application/json") + .body(body) + .expect("build command route request") + } + + #[tokio::test] + async fn exact_command_capability_only_reads_its_payload() { + let command_id = "cmd-allowed"; + let (state, _temp) = command_capability_state(command_id).await; + let app = router().with_state(state); + + let allowed = app + .clone() + .oneshot(request( + "GET", + &format!("/v1/commands/{command_id}/payload"), + Body::empty(), + )) + .await + .expect("exact payload request should complete"); + assert_eq!(allowed.status(), StatusCode::OK); + + let different_command = app + .clone() + .oneshot(request( + "GET", + "/v1/commands/cmd-denied/payload", + Body::empty(), + )) + .await + .expect("cross-command payload request should complete"); + assert_eq!(different_command.status(), StatusCode::FORBIDDEN); + + let store = app + .oneshot(request( + "PUT", + &format!("/v1/commands/{command_id}/payload"), + Body::from(r#"{"params":{"mode":"inline","inlineBase64":"e30="}}"#), + )) + .await + .expect("payload store request should complete"); + assert_eq!(store.status(), StatusCode::FORBIDDEN); + } +} diff --git a/crates/alien-manager/src/routes/credentials.rs b/crates/alien-manager/src/routes/credentials.rs index bae2248eb..a550550a7 100644 --- a/crates/alien-manager/src/routes/credentials.rs +++ b/crates/alien-manager/src/routes/credentials.rs @@ -1,32 +1,27 @@ //! Credential resolution and minting endpoints. -use alien_azure_clients::AzureClientConfigExt; use alien_bindings::traits::ImpersonationRequest; use alien_bindings::ServiceAccountInfo; -use alien_core::{ - AwsCredentials, AzureCredentials, ClientConfig, Container, Daemon, GcpCredentials, Platform, - ServiceAccount, Worker, -}; -use alien_error::{AlienError, Context, ContextError}; -use alien_gcp_clients::GcpClientConfigExt; +use alien_core::{ClientConfig, Container, Daemon, Platform, ServiceAccount, Worker}; +use alien_error::ContextError; use axum::{ extract::{Json, State}, - http::HeaderMap, + http::{header::CACHE_CONTROL, header::PRAGMA, HeaderMap}, response::{IntoResponse, Response}, routing::post, Router, }; use chrono::{SecondsFormat, Utc}; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; use tracing::info; use crate::auth::Subject; +use crate::credential_materialization::materialize_minted_client_config; use crate::error::ErrorData; use crate::ids::sha256_hash; use crate::traits::DeploymentRecord; -use super::{auth, AppState}; +use super::{auth, current_release_resource, load_current_release, AppState}; // --- Mint constants --- @@ -39,47 +34,9 @@ const DEFAULT_DURATION_SECONDS: i32 = 3600; /// Maximum length of an STS `RoleSessionName`. Session names longer than this /// are hash-suffix truncated (see [`mint_session_name`]). const MAX_SESSION_NAME_LEN: usize = 64; -/// GCP access tokens minted by this endpoint use the broad cloud-platform -/// scope; the service account's IAM grants remain the authorization boundary. -const GCP_CLOUD_PLATFORM_SCOPE: &str = "https://www.googleapis.com/auth/cloud-platform"; -/// The exact OAuth scopes used by Alien's Azure bindings. Azure access tokens -/// are audience-specific, so one management token cannot safely stand in for -/// storage, Key Vault, or Service Bus. -const AZURE_MINT_SCOPES: [&str; 4] = [ - "https://management.azure.com/.default", - "https://storage.azure.com/.default", - "https://vault.azure.net/.default", - "https://servicebus.azure.net/.default", -]; // --- Request / Response types --- -#[derive(Debug, Deserialize)] -#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] -#[serde(rename_all = "camelCase")] -pub struct ResolveCredentialsRequest { - pub deployment_id: String, -} - -#[derive(Serialize)] -#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] -#[serde(rename_all = "camelCase")] -pub struct ResolveCredentialsResponse { - pub client_config: ClientConfig, -} - -/// Manual `Debug`: `ClientConfig` carries live credentials. Never let a -/// `{:?}` of this response (log line, panic message, test failure output) -/// print them — even indirectly through `serde_json::Value`, which has no -/// redaction of its own once the typed config is serialized. -impl std::fmt::Debug for ResolveCredentialsResponse { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("ResolveCredentialsResponse") - .field("client_config", &"") - .finish() - } -} - /// Request body for `POST /v1/credentials/mint`. /// /// `deny_unknown_fields` so clients cannot smuggle in resolver internals @@ -125,8 +82,8 @@ pub struct MintCredentialsResponse { pub principal: String, } -/// Manual `Debug`: see [`ResolveCredentialsResponse`]'s impl — same reasoning, -/// same secret-bearing field. +/// Manual `Debug`: the client configuration is credential-bearing and must +/// never be printed. impl std::fmt::Debug for MintCredentialsResponse { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("MintCredentialsResponse") @@ -140,68 +97,18 @@ impl std::fmt::Debug for MintCredentialsResponse { // --- Router --- pub fn router() -> Router { - Router::new() - .route("/v1/resolve-credentials", post(resolve_credentials)) - .route("/v1/credentials/mint", post(mint_credentials)) -} - -// --- Handler --- - -#[cfg_attr(feature = "openapi", utoipa::path( - post, - path = "/v1/resolve-credentials", - tag = "credentials", - request_body = ResolveCredentialsRequest, - responses( - (status = 200, description = "Credentials resolved successfully", body = ResolveCredentialsResponse) - ), - security( - ("bearer" = []) - ) -))] -async fn resolve_credentials( - State(state): State, - headers: HeaderMap, - Json(req): Json, -) -> Response { - let (_subject, deployment) = match authorize_deployment( - &state, - &headers, - &req.deployment_id, - "resolve credentials for", - ) - .await - { - Ok(pair) => pair, - Err(response) => return response, - }; - - // Resolve credentials - match state.credential_resolver.resolve(&deployment).await { - Ok(client_config) => Json(ResolveCredentialsResponse { client_config }).into_response(), - Err(e) => e.into_response(), - } + Router::new().route("/v1/credentials/mint", post(mint_credentials)) } // --- Shared auth/load plumbing --- -/// Load the deployment and authorize the subject on it. Shared by -/// `resolve_credentials` and `mint_credentials`, which both need "valid -/// bearer, deployment exists, subject can act on it" before doing anything -/// endpoint-specific. `action` only affects the forbidden-response wording -/// (e.g. `"mint credentials for"`). -/// -/// `can_act_on_deployment` is `can_read_deployment` under the hood: a -/// Workspace/Project-scoped token passes unconditionally, a -/// DeploymentGroup-scoped token passes for any deployment in its group, and a -/// Deployment-scoped token passes only for its own deployment. So a -/// deployment-group token can mint/resolve for every deployment in its group -/// — an inherited grant, not a bug (see the DG-token matrix test). -async fn authorize_deployment( +/// Load the deployment and require write authority before credential minting. +/// Viewer access is deliberately insufficient because the response contains +/// short-lived cloud credentials. +async fn authorize_credential_mint( state: &AppState, headers: &HeaderMap, deployment_id: &str, - action: &str, ) -> std::result::Result<(Subject, DeploymentRecord), Response> { let subject = auth::require_auth(state, headers) .await @@ -217,9 +124,9 @@ async fn authorize_deployment( Err(e) => return Err(e.into_response()), }; - if !state.authz.can_act_on_deployment(&subject, &deployment) { + if !state.authz.can_update_deployment(&subject, &deployment) { return Err( - ErrorData::forbidden(format!("Cannot {action} this deployment")).into_response(), + ErrorData::forbidden("Cannot mint credentials for this deployment").into_response(), ); } @@ -245,14 +152,9 @@ async fn mint_credentials( headers: HeaderMap, Json(req): Json, ) -> Response { - // Auth + load + authorize (401 / 404 / 403). See `authorize_deployment` - // for the scope semantics — notably that DeploymentGroup/Project/Workspace - // scoped tokens all inherit mint access, not just the deployment's own - // token. + // Auth + load + write authorization (401 / 404 / 403). let (_subject, deployment) = - match authorize_deployment(&state, &headers, &req.deployment_id, "mint credentials for") - .await - { + match authorize_credential_mint(&state, &headers, &req.deployment_id).await { Ok(pair) => pair, Err(response) => return response, }; @@ -385,12 +287,15 @@ async fn mint_credentials( "Minted deployment credentials" ); - Json(MintCredentialsResponse { - client_config, - expires_at, - principal, - }) - .into_response() + ( + [(CACHE_CONTROL, "no-store"), (PRAGMA, "no-cache")], + Json(MintCredentialsResponse { + client_config, + expires_at, + principal, + }), + ) + .into_response() } // --- Mint helpers --- @@ -409,40 +314,16 @@ async fn validate_mint_resource_link( .into_response() })?; - let release = state - .release_store - .get_release(&Subject::system(), release_id) - .await - .map_err(|error| { - error - .context(ErrorData::InternalError { - message: format!( - "Failed to load current release '{release_id}' for credential minting" - ), - }) - .into_response() - })? - .ok_or_else(|| { - ErrorData::internal(format!( - "Current release '{release_id}' for deployment '{}' does not exist", - deployment.id - )) - .into_response() - })?; - - let stack = release.stacks.get(&deployment.platform).ok_or_else(|| { - ErrorData::internal(format!( - "Current release '{release_id}' has no {} stack", - deployment.platform - )) - .into_response() - })?; - let resource = stack.resources.get(resource_id).ok_or_else(|| { - ErrorData::bad_request(format!( - "Resource '{resource_id}' is not part of the deployment's current release" - )) - .into_response() - })?; + let release = load_current_release( + state.release_store.as_ref(), + deployment, + release_id, + "credential minting", + ) + .await + .map_err(IntoResponse::into_response)?; + let (stack, resource) = current_release_resource(&release, deployment, release_id, resource_id) + .map_err(IntoResponse::into_response)?; let resource_type = resource.config.resource_type(); if resource_type != Container::RESOURCE_TYPE @@ -493,69 +374,6 @@ async fn validate_mint_resource_link( Ok(()) } -/// Convert provider impersonation output into a response-safe credential -/// form. Refreshable sources (service-account keys, workload identity files, -/// managed-identity endpoints, manager profiles, etc.) never cross the API. -async fn materialize_minted_client_config( - config: ClientConfig, -) -> std::result::Result> { - match config { - ClientConfig::Aws(config) - if matches!( - &config.credentials, - AwsCredentials::SessionCredentials { .. } - ) => - { - Ok(ClientConfig::Aws(config)) - } - ClientConfig::Aws(_) => Err(ErrorData::internal( - "AWS impersonation did not return short-lived session credentials", - )), - ClientConfig::Gcp(config) => { - let token = config - .get_bearer_token(GCP_CLOUD_PLATFORM_SCOPE) - .await - .context(ErrorData::InternalError { - message: "Failed to materialize short-lived GCP credentials".to_string(), - })?; - let config = *config; - Ok(ClientConfig::Gcp(Box::new(alien_core::GcpClientConfig { - credentials: GcpCredentials::AccessToken { token }, - ..config - }))) - } - ClientConfig::Azure(config) => { - if matches!(&config.credentials, AzureCredentials::AccessToken { .. }) { - return Err(ErrorData::internal( - "Azure impersonation returned a single-scope access token; exact per-scope tokens are required", - )); - } - let mut tokens = HashMap::with_capacity(AZURE_MINT_SCOPES.len()); - for scope in AZURE_MINT_SCOPES { - let token = config.get_bearer_token_with_scope(scope).await.context( - ErrorData::InternalError { - message: format!( - "Failed to materialize short-lived Azure credentials for scope '{scope}'" - ), - }, - )?; - tokens.insert(scope.to_string(), token); - } - let config = *config; - Ok(ClientConfig::Azure(Box::new( - alien_core::AzureClientConfig { - credentials: AzureCredentials::ScopedAccessTokens { tokens }, - ..config - }, - ))) - } - other => Err(ErrorData::internal(format!( - "Credential impersonation returned unsupported {} client config", - other.platform() - ))), - } -} - /// Clamp a requested duration into the allowed window, defaulting when absent. fn clamp_duration(requested: Option) -> i32 { requested @@ -648,8 +466,7 @@ fn principal_from_client_config(config: &ClientConfig) -> String { mod tests { use super::{ clamp_duration, mint_session_name, principal_from_client_config, principal_from_info, - truncate_session_name, MintCredentialsResponse, ResolveCredentialsResponse, - MAX_SESSION_NAME_LEN, + truncate_session_name, MintCredentialsResponse, MAX_SESSION_NAME_LEN, }; use alien_bindings::ServiceAccountInfo; use alien_bindings::{ @@ -657,6 +474,7 @@ mod tests { traits::GcpServiceAccountInfo, }; use alien_core::{AwsClientConfig, AwsCredentials, ClientConfig}; + use alien_error::{AlienError, ContextError, GenericError}; #[test] fn clamp_duration_defaults_when_absent() { @@ -681,6 +499,23 @@ mod tests { assert_eq!(clamp_duration(Some(3600)), 3600); } + #[test] + fn credential_materialization_context_inherits_transient_metadata() { + let mut source = AlienError::new(GenericError { + message: "temporary OAuth outage".to_string(), + }); + source.retryable = true; + source.http_status_code = Some(503); + + let wrapped: AlienError = + source.context(crate::error::ErrorData::CredentialMaterializationFailed { + platform: alien_core::Platform::Gcp, + purpose: "remote Storage".to_string(), + }); + assert!(wrapped.retryable); + assert_eq!(wrapped.http_status_code, Some(503)); + } + #[test] fn session_name_short_is_unchanged() { assert_eq!( @@ -775,7 +610,7 @@ mod tests { })); let mint_response = MintCredentialsResponse { - client_config: secret_config.clone(), + client_config: secret_config, expires_at: "2026-01-01T00:00:00Z".to_string(), principal: "arn:aws:iam::123:role/r".to_string(), }; @@ -786,17 +621,6 @@ mod tests { ); assert!(!mint_debug.contains("TOP_SECRET_KEY_MATERIAL")); assert!(!mint_debug.contains("TOP_SECRET_SESSION_TOKEN")); - - let resolve_response = ResolveCredentialsResponse { - client_config: secret_config, - }; - let resolve_debug = format!("{:?}", resolve_response); - assert!( - resolve_debug.contains(""), - "expected redaction marker: {resolve_debug}" - ); - assert!(!resolve_debug.contains("TOP_SECRET_KEY_MATERIAL")); - assert!(!resolve_debug.contains("TOP_SECRET_SESSION_TOKEN")); } #[test] diff --git a/crates/alien-manager/src/routes/deployments.rs b/crates/alien-manager/src/routes/deployments.rs index c6178abff..1311dce3c 100644 --- a/crates/alien-manager/src/routes/deployments.rs +++ b/crates/alien-manager/src/routes/deployments.rs @@ -379,9 +379,8 @@ async fn create_deployment( }, } } - crate::auth::Scope::Deployment { .. } => { - return ErrorData::forbidden("Deployment tokens cannot create deployments") - .into_response(); + crate::auth::Scope::Deployment { .. } | crate::auth::Scope::Command { .. } => { + return ErrorData::forbidden("This token cannot create deployments").into_response(); } }; @@ -544,6 +543,10 @@ async fn list_deployments( return ErrorData::forbidden("Deployment tokens cannot list deployments") .into_response(); } + crate::auth::Scope::Command { .. } => { + return ErrorData::forbidden("Command payload tokens cannot list deployments") + .into_response(); + } }; if query.name.is_some() && deployment_group_id.is_none() { diff --git a/crates/alien-manager/src/routes/mod.rs b/crates/alien-manager/src/routes/mod.rs index 93187ffce..ae8549c7a 100644 --- a/crates/alien-manager/src/routes/mod.rs +++ b/crates/alien-manager/src/routes/mod.rs @@ -1,5 +1,6 @@ //! REST API route handlers for alien-manager. +pub mod bindings; pub mod build_config; pub mod commands; pub mod credentials; @@ -28,7 +29,8 @@ use std::sync::Arc; use alien_bindings::traits::Kv; use alien_bindings::BindingsProviderApi; use alien_commands::server::{CommandServer, HasCommandServer}; -use alien_core::Platform; +use alien_core::{Platform, ResourceEntry, Stack}; +use alien_error::{AlienError, Context}; use axum::{ routing::{get, post}, Router, @@ -36,7 +38,8 @@ use axum::{ use http::{header, Method}; use tower_http::cors::{AllowOrigin, CorsLayer}; -use crate::auth::Authz; +use crate::auth::{Authz, Subject}; +use crate::error::ErrorData; use crate::traits::*; /// Shared state for all route handlers. @@ -82,6 +85,53 @@ impl HasCommandServer for AppState { } } +/// Load the deployment's authoritative current release. +/// +/// Callers validate the release id with endpoint-specific wording. This +/// helper owns store failures and dangling current-release ids; `operation` +/// keeps the load error specific to the endpoint. +pub(super) async fn load_current_release( + release_store: &dyn ReleaseStore, + deployment: &DeploymentRecord, + release_id: &str, + operation: &str, +) -> Result> { + release_store + .get_release(&Subject::system(), release_id) + .await + .context(ErrorData::InternalError { + message: format!("Failed to load current release '{release_id}' for {operation}"), + })? + .ok_or_else(|| { + ErrorData::internal(format!( + "Current release '{release_id}' for deployment '{}' does not exist", + deployment.id + )) + }) +} + +/// Select a resource from the deployment platform's current-release stack. +pub(super) fn current_release_resource<'a>( + release: &'a ReleaseRecord, + deployment: &DeploymentRecord, + release_id: &str, + resource_id: &str, +) -> Result<(&'a Stack, &'a ResourceEntry), AlienError> { + let stack = release.stacks.get(&deployment.platform).ok_or_else(|| { + ErrorData::internal(format!( + "Current release '{release_id}' has no {} stack", + deployment.platform + )) + })?; + + let resource = stack.resources.get(resource_id).ok_or_else(|| { + ErrorData::bad_request(format!( + "Resource '{resource_id}' is not part of the deployment's current release" + )) + })?; + Ok((stack, resource)) +} + /// Create the complete router with all routes (standalone mode). pub fn create_router(state: AppState) -> Router { let cors = cors_layer(&state.config); @@ -129,6 +179,8 @@ pub fn create_router_inner(state: AppState, options: RouterOptions) -> Router { .merge(sync::router()) // Credentials .merge(credentials::router()) + // Remote resource bindings + .merge(bindings::router()) // Vault secrets .merge(vault::router()) // Token management (list, revoke) diff --git a/crates/alien-manager/src/routes/registry_proxy.rs b/crates/alien-manager/src/routes/registry_proxy.rs index f31e90a7e..74db0ae9f 100644 --- a/crates/alien-manager/src/routes/registry_proxy.rs +++ b/crates/alien-manager/src/routes/registry_proxy.rs @@ -1097,6 +1097,13 @@ async fn validate_pull_access( "Registry proxy pulls require a deployment token", )) } + Scope::Command { .. } => { + return Err(oci_error( + StatusCode::FORBIDDEN, + "DENIED", + "Command payload tokens cannot pull images", + )) + } Scope::Deployment { project_id, deployment_id, diff --git a/crates/alien-manager/src/routes/sync.rs b/crates/alien-manager/src/routes/sync.rs index bf0749d04..5c8d2ce23 100644 --- a/crates/alien-manager/src/routes/sync.rs +++ b/crates/alien-manager/src/routes/sync.rs @@ -24,8 +24,9 @@ use alien_error::AlienError; use crate::error::ErrorData; use crate::ids; use crate::traits::{ - CreateDeploymentParams, CreateTokenParams, DeploymentAcquireMode, DeploymentFilter, - DeploymentRecord, ReconcileData, ReleaseRecord, TokenType, + deployment_status_from_record, CreateDeploymentParams, CreateTokenParams, + DeploymentAcquireMode, DeploymentFilter, DeploymentRecord, ReconcileData, ReleaseRecord, + TokenType, }; use super::{auth, AppState}; @@ -1569,10 +1570,6 @@ fn deployment_state_from_record( }) } -fn deployment_status_from_record(status: &str) -> Option { - serde_json::from_value(serde_json::Value::String(status.to_string())).ok() -} - fn deployment_record_error(error: &Option) -> Option { error .clone() @@ -1804,5 +1801,9 @@ async fn initialize( Err(e) => e.into_response(), } } + crate::auth::Scope::Command { .. } => { + ErrorData::forbidden("Command payload tokens cannot initialize deployments") + .into_response() + } } } diff --git a/crates/alien-manager/src/routes/whoami.rs b/crates/alien-manager/src/routes/whoami.rs index d8da67eb6..176975e57 100644 --- a/crates/alien-manager/src/routes/whoami.rs +++ b/crates/alien-manager/src/routes/whoami.rs @@ -11,6 +11,7 @@ use serde::Serialize; use super::{auth, AppState}; use crate::auth::{Scope, SubjectKind}; +use crate::error::ErrorData; #[derive(Debug, Serialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] @@ -92,6 +93,10 @@ async fn whoami(State(state): State, headers: HeaderMap) -> Response { None, Some(deployment_id.clone()), ), + Scope::Command { .. } => { + return ErrorData::forbidden("Command payload tokens cannot inspect identity") + .into_response() + } }; // Translate the internal kebab-case role serialization to the diff --git a/crates/alien-manager/src/traits/credential_resolver.rs b/crates/alien-manager/src/traits/credential_resolver.rs index 958cf5933..0ee939d2d 100644 --- a/crates/alien-manager/src/traits/credential_resolver.rs +++ b/crates/alien-manager/src/traits/credential_resolver.rs @@ -1,6 +1,6 @@ use async_trait::async_trait; -use alien_core::{ClientConfig, ManagementConfig, Platform}; +use alien_core::{AwsClientConfig, ClientConfig, GcpClientConfig, ManagementConfig, Platform}; use alien_error::AlienError; use super::deployment_store::DeploymentRecord; @@ -15,6 +15,66 @@ pub struct ResolvedCredentials { pub has_provision_capability: bool, } +/// Manager-proven GCP source and exact access-boundary role. +/// +/// Private fields prevent external credential resolvers from asserting this +/// provenance; they must use `Direct`, which the GCP materializer rejects. +pub struct GcpCredentialAccessBoundarySource { + pub(crate) source: Box, + pub(crate) available_role: String, +} + +/// Credential authority retained specifically for remote Storage attenuation. +/// +/// The AWS cross-account variant keeps the pre-handoff source and target role +/// so the bucket policy is applied by STS on the target-role session itself. +pub enum RemoteStorageCredentialSource { + /// A direct provider config. The materializer accepts it only when the + /// provider can prove resource attenuation from this form. + Direct(ClientConfig), + /// AWS source credentials plus the exact target role for a policy-bearing + /// AssumeRole handoff. + AwsAssumeRole { + source: Box, + role_arn: String, + role_session_name: String, + target_account_id: String, + target_region: String, + }, + /// A GCP source whose Credential Access Boundary is capped by the exact + /// custom role generated for `storage/remote-data-write`. + GcpCredentialAccessBoundary(GcpCredentialAccessBoundarySource), +} + +impl std::fmt::Debug for RemoteStorageCredentialSource { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Direct(config) => f + .debug_struct("RemoteStorageCredentialSource::Direct") + .field("platform", &config.platform()) + .field("credentials", &"[REDACTED]") + .finish(), + Self::AwsAssumeRole { + role_arn, + target_account_id, + target_region, + .. + } => f + .debug_struct("RemoteStorageCredentialSource::AwsAssumeRole") + .field("role_arn", role_arn) + .field("target_account_id", target_account_id) + .field("target_region", target_region) + .field("credentials", &"[REDACTED]") + .finish(), + Self::GcpCredentialAccessBoundary(source) => f + .debug_struct("RemoteStorageCredentialSource::GcpCredentialAccessBoundary") + .field("available_role", &source.available_role) + .field("credentials", &"[REDACTED]") + .finish(), + } + } +} + /// Resolves cloud credentials for push-model deployments. /// /// In push mode, alien-manager needs credentials to call cloud APIs in the remote @@ -46,6 +106,19 @@ pub trait CredentialResolver: Send + Sync { }) } + /// Resolve authority for a purpose-specific remote Storage lease. + /// + /// Custom resolvers default to their direct config. Provider materializers + /// still fail closed when that form cannot be attenuated cryptographically. + async fn resolve_remote_storage_source( + &self, + deployment: &DeploymentRecord, + ) -> Result { + Ok(RemoteStorageCredentialSource::Direct( + self.resolve(deployment).await?, + )) + } + /// Resolve the management identity for a target platform. /// /// Returns the ManagementConfig describing which identity should be granted diff --git a/crates/alien-manager/src/traits/deployment_store.rs b/crates/alien-manager/src/traits/deployment_store.rs index ce8204c28..eb71df1fc 100644 --- a/crates/alien-manager/src/traits/deployment_store.rs +++ b/crates/alien-manager/src/traits/deployment_store.rs @@ -6,12 +6,16 @@ use serde::{Deserialize, Serialize}; use alien_core::{ import::ImportSourceKind, sync::OperatorCapabilityReport, DeploymentConfig, DeploymentModel, - DeploymentState, EnvironmentInfo, EnvironmentVariable, ManagementConfig, + DeploymentState, DeploymentStatus, EnvironmentInfo, EnvironmentVariable, ManagementConfig, ObservedInventoryBatch, Platform, ResourceHeartbeat, RuntimeMetadata, StackSettings, StackState, }; use alien_error::AlienError; +pub(crate) fn deployment_status_from_record(status: &str) -> Option { + serde_json::from_value(serde_json::Value::String(status.to_string())).ok() +} + /// A deployment record as stored in the database. #[derive(Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/crates/alien-manager/src/traits/mod.rs b/crates/alien-manager/src/traits/mod.rs index 2d1341e08..e4755184b 100644 --- a/crates/alien-manager/src/traits/mod.rs +++ b/crates/alien-manager/src/traits/mod.rs @@ -15,7 +15,11 @@ pub(crate) fn default_string() -> String { } pub use auth_validator::{AuthValidator, TokenType}; -pub use credential_resolver::{CredentialResolver, ResolvedCredentials}; +pub use credential_resolver::{ + CredentialResolver, GcpCredentialAccessBoundarySource, RemoteStorageCredentialSource, + ResolvedCredentials, +}; +pub(crate) use deployment_store::deployment_status_from_record; pub use deployment_store::{ AcquiredDeployment, CreateDeploymentGroupParams, CreateDeploymentParams, CreateImportedDeploymentParams, DeploymentAcquireMode, DeploymentFilter, DeploymentGroupRecord, diff --git a/crates/alien-manager/tests/credentials_mint.rs b/crates/alien-manager/tests/credentials_mint.rs index 39cdbf1f5..4c02615e2 100644 --- a/crates/alien-manager/tests/credentials_mint.rs +++ b/crates/alien-manager/tests/credentials_mint.rs @@ -16,6 +16,7 @@ //! deliberately rejected. use std::collections::HashMap; +use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Arc, Mutex}; use async_trait::async_trait; @@ -36,10 +37,11 @@ use alien_commands::dispatchers::NullCommandDispatcher; use alien_commands::server::{CommandDispatcher, CommandRegistry, CommandServer}; use alien_commands::InMemoryCommandRegistry; use alien_core::{ - AwsClientConfig, AwsCredentials, AzureClientConfig, AzureCredentials, ClientConfig, Container, - ContainerCode, GcpClientConfig, GcpCredentials, PermissionProfile, Platform, ResourceLifecycle, - ResourceSpec, RuntimeMetadata, ServiceAccount as ServiceAccountResource, Stack, StackSettings, - StackState, CURRENT_DEPLOYMENT_PROTOCOL_VERSION, + AwsClientConfig, AwsCredentials, AwsServiceOverrides, AzureClientConfig, AzureCredentials, + ClientConfig, Container, ContainerCode, GcpClientConfig, GcpCredentials, PermissionProfile, + Platform, Resource, ResourceLifecycle, ResourceSpec, ResourceStatus, RuntimeMetadata, + ServiceAccount as ServiceAccountResource, Stack, StackResourceState, StackSettings, StackState, + Storage, CURRENT_DEPLOYMENT_PROTOCOL_VERSION, }; use alien_error::AlienError; use alien_manager::auth::{Authz, Subject}; @@ -55,7 +57,8 @@ use alien_manager::stores::sqlite::{ use alien_manager::traits::{ AuthValidator, CreateDeploymentGroupParams, CreateImportedDeploymentParams, CreateReleaseParams, CreateTokenParams, CredentialResolver, DeploymentRecord, DeploymentStore, - ReleaseStore, TelemetryBackend, TokenStore, TokenType, + ReleaseStore, RemoteStorageCredentialSource, TelemetryBackend, TokenStore, TokenType, + UpdateImportedDeploymentParams, }; // --------------------------------------------------------------------------- @@ -249,6 +252,21 @@ struct StaticCredentialResolver { config: ClientConfig, } +/// Resolver spy used by remote-binding route tests. It proves the handler does +/// not touch credential resolution before authorization and stack-state checks. +struct CountingCredentialResolver { + config: ClientConfig, + calls: Arc, +} + +#[async_trait] +impl CredentialResolver for CountingCredentialResolver { + async fn resolve(&self, _deployment: &DeploymentRecord) -> Result { + self.calls.fetch_add(1, Ordering::SeqCst); + Ok(self.config.clone()) + } +} + #[async_trait] impl CredentialResolver for StaticCredentialResolver { async fn resolve(&self, _deployment: &DeploymentRecord) -> Result { @@ -504,6 +522,15 @@ fn mint_test_stack(platform: Platform) -> Stack { ServiceAccountResource::new(BINDING_NAME.to_string()).build(), ResourceLifecycle::Live, ) + .add_with_remote_access( + Storage { + id: "files".to_string(), + public_read: false, + versioning: false, + lifecycle_rules: Vec::new(), + }, + ResourceLifecycle::Frozen, + ) .add(container, ResourceLifecycle::Live) .build() } @@ -595,6 +622,15 @@ async fn post_mint( bearer: Option<&str>, body: serde_json::Value, ) -> (StatusCode, serde_json::Value) { + let (status, _, json) = post_mint_with_headers(fixture, bearer, body).await; + (status, json) +} + +async fn post_mint_with_headers( + fixture: &Fixture, + bearer: Option<&str>, + body: serde_json::Value, +) -> (StatusCode, axum::http::HeaderMap, serde_json::Value) { let router = alien_manager::routes::credentials::router().with_state(fixture.state.clone()); let mut req = Request::builder() @@ -611,13 +647,14 @@ async fn post_mint( .unwrap(); let response = router.oneshot(request).await.unwrap(); let status = response.status(); + let headers = response.headers().clone(); let bytes = to_bytes(response.into_body(), 1024 * 1024).await.unwrap(); let json = if bytes.is_empty() { serde_json::Value::Null } else { serde_json::from_slice(&bytes).unwrap_or(serde_json::Value::Null) }; - (status, json) + (status, headers, json) } fn mint_body(deployment_id: &str) -> serde_json::Value { @@ -628,6 +665,9 @@ fn mint_body(deployment_id: &str) -> serde_json::Value { }) } +#[path = "credentials_mint/bindings_resolve.rs"] +mod bindings_resolve; + // --------------------------------------------------------------------------- // Auth matrix // --------------------------------------------------------------------------- @@ -635,7 +675,7 @@ fn mint_body(deployment_id: &str) -> serde_json::Value { #[tokio::test] async fn deployment_token_for_its_deployment_mints_200() { let fixture = impersonation_fixture().await; - let (status, json) = post_mint( + let (status, headers, json) = post_mint_with_headers( &fixture, Some(&fixture.token_a), mint_body(&fixture.deployment_a), @@ -643,6 +683,8 @@ async fn deployment_token_for_its_deployment_mints_200() { .await; assert_eq!(status, StatusCode::OK, "body = {json:#}"); + assert_eq!(headers.get(header::CACHE_CONTROL).unwrap(), "no-store"); + assert_eq!(headers.get(header::PRAGMA).unwrap(), "no-cache"); // Response shape. assert!(json["clientConfig"].is_object(), "clientConfig present"); assert_eq!( @@ -667,6 +709,27 @@ async fn deployment_token_for_other_deployment_is_forbidden() { assert_eq!(status, StatusCode::FORBIDDEN, "body = {json:#}"); } +#[tokio::test] +async fn deployment_viewer_cannot_mint_credentials() { + let fixture = impersonation_fixture().await; + let viewer_token = mint_token( + &fixture.state.token_store, + TokenType::Deployment, + "ax_deploy_", + None, + None, + ) + .await; + + let (status, json) = post_mint( + &fixture, + Some(&viewer_token), + mint_body(&fixture.deployment_a), + ) + .await; + assert_eq!(status, StatusCode::FORBIDDEN, "body = {json:#}"); +} + #[tokio::test] async fn missing_bearer_is_unauthorized() { let fixture = impersonation_fixture().await; @@ -674,6 +737,32 @@ async fn missing_bearer_is_unauthorized() { assert_eq!(status, StatusCode::UNAUTHORIZED); } +#[tokio::test] +async fn legacy_unscoped_credential_resolution_route_is_not_mounted() { + let fixture = impersonation_fixture().await; + let router = alien_manager::routes::credentials::router().with_state(fixture.state.clone()); + let request = Request::builder() + .method("POST") + .uri("/v1/resolve-credentials") + .header(header::CONTENT_TYPE, "application/json") + .header( + header::AUTHORIZATION, + format!("Bearer {}", fixture.admin_token), + ) + .body(Body::from( + serde_json::to_vec(&serde_json::json!({ + "deploymentId": fixture.deployment_a, + })) + .unwrap(), + )) + .unwrap(); + + assert_eq!( + router.oneshot(request).await.unwrap().status(), + StatusCode::NOT_FOUND + ); +} + #[tokio::test] async fn garbage_bearer_is_unauthorized() { let fixture = impersonation_fixture().await; @@ -688,10 +777,8 @@ async fn garbage_bearer_is_unauthorized() { #[tokio::test] async fn deployment_group_token_can_mint_for_deployment_in_its_group() { - // Documents the inherited grant: a deployment-group-scoped (`ax_dg_`) - // token is not pinned to one deployment id like a deployment token is — - // `can_act_on_deployment` (== `can_read_deployment`) passes for any - // deployment whose deployment_group_id matches the token's scope. + // A deployment-group deployer has write authority for deployments in its + // own group, so it may mint for those deployments. let fixture = impersonation_fixture().await; let (status, json) = post_mint( &fixture, diff --git a/crates/alien-manager/tests/credentials_mint/bindings_resolve.rs b/crates/alien-manager/tests/credentials_mint/bindings_resolve.rs new file mode 100644 index 000000000..2634f76ad --- /dev/null +++ b/crates/alien-manager/tests/credentials_mint/bindings_resolve.rs @@ -0,0 +1,334 @@ +use super::*; + +const STS_RESPONSE: &str = r#" + + + arn:aws:sts::210987654321:assumed-role/AlienManaged/remote-bindings-test + AROA:remote-bindings-test + + + ASIAREMOTEACCESS + remote-secret + remote-session-token + 2099-01-01T00:00:00Z + + + request-assume-role +"#; + +struct RemoteAwsCredentialResolver { + source: AwsClientConfig, + calls: Arc, +} + +#[async_trait] +impl CredentialResolver for RemoteAwsCredentialResolver { + async fn resolve(&self, _deployment: &DeploymentRecord) -> Result { + Ok(ClientConfig::Aws(Box::new(self.source.clone()))) + } + + async fn resolve_remote_storage_source( + &self, + _deployment: &DeploymentRecord, + ) -> Result { + self.calls.fetch_add(1, Ordering::SeqCst); + Ok(RemoteStorageCredentialSource::AwsAssumeRole { + source: Box::new(self.source.clone()), + role_arn: "arn:aws:iam::210987654321:role/AlienManaged".to_string(), + role_session_name: "remote-bindings-test".to_string(), + target_account_id: "210987654321".to_string(), + target_region: "us-east-1".to_string(), + }) + } +} + +async fn mock_sts_handler( + axum::extract::State(requests): axum::extract::State>>>>, + body: String, +) -> impl axum::response::IntoResponse { + let form = form_urlencoded::parse(body.as_bytes()) + .into_owned() + .collect::>(); + requests.lock().expect("mock STS requests lock").push(form); + ([(header::CONTENT_TYPE, "text/xml")], STS_RESPONSE) +} + +async fn spawn_mock_sts() -> (String, Arc>>>) { + let requests = Arc::new(Mutex::new(Vec::new())); + let app = axum::Router::new() + .route("/", axum::routing::post(mock_sts_handler)) + .with_state(requests.clone()); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0") + .await + .expect("bind mock STS server"); + let address = listener.local_addr().expect("read mock STS address"); + tokio::spawn(async move { + axum::serve(listener, app) + .await + .expect("serve mock STS endpoint"); + }); + (format!("http://{address}"), requests) +} + +async fn persist_remote_storage_state(fixture: &Fixture) { + let mut stack_state = StackState::new(Platform::Aws); + stack_state.resources.insert( + "files".to_string(), + StackResourceState::builder() + .resource_type(Storage::RESOURCE_TYPE.as_ref().to_string()) + .status(ResourceStatus::Running) + .config(Resource::new(Storage { + id: "files".to_string(), + public_read: false, + versioning: false, + lifecycle_rules: Vec::new(), + })) + .maybe_lifecycle(Some(ResourceLifecycle::Frozen)) + .maybe_remote_binding_params(Some(serde_json::json!({ + "service": "s3", + "bucketName": "remote-files", + }))) + .dependencies(Vec::new()) + .build(), + ); + fixture + .state + .deployment_store + .update_imported_stack_state( + &Subject::system(), + &fixture.deployment_a, + UpdateImportedDeploymentParams { + stack_state, + environment_info: None, + runtime_metadata: RuntimeMetadata::default(), + setup_metadata: None, + current_release_id: None, + setup_target: "test".to_string(), + setup_fingerprint: "test".to_string(), + setup_fingerprint_version: 1, + schedule_reconciliation: false, + input_values: Default::default(), + }, + ) + .await + .expect("remote binding fixture should persist stack state"); +} + +async fn fixture() -> (Fixture, Arc) { + let calls = Arc::new(AtomicUsize::new(0)); + let resolver: Arc = Arc::new(CountingCredentialResolver { + config: managed_aws_config(), + calls: calls.clone(), + }); + let fixture = build( + Platform::Aws, + HashMap::new(), + resolver, + Arc::new(Mutex::new(None)), + ) + .await; + persist_remote_storage_state(&fixture).await; + + (fixture, calls) +} + +async fn post_resolve_binding( + fixture: &Fixture, + bearer: &str, + body: serde_json::Value, +) -> (StatusCode, axum::http::HeaderMap, serde_json::Value) { + let router = alien_manager::routes::bindings::router().with_state(fixture.state.clone()); + let request = Request::builder() + .method("POST") + .uri("/v1/bindings/resolve") + .header(header::CONTENT_TYPE, "application/json") + .header(header::AUTHORIZATION, format!("Bearer {bearer}")) + .body(Body::from(serde_json::to_vec(&body).unwrap())) + .unwrap(); + let response = router.oneshot(request).await.unwrap(); + let status = response.status(); + let headers = response.headers().clone(); + let bytes = to_bytes(response.into_body(), 1024 * 1024).await.unwrap(); + let json = serde_json::from_slice(&bytes).unwrap_or(serde_json::Value::Null); + (status, headers, json) +} + +#[tokio::test] +async fn validates_server_state_before_resolving_credentials() { + let (fixture, calls) = fixture().await; + + let (status, _, _) = post_resolve_binding( + &fixture, + &fixture.token_a, + serde_json::json!({ + "deploymentId": fixture.deployment_a, + "resourceId": "missing", + }), + ) + .await; + assert_eq!(status, StatusCode::BAD_REQUEST); + assert_eq!(calls.load(Ordering::SeqCst), 0); + + let (status, _, _) = post_resolve_binding( + &fixture, + &fixture.token_a, + serde_json::json!({ + "deploymentId": fixture.deployment_a, + "resourceId": "files", + "binding": { "service": "local-storage" }, + }), + ) + .await; + assert!(status.is_client_error()); + assert_eq!(calls.load(Ordering::SeqCst), 0); + + let (status, _, json) = post_resolve_binding( + &fixture, + &fixture.token_a, + serde_json::json!({ + "deploymentId": fixture.deployment_a, + "resourceId": "files", + }), + ) + .await; + // The fixture intentionally returns already-materialized AWS session + // credentials, which cannot be attenuated to the exact bucket. Reaching + // this fail-closed error proves all server-owned resource gates ran before + // the resolver without weakening the production handoff rules. + assert_eq!(status, StatusCode::INTERNAL_SERVER_ERROR, "body = {json:#}"); + assert_eq!(calls.load(Ordering::SeqCst), 1); + assert_eq!(json["code"], "CREDENTIAL_MATERIALIZATION_FAILED"); +} + +#[tokio::test] +async fn resolves_remote_storage_with_scoped_provider_credentials_and_disables_response_caching() { + let (sts_endpoint, sts_requests) = spawn_mock_sts().await; + let calls = Arc::new(AtomicUsize::new(0)); + let resolver: Arc = Arc::new(RemoteAwsCredentialResolver { + source: AwsClientConfig { + account_id: "111122223333".to_string(), + region: "us-east-1".to_string(), + credentials: AwsCredentials::AccessKeys { + access_key_id: "AKIATESTACCESS".to_string(), + secret_access_key: "test-secret".to_string(), + session_token: None, + }, + service_overrides: Some(AwsServiceOverrides { + endpoints: HashMap::from([("sts".to_string(), sts_endpoint)]), + }), + }, + calls: calls.clone(), + }); + let fixture = build( + Platform::Aws, + HashMap::new(), + resolver, + Arc::new(Mutex::new(None)), + ) + .await; + persist_remote_storage_state(&fixture).await; + + let (status, headers, json) = post_resolve_binding( + &fixture, + &fixture.token_a, + serde_json::json!({ + "deploymentId": fixture.deployment_a, + "resourceId": "files", + }), + ) + .await; + + assert_eq!(status, StatusCode::OK, "body = {json:#}"); + assert_eq!(headers.get(header::CACHE_CONTROL).unwrap(), "no-store"); + assert_eq!(headers.get(header::PRAGMA).unwrap(), "no-cache"); + assert_eq!(calls.load(Ordering::SeqCst), 1); + assert_eq!(json["service"], "s3"); + assert_eq!(json["binding"]["bucketName"], "remote-files"); + assert_eq!(json["clientConfig"]["accountId"], "210987654321"); + assert_eq!( + json["clientConfig"]["credentials"]["type"], + "sessionCredentials" + ); + assert_eq!( + json["clientConfig"]["credentials"]["accessKeyId"], + "ASIAREMOTEACCESS" + ); + let lease_expires_at = chrono::DateTime::parse_from_rfc3339( + json["expiresAt"] + .as_str() + .expect("response lease expiry should be a string"), + ) + .expect("response lease expiry should be RFC3339") + .with_timezone(&chrono::Utc); + let remaining = lease_expires_at - chrono::Utc::now(); + assert!(remaining > chrono::Duration::minutes(59)); + assert!(remaining <= chrono::Duration::hours(1)); + + let requests = sts_requests.lock().expect("mock STS requests lock"); + assert_eq!(requests.len(), 1); + let request = &requests[0]; + assert_eq!( + request.get("Action").map(String::as_str), + Some("AssumeRole") + ); + assert_eq!( + request.get("RoleArn").map(String::as_str), + Some("arn:aws:iam::210987654321:role/AlienManaged") + ); + assert_eq!( + request.get("DurationSeconds").map(String::as_str), + Some("3600") + ); + assert_eq!( + serde_json::from_str::( + request.get("Policy").expect("AssumeRole inline policy") + ) + .expect("inline policy should be valid JSON"), + serde_json::json!({ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "RemoteStorageBucket", + "Effect": "Allow", + "Action": ["s3:ListBucket"], + "Resource": ["arn:aws:s3:::remote-files"] + }, + { + "Sid": "RemoteStorageObjects", + "Effect": "Allow", + "Action": [ + "s3:GetObject", + "s3:PutObject", + "s3:DeleteObject" + ], + "Resource": ["arn:aws:s3:::remote-files/*"] + } + ] + }) + ); +} + +#[tokio::test] +async fn denies_unscoped_deployment_token_before_resolving_credentials() { + let (fixture, calls) = fixture().await; + let unscoped_token = mint_token( + &fixture.state.token_store, + TokenType::Deployment, + "ax_deploy_", + None, + None, + ) + .await; + + let (status, _, _) = post_resolve_binding( + &fixture, + &unscoped_token, + serde_json::json!({ + "deploymentId": fixture.deployment_a, + "resourceId": "files", + }), + ) + .await; + assert_eq!(status, StatusCode::FORBIDDEN); + assert_eq!(calls.load(Ordering::SeqCst), 0); +} diff --git a/crates/alien-permissions/permission-sets/service-account/provision.jsonc b/crates/alien-permissions/permission-sets/service-account/provision.jsonc index 53485bfd8..dbbcb4355 100644 --- a/crates/alien-permissions/permission-sets/service-account/provision.jsonc +++ b/crates/alien-permissions/permission-sets/service-account/provision.jsonc @@ -36,6 +36,8 @@ "iam.serviceAccounts.update", "iam.roles.create", "iam.roles.get", + "iam.roles.list", + "iam.roles.undelete", "iam.roles.update", "resourcemanager.projects.getIamPolicy", "resourcemanager.projects.setIamPolicy" diff --git a/crates/alien-permissions/permission-sets/storage/remote-data-write.jsonc b/crates/alien-permissions/permission-sets/storage/remote-data-write.jsonc new file mode 100644 index 000000000..7bd169c9c --- /dev/null +++ b/crates/alien-permissions/permission-sets/storage/remote-data-write.jsonc @@ -0,0 +1,72 @@ +{ + "id": "storage/remote-data-write", + "description": "Allows remote binding object operations on one storage bucket or container", + "platforms": { + "aws": [ + { + "grant": { + "actions": ["s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:DeleteObject"] + }, + "binding": { + "stack": { + "resources": ["arn:aws:s3:::${stackPrefix}-*", "arn:aws:s3:::${stackPrefix}-*/*"] + }, + "resource": { + "resources": ["arn:aws:s3:::${resourceName}", "arn:aws:s3:::${resourceName}/*"] + } + } + } + ], + "gcp": [ + { + "grant": { + "permissions": [ + "storage.objects.get", + "storage.objects.list", + "storage.objects.create", + "storage.objects.delete" + ] + }, + "binding": { + "stack": { + "scope": "projects/${projectName}" + }, + "resource": { + "scope": "projects/${projectName}/buckets/${resourceName}" + } + } + } + ], + "azure": [ + { + "grant": { + "dataActions": [ + "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", + "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write", + "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete" + ] + }, + "binding": { + "stack": { + "scope": "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}" + }, + "resource": { + "scope": "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.Storage/storageAccounts/${storageAccountName}/blobServices/default/containers/${resourceName}" + } + } + }, + { + "grant": { + "actions": [ + "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action" + ] + }, + "binding": { + "resource": { + "scope": "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.Storage/storageAccounts/${storageAccountName}" + } + } + } + ] + } +} diff --git a/crates/alien-permissions/permission-sets/worker/provision.jsonc b/crates/alien-permissions/permission-sets/worker/provision.jsonc index 9cfac7d55..512f77e06 100644 --- a/crates/alien-permissions/permission-sets/worker/provision.jsonc +++ b/crates/alien-permissions/permission-sets/worker/provision.jsonc @@ -5,9 +5,9 @@ "aws": [ { "label": "create-lambda-functions", - "description": "Create Lambda functions owned by this application during initial setup.", + "description": "Create Lambda functions owned by this application during provisioning.", "grant": { - "actions": ["lambda:CreateFunction"] + "actions": ["lambda:CreateFunction", "lambda:TagResource"] }, "binding": { "stack": { @@ -42,7 +42,6 @@ "lambda:CreateFunctionUrlConfig", "lambda:DeleteFunctionUrlConfig", "lambda:UpdateCodeSigningConfig", - "lambda:TagResource", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration", "lambda:PublishVersion", diff --git a/crates/alien-permissions/tests/aws_abac_validation.rs b/crates/alien-permissions/tests/aws_abac_validation.rs index 0728f320e..9a59edb28 100644 --- a/crates/alien-permissions/tests/aws_abac_validation.rs +++ b/crates/alien-permissions/tests/aws_abac_validation.rs @@ -103,6 +103,78 @@ fn aws_tag_tamper_protection_is_not_a_builtin_boundary_layer() { ); } +#[test] +fn worker_lambda_tagging_is_limited_to_request_tag_guarded_creation() { + let permission_set = + get_permission_set("worker/provision").expect("worker/provision permission set must exist"); + let aws_permissions = permission_set + .platforms + .aws + .as_ref() + .expect("worker/provision must have AWS permissions"); + let tagging_permissions = aws_permissions + .iter() + .filter(|permission| { + permission + .grant + .actions + .as_deref() + .unwrap_or_default() + .iter() + .any(|action| action == "lambda:TagResource") + }) + .collect::>(); + + assert_eq!( + tagging_permissions.len(), + 1, + "worker/provision must grant Lambda tagging only for tagged function creation" + ); + + let create_permission = tagging_permissions[0]; + assert_eq!( + create_permission.label.as_deref(), + Some("create-lambda-functions") + ); + let actions = create_permission + .grant + .actions + .as_deref() + .expect("Lambda creation permission must have actions"); + assert_eq!(actions, ["lambda:CreateFunction", "lambda:TagResource"]); + + let stack_binding = create_permission + .binding + .stack + .as_ref() + .expect("Lambda creation must have a stack binding"); + assert!(has_condition_key( + stack_binding, + "aws:RequestTag/${stackTag}" + )); + assert!(has_condition_key( + stack_binding, + "aws:RequestTag/${managedByTag}" + )); + let resource_binding = create_permission + .binding + .resource + .as_ref() + .expect("Lambda creation must have a resource binding"); + assert!(has_condition_key( + resource_binding, + "aws:RequestTag/${stackTag}" + )); + assert!(has_condition_key( + resource_binding, + "aws:RequestTag/${resourceTag}" + )); + assert!(has_condition_key( + resource_binding, + "aws:RequestTag/${managedByTag}" + )); +} + #[test] fn kv_and_queue_management_do_not_mutate_tags() { let cases: [(&str, &[&str]); 2] = [ diff --git a/crates/alien-permissions/tests/aws_cloudformation.rs b/crates/alien-permissions/tests/aws_cloudformation.rs index 3cf9b8db2..4e1f3c947 100644 --- a/crates/alien-permissions/tests/aws_cloudformation.rs +++ b/crates/alien-permissions/tests/aws_cloudformation.rs @@ -339,16 +339,29 @@ fn test_aws_cloudformation_resource_id_interpolates_in_conditions() { }) .expect("worker provision should allow creating the physical Lambda function"); + assert_eq!( + create_function_statement.action, + [json!("lambda:CreateFunction"), json!("lambda:TagResource")] + ); + let string_equals = create_function_statement .condition .as_ref() .and_then(|condition| condition.get("StringEquals")) .expect("Lambda creation should be request-tag conditioned"); + assert_eq!( + string_equals.get("aws:RequestTag/deployment"), + Some(&json!({"Fn::Sub": "${AWS::StackName}"})) + ); assert_eq!( string_equals.get("aws:RequestTag/resource"), Some(&json!("job")) ); + assert_eq!( + string_equals.get("aws:RequestTag/managed-by"), + Some(&json!("runtime")) + ); } #[test] diff --git a/crates/alien-permissions/tests/aws_runtime.rs b/crates/alien-permissions/tests/aws_runtime.rs index 8354c652d..f94065dbc 100644 --- a/crates/alien-permissions/tests/aws_runtime.rs +++ b/crates/alien-permissions/tests/aws_runtime.rs @@ -23,6 +23,36 @@ fn test_aws_storage_data_read_policy_generation(#[case] binding_target: BindingT assert_json_snapshot!(snapshot_name, result); } +#[test] +fn remote_storage_data_write_generates_only_v0_object_operations() { + let generator = AwsRuntimePermissionsGenerator::new(); + let permission_set = + get_permission_set("storage/remote-data-write").expect("permission set exists"); + let context = create_test_context(); + + let policy = generator + .generate_policy(permission_set, BindingTarget::Resource, &context) + .expect("remote Storage policy should generate"); + + assert_eq!(policy.statement.len(), 1); + assert_eq!( + policy.statement[0].action, + [ + "s3:ListBucket", + "s3:GetObject", + "s3:PutObject", + "s3:DeleteObject", + ] + ); + assert_eq!( + policy.statement[0].resource, + [ + "arn:aws:s3:::my-stack-payments-data", + "arn:aws:s3:::my-stack-payments-data/*", + ] + ); +} + #[test] fn test_aws_policy_with_conditions() { let generator = AwsRuntimePermissionsGenerator::new(); @@ -609,11 +639,25 @@ fn test_worker_provision_uses_resource_name_for_arn_and_resource_id_for_tags() { }) .expect("worker provision should allow creating the physical Lambda function"); + assert_eq!( + create_function_statement.action, + ["lambda:CreateFunction", "lambda:TagResource"] + ); + assert!(condition_equals( + create_function_statement, + "aws:RequestTag/deployment", + "my-stack" + )); assert!(condition_equals( create_function_statement, "aws:RequestTag/resource", "job" )); + assert!(condition_equals( + create_function_statement, + "aws:RequestTag/managed-by", + "runtime" + )); } #[test] diff --git a/crates/alien-permissions/tests/azure_runtime.rs b/crates/alien-permissions/tests/azure_runtime.rs index 2ad016537..5079b9021 100644 --- a/crates/alien-permissions/tests/azure_runtime.rs +++ b/crates/alien-permissions/tests/azure_runtime.rs @@ -41,6 +41,63 @@ fn test_azure_predefined_grant_plan( ); } +#[test] +fn remote_storage_data_write_keeps_data_on_container_and_delegation_on_account() { + let generator = AzureRuntimePermissionsGenerator::new(); + let permission_set = + get_permission_set("storage/remote-data-write").expect("permission set exists"); + let context = create_test_context(); + + let grant_plan = generator + .generate_grant_plan(permission_set, BindingTarget::Resource, &context) + .expect("remote Storage grant plan should generate"); + + assert_eq!(grant_plan.custom_roles.len(), 2); + assert_eq!(grant_plan.bindings.len(), 2); + assert!(grant_plan.bindings.iter().all(|binding| matches!( + binding.role_definition, + AzureRoleDefinitionRef::Custom { .. } + ))); + + let account_scope = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-observability-prod/providers/Microsoft.Storage/storageAccounts/stcxpaymentsprod"; + let container_scope = + format!("{account_scope}/blobServices/default/containers/my-stack-payments-data"); + assert!(grant_plan + .bindings + .iter() + .any(|binding| binding.scope == account_scope)); + assert!(grant_plan + .bindings + .iter() + .any(|binding| binding.scope == container_scope)); + + let data_role = grant_plan + .custom_roles + .iter() + .find(|role| role.role_definition.assignable_scopes == [container_scope.as_str()]) + .expect("container data role"); + assert!(data_role.role_definition.actions.is_empty()); + assert_eq!( + data_role.role_definition.data_actions, + vec![ + "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete", + "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", + "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write", + ] + ); + + let delegation_role = grant_plan + .custom_roles + .iter() + .find(|role| role.role_definition.assignable_scopes == [account_scope]) + .expect("storage-account delegation-key role"); + assert_eq!( + delegation_role.role_definition.actions, + ["Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action"] + ); + assert!(delegation_role.role_definition.data_actions.is_empty()); +} + #[test] fn test_azure_custom_grant_plan() { let generator = AzureRuntimePermissionsGenerator::new(); diff --git a/crates/alien-permissions/tests/gcp_runtime.rs b/crates/alien-permissions/tests/gcp_runtime.rs index f275478f4..b164f26b2 100644 --- a/crates/alien-permissions/tests/gcp_runtime.rs +++ b/crates/alien-permissions/tests/gcp_runtime.rs @@ -30,6 +30,38 @@ fn gcp_storage_data_read_uses_stack_scoped_custom_role( assert_eq!(result.bindings[0].target, expected_target); } +#[test] +fn remote_storage_data_write_is_bucket_scoped_without_sign_blob() { + let generator = GcpRuntimePermissionsGenerator::new(); + let permission_set = + get_permission_set("storage/remote-data-write").expect("permission set exists"); + let context = create_test_context(); + + let grant_plan = generator + .generate_grant_plan(permission_set, BindingTarget::Resource, &context) + .expect("remote Storage grant plan should generate"); + let resource_bindings = grant_plan.bindings_for_target(GcpBindingTargetScope::CurrentResource); + + assert!(grant_plan + .bindings_for_target(GcpBindingTargetScope::Project) + .is_empty()); + assert_eq!(resource_bindings.len(), 1); + let remote_role = grant_plan + .custom_roles_for_bindings(&resource_bindings) + .into_iter() + .next() + .expect("remote Storage should use one exact custom role"); + assert_eq!( + remote_role.included_permissions, + vec![ + "storage.objects.create", + "storage.objects.delete", + "storage.objects.get", + "storage.objects.list", + ] + ); +} + #[test] fn gcp_custom_role_metadata_uses_application_name_and_permission_description() { let generator = GcpRuntimePermissionsGenerator::new(); diff --git a/crates/alien-permissions/tests/operation_coverage.rs b/crates/alien-permissions/tests/operation_coverage.rs index afdebb90b..3b3c4b699 100644 --- a/crates/alien-permissions/tests/operation_coverage.rs +++ b/crates/alien-permissions/tests/operation_coverage.rs @@ -164,7 +164,14 @@ fn critical_e2e_provider_operations_are_declared() { "iam:GetRole", "iam:TagRole", ], - gcp_permissions: &["iam.serviceAccounts.create", "iam.roles.create"], + gcp_permissions: &[ + "iam.serviceAccounts.create", + "iam.roles.create", + "iam.roles.get", + "iam.roles.list", + "iam.roles.undelete", + "iam.roles.update", + ], gcp_predefined_roles: &[], azure_actions: &[ "Microsoft.Authorization/roleDefinitions/write", diff --git a/crates/alien-permissions/tests/registry_tests.rs b/crates/alien-permissions/tests/registry_tests.rs index 615f3d7b1..34df3b2fc 100644 --- a/crates/alien-permissions/tests/registry_tests.rs +++ b/crates/alien-permissions/tests/registry_tests.rs @@ -4,6 +4,7 @@ use alien_permissions::{get_permission_set, has_permission_set, list_permission_ fn test_registry_basic_functionality() { // Test that the registry contains expected permission sets assert!(has_permission_set("storage/data-read")); + assert!(has_permission_set("storage/remote-data-write")); assert!(has_permission_set("worker/execute")); assert!(has_permission_set("build/provision")); assert!(has_permission_set("kubernetes-public-endpoint/management")); @@ -60,6 +61,7 @@ fn test_list_permission_set_ids() { // Should contain some expected IDs assert!(ids.contains(&"storage/data-read")); assert!(ids.contains(&"storage/data-write")); + assert!(ids.contains(&"storage/remote-data-write")); assert!(ids.contains(&"storage/management")); assert!(ids.contains(&"storage/provision")); assert!(ids.contains(&"worker/execute")); diff --git a/crates/alien-preflights/src/compile_time/mod.rs b/crates/alien-preflights/src/compile_time/mod.rs index 2e676b52b..fccfbbba4 100644 --- a/crates/alien-preflights/src/compile_time/mod.rs +++ b/crates/alien-preflights/src/compile_time/mod.rs @@ -11,6 +11,7 @@ pub mod machines_resources; pub mod network_required; pub mod permission_profiles_exist; pub mod public_worker_lifecycle; +pub mod remote_storage_permissions; pub mod resource_enabled_valid; pub mod resource_id_pattern; pub mod resource_name_length; @@ -36,6 +37,7 @@ pub use network_required::{ }; pub use permission_profiles_exist::PermissionProfilesExistCheck; pub use public_worker_lifecycle::PublicWorkerLifecycleCheck; +pub use remote_storage_permissions::RemoteStoragePermissionsCheck; pub use resource_enabled_valid::ResourceEnabledValidCheck; pub use resource_id_pattern::ResourceIdPatternCheck; pub use resource_name_length::ResourceNameLengthCheck; diff --git a/crates/alien-preflights/src/compile_time/remote_storage_permissions.rs b/crates/alien-preflights/src/compile_time/remote_storage_permissions.rs new file mode 100644 index 000000000..22b99c8b3 --- /dev/null +++ b/crates/alien-preflights/src/compile_time/remote_storage_permissions.rs @@ -0,0 +1,120 @@ +use crate::error::Result; +use crate::remote_storage::{resource_ids, REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID}; +use crate::{CheckResult, CompileTimeCheck}; +use alien_core::{ManagementPermissions, Platform, Stack}; + +/// Ensures explicit management overrides opt into data access for every remote +/// Storage resource. Unlike provisioning permissions, this grant must be on the +/// concrete resource; wildcard object-data access is intentionally rejected. +pub struct RemoteStoragePermissionsCheck; + +#[async_trait::async_trait] +impl CompileTimeCheck for RemoteStoragePermissionsCheck { + fn description(&self) -> &'static str { + "Remote Storage requires a resource-scoped data permission when management permissions are overridden" + } + + fn should_run(&self, stack: &Stack, platform: Platform) -> bool { + matches!(stack.management(), ManagementPermissions::Override(_)) + && !resource_ids(stack, platform).is_empty() + } + + async fn check(&self, stack: &Stack, platform: Platform) -> Result { + let ManagementPermissions::Override(profile) = stack.management() else { + return Ok(CheckResult::success()); + }; + + let errors = resource_ids(stack, platform) + .into_iter() + .filter(|resource_id| { + !profile.0.get(resource_id).is_some_and(|permissions| { + permissions.iter().any(|permission| { + permission.id() == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID + }) + }) + }) + .map(|resource_id| { + format!( + "Setup required: remote Storage resource '{resource_id}' needs management permission \ + '{REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID}' in its exact resource scope. \ + The stack overrides management permissions, so Alien cannot derive this data-access grant. \ + Add it under scope '{resource_id}' and rerun setup." + ) + }) + .collect::>(); + + if errors.is_empty() { + Ok(CheckResult::success()) + } else { + Ok(CheckResult::failed(errors)) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alien_core::permissions::{PermissionProfile, PermissionSetReference}; + use alien_core::{PermissionsConfig, Resource, ResourceEntry, ResourceLifecycle, Storage}; + use indexmap::IndexMap; + + fn stack_with_override(profile: PermissionProfile, remote_access: bool) -> Stack { + let mut resources = IndexMap::new(); + resources.insert( + "uploads".to_string(), + ResourceEntry { + config: Resource::new(Storage::new("uploads".to_string()).build()), + lifecycle: ResourceLifecycle::Frozen, + dependencies: Vec::new(), + remote_access, + enabled_when: None, + }, + ); + Stack { + id: "test".to_string(), + resources, + permissions: PermissionsConfig { + profiles: IndexMap::new(), + management: ManagementPermissions::Override(profile), + }, + supported_platforms: None, + inputs: Vec::new(), + } + } + + #[tokio::test] + async fn override_requires_exact_resource_scope() { + for profile in [ + PermissionProfile::new(), + PermissionProfile::new().global([REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID]), + ] { + let result = RemoteStoragePermissionsCheck + .check(&stack_with_override(profile, true), Platform::Aws) + .await + .unwrap(); + assert!(!result.success); + } + + let mut profile = PermissionProfile::new(); + profile.0.insert( + "uploads".to_string(), + vec![PermissionSetReference::from_name( + REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID, + )], + ); + let result = RemoteStoragePermissionsCheck + .check(&stack_with_override(profile, true), Platform::Aws) + .await + .unwrap(); + assert!(result.success); + } + + #[test] + fn skips_ineligible_resources_and_platforms() { + let stack = stack_with_override(PermissionProfile::new(), false); + assert!(!RemoteStoragePermissionsCheck.should_run(&stack, Platform::Aws)); + + let stack = stack_with_override(PermissionProfile::new(), true); + assert!(!RemoteStoragePermissionsCheck.should_run(&stack, Platform::Local)); + } +} diff --git a/crates/alien-preflights/src/compile_time/resource_name_length.rs b/crates/alien-preflights/src/compile_time/resource_name_length.rs index 86ce147b2..c4fa4e97e 100644 --- a/crates/alien-preflights/src/compile_time/resource_name_length.rs +++ b/crates/alien-preflights/src/compile_time/resource_name_length.rs @@ -1,10 +1,10 @@ -//! Validates that resource IDs won't exceed cloud provider naming limits when -//! combined with the resource prefix at deployment time. +//! Validates resource IDs used by cloud naming algorithms that preserve the raw +//! resource prefix and ID. //! -//! All cloud resource names are constructed as `{prefix}-{resource_id}` (plus -//! optional suffixes). The resource prefix is always 8 characters. Each cloud -//! provider has different maximum name lengths per resource type — some quite -//! tight (e.g., GCP service accounts: 30, Azure Key Vault: 24). +//! The rules below model `{prefix}-{resource_id}` names (plus optional suffixes) +//! using the manager-generated eight-character prefix. Provider-specific +//! algorithms that normalize and deterministically bound their output, such as +//! Azure Container App worker names, do not need an ID-length rule here. //! //! This check catches **length violations** at compile time, before any API call //! is made. Character set and pattern validation (e.g., no consecutive hyphens, @@ -14,7 +14,7 @@ use crate::error::Result; use crate::{CheckResult, CompileTimeCheck}; use alien_core::{Platform, Stack}; -/// The resource prefix is always 8 characters (1 letter + 7 hex from UUID). +/// The manager-generated resource prefix is 8 characters (1 letter + 7 UUID hex). const PREFIX_LEN: usize = 8; /// A naming rule for a specific (resource_type, platform) combination. @@ -133,15 +133,10 @@ fn naming_rules() -> Vec { cloud_limit: 24, pattern: "{prefix}-{id}", }, - // Container App (worker): max 32, pattern {prefix}-{id} - NamingRule { - resource_type: "worker", - platform: Platform::Azure, - max_id_len: max_id(32, 0), // 23 - cloud_resource: "Azure Container App name", - cloud_limit: 32, - pattern: "{prefix}-{id}", - }, + // Azure Container App worker names are normalized and deterministically + // shortened by the runtime, so their user-facing IDs do not need a + // compile-time length rule. + // Blob Container (storage): max 63, pattern {prefix}-{id} NamingRule { resource_type: "storage", @@ -209,7 +204,10 @@ impl CompileTimeCheck for ResourceNameLengthCheck { mod tests { use super::*; use alien_core::permissions::PermissionProfile; - use alien_core::{Resource, ResourceEntry, ResourceLifecycle, ServiceAccount, Storage, Vault}; + use alien_core::{ + Resource, ResourceEntry, ResourceLifecycle, ServiceAccount, Storage, Vault, Worker, + WorkerCode, + }; use indexmap::IndexMap; fn make_stack(resources: IndexMap) -> Stack { @@ -260,6 +258,22 @@ mod tests { } } + fn worker_entry(id: &str) -> ResourceEntry { + let worker = Worker::new(id.to_string()) + .code(WorkerCode::Image { + image: "example.com/worker:latest".to_string(), + }) + .permissions("execution".to_string()) + .build(); + ResourceEntry { + config: Resource::new(worker), + lifecycle: ResourceLifecycle::Live, + dependencies: Vec::new(), + remote_access: false, + enabled_when: None, + } + } + // ── GCP Service Account ── #[tokio::test] @@ -348,6 +362,20 @@ mod tests { assert!(result.errors[0].contains("Azure Key Vault")); } + #[tokio::test] + async fn azure_worker_id_is_not_rejected_when_runtime_name_is_bounded() { + let id = "worker-with-an-id-longer-than-the-container-app-limit"; + let mut resources = IndexMap::new(); + resources.insert(id.to_string(), worker_entry(id)); + let stack = make_stack(resources); + + let result = ResourceNameLengthCheck + .check(&stack, Platform::Azure) + .await + .unwrap(); + assert!(result.success); + } + // ── Cross-platform: same ID OK on AWS, fails on Azure ── #[tokio::test] diff --git a/crates/alien-preflights/src/lib.rs b/crates/alien-preflights/src/lib.rs index 2325aacff..ff02f6a41 100644 --- a/crates/alien-preflights/src/lib.rs +++ b/crates/alien-preflights/src/lib.rs @@ -4,6 +4,7 @@ pub mod compile_time; pub mod deployment_prerequisites; pub mod error; pub mod mutations; +mod remote_storage; pub mod runner; pub mod runtime; @@ -328,6 +329,7 @@ impl PreflightRegistry { registry.add_compile_time_check(Box::new(compile_time::PublicWorkerLifecycleCheck)); registry.add_compile_time_check(Box::new(compile_time::MachinesResourcesCheck)); registry.add_compile_time_check(Box::new(compile_time::LiveProvisionPermissionsCheck)); + registry.add_compile_time_check(Box::new(compile_time::RemoteStoragePermissionsCheck)); registry.add_compile_time_check(Box::new(compile_time::ValidResourceDependenciesCheck)); registry.add_compile_time_check(Box::new(compile_time::ResourceReferencesExistCheck)); registry.add_compile_time_check(Box::new(compile_time::TriggerEdgeOwnershipCheck)); @@ -368,6 +370,7 @@ impl PreflightRegistry { registry.add_deployment_prerequisite_check(Box::new( deployment_prerequisites::ExternalBindingsTypeCheck, )); + registry.add_deployment_prerequisite_check(Box::new(remote_storage::ExternalBindingCheck)); registry .add_deployment_prerequisite_check(Box::new(compile_time::CapacityGroupProfileCheck)); diff --git a/crates/alien-preflights/src/mutations/infrastructure_dependencies.rs b/crates/alien-preflights/src/mutations/infrastructure_dependencies.rs index 3df1d9d8b..21ba51166 100644 --- a/crates/alien-preflights/src/mutations/infrastructure_dependencies.rs +++ b/crates/alien-preflights/src/mutations/infrastructure_dependencies.rs @@ -1,11 +1,13 @@ //! Infrastructure Dependencies mutation that adds dependencies from user resources to infrastructure resources. -use crate::error::Result; +use crate::error::{ErrorData, Result}; use crate::StackMutation; use alien_core::{ - DeploymentConfig, Platform, RemoteStackManagement, ResourceRef, Stack, StackState, + DeploymentConfig, Platform, RemoteStackManagement, ResourceRef, Stack, StackState, Storage, }; +use alien_error::AlienError; use async_trait::async_trait; +use std::collections::HashSet; use tracing::{debug, info}; /// Mutation that adds dependencies from user resources to infrastructure resources. @@ -58,10 +60,16 @@ impl StackMutation for InfrastructureDependenciesMutation { continue; }; let resource_type = entry.config.resource_type(); + let remote_frozen_storage = entry.is_remote_frozen_storage(); let deps = self.get_dependencies_for_resource(&stack, &resource_id, &resource_type, platform); if let Some(entry) = stack.resources.get_mut(&resource_id) { + if remote_frozen_storage { + entry.dependencies.retain(|dependency| { + dependency.resource_type() != &RemoteStackManagement::RESOURCE_TYPE + }); + } for dependency in deps { if dependency.id() == resource_id { continue; @@ -77,6 +85,10 @@ impl StackMutation for InfrastructureDependenciesMutation { } } + if matches!(platform, Platform::Aws | Platform::Gcp | Platform::Azure) { + validate_management_bootstrap_permissions(&stack)?; + } + Ok(stack) } } @@ -93,6 +105,10 @@ impl InfrastructureDependenciesMutation { let mut dependencies = Vec::new(); let is_infrastructure_resource = self.is_infrastructure_resource(resource_id, Some(resource_type)); + let is_remote_frozen_storage = stack + .resources + .get(resource_id) + .is_some_and(alien_core::ResourceEntry::is_remote_frozen_storage); if platform == Platform::Azure && resource_id != "default-resource-group" @@ -104,7 +120,9 @@ impl InfrastructureDependenciesMutation { )); } - if !is_infrastructure_resource { + if resource_type == &RemoteStackManagement::RESOURCE_TYPE { + dependencies.extend(remote_frozen_storage_refs(stack)); + } else if !is_infrastructure_resource && !is_remote_frozen_storage { if let Some(management_id) = remote_stack_management_id(stack) { dependencies.push(ResourceRef::new( RemoteStackManagement::RESOURCE_TYPE, @@ -371,15 +389,85 @@ fn remote_stack_management_id(stack: &Stack) -> Option<&str> { .map(|(resource_id, _)| resource_id.as_str()) } +fn remote_frozen_storage_refs(stack: &Stack) -> Vec { + stack + .resources + .iter() + .filter(|(_, entry)| entry.is_remote_frozen_storage()) + .map(|(resource_id, _)| ResourceRef::new(Storage::RESOURCE_TYPE, resource_id)) + .collect() +} + +/// Reject exact management grants on resources that must become ready before +/// RemoteStackManagement. Their controllers apply exact grants through the +/// management identity, which would make the prerequisite wait on its own +/// dependent. Remote Storage is exempt because its exact grants are reconciled +/// by RemoteStackManagement after the storage resource exists. +fn validate_management_bootstrap_permissions(stack: &Stack) -> Result<()> { + let Some(management_id) = remote_stack_management_id(stack) else { + return Ok(()); + }; + let Some(management_profile) = stack.management().profile() else { + return Ok(()); + }; + let Some(management) = stack.resources.get(management_id) else { + return Ok(()); + }; + + let mut pending = management + .config + .get_dependencies() + .into_iter() + .chain(management.dependencies.iter().cloned()) + .map(|dependency| dependency.id().to_string()) + .collect::>(); + let mut visited = HashSet::new(); + + while let Some(resource_id) = pending.pop() { + if resource_id == management_id || !visited.insert(resource_id.clone()) { + continue; + } + let Some(entry) = stack.resources.get(&resource_id) else { + continue; + }; + + if !entry.is_remote_frozen_storage() + && management_profile + .0 + .get(&resource_id) + .is_some_and(|references| !references.is_empty()) + { + return Err(AlienError::new(ErrorData::InvalidResourceDependency { + resource_id: management_id.to_string(), + dependency_id: resource_id.clone(), + reason: format!( + "management permissions cannot be scoped to bootstrap prerequisite '{resource_id}'; use stack-wide permissions or remove the exact scope" + ), + })); + } + + pending.extend( + entry + .config + .get_dependencies() + .into_iter() + .chain(entry.dependencies.iter().cloned()) + .map(|dependency| dependency.id().to_string()), + ); + } + + Ok(()) +} + #[cfg(test)] mod tests { use super::*; - use alien_core::permissions::{ManagementPermissions, PermissionsConfig}; + use alien_core::permissions::{ManagementPermissions, PermissionProfile, PermissionsConfig}; use alien_core::{ AzureResourceGroup, AzureStorageAccount, EnvironmentVariablesSnapshot, ExternalBindings, KubernetesCluster, KubernetesClusterOwnership, KubernetesClusterProvider, - KubernetesHeartbeatMode, Resource, ResourceEntry, ResourceLifecycle, StackSettings, - Storage, Worker, WorkerCode, WorkerTrigger, + KubernetesHeartbeatMode, Resource, ResourceEntry, ResourceLifecycle, ServiceAccount, + ServiceActivation, StackSettings, Storage, Worker, WorkerCode, WorkerTrigger, }; use indexmap::IndexMap; @@ -569,4 +657,156 @@ mod tests { .dependencies .contains(&remote_management)); } + + #[tokio::test] + async fn remote_storage_is_ready_before_management_and_normal_resources_wait_for_management() { + let storage = Storage::new("archive".to_string()).build(); + let worker = Worker::new("processor".to_string()) + .code(WorkerCode::Image { + image: "test:latest".to_string(), + }) + .permissions("worker".to_string()) + .build(); + let mut stack = Stack::new("test-stack".to_string()) + .add_with_remote_access(storage, ResourceLifecycle::Frozen) + .add( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add( + ServiceActivation::new("enable-cloud-storage".to_string()) + .service_name("storage.googleapis.com".to_string()) + .build(), + ResourceLifecycle::Frozen, + ) + .add( + ServiceAccount::new("execution-sa".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add(worker, ResourceLifecycle::Live) + .build(); + let management_ref = ResourceRef::new(RemoteStackManagement::RESOURCE_TYPE, "management"); + stack + .resources + .get_mut("archive") + .unwrap() + .dependencies + .push(management_ref.clone()); + let execution_sa_ref = ResourceRef::new(ServiceAccount::RESOURCE_TYPE, "execution-sa"); + stack + .resources + .get_mut("archive") + .unwrap() + .dependencies + .push(execution_sa_ref); + let stack_state = StackState::new(Platform::Gcp); + let config = DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(empty_env_snapshot()) + .allow_frozen_changes(false) + .external_bindings(ExternalBindings::default()) + .build(); + + let result = InfrastructureDependenciesMutation + .mutate(stack, &stack_state, &config) + .await + .unwrap(); + let storage_ref = ResourceRef::new(Storage::RESOURCE_TYPE, "archive"); + let storage_activation_ref = + ResourceRef::new(ServiceActivation::RESOURCE_TYPE, "enable-cloud-storage"); + + assert!(!result + .resources + .get("archive") + .unwrap() + .dependencies + .contains(&management_ref)); + assert!(result + .resources + .get("archive") + .unwrap() + .dependencies + .contains(&storage_activation_ref)); + assert!(result + .resources + .get("archive") + .unwrap() + .dependencies + .contains(&ResourceRef::new( + ServiceAccount::RESOURCE_TYPE, + "execution-sa", + ))); + assert!(!result + .resources + .get("enable-cloud-storage") + .unwrap() + .dependencies + .contains(&management_ref)); + assert!(!result + .resources + .get("execution-sa") + .unwrap() + .dependencies + .contains(&management_ref)); + assert!(result + .resources + .get("management") + .unwrap() + .dependencies + .contains(&storage_ref)); + assert!(result + .resources + .get("processor") + .unwrap() + .dependencies + .contains(&management_ref)); + assert!(crate::compile_time::validate_stack_dependencies(&result).success); + } + + #[tokio::test] + async fn explicit_management_scope_on_remote_storage_prerequisite_is_rejected() { + let storage = Storage::new("archive".to_string()).build(); + let mut stack = Stack::new("test-stack".to_string()) + .add_with_remote_access(storage, ResourceLifecycle::Frozen) + .add( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add( + ServiceAccount::new("execution-sa".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .management(ManagementPermissions::Override( + PermissionProfile::new() + .resource("execution-sa", ["service-account/management"]) + .resource("archive", ["storage/remote-data-write"]), + )) + .build(); + stack + .resources + .get_mut("archive") + .unwrap() + .dependencies + .push(ResourceRef::new( + ServiceAccount::RESOURCE_TYPE, + "execution-sa", + )); + + let error = InfrastructureDependenciesMutation + .mutate( + stack, + &StackState::new(Platform::Gcp), + &DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(empty_env_snapshot()) + .allow_frozen_changes(false) + .external_bindings(ExternalBindings::default()) + .build(), + ) + .await + .expect_err("an exact management grant on a bootstrap prerequisite must fail fast"); + + assert_eq!(error.code, "INVALID_RESOURCE_DEPENDENCY"); + assert!(error.message.contains("execution-sa")); + } } diff --git a/crates/alien-preflights/src/mutations/management_permission_profile.rs b/crates/alien-preflights/src/mutations/management_permission_profile.rs index 03ff37b82..015d69346 100644 --- a/crates/alien-preflights/src/mutations/management_permission_profile.rs +++ b/crates/alien-preflights/src/mutations/management_permission_profile.rs @@ -1,4 +1,5 @@ use crate::error::Result; +use crate::remote_storage::{resource_ids, REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID}; use crate::StackMutation; use alien_core::permissions::{ManagementPermissions, PermissionProfile, PermissionSetReference}; use alien_core::{ @@ -50,6 +51,7 @@ impl StackMutation for ManagementPermissionProfileMutation { config: &DeploymentConfig, ) -> Result { let current_management = stack.management().clone(); + let remote_storage_resource_ids = resource_ids(&stack, stack_state.platform); match current_management { ManagementPermissions::Auto => { @@ -92,6 +94,11 @@ impl StackMutation for ManagementPermissionProfileMutation { } } + add_remote_storage_data_write_permissions( + &mut stack.permissions.management, + &remote_storage_resource_ids, + ); + Ok(stack) } } @@ -107,6 +114,27 @@ fn ensure_observe_permission(profile: &mut PermissionProfile) { } } +/// Grants management explicit data access only for storage resources whose +/// bindings are exposed for remote use. The concrete resource scope is needed +/// because this grant can read and write customer object contents. +fn add_remote_storage_data_write_permissions( + management_permissions: &mut ManagementPermissions, + remote_storage_resource_ids: &[String], +) { + let ManagementPermissions::Extend(profile) = management_permissions else { + return; + }; + + for resource_id in remote_storage_resource_ids { + let permissions = profile.0.entry(resource_id.clone()).or_default(); + let data_write_permission = + PermissionSetReference::from_name(REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID); + if !permissions.contains(&data_write_permission) { + permissions.push(data_write_permission); + } + } +} + /// Generates the default management permission profile from resource ownership /// and feature settings. fn generate_auto_management_profile( @@ -410,6 +438,143 @@ mod tests { } } + fn management_permissions_for_test(mode: &str) -> ManagementPermissions { + match mode { + "auto" => ManagementPermissions::Auto, + "extend" => ManagementPermissions::Extend( + PermissionProfile::new().global(["worker/management"]), + ), + "override" => ManagementPermissions::Override( + PermissionProfile::new().global(["worker/management"]), + ), + _ => panic!("unknown management permission mode: {mode}"), + } + } + + fn deployment_config_for_management_permission_test() -> DeploymentConfig { + DeploymentConfig::builder() + .stack_settings(StackSettings::default()) + .environment_variables(empty_env_snapshot()) + .allow_frozen_changes(false) + .external_bindings(ExternalBindings::default()) + .build() + } + + #[tokio::test] + async fn remote_storage_gets_concrete_data_write_management_permissions() { + for platform in [Platform::Aws, Platform::Gcp, Platform::Azure] { + for mode in ["auto", "extend"] { + let storage = Storage::new("uploads".to_string()).build(); + let stack = Stack::new("test-stack".to_string()) + .add_with_remote_access(storage, ResourceLifecycle::Frozen) + .management(management_permissions_for_test(mode)) + .build(); + let stack_state = StackState::new(platform); + + let result_stack = ManagementPermissionProfileMutation + .mutate( + stack, + &stack_state, + &deployment_config_for_management_permission_test(), + ) + .await + .expect("management permission mutation should succeed"); + + let profile = match result_stack.management() { + ManagementPermissions::Extend(profile) => profile, + _ => panic!("unexpected management permissions for {platform:?} {mode}"), + }; + let storage_permission_names: Vec<&str> = profile + .0 + .get("uploads") + .expect("remote storage should have concrete management permissions") + .iter() + .map(|permission| permission.id()) + .collect(); + assert_eq!( + storage_permission_names, + vec![REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID], + "{platform:?} {mode} should grant data access only to the remote storage resource" + ); + assert!( + !profile.0.get("*").is_some_and(|permissions| permissions + .iter() + .any(|permission| permission.id() + == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID)), + "{platform:?} {mode} must not grant storage data access with wildcard scope" + ); + } + } + } + + #[tokio::test] + async fn remote_storage_does_not_rewrite_management_override() { + let storage = Storage::new("uploads".to_string()).build(); + let stack = Stack::new("test-stack".to_string()) + .add_with_remote_access(storage, ResourceLifecycle::Frozen) + .management(management_permissions_for_test("override")) + .build(); + + let result_stack = ManagementPermissionProfileMutation + .mutate( + stack, + &StackState::new(Platform::Aws), + &deployment_config_for_management_permission_test(), + ) + .await + .expect("management permission mutation should succeed"); + + let ManagementPermissions::Override(profile) = result_stack.management() else { + panic!("override mode must be preserved"); + }; + assert!(!profile.0.get("uploads").is_some_and(|permissions| { + permissions + .iter() + .any(|permission| permission.id() == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID) + })); + } + + #[tokio::test] + async fn endpoint_ineligible_storage_gets_no_remote_data_management_permission() { + for platform in [Platform::Aws, Platform::Gcp, Platform::Azure] { + for (remote_access, lifecycle) in [ + (false, ResourceLifecycle::Frozen), + (true, ResourceLifecycle::Live), + ] { + let storage = Storage::new("uploads".to_string()).build(); + let mut stack_builder = Stack::new("test-stack".to_string()); + stack_builder = if remote_access { + stack_builder.add_with_remote_access(storage, lifecycle) + } else { + stack_builder.add(storage, lifecycle) + }; + let stack = stack_builder + .management(ManagementPermissions::Auto) + .build(); + let stack_state = StackState::new(platform); + + let result_stack = ManagementPermissionProfileMutation + .mutate( + stack, + &stack_state, + &deployment_config_for_management_permission_test(), + ) + .await + .expect("management permission mutation should succeed"); + + let ManagementPermissions::Extend(profile) = result_stack.management() else { + panic!("Auto management permissions should become Extend"); + }; + assert!( + !profile.0.values().flatten().any(|permission| { + permission.id() == REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID + }), + "{platform:?} remote_access={remote_access} {lifecycle:?} storage must not grant remote data access" + ); + } + } + } + fn kubernetes_generated_aws_alb_acm_settings() -> StackSettings { StackSettings { kubernetes: Some(KubernetesSettings { diff --git a/crates/alien-preflights/src/remote_storage.rs b/crates/alien-preflights/src/remote_storage.rs new file mode 100644 index 000000000..c250038bd --- /dev/null +++ b/crates/alien-preflights/src/remote_storage.rs @@ -0,0 +1,123 @@ +use crate::error::Result; +use crate::{CheckResult, DeploymentPrerequisiteCheck}; +use alien_core::{DeploymentConfig, Platform, Stack, StackState}; + +pub(crate) const REMOTE_STORAGE_DATA_WRITE_PERMISSION_SET_ID: &str = "storage/remote-data-write"; + +/// Remote Storage is supported only for setup-owned cloud resources that opt +/// into publication. This is shared by permission derivation and validation so +/// the two preflight phases cannot disagree about which resources are exposed. +pub(crate) fn resource_ids(stack: &Stack, platform: Platform) -> Vec { + if !matches!(platform, Platform::Aws | Platform::Gcp | Platform::Azure) { + return Vec::new(); + } + + stack + .resources() + .filter(|(_, entry)| entry.is_remote_frozen_storage()) + .map(|(resource_id, _)| resource_id.clone()) + .collect() +} + +/// Remote Bindings v0 supports only cloud Storage created by the generated +/// setup. A supplied external binding may refer to an arbitrary pre-existing +/// resource, so it cannot participate in this credential-grant flow. +pub(crate) struct ExternalBindingCheck; + +#[async_trait::async_trait] +impl DeploymentPrerequisiteCheck for ExternalBindingCheck { + fn code(&self) -> Option<&'static str> { + Some("REMOTE_STORAGE_EXTERNAL_BINDING_UNSUPPORTED") + } + + fn description(&self) -> &'static str { + "Remote Storage must be created by setup rather than supplied as an external binding" + } + + fn should_run( + &self, + stack: &Stack, + stack_state: &StackState, + config: &DeploymentConfig, + ) -> bool { + resource_ids(stack, stack_state.platform) + .iter() + .any(|resource_id| config.external_bindings.has(resource_id)) + } + + async fn check( + &self, + stack: &Stack, + stack_state: &StackState, + config: &DeploymentConfig, + ) -> Result { + let errors = resource_ids(stack, stack_state.platform) + .into_iter() + .filter(|resource_id| config.external_bindings.has(resource_id)) + .map(|resource_id| { + format!( + "Remote Storage resource '{resource_id}' cannot use an external binding. Remove the external binding so customer setup creates and owns a dedicated bucket or container." + ) + }) + .collect::>(); + + if errors.is_empty() { + Ok(CheckResult::success()) + } else { + Ok(CheckResult::failed(errors)) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use alien_core::{ + bindings::StorageBinding, EnvironmentVariablesSnapshot, ExternalBinding, ExternalBindings, + ResourceLifecycle, Storage, + }; + + fn deployment_config() -> DeploymentConfig { + DeploymentConfig::builder() + .stack_settings(Default::default()) + .environment_variables(EnvironmentVariablesSnapshot { + variables: Vec::new(), + hash: "empty".to_string(), + created_at: "2026-07-21T00:00:00Z".to_string(), + }) + .allow_frozen_changes(false) + .external_bindings(ExternalBindings::default()) + .build() + } + + #[tokio::test] + async fn external_bindings_are_rejected_on_every_supported_cloud() { + let stack = Stack::new("remote-storage".to_string()) + .add_with_remote_access( + Storage::new("uploads".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .build(); + let mut config = deployment_config(); + config.external_bindings.insert( + "uploads", + ExternalBinding::Storage(StorageBinding::s3("existing-bucket")), + ); + let check = ExternalBindingCheck; + + assert_eq!( + check.code(), + Some("REMOTE_STORAGE_EXTERNAL_BINDING_UNSUPPORTED") + ); + for platform in [Platform::Aws, Platform::Gcp, Platform::Azure] { + let state = StackState::new(platform); + assert!(check.should_run(&stack, &state, &config)); + let result = check.check(&stack, &state, &config).await.unwrap(); + assert_eq!(result.errors.len(), 1); + assert!(result.errors[0].contains("cannot use an external binding")); + assert!(result.errors[0].contains("setup creates and owns")); + } + + assert!(!check.should_run(&stack, &StackState::new(Platform::Local), &config)); + } +} diff --git a/crates/alien-terraform/src/emitters/azure/storage.rs b/crates/alien-terraform/src/emitters/azure/storage.rs index 09d562913..9a9b96d7b 100644 --- a/crates/alien-terraform/src/emitters/azure/storage.rs +++ b/crates/alien-terraform/src/emitters/azure/storage.rs @@ -584,6 +584,66 @@ mod tests { ); } + #[test] + fn setup_owns_exact_remote_storage_management_grants() { + let permissions = PermissionProfile::new().resource("files", ["storage/remote-data-write"]); + let stack = Stack::new("azure-remote-storage-scopes".to_string()) + .management(ManagementPermissions::override_(permissions)) + .add( + AzureResourceGroup::new("default-resource-group".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add( + AzureStorageAccount::new("default-storage-account".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add( + Storage::new("files".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .build(); + + let registry = TfRegistry::built_in(); + let module = generate_terraform_module( + &stack, + TerraformTarget::Azure, + TerraformOptions { + display_name: None, + registry: ®istry, + stack_settings: StackSettings::default(), + registration: None, + helm_install: None, + supported_aws_regions: Vec::new(), + }, + ) + .expect("Azure Terraform module should render"); + let storage_module = module.get("files.tf").expect("storage resource module"); + let assignments = storage_module + .split("resource \"azurerm_role_assignment\"") + .skip(1) + .filter_map(|chunk| chunk.split_once("\n}\n").map(|(block, _)| block)) + .filter(|block| { + block.contains("azurerm_user_assigned_identity.management.principal_id") + }) + .collect::>(); + + assert_eq!( + assignments.len(), + 2, + "expected container and account grants" + ); + assert!(assignments.iter().any(|block| block.contains( + "blobServices/default/containers/${replace(lower(\"${local.resource_prefix}-files\"), \"_\", \"-\")}", + ))); + assert!(assignments.iter().any(|block| block.contains( + "/providers/Microsoft.Storage/storageAccounts/${azurerm_storage_account.default_storage_account.name}", + ) && !block.contains("blobServices/default/containers"))); + } + fn assert_principal_assignment_scopes(rendered: &str, principal_id: &str) { let assignments = rendered .split("resource \"azurerm_role_assignment\"") diff --git a/crates/alien-terraform/src/generator.rs b/crates/alien-terraform/src/generator.rs index 2517c8f60..425873b91 100644 --- a/crates/alien-terraform/src/generator.rs +++ b/crates/alien-terraform/src/generator.rs @@ -631,6 +631,27 @@ fn apply_resource_dependencies(stack: &Stack, per_resource: &mut IndexMap storage bootstrap edge, wait for the physical storage + // resources but not the grants that cannot exist until management does. + let remote_storage_prerequisite_addresses: IndexMap> = per_resource + .iter() + .filter(|(resource_id, _)| { + stack + .resources + .get(*resource_id) + .is_some_and(alien_core::ResourceEntry::is_remote_frozen_storage) + }) + .map(|(resource_id, fragment)| { + let addresses = fragment + .resource_blocks + .iter() + .filter(|resource| !is_remote_storage_permission_support_resource(resource)) + .filter_map(resource_address) + .collect(); + (resource_id.clone(), addresses) + }) + .collect(); for (resource_id, entry) in stack.resources() { let Some(fragment) = per_resource.get_mut(resource_id) else { @@ -642,7 +663,14 @@ fn apply_resource_dependencies(stack: &Stack, per_resource: &mut IndexMap bool { !is_gcp_iam_support_resource(resource) } +fn is_remote_storage_permission_support_resource(resource: &Block) -> bool { + let Some(provider_type) = resource.labels.first().map(|label| label.as_str()) else { + return false; + }; + + provider_type == "aws_iam_role_policy" + || provider_type == "google_storage_bucket_iam_member" + || provider_type == "azurerm_role_assignment" +} + fn is_gcp_iam_support_resource(resource: &Block) -> bool { if resource.identifier.as_str() != "resource" { return false; @@ -2906,7 +2944,7 @@ fn readme_kubernetes_destroy_order() -> &'static str { #[cfg(test)] mod tests { use super::*; - use alien_core::{Queue, RemoteStackManagement, ResourceLifecycle, ResourceRef}; + use alien_core::{Queue, RemoteStackManagement, ResourceLifecycle, ResourceRef, Storage}; fn block_has_depends_on(block: &Block) -> bool { block.body.0.iter().any(|structure| { @@ -3041,4 +3079,91 @@ mod tests { assert!(!block_has_depends_on(custom_role)); assert!(block_has_depends_on(topic)); } + + #[test] + fn remote_management_waits_for_storage_but_not_its_back_referencing_grant() { + let storage_ref = ResourceRef::new(Storage::RESOURCE_TYPE, "files"); + let stack = Stack::new("test".to_string()) + .add_with_remote_access( + Storage::new("files".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add_with_dependencies( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + vec![storage_ref.clone()], + ) + .add_with_dependencies( + Queue::new("queue".to_string()).build(), + ResourceLifecycle::Frozen, + vec![storage_ref], + ) + .build(); + + let mut per_resource = IndexMap::new(); + per_resource.insert( + "files".to_string(), + TfFragment { + resource_blocks: vec![ + resource_block( + "aws_s3_bucket", + "files", + [attr("bucket", Expression::String("files".to_string()))], + ), + resource_block( + "aws_iam_role_policy", + "files_management_storage", + [attr("role", expr::traversal(["aws_iam_role", "management", "id"]))], + ), + ], + ..TfFragment::default() + }, + ); + per_resource.insert( + "management".to_string(), + TfFragment { + resource_blocks: vec![resource_block( + "aws_iam_role", + "management", + [attr("name", Expression::String("management".to_string()))], + )], + ..TfFragment::default() + }, + ); + per_resource.insert( + "queue".to_string(), + TfFragment { + resource_blocks: vec![resource_block( + "aws_sqs_queue", + "queue", + [attr("name", Expression::String("queue".to_string()))], + )], + ..TfFragment::default() + }, + ); + + apply_resource_dependencies(&stack, &mut per_resource); + + let management = render_body(Body::from(vec![Structure::Block( + per_resource + .get("management") + .expect("management fragment") + .resource_blocks[0] + .clone(), + )])) + .expect("management renders"); + assert!(management.contains("aws_s3_bucket.files")); + assert!(!management.contains("aws_iam_role_policy.files_management_storage")); + + let queue = render_body(Body::from(vec![Structure::Block( + per_resource + .get("queue") + .expect("queue fragment") + .resource_blocks[0] + .clone(), + )])) + .expect("queue renders"); + assert!(queue.contains("aws_s3_bucket.files")); + assert!(queue.contains("aws_iam_role_policy.files_management_storage")); + } } diff --git a/crates/alien-terraform/tests/generator/aws_data_layer_tests.rs b/crates/alien-terraform/tests/generator/aws_data_layer_tests.rs index 05bdecd41..628714b67 100644 --- a/crates/alien-terraform/tests/generator/aws_data_layer_tests.rs +++ b/crates/alien-terraform/tests/generator/aws_data_layer_tests.rs @@ -7,8 +7,8 @@ use super::helpers::{assert_terraform_valid, render, snapshot_module}; use alien_core::{ - Kv, LifecycleRule, PermissionProfile, Queue, ResourceLifecycle, ServiceAccount, Stack, - StackSettings, Storage, Vault, + Kv, LifecycleRule, ManagementPermissions, PermissionProfile, Queue, RemoteStackManagement, + ResourceLifecycle, ResourceRef, ServiceAccount, Stack, StackSettings, Storage, Vault, }; use alien_terraform::TerraformTarget; @@ -57,6 +57,27 @@ fn aws_storage_public_read_allows_get_object() { assert_terraform_valid(&module, "aws_storage_public_read"); } +#[test] +fn aws_remote_storage_management_dependencies_are_acyclic() { + let stack = Stack::new("acme-remote-storage".to_string()) + .management(ManagementPermissions::override_( + PermissionProfile::new().resource("files", ["storage/remote-data-write"]), + )) + .add_with_remote_access( + Storage::new("files".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add_with_dependencies( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + vec![ResourceRef::new(Storage::RESOURCE_TYPE, "files")], + ) + .build(); + + let module = render(&stack, TerraformTarget::Aws, StackSettings::default()); + assert_terraform_valid(&module, "aws_remote_storage_management_dependencies"); +} + #[test] fn aws_kv_renders_dynamodb_table_with_pitr() { let stack = Stack::new("acme-kv".to_string()) diff --git a/crates/alien-terraform/tests/generator/azure_data_layer_tests.rs b/crates/alien-terraform/tests/generator/azure_data_layer_tests.rs index 3741d809c..c4531cc3a 100644 --- a/crates/alien-terraform/tests/generator/azure_data_layer_tests.rs +++ b/crates/alien-terraform/tests/generator/azure_data_layer_tests.rs @@ -13,9 +13,9 @@ use super::helpers::{assert_terraform_valid, render, snapshot_module}; use alien_core::{ - AzureResourceGroup, AzureServiceBusNamespace, AzureStorageAccount, Kv, LifecycleRule, - PermissionProfile, Queue, ResourceLifecycle, ResourceRef, ServiceAccount, Stack, StackSettings, - Storage, Vault, + permissions::ManagementPermissions, AzureResourceGroup, AzureServiceBusNamespace, + AzureStorageAccount, Kv, LifecycleRule, PermissionProfile, Queue, RemoteStackManagement, + ResourceLifecycle, ResourceRef, ServiceAccount, Stack, StackSettings, Storage, Vault, }; use alien_terraform::{generate_terraform_module, TerraformOptions, TerraformTarget, TfRegistry}; @@ -102,6 +102,29 @@ fn azure_storage_profile_permissions_emit_container_role_assignment() { assert_terraform_valid(&module, "azure_storage_profile_permissions"); } +#[test] +fn azure_remote_storage_management_dependencies_are_acyclic() { + let stack = Stack::new("acme-remote-storage".to_string()) + .management(ManagementPermissions::override_( + PermissionProfile::new().resource("files", ["storage/remote-data-write"]), + )) + .add(resource_group(), ResourceLifecycle::Frozen) + .add(storage_account(), ResourceLifecycle::Frozen) + .add_with_remote_access( + Storage::new("files".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add_with_dependencies( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + vec![ResourceRef::new(Storage::RESOURCE_TYPE, "files")], + ) + .build(); + + let module = render(&stack, TerraformTarget::Azure, StackSettings::default()); + assert_terraform_valid(&module, "azure_remote_storage_management_dependencies"); +} + #[test] fn azure_storage_profile_permissions_fail_for_unknown_permission_set() { let stack = Stack::new("acme-storage-permissions".to_string()) diff --git a/crates/alien-terraform/tests/generator/gcp_data_layer_tests.rs b/crates/alien-terraform/tests/generator/gcp_data_layer_tests.rs index cc737294b..7278601b7 100644 --- a/crates/alien-terraform/tests/generator/gcp_data_layer_tests.rs +++ b/crates/alien-terraform/tests/generator/gcp_data_layer_tests.rs @@ -8,7 +8,8 @@ use super::helpers::{assert_terraform_valid, render, snapshot_module}; use alien_core::{ Kv, LifecycleRule, ManagementPermissions, PermissionProfile, PermissionsConfig, Queue, - RemoteStackManagement, ResourceLifecycle, ServiceAccount, Stack, StackSettings, Storage, Vault, + RemoteStackManagement, ResourceLifecycle, ResourceRef, ServiceAccount, Stack, StackSettings, + Storage, Vault, }; use alien_terraform::TerraformTarget; @@ -57,6 +58,63 @@ fn gcp_storage_public_read_allows_object_viewer() { assert_terraform_valid(&module, "gcp_storage_public_read"); } +#[test] +fn gcp_storage_remote_access_grants_exact_role_to_management_identity() { + let stack = Stack::new("acme-remote-storage".to_string()) + .management(ManagementPermissions::extend( + PermissionProfile::new().resource("uploads", ["storage/remote-data-write"]), + )) + .add( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add( + Storage::new("uploads".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .build(); + let module = render(&stack, TerraformTarget::Gcp, StackSettings::default()); + snapshot_module("gcp_storage_remote_access", &module); + let rendered = module + .iter() + .map(|(_, contents)| contents) + .collect::(); + + assert!(rendered + .contains("google_project_iam_custom_role\" \"gcp_role_storage_remote_data_write\"")); + assert!(rendered.contains( + "google_storage_bucket_iam_member\" \"gcp_role_storage_remote_data_write_uploads_management_storage_0\"" + )); + assert!(rendered.contains("google_service_account.management.email")); + assert!(rendered.contains("\"storage.objects.get\"")); + assert!(rendered.contains("\"storage.objects.list\"")); + assert!(rendered.contains("\"storage.objects.create\"")); + assert!(rendered.contains("\"storage.objects.delete\"")); + assert!(!rendered.contains("\"iam.serviceAccounts.signBlob\"")); + assert_terraform_valid(&module, "gcp_storage_remote_access"); +} + +#[test] +fn gcp_remote_storage_management_dependencies_are_acyclic() { + let stack = Stack::new("acme-remote-storage".to_string()) + .management(ManagementPermissions::override_( + PermissionProfile::new().resource("files", ["storage/remote-data-write"]), + )) + .add_with_remote_access( + Storage::new("files".to_string()).build(), + ResourceLifecycle::Frozen, + ) + .add_with_dependencies( + RemoteStackManagement::new("management".to_string()).build(), + ResourceLifecycle::Frozen, + vec![ResourceRef::new(Storage::RESOURCE_TYPE, "files")], + ) + .build(); + + let module = render(&stack, TerraformTarget::Gcp, StackSettings::default()); + assert_terraform_valid(&module, "gcp_remote_storage_management_dependencies"); +} + #[test] fn gcp_kv_renders_firestore_database() { let stack = Stack::new("acme-kv".to_string()) diff --git a/crates/alien-terraform/tests/generator/snapshots/generator__generator__helpers__gcp_storage_remote_access.snap b/crates/alien-terraform/tests/generator/snapshots/generator__generator__helpers__gcp_storage_remote_access.snap new file mode 100644 index 000000000..3c4c7be61 --- /dev/null +++ b/crates/alien-terraform/tests/generator/snapshots/generator__generator__helpers__gcp_storage_remote_access.snap @@ -0,0 +1,401 @@ +--- +source: crates/alien-terraform/tests/generator/helpers.rs +expression: buf +--- +=== versions.tf === +terraform { + required_version = ">= 1.5.0" + + required_providers { + google = { + source = "hashicorp/google" + version = ">= 5.0" + } + time = { + source = "hashicorp/time" + version = ">= 0.9" + } + random = { + source = "hashicorp/random" + version = ">= 3.6" + } + } +} + +=== variables.tf === +variable "resource_prefix" { + type = string + description = "Optional stable physical resource prefix. Leave empty to generate one." + default = "" + + validation { + condition = var.resource_prefix == "" || (can(regex("^[a-z][a-z0-9-]{1,38}[a-z0-9]$", var.resource_prefix)) && length(regexall("--", var.resource_prefix)) == 0) + error_message = "resource_prefix must be 3-40 characters: lowercase letters, numbers, and hyphens; start with a letter; end with a letter or number; and not contain consecutive hyphens." + } +} + +variable "name" { + type = string + description = "Human-readable application name shown in setup and cloud IAM review metadata." +} + +variable "token" { + type = string + description = "Install token from the application setup page. This is the same token used by the deploy CLI --token flag." + sensitive = true +} + +variable "management_url" { + type = string + description = "Optional management endpoint used by pull-style runtimes." + default = "" +} + +variable "deployment_model" { + type = string + description = "How runtime updates are delivered after setup." + default = "push" + + validation { + condition = contains(["push", "pull"], var.deployment_model) + error_message = "deployment_model must be one of: push, pull." + } +} + +variable "advanced_settings_json" { + type = string + description = "Advanced JSON-encoded deployment settings. Most installations should use the typed variables in this module instead." + default = "{}" + sensitive = true +} + +variable "advanced_settings_overlay_json" { + type = string + description = "JSON-encoded deployment settings merged over the package defaults. Use this for partial advanced-setting overrides that must preserve generated defaults such as compute selections." + default = "{}" + sensitive = true +} + +variable "updates_mode" { + type = string + description = "How application updates are delivered after setup." + default = "auto" + + validation { + condition = contains(["auto", "approval-required"], var.updates_mode) + error_message = "updates_mode must be one of: auto, approval-required." + } +} + +variable "telemetry_mode" { + type = string + description = "How logs, metrics, and traces are collected." + default = "auto" + + validation { + condition = contains(["off", "auto", "approval-required"], var.telemetry_mode) + error_message = "telemetry_mode must be one of: off, auto, approval-required." + } +} + +variable "heartbeats_mode" { + type = string + description = "Whether runtime health checks are enabled." + default = "on" + + validation { + condition = contains(["off", "on"], var.heartbeats_mode) + error_message = "heartbeats_mode must be one of: off, on." + } +} + +variable "gcp_project" { + type = string + description = "GCP project ID." +} + +variable "gcp_region" { + type = string + description = "GCP region." + default = "us-central1" +} + +variable "managing_service_account_email" { + type = string + description = "Email of the management service account allowed to impersonate setup-created identities. Empty disables the binding." + default = "" +} + +variable "gcp_manage_custom_roles" { + type = bool + description = "Whether this module creates the GCP project custom roles it binds. Set to false when those roles are managed outside this stack." + default = true +} + +variable "gcp_custom_role_prefix" { + type = string + description = "Prefix used for GCP project custom role IDs when gcp_manage_custom_roles is false. Empty uses resource_prefix." + default = "" +} + +=== providers.tf === +provider "google" { + project = var.gcp_project + region = var.gcp_region +} + +=== resource_prefix.tf === +resource "random_id" "resource_prefix" { + byte_length = 4 +} + +=== locals.tf === +locals { + resource_prefix = var.resource_prefix == "" ? format("a%s", random_id.resource_prefix.hex) : var.resource_prefix + deployment_name = var.name + gcp_custom_role_prefix = substr(replace(lower(var.gcp_custom_role_prefix == "" ? local.resource_prefix : var.gcp_custom_role_prefix), "-", "_"), 0, 18) + deployment_platform = "gcp" + deployment_target = "gcp" + deployment_region = var.gcp_region + deployment_management_config = var.deployment_model == "push" ? { platform = "gcp", projectId = var.gcp_project, serviceAccountEmail = var.managing_service_account_email } : null + advanced_settings = merge(jsondecode(var.advanced_settings_json), jsondecode(var.advanced_settings_overlay_json)) + deployment_settings = merge(local.advanced_settings, { deploymentModel = var.deployment_model, updates = var.updates_mode, telemetry = var.telemetry_mode, heartbeats = var.heartbeats_mode }) + deployment_resources = [ + { + id = "management" + type = "remote-stack-management" + importData = { + projectId = var.gcp_project + projectNumber = data.google_project.current.number + serviceAccountEmail = google_service_account.management.email + serviceAccountUniqueId = google_service_account.management.unique_id + managementPermissionsApplied = true + } + }, + { + id = "uploads" + type = "storage" + importData = { + bucketName = google_storage_bucket.uploads.name + bucketSelfLink = google_storage_bucket.uploads.self_link + projectId = var.gcp_project + location = google_storage_bucket.uploads.location + } + } + ] +} + +=== management.tf === +data "google_project" "current" { + project_id = var.gcp_project +} + +resource "google_service_account" "management" { + project = var.gcp_project + account_id = format("%s-%s", trim(substr(replace(lower(format("a-%s-management", local.resource_prefix)), "_", "-"), 0, 21), "-"), substr(sha1(replace(lower(format("%s-management", local.resource_prefix)), "_", "-")), 0, 8)) + display_name = "${local.deployment_name}: Management service account" + description = "Management cloud identity for ${local.deployment_name}. Resource prefix: ${local.resource_prefix}." +} + +resource "google_service_account_iam_member" "management_manager_token_creator" { + for_each = toset(compact([var.managing_service_account_email])) + service_account_id = google_service_account.management.id + role = "roles/iam.serviceAccountTokenCreator" + member = "serviceAccount:${each.value}" +} + +resource "google_service_account_iam_member" "management_manager_user" { + for_each = toset(compact([var.managing_service_account_email])) + service_account_id = google_service_account.management.id + role = "roles/iam.serviceAccountUser" + member = "serviceAccount:${each.value}" +} + +=== uploads.tf === +resource "google_storage_bucket" "uploads" { + name = "${local.resource_prefix}-uploads" + project = var.gcp_project + location = upper(var.gcp_region) + storage_class = "STANDARD" + uniform_bucket_level_access = true + force_destroy = true + public_access_prevention = "enforced" + labels = { + "managed-by" = "setup" + deployment = local.resource_prefix + resource = "uploads" + "resource-type" = "storage" + } +} + +resource "google_project_iam_custom_role" "gcp_role_storage_remote_data_write" { + count = var.gcp_manage_custom_roles ? 1 : 0 + project = var.gcp_project + role_id = format("role_%s_storage_remote_data_write", local.gcp_custom_role_prefix) + title = "${local.deployment_name}: Storage remote data write" + description = "Used by ${local.deployment_name}. Allows remote binding object operations on one storage bucket or container. Resource prefix: ${local.resource_prefix}." + stage = "GA" + permissions = [ + "storage.objects.create", + "storage.objects.delete", + "storage.objects.get", + "storage.objects.list" + ] +} + +resource "google_storage_bucket_iam_member" "gcp_role_storage_remote_data_write_uploads_management_storage_0" { + bucket = google_storage_bucket.uploads.name + role = var.gcp_manage_custom_roles ? google_project_iam_custom_role.gcp_role_storage_remote_data_write[0].name : format("projects/%s/roles/role_%s_storage_remote_data_write", var.gcp_project, local.gcp_custom_role_prefix) + member = "serviceAccount:${google_service_account.management.email}" +} + +=== iam_propagation.tf === +resource "time_sleep" "gcp_iam_propagation" { + create_duration = "120s" + depends_on = [ + google_service_account_iam_member.management_manager_token_creator, + google_service_account_iam_member.management_manager_user + ] +} + +=== registration.tf === +resource "terraform_data" "deployment_registration" { + input = { + platform = local.deployment_platform + token = var.token + name = var.name + resource_prefix = local.resource_prefix + setup_target = "" + setup_import_format_version = 1 + setup_fingerprint = "" + setup_fingerprint_version = 0 + management_url = var.management_url + management_config = local.deployment_management_config + stack_settings = local.deployment_settings + resources = local.deployment_resources + inputValues = {} + } + depends_on = [ + google_service_account.management, + google_service_account_iam_member.management_manager_token_creator, + google_service_account_iam_member.management_manager_user, + google_storage_bucket.uploads, + google_project_iam_custom_role.gcp_role_storage_remote_data_write, + google_storage_bucket_iam_member.gcp_role_storage_remote_data_write_uploads_management_storage_0, + time_sleep.gcp_iam_propagation + ] +} + +=== outputs.tf === +output "deployment_target" { + value = "gcp" + description = "Terraform module target." +} + +output "deployment_resource_prefix" { + value = local.resource_prefix + description = "Physical resource prefix." +} + +output "deployment_platform" { + value = local.deployment_platform + description = "Target platform." +} + +output "deployment_region" { + value = local.deployment_region + description = "Target cloud region or location." +} + +output "deployment_setup_target" { + value = "" + description = "Setup target." +} + +output "deployment_setup_import_format_version" { + value = 1 + description = "Setup registration payload format version." +} + +output "deployment_setup_fingerprint" { + value = "" + description = "Setup compatibility fingerprint." +} + +output "deployment_setup_fingerprint_version" { + value = 0 + description = "Setup fingerprint algorithm version." +} + +output "deployment_management_config" { + value = jsonencode(local.deployment_management_config) + description = "Deployment registration management configuration JSON." +} + +output "deployment_stack_settings" { + value = jsonencode(local.deployment_settings) + description = "Deployment registration settings JSON." + sensitive = true +} + +output "deployment_resources" { + value = jsonencode(local.deployment_resources) + description = "Deployment registration resource metadata JSON." +} + +=== README.md === +# Deployment setup - acme-remote-storage + +Target: `gcp`. + +This module creates setup-owned infrastructure, grants the management access needed after setup, and prepares deployment registration metadata. Review the generated `.tf` files before applying; each resource file maps to one setup resource. + +## Inputs + +Required: + +- `token`: install token from the setup page. +- `name`: deployment name to include in the registration metadata. + +Common optional settings: + +- `resource_prefix`: stable physical-name prefix. Leave empty to generate one. +- `management_url`: optional management endpoint used by pull-style runtimes. +- `deployment_model`: `push` or `pull`. +- `updates_mode`: `auto` or `approval-required`. +- `telemetry_mode`: `off`, `auto`, or `approval-required`. +- `heartbeats_mode`: `off` or `on`. +- `advanced_settings_json`: complete advanced deployment settings JSON. Most installs should keep the generated default. +- `advanced_settings_overlay_json`: partial advanced settings merged over package defaults, preserving generated values such as compute selections. + +GCP settings: + +- `gcp_project`: target GCP project ID. +- `gcp_region`: target GCP region. +- `managing_service_account_email`: management service account allowed to impersonate setup-created identities. +- `gcp_manage_custom_roles`: whether this module creates project custom roles. +- `gcp_custom_role_prefix`: custom role ID prefix when roles are managed outside this module. + +## Run + +Use your organization's normal backend and approval workflow. A typical local review looks like: + +```bash +export TF_VAR_name="acme-remote-storage" +export TF_VAR_token="..." +terraform init +terraform validate +terraform plan -out=tfplan +terraform apply tfplan +``` + +## Registration + +This module exposes `deployment_management_config`, `deployment_stack_settings`, and `deployment_resources` outputs for registration flows managed outside Terraform. + +## Outputs + +- `deployment_management_config`: management endpoint and credential-boundary metadata. +- `deployment_stack_settings`: deployment settings JSON assembled from typed variables, package defaults, and advanced-setting overlays. +- `deployment_resources`: setup-owned resource metadata handed to the deployment runtime. +- `deployment_id` and `deployment_token`: emitted only when Terraform performs registration. diff --git a/crates/alien-test/Cargo.toml b/crates/alien-test/Cargo.toml index bf9bcdf08..f6c545a51 100644 --- a/crates/alien-test/Cargo.toml +++ b/crates/alien-test/Cargo.toml @@ -80,7 +80,11 @@ url = { workspace = true } async-trait = { workspace = true } [dev-dependencies] +alien-bindings = { workspace = true, default-features = false, features = ["aws", "azure", "gcp", "platform-sdk"] } +axum = { workspace = true, features = ["http1", "json", "tokio"] } chrono = { workspace = true } +futures = { workspace = true } +object_store = { workspace = true } test-context = { workspace = true } temp-env = { workspace = true } diff --git a/crates/alien-test/src/distribution.rs b/crates/alien-test/src/distribution.rs index 4ef534daa..9e7c87476 100644 --- a/crates/alien-test/src/distribution.rs +++ b/crates/alien-test/src/distribution.rs @@ -3773,6 +3773,19 @@ mod tests { .any(|(_, entry)| entry.config.resource_type().as_ref() == resource_type) } + fn count_hcl_string_assignments(rendered: &str, key: &str, value: &str) -> usize { + let expected_value = format!("\"{value}\""); + rendered + .lines() + .filter(|line| { + line.split_once('=') + .is_some_and(|(actual_key, actual_value)| { + actual_key.trim() == key && actual_value.trim() == expected_value + }) + }) + .count() + } + fn imported_resource( resource_type: &'static str, data: &T, @@ -4126,9 +4139,10 @@ mod tests { rendered.contains("\"eks.amazonaws.com/role-arn\" = aws_iam_role.management.arn"), "Helm values must annotate the manager service account with its IRSA role" ); - assert!( - rendered.contains("id = \"management\""), - "rendered Terraform should include the management identity resource" + assert_eq!( + count_hcl_string_assignments(&rendered, "id", "management"), + 1, + "rendered Terraform should register exactly one management identity resource" ); assert!( rendered.contains("eks:DescribeCluster"), @@ -4291,7 +4305,6 @@ mod tests { .iter() .map(|(_, contents)| contents) .collect::(); - assert!(rendered.contains( "resource \"google_project_iam_custom_role\" \"gcp_role_manage_cloud_run_services\"" )); @@ -4345,17 +4358,14 @@ mod tests { iam_member_declarations.len(), "GCP IAM member declarations should be unique: {iam_member_declarations:?}" ); - let viewer_bindings = rendered - .matches("role = \"roles/secretmanager.viewer\"") - .count(); + let viewer_bindings = + count_hcl_string_assignments(&rendered, "role", "roles/secretmanager.viewer"); assert_eq!( viewer_bindings, 4, "GCP vault heartbeat/management bindings should be emitted once per target scope" ); assert_eq!( - rendered - .matches("title = \"ResourceVaultSecretsHeartbeat\"") - .count(), + count_hcl_string_assignments(&rendered, "title", "ResourceVaultSecretsHeartbeat",), 2, "resource-scoped vault heartbeat conditions should be emitted once per generated vault" ); diff --git a/crates/alien-test/src/e2e.rs b/crates/alien-test/src/e2e.rs index af7ae7de5..be838a4ec 100644 --- a/crates/alien-test/src/e2e.rs +++ b/crates/alien-test/src/e2e.rs @@ -3,7 +3,9 @@ //! Provides the high-level `setup()` entry point that each E2E test calls, //! plus the support matrix, deployment helpers, and stack evaluation logic. +use std::future::Future; use std::path::PathBuf; +use std::pin::Pin; use std::sync::Arc; use std::time::Duration; @@ -1623,7 +1625,18 @@ mod tests { /// 6. The caller is responsible for running checks and cleanup /// /// Returns an `TestContext` with the running deployment ready for checks. -pub async fn setup( +pub fn setup( + platform: Platform, + model: DeploymentModel, + app: TestApp, +) -> Pin> + Send>> { + // E2E setup composes every platform and deployment path into one large + // future. Allocate it on the heap so nextest's test-thread stack does not + // depend on the largest generated SDK or cloud-controller future. + Box::pin(setup_inner(platform, model, app)) +} + +async fn setup_inner( platform: Platform, model: DeploymentModel, app: TestApp, diff --git a/crates/alien-test/tests/common/mod.rs b/crates/alien-test/tests/common/mod.rs index d42d9fdd6..902c17344 100644 --- a/crates/alien-test/tests/common/mod.rs +++ b/crates/alien-test/tests/common/mod.rs @@ -3,6 +3,7 @@ pub mod commands; pub mod container; pub mod events; pub mod lifecycle; +pub mod remote_bindings; pub mod routing; pub mod runner; pub mod runtime_less; diff --git a/crates/alien-test/tests/common/remote_bindings.rs b/crates/alien-test/tests/common/remote_bindings.rs new file mode 100644 index 000000000..060a5115c --- /dev/null +++ b/crates/alien-test/tests/common/remote_bindings.rs @@ -0,0 +1,283 @@ +//! Live-cloud verification of the public remote Storage API. +//! +//! The local discovery fixture stands in only for the Platform API. It points +//! the public client at the in-process manager that owns the real deployment; +//! manager authorization, credential attenuation, and object operations all +//! run through their production paths. + +use std::future::Future; +use std::net::SocketAddr; +use std::pin::Pin; + +use alien_bindings::RemoteBindings; +use alien_core::Platform; +use alien_test::TestDeployment; +use anyhow::{bail, Context}; +use axum::extract::{Path as AxumPath, State}; +use axum::http::{HeaderMap, HeaderValue, StatusCode}; +use axum::response::{IntoResponse, Response}; +use axum::routing::{get, post}; +use axum::{Json, Router}; +use futures::TryStreamExt; +use object_store::path::Path; +use object_store::{Error as ObjectStoreError, PutPayload}; +use serde_json::json; +use tracing::info; + +use super::bindings::STORAGE_BINDING; + +const MANAGER_ID: &str = "mgr_bbbbbbbbbbbbbbbbbbbbbbbbbbbb"; +const PROJECT_ID: &str = "prj_cccccccccccccccccccccccccccc"; +const DEPLOYMENT_GROUP_ID: &str = "dg_dddddddddddddddddddddddddddd"; +const WORKSPACE_ID: &str = "ws_eeeeeeeeeeeeeeeeeeeeeeee"; +const PAYLOAD: &[u8] = b"alien remote storage live-cloud e2e"; + +#[derive(Clone)] +struct DiscoveryState { + deployment_id: String, + manager_url: String, + platform: Platform, + authorization: HeaderValue, + manager_access_token: String, +} + +struct DiscoveryServer { + url: String, + task: tokio::task::JoinHandle<()>, +} + +impl Drop for DiscoveryServer { + fn drop(&mut self) { + self.task.abort(); + } +} + +impl DiscoveryServer { + async fn start(deployment: &TestDeployment, platform: Platform) -> anyhow::Result { + let mut authorization = HeaderValue::from_str(&format!("Bearer {}", deployment.token)) + .context("build discovery authorization header")?; + authorization.set_sensitive(true); + let state = DiscoveryState { + deployment_id: deployment.id.clone(), + manager_url: deployment.manager().url.clone(), + platform, + authorization, + manager_access_token: deployment.token.clone(), + }; + let app = Router::new() + .route("/v1/deployments/{id}", get(deployment_handler)) + .route( + "/v1/managers/{id}/binding-token", + post(manager_binding_token_handler), + ) + .with_state(state); + let listener = tokio::net::TcpListener::bind(SocketAddr::from(([127, 0, 0, 1], 0))) + .await + .context("bind Platform discovery fixture")?; + let address = listener + .local_addr() + .context("read Platform discovery fixture address")?; + let task = tokio::spawn(async move { + if let Err(error) = axum::serve(listener, app).await { + tracing::error!(%error, "Platform discovery fixture failed"); + } + }); + + Ok(Self { + url: format!("http://{address}"), + task, + }) + } +} + +fn is_authorized(state: &DiscoveryState, headers: &HeaderMap) -> bool { + headers.get(reqwest::header::AUTHORIZATION) == Some(&state.authorization) +} + +async fn deployment_handler( + State(state): State, + AxumPath(id): AxumPath, + headers: HeaderMap, +) -> Response { + if !is_authorized(&state, &headers) { + return StatusCode::UNAUTHORIZED.into_response(); + } + if id != state.deployment_id { + return StatusCode::NOT_FOUND.into_response(); + } + + Json(json!({ + "id": state.deployment_id, + "name": "remote-storage-live-cloud-e2e", + "status": "running", + "projectId": PROJECT_ID, + "platform": state.platform.as_str(), + "deploymentProtocolVersion": 1, + "deploymentGroupId": DEPLOYMENT_GROUP_ID, + "stackSettings": {}, + "retryRequested": false, + "createdAt": "2026-01-01T00:00:00Z", + "updatedAt": "2026-01-01T00:00:00Z", + "managerId": MANAGER_ID, + "workspaceId": WORKSPACE_ID, + })) + .into_response() +} + +async fn manager_binding_token_handler( + State(state): State, + AxumPath(id): AxumPath, + headers: HeaderMap, + Json(body): Json, +) -> Response { + if !is_authorized(&state, &headers) { + return StatusCode::UNAUTHORIZED.into_response(); + } + if id != MANAGER_ID { + return StatusCode::NOT_FOUND.into_response(); + } + if body.get("deploymentId").and_then(serde_json::Value::as_str) + != Some(state.deployment_id.as_str()) + { + return StatusCode::FORBIDDEN.into_response(); + } + + Json(json!({ + "accessToken": state.manager_access_token, + "expiresIn": 300, + "tokenType": "Bearer", + "managerUrl": state.manager_url, + "databaseId": null, + "controlPlaneUrl": null, + })) + .into_response() +} + +/// Resolve the deployment's real cloud Storage through the public remote API +/// and exercise every operation in its intentionally narrow v0 surface. +pub fn check_remote_storage<'a>( + deployment: &'a TestDeployment, + platform: Platform, +) -> Pin> + Send + 'a>> { + // This check includes generated SDK and provider futures that are large + // enough to overflow nextest's test-thread stack when embedded directly in + // the comprehensive runner's async state machine. Keep that state on the + // heap; this is also the boundary between the generic runner and the + // feature-specific live-cloud flow. + Box::pin(async move { + info!( + platform = %platform.as_str(), + "Checking remote Storage through assigned-manager discovery" + ); + let discovery = DiscoveryServer::start(deployment, platform).await?; + let bindings = + RemoteBindings::for_deployment(&deployment.id, &deployment.token, Some(&discovery.url)) + .await + .context("discover assigned manager for remote bindings")?; + let storage = bindings + .storage(STORAGE_BINDING) + .await + .context("resolve real remote Storage binding")?; + + let prefix = Path::from(format!( + "alien-e2e/remote-bindings/{}/{}", + deployment.id, + uuid::Uuid::new_v4().simple() + )); + let object = prefix.child("payload.txt"); + + let verification = verify_before_delete(storage.as_ref(), &prefix, &object).await; + let deletion = storage.delete(&object).await; + match (verification, deletion) { + // A failed PUT may leave no object; NotFound still proves cleanup is safe. + (Err(verification), Err(ObjectStoreError::NotFound { .. })) => { + return Err(verification) + } + (Err(verification), Err(deletion)) => { + bail!("remote Storage verification failed: {verification:#}; cleanup also failed: {deletion:#}") + } + (Err(verification), Ok(())) => return Err(verification), + (Ok(()), Err(deletion)) => { + return Err(deletion) + .context("delete remote Storage object during mandatory cleanup") + } + (Ok(()), Ok(())) => {} + } + + verify_deleted(storage.as_ref(), &prefix, &object).await?; + info!( + platform = %platform.as_str(), + "Remote Storage put/head/get/list/delete check passed" + ); + Ok(()) + }) +} + +async fn verify_before_delete( + storage: &dyn alien_bindings::RemoteStorage, + prefix: &Path, + object: &Path, +) -> anyhow::Result<()> { + storage + .put(object, PutPayload::from_static(PAYLOAD)) + .await + .context("put remote Storage object")?; + + let metadata = storage + .head(object) + .await + .context("head remote Storage object")?; + if metadata.location != *object || metadata.size != PAYLOAD.len() as u64 { + bail!( + "remote Storage head mismatch: expected path {object} and {} bytes, got {} and {} bytes", + PAYLOAD.len(), + metadata.location, + metadata.size + ); + } + + let bytes = storage + .get(object) + .await + .context("get remote Storage object")? + .bytes() + .await + .context("read remote Storage object body")?; + if bytes.as_ref() != PAYLOAD { + bail!("remote Storage get returned different object bytes"); + } + + let listed = storage + .list(Some(prefix)) + .try_collect::>() + .await + .context("list remote Storage prefix")?; + if listed.len() != 1 || listed[0].location != *object { + bail!("remote Storage list did not return exactly the written object"); + } + + Ok(()) +} + +async fn verify_deleted( + storage: &dyn alien_bindings::RemoteStorage, + prefix: &Path, + object: &Path, +) -> anyhow::Result<()> { + match storage.head(object).await { + Err(ObjectStoreError::NotFound { .. }) => {} + Err(error) => return Err(error).context("verify remote Storage object deletion"), + Ok(_) => bail!("remote Storage object still exists after delete"), + } + + let listed = storage + .list(Some(prefix)) + .try_collect::>() + .await + .context("list remote Storage prefix after delete")?; + if listed.iter().any(|metadata| metadata.location == *object) { + bail!("remote Storage list still contains the deleted object"); + } + + Ok(()) +} diff --git a/crates/alien-test/tests/common/runner.rs b/crates/alien-test/tests/common/runner.rs index d0282f6b1..8cd351b0d 100644 --- a/crates/alien-test/tests/common/runner.rs +++ b/crates/alien-test/tests/common/runner.rs @@ -2,11 +2,10 @@ //! and calls the appropriate check function for each supported binding. use alien_core::Platform; -use alien_test::{Binding, DeploymentModel, TestApp, TestDeployment}; +use alien_test::{e2e, Binding, DeploymentModel, TestApp, TestDeployment}; use tracing::{info, warn}; -use super::{bindings, events}; -use alien_test::e2e; +use super::{bindings, events, remote_bindings}; /// Run all binding checks that are supported for the given platform and model. /// @@ -50,7 +49,14 @@ pub async fn check_all_bindings( Binding::QueueEvent => events::check_queue_event_delivery(deployment).await?, Binding::StorageEvent => events::check_storage_event_delivery(deployment).await?, Binding::CronEvent => events::check_cron_event_delivery(deployment).await?, - Binding::Storage => bindings::check_storage(deployment).await?, + Binding::Storage => { + bindings::check_storage(deployment).await?; + if model == DeploymentModel::Push + && matches!(platform, Platform::Aws | Platform::Gcp | Platform::Azure) + { + remote_bindings::check_remote_storage(deployment, platform).await?; + } + } Binding::Kv => bindings::check_kv(deployment).await?, Binding::Vault => bindings::check_vault(deployment).await?, Binding::Postgres => bindings::check_postgres(deployment).await?, diff --git a/examples/README.md b/examples/README.md index 76572caf3..19a612e0a 100644 --- a/examples/README.md +++ b/examples/README.md @@ -4,6 +4,7 @@ Each example is a self-contained template you can initialize with `alien init`. | Template | Description | Language | |----------|-------------|----------| +| [byob-storage-ts](./byob-storage-ts) | Provision customer-owned object storage and access it from an external SaaS backend. | TypeScript | | [remote-worker-ts](./remote-worker-ts) | Execute tool calls in your customer's cloud. The AI worker pattern. | TypeScript | | [basic-worker-ts](./basic-worker-ts) | The simplest Alien worker, in TypeScript. | TypeScript | | [basic-worker-rs](./basic-worker-rs) | The simplest Alien worker, in Rust. | Rust | diff --git a/examples/byob-storage-ts/.gitignore b/examples/byob-storage-ts/.gitignore new file mode 100644 index 000000000..1eae0cf67 --- /dev/null +++ b/examples/byob-storage-ts/.gitignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ diff --git a/examples/byob-storage-ts/README.md b/examples/byob-storage-ts/README.md new file mode 100644 index 000000000..0a0f0c697 --- /dev/null +++ b/examples/byob-storage-ts/README.md @@ -0,0 +1,71 @@ +# Bring Your Own Bucket + +Provision a dedicated object-storage resource in each customer's AWS, GCP, or +Azure account, then access it from your existing SaaS backend. No Worker, +Container, sidecar, or other application compute runs in the customer's cloud. + +## Vendor: declare and release the storage + +[`alien.ts`](./alien.ts) declares one Frozen Storage resource and opts it into +Remote Bindings: + +```ts +const uploads = new alien.Storage("uploads").build() + +export default new alien.Stack("byob-storage") + .add(uploads, "frozen", { remoteAccess: true }) + .build() +``` + +Publish the release through the normal Alien release flow. `remoteAccess` is an +explicit security choice: it causes customer setup to grant Alien's deployment +management identity object read, write, list, delete, and multipart access to +this dedicated bucket or container. + +## Customer: run the normal setup + +The customer creates a deployment from that release and completes the normal +generated CloudFormation, Terraform, or Azure setup. The setup creates a new +dedicated S3 bucket, GCS bucket, or Blob container in the customer's account and +hands the resulting Frozen resource state back to Alien. + +This flow does not attach an existing bucket. The resource must reach Running +before Remote Bindings can resolve it. + +## Vendor backend: use the storage + +Create an Alien API credential with write access to the deployment and keep it +only in trusted backend code. Set the deployment ID and credential in the +backend environment, then run the complete example in +[`src/vendor.ts`](./src/vendor.ts): + +```sh +export ALIEN_DEPLOYMENT_ID=dep_... +export ALIEN_API_TOKEN=ax_... +pnpm run run:vendor +``` + +The application constructs one `Bindings` object and uses the ordinary Storage +operations: + +```ts +const bindings = await Bindings.forRemoteDeployment({ + deploymentId: process.env.ALIEN_DEPLOYMENT_ID!, + token: process.env.ALIEN_API_TOKEN!, +}) + +const uploads = bindings.storage("uploads") +await uploads.put("hello.txt", new TextEncoder().encode("hello")) +await uploads.get("hello.txt") +await uploads.head("hello.txt") +await uploads.list() +await uploads.delete("hello.txt") +``` + +Provider credentials are short-lived and resource-scoped. The same `Bindings` +and Storage objects refresh them below the application API. Read-only or +mismatched Alien credentials, non-Running resources, and resources without +`remoteAccess` are denied before usable cloud credentials are returned. + +Never expose the Alien API credential or returned provider credentials to a +browser, mobile app, logs, or other untrusted client. diff --git a/examples/byob-storage-ts/alien.ts b/examples/byob-storage-ts/alien.ts new file mode 100644 index 000000000..4c8c12802 --- /dev/null +++ b/examples/byob-storage-ts/alien.ts @@ -0,0 +1,7 @@ +import * as alien from "@alienplatform/core" + +const uploads = new alien.Storage("uploads").build() + +export default new alien.Stack("byob-storage") + .add(uploads, "frozen", { remoteAccess: true }) + .build() diff --git a/examples/byob-storage-ts/package.json b/examples/byob-storage-ts/package.json new file mode 100644 index 000000000..edba19ab0 --- /dev/null +++ b/examples/byob-storage-ts/package.json @@ -0,0 +1,19 @@ +{ + "name": "byob-storage-ts", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "check": "tsc --noEmit", + "build": "tsc", + "run:vendor": "pnpm run build && node dist/src/vendor.js" + }, + "dependencies": { + "@alienplatform/bindings": "^3.0.0", + "@alienplatform/core": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^24.0.15", + "typescript": "^5.8.3" + } +} diff --git a/examples/byob-storage-ts/src/vendor.ts b/examples/byob-storage-ts/src/vendor.ts new file mode 100644 index 000000000..ea564640b --- /dev/null +++ b/examples/byob-storage-ts/src/vendor.ts @@ -0,0 +1,31 @@ +import { Bindings } from "@alienplatform/bindings" + +function requiredEnvironmentVariable(name: string): string { + const value = process.env[name] + if (!value) { + throw new Error(`${name} is required`) + } + return value +} + +const bindings = await Bindings.forRemoteDeployment({ + deploymentId: requiredEnvironmentVariable("ALIEN_DEPLOYMENT_ID"), + token: requiredEnvironmentVariable("ALIEN_API_TOKEN"), +}) + +const uploads = bindings.storage("uploads") +const objectPath = "hello.txt" + +await uploads.put(objectPath, new TextEncoder().encode("hello from the vendor backend")) + +const metadata = await uploads.head(objectPath) +const contents = await uploads.get(objectPath) +const objects = await uploads.list() + +console.log({ + metadata, + contents: new TextDecoder().decode(contents), + objects, +}) + +await uploads.delete(objectPath) diff --git a/examples/byob-storage-ts/template.toml b/examples/byob-storage-ts/template.toml new file mode 100644 index 000000000..2f4b2de4f --- /dev/null +++ b/examples/byob-storage-ts/template.toml @@ -0,0 +1,3 @@ +name = "byob-storage-ts" +description = "Provision customer-owned storage and access it from an external SaaS backend." +language = "TypeScript" diff --git a/examples/byob-storage-ts/tsconfig.json b/examples/byob-storage-ts/tsconfig.json new file mode 100644 index 000000000..a0ec7c34c --- /dev/null +++ b/examples/byob-storage-ts/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "lib": ["ES2022"], + "moduleResolution": "bundler", + "strict": true, + "skipLibCheck": true, + "rootDir": ".", + "outDir": "dist", + "types": ["node"] + }, + "include": ["alien.ts", "src/**/*.ts"] +} diff --git a/examples/package.json b/examples/package.json index 8fd14e67b..c4b927cbb 100644 --- a/examples/package.json +++ b/examples/package.json @@ -4,16 +4,6 @@ "packageManager": "pnpm@10.11.0", "scripts": { "test": "pnpm run test:projects", - "test:projects": "pnpm -C basic-worker-ts test && pnpm -C remote-worker-ts test && pnpm -C data-connector-ts test && pnpm -C event-pipeline-ts test && pnpm -C command-routing-ts test:ts" - }, - "pnpm": { - "overrides": { - "@alienplatform/platform-api": "file:../client-sdks/platform/typescript", - "@alienplatform/core": "file:../packages/core", - "@alienplatform/sdk": "file:../packages/sdk", - "@alienplatform/testing": "file:../packages/testing", - "@alienplatform/commands": "file:../packages/commands", - "@alienplatform/bindings": "file:../packages/bindings" - } + "test:projects": "pnpm -C byob-storage-ts check && pnpm -C basic-worker-ts test && pnpm -C remote-worker-ts test && pnpm -C data-connector-ts test && pnpm -C event-pipeline-ts test && pnpm -C command-routing-ts test:ts" } } diff --git a/examples/pnpm-lock.yaml b/examples/pnpm-lock.yaml index c69906419..2693f2ecb 100644 --- a/examples/pnpm-lock.yaml +++ b/examples/pnpm-lock.yaml @@ -60,6 +60,22 @@ importers: specifier: ^3.1.4 version: 3.2.7(@types/node@24.12.0)(jiti@2.7.0)(lightningcss@1.32.0) + byob-storage-ts: + dependencies: + '@alienplatform/bindings': + specifier: file:../../packages/bindings + version: file:../packages/bindings(@types/json-schema@7.0.15)(openapi-types@12.1.3) + '@alienplatform/core': + specifier: file:../../packages/core + version: file:../packages/core(@types/json-schema@7.0.15)(openapi-types@12.1.3) + devDependencies: + '@types/node': + specifier: ^24.0.15 + version: 24.12.0 + typescript: + specifier: ^5.8.3 + version: 5.8.3 + byoc-database: devDependencies: '@alienplatform/core': diff --git a/examples/pnpm-workspace.yaml b/examples/pnpm-workspace.yaml index ed849fbfc..b80812111 100644 --- a/examples/pnpm-workspace.yaml +++ b/examples/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: + - byob-storage-ts - basic-worker-ts - basic-worker-rs - remote-worker-ts @@ -13,3 +14,11 @@ packages: - command-routing-ts - command-routing-ts/services/* - github-agent/packages/remote-agent + +overrides: + '@alienplatform/platform-api': file:../client-sdks/platform/typescript + '@alienplatform/core': file:../packages/core + '@alienplatform/sdk': file:../packages/sdk + '@alienplatform/testing': file:../packages/testing + '@alienplatform/commands': file:../packages/commands + '@alienplatform/bindings': file:../packages/bindings diff --git a/package.json b/package.json index ba8221876..23332cc2b 100644 --- a/package.json +++ b/package.json @@ -13,15 +13,17 @@ "build": "turbo build", "build:images": "echo 'Use GitHub Actions workflows (.github/workflows/images*.yml) for canonical image builds'", "generate": "turbo run generate", - "generate:platform-api": "speakeasy generate sdk --lang typescript --schema ./client-sdks/platform/openapi.json --out client-sdks/platform/typescript && NODE_OPTIONS=--max-old-space-size=8192 pnpm -C ./client-sdks/platform/typescript build", - "generate:manager-api": "speakeasy generate sdk --lang typescript --schema ./client-sdks/manager/openapi.json --out client-sdks/manager/typescript && pnpm -C ./client-sdks/manager/typescript build", + "generate:platform-api": "bash ./scripts/generate-platform-sdk.sh", + "generate:manager-api": "bash ./scripts/generate-manager-sdk.sh", "generate:manager-openapi": "cargo run --bin alien-manager-schema-exporter --features openapi -p alien-manager -- --output crates/alien-manager/openapi.json && cp crates/alien-manager/openapi.json client-sdks/manager/openapi.json", - "generate:manager-rust-sdk": "pnpm run generate:manager-openapi && openapi-down-convert -i crates/alien-manager/openapi.json -o client-sdks/manager/rust/openapi-3.0.json && cd client-sdks/manager/rust && node ../scripts/fix-openapi.mjs", + "generate:manager-rust-sdk": "pnpm run generate:manager-openapi && openapi-down-convert -i crates/alien-manager/openapi.json -o client-sdks/manager/openapi-3.0.json && openapi-down-convert -i crates/alien-manager/openapi.json -o client-sdks/manager/rust/openapi-3.0.json && cd client-sdks/manager && node scripts/fix-openapi.mjs && cd rust && node ../scripts/fix-openapi.mjs", "test": "turbo test", "test:examples": "./scripts/test-examples-local.sh", "changeset": "changeset", "version:npm": "changeset version", "test:ts": "turbo test:ts --concurrency 15", + "test:manager-sdk-wire": "pnpm -C ./client-sdks/manager/typescript build && node --test ./scripts/manager-sdk-wire.test.mjs", + "test:platform-sdk-wire": "pnpm -C ./client-sdks/platform/typescript build && node --test ./scripts/platform-sdk-command-token-wire.test.mjs", "validate:package-layout": "node --experimental-strip-types packages/scripts/validate-package-layout.ts && pnpm --filter @alienplatform/package-layout check", "format-and-lint": "biome check .", "format-and-lint:fix": "biome check . --write" @@ -33,14 +35,5 @@ "@changesets/cli": "^2.29.7", "turbo": "^2.5.8" }, - "packageManager": "pnpm@10.11.0", - "pnpm": { - "overrides": { - "@alienplatform/sdk": "link:packages/sdk", - "@alienplatform/core": "link:packages/core", - "@alienplatform/typescript-config": "link:packages/config-typescript", - "@alienplatform/testing": "link:packages/testing", - "@alienplatform/platform-api": "link:client-sdks/platform/typescript" - } - } + "packageManager": "pnpm@10.11.0" } diff --git a/packages/bindings/PACKAGE_LAYOUT.md b/packages/bindings/PACKAGE_LAYOUT.md index ede8dcfce..42cab1825 100644 --- a/packages/bindings/PACKAGE_LAYOUT.md +++ b/packages/bindings/PACKAGE_LAYOUT.md @@ -25,8 +25,10 @@ its own. | `kv` | function | `kv(name: string): Kv` | Factory. | | `queue` | function | `queue(name: string): Queue` | Factory. | | `vault` | function | `vault(name: string): Vault` | Factory. | +| `Bindings` | class | `Bindings.forRemoteDeployment(options): Promise` | Trusted-backend entry point for remote Storage access to an existing deployment. | | `container` | function | `container(name: string): Container` | Lazy, read-only linked-service discovery. | | `Storage` | type | resource handle | Instance type returned by `storage()`. Operation method signatures mirror the Rust `alien-bindings` storage handle. | +| `RemoteStorage` | type | `Pick` | Narrow handle returned by `Bindings.storage()`. | | `Kv` | type | resource handle | Instance type returned by `kv()`. Method signatures mirror the Rust handle. | | `Queue` | type | resource handle | Instance type returned by `queue()`. Method signatures mirror the Rust handle. | | `Container` | type | resource handle | `getInternalUrl()` and nullable `getPublicUrl()`. | @@ -45,6 +47,15 @@ added: - artifact-registry - service-account +Remote `Bindings` deliberately exposes no `kv`, `queue`, or `vault` methods. +Its Storage handle deliberately excludes copy and signed URLs. + +Remote access is a trusted-backend API. Its Alien API token and short-lived +provider credentials must never be shipped to a browser or other untrusted +client. v0 accepts only Running, Frozen, remote-enabled S3, GCS, and Azure Blob +resources. The customer setup grants the deployment management identity the +five public object operations on each opted-in bucket or container. + These live only on the Rust `BindingsProvider` (manager, controllers, tooling, remote bindings) and are never part of an app-facing surface. @@ -112,11 +123,18 @@ MAY depend on: ## Behavior contract -- Importing the package and constructing any factory (`storage("x")`, `kv("y")`, …) +- Importing the package and constructing any environment factory (`storage("x")`, `kv("y")`, …) requires no deployment and no cloud credentials. Construction never performs I/O. - The first operation against a binding that has no `ALIEN__BINDING` in the environment throws `BindingNotConfiguredError` (code `BINDING_NOT_CONFIGURED`), and the error names the missing env var `ALIEN__BINDING` in its context. +- `Bindings.forRemoteDeployment` forwards only the deployment ID, token, and + optional Alien API base URL. This async constructor loads the native addon and + discovers the assigned manager. It retains one native bindings handle, + resolves and caches each named Storage handle lazily, refreshes provider + credentials without replacing that handle, periodically rediscovers manager + assignment, and translates native errors to `AlienError`. Rotating the Alien + API token requires constructing a new `Bindings` value. ## Status diff --git a/packages/bindings/README.md b/packages/bindings/README.md index 1d41382dd..3006d7c1f 100644 --- a/packages/bindings/README.md +++ b/packages/bindings/README.md @@ -5,6 +5,50 @@ in-process [napi-rs](https://napi.rs) addon. The addon itself lives in the Rust crate `crates/alien-bindings-node`; this package is the published JavaScript wrapper that loads it. +## Remote Storage + +Use `Bindings.forRemoteDeployment` from a trusted backend to access a Storage +resource in an existing deployment. Never put the Alien API token in browser, +mobile, or other client-side code. The token must have write access to the +deployment; read-only tokens cannot resolve cloud credentials. + +```ts +import { Bindings } from "@alienplatform/bindings" + +const bindings = await Bindings.forRemoteDeployment({ + deploymentId: process.env.ALIEN_DEPLOYMENT_ID!, + token: process.env.ALIEN_API_TOKEN!, +}) + +const archive = bindings.storage("archive") +await archive.put("reports/latest.json", Buffer.from(JSON.stringify({ ready: true }))) + +const metadata = await archive.head("reports/latest.json") +const report = await archive.get("reports/latest.json") +const reports = await archive.list("reports/") + +await archive.delete("reports/latest.json") +``` + +Remote Storage exposes `get`, `put`, `head`, `list`, and `delete`. It does not +expose copy or signed URLs. The same `Bindings` and Storage handles remain valid +while the native client refreshes short-lived cloud credentials and periodically +rediscovers the deployment's assigned manager. Rotating the Alien API token +requires constructing a new `Bindings` value. Pass `apiBaseUrl` only when +targeting a non-default Alien API endpoint; plain HTTP is accepted only on a +loopback address for local development. + +The named resource must be a Running, Frozen S3, GCS, or Azure Blob Storage +resource with remote access enabled. Enabling remote access adds concrete +object read/write/list/delete access for that bucket or container to the +deployment management identity. Generate and apply updated customer setup when +enabling it on an existing deployment. The endpoint returns a short-lived lease +for that deployment identity only after it validates the named resource, so the +Alien token and all returned provider credentials must be treated as backend +secrets. + +## Linked containers + The same factories are re-exported by `@alienplatform/sdk` for Worker apps. Long-running Container and Daemon apps can import this package directly. A linked container is read-only service discovery: @@ -22,8 +66,11 @@ the public URL only when the caller is outside that private network. ## Native addon resolution -The addon is loaded lazily on the first binding operation (never at import — the -package is `sideEffects: false`). `src/loader.ts` resolves it in order: +Importing the package never loads the addon, so the package remains +`sideEffects: false`. Environment-backed factories load it on the first binding +operation. `Bindings.forRemoteDeployment` loads it immediately because manager +discovery is part of that async constructor. `src/loader.ts` resolves it in +order: 1. `ALIEN_BINDINGS_ADDON_PATH` — an explicit path to a `.node` file. A dev/test escape hatch only; never set in a published install. diff --git a/packages/bindings/package.json b/packages/bindings/package.json index 539bbd25b..d4de3ad84 100644 --- a/packages/bindings/package.json +++ b/packages/bindings/package.json @@ -27,6 +27,7 @@ "test:bun": "bun scripts/run-bun-tests.mjs", "test:ts": "tsc --noEmit", "smoke": "node scripts/smoke-envelope.mjs", + "smoke:remote-storage": "node scripts/remote-storage-smoke.mjs", "format-and-lint": "biome check .", "format-and-lint:fix": "biome check . --write" }, diff --git a/packages/bindings/scripts/remote-storage-smoke-lib.mjs b/packages/bindings/scripts/remote-storage-smoke-lib.mjs new file mode 100644 index 000000000..dfc879660 --- /dev/null +++ b/packages/bindings/scripts/remote-storage-smoke-lib.mjs @@ -0,0 +1,96 @@ +import assert from "node:assert/strict" + +const requiredEnvironmentVariables = [ + "ALIEN_API_URL", + "ALIEN_API_KEY", + "ALIEN_DEPLOYMENT_ID", + "ALIEN_STORAGE_BINDING", +] + +const payload = Buffer.from("alien remote storage smoke") + +/** + * @typedef {object} RemoteStorageSmokeConfig + * @property {string} apiUrl + * @property {string} apiKey + * @property {string} deploymentId + * @property {string} storageBinding + */ + +/** + * @param {Readonly>} environment + * @returns {RemoteStorageSmokeConfig} + */ +export function readRemoteStorageSmokeConfig(environment) { + const missing = requiredEnvironmentVariables.filter(name => !environment[name]?.trim()) + if (missing.length > 0) { + throw new Error(`Missing required environment variables: ${missing.join(", ")}`) + } + + const required = name => { + const value = environment[name]?.trim() + if (!value) throw new Error(`${name} is required`) + return value + } + return { + apiUrl: required("ALIEN_API_URL"), + apiKey: required("ALIEN_API_KEY"), + deploymentId: required("ALIEN_DEPLOYMENT_ID"), + storageBinding: required("ALIEN_STORAGE_BINDING"), + } +} + +/** + * @param {import("../dist/index.js").RemoteStorage} storage + * @param {string} object + */ +export async function verifyRemoteStorage(storage, object) { + let cleanupRequired = true + let verificationError + + try { + await storage.put(object, payload) + + const prefix = object.slice(0, object.lastIndexOf("/") + 1) + const downloaded = await storage.get(object) + assert.deepEqual(downloaded, payload) + + const metadata = await storage.head(object) + assert.equal(metadata.location, object) + assert.equal(metadata.size, payload.byteLength) + + const listed = await storage.list(prefix) + assert.ok( + listed.some(item => item.location === object), + "uploaded object was absent from list", + ) + + await storage.delete(object) + cleanupRequired = false + const listedAfterDelete = await storage.list(prefix) + assert.ok( + !listedAfterDelete.some(item => item.location === object), + "deleted object remained in list", + ) + } catch (error) { + verificationError = error + } + + let cleanupError + if (cleanupRequired) { + try { + await storage.delete(object) + } catch (error) { + cleanupError = error + } + } + + if (verificationError !== undefined && cleanupError !== undefined) { + throw new AggregateError( + [verificationError, cleanupError], + "remote Storage verification and cleanup failed", + ) + } + if (verificationError !== undefined) throw verificationError + if (cleanupError !== undefined) throw cleanupError +} diff --git a/packages/bindings/scripts/remote-storage-smoke.mjs b/packages/bindings/scripts/remote-storage-smoke.mjs new file mode 100644 index 000000000..e0e1c857b --- /dev/null +++ b/packages/bindings/scripts/remote-storage-smoke.mjs @@ -0,0 +1,15 @@ +import { randomUUID } from "node:crypto" +import { Bindings } from "../dist/index.js" +import { readRemoteStorageSmokeConfig, verifyRemoteStorage } from "./remote-storage-smoke-lib.mjs" + +const config = readRemoteStorageSmokeConfig(process.env) +const bindings = await Bindings.forRemoteDeployment({ + apiBaseUrl: config.apiUrl, + deploymentId: config.deploymentId, + token: config.apiKey, +}) +const storage = bindings.storage(config.storageBinding) +const object = `alien-e2e/remote-storage-smoke/${randomUUID()}/payload.txt` + +await verifyRemoteStorage(storage, object) +console.log("Remote Storage put/get/head/list/delete smoke passed") diff --git a/packages/bindings/scripts/remote-storage-smoke.test.mjs b/packages/bindings/scripts/remote-storage-smoke.test.mjs new file mode 100644 index 000000000..f7ad89128 --- /dev/null +++ b/packages/bindings/scripts/remote-storage-smoke.test.mjs @@ -0,0 +1,100 @@ +import { describe, expect, it, vi } from "vitest" +import { readRemoteStorageSmokeConfig, verifyRemoteStorage } from "./remote-storage-smoke-lib.mjs" + +const object = "alien-e2e/remote-storage-smoke/test/payload.txt" + +function fakeStorage() { + const values = new Map() + const put = vi.fn(async (path, data) => { + values.set(path, Buffer.from(data)) + }) + const get = vi.fn(async path => { + const value = values.get(path) + if (!value) throw new Error(`missing ${path}`) + return value + }) + const head = vi.fn(async path => { + const value = values.get(path) + if (!value) throw new Error(`missing ${path}`) + return { location: path, size: value.byteLength, lastModified: "2026-01-01T00:00:00Z" } + }) + const list = vi.fn(async prefix => + [...values.entries()] + .filter(([path]) => path.startsWith(prefix ?? "")) + .map(([location, value]) => ({ + location, + size: value.byteLength, + lastModified: "2026-01-01T00:00:00Z", + })), + ) + const remove = vi.fn(async path => { + values.delete(path) + }) + return { storage: { put, get, head, list, delete: remove }, put, get, head, list, remove } +} + +describe("remote Storage smoke", () => { + it("reports every missing input together", () => { + expect(() => readRemoteStorageSmokeConfig({ ALIEN_DEPLOYMENT_ID: " dep_123 " })).toThrow( + "Missing required environment variables: ALIEN_API_URL, ALIEN_API_KEY, ALIEN_STORAGE_BINDING", + ) + }) + + it("reads and trims its public inputs", () => { + expect( + readRemoteStorageSmokeConfig({ + ALIEN_API_URL: " https://api.example.com ", + ALIEN_API_KEY: " token_123 ", + ALIEN_DEPLOYMENT_ID: " dep_123 ", + ALIEN_STORAGE_BINDING: " archive ", + }), + ).toEqual({ + apiUrl: "https://api.example.com", + apiKey: "token_123", + deploymentId: "dep_123", + storageBinding: "archive", + }) + }) + + it("checks every remote operation and verifies deletion", async () => { + const fixture = fakeStorage() + + await verifyRemoteStorage(fixture.storage, object) + + expect(fixture.put).toHaveBeenCalledOnce() + expect(fixture.get).toHaveBeenCalledWith(object) + expect(fixture.head).toHaveBeenCalledOnce() + expect(fixture.list).toHaveBeenCalledTimes(2) + expect(fixture.list).toHaveBeenCalledWith("alien-e2e/remote-storage-smoke/test/") + expect(fixture.remove).toHaveBeenCalledOnce() + }) + + it("fails when delete leaves the object visible", async () => { + const fixture = fakeStorage() + fixture.remove.mockImplementationOnce(async () => {}) + + await expect(verifyRemoteStorage(fixture.storage, object)).rejects.toThrow( + "deleted object remained in list", + ) + }) + + it("deletes the object when verification fails", async () => { + const fixture = fakeStorage() + fixture.get.mockRejectedValueOnce(new Error("download failed")) + + await expect(verifyRemoteStorage(fixture.storage, object)).rejects.toThrow("download failed") + expect(fixture.remove).toHaveBeenCalledWith(object) + }) + + it("preserves both verification and cleanup failures", async () => { + const fixture = fakeStorage() + const verificationError = new Error("download failed") + const cleanupError = new Error("delete failed") + fixture.get.mockRejectedValueOnce(verificationError) + fixture.remove.mockRejectedValueOnce(cleanupError) + + await expect(verifyRemoteStorage(fixture.storage, object)).rejects.toMatchObject({ + errors: [verificationError, cleanupError], + }) + }) +}) diff --git a/packages/bindings/src/__tests__/factories.test.ts b/packages/bindings/src/__tests__/factories.test.ts index 2b56ebda1..26872acee 100644 --- a/packages/bindings/src/__tests__/factories.test.ts +++ b/packages/bindings/src/__tests__/factories.test.ts @@ -11,6 +11,14 @@ import type { RawVaultHandle, } from "../loader.js" +function unusedRemoteBindingsHandle(): NativeAddon["RemoteBindingsHandle"] { + return { + async forDeployment(): Promise { + throw new Error("unused") + }, + } +} + /** * A fake addon that records every `BindingsHandle` construction and returns * trivial resource handles, so factory behavior can be exercised without the @@ -76,6 +84,7 @@ function fakeAddon(): { addon: NativeAddon; constructions: unknown[] } { return { addon: { BindingsHandle: FakeBindingsHandle as unknown as NativeAddon["BindingsHandle"], + RemoteBindingsHandle: unusedRemoteBindingsHandle(), version: () => "test", }, constructions, @@ -103,6 +112,7 @@ function addonForKv(kvHandle: RawKvHandle): NativeAddon { } return { BindingsHandle: FakeBindingsHandle as unknown as NativeAddon["BindingsHandle"], + RemoteBindingsHandle: unusedRemoteBindingsHandle(), version: () => "test", } } @@ -254,6 +264,7 @@ describe("createFactories method mapping", () => { } const addon = { BindingsHandle: FakeBindingsHandle as unknown as NativeAddon["BindingsHandle"], + RemoteBindingsHandle: unusedRemoteBindingsHandle(), version: () => "test", } const { queue } = createFactories(() => addon) diff --git a/packages/bindings/src/__tests__/loader.test.ts b/packages/bindings/src/__tests__/loader.test.ts index 7982b443f..a331e22da 100644 --- a/packages/bindings/src/__tests__/loader.test.ts +++ b/packages/bindings/src/__tests__/loader.test.ts @@ -3,24 +3,33 @@ import type { NativeAddon } from "../loader.js" import { assertAddonVersion, platformTriple } from "../loader.js" function addonReporting(version: string): NativeAddon { - return { - BindingsHandle: class { - storage(): never { - throw new Error("not used by version validation") - } - kv(): never { - throw new Error("not used by version validation") - } - queue(): never { - throw new Error("not used by version validation") - } - vault(): never { - throw new Error("not used by version validation") - } - container(): never { - throw new Error("not used by version validation") - } + class BindingsHandle { + storage(): never { + throw new Error("not used by version validation") + } + kv(): never { + throw new Error("not used by version validation") + } + queue(): never { + throw new Error("not used by version validation") + } + vault(): never { + throw new Error("not used by version validation") + } + container(): never { + throw new Error("not used by version validation") + } + } + + const RemoteBindingsHandle: NativeAddon["RemoteBindingsHandle"] = { + async forDeployment(): Promise { + throw new Error("not used by version validation") }, + } + + return { + BindingsHandle, + RemoteBindingsHandle, version: () => version, } } diff --git a/packages/bindings/src/__tests__/remote.test.ts b/packages/bindings/src/__tests__/remote.test.ts new file mode 100644 index 000000000..9004cac4a --- /dev/null +++ b/packages/bindings/src/__tests__/remote.test.ts @@ -0,0 +1,182 @@ +import { AlienError } from "@alienplatform/core" +import { beforeEach, describe, expect, it, vi } from "vitest" +import type { + NativeAddon, + RawBindingsHandle, + RawContainerHandle, + RawKvHandle, + RawQueueHandle, + RawRemoteBindingsHandle, + RawRemoteStorageHandle, + RawStorageHandle, + RawVaultHandle, +} from "../loader.js" + +const loadAddon = vi.hoisted(() => vi.fn<() => NativeAddon>()) + +vi.mock("../loader.js", async importOriginal => { + const actual = await importOriginal() + return { ...actual, loadAddon } +}) + +import { Bindings } from "../remote.js" + +function fakeRemoteAddon() { + const head = vi.fn(async () => { + throw new Error("unused") + }) + const storage: RawRemoteStorageHandle = { + get: async path => Buffer.from(path), + put: async () => {}, + delete: async () => {}, + list: async () => [], + head, + } + const resolveStorage = vi.fn<(name: string) => Promise>( + async () => storage, + ) + const localStorage: RawStorageHandle = { + ...storage, + copy: async () => {}, + signedUrl: async () => ({ url: "https://example.invalid", method: "GET", headers: {} }), + } + + class FakeBindingsHandle implements RawBindingsHandle { + async storage(): Promise { + return localStorage + } + + async kv(): Promise { + throw new Error("unused") + } + + async queue(): Promise { + throw new Error("unused") + } + + async vault(): Promise { + throw new Error("unused") + } + + async container(): Promise { + throw new Error("unused") + } + } + + class FakeRemoteBindingsHandle implements RawRemoteBindingsHandle { + static forDeployment: ( + deploymentId: string, + token: string, + apiBaseUrl?: string, + ) => Promise + + storage = resolveStorage + } + + const forRemoteDeployment = vi.fn< + (deploymentId: string, token: string, apiBaseUrl?: string) => Promise + >(async () => new FakeRemoteBindingsHandle()) + FakeRemoteBindingsHandle.forDeployment = forRemoteDeployment + + return { + addon: { + BindingsHandle: FakeBindingsHandle, + RemoteBindingsHandle: FakeRemoteBindingsHandle, + version: () => "test", + }, + forRemoteDeployment, + resolveStorage, + head, + } +} + +beforeEach(() => { + loadAddon.mockReset() +}) + +describe("Bindings.forRemoteDeployment", () => { + it("forwards discovery arguments and exposes only remote Storage", async () => { + const fixture = fakeRemoteAddon() + loadAddon.mockReturnValue(fixture.addon) + + const bindings = await Bindings.forRemoteDeployment({ + deploymentId: "dep_123", + token: "token_123", + apiBaseUrl: "https://api.example.com", + }) + const storage = bindings.storage("archive") + + expect(loadAddon).toHaveBeenCalledTimes(1) + expect(fixture.forRemoteDeployment).toHaveBeenCalledOnce() + expect(fixture.forRemoteDeployment).toHaveBeenCalledWith( + "dep_123", + "token_123", + "https://api.example.com", + ) + expect("kv" in bindings).toBe(false) + expect("queue" in bindings).toBe(false) + expect("vault" in bindings).toBe(false) + expect(Object.keys(storage).sort()).toEqual(["delete", "get", "head", "list", "put"]) + }) + + it("reuses one native bindings handle and resolves each Storage handle lazily once", async () => { + const fixture = fakeRemoteAddon() + fixture.head.mockResolvedValue({ + location: "archive/a.txt", + size: 1, + lastModified: "2026-01-01T00:00:00Z", + }) + loadAddon.mockReturnValue(fixture.addon) + + const bindings = await Bindings.forRemoteDeployment({ + deploymentId: "dep_123", + token: "token_123", + }) + const archive = bindings.storage("archive") + const logs = bindings.storage("logs") + + expect(fixture.resolveStorage).not.toHaveBeenCalled() + expect(bindings.storage("archive")).toBe(archive) + await archive.head("a.txt") + await archive.get("a.txt") + await logs.head("b.txt") + + expect(fixture.forRemoteDeployment).toHaveBeenCalledOnce() + expect(fixture.resolveStorage.mock.calls).toEqual([["archive"], ["logs"]]) + }) + + it("unwraps napi errors from discovery and Storage operations", async () => { + const fixture = fakeRemoteAddon() + const discoveryError = new Error( + JSON.stringify({ + code: "REMOTE_BINDING_DENIED", + message: "Remote binding access denied", + retryable: false, + }), + ) + fixture.forRemoteDeployment.mockRejectedValueOnce(discoveryError) + loadAddon.mockReturnValue(fixture.addon) + + const denied = Bindings.forRemoteDeployment({ + deploymentId: "dep_123", + token: "token_123", + }) + await expect(denied).rejects.toMatchObject({ + code: "REMOTE_BINDING_DENIED", + message: "Remote binding access denied", + }) + + const bindings = await Bindings.forRemoteDeployment({ + deploymentId: "dep_123", + token: "token_123", + }) + fixture.head.mockRejectedValueOnce(new Error("native transport failed")) + const operation = bindings.storage("archive").head("a.txt") + + await expect(operation).rejects.toBeInstanceOf(AlienError) + await expect(operation).rejects.toMatchObject({ + code: "BINDINGS_ERROR", + message: "native transport failed", + }) + }) +}) diff --git a/packages/bindings/src/factories.ts b/packages/bindings/src/factories.ts index 75c191d90..9c4408ddc 100644 --- a/packages/bindings/src/factories.ts +++ b/packages/bindings/src/factories.ts @@ -20,6 +20,8 @@ import type { RawContainerHandle, RawKvHandle, RawQueueHandle, + RawRemoteBindingsHandle, + RawRemoteStorageHandle, RawStorageHandle, RawVaultHandle, } from "./loader.js" @@ -31,30 +33,25 @@ import type { PresignedRequest, Queue, QueueMessage, + RemoteStorage, SignedUrlOptions, Storage, Vault, } from "./types.js" +type BindingsHandleProvider = () => Promise + /** * Build a lazy, cached resolver for one resource handle. The returned function - * loads the addon, constructs a `BindingsHandle`, and resolves the resource - * handle on first call; subsequent calls reuse the cached handle. + * obtains a `BindingsHandle` and resolves the resource handle on first call; + * subsequent calls reuse the cached handle. */ -function lazyHandle( - getAddon: () => NativeAddon, - name: string, - resolve: (bindings: RawBindingsHandle, name: string) => Promise, -): () => Promise { +function lazyHandle(resolve: () => Promise): () => Promise { let pending: Promise | undefined return () => { if (!pending) { - pending = (async () => { - const addon = getAddon() - const bindings = new addon.BindingsHandle() - return await resolve(bindings, name) - })().catch(err => { + pending = resolve().catch(err => { // Do not cache a failed materialization; allow a later retry. pending = undefined throw err @@ -64,6 +61,13 @@ function lazyHandle( } } +function bindingsFromAddon(getAddon: () => NativeAddon): BindingsHandleProvider { + return async () => { + const addon = getAddon() + return new addon.BindingsHandle() + } +} + function toBuffer(data: Buffer | Uint8Array): Buffer { return Buffer.isBuffer(data) ? data : Buffer.from(data) } @@ -93,6 +97,16 @@ function makeStorage(handle: () => Promise): Storage { } } +function makeRemoteStorage(handle: () => Promise): RemoteStorage { + return { + get: path => guard(handle, raw => raw.get(path)), + put: (path, data) => guard(handle, raw => raw.put(path, toBuffer(data))), + delete: path => guard(handle, raw => raw.delete(path)), + list: prefix => guard(handle, raw => raw.list(prefix ?? null)), + head: path => guard(handle, raw => raw.head(path)), + } +} + function makeKv(handle: () => Promise): Kv { return { get: key => guard(handle, raw => raw.get(key)), @@ -136,8 +150,7 @@ function makeKv(handle: () => Promise): Kv { } } -// The napi queue methods take the queue name as their first argument; the -// binding name is used for it (providers key the queue off the binding). +// The native bound queue already carries its configured queue name. function makeQueue(handle: () => Promise): Queue { return { send: message => guard(handle, raw => raw.sendJson(JSON.stringify(message))), @@ -179,11 +192,25 @@ export interface Factories { /** Build the factories bound to a given addon provider. */ export function createFactories(getAddon: () => NativeAddon): Factories { + const getBindings = bindingsFromAddon(getAddon) return { - storage: name => makeStorage(lazyHandle(getAddon, name, (b, n) => b.storage(n))), - kv: name => makeKv(lazyHandle(getAddon, name, (b, n) => b.kv(n))), - queue: name => makeQueue(lazyHandle(getAddon, name, (b, n) => b.queue(n))), - vault: name => makeVault(lazyHandle(getAddon, name, (b, n) => b.vault(n))), - container: name => makeContainer(lazyHandle(getAddon, name, (b, n) => b.container(n))), + storage: name => makeStorage(lazyHandle(async () => (await getBindings()).storage(name))), + kv: name => makeKv(lazyHandle(async () => (await getBindings()).kv(name))), + queue: name => makeQueue(lazyHandle(async () => (await getBindings()).queue(name))), + vault: name => makeVault(lazyHandle(async () => (await getBindings()).vault(name))), + container: name => makeContainer(lazyHandle(async () => (await getBindings()).container(name))), + } +} + +/** Build the remote-only storage factory around one native bindings handle. */ +export function createRemoteStorageFactory(bindings: RawRemoteBindingsHandle) { + const storages = new Map() + return (name: string): RemoteStorage => { + let storage = storages.get(name) + if (!storage) { + storage = makeRemoteStorage(lazyHandle(() => bindings.storage(name))) + storages.set(name, storage) + } + return storage } } diff --git a/packages/bindings/src/index.ts b/packages/bindings/src/index.ts index 4c18155d8..39f971ad7 100644 --- a/packages/bindings/src/index.ts +++ b/packages/bindings/src/index.ts @@ -12,6 +12,9 @@ import { createFactories } from "./factories.js" import { loadAddon } from "./loader.js" +export { Bindings } from "./remote.js" +export type { RemoteDeploymentBindingsOptions } from "./remote.js" + const factories = createFactories(loadAddon) /** Resolve the storage binding named `name`. */ @@ -37,6 +40,7 @@ export type { PresignedRequest, Queue, QueueMessage, + RemoteStorage, SignedUrlMethod, SignedUrlOptions, Storage, diff --git a/packages/bindings/src/loader.ts b/packages/bindings/src/loader.ts index 39d39827b..dde290446 100644 --- a/packages/bindings/src/loader.ts +++ b/packages/bindings/src/loader.ts @@ -82,6 +82,15 @@ export interface RawStorageHandle { signedUrl(method: string, path: string, expiresInSecs: number): Promise } +/** Raw napi remote Storage v0 handle. */ +export interface RawRemoteStorageHandle { + get(path: string): Promise + put(path: string, data: Buffer): Promise + delete(path: string): Promise + list(prefix?: string | null): Promise + head(path: string): Promise +} + /** Raw napi key-value handle. */ export interface RawKvHandle { get(key: string): Promise @@ -96,7 +105,7 @@ export interface RawKvHandle { scan(prefix: string, limit?: number | null, cursor?: string | null): Promise } -/** Raw napi queue handle. Every method takes the queue name as its first arg. */ +/** Raw napi queue handle, already scoped to its configured queue. */ export interface RawQueueHandle { sendJson(jsonString: string): Promise sendText(text: string): Promise @@ -128,9 +137,29 @@ export interface RawBindingsHandle { container(name: string): Promise } +/** Raw napi remote bindings entry point. Storage is the entire v0 surface. */ +export interface RawRemoteBindingsHandle { + storage(name: string): Promise +} + +/** Native environment-backed bindings class. */ +export interface RawBindingsHandleConstructor { + new (): RawBindingsHandle +} + +/** Native remote bindings class. */ +export interface RawRemoteBindingsHandleConstructor { + forDeployment( + deploymentId: string, + token: string, + apiBaseUrl?: string, + ): Promise +} + /** The complete napi addon module surface consumed by the wrapper. */ export interface NativeAddon { - BindingsHandle: new () => RawBindingsHandle + BindingsHandle: RawBindingsHandleConstructor + RemoteBindingsHandle: RawRemoteBindingsHandleConstructor version(): string } diff --git a/packages/bindings/src/remote.ts b/packages/bindings/src/remote.ts new file mode 100644 index 000000000..e43bb6d56 --- /dev/null +++ b/packages/bindings/src/remote.ts @@ -0,0 +1,43 @@ +import { unwrapNapiError } from "./errors.js" +import { createRemoteStorageFactory } from "./factories.js" +import { loadAddon } from "./loader.js" +import type { RemoteStorage } from "./types.js" + +/** Options for accessing Storage resources in an existing deployment. */ +export interface RemoteDeploymentBindingsOptions { + /** Deployment to access. */ + deploymentId: string + /** Alien API token authorized for remote bindings. */ + token: string + /** Override the Alien API base URL. */ + apiBaseUrl?: string +} + +/** Remote bindings for an existing deployment. */ +export class Bindings { + readonly #storage: (name: string) => RemoteStorage + + private constructor(storage: (name: string) => RemoteStorage) { + this.#storage = storage + } + + /** Discover the deployment's manager and prepare remote Storage bindings. */ + static async forRemoteDeployment(options: RemoteDeploymentBindingsOptions): Promise { + try { + const addon = loadAddon() + const bindings = await addon.RemoteBindingsHandle.forDeployment( + options.deploymentId, + options.token, + options.apiBaseUrl, + ) + return new Bindings(createRemoteStorageFactory(bindings)) + } catch (error) { + throw unwrapNapiError(error) + } + } + + /** Resolve a remote Storage binding by resource name. */ + storage(name: string): RemoteStorage { + return this.#storage(name) + } +} diff --git a/packages/bindings/src/types.ts b/packages/bindings/src/types.ts index 97ea166d1..6c2479b59 100644 --- a/packages/bindings/src/types.ts +++ b/packages/bindings/src/types.ts @@ -56,6 +56,9 @@ export interface Storage { signedUrl(options: SignedUrlOptions): Promise } +/** Storage operations available from an external deployment binding. */ +export type RemoteStorage = Pick + /** Options for {@link Kv.set}. */ export interface KvSetOptions { /** Time-to-live, in seconds. */ diff --git a/packages/bindings/tests/remote.test.ts b/packages/bindings/tests/remote.test.ts new file mode 100644 index 000000000..890d57680 --- /dev/null +++ b/packages/bindings/tests/remote.test.ts @@ -0,0 +1,143 @@ +/** + * Hosted Remote Bindings flow through the real napi addon. The HTTP servers + * stand in for the public Platform API and the deployment's assigned manager. + * The request traverses discovery and the generated manager client before the + * fixture manager returns a structured authorization denial. + */ + +import { type IncomingMessage, type Server, type ServerResponse, createServer } from "node:http" +import { afterAll, beforeAll, describe, expect, it } from "vitest" +import { Bindings } from "../src/index.js" + +const deploymentId = "dep_aaaaaaaaaaaaaaaaaaaaaaaaaaaa" +const managerId = "mgr_bbbbbbbbbbbbbbbbbbbbbbbbbbbb" +const projectId = "prj_cccccccccccccccccccccccccccc" +const deploymentGroupId = "dg_dddddddddddddddddddddddddddd" +const workspaceId = "ws_eeeeeeeeeeeeeeeeeeeeeeee" +const token = "remote-secret-token" +const bindingToken = "manager-binding-token" + +let managerServer: Server | undefined +let platformServer: Server | undefined +let managerOrigin: string +let platformOrigin: string +const platformAuthorizations: Array = [] +const managerAuthorizations: Array = [] +const bindingTokenBodies: unknown[] = [] +const resolveBodies: unknown[] = [] + +function json(response: ServerResponse, status: number, body: unknown): void { + response.writeHead(status, { "content-type": "application/json" }) + response.end(JSON.stringify(body)) +} + +async function bodyOf(request: IncomingMessage): Promise { + let body = "" + for await (const chunk of request) body += chunk.toString() + return body.length > 0 ? JSON.parse(body) : undefined +} + +function listen(server: Server): Promise { + return new Promise((resolve, reject) => { + server.once("error", reject) + server.listen(0, "127.0.0.1", () => { + const address = server.address() + if (!address || typeof address === "string") { + reject(new Error("fixture server did not expose a TCP address")) + return + } + resolve(`http://127.0.0.1:${address.port}`) + }) + }) +} + +function close(server: Server | undefined): Promise { + if (!server?.listening) return Promise.resolve() + return new Promise((resolve, reject) => { + server.close(error => (error ? reject(error) : resolve())) + server.closeAllConnections() + }) +} + +beforeAll(async () => { + managerServer = createServer(async (request, response) => { + managerAuthorizations.push(request.headers.authorization) + if (request.method !== "POST" || request.url !== "/v1/bindings/resolve") { + json(response, 404, { message: "not found" }) + return + } + resolveBodies.push(await bodyOf(request)) + json(response, 403, { + code: "FORBIDDEN", + message: "Remote access was revoked", + retryable: false, + internal: false, + httpStatusCode: 403, + }) + }) + managerOrigin = await listen(managerServer) + + platformServer = createServer(async (request, response) => { + platformAuthorizations.push(request.headers.authorization) + if (request.method === "GET" && request.url === `/v1/deployments/${deploymentId}`) { + json(response, 200, { + id: deploymentId, + name: "remote-storage-test", + status: "running", + projectId, + platform: "local", + deploymentProtocolVersion: 1, + deploymentGroupId, + stackSettings: {}, + retryRequested: false, + createdAt: "2026-01-01T00:00:00Z", + updatedAt: "2026-01-01T00:00:00Z", + managerId, + workspaceId, + }) + return + } + if (request.method === "POST" && request.url === `/v1/managers/${managerId}/binding-token`) { + bindingTokenBodies.push(await bodyOf(request)) + json(response, 200, { + accessToken: bindingToken, + expiresIn: 300, + tokenType: "Bearer", + managerUrl: managerOrigin, + databaseId: null, + controlPlaneUrl: null, + }) + return + } + json(response, 404, { message: "not found" }) + }) + platformOrigin = await listen(platformServer) +}) + +afterAll(async () => { + await Promise.all([close(platformServer), close(managerServer)]) +}) + +describe("Bindings.forRemoteDeployment (real addon)", () => { + it("discovers the assigned manager and preserves its structured denial", async () => { + const deniedBindings = await Bindings.forRemoteDeployment({ + deploymentId, + token, + apiBaseUrl: platformOrigin, + }) + await expect(deniedBindings.storage("uploads").head("missing.txt")).rejects.toMatchObject({ + code: "FORBIDDEN", + message: "Remote access was revoked", + retryable: false, + }) + // A manager-side authorization rejection refreshes discovery once before + // preserving the second structured denial for the caller. + expect(bindingTokenBodies).toEqual([{ deploymentId }, { deploymentId }]) + expect(resolveBodies).toEqual([ + { deploymentId, resourceId: "uploads" }, + { deploymentId, resourceId: "uploads" }, + ]) + expect(platformAuthorizations).toEqual(Array(4).fill(`Bearer ${token}`)) + expect(managerAuthorizations).toEqual(Array(2).fill(`Bearer ${bindingToken}`)) + }) +}) diff --git a/packages/commands/README.md b/packages/commands/README.md new file mode 100644 index 000000000..0d0eef9ee --- /dev/null +++ b/packages/commands/README.md @@ -0,0 +1,383 @@ +# `@alienplatform/commands` + +Send commands to an Alien deployment, and receive them inside one. A command is a +named JSON call routed to a single resource in a deployment. + +The package is pure TypeScript over `fetch`. No gRPC, no native addon, no Alien +runtime to boot. Its only runtime dependency is `@alienplatform/core`, which +supplies the shared error types and the generated wire schemas. It runs on Node +18 or newer and Bun 1.0.23 or newer, both of which ship a global `fetch`. + +There are two halves. + +- `CommandsClient` creates a command and waits for its response. +- `createCommandReceiver` leases commands over outbound HTTPS and dispatches + them to handlers. + +The Rust crate `alien-commands` is the protocol twin. It speaks the same wire +format and its receiver reads the same environment variables. + +## What it needs + +Commands are brokered by the Alien control plane. This package speaks the +protocol. It does not replace the broker. Sending needs a manager URL, a +deployment id, and a bearer token. Get those from Alien with an API key, or run +your own manager and point `managerUrl` at it. The receiver reaches the same +broker through its own environment variables. + +## Install + +```sh +npm install @alienplatform/commands +``` + +## Sending + +```ts +import { CommandsClient } from "@alienplatform/commands" + +const commands = new CommandsClient({ + managerUrl: process.env.ALIEN_MANAGER_URL ?? "", + deploymentId: process.env.ALIEN_DEPLOYMENT_ID ?? "", + token: process.env.ALIEN_TOKEN ?? "", +}) + +const report = await commands.invoke<{ rows: number }>("generate-report", { + startDate: "2024-01-01", + endDate: "2024-01-31", +}) + +console.log(report.rows) +``` + +`invoke` creates the command, polls until it reaches a terminal state, and +resolves with the decoded success body. The type parameter names the expected +shape. Nothing validates it at runtime. The input is JSON-serialized and sent +inline. Large bodies are promoted to storage-backed presigned transfers by the +server and downloaded transparently on the way back. + +### Targeting a resource + +A deployment can hold several command-capable resources, and two of them may +register the same command name. `target` binds a sender to one resource id. + +```ts +import { CommandsClient } from "@alienplatform/commands" + +const commands = new CommandsClient({ + managerUrl: "https://manager.example.com", + deploymentId: "deployment_123", + token: "deployment_token", +}) + +const api = commands.target("api") +const indexer = commands.target("indexer-daemon") + +const fromApi = await api.invoke<{ role: string }>("status", {}) +const fromIndexer = await indexer.invoke<{ role: string }>("status", {}) + +console.log(fromApi.role, fromIndexer.role) +``` + +`target` returns a `TargetedCommands`, which presets `targetResourceId` on every +invoke. If a caller also passes `options.targetResourceId`, the bound target +wins. + +### Options + +```ts +import { CommandsClient } from "@alienplatform/commands" + +const commands = new CommandsClient({ + managerUrl: "https://manager.example.com", + deploymentId: "deployment_123", + token: "deployment_token", + timeoutMs: 30_000, +}) + +await commands.invoke("generate-report", { month: "2024-01" }, { + timeoutMs: 120_000, + idempotencyKey: "report-2024-01", + targetResourceId: "api", + pollIntervalMs: 250, + maxPollIntervalMs: 2_000, + pollBackoff: 2, +}) +``` + +`CommandsClientConfig`: + +| Field | Default | Meaning | +| --- | --- | --- | +| `managerUrl` | required | Base URL of the command server. A query string on the base is preserved. | +| `deploymentId` | required | Deployment the commands are created against. | +| `token` | required | Bearer token. A deployment token or a workspace token. | +| `timeoutMs` | `60000` | Default polling budget measured from the start of `invoke`. It does not abort in-flight network requests. | +| `allowLocalStorage` | `false` | Allow reading a `local` storage backend response. Local development only. | +| `fetch` | global `fetch` | `fetch` implementation to use. | + +`InvokeOptions`: + +| Field | Default | Meaning | +| --- | --- | --- | +| `timeoutMs` | client `timeoutMs` | Polling budget measured from the start of `invoke`. A create or status request may finish after it elapses. | +| `deadline` | none | Server-side `Date` by which the command must complete. | +| `idempotencyKey` | none | The server dedupes retried creates carrying the same key. | +| `targetResourceId` | none | Resource to route to. A `target(...)` sender overrides it. | +| `pollIntervalMs` | `500` | First status-poll interval. | +| `maxPollIntervalMs` | `5000` | Ceiling for the poll backoff. | +| `pollBackoff` | `1.5` | Poll interval multiplier. | + +## Receiving + +A Worker gets commands pushed to it. A Container or a Daemon cannot accept +inbound connections, so it pulls instead. `createCommandReceiver` runs that pull +loop. It leases commands addressed to its own resource, runs the matching +handler, and submits the response, all over outbound HTTPS. + +```ts +import { createCommandReceiver } from "@alienplatform/commands" + +const receiver = createCommandReceiver() + +receiver.command("status", async () => ({ ok: true, at: new Date().toISOString() })) + +receiver.command("search", async (input, ctx) => { + if (typeof input !== "object" || input === null || !("term" in input)) { + throw new TypeError("term is required") + } + return { term: String(input.term), attempt: ctx.attempt } +}) + +process.on("SIGTERM", () => receiver.stop()) + +await receiver.run() +``` + +`command` parses the payload as JSON and hands it to the handler as `unknown`. +The handler's return value is JSON-encoded and becomes the sender's resolved +value. `run` drives the loop until `stop` is called. `command` and `handleRaw` +both return the receiver, so registrations chain. + +### Environment + +`createCommandReceiver` reads its configuration from `process.env`, or from the +`env` option if you pass one. It synchronously validates required identity, +token-source selection, URL parseability, and numeric tuning. A missing, empty, +or invalid value throws `CommandReceiverConfigInvalidError` (code +`COMMAND_RECEIVER_CONFIG_INVALID`) naming the offending variable in +`context.envVar`. A token file is read when `run` starts, so an unreadable or +empty file rejects `run` asynchronously. `run` also requires the parsed command +URL to use HTTP or HTTPS before the first poll. + +Required identity, plus one token source: + +| Variable | Meaning | +| --- | --- | +| `ALIEN_COMMANDS_URL` | Base URL of the command server. Must parse during construction and use HTTP or HTTPS when `run` starts. | +| `ALIEN_COMMANDS_TOKEN` | Bearer token for outbound lease and submit requests. | +| `ALIEN_COMMANDS_TOKEN_FILE` | File holding that token. Supply this or `ALIEN_COMMANDS_TOKEN`; `run` reads and validates the file. | +| `ALIEN_DEPLOYMENT_ID` | Deployment the leased commands belong to. | +| `ALIEN_COMMANDS_TARGET_RESOURCE_ID` | This resource's id within the deployment. | +| `ALIEN_COMMANDS_TARGET_RESOURCE_TYPE` | `container` or `daemon`, lowercase. Anything else is rejected. | + +`ALIEN_COMMANDS_TARGET_RESOURCE_TYPE` does not accept `worker`. Worker apps +receive pushed commands and never lease. A receiver will not guess its own type. + +At least one token source is required. `ALIEN_COMMANDS_TOKEN` wins when both are +set, and the file is then never read. `ALIEN_COMMANDS_TOKEN_FILE` is re-read once +after a 401, which lets a rotated token take effect without a restart. + +Optional tuning: + +| Variable | Default | Meaning | +| --- | --- | --- | +| `ALIEN_COMMANDS_POLL_INTERVAL_MS` | `5000` | Lease poll interval. | +| `ALIEN_COMMANDS_POLL_MAX_INTERVAL_MS` | `30000` | Ceiling for the empty-poll backoff. Must be at least the poll interval. | +| `ALIEN_COMMANDS_POLL_JITTER` | `0.1` | Fractional randomization on poll sleeps, from 0 to 1. | +| `ALIEN_COMMANDS_LEASE_SECONDS` | `60` | Requested lease duration. | +| `ALIEN_COMMANDS_MAX_LEASES` | `1` | Commands leased per poll, and therefore run concurrently. | +| `ALIEN_COMMANDS_DRAIN_TIMEOUT_MS` | `30000` | Time in-flight handlers get after `stop`. | + +The same values are settable on `createCommandReceiver`, where they win over the +environment. + +```ts +import { createCommandReceiver } from "@alienplatform/commands" + +const receiver = createCommandReceiver({ + maxLeases: 4, + leaseSeconds: 120, + pollIntervalMs: 1_000, + pollMaxIntervalMs: 15_000, + pollJitter: 0.2, + drainTimeoutMs: 10_000, +}) + +receiver.command("ping", async () => "pong") + +await receiver.run() +``` + +### Raw payload bytes + +`ctx.input` is a `Uint8Array` holding the decoded command payload exactly as it +arrived. `command` decodes and JSON-parses it for you. `handleRaw` does not, so +the handler owns the decode. + +```ts +import { createCommandReceiver } from "@alienplatform/commands" + +const receiver = createCommandReceiver() + +receiver.handleRaw("ingest", ctx => { + const text = new TextDecoder().decode(ctx.input) + const payload: unknown = JSON.parse(text) + return { bytes: ctx.input.byteLength, payload, commandId: ctx.commandId } +}) + +receiver.handleRaw("slow-scan", async ctx => { + const budgetMs = ctx.deadline.getTime() - Date.now() + await new Promise(resolve => setTimeout(resolve, 100)) + if (ctx.signal.aborted) { + throw new Error("budget expired") + } + return { budgetMs, target: ctx.target.resourceId } +}) + +await receiver.run() +``` + +`CommandContext` carries `input`, `signal`, `deadline`, `commandId`, `attempt`, +`target`, and an optional `traceContext` with the envelope's W3C `traceparent` +and `tracestate`. + +### Validated input + +Pass a [Standard Schema](https://standardschema.dev) validator between the name +and the handler. Valid input is handed to the handler with the schema's output +type inferred. Invalid input never reaches the handler. + +```ts +import { createCommandReceiver } from "@alienplatform/commands" +import * as z from "zod" + +const SearchInput = z.object({ + term: z.string(), + limit: z.number().int().positive().default(10), +}) + +const receiver = createCommandReceiver() + +receiver.command("search", SearchInput, async input => { + return { term: input.term, limit: input.limit } +}) + +await receiver.run() +``` + +The validator is a plain argument, so no schema library is bundled or required. +Zod is shown here because it implements Standard Schema. + +### Execution budget and delivery + +Each command runs under `min(envelope deadline, lease expiry - 5 seconds)`. +There is no lease-renewal call, so the safety-margined lease expiry always +bounds the budget and leaves room to submit before the lease lapses. +`ctx.deadline` is that effective budget. When it expires, `ctx.signal` fires and +the receiver submits a `HANDLER_TIMEOUT` error response. + +Delivery is at-least-once. A lease that expires without a submitted response is +redelivered. `ctx.attempt` starts at 1, and anything higher means a redelivery, +so handlers must tolerate running more than once for the same command. + +The receiver submits `UNKNOWN_COMMAND` when no handler is registered for a +leased name, a thrown error's non-empty string `code` when it has one, +`HANDLER_ERROR` otherwise, and `HANDLER_TIMEOUT` on budget expiry. + +### Shutdown + +`stop` starts a drain. No new lease poll begins, though a poll already in flight +completes and its leases are dispatched. In-flight handlers get +`drainTimeoutMs` to finish. Whatever is still running is then aborted and its +lease released. `run` resolves once the drain finishes. It rejects instead if a +non-retryable `AlienError` ended the loop. + +## Errors + +Protocol, transport, storage, and receiver-loop failures are `AlienError` +instances from `@alienplatform/core`, which the package re-exports along with +`defineError`. Each definition carries a stable string code. Use `error.code`, +or `error.hasErrorCode(...)` to search a wrapped chain. Invalid caller values +can instead throw native errors before a request is sent—for example, +non-serializable input, an invalid manager URL, or an invalid `deadline` date. + +```ts +import { + AlienError, + CommandsClient, + CommandTimeoutError, + DeploymentCommandError, +} from "@alienplatform/commands" + +const commands = new CommandsClient({ + managerUrl: "https://manager.example.com", + deploymentId: "deployment_123", + token: "deployment_token", +}) + +try { + await commands.target("api").invoke("generate-report", {}) +} catch (error) { + if (!(error instanceof AlienError)) { + throw error + } + if (error.hasErrorCode(DeploymentCommandError.metadata.code)) { + console.error("the handler rejected", error.context) + } else if (error.hasErrorCode(CommandTimeoutError.metadata.code)) { + console.error("no response in time", error.context) + } else { + throw error + } +} +``` + +| Export | Code | Raised by | +| --- | --- | --- | +| `CommandCreationFailedError` | `COMMAND_CREATION_FAILED` | Sender, when the create request fails to reach the server. | +| `CommandStatusFailedError` | `COMMAND_STATUS_FAILED` | Sender, when a status poll fails to reach the server. | +| `CommandTimeoutError` | `COMMAND_TIMEOUT` | Sender, when the polling budget elapses before a terminal state. | +| `CommandExpiredError` | `COMMAND_EXPIRED` | Sender, when the command reaches `EXPIRED`. | +| `DeploymentCommandError` | `DEPLOYMENT_COMMAND_ERROR` | Sender, when the handler returned an error response. | +| `ResponseDecodingFailedError` | `RESPONSE_DECODING_FAILED` | Sender, when a terminal response cannot be decoded. | +| `ManagerHttpError` | `MANAGER_HTTP_ERROR` | Both, on any non-2xx from the command server. | +| `MalformedResponseError` | `MALFORMED_RESPONSE` | Both, when a 2xx body fails its wire schema. | +| `StorageOperationFailedError` | `STORAGE_OPERATION_FAILED` | Both, on a failed presigned upload or download. | +| `InvalidEnvelopeError` | `INVALID_ENVELOPE` | Receiver, on a payload it cannot decode. | +| `CommandReceiverConfigInvalidError` | `COMMAND_RECEIVER_CONFIG_INVALID` | Receiver, on invalid environment configuration. | + +`UNKNOWN_COMMAND`, `HANDLER_ERROR`, and `HANDLER_TIMEOUT` are codes the receiver +submits over the wire rather than error classes it exports. A sender sees them +as the `errorCode` context field on a `DeploymentCommandError`. + +## Exports + +Everything ships from the package root. There are no deep imports. + +- Sender: `CommandsClient`, `TargetedCommands`, and the types + `CommandsClientConfig` and `InvokeOptions`. +- Receiver: `createCommandReceiver`, and the types `CommandReceiver`, + `CommandReceiverOptions`, `CommandContext`, `CommandHandler`, + `RawCommandHandler`, `StandardSchema`, and `StandardSchemaOutput`. +- Errors: the eleven definitions above, plus `AlienError` and `defineError` + re-exported from `@alienplatform/core`. +- Wire protocol types, including `Envelope`, `BodySpec`, `CommandTarget`, + `CommandTargetType`, `CommandState`, `LeaseRequest`, `LeaseResponse`, and + `PresignedRequest`. + +## Example + +[`examples/command-routing-ts`](https://github.com/alienplatform/alien/tree/main/examples/command-routing-ts) +runs both halves against one deployment. A Worker and a Daemon register the same +two command names, the Daemon serves its half with this package's receiver, and a +sender script resolves each name to a different resource with `target`. diff --git a/packages/commands/src/client.ts b/packages/commands/src/client.ts index ac9efe004..2e7ba4ce7 100644 --- a/packages/commands/src/client.ts +++ b/packages/commands/src/client.ts @@ -49,7 +49,7 @@ export interface CommandsClientConfig { deploymentId: string /** Bearer token (deployment token or workspace token). */ token: string - /** Default invoke timeout in milliseconds (default: 60000). */ + /** Default polling budget measured from invoke start (default: 60000). */ timeoutMs?: number /** Allow reading local files for storage responses (default: false, local dev only). */ allowLocalStorage?: boolean @@ -61,7 +61,10 @@ export interface CommandsClientConfig { * Per-invoke options. */ export interface InvokeOptions { - /** Wall-clock timeout in milliseconds (default: the client's `timeoutMs`). */ + /** + * Polling budget measured from invoke start (default: the client's + * `timeoutMs`). It does not abort in-flight network requests. + */ timeoutMs?: number /** Optional server-side deadline for command completion. */ deadline?: Date diff --git a/packages/commands/src/errors.ts b/packages/commands/src/errors.ts index 919b9a358..655c9d141 100644 --- a/packages/commands/src/errors.ts +++ b/packages/commands/src/errors.ts @@ -150,8 +150,9 @@ export const InvalidEnvelopeError = defineError({ /** * Error thrown when the pull receiver's environment configuration is missing or - * invalid. Fails fast (synchronously, from `createCommandReceiver`) and names - * the offending variable in `context.envVar`. + * invalid. Construction-time validation fails synchronously; token-file and + * HTTP(S) validation can reject `run` asynchronously. Both paths name the + * offending variable in `context.envVar`. * * The Rust twin (`alien_commands::Receiver::from_env`) raises the identical code * (`COMMAND_RECEIVER_CONFIG_INVALID`) for the same identity, token-source, and diff --git a/packages/commands/src/receiver.ts b/packages/commands/src/receiver.ts index 126fea012..a94377b50 100644 --- a/packages/commands/src/receiver.ts +++ b/packages/commands/src/receiver.ts @@ -259,12 +259,13 @@ interface ReceiverConfig { /** * Construct the pull receiver from environment configuration. * - * Validates required identity, token source, and numeric tuning values - * **synchronously**. An invalid value throws + * Validates required identity, token-source selection, URL parseability, and + * numeric tuning values **synchronously**. An invalid value throws * {@link CommandReceiverConfigInvalidError} naming the offending variable in - * `context.envVar`. `resourceType` must be - * `container` or `daemon`; `worker` (and anything else) is rejected — a receiver - * must not guess its target type. + * `context.envVar`. Token-file contents and the HTTP(S) URL requirement are + * validated asynchronously when `run` starts. `resourceType` must be + * `container` or `daemon`; `worker` (and anything else) is rejected — a + * receiver must not guess its target type. */ export function createCommandReceiver(options: CommandReceiverOptions = {}): CommandReceiver { const env = options.env ?? (typeof process !== "undefined" ? process.env : {}) diff --git a/packages/package-layout/fixture/src/imports.ts b/packages/package-layout/fixture/src/imports.ts index be5375688..2137260eb 100644 --- a/packages/package-layout/fixture/src/imports.ts +++ b/packages/package-layout/fixture/src/imports.ts @@ -138,6 +138,7 @@ async function checkSdkWorkerRuntime(): Promise { // Public surface table + the shared error primitives re-export (AlienError, // defineError from @alienplatform/core) pinned by the bindings contract. const BINDINGS_EXPORTS = [ + "Bindings", "storage", "kv", "queue", @@ -178,12 +179,18 @@ async function checkBindings(): Promise { } const missing = missingExports(mod, BINDINGS_EXPORTS) + const remoteFactory = (mod.Bindings as { forRemoteDeployment?: unknown } | undefined) + ?.forRemoteDeployment + if (typeof remoteFactory !== "function") missing.push("Bindings.forRemoteDeployment") report({ check: "import", package: "bindings", status: missing.length === 0 ? "pass" : "fail", reason: missing.length === 0 ? "ok" : "missing pinned exports", - evidence: missing.length === 0 ? "resolved storage/kv/queue/vault + error" : missing.join(", "), + evidence: + missing.length === 0 + ? "resolved Bindings.forRemoteDeployment + storage/kv/queue/vault + error" + : missing.join(", "), }) // The first operation against an unconfigured binding must throw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cfef1edd1..e04fc7616 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,3 +5,10 @@ packages: - crates/alien-test-app - crates/alien-bindings-node - tests/e2e/test-apps/* + +overrides: + '@alienplatform/sdk': link:packages/sdk + '@alienplatform/core': link:packages/core + '@alienplatform/typescript-config': link:packages/config-typescript + '@alienplatform/testing': link:packages/testing + '@alienplatform/platform-api': link:client-sdks/platform/typescript diff --git a/scripts/generate-manager-sdk.sh b/scripts/generate-manager-sdk.sh new file mode 100755 index 000000000..c84ad8664 --- /dev/null +++ b/scripts/generate-manager-sdk.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +sdk_dir="${repo_root}/client-sdks/manager/typescript" +schema="${repo_root}/client-sdks/manager/openapi.json" +# The checked-in workflow pins the generator version. Current open-source +# Speakeasy CLIs honor that pin and fetch the matching generator when needed. +command -v speakeasy >/dev/null 2>&1 || { + echo "Speakeasy CLI is required." >&2 + exit 1 +} + +sdk_version="$(node -p "require('${sdk_dir}/package.json').version")" + +speakeasy lint openapi --schema "${schema}" +( + cd "${sdk_dir}" + speakeasy run \ + --target manager-typescript \ + --set-version "${sdk_version}" \ + --skip-versioning \ + --skip-testing \ + --skip-upload-spec \ + --output console +) + +# Speakeasy currently emits whitespace-only indentation and extra blank lines at +# EOF in some generated Markdown. Keep this narrow: normalize only files that +# this run added or changed, including untracked generated Markdown. +while IFS= read -r -d '' markdown_file; do + [[ -f "${sdk_dir}/${markdown_file}" ]] || continue + env LC_ALL=C perl -0pi -e 's/[ \t]+$//mg; s/\n*\z/\n/' "${sdk_dir}/${markdown_file}" +done < <( + { + git -C "${sdk_dir}" diff --relative --name-only -z -- '*.md' + git -C "${sdk_dir}" ls-files --others --exclude-standard -z -- '*.md' + } | sort -zu +) + +if ! git -C "${sdk_dir}" diff --check -- .; then + echo "Generated Manager SDK contains whitespace errors." >&2 + exit 1 +fi + +generated_npm_version="$(node -p "require('${sdk_dir}/package.json').version")" +generated_jsr_version="$(node -p "require('${sdk_dir}/jsr.json').version")" +generated_npm_lock_version="$(node -p "require('${sdk_dir}/package-lock.json').version")" +generated_npm_lock_package_version="$(node -p "require('${sdk_dir}/package-lock.json').packages[''].version")" +generated_examples_lock_version="$(node -p "require('${sdk_dir}/examples/package-lock.json').packages['..'].version")" +generated_workflow_version="$(node -e " + const fs = require('fs'); + const contents = fs.readFileSync('${sdk_dir}/.speakeasy/gen.yaml', 'utf8'); + const match = contents.match(/^typescript:\\n version: ([^\\n]+)$/m); + if (!match) throw new Error('Manager SDK version not found in gen.yaml'); + process.stdout.write(match[1]); +")" +generated_lock_version="$(node -e " + const fs = require('fs'); + const contents = fs.readFileSync('${sdk_dir}/.speakeasy/gen.lock', 'utf8'); + const match = contents.match(/^ releaseVersion: ([^\\n]+)$/m); + if (!match) throw new Error('Manager SDK releaseVersion not found in gen.lock'); + process.stdout.write(match[1]); +")" +if [[ "${generated_npm_version}" != "${sdk_version}" \ + || "${generated_jsr_version}" != "${sdk_version}" \ + || "${generated_npm_lock_version}" != "${sdk_version}" \ + || "${generated_npm_lock_package_version}" != "${sdk_version}" \ + || "${generated_examples_lock_version}" != "${sdk_version}" \ + || "${generated_workflow_version}" != "${sdk_version}" \ + || "${generated_lock_version}" != "${sdk_version}" ]]; then + echo "Generated SDK version drifted from ${sdk_version}: npm=${generated_npm_version}, jsr=${generated_jsr_version}, npm-lock=${generated_npm_lock_version}, npm-lock-package=${generated_npm_lock_package_version}, examples-lock=${generated_examples_lock_version}, workflow=${generated_workflow_version}, generator-lock=${generated_lock_version}." >&2 + exit 1 +fi + +pnpm -C "${sdk_dir}" build diff --git a/scripts/generate-platform-sdk.sh b/scripts/generate-platform-sdk.sh new file mode 100755 index 000000000..726012409 --- /dev/null +++ b/scripts/generate-platform-sdk.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash + +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +sdk_dir="${repo_root}/client-sdks/platform/typescript" +schema="${repo_root}/client-sdks/platform/openapi.json" + +# The checked-in workflow pins the generator version. Current open-source +# Speakeasy CLIs honor that pin and fetch the matching generator when needed. +command -v speakeasy >/dev/null 2>&1 || { + echo "Speakeasy CLI is required." >&2 + exit 1 +} + +sdk_version="$(node -p "require('${sdk_dir}/package.json').version")" + +speakeasy lint openapi --schema "${schema}" +( + cd "${sdk_dir}" + speakeasy run \ + --target platform-typescript \ + --set-version "${sdk_version}" \ + --skip-versioning \ + --skip-testing \ + --skip-compile \ + --skip-upload-spec \ + --output console +) + +# Keep emitted declarations rooted under src. Isolated npm release builds use +# TypeScript's package-local dependency graph and require this boundary. +env LC_ALL=C perl -0pi -e \ + 's/^ "rootDir": "src",\n//mg; s/(^ "sourceMap": true,\n)/$1 "rootDir": "src",\n/m' \ + "${sdk_dir}/tsconfig.json" +if ! grep -q '^ "rootDir": "src",$' "${sdk_dir}/tsconfig.json"; then + echo "Failed to preserve the Platform SDK TypeScript rootDir." >&2 + exit 1 +fi + +# Speakeasy can emit trailing whitespace in generated Markdown. Normalize only +# files added or changed by this generation run. +while IFS= read -r -d '' markdown_file; do + [[ -f "${sdk_dir}/${markdown_file}" ]] || continue + env LC_ALL=C perl -0pi -e 's/[ \t]+$//mg; s/\n*\z/\n/' "${sdk_dir}/${markdown_file}" +done < <( + { + git -C "${sdk_dir}" diff --relative --name-only -z -- '*.md' + git -C "${sdk_dir}" ls-files --others --exclude-standard -z -- '*.md' + } | sort -zu +) + +if ! git -C "${sdk_dir}" diff --check -- .; then + echo "Generated Platform SDK contains whitespace errors." >&2 + exit 1 +fi + +# Speakeasy does not currently update the npm lock's embedded package version. +# Keep it aligned with the generated publish manifests. +node -e " + const fs = require('fs'); + const path = '${sdk_dir}/package-lock.json'; + const lock = JSON.parse(fs.readFileSync(path, 'utf8')); + lock.version = '${sdk_version}'; + lock.packages[''].version = '${sdk_version}'; + fs.writeFileSync(path, JSON.stringify(lock, null, 2) + '\\n'); +" + +generated_npm_version="$(node -p "require('${sdk_dir}/package.json').version")" +generated_jsr_version="$(node -p "require('${sdk_dir}/jsr.json').version")" +generated_npm_lock_version="$(node -p "require('${sdk_dir}/package-lock.json').version")" +generated_npm_lock_package_version="$(node -p "require('${sdk_dir}/package-lock.json').packages[''].version")" +generated_workflow_version="$(node -e " + const fs = require('fs'); + const contents = fs.readFileSync('${sdk_dir}/.speakeasy/gen.yaml', 'utf8'); + const match = contents.match(/^typescript:\\n version: ([^\\n]+)$/m); + if (!match) throw new Error('Platform SDK version not found in gen.yaml'); + process.stdout.write(match[1]); +")" +generated_lock_version="$(node -e " + const fs = require('fs'); + const contents = fs.readFileSync('${sdk_dir}/.speakeasy/gen.lock', 'utf8'); + const match = contents.match(/^ releaseVersion: ([^\\n]+)$/m); + if (!match) throw new Error('Platform SDK releaseVersion not found in gen.lock'); + process.stdout.write(match[1]); +")" +if [[ "${generated_npm_version}" != "${sdk_version}" \ + || "${generated_jsr_version}" != "${sdk_version}" \ + || "${generated_npm_lock_version}" != "${sdk_version}" \ + || "${generated_npm_lock_package_version}" != "${sdk_version}" \ + || "${generated_workflow_version}" != "${sdk_version}" \ + || "${generated_lock_version}" != "${sdk_version}" ]]; then + echo "Generated SDK version drifted from ${sdk_version}: npm=${generated_npm_version}, jsr=${generated_jsr_version}, npm-lock=${generated_npm_lock_version}, npm-lock-package=${generated_npm_lock_package_version}, workflow=${generated_workflow_version}, generator-lock=${generated_lock_version}." >&2 + exit 1 +fi + +NODE_OPTIONS=--max-old-space-size=8192 pnpm -C "${sdk_dir}" build diff --git a/scripts/manager-sdk-wire.test.mjs b/scripts/manager-sdk-wire.test.mjs new file mode 100644 index 000000000..1d9b8d9eb --- /dev/null +++ b/scripts/manager-sdk-wire.test.mjs @@ -0,0 +1,63 @@ +import assert from "node:assert/strict" +import test from "node:test" + +import { AlienManager } from "../client-sdks/manager/typescript/esm/index.js" + +test("resolveBinding sends an HTTP bearer token and parses the typed response", async () => { + const expectedRequest = { + deploymentId: "deployment-123", + resourceId: "storage-456", + } + const expectedResponse = { + binding: { + bucketName: "alien-remote-storage", + }, + clientConfig: { + accountId: "123456789012", + credentials: { + accessKeyId: "ASIAEXAMPLE", + expiresAt: "2026-07-21T14:30:00Z", + secretAccessKey: "secret-access-key", + sessionToken: "session-token", + type: "sessionCredentials", + }, + region: "ap-northeast-1", + }, + expiresAt: "2026-07-21T14:30:00Z", + service: "s3", + } + const requests = [] + const originalFetch = globalThis.fetch + + globalThis.fetch = async (input, init) => { + const request = input instanceof Request ? input : new Request(input, init) + requests.push(request.clone()) + return new Response(JSON.stringify(expectedResponse), { + status: 200, + headers: { "content-type": "application/json" }, + }) + } + + try { + const manager = new AlienManager({ + bearer: "manager-token", + serverURL: "https://manager.example.test", + }) + + const response = await manager.bindings.resolveBinding(expectedRequest) + + assert.equal(requests.length, 1) + const [request] = requests + assert.ok(request instanceof Request) + assert.equal(request.method, "POST") + assert.equal(request.url, "https://manager.example.test/v1/bindings/resolve") + assert.equal(request.headers.get("authorization"), "Bearer manager-token") + assert.equal(request.headers.get("content-type"), "application/json") + assert.deepStrictEqual(await request.json(), expectedRequest) + assert.deepStrictEqual(response, expectedResponse) + assert.equal(response.service, "s3") + assert.equal(response.clientConfig.credentials.type, "sessionCredentials") + } finally { + globalThis.fetch = originalFetch + } +}) diff --git a/scripts/platform-sdk-command-token-wire.test.mjs b/scripts/platform-sdk-command-token-wire.test.mjs new file mode 100644 index 000000000..9312d9c91 --- /dev/null +++ b/scripts/platform-sdk-command-token-wire.test.mjs @@ -0,0 +1,80 @@ +import assert from "node:assert/strict" +import test from "node:test" + +import { Alien } from "../client-sdks/platform/typescript/esm/index.js" + +const managerId = "mgr_enxscjrqiiu2lrc672hwwuc5tv5y" + +async function assertTokenCall({ path, requestBody, accessToken, invoke }) { + const expectedResponse = { + accessToken, + expiresIn: 300, + tokenType: "Bearer", + managerUrl: "https://manager.example.test", + databaseId: null, + controlPlaneUrl: null, + } + const requests = [] + const originalFetch = globalThis.fetch + + globalThis.fetch = async (input, init) => { + const request = input instanceof Request ? input : new Request(input, init) + requests.push(request.clone()) + return new Response(JSON.stringify(expectedResponse), { + status: 200, + headers: { "content-type": "application/json" }, + }) + } + + try { + const platform = new Alien({ + apiKey: "platform-token", + serverURL: "https://api.example.test", + }) + const response = await invoke(platform) + + assert.equal(requests.length, 1) + const [request] = requests + assert.ok(request instanceof Request) + assert.equal(request.method, "POST") + assert.equal(request.url, `https://api.example.test/v1/managers/${managerId}/${path}`) + assert.equal(request.headers.get("authorization"), "Bearer platform-token") + assert.equal(request.headers.get("content-type"), "application/json") + assert.deepStrictEqual(await request.json(), requestBody) + assert.deepStrictEqual(response, expectedResponse) + } finally { + globalThis.fetch = originalFetch + } +} + +test("generateManagerCommandToken sends an HTTP bearer token and parses the typed response", () => { + const requestBody = { + commandId: "cmd_2sxjXxvOYct7IohT3ukliAzf7Nzb", + } + return assertTokenCall({ + path: "command-token", + requestBody, + accessToken: "manager-command-token", + invoke: platform => + platform.managers.generateManagerCommandToken({ + id: managerId, + generateManagerCommandTokenRequest: requestBody, + }), + }) +}) + +test("generateManagerBindingToken sends only the deployment scope and parses the typed response", () => { + const requestBody = { + deploymentId: "dep_2sxjXxvOYct7IohT3ukliAzf7Nzb", + } + return assertTokenCall({ + path: "binding-token", + requestBody, + accessToken: "manager-binding-token", + invoke: platform => + platform.managers.generateManagerBindingToken({ + id: managerId, + generateManagerBindingTokenRequest: requestBody, + }), + }) +}) diff --git a/scripts/test-examples-local.sh b/scripts/test-examples-local.sh index 51555a4f5..fb26cc3e0 100755 --- a/scripts/test-examples-local.sh +++ b/scripts/test-examples-local.sh @@ -10,25 +10,20 @@ set -euo pipefail # # Strategy: # 1. Build local CLI + local TS packages that examples consume. -# 2. Temporarily inject `pnpm.overrides` into examples/package.json pointing to -# local file paths in this checkout. +# 2. Use the local package overrides committed in examples/pnpm-workspace.yaml. # 3. Install + run example tests from examples/ as if examples were standalone. -# 4. Always restore examples/package.json (trap cleanup), even on failures. +# 4. Always restore the examples lockfile (trap cleanup), even on failures. ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT_DIR" EXAMPLES_DIR="$ROOT_DIR/examples" -EXAMPLES_PACKAGE_JSON="$EXAMPLES_DIR/package.json" EXAMPLES_LOCK_FILE="$EXAMPLES_DIR/pnpm-lock.yaml" -EXAMPLES_PACKAGE_JSON_BACKUP="$(mktemp)" EXAMPLES_LOCK_FILE_BACKUP="$(mktemp)" -cp "$EXAMPLES_PACKAGE_JSON" "$EXAMPLES_PACKAGE_JSON_BACKUP" cp "$EXAMPLES_LOCK_FILE" "$EXAMPLES_LOCK_FILE_BACKUP" cleanup() { - cp "$EXAMPLES_PACKAGE_JSON_BACKUP" "$EXAMPLES_PACKAGE_JSON" cp "$EXAMPLES_LOCK_FILE_BACKUP" "$EXAMPLES_LOCK_FILE" - rm -f "$EXAMPLES_PACKAGE_JSON_BACKUP" "$EXAMPLES_LOCK_FILE_BACKUP" + rm -f "$EXAMPLES_LOCK_FILE_BACKUP" } trap cleanup EXIT @@ -54,30 +49,6 @@ if (( ${#build_filters[@]} > 0 )); then pnpm -r "${build_filters[@]}" run build fi -node - "$EXAMPLES_PACKAGE_JSON" "$ROOT_DIR" <<'NODE' -const fs = require("fs"); -const path = require("path"); - -const packageJsonPath = process.argv[2]; -const rootDir = process.argv[3]; - -const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); -packageJson.pnpm = packageJson.pnpm || {}; -// Local-only override wiring for this test run. -// This avoids requiring workspace links or committed ../ paths in examples. -packageJson.pnpm.overrides = { - ...(packageJson.pnpm.overrides || {}), - "@alienplatform/platform-api": `file:${path.join(rootDir, "client-sdks/platform/typescript")}`, - "@alienplatform/core": `file:${path.join(rootDir, "packages/core")}`, - "@alienplatform/bindings": `file:${path.join(rootDir, "packages/bindings")}`, - "@alienplatform/commands": `file:${path.join(rootDir, "packages/commands")}`, - "@alienplatform/sdk": `file:${path.join(rootDir, "packages/sdk")}`, - "@alienplatform/testing": `file:${path.join(rootDir, "packages/testing")}` -}; - -fs.writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`); -NODE - pnpm -C "$EXAMPLES_DIR" install \ --force \ --no-frozen-lockfile \ diff --git a/tests/e2e/test-apps/comprehensive-rust/alien.ts b/tests/e2e/test-apps/comprehensive-rust/alien.ts index 942ef3d75..47ddf235d 100644 --- a/tests/e2e/test-apps/comprehensive-rust/alien.ts +++ b/tests/e2e/test-apps/comprehensive-rust/alien.ts @@ -4,6 +4,10 @@ import * as alien from "@alienplatform/core" // so declaring it on a cloud target would ask the executor to provision a backend with no registered // controller. Gate on the target platform the e2e harness exposes to config evaluation. const isLocal = process.env.ALIEN_TARGET_PLATFORM === "local" +// Remote Storage is intentionally limited to native AWS/GCP/Azure deployments. +const supportsRemoteStorage = ["aws", "gcp", "azure"].includes( + process.env.ALIEN_TARGET_PLATFORM ?? "", +) const storage = new alien.Storage("alien-storage").build() const artifactRegistry = new alien.ArtifactRegistry("test-alien-artifact-registry").build() @@ -76,7 +80,7 @@ let stackBuilder = new alien.Stack("alien-rs-stack") }, }, }) - .add(storage, "frozen") + .add(storage, "frozen", { remoteAccess: supportsRemoteStorage }) .add(artifactRegistry, "frozen") .add(vault, "frozen") .add(kv, "frozen") diff --git a/tests/e2e/test-apps/comprehensive-rust/src/handlers/queue.rs b/tests/e2e/test-apps/comprehensive-rust/src/handlers/queue.rs index 6e1304bb7..f6eeaeafb 100644 --- a/tests/e2e/test-apps/comprehensive-rust/src/handlers/queue.rs +++ b/tests/e2e/test-apps/comprehensive-rust/src/handlers/queue.rs @@ -49,7 +49,7 @@ pub async fn test_queue( let payload = MessagePayload::Json(serde_json::json!({ "hello": "world", "binding": binding_name })); queue - .send(&binding_name, payload) + .send(payload) .await .into_alien_error() .context(ErrorData::QueueOperationFailed { @@ -57,16 +57,17 @@ pub async fn test_queue( })?; // Receive up to 1 message - let messages = queue - .receive(&binding_name, 1) - .await - .into_alien_error() - .context(ErrorData::QueueOperationFailed { - operation: "Failed to receive message".to_string(), - })?; + let messages = + queue + .receive(1) + .await + .into_alien_error() + .context(ErrorData::QueueOperationFailed { + operation: "Failed to receive message".to_string(), + })?; if let Some(msg) = messages.into_iter().next() { queue - .ack(&binding_name, &msg.receipt_handle) + .ack(&msg.receipt_handle) .await .into_alien_error() .context(ErrorData::QueueOperationFailed { @@ -122,7 +123,7 @@ pub async fn send_queue_message( let payload = MessagePayload::Json(serde_json::json!({ "marker": request.marker })); queue - .send(&binding_name, payload) + .send(payload) .await .into_alien_error() .context(ErrorData::QueueOperationFailed { diff --git a/tests/e2e/test-apps/comprehensive-typescript/alien.ts b/tests/e2e/test-apps/comprehensive-typescript/alien.ts index d0f7a1098..e63e91c02 100644 --- a/tests/e2e/test-apps/comprehensive-typescript/alien.ts +++ b/tests/e2e/test-apps/comprehensive-typescript/alien.ts @@ -4,6 +4,10 @@ import * as alien from "@alienplatform/core" // so declaring it on a cloud target would ask the executor to provision a backend with no registered // controller. Gate on the target platform the e2e harness exposes to config evaluation. const isLocal = process.env.ALIEN_TARGET_PLATFORM === "local" +// Remote Storage is intentionally limited to native AWS/GCP/Azure deployments. +const supportsRemoteStorage = ["aws", "gcp", "azure"].includes( + process.env.ALIEN_TARGET_PLATFORM ?? "", +) const storage = new alien.Storage("alien-storage").build() const vault = new alien.Vault("alien-vault").build() @@ -69,7 +73,7 @@ let stackBuilder = new alien.Stack("alien-ts-stack") }, }, }) - .add(storage, "frozen") + .add(storage, "frozen", { remoteAccess: supportsRemoteStorage }) .add(vault, "frozen") .add(kv, "frozen") .add(queue, "frozen")